repair the problem of irq and add mode judge for zigbee

This commit is contained in:
Wang_Weigen 2022-04-07 10:28:09 +08:00
parent 5ade2a983d
commit 90f30cf6d2
5 changed files with 77 additions and 26 deletions

View File

@ -18,6 +18,13 @@ endchoice
if ADD_XIZI_FETURES 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 config ADAPTER_E18_DRIVER_EXTUART
bool "Using extra uart to support zigbee" bool "Using extra uart to support zigbee"

View File

@ -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_role_as_r = "AT+DEV=R"; /*set device type for router*/
char *cmd_set_ch = "AT+CH=11"; /*set channel as 11*/ 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 #ifdef ADD_NUTTX_FETURES
static int E18UartOpen(struct Adapter *adapter) static int E18UartOpen(struct Adapter *adapter)
@ -148,19 +175,25 @@ out:
static int E18NetRoleConfig(struct Adapter *adapter) static int E18NetRoleConfig(struct Adapter *adapter)
{ {
int ret = 0; int ret = 0;
int mode = -1;
if (NULL == adapter) { if (NULL == adapter) {
printf("%s %d adapter is null!\n",__func__,__LINE__); printf("%s %d adapter is null!\n",__func__,__LINE__);
ret = -1; ret = -1;
goto out; goto out;
} }
mode = E18HardwareModeGet();
if(E18_AS_HEX_MODE == mode)
{
ret = AtCmdConfigAndCheck(adapter->agent, cmd_hex2at, "+OK"); ret = AtCmdConfigAndCheck(adapter->agent, cmd_hex2at, "+OK");
if(ret < 0) { if(ret < 0) {
printf("%s %d cmd[%s] config failed!\n",__func__,__LINE__,cmd_hex2at); printf("%s %d cmd[%s] config failed!\n",__func__,__LINE__,cmd_hex2at);
ret = -1; ret = -1;
goto out; goto out;
} }
}
switch (adapter->net_role) switch (adapter->net_role)
{ {
@ -197,7 +230,10 @@ static int E18NetRoleConfig(struct Adapter *adapter)
} }
out: out:
if(E18_AS_HEX_MODE == mode) {
AtCmdConfigAndCheck(adapter->agent, cmd_exit, "+OK"); AtCmdConfigAndCheck(adapter->agent, cmd_exit, "+OK");
}
return ret; return ret;
} }
@ -274,13 +310,18 @@ static int E18Ioctl(struct Adapter *adapter, int cmd, void *args)
static int E18Join(struct Adapter *adapter, unsigned char *priv_net_group) static int E18Join(struct Adapter *adapter, unsigned char *priv_net_group)
{ {
int ret = 0; int ret = 0;
int mode = -1;
mode = E18HardwareModeGet();
if(E18_AS_HEX_MODE == mode)
{
ret = AtCmdConfigAndCheck(adapter->agent, cmd_hex2at, "+OK"); ret = AtCmdConfigAndCheck(adapter->agent, cmd_hex2at, "+OK");
if(ret < 0) { if(ret < 0) {
printf("%s %d cmd[%s] config failed!\n",__func__,__LINE__,cmd_hex2at); printf("%s %d cmd[%s] config failed!\n",__func__,__LINE__,cmd_hex2at);
ret = -1; ret = -1;
goto out; goto out;
} }
}
switch (adapter->net_role) switch (adapter->net_role)
{ {
@ -327,11 +368,15 @@ static int E18Join(struct Adapter *adapter, unsigned char *priv_net_group)
// } // }
if(!ret){ if(!ret){
if(E18_AS_HEX_MODE == mode) {
ret = AtCmdConfigAndCheck(adapter->agent, cmd_exit, "+OK"); ret = AtCmdConfigAndCheck(adapter->agent, cmd_exit, "+OK");
if(ret < 0) { if(ret < 0) {
printf("%s %d cmd[%s] config failed!\n",__func__,__LINE__,cmd_exit); printf("%s %d cmd[%s] config failed!\n",__func__,__LINE__,cmd_exit);
ret = -1; ret = -1;
} }
} else {
ret = -1;
}
} }
out: out:

View File

@ -39,13 +39,12 @@ struct SerialHardwareDevice serial_device_1;
void LPUART1_IRQHandler(int irqn, void *arg) void LPUART1_IRQHandler(int irqn, void *arg)
{ {
x_base lock = 0;
// KPrintf("LPUART1_IRQHandler \n"); DisableIRQ(UART1_IRQn);
lock = DISABLE_INTERRUPT();
UartIsr(&serial_bus_1, &serial_driver_1, &serial_device_1); UartIsr(&serial_bus_1, &serial_driver_1, &serial_device_1);
EnableIRQ(UART1_IRQn);
ENABLE_INTERRUPT(lock);
} }
DECLARE_HW_IRQ(UART1_IRQn, LPUART1_IRQHandler, NONE); DECLARE_HW_IRQ(UART1_IRQn, LPUART1_IRQHandler, NONE);
#endif #endif
@ -57,12 +56,12 @@ struct SerialHardwareDevice serial_device_2;
void LPUART2_IRQHandler(int irqn, void *arg) 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); UartIsr(&serial_bus_2, &serial_driver_2, &serial_device_2);
EnableIRQ(UART2_IRQn);
ENABLE_INTERRUPT(lock);
} }
DECLARE_HW_IRQ(UART2_IRQn, LPUART2_IRQHandler, NONE); DECLARE_HW_IRQ(UART2_IRQn, LPUART2_IRQHandler, NONE);
#endif #endif

View File

@ -41,12 +41,12 @@ extern usb_status_t USB_HostMsdWriteApi(usb_host_msd_command_instance_t *msdComm
//USB HOST ISR //USB HOST ISR
void UsbOtg2IrqHandler(int irqn, void *arg) void UsbOtg2IrqHandler(int irqn, void *arg)
{ {
x_base lock = 0;
lock = DISABLE_INTERRUPT(); DisableIRQ(USB2_IRQn);
USB_HostEhciIsrFunction(g_HostHandle); USB_HostEhciIsrFunction(g_HostHandle);
EnableIRQ(USB2_IRQn);
ENABLE_INTERRUPT(lock);
} }
DECLARE_HW_IRQ(USB2_IRQn, UsbOtg2IrqHandler, NONE); DECLARE_HW_IRQ(USB2_IRQn, UsbOtg2IrqHandler, NONE);

View File

@ -46,7 +46,7 @@ __attribute__((aligned(MEM_ALIGN_SIZE)))
void RunningIntoLowPowerMode() void RunningIntoLowPowerMode()
{ {
#ifdef ARCH_ARM #ifdef ARCH_ARM
__asm volatile("WFI"); // __asm volatile("WFI");
#endif #endif
#ifdef ARCH_RISCV #ifdef ARCH_RISCV