From 90f30cf6d2134416ac8192582e84241127471e44 Mon Sep 17 00:00:00 2001 From: Wang_Weigen Date: Thu, 7 Apr 2022 10:28:09 +0800 Subject: [PATCH] repair the problem of irq and add mode judge for zigbee --- .../Framework/connection/zigbee/e18/Kconfig | 7 ++ .../Framework/connection/zigbee/e18/e18.c | 75 +++++++++++++++---- .../third_party_driver/uart/connect_uart.c | 13 ++-- .../third_party_driver/usb/connect_usb.c | 6 +- Ubiquitous/XiZi/kernel/thread/idle.c | 2 +- 5 files changed, 77 insertions(+), 26 deletions(-) diff --git a/APP_Framework/Framework/connection/zigbee/e18/Kconfig b/APP_Framework/Framework/connection/zigbee/e18/Kconfig index 607df8f3e..643d07acb 100644 --- a/APP_Framework/Framework/connection/zigbee/e18/Kconfig +++ b/APP_Framework/Framework/connection/zigbee/e18/Kconfig @@ -18,6 +18,13 @@ endchoice if ADD_XIZI_FETURES + config ADAPTER_E18_MODEPIN + int "E18 MODE pin number" + default "61" + + config ADAPTER_BC28_PIN_DRIVER + string "BC28 device pin driver path" + default "/dev/pin_dev" config ADAPTER_E18_DRIVER_EXTUART bool "Using extra uart to support zigbee" diff --git a/APP_Framework/Framework/connection/zigbee/e18/e18.c b/APP_Framework/Framework/connection/zigbee/e18/e18.c index 640d6d582..12a52cf22 100644 --- a/APP_Framework/Framework/connection/zigbee/e18/e18.c +++ b/APP_Framework/Framework/connection/zigbee/e18/e18.c @@ -37,6 +37,33 @@ char *cmd_role_as_e = "AT+DEV=E"; /*set device type for end device*/ char *cmd_role_as_r = "AT+DEV=R"; /*set device type for router*/ char *cmd_set_ch = "AT+CH=11"; /*set channel as 11*/ +#define E18_AS_HEX_MODE 0 +#define E18_AS_AT_MODE 1 + +static int E18HardwareModeGet() +{ + int ret = 0; + int pin_fd; + + pin_fd = PrivOpen(ADAPTER_BC28_PIN_DRIVER, O_RDWR); + + struct PinStat pin_stat; + pin_stat.pin = ADAPTER_E18_MODEPIN; + + ret = PrivRead(pin_fd, &pin_stat, 1); + + PrivTaskDelay(200); + + PrivClose(pin_fd); + + if(pin_stat.pin == GPIO_HIGH) { + printf(" E18 as AT mode\n"); + return E18_AS_AT_MODE; + } else { + printf(" E18 as HEX mode\n"); + return E18_AS_HEX_MODE; + } +} #ifdef ADD_NUTTX_FETURES static int E18UartOpen(struct Adapter *adapter) @@ -148,19 +175,25 @@ out: static int E18NetRoleConfig(struct Adapter *adapter) { int ret = 0; + int mode = -1; + if (NULL == adapter) { printf("%s %d adapter is null!\n",__func__,__LINE__); ret = -1; goto out; } - - ret = AtCmdConfigAndCheck(adapter->agent, cmd_hex2at, "+OK"); - if(ret < 0) { - printf("%s %d cmd[%s] config failed!\n",__func__,__LINE__,cmd_hex2at); - ret = -1; - goto out; + mode = E18HardwareModeGet(); + if(E18_AS_HEX_MODE == mode) + { + ret = AtCmdConfigAndCheck(adapter->agent, cmd_hex2at, "+OK"); + if(ret < 0) { + printf("%s %d cmd[%s] config failed!\n",__func__,__LINE__,cmd_hex2at); + ret = -1; + goto out; + } } + switch (adapter->net_role) { @@ -197,7 +230,10 @@ static int E18NetRoleConfig(struct Adapter *adapter) } out: - AtCmdConfigAndCheck(adapter->agent, cmd_exit, "+OK"); + if(E18_AS_HEX_MODE == mode) { + AtCmdConfigAndCheck(adapter->agent, cmd_exit, "+OK"); + } + return ret; } @@ -274,12 +310,17 @@ static int E18Ioctl(struct Adapter *adapter, int cmd, void *args) static int E18Join(struct Adapter *adapter, unsigned char *priv_net_group) { int ret = 0; + int mode = -1; - ret = AtCmdConfigAndCheck(adapter->agent, cmd_hex2at, "+OK"); - if(ret < 0) { - printf("%s %d cmd[%s] config failed!\n",__func__,__LINE__,cmd_hex2at); - ret = -1; - goto out; + mode = E18HardwareModeGet(); + if(E18_AS_HEX_MODE == mode) + { + ret = AtCmdConfigAndCheck(adapter->agent, cmd_hex2at, "+OK"); + if(ret < 0) { + printf("%s %d cmd[%s] config failed!\n",__func__,__LINE__,cmd_hex2at); + ret = -1; + goto out; + } } switch (adapter->net_role) @@ -327,9 +368,13 @@ static int E18Join(struct Adapter *adapter, unsigned char *priv_net_group) // } if(!ret){ - ret = AtCmdConfigAndCheck(adapter->agent, cmd_exit, "+OK"); - if(ret < 0) { - printf("%s %d cmd[%s] config failed!\n",__func__,__LINE__,cmd_exit); + if(E18_AS_HEX_MODE == mode) { + ret = AtCmdConfigAndCheck(adapter->agent, cmd_exit, "+OK"); + if(ret < 0) { + printf("%s %d cmd[%s] config failed!\n",__func__,__LINE__,cmd_exit); + ret = -1; + } + } else { ret = -1; } } 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 ce567700a..2be209890 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 @@ -39,13 +39,12 @@ struct SerialHardwareDevice serial_device_1; void LPUART1_IRQHandler(int irqn, void *arg) { - x_base lock = 0; - // KPrintf("LPUART1_IRQHandler \n"); - lock = DISABLE_INTERRUPT(); + + DisableIRQ(UART1_IRQn); UartIsr(&serial_bus_1, &serial_driver_1, &serial_device_1); + EnableIRQ(UART1_IRQn); - ENABLE_INTERRUPT(lock); } DECLARE_HW_IRQ(UART1_IRQn, LPUART1_IRQHandler, NONE); #endif @@ -57,12 +56,12 @@ struct SerialHardwareDevice serial_device_2; void LPUART2_IRQHandler(int irqn, void *arg) { - x_base lock = 0; - lock = DISABLE_INTERRUPT(); + + DisableIRQ(UART2_IRQn); UartIsr(&serial_bus_2, &serial_driver_2, &serial_device_2); + EnableIRQ(UART2_IRQn); - ENABLE_INTERRUPT(lock); } DECLARE_HW_IRQ(UART2_IRQn, LPUART2_IRQHandler, NONE); #endif diff --git a/Ubiquitous/XiZi/board/xidatong/third_party_driver/usb/connect_usb.c b/Ubiquitous/XiZi/board/xidatong/third_party_driver/usb/connect_usb.c index 8baa7c57d..536e52db3 100644 --- a/Ubiquitous/XiZi/board/xidatong/third_party_driver/usb/connect_usb.c +++ b/Ubiquitous/XiZi/board/xidatong/third_party_driver/usb/connect_usb.c @@ -41,12 +41,12 @@ extern usb_status_t USB_HostMsdWriteApi(usb_host_msd_command_instance_t *msdComm //USB HOST ISR void UsbOtg2IrqHandler(int irqn, void *arg) { - x_base lock = 0; - lock = DISABLE_INTERRUPT(); + + DisableIRQ(USB2_IRQn); USB_HostEhciIsrFunction(g_HostHandle); + EnableIRQ(USB2_IRQn); - ENABLE_INTERRUPT(lock); } DECLARE_HW_IRQ(USB2_IRQn, UsbOtg2IrqHandler, NONE); diff --git a/Ubiquitous/XiZi/kernel/thread/idle.c b/Ubiquitous/XiZi/kernel/thread/idle.c index 0d64ba4df..932ce41c1 100644 --- a/Ubiquitous/XiZi/kernel/thread/idle.c +++ b/Ubiquitous/XiZi/kernel/thread/idle.c @@ -46,7 +46,7 @@ __attribute__((aligned(MEM_ALIGN_SIZE))) void RunningIntoLowPowerMode() { #ifdef ARCH_ARM - __asm volatile("WFI"); + // __asm volatile("WFI"); #endif #ifdef ARCH_RISCV