From 316798e98cd7f1a36c0d829566435a4735990f33 Mon Sep 17 00:00:00 2001 From: wgz-code <820906721@qq.com> Date: Thu, 3 Mar 2022 14:43:51 +0800 Subject: [PATCH] support zigbee on nuttx stm32f4discovery --- APP_Framework/Framework/connection/Make.defs | 7 ++ APP_Framework/Framework/connection/Makefile | 79 +++++++++++-------- .../Framework/connection/adapter_agent.c | 17 +++- .../Framework/connection/zigbee/Make.defs | 7 ++ .../Framework/connection/zigbee/Makefile | 19 ++++- .../connection/zigbee/adapter_zigbee.c | 7 ++ .../Framework/connection/zigbee/e18/Kconfig | 6 +- .../Framework/connection/zigbee/e18/Make.defs | 6 ++ .../Framework/connection/zigbee/e18/Makefile | 14 +++- .../Framework/connection/zigbee/e18/e18.c | 16 +++- 10 files changed, 132 insertions(+), 46 deletions(-) create mode 100644 APP_Framework/Framework/connection/Make.defs create mode 100644 APP_Framework/Framework/connection/zigbee/Make.defs create mode 100644 APP_Framework/Framework/connection/zigbee/e18/Make.defs diff --git a/APP_Framework/Framework/connection/Make.defs b/APP_Framework/Framework/connection/Make.defs new file mode 100644 index 000000000..5be109e43 --- /dev/null +++ b/APP_Framework/Framework/connection/Make.defs @@ -0,0 +1,7 @@ +############################################################################ +# APP_Framework/Framework/connection/Make.defs +############################################################################ +ifneq ($(CONFIG_SUPPORT_CONNECTION_FRAMEWORK),) +CONFIGURED_APPS += $(APPDIR)/../../../APP_Framework/Framework/connection/ +endif +include $(wildcard $(APPDIR)/../../../APP_Framework/Framework/connection/*/Make.defs) diff --git a/APP_Framework/Framework/connection/Makefile b/APP_Framework/Framework/connection/Makefile index a030ee9ad..205b9f52b 100644 --- a/APP_Framework/Framework/connection/Makefile +++ b/APP_Framework/Framework/connection/Makefile @@ -1,47 +1,58 @@ -SRC_FILES := adapter.c adapter_agent.c +include $(KERNEL_ROOT)/.config +ifeq ($(CONFIG_ADD_NUTTX_FETURES),y) + include $(APPDIR)/Make.defs + CSRCS += adapter.c adapter_agent.c + include $(APPDIR)/Application.mk -ifeq ($(CONFIG_CONNECTION_INDUSTRIAL_ETHERNET),y) - SRC_DIR += industrial_ethernet endif -ifeq ($(CONFIG_CONNECTION_INDUSTRIAL_FIELDBUS),y) - SRC_DIR += industrial_fieldbus -endif +ifeq ($(CONFIG_ADD_XIUOS_FETURES),y) + SRC_FILES := adapter.c adapter_agent.c -ifeq ($(CONFIG_CONNECTION_INDUSTRIAL_WLAN),y) - SRC_DIR += industrial_wlan -endif + ifeq ($(CONFIG_CONNECTION_INDUSTRIAL_ETHERNET),y) + SRC_DIR += industrial_ethernet + endif -ifeq ($(CONFIG_CONNECTION_ADAPTER_LORA),y) - SRC_DIR += lora -endif + ifeq ($(CONFIG_CONNECTION_INDUSTRIAL_FIELDBUS),y) + SRC_DIR += industrial_fieldbus + endif -ifeq ($(CONFIG_CONNECTION_ADAPTER_4G),y) - SRC_DIR += 4g -endif + ifeq ($(CONFIG_CONNECTION_INDUSTRIAL_WLAN),y) + SRC_DIR += industrial_wlan + endif -ifeq ($(CONFIG_CONNECTION_ADAPTER_NB),y) - SRC_DIR += nbiot -endif + ifeq ($(CONFIG_CONNECTION_ADAPTER_LORA),y) + SRC_DIR += lora + endif -ifeq ($(CONFIG_CONNECTION_ADAPTER_WIFI),y) - SRC_DIR += wifi -endif + ifeq ($(CONFIG_CONNECTION_ADAPTER_4G),y) + SRC_DIR += 4g + endif -ifeq ($(CONFIG_CONNECTION_ADAPTER_ETHERNET),y) - SRC_DIR += ethernet -endif + ifeq ($(CONFIG_CONNECTION_ADAPTER_NB),y) + SRC_DIR += nbiot + endif -ifeq ($(CONFIG_CONNECTION_ADAPTER_BLUETOOTH),y) - SRC_DIR += bluetooth -endif + ifeq ($(CONFIG_CONNECTION_ADAPTER_WIFI),y) + SRC_DIR += wifi + endif -ifeq ($(CONFIG_CONNECTION_ADAPTER_ZIGBEE),y) - SRC_DIR += zigbee -endif + ifeq ($(CONFIG_CONNECTION_ADAPTER_ETHERNET),y) + SRC_DIR += ethernet + endif -ifeq ($(CONFIG_CONNECTION_ADAPTER_5G),y) - SRC_DIR += 5g -endif + ifeq ($(CONFIG_CONNECTION_ADAPTER_BLUETOOTH),y) + SRC_DIR += bluetooth + endif -include $(KERNEL_ROOT)/compiler.mk \ No newline at end of file + ifeq ($(CONFIG_CONNECTION_ADAPTER_ZIGBEE),y) + SRC_DIR += zigbee + endif + + ifeq ($(CONFIG_CONNECTION_ADAPTER_5G),y) + SRC_DIR += 5g + endif + + include $(KERNEL_ROOT)/compiler.mk + +endif \ No newline at end of file diff --git a/APP_Framework/Framework/connection/adapter_agent.c b/APP_Framework/Framework/connection/adapter_agent.c index 12ee030da..37bb40f06 100755 --- a/APP_Framework/Framework/connection/adapter_agent.c +++ b/APP_Framework/Framework/connection/adapter_agent.c @@ -26,7 +26,9 @@ #include #include #include -#include +#ifdef ADD_XIUOS_FETURES +# include +#endif #define AT_CMD_MAX_LEN 128 #define AT_AGENT_MAX 2 @@ -159,9 +161,9 @@ int ATOrderSend(ATAgentType agent, uint32 timeout_s, ATReplyType reply, const ch ATSprintf(agent->fd, cmd_expr, params); va_end(params); PrivMutexAbandon(&agent->lock); - if (PrivSemaphoreObtainWait(&agent->rsp_sem, &abstime) != EOK) { + if (PrivSemaphoreObtainWait(&agent->rsp_sem, &abstime) != 0) { printf("take sem %d timeout\n",agent->rsp_sem); - result = -ETIMEOUT; + result = -2; goto __out; } } else { @@ -277,7 +279,7 @@ int EntmSend(ATAgentType agent, const char *data, int len) PrivWrite(agent->fd, send_buf, len); PrivMutexAbandon(&agent->lock); printf("entm send %s length %d\n",send_buf, len); - return EOK; + return 0; } int EntmRecv(ATAgentType agent, char *rev_buffer, int buffer_len, int timeout_s) @@ -507,9 +509,16 @@ static int ATAgentInit(ATAgentType agent) agent->receive_mode = DEFAULT_MODE; +#ifdef ADD_NUTTX_FETURES + pthread_attr_t attr = PTHREAD_ATTR_INITIALIZER; + attr.priority = 18; + attr.stacksize = 4096; + +#else pthread_attr_t attr; attr.schedparam.sched_priority = 18; attr.stacksize = 4096; +#endif PrivTaskCreate(&agent->at_handler, &attr, ATAgentReceiveProcess, agent); printf("create agent->at_handler = %d\n",agent->at_handler); diff --git a/APP_Framework/Framework/connection/zigbee/Make.defs b/APP_Framework/Framework/connection/zigbee/Make.defs new file mode 100644 index 000000000..b4c1b03da --- /dev/null +++ b/APP_Framework/Framework/connection/zigbee/Make.defs @@ -0,0 +1,7 @@ +############################################################################ +# APP_Framework/Framework/connection/zigbee/Make.defs +############################################################################ +ifneq ($(CONFIG_CONNECTION_ADAPTER_ZIGBEE),) +CONFIGURED_APPS += $(APPDIR)/../../../APP_Framework/Framework/connection/zigbee +endif +include $(wildcard $(APPDIR)/../../../APP_Framework/Framework/connection/zigbee/*/Make.defs) diff --git a/APP_Framework/Framework/connection/zigbee/Makefile b/APP_Framework/Framework/connection/zigbee/Makefile index 316cd2d06..cfd9f20c0 100644 --- a/APP_Framework/Framework/connection/zigbee/Makefile +++ b/APP_Framework/Framework/connection/zigbee/Makefile @@ -1,7 +1,18 @@ -SRC_FILES := adapter_zigbee.c +include $(KERNEL_ROOT)/.config +ifeq ($(CONFIG_ADD_NUTTX_FETURES),y) + include $(APPDIR)/Make.defs + CSRCS += adapter_zigbee.c + include $(APPDIR)/Application.mk -ifeq ($(CONFIG_ADAPTER_E18),y) - SRC_DIR += e18 endif -include $(KERNEL_ROOT)/compiler.mk +ifeq ($(CONFIG_ADD_XIZI_FETURES),y) + SRC_FILES := adapter_zigbee.c + + ifeq ($(CONFIG_ADAPTER_E18),y) + SRC_DIR += e18 + endif + + include $(KERNEL_ROOT)/compiler.mk + +endif diff --git a/APP_Framework/Framework/connection/zigbee/adapter_zigbee.c b/APP_Framework/Framework/connection/zigbee/adapter_zigbee.c index 258946501..bda5f8836 100644 --- a/APP_Framework/Framework/connection/zigbee/adapter_zigbee.c +++ b/APP_Framework/Framework/connection/zigbee/adapter_zigbee.c @@ -120,7 +120,10 @@ int openzigbee(void) return 0; } + +#ifdef ADD_XIUOS_FETURES SHELL_EXPORT_CMD(SHELL_CMD_PERMISSION(0)|SHELL_CMD_TYPE(SHELL_TYPE_CMD_FUNC)|SHELL_CMD_PARAM_NUM(0)|SHELL_CMD_DISABLE_RETURN, openzigbee, openzigbee, show adapter zigbee information); +#endif int sendzigbee(int argc, char *argv[]) { @@ -140,7 +143,9 @@ int sendzigbee(int argc, char *argv[]) return 0; } +#ifdef ADD_XIUOS_FETURES SHELL_EXPORT_CMD(SHELL_CMD_PERMISSION(0)|SHELL_CMD_TYPE(SHELL_TYPE_CMD_MAIN)|SHELL_CMD_PARAM_NUM(2)|SHELL_CMD_DISABLE_RETURN, sendzigbee, sendzigbee, show adapter zigbee information); +#endif int recvzigbee(void) { @@ -153,5 +158,7 @@ int recvzigbee(void) return 0; } +#ifdef ADD_XIUOS_FETURES SHELL_EXPORT_CMD(SHELL_CMD_PERMISSION(0)|SHELL_CMD_TYPE(SHELL_TYPE_CMD_FUNC)|SHELL_CMD_PARAM_NUM(0)|SHELL_CMD_DISABLE_RETURN, recvzigbee, recvzigbee, show adapter zigbee information); +#endif diff --git a/APP_Framework/Framework/connection/zigbee/e18/Kconfig b/APP_Framework/Framework/connection/zigbee/e18/Kconfig index 39b71ffa1..607df8f3e 100644 --- a/APP_Framework/Framework/connection/zigbee/e18/Kconfig +++ b/APP_Framework/Framework/connection/zigbee/e18/Kconfig @@ -40,7 +40,11 @@ if ADD_XIZI_FETURES endif if ADD_NUTTX_FETURES - + config ADAPTER_E18_DRIVER + string "E18 device uart driver path" + default "/dev/ttyS1" + ---help--- + If USART1 is selected, then fill in /dev/ttyS1 here. endif if ADD_RTTHREAD_FETURES diff --git a/APP_Framework/Framework/connection/zigbee/e18/Make.defs b/APP_Framework/Framework/connection/zigbee/e18/Make.defs new file mode 100644 index 000000000..3097f8dd9 --- /dev/null +++ b/APP_Framework/Framework/connection/zigbee/e18/Make.defs @@ -0,0 +1,6 @@ +############################################################################ +# APP_Framework/Framework/connection/zigbee/e18/Make.defs +############################################################################ +ifneq ($(CONFIG_ADAPTER_ZIGBEE_E18),) +CONFIGURED_APPS += $(APPDIR)/../../../APP_Framework/Framework/connection/zigbee/e18 +endif diff --git a/APP_Framework/Framework/connection/zigbee/e18/Makefile b/APP_Framework/Framework/connection/zigbee/e18/Makefile index ce5bc86f9..1ac35b43f 100644 --- a/APP_Framework/Framework/connection/zigbee/e18/Makefile +++ b/APP_Framework/Framework/connection/zigbee/e18/Makefile @@ -1,3 +1,13 @@ -SRC_FILES := e18.c +include $(KERNEL_ROOT)/.config +ifeq ($(CONFIG_ADD_NUTTX_FETURES),y) + include $(APPDIR)/Make.defs + CSRCS += e18.c + include $(APPDIR)/Application.mk -include $(KERNEL_ROOT)/compiler.mk \ No newline at end of file +endif + +ifeq ($(CONFIG_ADD_XIZI_FETURES),y) + SRC_FILES := e18.c + + include $(KERNEL_ROOT)/compiler.mk +endif \ No newline at end of file diff --git a/APP_Framework/Framework/connection/zigbee/e18/e18.c b/APP_Framework/Framework/connection/zigbee/e18/e18.c index 4181d9187..640d6d582 100644 --- a/APP_Framework/Framework/connection/zigbee/e18/e18.c +++ b/APP_Framework/Framework/connection/zigbee/e18/e18.c @@ -37,6 +37,19 @@ 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*/ + +#ifdef ADD_NUTTX_FETURES +static int E18UartOpen(struct Adapter *adapter) +{ + adapter->fd = PrivOpen(ADAPTER_E18_DRIVER, O_RDWR); + if (adapter->fd < 0) { + printf("E18UartSetUp get serial %s fd error\n", ADAPTER_E18_DRIVER); + return -1; + } + + return adapter->fd; +} +#else static int E18UartOpen(struct Adapter *adapter) { if (NULL == adapter) { @@ -78,6 +91,7 @@ static int E18UartOpen(struct Adapter *adapter) printf("Zigbee uart config ready\n"); return 0; } +#endif static int E18NetworkModeConfig(struct Adapter *adapter) { @@ -204,7 +218,7 @@ static int E18Open(struct Adapter *adapter) /*step2: init AT agent*/ if (!adapter->agent) { char *agent_name = "zigbee_device"; - if (EOK != InitATAgent(agent_name, adapter->fd, 512)) { + if (0 != InitATAgent(agent_name, adapter->fd, 512)) { printf("at agent init failed !\n"); return -1; }