diff --git a/APP_Framework/Framework/connection/lora/e220/e220.c b/APP_Framework/Framework/connection/lora/e220/e220.c index 3a028817e..4b4c93caf 100644 --- a/APP_Framework/Framework/connection/lora/e220/e220.c +++ b/APP_Framework/Framework/connection/lora/e220/e220.c @@ -28,7 +28,7 @@ #endif #ifdef AS_LORA_CLIENT_ROLE -#define E220_ADDRESS 0xFFFF +#define E220_ADDRESS ADAPTER_LORA_NET_ROLE_ID #endif #define E220_UART_BAUD_RATE 9600 @@ -289,6 +289,9 @@ static int E220Open(struct Adapter *adapter) cfg.port_configure = PORT_CFG_INIT; #endif + //serial receive timeout 100s + cfg.serial_timeout = 100000; + struct PrivIoctlCfg ioctl_cfg; ioctl_cfg.ioctl_driver_type = SERIAL_TYPE; ioctl_cfg.args = &cfg; @@ -387,14 +390,22 @@ static int E220Recv(struct Adapter *adapter, void *buf, size_t len) uint8 *recv_buf = PrivMalloc(len); recv_len = PrivRead(adapter->fd, recv_buf, len); - while (recv_len < len) { - recv_len_continue = PrivRead(adapter->fd, recv_buf + recv_len, len - recv_len); - - recv_len += recv_len_continue; + if (recv_len) { + while (recv_len < len) { + printf("recv_len %u len %u\n", recv_len, len); + recv_len_continue = PrivRead(adapter->fd, recv_buf + recv_len, len - recv_len); + if (recv_len_continue) { + printf("recv_len_continue %u\n", recv_len); + recv_len += recv_len_continue; + printf("recv_len done %u\n", recv_len); + } else { + recv_len = 0; + break; + } + } + memcpy(buf, recv_buf, len); } - memcpy(buf, recv_buf, recv_len); - PrivFree(recv_buf); return recv_len; @@ -467,7 +478,7 @@ static void LoraOpen(void) static void LoraRead(void *parameter) { int RevLen; - uint8 i, cnt = 0; + int i, cnt = 0; uint8 buffer[256]; @@ -481,11 +492,11 @@ static void LoraRead(void *parameter) while (1) { - KPrintf("ready to read lora data\n"); + printf("ready to read lora data\n"); RevLen = E220Recv(adapter, buffer, 256); if (RevLen) { - KPrintf("lora get data %u\n", RevLen); + printf("lora get data %u\n", RevLen); for (i = 0; i < RevLen; i ++) { printf("i %u data 0x%x\n", i, buffer[i]); } diff --git a/APP_Framework/Framework/transform_layer/xizi/transform.h b/APP_Framework/Framework/transform_layer/xizi/transform.h index ae0d380e4..341709a65 100644 --- a/APP_Framework/Framework/transform_layer/xizi/transform.h +++ b/APP_Framework/Framework/transform_layer/xizi/transform.h @@ -127,6 +127,7 @@ struct SerialDataCfg uint8_t serial_bit_order; uint8_t serial_invert_mode; uint16_t serial_buffer_size; + int32 serial_timeout; uint8_t ext_uart_no; enum ExtSerialPortConfigure port_configure; diff --git a/Ubiquitous/XiZi/board/aiit-arm32-board/third_party_driver/uart/connect_usart.c b/Ubiquitous/XiZi/board/aiit-arm32-board/third_party_driver/uart/connect_usart.c index 32f8cda32..f8d0ca8a2 100644 --- a/Ubiquitous/XiZi/board/aiit-arm32-board/third_party_driver/uart/connect_usart.c +++ b/Ubiquitous/XiZi/board/aiit-arm32-board/third_party_driver/uart/connect_usart.c @@ -255,6 +255,10 @@ static void SerialCfgParamCheck(struct SerialCfgParam *serial_cfg_default, struc if((data_cfg_default->serial_stop_bits != data_cfg_new->serial_stop_bits) && (data_cfg_new->serial_stop_bits)) { data_cfg_default->serial_stop_bits = data_cfg_new->serial_stop_bits; } + + if ((data_cfg_default->serial_timeout != data_cfg_new->serial_timeout) && (data_cfg_new->serial_timeout)) { + data_cfg_default->serial_timeout = data_cfg_new->serial_timeout; + } } static uint32 Stm32SerialInit(struct SerialDriver *serial_drv, struct BusConfigureInfo *configure_info) @@ -269,6 +273,12 @@ static uint32 Stm32SerialInit(struct SerialDriver *serial_drv, struct BusConfigu SerialCfgParamCheck(serial_cfg, serial_cfg_new); } + struct SerialHardwareDevice *serial_dev = (struct SerialHardwareDevice *)serial_drv->driver.owner_bus->owner_haldev; + struct SerialDevParam *dev_param = (struct SerialDevParam *)serial_dev->haldev.private_data; + + // config serial receive sem timeout + dev_param->serial_timeout = serial_cfg->data_cfg.serial_timeout; + USART_InitTypeDef USART_InitStructure; USART_InitStructure.USART_BaudRate = serial_cfg->data_cfg.serial_baud_rate; @@ -584,6 +594,7 @@ static const struct SerialDataCfg data_cfg_init = .serial_bit_order = BIT_ORDER_LSB, .serial_invert_mode = NRZ_NORMAL, .serial_buffer_size = SERIAL_RB_BUFSZ, + .serial_timeout = WAITING_FOREVER, }; /*manage the serial device operations*/ diff --git a/Ubiquitous/XiZi/board/aiit-riscv64-board/third_party_driver/uart/connect_uart.c b/Ubiquitous/XiZi/board/aiit-riscv64-board/third_party_driver/uart/connect_uart.c index c38032381..4e9a00dda 100644 --- a/Ubiquitous/XiZi/board/aiit-riscv64-board/third_party_driver/uart/connect_uart.c +++ b/Ubiquitous/XiZi/board/aiit-riscv64-board/third_party_driver/uart/connect_uart.c @@ -101,6 +101,10 @@ static void SerialCfgParamCheck(struct SerialCfgParam *serial_cfg_default, struc if ((data_cfg_default->serial_stop_bits != data_cfg_new->serial_stop_bits) && (data_cfg_new->serial_stop_bits)) { data_cfg_default->serial_stop_bits = data_cfg_new->serial_stop_bits; } + + if ((data_cfg_default->serial_timeout != data_cfg_new->serial_timeout) && (data_cfg_new->serial_timeout)) { + data_cfg_default->serial_timeout = data_cfg_new->serial_timeout; + } } /* UARTHS ISR */ @@ -144,6 +148,12 @@ static uint32 SerialHsInit(struct SerialDriver *serial_drv, struct BusConfigureI SerialCfgParamCheck(serial_cfg, serial_cfg_new); } + struct SerialHardwareDevice *serial_dev = (struct SerialHardwareDevice *)serial_drv->driver.owner_bus->owner_haldev; + struct SerialDevParam *dev_param = (struct SerialDevParam *)serial_dev->haldev.private_data; + + // config serial receive sem timeout + dev_param->serial_timeout = serial_cfg->data_cfg.serial_timeout; + uint32 freq_hs = SysctlClockGetFreq(SYSCTL_CLOCK_CPU); uint16 div_hs = freq_hs / serial_cfg->data_cfg.serial_baud_rate - 1; @@ -221,6 +231,12 @@ static uint32 SerialInit(struct SerialDriver *serial_drv, struct BusConfigureInf SerialCfgParamCheck(serial_cfg, serial_cfg_new); } + struct SerialHardwareDevice *serial_dev = (struct SerialHardwareDevice *)serial_drv->driver.owner_bus->owner_haldev; + struct SerialDevParam *dev_param = (struct SerialDevParam *)serial_dev->haldev.private_data; + + // config serial receive sem timeout + dev_param->serial_timeout = serial_cfg->data_cfg.serial_timeout; + UartBitwidthPointer DataWidth = (UartBitwidthPointer)serial_cfg->data_cfg.serial_data_bits; UartStopbitT stopbit = (UartStopbitT)(serial_cfg->data_cfg.serial_stop_bits - 1); UartParityT parity = (UartParityT)(serial_cfg->data_cfg.serial_parity_mode - 1); @@ -390,6 +406,7 @@ static const struct SerialDataCfg data_cfg_init = .serial_bit_order = BIT_ORDER_LSB, .serial_invert_mode = NRZ_NORMAL, .serial_buffer_size = SERIAL_RB_BUFSZ, + .serial_timeout = WAITING_FOREVER, }; /*manage the serial high speed device operations*/ diff --git a/Ubiquitous/XiZi/board/cortex-m0-emulator/connect_uart.c b/Ubiquitous/XiZi/board/cortex-m0-emulator/connect_uart.c index ad74c4bf7..8cc0e8975 100644 --- a/Ubiquitous/XiZi/board/cortex-m0-emulator/connect_uart.c +++ b/Ubiquitous/XiZi/board/cortex-m0-emulator/connect_uart.c @@ -71,6 +71,10 @@ static void SerialCfgParamCheck(struct SerialCfgParam *serial_cfg_default, struc if ((data_cfg_default->serial_stop_bits != data_cfg_new->serial_stop_bits) && (data_cfg_new->serial_stop_bits)) { data_cfg_default->serial_stop_bits = data_cfg_new->serial_stop_bits; } + + if ((data_cfg_default->serial_timeout != data_cfg_new->serial_timeout) && (data_cfg_new->serial_timeout)) { + data_cfg_default->serial_timeout = data_cfg_new->serial_timeout; + } } static void UartHandler(struct SerialBus *serial_bus, struct SerialDriver *serial_drv) @@ -112,6 +116,12 @@ static uint32 SerialInit(struct SerialDriver *serial_drv, struct BusConfigureInf { NULL_PARAM_CHECK(serial_drv); + struct SerialHardwareDevice *serial_dev = (struct SerialHardwareDevice *)serial_drv->driver.owner_bus->owner_haldev; + struct SerialDevParam *dev_param = (struct SerialDevParam *)serial_dev->haldev.private_data; + + // config serial receive sem timeout + dev_param->serial_timeout = serial_cfg->data_cfg.serial_timeout; + return EOK; } @@ -173,6 +183,7 @@ static const struct SerialDataCfg data_cfg_init = .serial_bit_order = BIT_ORDER_LSB, .serial_invert_mode = NRZ_NORMAL, .serial_buffer_size = SERIAL_RB_BUFSZ, + .serial_timeout = WAITING_FOREVER, }; /*manage the serial device operations*/ diff --git a/Ubiquitous/XiZi/board/cortex-m3-emulator/connect_uart.c b/Ubiquitous/XiZi/board/cortex-m3-emulator/connect_uart.c index 4f10a3d6e..3c378709b 100644 --- a/Ubiquitous/XiZi/board/cortex-m3-emulator/connect_uart.c +++ b/Ubiquitous/XiZi/board/cortex-m3-emulator/connect_uart.c @@ -73,6 +73,10 @@ static void SerialCfgParamCheck(struct SerialCfgParam *serial_cfg_default, struc if ((data_cfg_default->serial_stop_bits != data_cfg_new->serial_stop_bits) && (data_cfg_new->serial_stop_bits)) { data_cfg_default->serial_stop_bits = data_cfg_new->serial_stop_bits; } + + if ((data_cfg_default->serial_timeout != data_cfg_new->serial_timeout) && (data_cfg_new->serial_timeout)) { + data_cfg_default->serial_timeout = data_cfg_new->serial_timeout; + } } static void UartHandler(struct SerialBus *serial_bus, struct SerialDriver *serial_drv) @@ -113,6 +117,12 @@ static uint32 SerialInit(struct SerialDriver *serial_drv, struct BusConfigureInf { NULL_PARAM_CHECK(serial_drv); + struct SerialHardwareDevice *serial_dev = (struct SerialHardwareDevice *)serial_drv->driver.owner_bus->owner_haldev; + struct SerialDevParam *dev_param = (struct SerialDevParam *)serial_dev->haldev.private_data; + + // config serial receive sem timeout + dev_param->serial_timeout = serial_cfg->data_cfg.serial_timeout; + return EOK; } @@ -195,6 +205,7 @@ static const struct SerialDataCfg data_cfg_init = .serial_bit_order = BIT_ORDER_LSB, .serial_invert_mode = NRZ_NORMAL, .serial_buffer_size = SERIAL_RB_BUFSZ, + .serial_timeout = WAITING_FOREVER, }; /*manage the serial device operations*/ diff --git a/Ubiquitous/XiZi/board/cortex-m4-emulator/third_party_driver/uart/connect_usart.c b/Ubiquitous/XiZi/board/cortex-m4-emulator/third_party_driver/uart/connect_usart.c index 9ff17887b..dfe753aa6 100644 --- a/Ubiquitous/XiZi/board/cortex-m4-emulator/third_party_driver/uart/connect_usart.c +++ b/Ubiquitous/XiZi/board/cortex-m4-emulator/third_party_driver/uart/connect_usart.c @@ -256,6 +256,10 @@ static void SerialCfgParamCheck(struct SerialCfgParam *serial_cfg_default, struc if((data_cfg_default->serial_stop_bits != data_cfg_new->serial_stop_bits) && (data_cfg_new->serial_stop_bits)) { data_cfg_default->serial_stop_bits = data_cfg_new->serial_stop_bits; } + + if ((data_cfg_default->serial_timeout != data_cfg_new->serial_timeout) && (data_cfg_new->serial_timeout)) { + data_cfg_default->serial_timeout = data_cfg_new->serial_timeout; + } } static uint32 Stm32SerialInit(struct SerialDriver *serial_drv, struct BusConfigureInfo *configure_info) @@ -270,6 +274,12 @@ static uint32 Stm32SerialInit(struct SerialDriver *serial_drv, struct BusConfigu SerialCfgParamCheck(serial_cfg, serial_cfg_new); } + struct SerialHardwareDevice *serial_dev = (struct SerialHardwareDevice *)serial_drv->driver.owner_bus->owner_haldev; + struct SerialDevParam *dev_param = (struct SerialDevParam *)serial_dev->haldev.private_data; + + // config serial receive sem timeout + dev_param->serial_timeout = serial_cfg->data_cfg.serial_timeout; + USART_InitTypeDef USART_InitStructure; USART_InitStructure.USART_BaudRate = serial_cfg->data_cfg.serial_baud_rate; @@ -578,6 +588,7 @@ static const struct SerialDataCfg data_cfg_init = .serial_bit_order = BIT_ORDER_LSB, .serial_invert_mode = NRZ_NORMAL, .serial_buffer_size = SERIAL_RB_BUFSZ, + .serial_timeout = WAITING_FOREVER, }; /*manage the serial device operations*/ diff --git a/Ubiquitous/XiZi/board/gapuino/third_party_driver/uart/connect_uart.c b/Ubiquitous/XiZi/board/gapuino/third_party_driver/uart/connect_uart.c index c9360d9c1..23661ad47 100755 --- a/Ubiquitous/XiZi/board/gapuino/third_party_driver/uart/connect_uart.c +++ b/Ubiquitous/XiZi/board/gapuino/third_party_driver/uart/connect_uart.c @@ -58,6 +58,10 @@ static void SerialCfgParamCheck(struct SerialCfgParam *serial_cfg_default, struc if ((data_cfg_default->serial_stop_bits != data_cfg_new->serial_stop_bits) && (data_cfg_new->serial_stop_bits)) { data_cfg_default->serial_stop_bits = data_cfg_new->serial_stop_bits; } + + if ((data_cfg_default->serial_timeout != data_cfg_new->serial_timeout) && (data_cfg_new->serial_timeout)) { + data_cfg_default->serial_timeout = data_cfg_new->serial_timeout; + } } static void UartRxIsr(void *arg) @@ -79,6 +83,12 @@ static uint32 SerialInit(struct SerialDriver *serial_drv, struct BusConfigureInf SerialCfgParamCheck(serial_cfg, serial_cfg_new); } + struct SerialHardwareDevice *serial_dev = (struct SerialHardwareDevice *)serial_drv->driver.owner_bus->owner_haldev; + struct SerialDevParam *dev_param = (struct SerialDevParam *)serial_dev->haldev.private_data; + + // config serial receive sem timeout + dev_param->serial_timeout = serial_cfg->data_cfg.serial_timeout; + struct gap8_udma_peripheral *uart_udma = (struct gap8_udma_peripheral *)serial_cfg->hw_cfg.private_data; uart_reg_t *uart_reg = (uart_reg_t *)uart_udma->regs; uint32_t cfg_reg = 0; @@ -202,6 +212,7 @@ static const struct SerialDataCfg data_cfg_init = .serial_bit_order = BIT_ORDER_LSB, .serial_invert_mode = NRZ_NORMAL, .serial_buffer_size = SERIAL_RB_BUFSZ, + .serial_timeout = WAITING_FOREVER, }; static struct gap8_udma_peripheral gap8_udma = diff --git a/Ubiquitous/XiZi/board/gd32vf103_rvstar/third_party_driver/uart/connect_uart.c b/Ubiquitous/XiZi/board/gd32vf103_rvstar/third_party_driver/uart/connect_uart.c index 833b890fc..bef8ff1de 100755 --- a/Ubiquitous/XiZi/board/gd32vf103_rvstar/third_party_driver/uart/connect_uart.c +++ b/Ubiquitous/XiZi/board/gd32vf103_rvstar/third_party_driver/uart/connect_uart.c @@ -58,6 +58,10 @@ static void SerialCfgParamCheck(struct SerialCfgParam *serial_cfg_default, struc if ((data_cfg_default->serial_stop_bits != data_cfg_new->serial_stop_bits) && (data_cfg_new->serial_stop_bits)) { data_cfg_default->serial_stop_bits = data_cfg_new->serial_stop_bits; } + + if ((data_cfg_default->serial_timeout != data_cfg_new->serial_timeout) && (data_cfg_new->serial_timeout)) { + data_cfg_default->serial_timeout = data_cfg_new->serial_timeout; + } } static void UartIsr(struct SerialDriver *serial_drv, struct SerialHardwareDevice *serial_dev) @@ -99,6 +103,16 @@ static uint32 SerialInit(struct SerialDriver *serial_drv, struct BusConfigureInf struct SerialCfgParam *serial_cfg = (struct SerialCfgParam *)serial_drv->private_data; // struct UsartHwCfg *serial_hw_cfg = (struct UsartHwCfg *)serial_cfg->hw_cfg.private_data; + if (configure_info->private_data) { + struct SerialCfgParam *serial_cfg_new = (struct SerialCfgParam *)configure_info->private_data; + SerialCfgParamCheck(serial_cfg, serial_cfg_new); + } + + struct SerialHardwareDevice *serial_dev = (struct SerialHardwareDevice *)serial_drv->driver.owner_bus->owner_haldev; + struct SerialDevParam *dev_param = (struct SerialDevParam *)serial_dev->haldev.private_data; + + // config serial receive sem timeout + dev_param->serial_timeout = serial_cfg->data_cfg.serial_timeout; usart_deinit(serial_cfg->hw_cfg.serial_register_base); usart_baudrate_set(serial_cfg->hw_cfg.serial_register_base, serial_cfg->data_cfg.serial_baud_rate); @@ -235,6 +249,7 @@ static const struct SerialDataCfg data_cfg_init = .serial_bit_order = BIT_ORDER_LSB, .serial_invert_mode = NRZ_NORMAL, .serial_buffer_size = SERIAL_RB_BUFSZ, + .serial_timeout = WAITING_FOREVER, }; diff --git a/Ubiquitous/XiZi/board/hifive1-emulator/third_party_driver/connect_usart.c b/Ubiquitous/XiZi/board/hifive1-emulator/third_party_driver/connect_usart.c index f9c4a3377..c8aeb5b75 100644 --- a/Ubiquitous/XiZi/board/hifive1-emulator/third_party_driver/connect_usart.c +++ b/Ubiquitous/XiZi/board/hifive1-emulator/third_party_driver/connect_usart.c @@ -59,6 +59,10 @@ static void SerialCfgParamCheck(struct SerialCfgParam *serial_cfg_default, struc if ((data_cfg_default->serial_stop_bits != data_cfg_new->serial_stop_bits) && (data_cfg_new->serial_stop_bits)) { data_cfg_default->serial_stop_bits = data_cfg_new->serial_stop_bits; } + + if ((data_cfg_default->serial_timeout != data_cfg_new->serial_timeout) && (data_cfg_new->serial_timeout)) { + data_cfg_default->serial_timeout = data_cfg_new->serial_timeout; + } } static void usart_handler(int vector, void *param) @@ -78,6 +82,12 @@ static uint32 SerialInit(struct SerialDriver *serial_drv, struct BusConfigureInf struct SerialCfgParam *serial_cfg_new = (struct SerialCfgParam *)configure_info->private_data; SerialCfgParamCheck(serial_cfg, serial_cfg_new); } + + struct SerialHardwareDevice *serial_dev = (struct SerialHardwareDevice *)serial_drv->driver.owner_bus->owner_haldev; + struct SerialDevParam *dev_param = (struct SerialDevParam *)serial_dev->haldev.private_data; + + // config serial receive sem timeout + dev_param->serial_timeout = serial_cfg->data_cfg.serial_timeout; GPIO_REG(GPIO_IOF_SEL) &= ~IOF0_UART0_MASK; GPIO_REG(GPIO_IOF_EN) |= IOF0_UART0_MASK; @@ -148,6 +158,7 @@ static const struct SerialDataCfg data_cfg_init = .serial_bit_order = BIT_ORDER_LSB, .serial_invert_mode = NRZ_NORMAL, .serial_buffer_size = SERIAL_RB_BUFSZ, + .serial_timeout = WAITING_FOREVER, }; /*manage the serial device operations*/ diff --git a/Ubiquitous/XiZi/board/hifive1-rev-B/third_party_driver/connect_usart.c b/Ubiquitous/XiZi/board/hifive1-rev-B/third_party_driver/connect_usart.c index f9c4a3377..c8aeb5b75 100644 --- a/Ubiquitous/XiZi/board/hifive1-rev-B/third_party_driver/connect_usart.c +++ b/Ubiquitous/XiZi/board/hifive1-rev-B/third_party_driver/connect_usart.c @@ -59,6 +59,10 @@ static void SerialCfgParamCheck(struct SerialCfgParam *serial_cfg_default, struc if ((data_cfg_default->serial_stop_bits != data_cfg_new->serial_stop_bits) && (data_cfg_new->serial_stop_bits)) { data_cfg_default->serial_stop_bits = data_cfg_new->serial_stop_bits; } + + if ((data_cfg_default->serial_timeout != data_cfg_new->serial_timeout) && (data_cfg_new->serial_timeout)) { + data_cfg_default->serial_timeout = data_cfg_new->serial_timeout; + } } static void usart_handler(int vector, void *param) @@ -78,6 +82,12 @@ static uint32 SerialInit(struct SerialDriver *serial_drv, struct BusConfigureInf struct SerialCfgParam *serial_cfg_new = (struct SerialCfgParam *)configure_info->private_data; SerialCfgParamCheck(serial_cfg, serial_cfg_new); } + + struct SerialHardwareDevice *serial_dev = (struct SerialHardwareDevice *)serial_drv->driver.owner_bus->owner_haldev; + struct SerialDevParam *dev_param = (struct SerialDevParam *)serial_dev->haldev.private_data; + + // config serial receive sem timeout + dev_param->serial_timeout = serial_cfg->data_cfg.serial_timeout; GPIO_REG(GPIO_IOF_SEL) &= ~IOF0_UART0_MASK; GPIO_REG(GPIO_IOF_EN) |= IOF0_UART0_MASK; @@ -148,6 +158,7 @@ static const struct SerialDataCfg data_cfg_init = .serial_bit_order = BIT_ORDER_LSB, .serial_invert_mode = NRZ_NORMAL, .serial_buffer_size = SERIAL_RB_BUFSZ, + .serial_timeout = WAITING_FOREVER, }; /*manage the serial device operations*/ diff --git a/Ubiquitous/XiZi/board/k210-emulator/third_party_driver/uart/connect_uart.c b/Ubiquitous/XiZi/board/k210-emulator/third_party_driver/uart/connect_uart.c index ae5274cce..ee564e4d4 100644 --- a/Ubiquitous/XiZi/board/k210-emulator/third_party_driver/uart/connect_uart.c +++ b/Ubiquitous/XiZi/board/k210-emulator/third_party_driver/uart/connect_uart.c @@ -103,6 +103,10 @@ static void SerialCfgParamCheck(struct SerialCfgParam *serial_cfg_default, struc if ((data_cfg_default->serial_stop_bits != data_cfg_new->serial_stop_bits) && (data_cfg_new->serial_stop_bits)) { data_cfg_default->serial_stop_bits = data_cfg_new->serial_stop_bits; } + + if ((data_cfg_default->serial_timeout != data_cfg_new->serial_timeout) && (data_cfg_new->serial_timeout)) { + data_cfg_default->serial_timeout = data_cfg_new->serial_timeout; + } } /* UARTHS ISR */ @@ -146,6 +150,12 @@ static uint32 SerialHsInit(struct SerialDriver *serial_drv, struct BusConfigureI SerialCfgParamCheck(serial_cfg, serial_cfg_new); } + struct SerialHardwareDevice *serial_dev = (struct SerialHardwareDevice *)serial_drv->driver.owner_bus->owner_haldev; + struct SerialDevParam *dev_param = (struct SerialDevParam *)serial_dev->haldev.private_data; + + // config serial receive sem timeout + dev_param->serial_timeout = serial_cfg->data_cfg.serial_timeout; + //uint32 freq_hs = SysctlClockGetFreq(SYSCTL_CLOCK_CPU); uint32 freq_hs = 26000000; uint16 div_hs = freq_hs / serial_cfg->data_cfg.serial_baud_rate - 1; @@ -393,6 +403,7 @@ static const struct SerialDataCfg data_cfg_init = .serial_bit_order = BIT_ORDER_LSB, .serial_invert_mode = NRZ_NORMAL, .serial_buffer_size = SERIAL_RB_BUFSZ, + .serial_timeout = WAITING_FOREVER, }; /*manage the serial high speed device operations*/ diff --git a/Ubiquitous/XiZi/board/kd233/third_party_driver/uart/connect_uart.c b/Ubiquitous/XiZi/board/kd233/third_party_driver/uart/connect_uart.c index 868906288..38bbb3605 100644 --- a/Ubiquitous/XiZi/board/kd233/third_party_driver/uart/connect_uart.c +++ b/Ubiquitous/XiZi/board/kd233/third_party_driver/uart/connect_uart.c @@ -103,6 +103,10 @@ static void SerialCfgParamCheck(struct SerialCfgParam *serial_cfg_default, struc if ((data_cfg_default->serial_stop_bits != data_cfg_new->serial_stop_bits) && (data_cfg_new->serial_stop_bits)) { data_cfg_default->serial_stop_bits = data_cfg_new->serial_stop_bits; } + + if ((data_cfg_default->serial_timeout != data_cfg_new->serial_timeout) && (data_cfg_new->serial_timeout)) { + data_cfg_default->serial_timeout = data_cfg_new->serial_timeout; + } } /* UARTHS ISR */ @@ -146,6 +150,12 @@ static uint32 SerialHsInit(struct SerialDriver *serial_drv, struct BusConfigureI SerialCfgParamCheck(serial_cfg, serial_cfg_new); } + struct SerialHardwareDevice *serial_dev = (struct SerialHardwareDevice *)serial_drv->driver.owner_bus->owner_haldev; + struct SerialDevParam *dev_param = (struct SerialDevParam *)serial_dev->haldev.private_data; + + // config serial receive sem timeout + dev_param->serial_timeout = serial_cfg->data_cfg.serial_timeout; + uint32 freq_hs = SysctlClockGetFreq(SYSCTL_CLOCK_CPU); uint16 div_hs = freq_hs / serial_cfg->data_cfg.serial_baud_rate - 1; @@ -223,6 +233,12 @@ static uint32 SerialInit(struct SerialDriver *serial_drv, struct BusConfigureInf SerialCfgParamCheck(serial_cfg, serial_cfg_new); } + struct SerialHardwareDevice *serial_dev = (struct SerialHardwareDevice *)serial_drv->driver.owner_bus->owner_haldev; + struct SerialDevParam *dev_param = (struct SerialDevParam *)serial_dev->haldev.private_data; + + // config serial receive sem timeout + dev_param->serial_timeout = serial_cfg->data_cfg.serial_timeout; + UartBitwidthPointer DataWidth = (UartBitwidthPointer)serial_cfg->data_cfg.serial_data_bits; UartStopbitT stopbit = (UartStopbitT)(serial_cfg->data_cfg.serial_stop_bits - 1); UartParityT parity = (UartParityT)(serial_cfg->data_cfg.serial_parity_mode - 1); @@ -392,6 +408,7 @@ static const struct SerialDataCfg data_cfg_init = .serial_bit_order = BIT_ORDER_LSB, .serial_invert_mode = NRZ_NORMAL, .serial_buffer_size = SERIAL_RB_BUFSZ, + .serial_timeout = WAITING_FOREVER, }; /*manage the serial high speed device operations*/ diff --git a/Ubiquitous/XiZi/board/maix-go/third_party_driver/uart/connect_uart.c b/Ubiquitous/XiZi/board/maix-go/third_party_driver/uart/connect_uart.c index cc9c83480..2c8c73f99 100644 --- a/Ubiquitous/XiZi/board/maix-go/third_party_driver/uart/connect_uart.c +++ b/Ubiquitous/XiZi/board/maix-go/third_party_driver/uart/connect_uart.c @@ -103,6 +103,10 @@ static void SerialCfgParamCheck(struct SerialCfgParam *serial_cfg_default, struc if ((data_cfg_default->serial_stop_bits != data_cfg_new->serial_stop_bits) && (data_cfg_new->serial_stop_bits)) { data_cfg_default->serial_stop_bits = data_cfg_new->serial_stop_bits; } + + if ((data_cfg_default->serial_timeout != data_cfg_new->serial_timeout) && (data_cfg_new->serial_timeout)) { + data_cfg_default->serial_timeout = data_cfg_new->serial_timeout; + } } /* UARTHS ISR */ @@ -146,6 +150,12 @@ static uint32 SerialHsInit(struct SerialDriver *serial_drv, struct BusConfigureI SerialCfgParamCheck(serial_cfg, serial_cfg_new); } + struct SerialHardwareDevice *serial_dev = (struct SerialHardwareDevice *)serial_drv->driver.owner_bus->owner_haldev; + struct SerialDevParam *dev_param = (struct SerialDevParam *)serial_dev->haldev.private_data; + + // config serial receive sem timeout + dev_param->serial_timeout = serial_cfg->data_cfg.serial_timeout; + uint32 freq_hs = SysctlClockGetFreq(SYSCTL_CLOCK_CPU); uint16 div_hs = freq_hs / serial_cfg->data_cfg.serial_baud_rate - 1; @@ -223,6 +233,12 @@ static uint32 SerialInit(struct SerialDriver *serial_drv, struct BusConfigureInf SerialCfgParamCheck(serial_cfg, serial_cfg_new); } + struct SerialHardwareDevice *serial_dev = (struct SerialHardwareDevice *)serial_drv->driver.owner_bus->owner_haldev; + struct SerialDevParam *dev_param = (struct SerialDevParam *)serial_dev->haldev.private_data; + + // config serial receive sem timeout + dev_param->serial_timeout = serial_cfg->data_cfg.serial_timeout; + UartBitwidthPointer DataWidth = (UartBitwidthPointer)serial_cfg->data_cfg.serial_data_bits; UartStopbitT stopbit = (UartStopbitT)(serial_cfg->data_cfg.serial_stop_bits - 1); UartParityT parity = (UartParityT)(serial_cfg->data_cfg.serial_parity_mode - 1); @@ -392,6 +408,7 @@ static const struct SerialDataCfg data_cfg_init = .serial_bit_order = BIT_ORDER_LSB, .serial_invert_mode = NRZ_NORMAL, .serial_buffer_size = SERIAL_RB_BUFSZ, + .serial_timeout = WAITING_FOREVER, }; /*manage the serial high speed device operations*/ diff --git a/Ubiquitous/XiZi/board/nuvoton-m2354/third_party_driver/uart/connect_uart.c b/Ubiquitous/XiZi/board/nuvoton-m2354/third_party_driver/uart/connect_uart.c index a4358706b..a9822d76d 100644 --- a/Ubiquitous/XiZi/board/nuvoton-m2354/third_party_driver/uart/connect_uart.c +++ b/Ubiquitous/XiZi/board/nuvoton-m2354/third_party_driver/uart/connect_uart.c @@ -66,6 +66,10 @@ static void SerialCfgParamCheck(struct SerialCfgParam *serial_cfg_default, struc if ((data_cfg_default->serial_stop_bits != data_cfg_new->serial_stop_bits) && (data_cfg_new->serial_stop_bits)) { data_cfg_default->serial_stop_bits = data_cfg_new->serial_stop_bits; } + + if ((data_cfg_default->serial_timeout != data_cfg_new->serial_timeout) && (data_cfg_new->serial_timeout)) { + data_cfg_default->serial_timeout = data_cfg_new->serial_timeout; + } } static void UartHandler(struct SerialBus *serial_bus, struct SerialDriver *serial_drv) @@ -116,6 +120,12 @@ static uint32 SerialInit(struct SerialDriver *serial_drv, struct BusConfigureInf SerialCfgParamCheck(serial_cfg, serial_cfg_new); } + struct SerialHardwareDevice *serial_dev = (struct SerialHardwareDevice *)serial_drv->driver.owner_bus->owner_haldev; + struct SerialDevParam *dev_param = (struct SerialDevParam *)serial_dev->haldev.private_data; + + // config serial receive sem timeout + dev_param->serial_timeout = serial_cfg->data_cfg.serial_timeout; + switch (serial_cfg->data_cfg.serial_data_bits) { case DATA_BITS_5: @@ -261,6 +271,7 @@ static const struct SerialDataCfg data_cfg_init = .serial_bit_order = BIT_ORDER_LSB, .serial_invert_mode = NRZ_NORMAL, .serial_buffer_size = SERIAL_RB_BUFSZ, + .serial_timeout = WAITING_FOREVER, }; /*manage the serial device operations*/ diff --git a/Ubiquitous/XiZi/board/ok1052-c/third_party_driver/uart/connect_uart.c b/Ubiquitous/XiZi/board/ok1052-c/third_party_driver/uart/connect_uart.c index a6ad397f8..3dffb12ff 100644 --- a/Ubiquitous/XiZi/board/ok1052-c/third_party_driver/uart/connect_uart.c +++ b/Ubiquitous/XiZi/board/ok1052-c/third_party_driver/uart/connect_uart.c @@ -97,6 +97,10 @@ static void SerialCfgParamCheck(struct SerialCfgParam *serial_cfg_default, struc if ((data_cfg_default->serial_stop_bits != data_cfg_new->serial_stop_bits) && (data_cfg_new->serial_stop_bits)) { data_cfg_default->serial_stop_bits = data_cfg_new->serial_stop_bits; } + + if ((data_cfg_default->serial_timeout != data_cfg_new->serial_timeout) && (data_cfg_new->serial_timeout)) { + data_cfg_default->serial_timeout = data_cfg_new->serial_timeout; + } } static void UartIsr(struct SerialBus *serial, struct SerialDriver *serial_drv, struct SerialHardwareDevice *serial_dev) @@ -142,6 +146,12 @@ static uint32 SerialInit(struct SerialDriver *serial_drv, struct BusConfigureInf SerialCfgParamCheck(serial_cfg, serial_cfg_new); } + struct SerialHardwareDevice *serial_dev = (struct SerialHardwareDevice *)serial_drv->driver.owner_bus->owner_haldev; + struct SerialDevParam *dev_param = (struct SerialDevParam *)serial_dev->haldev.private_data; + + // config serial receive sem timeout + dev_param->serial_timeout = serial_cfg->data_cfg.serial_timeout; + lpuart_config_t config; LPUART_GetDefaultConfig(&config); config.baudRate_Bps = serial_cfg->data_cfg.serial_baud_rate; @@ -269,6 +279,7 @@ static const struct SerialDataCfg data_cfg_init = .serial_bit_order = BIT_ORDER_LSB, .serial_invert_mode = NRZ_NORMAL, .serial_buffer_size = SERIAL_RB_BUFSZ, + .serial_timeout = WAITING_FOREVER, }; /*manage the serial device operations*/ diff --git a/Ubiquitous/XiZi/board/rv32m1_vega/third_party_driver/uart/connect_uart.c b/Ubiquitous/XiZi/board/rv32m1_vega/third_party_driver/uart/connect_uart.c index db3ad1487..446741d94 100755 --- a/Ubiquitous/XiZi/board/rv32m1_vega/third_party_driver/uart/connect_uart.c +++ b/Ubiquitous/XiZi/board/rv32m1_vega/third_party_driver/uart/connect_uart.c @@ -57,6 +57,10 @@ static void SerialCfgParamCheck(struct SerialCfgParam *serial_cfg_default, struc if ((data_cfg_default->serial_stop_bits != data_cfg_new->serial_stop_bits) && (data_cfg_new->serial_stop_bits)) { data_cfg_default->serial_stop_bits = data_cfg_new->serial_stop_bits; } + + if ((data_cfg_default->serial_timeout != data_cfg_new->serial_timeout) && (data_cfg_new->serial_timeout)) { + data_cfg_default->serial_timeout = data_cfg_new->serial_timeout; + } } static void UartIsr(struct SerialDriver *serial_drv, struct SerialHardwareDevice *serial_dev) @@ -86,6 +90,17 @@ static uint32 SerialInit(struct SerialDriver *serial_drv, struct BusConfigureInf NULL_PARAM_CHECK(serial_drv); struct SerialCfgParam *serial_cfg = (struct SerialCfgParam *)serial_drv->private_data; + if (configure_info->private_data) { + struct SerialCfgParam *serial_cfg_new = (struct SerialCfgParam *)configure_info->private_data; + SerialCfgParamCheck(serial_cfg, serial_cfg_new); + } + + struct SerialHardwareDevice *serial_dev = (struct SerialHardwareDevice *)serial_drv->driver.owner_bus->owner_haldev; + struct SerialDevParam *dev_param = (struct SerialDevParam *)serial_dev->haldev.private_data; + + // config serial receive sem timeout + dev_param->serial_timeout = serial_cfg->data_cfg.serial_timeout; + LPUART_GetDefaultConfig(&config); config.baudRate_Bps = serial_cfg->data_cfg.serial_baud_rate; @@ -218,6 +233,7 @@ static const struct SerialDataCfg data_cfg_init = .serial_bit_order = BIT_ORDER_LSB, .serial_invert_mode = NRZ_NORMAL, .serial_buffer_size = SERIAL_RB_BUFSZ, + .serial_timeout = WAITING_FOREVER, }; diff --git a/Ubiquitous/XiZi/board/stm32f103-nano/third_party_driver/uart/connect_uart.c b/Ubiquitous/XiZi/board/stm32f103-nano/third_party_driver/uart/connect_uart.c index 456a065fd..93069521d 100644 --- a/Ubiquitous/XiZi/board/stm32f103-nano/third_party_driver/uart/connect_uart.c +++ b/Ubiquitous/XiZi/board/stm32f103-nano/third_party_driver/uart/connect_uart.c @@ -64,6 +64,10 @@ static void SerialCfgParamCheck(struct SerialCfgParam *serial_cfg_default, struc if ((data_cfg_default->serial_stop_bits != data_cfg_new->serial_stop_bits) && (data_cfg_new->serial_stop_bits)) { data_cfg_default->serial_stop_bits = data_cfg_new->serial_stop_bits; } + + if ((data_cfg_default->serial_timeout != data_cfg_new->serial_timeout) && (data_cfg_new->serial_timeout)) { + data_cfg_default->serial_timeout = data_cfg_new->serial_timeout; + } } static void UartHandler(struct SerialBus *serial_bus, struct SerialDriver *serial_drv) @@ -127,6 +131,12 @@ static uint32 SerialInit(struct SerialDriver *serial_drv, struct BusConfigureInf SerialCfgParamCheck(serial_cfg, serial_cfg_new); } + struct SerialHardwareDevice *serial_dev = (struct SerialHardwareDevice *)serial_drv->driver.owner_bus->owner_haldev; + struct SerialDevParam *dev_param = (struct SerialDevParam *)serial_dev->haldev.private_data; + + // config serial receive sem timeout + dev_param->serial_timeout = serial_cfg->data_cfg.serial_timeout; + serial_hw_cfg->uart_handle.Instance = serial_hw_cfg->uart_device; serial_hw_cfg->uart_handle.Init.BaudRate = serial_cfg->data_cfg.serial_baud_rate; serial_hw_cfg->uart_handle.Init.HwFlowCtl = UART_HWCONTROL_NONE; @@ -273,6 +283,7 @@ static const struct SerialDataCfg data_cfg_init = .serial_bit_order = BIT_ORDER_LSB, .serial_invert_mode = NRZ_NORMAL, .serial_buffer_size = SERIAL_RB_BUFSZ, + .serial_timeout = WAITING_FOREVER, }; /*manage the serial device operations*/ diff --git a/Ubiquitous/XiZi/board/stm32f407-st-discovery/third_party_driver/uart/connect_usart.c b/Ubiquitous/XiZi/board/stm32f407-st-discovery/third_party_driver/uart/connect_usart.c index b10ea6cba..855619178 100644 --- a/Ubiquitous/XiZi/board/stm32f407-st-discovery/third_party_driver/uart/connect_usart.c +++ b/Ubiquitous/XiZi/board/stm32f407-st-discovery/third_party_driver/uart/connect_usart.c @@ -256,6 +256,10 @@ static void SerialCfgParamCheck(struct SerialCfgParam *serial_cfg_default, struc if((data_cfg_default->serial_stop_bits != data_cfg_new->serial_stop_bits) && (data_cfg_new->serial_stop_bits)) { data_cfg_default->serial_stop_bits = data_cfg_new->serial_stop_bits; } + + if ((data_cfg_default->serial_timeout != data_cfg_new->serial_timeout) && (data_cfg_new->serial_timeout)) { + data_cfg_default->serial_timeout = data_cfg_new->serial_timeout; + } } static uint32 Stm32SerialInit(struct SerialDriver *serial_drv, struct BusConfigureInfo *configure_info) @@ -270,6 +274,12 @@ static uint32 Stm32SerialInit(struct SerialDriver *serial_drv, struct BusConfigu SerialCfgParamCheck(serial_cfg, serial_cfg_new); } + struct SerialHardwareDevice *serial_dev = (struct SerialHardwareDevice *)serial_drv->driver.owner_bus->owner_haldev; + struct SerialDevParam *dev_param = (struct SerialDevParam *)serial_dev->haldev.private_data; + + // config serial receive sem timeout + dev_param->serial_timeout = serial_cfg->data_cfg.serial_timeout; + USART_InitTypeDef USART_InitStructure; USART_InitStructure.USART_BaudRate = serial_cfg->data_cfg.serial_baud_rate; @@ -585,6 +595,7 @@ static const struct SerialDataCfg data_cfg_init = .serial_bit_order = BIT_ORDER_LSB, .serial_invert_mode = NRZ_NORMAL, .serial_buffer_size = SERIAL_RB_BUFSZ, + .serial_timeout = WAITING_FOREVER, }; /*manage the serial device operations*/ diff --git a/Ubiquitous/XiZi/board/stm32f407zgt6/third_party_driver/uart/connect_usart.c b/Ubiquitous/XiZi/board/stm32f407zgt6/third_party_driver/uart/connect_usart.c index 7f1b7d478..eb5287ee9 100644 --- a/Ubiquitous/XiZi/board/stm32f407zgt6/third_party_driver/uart/connect_usart.c +++ b/Ubiquitous/XiZi/board/stm32f407zgt6/third_party_driver/uart/connect_usart.c @@ -204,6 +204,10 @@ static void SerialCfgParamCheck(struct SerialCfgParam *serial_cfg_default, struc if ((data_cfg_default->serial_stop_bits != data_cfg_new->serial_stop_bits) && (data_cfg_new->serial_stop_bits)) { data_cfg_default->serial_stop_bits = data_cfg_new->serial_stop_bits; } + + if ((data_cfg_default->serial_timeout != data_cfg_new->serial_timeout) && (data_cfg_new->serial_timeout)) { + data_cfg_default->serial_timeout = data_cfg_new->serial_timeout; + } } static uint32 Stm32SerialInit(struct SerialDriver *serial_drv, struct BusConfigureInfo *configure_info) @@ -218,6 +222,12 @@ static uint32 Stm32SerialInit(struct SerialDriver *serial_drv, struct BusConfigu SerialCfgParamCheck(serial_cfg, serial_cfg_new); } + struct SerialHardwareDevice *serial_dev = (struct SerialHardwareDevice *)serial_drv->driver.owner_bus->owner_haldev; + struct SerialDevParam *dev_param = (struct SerialDevParam *)serial_dev->haldev.private_data; + + // config serial receive sem timeout + dev_param->serial_timeout = serial_cfg->data_cfg.serial_timeout; + USART_InitTypeDef USART_InitStructure; USART_InitStructure.USART_BaudRate = serial_cfg->data_cfg.serial_baud_rate; @@ -390,6 +400,7 @@ static const struct SerialDataCfg data_cfg_init = .serial_bit_order = BIT_ORDER_LSB, .serial_invert_mode = NRZ_NORMAL, .serial_buffer_size = SERIAL_RB_BUFSZ, + .serial_timeout = WAITING_FOREVER, }; /*manage the serial device operations*/ diff --git a/Ubiquitous/XiZi/board/xidatong/third_party_driver/ch438/connect_ch438.c b/Ubiquitous/XiZi/board/xidatong/third_party_driver/ch438/connect_ch438.c index a022c32b3..b17d9225e 100644 --- a/Ubiquitous/XiZi/board/xidatong/third_party_driver/ch438/connect_ch438.c +++ b/Ubiquitous/XiZi/board/xidatong/third_party_driver/ch438/connect_ch438.c @@ -939,7 +939,12 @@ static uint32 Ch438DrvConfigure(void *drv, struct BusConfigureInfo *configure_in x_err_t ret = EOK; struct SerialDriver *serial_drv = (struct SerialDriver *)drv; + struct SerialHardwareDevice *serial_dev = (struct SerialHardwareDevice *)serial_drv->driver.owner_bus->owner_haldev; struct SerialCfgParam *ext_serial_cfg = (struct SerialCfgParam *)configure_info->private_data; + struct SerialDevParam *dev_param = (struct SerialDevParam *)serial_dev->haldev.private_data; + + //config serial receive sem timeout + dev_param->serial_timeout = ext_serial_cfg->data_cfg.serial_timeout; switch (configure_info->configure_cmd) { @@ -1018,7 +1023,7 @@ static uint32 ImxrtCh438ReadData(void *dev, struct BusBlockReadParam *read_param struct SerialDevParam *dev_param = (struct SerialDevParam *)serial_dev->haldev.private_data; while (!interrupt_done) { - result = KSemaphoreObtain(ch438_sem, WAITING_FOREVER); + result = KSemaphoreObtain(ch438_sem, dev_param->serial_timeout); if (EOK == result) { gInterruptStatus = ReadCH438Data(REG_SSR_ADDR); if (!gInterruptStatus) { @@ -1062,6 +1067,10 @@ static uint32 ImxrtCh438ReadData(void *dev, struct BusBlockReadParam *read_param } } } + } else { + //Wait serial sem timeout, break and return 0 + rcv_num = 0; + break; } } return rcv_num; diff --git a/Ubiquitous/XiZi/board/xidatong/third_party_driver/uart/connect_uart.c b/Ubiquitous/XiZi/board/xidatong/third_party_driver/uart/connect_uart.c index 69157a5d9..6ce8b6695 100644 --- a/Ubiquitous/XiZi/board/xidatong/third_party_driver/uart/connect_uart.c +++ b/Ubiquitous/XiZi/board/xidatong/third_party_driver/uart/connect_uart.c @@ -98,6 +98,10 @@ static void SerialCfgParamCheck(struct SerialCfgParam *serial_cfg_default, struc if ((data_cfg_default->serial_stop_bits != data_cfg_new->serial_stop_bits) && (data_cfg_new->serial_stop_bits)) { data_cfg_default->serial_stop_bits = data_cfg_new->serial_stop_bits; } + + if ((data_cfg_default->serial_timeout != data_cfg_new->serial_timeout) && (data_cfg_new->serial_timeout)) { + data_cfg_default->serial_timeout = data_cfg_new->serial_timeout; + } } static void UartIsr(struct SerialBus *serial, struct SerialDriver *serial_drv, struct SerialHardwareDevice *serial_dev) @@ -143,6 +147,12 @@ static uint32 SerialInit(struct SerialDriver *serial_drv, struct BusConfigureInf SerialCfgParamCheck(serial_cfg, serial_cfg_new); } + struct SerialHardwareDevice *serial_dev = (struct SerialHardwareDevice *)serial_drv->driver.owner_bus->owner_haldev; + struct SerialDevParam *dev_param = (struct SerialDevParam *)serial_dev->haldev.private_data; + + // config serial receive sem timeout + dev_param->serial_timeout = serial_cfg->data_cfg.serial_timeout; + lpuart_config_t config; LPUART_GetDefaultConfig(&config); config.baudRate_Bps = serial_cfg->data_cfg.serial_baud_rate; @@ -281,6 +291,7 @@ static const struct SerialDataCfg data_cfg_init = .serial_bit_order = BIT_ORDER_LSB, .serial_invert_mode = NRZ_NORMAL, .serial_buffer_size = SERIAL_RB_BUFSZ, + .serial_timeout = WAITING_FOREVER, }; /*manage the serial device operations*/ diff --git a/Ubiquitous/XiZi/kernel/thread/console.c b/Ubiquitous/XiZi/kernel/thread/console.c index 6bdecbb4e..68f3309f2 100644 --- a/Ubiquitous/XiZi/kernel/thread/console.c +++ b/Ubiquitous/XiZi/kernel/thread/console.c @@ -68,11 +68,12 @@ void InstallConsole(const char *bus_name, const char *drv_name, const char *dev_ BusDevClose(_console); } + console_bus->match(console_drv, console); + configure_info.configure_cmd = OPE_INT; memset(&serial_cfg, 0, sizeof(struct SerialCfgParam)); configure_info.private_data = &serial_cfg; BusDrvConfigure(console_drv, &configure_info); - console_bus->match(console_drv, console); serial_dev_param = (struct SerialDevParam *)console->private_data; serial_dev_param->serial_set_mode = 0; diff --git a/Ubiquitous/XiZi/kernel/thread/msgqueue.c b/Ubiquitous/XiZi/kernel/thread/msgqueue.c index 6a253dd8f..950a265ac 100644 --- a/Ubiquitous/XiZi/kernel/thread/msgqueue.c +++ b/Ubiquitous/XiZi/kernel/thread/msgqueue.c @@ -96,7 +96,12 @@ static x_err_t _MsgQueueSend(struct MsgQueue *mq, tick_delta = 0; task = GetKTaskDescriptor(); - timeout = CalculteTickFromTimeMs(msec); + + if(WAITING_FOREVER == msec) + timeout = WAITING_FOREVER; + else + timeout = CalculteTickFromTimeMs(msec); + lock = CriticalAreaLock(); if (mq->num_msgs >= mq->max_msgs && timeout == 0) { CriticalAreaUnLock(lock); diff --git a/Ubiquitous/XiZi/kernel/thread/semaphore.c b/Ubiquitous/XiZi/kernel/thread/semaphore.c index 663e235c7..935f1f72b 100644 --- a/Ubiquitous/XiZi/kernel/thread/semaphore.c +++ b/Ubiquitous/XiZi/kernel/thread/semaphore.c @@ -95,7 +95,11 @@ static int32 _SemaphoreObtain(struct Semaphore *sem, int32 msec) NULL_PARAM_CHECK(sem); - wait_time = CalculteTickFromTimeMs(msec); + if(WAITING_FOREVER == msec) + wait_time = WAITING_FOREVER; + else + wait_time = CalculteTickFromTimeMs(msec); + lock = CriticalAreaLock(); SYS_KDEBUG_LOG(KDBG_IPC, ("obtain semaphore: id %d, value %d, by task %s\n", diff --git a/Ubiquitous/XiZi/resources/include/bus_serial.h b/Ubiquitous/XiZi/resources/include/bus_serial.h index bb2628d22..917acfc1e 100644 --- a/Ubiquitous/XiZi/resources/include/bus_serial.h +++ b/Ubiquitous/XiZi/resources/include/bus_serial.h @@ -44,6 +44,7 @@ struct SerialDataCfg uint8 serial_bit_order; uint8 serial_invert_mode; uint16 serial_buffer_size; + int32 serial_timeout; uint8 ext_uart_no; enum ExtSerialPortConfigure port_configure; diff --git a/Ubiquitous/XiZi/resources/include/dev_serial.h b/Ubiquitous/XiZi/resources/include/dev_serial.h index 146202f8a..af6624799 100644 --- a/Ubiquitous/XiZi/resources/include/dev_serial.h +++ b/Ubiquitous/XiZi/resources/include/dev_serial.h @@ -107,6 +107,8 @@ struct SerialDevParam uint16 serial_work_mode; uint16 serial_set_mode; uint16 serial_stream_mode; + + int32 serial_timeout; }; struct SerialHardwareDevice; diff --git a/Ubiquitous/XiZi/resources/serial/dev_serial.c b/Ubiquitous/XiZi/resources/serial/dev_serial.c index 25c578c8f..5cce9bee1 100644 --- a/Ubiquitous/XiZi/resources/serial/dev_serial.c +++ b/Ubiquitous/XiZi/resources/serial/dev_serial.c @@ -630,7 +630,7 @@ static uint32 SerialDevRead(void *dev, struct BusBlockReadParam *read_param) struct SerialHardwareDevice *serial_dev = (struct SerialHardwareDevice *)dev; struct SerialDevParam *serial_dev_param = (struct SerialDevParam *)serial_dev->haldev.private_data; - if (EOK == KSemaphoreObtain(serial_dev->haldev.dev_sem, WAITING_FOREVER)) { + if (EOK == KSemaphoreObtain(serial_dev->haldev.dev_sem, serial_dev_param->serial_timeout)) { if (serial_dev_param->serial_work_mode & SIGN_OPER_INT_RX) { ret = SerialDevIntRead(serial_dev, read_param); if (EOK != ret) { @@ -654,6 +654,8 @@ static uint32 SerialDevRead(void *dev, struct BusBlockReadParam *read_param) return ERROR; } } + } else { + return ERROR; } return EOK; }