From d41517ab906751f8daba08162194528dc3914f1d Mon Sep 17 00:00:00 2001 From: Liu_Weichao Date: Fri, 25 Jun 2021 10:20:55 +0800 Subject: [PATCH 1/2] add connection function --- .../general_functions/list/list.h | 4 +- APP_Framework/Framework/connection/4G/Kconfig | 0 .../Framework/connection/4G/Makefile | 3 + .../Framework/connection/4G/adapter_4G.c | 20 +++ APP_Framework/Framework/connection/5G/Kconfig | 0 .../Framework/connection/5G/Makefile | 3 + .../Framework/connection/5G/adapter_5G.c | 20 +++ APP_Framework/Framework/connection/Kconfig | 60 +++++++- APP_Framework/Framework/connection/Makefile | 32 ++++ APP_Framework/Framework/connection/adapter.c | 138 ++++++++++++++++-- APP_Framework/Framework/connection/adapter.h | 62 +++++++- .../Framework/connection/bluetooth/Kconfig | 0 .../Framework/connection/bluetooth/Makefile | 3 + .../connection/bluetooth/adapter_bluetooth.c | 19 +++ .../Framework/connection/ethernet/Kconfig | 0 .../Framework/connection/ethernet/Makefile | 3 + .../connection/ethernet/adapter_ethernet.c | 19 +++ .../Framework/connection/lora/Kconfig | 0 .../Framework/connection/lora/Makefile | 3 + .../Framework/connection/lora/adapter_lora.c | 19 +++ .../Framework/connection/nbiot/Kconfig | 0 .../Framework/connection/nbiot/Makefile | 3 + .../connection/nbiot/adapter_nbiot.c | 19 +++ .../Framework/connection/wifi/Kconfig | 0 .../Framework/connection/wifi/Makefile | 3 + .../Framework/connection/wifi/adapter_wifi.c | 19 +++ .../Framework/connection/zigbee/Kconfig | 0 .../Framework/connection/zigbee/Makefile | 3 + .../connection/zigbee/adapter_zigbee.c | 19 +++ 29 files changed, 452 insertions(+), 22 deletions(-) create mode 100644 APP_Framework/Framework/connection/4G/Kconfig create mode 100644 APP_Framework/Framework/connection/4G/Makefile create mode 100644 APP_Framework/Framework/connection/4G/adapter_4G.c create mode 100644 APP_Framework/Framework/connection/5G/Kconfig create mode 100644 APP_Framework/Framework/connection/5G/Makefile create mode 100644 APP_Framework/Framework/connection/5G/adapter_5G.c create mode 100644 APP_Framework/Framework/connection/bluetooth/Kconfig create mode 100644 APP_Framework/Framework/connection/bluetooth/Makefile create mode 100644 APP_Framework/Framework/connection/bluetooth/adapter_bluetooth.c create mode 100644 APP_Framework/Framework/connection/ethernet/Kconfig create mode 100644 APP_Framework/Framework/connection/ethernet/Makefile create mode 100644 APP_Framework/Framework/connection/ethernet/adapter_ethernet.c create mode 100644 APP_Framework/Framework/connection/lora/Kconfig create mode 100644 APP_Framework/Framework/connection/lora/Makefile create mode 100644 APP_Framework/Framework/connection/lora/adapter_lora.c create mode 100644 APP_Framework/Framework/connection/nbiot/Kconfig create mode 100644 APP_Framework/Framework/connection/nbiot/Makefile create mode 100644 APP_Framework/Framework/connection/nbiot/adapter_nbiot.c create mode 100644 APP_Framework/Framework/connection/wifi/Kconfig create mode 100644 APP_Framework/Framework/connection/wifi/Makefile create mode 100644 APP_Framework/Framework/connection/wifi/adapter_wifi.c create mode 100644 APP_Framework/Framework/connection/zigbee/Kconfig create mode 100644 APP_Framework/Framework/connection/zigbee/Makefile create mode 100644 APP_Framework/Framework/connection/zigbee/adapter_zigbee.c diff --git a/APP_Framework/Applications/general_functions/list/list.h b/APP_Framework/Applications/general_functions/list/list.h index 5fc8a26e..ebc0c9c1 100644 --- a/APP_Framework/Applications/general_functions/list/list.h +++ b/APP_Framework/Applications/general_functions/list/list.h @@ -11,11 +11,11 @@ */ /** -* @file: xs_klist.h +* @file: list.h * @brief: function declaration and structure defintion of list * @version: 1.0 * @author: AIIT XUOS Lab -* @date: 2020/3/2 +* @date: 2021/6/23 * */ diff --git a/APP_Framework/Framework/connection/4G/Kconfig b/APP_Framework/Framework/connection/4G/Kconfig new file mode 100644 index 00000000..e69de29b diff --git a/APP_Framework/Framework/connection/4G/Makefile b/APP_Framework/Framework/connection/4G/Makefile new file mode 100644 index 00000000..b70e80a0 --- /dev/null +++ b/APP_Framework/Framework/connection/4G/Makefile @@ -0,0 +1,3 @@ +SRC_FILES := adapter_4G.c + +include $(KERNEL_ROOT)/compiler.mk \ No newline at end of file diff --git a/APP_Framework/Framework/connection/4G/adapter_4G.c b/APP_Framework/Framework/connection/4G/adapter_4G.c new file mode 100644 index 00000000..5631add4 --- /dev/null +++ b/APP_Framework/Framework/connection/4G/adapter_4G.c @@ -0,0 +1,20 @@ +/* +* Copyright (c) 2020 AIIT XUOS Lab +* XiUOS is licensed under Mulan PSL v2. +* You can use this software according to the terms and conditions of the Mulan PSL v2. +* You may obtain a copy of Mulan PSL v2 at: +* http://license.coscl.org.cn/MulanPSL2 +* THIS SOFTWARE IS PROVIDED ON AN "AS IS" BASIS, WITHOUT WARRANTIES OF ANY KIND, +* EITHER EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO NON-INFRINGEMENT, +* MERCHANTABILITY OR FIT FOR A PARTICULAR PURPOSE. +* See the Mulan PSL v2 for more details. +*/ + +/** + * @file adapter_4G.c + * @brief Implement the connection 4G adapter function + * @version 1.1 + * @author AIIT XUOS Lab + * @date 2021.06.25 + */ + diff --git a/APP_Framework/Framework/connection/5G/Kconfig b/APP_Framework/Framework/connection/5G/Kconfig new file mode 100644 index 00000000..e69de29b diff --git a/APP_Framework/Framework/connection/5G/Makefile b/APP_Framework/Framework/connection/5G/Makefile new file mode 100644 index 00000000..9ce9e188 --- /dev/null +++ b/APP_Framework/Framework/connection/5G/Makefile @@ -0,0 +1,3 @@ +SRC_FILES := adapter_5G.c + +include $(KERNEL_ROOT)/compiler.mk diff --git a/APP_Framework/Framework/connection/5G/adapter_5G.c b/APP_Framework/Framework/connection/5G/adapter_5G.c new file mode 100644 index 00000000..ff5ff194 --- /dev/null +++ b/APP_Framework/Framework/connection/5G/adapter_5G.c @@ -0,0 +1,20 @@ +/* +* Copyright (c) 2020 AIIT XUOS Lab +* XiUOS is licensed under Mulan PSL v2. +* You can use this software according to the terms and conditions of the Mulan PSL v2. +* You may obtain a copy of Mulan PSL v2 at: +* http://license.coscl.org.cn/MulanPSL2 +* THIS SOFTWARE IS PROVIDED ON AN "AS IS" BASIS, WITHOUT WARRANTIES OF ANY KIND, +* EITHER EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO NON-INFRINGEMENT, +* MERCHANTABILITY OR FIT FOR A PARTICULAR PURPOSE. +* See the Mulan PSL v2 for more details. +*/ + +/** + * @file adapter_5G.c + * @brief Implement the connection 5G adapter function + * @version 1.1 + * @author AIIT XUOS Lab + * @date 2021.06.25 + */ + diff --git a/APP_Framework/Framework/connection/Kconfig b/APP_Framework/Framework/connection/Kconfig index b36b4799..386ab61d 100644 --- a/APP_Framework/Framework/connection/Kconfig +++ b/APP_Framework/Framework/connection/Kconfig @@ -1,3 +1,61 @@ menuconfig SUPPORT_CONNECTION_FRAMEWORK bool "support connection framework" - default n \ No newline at end of file + default n + +if SUPPORT_CONNECTION_FRAMEWORK + menuconfig ADAPTER_LORA + bool "Using lora adapter device" + default n + if ADAPTER_LORA + source "$APP_DIR/Framework/connection/lora/Kconfig" + endif + + menuconfig ADAPTER_4G + bool "Using 4G adapter device" + default n + if ADAPTER_4G + source "$APP_DIR/Framework/connection/4G/Kconfig" + endif + + menuconfig ADAPTER_NB + bool "Using nbiot adapter device" + default n + if ADAPTER_NB + source "$APP_DIR/Framework/connection/nbiot/Kconfig" + endif + + menuconfig ADAPTER_WIFI + bool "Using wifi adapter device" + default n + if ADAPTER_WIFI + source "$APP_DIR/Framework/connection/wifi/Kconfig" + endif + + menuconfig ADAPTER_ETHERNET + bool "Using ethernet adapter device" + default n + if ADAPTER_ETHERNET + source "$APP_DIR/Framework/connection/ethernet/Kconfig" + endif + + menuconfig ADAPTER_BLUETOOTH + bool "Using bluetooth adapter device" + default n + if ADAPTER_BLUETOOTH + source "$APP_DIR/Framework/connection/bluetooth/Kconfig" + endif + + menuconfig ADAPTER_ZIGBEE + bool "Using zigbee adapter device" + default n + if ADAPTER_ZIGBEE + source "$APP_DIR/Framework/connection/zigbee/Kconfig" + endif + + menuconfig ADAPTER_5G + bool "Using 5G adapter device" + default n + if ADAPTER_5G + source "$APP_DIR/Framework/connection/5G/Kconfig" + endif +endif diff --git a/APP_Framework/Framework/connection/Makefile b/APP_Framework/Framework/connection/Makefile index 1e13f243..1dbe6153 100644 --- a/APP_Framework/Framework/connection/Makefile +++ b/APP_Framework/Framework/connection/Makefile @@ -1,3 +1,35 @@ SRC_FILES := adapter.c +ifeq ($(CONFIG_ADAPTER_LORA),y) + SRC_DIR += lora +endif + +ifeq ($(CONFIG_ADAPTER_4G),y) + SRC_DIR += 4G +endif + +ifeq ($(CONFIG_ADAPTER_NB),y) + SRC_DIR += nbiot +endif + +ifeq ($(CONFIG_ADAPTER_WIFI),y) + SRC_DIR += wifi +endif + +ifeq ($(CONFIG_ADAPTER_ETHERNET),y) + SRC_DIR += ethernet +endif + +ifeq ($(CONFIG_ADAPTER_BLUETOOTH),y) + SRC_DIR += bluetooth +endif + +ifeq ($(CONFIG_ADAPTER_ZIGBEE),y) + SRC_DIR += zigbee +endif + +ifeq ($(CONFIG_ADAPTER_5G),y) + SRC_DIR += 5G +endif + include $(KERNEL_ROOT)/compiler.mk \ No newline at end of file diff --git a/APP_Framework/Framework/connection/adapter.c b/APP_Framework/Framework/connection/adapter.c index 9bb19937..955f82dd 100644 --- a/APP_Framework/Framework/connection/adapter.c +++ b/APP_Framework/Framework/connection/adapter.c @@ -12,8 +12,8 @@ /** * @file adapter.c - * @brief Implement the communication adapter framework management and API - * @version 1.0 + * @brief Implement the connection adapter framework management and API + * @version 1.1 * @author AIIT XUOS Lab * @date 2021.05.10 */ @@ -46,7 +46,7 @@ int AdapterFrameworkInit(void) * @param name - name string * @return adapter device pointer */ -struct Adapter *AdapterDeviceFindByName(const char *name) +AdapterType AdapterDeviceFindByName(const char *name) { struct Adapter *ret = NULL; struct DoublelistNode *node; @@ -87,6 +87,8 @@ int AdapterDeviceRegister(struct Adapter *adapter) AppDoubleListInsertNodeAfter(&adapter_list, &adapter->link); PrivMutexAbandon(&adapter_list_lock); + adapter->adapter_status = REGISTERED; + return 0; } @@ -103,6 +105,8 @@ int AdapterDeviceUnregister(struct Adapter *adapter) AppDoubleListRmNode(&adapter->link); PrivMutexAbandon(&adapter_list_lock); + adapter->adapter_status = UNREGISTERED; + return 0; } @@ -116,6 +120,11 @@ int AdapterDeviceOpen(struct Adapter *adapter) if (!adapter) return -1; + if (INSTALL == adapter->adapter_status) { + printf("Device %s has already been opened. Just return\n", adapter->name); + return 0; + } + int result = 0; struct IpProtocolDone *ip_done = NULL; @@ -131,7 +140,8 @@ int AdapterDeviceOpen(struct Adapter *adapter) result = priv_done->open(adapter); if (0 == result) { printf("Device %s open success.\n", adapter->name); - }else{ + adapter->adapter_status = INSTALL; + } else { if (adapter->fd) { PrivClose(adapter->fd); adapter->fd = 0; @@ -148,7 +158,8 @@ int AdapterDeviceOpen(struct Adapter *adapter) result = ip_done->open(adapter); if (0 == result) { printf("Device %s open success.\n", adapter->name); - }else{ + adapter->adapter_status = INSTALL; + } else { if (adapter->fd) { PrivClose(adapter->fd); adapter->fd = 0; @@ -174,6 +185,11 @@ int AdapterDeviceClose(struct Adapter *adapter) if (!adapter) return -1; + if (UNINSTALL == adapter->adapter_status) { + printf("Device %s has already been closed. Just return\n", adapter->name); + return 0; + } + int result = 0; struct IpProtocolDone *ip_done = NULL; @@ -187,10 +203,12 @@ int AdapterDeviceClose(struct Adapter *adapter) return 0; result = priv_done->close(adapter); - if (0 == result) + if (0 == result) { printf("%s successfully closed.\n", adapter->name); - else + adapter->adapter_status = UNINSTALL; + } else { printf("Closed %s failure.\n", adapter->name); + } break; @@ -200,10 +218,12 @@ int AdapterDeviceClose(struct Adapter *adapter) return 0; result = ip_done->close(adapter); - if (0 == result) + if (0 == result) { printf("%s successfully closed.\n", adapter->name); - else + adapter->adapter_status = UNINSTALL; + } else { printf("Closed %s failure.\n", adapter->name); + } break; default: @@ -214,13 +234,13 @@ int AdapterDeviceClose(struct Adapter *adapter) } /** - * @description: Read data from adapter + * @description: Receice data from adapter * @param adapter - adapter device pointer * @param dst - buffer to save data * @param len - buffer length * @return gotten data length */ -ssize_t AdapterDeviceRead(struct Adapter *adapter, void *dst, size_t len) +ssize_t AdapterDeviceRecv(struct Adapter *adapter, void *dst, size_t len) { if (!adapter) return -1; @@ -240,19 +260,19 @@ ssize_t AdapterDeviceRead(struct Adapter *adapter, void *dst, size_t len) return ip_done->recv(adapter->socket, dst, len); } else { - printf("AdapterDeviceRead net_protocol %d not support\n", adapter->net_protocol); + printf("AdapterDeviceRecv net_protocol %d not support\n", adapter->net_protocol); return -1; } } /** - * @description: Write data to adapter + * @description: Send data to adapter * @param adapter - adapter device pointer * @param src - data buffer * @param len - data length * @return length of data written */ -ssize_t AdapterDeviceWrite(struct Adapter *adapter, const void *src, size_t len) +ssize_t AdapterDeviceSend(struct Adapter *adapter, const void *src, size_t len) { if (!adapter) return -1; @@ -272,13 +292,13 @@ ssize_t AdapterDeviceWrite(struct Adapter *adapter, const void *src, size_t len) return ip_done->send(adapter->socket, src, len); } else { - printf("AdapterDeviceWrite net_protocol %d not support\n", adapter->net_protocol); + printf("AdapterDeviceSend net_protocol %d not support\n", adapter->net_protocol); return -1; } } /** - * @description: Configure adapter + * @description: Configure adapter device * @param adapter - adapter device pointer * @param cmd - command * @param args - command parameter @@ -308,3 +328,89 @@ int AdapterDeviceControl(struct Adapter *adapter, int cmd, void *args) return -1; } } + +/** + * @description: Connect to a certain ip net, only support IP_PROTOCOL + * @param adapter - adapter device pointer + * @param ip - connect ip + * @param port - connect port + * @param ip_type - ip type, IPV4 or IPV6 + * @return success: 0 , failure: other + */ +int AdapterDeviceConnect(struct Adapter *adapter, const char *ip, const char *port, enum IpType ip_type) +{ + if (!adapter) + return -1; + + if (PRIVATE_PROTOCOL == adapter->net_protocol) { + printf("AdapterDeviceConnect not suuport private_protocol, please use join\n"); + return -1; + } else if (IP_PROTOCOL == adapter->net_protocol) { + struct IpProtocolDone *ip_done = (struct IpProtocolDone *)adapter->done; + + if (NULL == ip_done->connect) + return -1; + + return ip_done->connect(adapter, ip, port, ip_type); + } else { + printf("AdapterDeviceConnect net_protocol %d not support\n", adapter->net_protocol); + return -1; + } +} + +/** + * @description: Join to a certain private net, only support PRIVATE_PROTOCOL + * @param adapter - adapter device pointer + * @param priv_net_group - private net group + * @return success: 0 , failure: other + */ +int AdapterDeviceJoin(struct Adapter *adapter, const char *priv_net_group) +{ + if (!adapter) + return -1; + + if (PRIVATE_PROTOCOL == adapter->net_protocol) { + struct PrivProtocolDone *priv_done = (struct PrivProtocolDone *)adapter->done; + + if (NULL == priv_done->join) + return -1; + + return priv_done->join(adapter, priv_net_group); + } else if (IP_PROTOCOL == adapter->net_protocol) { + printf("AdapterDeviceJoin not suuport ip_protocol, please use connect\n"); + return -1; + } else { + printf("AdapterDeviceJoin net_protocol %d not support\n", adapter->net_protocol); + return -1; + } +} + +/** + * @description: Adapter disconnect from ip net or private net group + * @param adapter - adapter device pointer + * @return success: 0 , failure: other + */ +int AdapterDeviceDisconnect(struct Adapter *adapter) +{ + if (!adapter) + return -1; + + if (PRIVATE_PROTOCOL == adapter->net_protocol) { + struct PrivProtocolDone *priv_done = (struct PrivProtocolDone *)adapter->done; + + if (NULL == priv_done->disconnect) + return -1; + + return priv_done->disconnect(adapter); + } else if (IP_PROTOCOL == adapter->net_protocol) { + struct IpProtocolDone *ip_done = (struct IpProtocolDone *)adapter->done; + + if (NULL == ip_done->disconnect) + return -1; + + return ip_done->disconnect(adapter->socket); + } else { + printf("AdapterDeviceDisconnect net_protocol %d not support\n", adapter->net_protocol); + return -1; + } +} diff --git a/APP_Framework/Framework/connection/adapter.h b/APP_Framework/Framework/connection/adapter.h index d66b9fc6..e802032a 100644 --- a/APP_Framework/Framework/connection/adapter.h +++ b/APP_Framework/Framework/connection/adapter.h @@ -12,8 +12,8 @@ /** * @file adapter.h - * @brief Structure and function declarations of the communication adapter framework - * @version 1.0 + * @brief Structure and function declarations of the connection adapter framework + * @version 1.1 * @author AIIT XUOS Lab * @date 2021.05.10 */ @@ -30,6 +30,10 @@ #define ADAPTER_BUFFSIZE 64 +#define ADAPTER_AT_OPERATION 1 +#define ADAPTER_LWIP_OPERATION 2 +#define ADAPTER_RAWIP_OPERATION 3 + #define ADAPTER_LORA_FUNC ((uint32_t)(1 << ATAPTER_LORA)) #define ADAPTER_4G_FUNC ((uint32_t)(1 << ADAPTER_4G)) #define ADAPTER_NBIOT_FUNC ((uint32_t)(1 << ADAPTER_NBIOT)) @@ -40,6 +44,7 @@ #define ADAPTER_5G_FUNC ((uint32_t)(1 << ADAPTER_5G)) struct Adapter; +typedef struct Adapter *AdapterType; struct Socket { @@ -73,6 +78,20 @@ enum NetRoleType ROLE_NONE, }; +enum AdapterStatus +{ + REGISTERED = 1, + UNREGISTERED, + INSTALL, + UNINSTALL, +}; + +enum IpType +{ + IPV4 = 1, + IPV6, +}; + struct AdapterProductInfo { uint32_t functions; @@ -85,7 +104,7 @@ struct IpProtocolDone int (*open)(struct Adapter *adapter); int (*close)(struct Adapter *adapter); int (*ioctl)(struct Adapter *adapter, int cmd, void *args); - int (*connect)(struct Adapter *adapter, const char *ip, const char *port, uint8_t ip_type); + int (*connect)(struct Adapter *adapter, const char *ip, const char *port, enum IpType ip_type); int (*send)(struct Socket *socket, const void *buf, size_t len); int (*recv)(struct Socket *socket, void *buf, size_t len); int (*disconnect)(struct Socket *socket); @@ -112,6 +131,7 @@ struct Adapter enum NetProtocolType net_protocol; enum NetRoleType net_role; + enum AdapterStatus adapter_status; char buffer[ADAPTER_BUFFSIZE]; @@ -120,4 +140,40 @@ struct Adapter struct DoublelistNode link; }; +/*Init adapter framework*/ +int AdapterFrameworkInit(void); + +/*Find adapter device by name*/ +AdapterType AdapterDeviceFindByName(const char *name); + +/*Register the adapter to the linked list*/ +int AdapterDeviceRegister(struct Adapter *adapter); + +/*Unregister the adapter from the linked list*/ +int AdapterDeviceUnregister(struct Adapter *adapter); + +/*Open adapter device*/ +int AdapterDeviceOpen(struct Adapter *adapter); + +/*Close adapter device*/ +int AdapterDeviceClose(struct Adapter *adapter); + +/*Receice data from adapter*/ +ssize_t AdapterDeviceRecv(struct Adapter *adapter, void *dst, size_t len); + +/*Send data to adapter*/ +ssize_t AdapterDeviceSend(struct Adapter *adapter, const void *src, size_t len); + +/*Configure adapter device*/ +int AdapterDeviceControl(struct Adapter *adapter, int cmd, void *args); + +/*Connect to a certain ip net, only support IP_PROTOCOL*/ +int AdapterDeviceConnect(struct Adapter *adapter, const char *ip, const char *port, enum IpType ip_type); + +/*Join to a certain private net, only support PRIVATE_PROTOCOL*/ +int AdapterDeviceJoin(struct Adapter *adapter, const char *priv_net_group); + +/*Adapter disconnect from ip net or private net group*/ +int AdapterDeviceDisconnect(struct Adapter *adapter); + #endif \ No newline at end of file diff --git a/APP_Framework/Framework/connection/bluetooth/Kconfig b/APP_Framework/Framework/connection/bluetooth/Kconfig new file mode 100644 index 00000000..e69de29b diff --git a/APP_Framework/Framework/connection/bluetooth/Makefile b/APP_Framework/Framework/connection/bluetooth/Makefile new file mode 100644 index 00000000..6e3fbfbc --- /dev/null +++ b/APP_Framework/Framework/connection/bluetooth/Makefile @@ -0,0 +1,3 @@ +SRC_FILES := adapter_bluetooth.c + +include $(KERNEL_ROOT)/compiler.mk diff --git a/APP_Framework/Framework/connection/bluetooth/adapter_bluetooth.c b/APP_Framework/Framework/connection/bluetooth/adapter_bluetooth.c new file mode 100644 index 00000000..9ac60d27 --- /dev/null +++ b/APP_Framework/Framework/connection/bluetooth/adapter_bluetooth.c @@ -0,0 +1,19 @@ +/* +* Copyright (c) 2020 AIIT XUOS Lab +* XiUOS is licensed under Mulan PSL v2. +* You can use this software according to the terms and conditions of the Mulan PSL v2. +* You may obtain a copy of Mulan PSL v2 at: +* http://license.coscl.org.cn/MulanPSL2 +* THIS SOFTWARE IS PROVIDED ON AN "AS IS" BASIS, WITHOUT WARRANTIES OF ANY KIND, +* EITHER EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO NON-INFRINGEMENT, +* MERCHANTABILITY OR FIT FOR A PARTICULAR PURPOSE. +* See the Mulan PSL v2 for more details. +*/ + +/** + * @file adapter_bluetooth.c + * @brief Implement the connection bluetooth adapter function + * @version 1.1 + * @author AIIT XUOS Lab + * @date 2021.06.25 + */ diff --git a/APP_Framework/Framework/connection/ethernet/Kconfig b/APP_Framework/Framework/connection/ethernet/Kconfig new file mode 100644 index 00000000..e69de29b diff --git a/APP_Framework/Framework/connection/ethernet/Makefile b/APP_Framework/Framework/connection/ethernet/Makefile new file mode 100644 index 00000000..39f3cab4 --- /dev/null +++ b/APP_Framework/Framework/connection/ethernet/Makefile @@ -0,0 +1,3 @@ +SRC_FILES := adapter_ethernet.c + +include $(KERNEL_ROOT)/compiler.mk diff --git a/APP_Framework/Framework/connection/ethernet/adapter_ethernet.c b/APP_Framework/Framework/connection/ethernet/adapter_ethernet.c new file mode 100644 index 00000000..560973ff --- /dev/null +++ b/APP_Framework/Framework/connection/ethernet/adapter_ethernet.c @@ -0,0 +1,19 @@ +/* +* Copyright (c) 2020 AIIT XUOS Lab +* XiUOS is licensed under Mulan PSL v2. +* You can use this software according to the terms and conditions of the Mulan PSL v2. +* You may obtain a copy of Mulan PSL v2 at: +* http://license.coscl.org.cn/MulanPSL2 +* THIS SOFTWARE IS PROVIDED ON AN "AS IS" BASIS, WITHOUT WARRANTIES OF ANY KIND, +* EITHER EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO NON-INFRINGEMENT, +* MERCHANTABILITY OR FIT FOR A PARTICULAR PURPOSE. +* See the Mulan PSL v2 for more details. +*/ + +/** + * @file adapter_ethernet.c + * @brief Implement the connection ethernet adapter function + * @version 1.1 + * @author AIIT XUOS Lab + * @date 2021.06.25 + */ diff --git a/APP_Framework/Framework/connection/lora/Kconfig b/APP_Framework/Framework/connection/lora/Kconfig new file mode 100644 index 00000000..e69de29b diff --git a/APP_Framework/Framework/connection/lora/Makefile b/APP_Framework/Framework/connection/lora/Makefile new file mode 100644 index 00000000..91779a06 --- /dev/null +++ b/APP_Framework/Framework/connection/lora/Makefile @@ -0,0 +1,3 @@ +SRC_FILES := adapter_lora.c + +include $(KERNEL_ROOT)/compiler.mk diff --git a/APP_Framework/Framework/connection/lora/adapter_lora.c b/APP_Framework/Framework/connection/lora/adapter_lora.c new file mode 100644 index 00000000..7a2af445 --- /dev/null +++ b/APP_Framework/Framework/connection/lora/adapter_lora.c @@ -0,0 +1,19 @@ +/* +* Copyright (c) 2020 AIIT XUOS Lab +* XiUOS is licensed under Mulan PSL v2. +* You can use this software according to the terms and conditions of the Mulan PSL v2. +* You may obtain a copy of Mulan PSL v2 at: +* http://license.coscl.org.cn/MulanPSL2 +* THIS SOFTWARE IS PROVIDED ON AN "AS IS" BASIS, WITHOUT WARRANTIES OF ANY KIND, +* EITHER EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO NON-INFRINGEMENT, +* MERCHANTABILITY OR FIT FOR A PARTICULAR PURPOSE. +* See the Mulan PSL v2 for more details. +*/ + +/** + * @file adapter_lora.c + * @brief Implement the connection lora adapter function + * @version 1.1 + * @author AIIT XUOS Lab + * @date 2021.06.25 + */ diff --git a/APP_Framework/Framework/connection/nbiot/Kconfig b/APP_Framework/Framework/connection/nbiot/Kconfig new file mode 100644 index 00000000..e69de29b diff --git a/APP_Framework/Framework/connection/nbiot/Makefile b/APP_Framework/Framework/connection/nbiot/Makefile new file mode 100644 index 00000000..3dc3423a --- /dev/null +++ b/APP_Framework/Framework/connection/nbiot/Makefile @@ -0,0 +1,3 @@ +SRC_FILES := adapter_nbiot.c + +include $(KERNEL_ROOT)/compiler.mk diff --git a/APP_Framework/Framework/connection/nbiot/adapter_nbiot.c b/APP_Framework/Framework/connection/nbiot/adapter_nbiot.c new file mode 100644 index 00000000..04f98462 --- /dev/null +++ b/APP_Framework/Framework/connection/nbiot/adapter_nbiot.c @@ -0,0 +1,19 @@ +/* +* Copyright (c) 2020 AIIT XUOS Lab +* XiUOS is licensed under Mulan PSL v2. +* You can use this software according to the terms and conditions of the Mulan PSL v2. +* You may obtain a copy of Mulan PSL v2 at: +* http://license.coscl.org.cn/MulanPSL2 +* THIS SOFTWARE IS PROVIDED ON AN "AS IS" BASIS, WITHOUT WARRANTIES OF ANY KIND, +* EITHER EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO NON-INFRINGEMENT, +* MERCHANTABILITY OR FIT FOR A PARTICULAR PURPOSE. +* See the Mulan PSL v2 for more details. +*/ + +/** + * @file adapter_nbiot.c + * @brief Implement the connection nbiot adapter function + * @version 1.1 + * @author AIIT XUOS Lab + * @date 2021.06.25 + */ diff --git a/APP_Framework/Framework/connection/wifi/Kconfig b/APP_Framework/Framework/connection/wifi/Kconfig new file mode 100644 index 00000000..e69de29b diff --git a/APP_Framework/Framework/connection/wifi/Makefile b/APP_Framework/Framework/connection/wifi/Makefile new file mode 100644 index 00000000..e6507100 --- /dev/null +++ b/APP_Framework/Framework/connection/wifi/Makefile @@ -0,0 +1,3 @@ +SRC_FILES := adapter_wifi.c + +include $(KERNEL_ROOT)/compiler.mk diff --git a/APP_Framework/Framework/connection/wifi/adapter_wifi.c b/APP_Framework/Framework/connection/wifi/adapter_wifi.c new file mode 100644 index 00000000..d05c587b --- /dev/null +++ b/APP_Framework/Framework/connection/wifi/adapter_wifi.c @@ -0,0 +1,19 @@ +/* +* Copyright (c) 2020 AIIT XUOS Lab +* XiUOS is licensed under Mulan PSL v2. +* You can use this software according to the terms and conditions of the Mulan PSL v2. +* You may obtain a copy of Mulan PSL v2 at: +* http://license.coscl.org.cn/MulanPSL2 +* THIS SOFTWARE IS PROVIDED ON AN "AS IS" BASIS, WITHOUT WARRANTIES OF ANY KIND, +* EITHER EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO NON-INFRINGEMENT, +* MERCHANTABILITY OR FIT FOR A PARTICULAR PURPOSE. +* See the Mulan PSL v2 for more details. +*/ + +/** + * @file adapter_wifi.c + * @brief Implement the connection wifi adapter function + * @version 1.1 + * @author AIIT XUOS Lab + * @date 2021.06.25 + */ diff --git a/APP_Framework/Framework/connection/zigbee/Kconfig b/APP_Framework/Framework/connection/zigbee/Kconfig new file mode 100644 index 00000000..e69de29b diff --git a/APP_Framework/Framework/connection/zigbee/Makefile b/APP_Framework/Framework/connection/zigbee/Makefile new file mode 100644 index 00000000..0311fe30 --- /dev/null +++ b/APP_Framework/Framework/connection/zigbee/Makefile @@ -0,0 +1,3 @@ +SRC_FILES := adapter_zigbee.c + +include $(KERNEL_ROOT)/compiler.mk diff --git a/APP_Framework/Framework/connection/zigbee/adapter_zigbee.c b/APP_Framework/Framework/connection/zigbee/adapter_zigbee.c new file mode 100644 index 00000000..102830bf --- /dev/null +++ b/APP_Framework/Framework/connection/zigbee/adapter_zigbee.c @@ -0,0 +1,19 @@ +/* +* Copyright (c) 2020 AIIT XUOS Lab +* XiUOS is licensed under Mulan PSL v2. +* You can use this software according to the terms and conditions of the Mulan PSL v2. +* You may obtain a copy of Mulan PSL v2 at: +* http://license.coscl.org.cn/MulanPSL2 +* THIS SOFTWARE IS PROVIDED ON AN "AS IS" BASIS, WITHOUT WARRANTIES OF ANY KIND, +* EITHER EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO NON-INFRINGEMENT, +* MERCHANTABILITY OR FIT FOR A PARTICULAR PURPOSE. +* See the Mulan PSL v2 for more details. +*/ + +/** + * @file adapter_zigbee.c + * @brief Implement the connection zigbee adapter function + * @version 1.1 + * @author AIIT XUOS Lab + * @date 2021.06.25 + */ From 2c9f3f81138774173b5e65c462914ac503552dd2 Mon Sep 17 00:00:00 2001 From: Liu_Weichao Date: Fri, 9 Jul 2021 15:41:22 +0800 Subject: [PATCH 2/2] modify connection framework function and dir --- .../Framework/connection/4G/EC200T/Kconfig | 40 +++ .../Framework/connection/4G/EC200T/Makefile | 3 + .../Framework/connection/4G/EC200T/ec200t.c | 273 ++++++++++++++++++ APP_Framework/Framework/connection/4G/Kconfig | 14 + .../Framework/connection/4G/Makefile | 4 + .../Framework/connection/4G/adapter_4G.c | 70 +++++ APP_Framework/Framework/connection/Kconfig | 36 ++- APP_Framework/Framework/connection/adapter.c | 16 +- APP_Framework/Framework/connection/adapter.h | 48 ++- APP_Framework/Framework/sensor/co2/Kconfig | 22 +- .../Framework/sensor/humidity/Kconfig | 16 +- APP_Framework/Framework/sensor/pm/Kconfig | 22 +- APP_Framework/Framework/sensor/sensor.h | 8 + .../Framework/sensor/temperature/Kconfig | 16 +- APP_Framework/Framework/sensor/voice/Kconfig | 22 +- .../transform_layer/xiuos/transform.c | 30 +- .../transform_layer/xiuos/transform.h | 43 ++- 17 files changed, 610 insertions(+), 73 deletions(-) create mode 100644 APP_Framework/Framework/connection/4G/EC200T/Kconfig create mode 100644 APP_Framework/Framework/connection/4G/EC200T/Makefile create mode 100644 APP_Framework/Framework/connection/4G/EC200T/ec200t.c diff --git a/APP_Framework/Framework/connection/4G/EC200T/Kconfig b/APP_Framework/Framework/connection/4G/EC200T/Kconfig new file mode 100644 index 00000000..247496fd --- /dev/null +++ b/APP_Framework/Framework/connection/4G/EC200T/Kconfig @@ -0,0 +1,40 @@ +config ADAPTER_4G_EC200T + string "EC200T adapter name" + default "ec200t" + +if ADD_XIUOS_FETURES + config ADAPTER_EC200T_PWRKEY + int "EC200T PWRKEY pin number" + default "97" + + config ADAPTER_EC200T_PIN_DRIVER + string "EC200T device pin driver path" + default "/dev/pin" + + config ADAPTER_EC200T_DRIVER_EXTUART + bool "Using extra uart to support 4G" + default n + + config ADAPTER_EC200T_DRIVER + string "EC200T device uart driver path" + default "/dev/uart2_dev2" + depends on !ADAPTER_EC200T_DRIVER_EXTUART + + if ADAPTER_EC200T_DRIVER_EXTUART + config ADAPTER_EC200T_DRIVER + string "EC200T device extra uart driver path" + default "/dev/extuart_dev5" + + config ADAPTER_EC200T_DRIVER_EXT_PORT + int "if EC200T device using extuart, choose port" + default "5" + endif +endif + +if ADD_NUTTX_FETURES + +endif + +if ADD_RTTHREAD_FETURES + +endif diff --git a/APP_Framework/Framework/connection/4G/EC200T/Makefile b/APP_Framework/Framework/connection/4G/EC200T/Makefile new file mode 100644 index 00000000..83a94803 --- /dev/null +++ b/APP_Framework/Framework/connection/4G/EC200T/Makefile @@ -0,0 +1,3 @@ +SRC_FILES := ec200t.c + +include $(KERNEL_ROOT)/compiler.mk diff --git a/APP_Framework/Framework/connection/4G/EC200T/ec200t.c b/APP_Framework/Framework/connection/4G/EC200T/ec200t.c new file mode 100644 index 00000000..3b2db8ce --- /dev/null +++ b/APP_Framework/Framework/connection/4G/EC200T/ec200t.c @@ -0,0 +1,273 @@ +/* +* Copyright (c) 2020 AIIT XUOS Lab +* XiUOS is licensed under Mulan PSL v2. +* You can use this software according to the terms and conditions of the Mulan PSL v2. +* You may obtain a copy of Mulan PSL v2 at: +* http://license.coscl.org.cn/MulanPSL2 +* THIS SOFTWARE IS PROVIDED ON AN "AS IS" BASIS, WITHOUT WARRANTIES OF ANY KIND, +* EITHER EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO NON-INFRINGEMENT, +* MERCHANTABILITY OR FIT FOR A PARTICULAR PURPOSE. +* See the Mulan PSL v2 for more details. +*/ + +/** + * @file ec200t.c + * @brief Implement the connection 4G adapter function, using EC200T device + * @version 1.1 + * @author AIIT XUOS Lab + * @date 2021.07.08 + */ + +#include + +static void Ec200tPowerSet(void) +{ + int pin_fd; + pin_fd = PrivOpen(ADAPTER_EC200T_PIN_DRIVER, O_RDWR); + + struct PinParam pin_param; + pin_param.cmd = GPIO_CONFIG_MODE; + pin_param.mode = GPIO_CFG_INPUT_PULLUP; + pin_param.pin = ADAPTER_EC200T_PWRKEY; + + struct PrivIoctlCfg ioctl_cfg; + ioctl_cfg.ioctl_driver_type = PIN_TYPE; + ioctl_cfg.args = &pin_param; + PrivIoctl(pin_fd, OPE_CFG, &ioctl_cfg); + + struct PinStat pin_stat; + pin_stat.pin = ADAPTER_EC200T_PWRKEY; + pin_stat.val = GPIO_HIGH; + PrivWrite(pin_fd, &pin_stat, 1); + + PrivTaskDelay(600);//at least 500ms + + pin_stat.val = GPIO_LOW; + PrivWrite(pin_fd, &pin_stat, 1); + + PrivClose(pin_fd); +} + +static int Ec200tOpen(struct Adapter *adapter) +{ + uint8_t ec200t_cmd[64]; + + /*step1: open ec200t serial port*/ + adapter->fd = PrivOpen(ADAPTER_EC200T_DRIVER, O_RDWR); + if (adapter->fd < 0) { + printf("Ec200tOpen get serial %s fd error\n", ADAPTER_EC200T_DRIVER); + return -1; + } + + /*step2: serial write "+++", quit transparent mode*/ + memset(ec200t_cmd, 0, sizeof(ec200t_cmd)); + strcpy(ec200t_cmd, "+++"); + PrivWrite(adapter->fd, ec200t_cmd, strlen(ec200t_cmd)); + + /*step3: serial write "AT+CCID", get SIM ID*/ + memset(ec200t_cmd, 0, sizeof(ec200t_cmd)); + strcpy(ec200t_cmd, "AT+CCID\r\n"); + PrivWrite(adapter->fd, ec200t_cmd, strlen(ec200t_cmd)); + + PrivTaskDelay(2500); + + /*step4: serial write "AT+CPIN?", check SIM status*/ + memset(ec200t_cmd, 0, sizeof(ec200t_cmd)); + strcpy(ec200t_cmd, "AT+CPIN?\r\n"); + PrivWrite(adapter->fd, ec200t_cmd, strlen(ec200t_cmd)); + + PrivTaskDelay(2500); + + /*step5: serial write "AT+CREG?", check whether registered to GSM net*/ + memset(ec200t_cmd, 0, sizeof(ec200t_cmd)); + strcpy(ec200t_cmd, "AT+CREG?\r\n"); + PrivWrite(adapter->fd, ec200t_cmd, strlen(ec200t_cmd)); + + PrivTaskDelay(2500); + + /*step6: serial write "AT+QICLOSE", close socket connect before open socket*/ + memset(ec200t_cmd, 0, sizeof(ec200t_cmd)); + strcpy(ec200t_cmd, "AT+QICLOSE=0\r\n"); + PrivWrite(adapter->fd, ec200t_cmd, strlen(ec200t_cmd)); + + PrivTaskDelay(2500); + + /*step7: serial write "AT+QIDEACT", close TCP net before open socket*/ + memset(ec200t_cmd, 0, sizeof(ec200t_cmd)); + strcpy(ec200t_cmd, "AT+QIDEACT=1\r\n"); + PrivWrite(adapter->fd, ec200t_cmd, strlen(ec200t_cmd)); + + PrivTaskDelay(2500); + + ADAPTER_DEBUG("Ec200t open done\n"); + + return 0; +} + +static int Ec200tClose(struct Adapter *adapter) +{ + uint8_t ec200t_cmd[64]; + + /*step1: serial write "+++", quit transparent mode*/ + memset(ec200t_cmd, 0, sizeof(ec200t_cmd)); + strcpy(ec200t_cmd, "+++"); + PrivWrite(adapter->fd, ec200t_cmd, strlen(ec200t_cmd)); + + /*step2: serial write "AT+QICLOSE", close socket connect before open socket*/ + memset(ec200t_cmd, 0, sizeof(ec200t_cmd)); + strcpy(ec200t_cmd, "AT+QICLOSE=0\r\n"); + PrivWrite(adapter->fd, ec200t_cmd, strlen(ec200t_cmd)); + + PrivTaskDelay(2500); + + /*step3: serial write "AT+QIDEACT", close TCP net before open socket*/ + memset(ec200t_cmd, 0, sizeof(ec200t_cmd)); + strcpy(ec200t_cmd, "AT+QIDEACT=1\r\n"); + PrivWrite(adapter->fd, ec200t_cmd, strlen(ec200t_cmd)); + + PrivTaskDelay(2500); + + /*step4: close ec200t serial port*/ + PrivClose(adapter->fd); + + /*step5: power down ec200t*/ + Ec200tPowerSet(); + + return 0; +} + +static int Ec200tIoctl(struct Adapter *adapter, int cmd, void *args) +{ + if (OPE_INT != cmd) { + printf("Ec200tIoctl only support OPE_INT, do not support %d\n", cmd); + return -1; + } + + uint32_t baud_rate = *((uint32_t *)args); + + struct SerialDataCfg serial_cfg; + memset(&serial_cfg, 0 ,sizeof(struct SerialDataCfg)); + serial_cfg.serial_baud_rate = baud_rate; + serial_cfg.serial_data_bits = DATA_BITS_8; + serial_cfg.serial_stop_bits = STOP_BITS_1; + serial_cfg.serial_buffer_size = SERIAL_RB_BUFSZ; + serial_cfg.serial_parity_mode = PARITY_NONE; + serial_cfg.serial_bit_order = STOP_BITS_1; + serial_cfg.serial_invert_mode = NRZ_NORMAL; +#ifdef ADAPTER_EC200T_DRIVER_EXT_PORT + serial_cfg.ext_uart_no = ADAPTER_EC200T_DRIVER_EXT_PORT; + serial_cfg.port_configure = PORT_CFG_INIT; +#endif + + struct PrivIoctlCfg ioctl_cfg; + ioctl_cfg.ioctl_driver_type = SERIAL_TYPE; + ioctl_cfg.args = &serial_cfg; + PrivIoctl(adapter->fd, OPE_INT, &ioctl_cfg); + + return 0; +} + +static int Ec200tConnect(struct Adapter *adapter, const char *ip, const char *port, enum IpType ip_type) +{ + uint8_t ec200t_cmd[64]; + + /*step1: serial write "AT+QICSGP", connect to China Mobile using ipv4 or ipv6*/ + memset(ec200t_cmd, 0, sizeof(ec200t_cmd)); + + if (IPV4 == ip_type) { + strcpy(ec200t_cmd, "AT+QICSGP=1,1,\"CMNET\",\"\",\"\",1\r\n"); + } else if (IPV6 == ip_type) { + strcpy(ec200t_cmd, "AT+QICSGP=1,2,\"CMNET\",\"\",\"\",1\r\n"); + } + + PrivWrite(adapter->fd, ec200t_cmd, strlen(ec200t_cmd)); + + PrivTaskDelay(2500); + + /*step2: serial write "AT+QIACT", open TCP net*/ + memset(ec200t_cmd, 0, sizeof(ec200t_cmd)); + strcpy(ec200t_cmd, "AT+QIACT=1\r\n"); + PrivWrite(adapter->fd, ec200t_cmd, strlen(ec200t_cmd)); + + PrivTaskDelay(2500); + + /*step3: serial write "AT+QIOPEN", connect socket using TCP*/ + memset(ec200t_cmd, 0, sizeof(ec200t_cmd)); + strcpy(ec200t_cmd, "AT+QIOPEN=1,0,\"TCP\",\""); + strcat(ec200t_cmd, ip); + strcat(ec200t_cmd, "\","); + strcat(ec200t_cmd, port); + strcat(ec200t_cmd, ",0,2\r\n"); + + ADAPTER_DEBUG("Ec200t connect AT CMD :%s\n", ec200t_cmd); + PrivWrite(adapter->fd, ec200t_cmd, strlen(ec200t_cmd)); + + ADAPTER_DEBUG("Ec200t connect TCP done\n"); + + return 0; +} + +static int Ec200tSend(struct Adapter *adapter, const void *buf, size_t len) +{ + PrivWrite(adapter->fd, buf, len); + return 0; +} + +static int Ec200tRecv(struct Adapter *adapter, void *buf, size_t len) +{ + PrivRead(adapter->fd, buf, len); + return 0; +} + +static int Ec200tDisconnect(struct Adapter *adapter) +{ + uint8_t ec200t_cmd[64]; + + /*step1: serial write "+++", quit transparent mode*/ + memset(ec200t_cmd, 0, sizeof(ec200t_cmd)); + strcpy(ec200t_cmd, "+++"); + PrivWrite(adapter->fd, ec200t_cmd, strlen(ec200t_cmd)); + + /*step2: serial write "AT+QICLOSE", close socket connect before open socket*/ + memset(ec200t_cmd, 0, sizeof(ec200t_cmd)); + strcpy(ec200t_cmd, "AT+QICLOSE=0\r\n"); + PrivWrite(adapter->fd, ec200t_cmd, strlen(ec200t_cmd)); + + PrivTaskDelay(2500); + + ADAPTER_DEBUG("Ec200t disconnect TCP done\n"); + + return 0; +} + +static const struct IpProtocolDone ec200t_done = +{ + .open = Ec200tOpen, + .close = Ec200tClose, + .ioctl = Ec200tIoctl, + .connect = Ec200tConnect, + .send = Ec200tSend, + .recv = Ec200tRecv, + .disconnect = Ec200tDisconnect, +}; + +AdapterProductInfoType Ec200tAttach(struct Adapter *adapter) +{ + struct AdapterProductInfo *product_info = malloc(sizeof(struct AdapterProductInfo)); + if (!product_info) { + printf("Ec200tAttach malloc product_info error\n"); + free(product_info); + return NULL; + } + + product_info->model_name = ADAPTER_4G_EC200T; + + product_info->model_done = (void *)&ec200t_done; + + Ec200tPowerSet(); + + return product_info; +} + + + diff --git a/APP_Framework/Framework/connection/4G/Kconfig b/APP_Framework/Framework/connection/4G/Kconfig index e69de29b..81603ff3 100644 --- a/APP_Framework/Framework/connection/4G/Kconfig +++ b/APP_Framework/Framework/connection/4G/Kconfig @@ -0,0 +1,14 @@ +config ADAPTER_4G + bool "Using 4G adapter function" + default y + + if ADAPTER_4G + config ADAPTER_EC200T + bool "Using 4G adapter device EC200T" + default y + + if ADAPTER_EC200T + source "$APP_DIR/Framework/connection/4G/EC200T/Kconfig" + endif + + endif diff --git a/APP_Framework/Framework/connection/4G/Makefile b/APP_Framework/Framework/connection/4G/Makefile index b70e80a0..1ef3b927 100644 --- a/APP_Framework/Framework/connection/4G/Makefile +++ b/APP_Framework/Framework/connection/4G/Makefile @@ -1,3 +1,7 @@ SRC_FILES := adapter_4G.c +ifeq ($(CONFIG_ADAPTER_EC200T),y) + SRC_DIR += EC200T +endif + include $(KERNEL_ROOT)/compiler.mk \ No newline at end of file diff --git a/APP_Framework/Framework/connection/4G/adapter_4G.c b/APP_Framework/Framework/connection/4G/adapter_4G.c index 5631add4..7c649ace 100644 --- a/APP_Framework/Framework/connection/4G/adapter_4G.c +++ b/APP_Framework/Framework/connection/4G/adapter_4G.c @@ -18,3 +18,73 @@ * @date 2021.06.25 */ +#include + +#ifdef ADAPTER_EC200T +extern AdapterProductInfoType Ec200tAttach(struct Adapter *adapter); +#endif + +#define ADAPTER_4G_NAME "4G" + +static int Adapter4GRegister(struct Adapter *adapter) +{ + int ret = 0; + + strncpy(adapter->name, ADAPTER_4G_NAME, NAME_NUM_MAX); + + adapter->net_protocol = IP_PROTOCOL; + adapter->net_role = CLIENT; + adapter->adapter_status = UNREGISTERED; + + ret = AdapterDeviceRegister(adapter); + if (ret < 0) { + printf("Adapter4G register error\n"); + return -1; + } + + return ret; +} + +int Adapter4GInit(void) +{ + int ret = 0; + + struct Adapter *adapter = malloc(sizeof(struct Adapter)); + if (!adapter) { + printf("Adapter4GInit malloc error\n"); + free(adapter); + return -1; + } + + ret = Adapter4GRegister(adapter); + if (ret < 0) { + printf("Adapter4GInit register 4G adapter error\n"); + free(adapter); + return -1; + } + +#ifdef ADAPTER_EC200T + AdapterProductInfoType product_info = Ec200tAttach(adapter); + if (!product_info) { + printf("Adapter4GInit ec200t attach error\n"); + free(adapter); + return -1; + } + + adapter->product_info_flag = 1; + adapter->info = product_info; + adapter->done = product_info->model_done; + +#endif + + return ret; +} + +/******************TEST*********************/ +static int Adapter4GTest(void) +{ + int ret = 0; + + + return ret; +} diff --git a/APP_Framework/Framework/connection/Kconfig b/APP_Framework/Framework/connection/Kconfig index 386ab61d..bd062e6f 100644 --- a/APP_Framework/Framework/connection/Kconfig +++ b/APP_Framework/Framework/connection/Kconfig @@ -3,59 +3,63 @@ menuconfig SUPPORT_CONNECTION_FRAMEWORK default n if SUPPORT_CONNECTION_FRAMEWORK - menuconfig ADAPTER_LORA + config CONNECTION_FRAMEWORK_DEBUG + bool "Using connection framework debug log function" + default y + + menuconfig CONNECTION_ADAPTER_LORA bool "Using lora adapter device" default n - if ADAPTER_LORA + if CONNECTION_ADAPTER_LORA source "$APP_DIR/Framework/connection/lora/Kconfig" endif - menuconfig ADAPTER_4G + menuconfig CONNECTION_ADAPTER_4G bool "Using 4G adapter device" default n - if ADAPTER_4G + if CONNECTION_ADAPTER_4G source "$APP_DIR/Framework/connection/4G/Kconfig" endif - menuconfig ADAPTER_NB + menuconfig CONNECTION_ADAPTER_NB bool "Using nbiot adapter device" default n - if ADAPTER_NB + if CONNECTION_ADAPTER_NB source "$APP_DIR/Framework/connection/nbiot/Kconfig" endif - menuconfig ADAPTER_WIFI + menuconfig CONNECTION_ADAPTER_WIFI bool "Using wifi adapter device" default n - if ADAPTER_WIFI + if CONNECTION_ADAPTER_WIFI source "$APP_DIR/Framework/connection/wifi/Kconfig" endif - menuconfig ADAPTER_ETHERNET + menuconfig CONNECTION_ADAPTER_ETHERNET bool "Using ethernet adapter device" default n - if ADAPTER_ETHERNET + if CONNECTION_ADAPTER_ETHERNET source "$APP_DIR/Framework/connection/ethernet/Kconfig" endif - menuconfig ADAPTER_BLUETOOTH + menuconfig CONNECTION_ADAPTER_BLUETOOTH bool "Using bluetooth adapter device" default n - if ADAPTER_BLUETOOTH + if CONNECTION_ADAPTER_BLUETOOTH source "$APP_DIR/Framework/connection/bluetooth/Kconfig" endif - menuconfig ADAPTER_ZIGBEE + menuconfig CONNECTION_ADAPTER_ZIGBEE bool "Using zigbee adapter device" default n - if ADAPTER_ZIGBEE + if CONNECTION_ADAPTER_ZIGBEE source "$APP_DIR/Framework/connection/zigbee/Kconfig" endif - menuconfig ADAPTER_5G + menuconfig CONNECTION_ADAPTER_5G bool "Using 5G adapter device" default n - if ADAPTER_5G + if CONNECTION_ADAPTER_5G source "$APP_DIR/Framework/connection/5G/Kconfig" endif endif diff --git a/APP_Framework/Framework/connection/adapter.c b/APP_Framework/Framework/connection/adapter.c index 955f82dd..30e1c2a4 100644 --- a/APP_Framework/Framework/connection/adapter.c +++ b/APP_Framework/Framework/connection/adapter.c @@ -112,11 +112,13 @@ int AdapterDeviceUnregister(struct Adapter *adapter) /** * @description: Open adapter device - * @param adapter - adapter device pointer + * @param name - adapter device name * @return success: 0 , failure: other */ -int AdapterDeviceOpen(struct Adapter *adapter) +int AdapterDeviceOpen(const char *name) { + struct Adapter *adapter = AdapterDeviceFindByName(name); + if (!adapter) return -1; @@ -258,7 +260,7 @@ ssize_t AdapterDeviceRecv(struct Adapter *adapter, void *dst, size_t len) if (NULL == ip_done->recv) return -1; - return ip_done->recv(adapter->socket, dst, len); + return ip_done->recv(adapter, dst, len); } else { printf("AdapterDeviceRecv net_protocol %d not support\n", adapter->net_protocol); return -1; @@ -290,7 +292,7 @@ ssize_t AdapterDeviceSend(struct Adapter *adapter, const void *src, size_t len) if (NULL == ip_done->send) return -1; - return ip_done->send(adapter->socket, src, len); + return ip_done->send(adapter, src, len); } else { printf("AdapterDeviceSend net_protocol %d not support\n", adapter->net_protocol); return -1; @@ -398,17 +400,17 @@ int AdapterDeviceDisconnect(struct Adapter *adapter) if (PRIVATE_PROTOCOL == adapter->net_protocol) { struct PrivProtocolDone *priv_done = (struct PrivProtocolDone *)adapter->done; - if (NULL == priv_done->disconnect) + if (NULL == priv_done->quit) return -1; - return priv_done->disconnect(adapter); + return priv_done->quit(adapter); } else if (IP_PROTOCOL == adapter->net_protocol) { struct IpProtocolDone *ip_done = (struct IpProtocolDone *)adapter->done; if (NULL == ip_done->disconnect) return -1; - return ip_done->disconnect(adapter->socket); + return ip_done->disconnect(adapter); } else { printf("AdapterDeviceDisconnect net_protocol %d not support\n", adapter->net_protocol); return -1; diff --git a/APP_Framework/Framework/connection/adapter.h b/APP_Framework/Framework/connection/adapter.h index e802032a..d18dbe22 100644 --- a/APP_Framework/Framework/connection/adapter.h +++ b/APP_Framework/Framework/connection/adapter.h @@ -28,6 +28,10 @@ #include #include +#ifdef __cplusplus +extern "C" { +#endif + #define ADAPTER_BUFFSIZE 64 #define ADAPTER_AT_OPERATION 1 @@ -43,8 +47,16 @@ #define ADAPTER_ZIGBEE_FUNC ((uint32_t)(1 << ADAPTER_ZIGBEE)) #define ADAPTER_5G_FUNC ((uint32_t)(1 << ADAPTER_5G)) +#ifdef CONNECTION_FRAMEWORK_DEBUG +#define ADAPTER_DEBUG printf +#else +#define ADAPTER_DEBUF +#endif + struct Adapter; +struct AdapterProductInfo; typedef struct Adapter *AdapterType; +typedef struct AdapterProductInfo *AdapterProductInfoType; struct Socket { @@ -54,14 +66,14 @@ struct Socket enum AdapterType { - ADAPTER_LORA = 0, - ADAPTER_4G , - ADAPTER_NBIOT , - ADAPTER_WIFI , - ADAPTER_ETHERNET , - ADAPTER_BLUETOOTH , - ADAPTER_ZIGBEE , - ADAPTER_5G , + ADAPTER_TYPE_LORA = 0, + ADAPTER_TYPE_4G , + ADAPTER_TYPE_NBIOT , + ADAPTER_TYPE_WIFI , + ADAPTER_TYPE_ETHERNET , + ADAPTER_TYPE_BLUETOOTH , + ADAPTER_TYPE_ZIGBEE , + ADAPTER_TYPE_5G , }; enum NetProtocolType @@ -97,6 +109,8 @@ struct AdapterProductInfo uint32_t functions; const char *vendor_name; const char *model_name; + + void *model_done; }; struct IpProtocolDone @@ -105,9 +119,9 @@ struct IpProtocolDone int (*close)(struct Adapter *adapter); int (*ioctl)(struct Adapter *adapter, int cmd, void *args); int (*connect)(struct Adapter *adapter, const char *ip, const char *port, enum IpType ip_type); - int (*send)(struct Socket *socket, const void *buf, size_t len); - int (*recv)(struct Socket *socket, void *buf, size_t len); - int (*disconnect)(struct Socket *socket); + int (*send)(struct Adapter *adapter, const void *buf, size_t len); + int (*recv)(struct Adapter *adapter, void *buf, size_t len); + int (*disconnect)(struct Adapter *adapter); }; struct PrivProtocolDone @@ -118,7 +132,7 @@ struct PrivProtocolDone int (*join)(struct Adapter *adapter, const char *priv_net_group); int (*send)(struct Adapter *adapter, const void *buf, size_t len); int (*recv)(struct Adapter *adapter, void *buf, size_t len); - int (*disconnect)(struct Adapter *adapter); + int (*quit)(struct Adapter *adapter); }; struct Adapter @@ -126,8 +140,10 @@ struct Adapter char *name; int fd; + int product_info_flag; struct AdapterProductInfo *info; - struct Socket *socket; + + //struct Socket *socket; enum NetProtocolType net_protocol; enum NetRoleType net_role; @@ -153,7 +169,7 @@ int AdapterDeviceRegister(struct Adapter *adapter); int AdapterDeviceUnregister(struct Adapter *adapter); /*Open adapter device*/ -int AdapterDeviceOpen(struct Adapter *adapter); +int AdapterDeviceOpen(const char *name); /*Close adapter device*/ int AdapterDeviceClose(struct Adapter *adapter); @@ -176,4 +192,8 @@ int AdapterDeviceJoin(struct Adapter *adapter, const char *priv_net_group); /*Adapter disconnect from ip net or private net group*/ int AdapterDeviceDisconnect(struct Adapter *adapter); +#ifdef __cplusplus +} +#endif + #endif \ No newline at end of file diff --git a/APP_Framework/Framework/sensor/co2/Kconfig b/APP_Framework/Framework/sensor/co2/Kconfig index 9335d354..bd5d7aaa 100644 --- a/APP_Framework/Framework/sensor/co2/Kconfig +++ b/APP_Framework/Framework/sensor/co2/Kconfig @@ -12,11 +12,21 @@ config SENSOR_ZG09 string "zg09 quantity name" default "co2_1" - config SENSOR_DEVICE_ZG09_DEV - string "zg09 device name" - default "/dev/uart2_dev2" + if ADD_XIUOS_FETURES + config SENSOR_DEVICE_ZG09_DEV + string "zg09 device name" + default "/dev/uart2_dev2" - config SENSOR_DEVICE_ZG09_DEV_EXT_PORT - int "if ZG09 device using extuart, choose port" - default "4" + config SENSOR_DEVICE_ZG09_DEV_EXT_PORT + int "if ZG09 device using extuart, choose port" + default "4" + endif + + if ADD_NUTTX_FETURES + + endif + + if ADD_RTTHREAD_FETURES + + endif endif diff --git a/APP_Framework/Framework/sensor/humidity/Kconfig b/APP_Framework/Framework/sensor/humidity/Kconfig index ca1ab0a6..03fd3623 100644 --- a/APP_Framework/Framework/sensor/humidity/Kconfig +++ b/APP_Framework/Framework/sensor/humidity/Kconfig @@ -12,7 +12,17 @@ config PERCEPTION_HS300X string "HS300x quantity name" default "humidity_1" - config SENSOR_DEVICE_HS300X_DEV - string "HS300x device name" - default "/dev/i2c1_dev0" + if ADD_XIUOS_FETURES + config SENSOR_DEVICE_HS300X_DEV + string "HS300x device name" + default "/dev/i2c1_dev0" + endif + + if ADD_NUTTX_FETURES + + endif + + if ADD_RTTHREAD_FETURES + + endif endif diff --git a/APP_Framework/Framework/sensor/pm/Kconfig b/APP_Framework/Framework/sensor/pm/Kconfig index 11a3d549..e1590a03 100644 --- a/APP_Framework/Framework/sensor/pm/Kconfig +++ b/APP_Framework/Framework/sensor/pm/Kconfig @@ -20,11 +20,21 @@ config SENSOR_PS5308 string "PS5308 quantity PM10 name" default "pm10_1" - config SENSOR_DEVICE_PS5308_DEV - string "PS5308 device name" - default "/dev/uart2_dev2" + if ADD_XIUOS_FETURES + config SENSOR_DEVICE_PS5308_DEV + string "PS5308 device name" + default "/dev/uart2_dev2" - config SENSOR_DEVICE_PS5308_DEV_EXT_PORT - int "if PS5308 device using extuart, choose port" - default "4" + config SENSOR_DEVICE_PS5308_DEV_EXT_PORT + int "if PS5308 device using extuart, choose port" + default "4" + endif + + if ADD_NUTTX_FETURES + + endif + + if ADD_RTTHREAD_FETURES + + endif endif diff --git a/APP_Framework/Framework/sensor/sensor.h b/APP_Framework/Framework/sensor/sensor.h index 08126f64..801f7991 100644 --- a/APP_Framework/Framework/sensor/sensor.h +++ b/APP_Framework/Framework/sensor/sensor.h @@ -26,6 +26,10 @@ #include #include +#ifdef __cplusplus +extern "C" { +#endif + #define SENSOR_QUANTITY_VALUE_ERROR ((uint32_t)0xffffffff) /* Sensor quantity report mode */ @@ -124,4 +128,8 @@ int SensorQuantityControl(struct SensorQuantity *quant, int cmd); uint32_t Crc16(uint8_t * data, uint8_t length); uint8_t GetCheckSum(uint8_t *data, uint8_t head, uint8_t length); +#ifdef __cplusplus +} +#endif + #endif diff --git a/APP_Framework/Framework/sensor/temperature/Kconfig b/APP_Framework/Framework/sensor/temperature/Kconfig index 028b508d..2815c03e 100644 --- a/APP_Framework/Framework/sensor/temperature/Kconfig +++ b/APP_Framework/Framework/sensor/temperature/Kconfig @@ -12,7 +12,17 @@ config SENSOR_HS300X string "HS300x quantity name" default "temperature_1" - config SENSOR_DEVICE_HS300X_DEV - string "HS300x device name" - default "/dev/i2c1_dev0" + if ADD_XIUOS_FETURES + config SENSOR_DEVICE_HS300X_DEV + string "HS300x device name" + default "/dev/i2c1_dev0" + endif + + if ADD_NUTTX_FETURES + + endif + + if ADD_RTTHREAD_FETURES + + endif endif diff --git a/APP_Framework/Framework/sensor/voice/Kconfig b/APP_Framework/Framework/sensor/voice/Kconfig index 944d2807..4d62fe50 100644 --- a/APP_Framework/Framework/sensor/voice/Kconfig +++ b/APP_Framework/Framework/sensor/voice/Kconfig @@ -12,11 +12,21 @@ config SENSOR_D124 string "D124 quantity PM1.0 name" default "voice_1" - config SENSOR_DEVICE_D124_DEV - string "D124 device name" - default "/dev/extuart_dev4" + if ADD_XIUOS_FETURES + config SENSOR_DEVICE_D124_DEV + string "D124 device name" + default "/dev/extuart_dev4" - config SENSOR_DEVICE_D124_DEV_EXT_PORT - int "if D124 device using extuart, choose port" - default "4" + config SENSOR_DEVICE_D124_DEV_EXT_PORT + int "if D124 device using extuart, choose port" + default "4" + endif + + if ADD_NUTTX_FETURES + + endif + + if ADD_RTTHREAD_FETURES + + endif endif diff --git a/APP_Framework/Framework/transform_layer/xiuos/transform.c b/APP_Framework/Framework/transform_layer/xiuos/transform.c index 59254bca..988b6c89 100644 --- a/APP_Framework/Framework/transform_layer/xiuos/transform.c +++ b/APP_Framework/Framework/transform_layer/xiuos/transform.c @@ -21,12 +21,6 @@ #include /**************************mutex***************************/ - -//for test -#define XIUOS_OS - -#ifdef XIUOS_OS - /* private mutex API */ int PrivMutexCreate(pthread_mutex_t *p_mutex, const pthread_mutexattr_t *attr) { @@ -49,11 +43,11 @@ int PrivMutexAbandon(pthread_mutex_t *p_mutex) } /**********************semaphore****************************/ - int PrivSemaphoreCreate(sem_t *sem, int pshared, unsigned int value) { return sem_init(sem, pshared, value); } + int PrivSemaphoreDelete(sem_t *sem) { return sem_destroy(sem); @@ -68,13 +62,13 @@ int PrivSemaphoreObtainNoWait(sem_t *sem) { return sem_trywait(sem); } + int PrivSemaphoreAbandon(sem_t *sem) { return sem_post(sem); } /**************************task*************************/ - int PrivTaskCreate(pthread_t *thread, const pthread_attr_t *attr, void *(*start_routine)(void *), void *arg) { @@ -104,7 +98,7 @@ int PrivTaskDelay(int32_t ms) /*********************fs**************************/ /************************Driver Posix Transform***********************/ -int PrivOpen(const char *path, int flags, ...) +int PrivOpen(const char *path, int flags) { return open(path, flags); } @@ -131,18 +125,31 @@ static int PrivSerialIoctl(int fd, int cmd, void *args) return ioctl(fd, cmd, &serial_cfg); } +static int PrivPinIoctl(int fd, int cmd, void *args) +{ + struct PinParam *pin_cfg = (struct PinParam *)args; + + return ioctl(fd, cmd, &pin_cfg); +} + int PrivIoctl(int fd, int cmd, void *args) { + int ret; struct PrivIoctlCfg *ioctl_cfg = (struct PrivIoctlCfg *)args; switch (ioctl_cfg->ioctl_driver_type) { case SERIAL_TYPE: - PrivSerialIoctl(fd, cmd, ioctl_cfg->args); + ret = PrivSerialIoctl(fd, cmd, ioctl_cfg->args); + break; + case PIN_TYPE: + ret = PrivSerialIoctl(fd, cmd, ioctl_cfg->args); break; default: break; } + + return ret; } /********************memory api************/ @@ -150,6 +157,7 @@ void *PrivMalloc(size_t size) { return UserMalloc(size); } + void *PrivRealloc(void *pointer, size_t size) { return UserRealloc(pointer, size); @@ -159,9 +167,9 @@ void *PrivCalloc(size_t count, size_t size) { return UserCalloc(count, size); } + void PrivFree(void *pointer) { UserFree(pointer); } -#endif diff --git a/APP_Framework/Framework/transform_layer/xiuos/transform.h b/APP_Framework/Framework/transform_layer/xiuos/transform.h index 8e5df63a..38da6475 100644 --- a/APP_Framework/Framework/transform_layer/xiuos/transform.h +++ b/APP_Framework/Framework/transform_layer/xiuos/transform.h @@ -37,6 +37,19 @@ extern "C" { #define NAME_NUM_MAX 32 +/*********************GPIO define*********************/ +#define GPIO_LOW 0x00 +#define GPIO_HIGH 0x01 + +#define GPIO_CFG_OUTPUT 0x00 +#define GPIO_CFG_INPUT 0x01 +#define GPIO_CFG_INPUT_PULLUP 0x02 +#define GPIO_CFG_INPUT_PULLDOWN 0x03 +#define GPIO_CFG_OUTPUT_OD 0x04 + +#define GPIO_CONFIG_MODE 0xffffffff + +/********************SERIAL define*******************/ #define BAUD_RATE_2400 2400 #define BAUD_RATE_4800 4800 #define BAUD_RATE_9600 9600 @@ -75,6 +88,28 @@ extern "C" { #define SERIAL_RB_BUFSZ 128 #endif +struct PinDevIrq +{ + int irq_mode;//< RISING/FALLING/HIGH/LOW + void (*hdr) (void *args);//< callback function + void *args;//< the params of callback function +}; + +struct PinParam +{ + int cmd;//< cmd:GPIO_CONFIG_MODE/GPIO_IRQ_REGISTER/GPIO_IRQ_FREE/GPIO_IRQ_DISABLE/GPIO_IRQ_ENABLE + long pin;//< pin number + int mode;//< pin mode: input/output + struct PinDevIrq irq_set;//< pin irq set + uint64 arg; +}; + +struct PinStat +{ + long pin;//< pin number + uint16_t val;//< pin level +}; + enum ExtSerialPortConfigure { PORT_CFG_INIT = 0, @@ -102,6 +137,7 @@ enum IoctlDriverType SERIAL_TYPE = 0, SPI_TYPE, I2C_TYPE, + PIN_TYPE, DEFAULT_TYPE, }; @@ -135,12 +171,17 @@ int PrivTaskStartup(pthread_t *thread); int PrivTaskDelete(pthread_t thread, int sig); void PrivTaskQuit(void *value_ptr); int PrivTaskDelay(int32_t ms); -int PrivOpen(const char *path, int flags, ...); + +/*********************driver*************************/ + +int PrivOpen(const char *path, int flags); int PrivRead(int fd, void *buf, size_t len); int PrivWrite(int fd, const void *buf, size_t len); int PrivClose(int fd); int PrivIoctl(int fd, int cmd, void *args); +/*********************memory***********************/ + void *PrivMalloc(size_t size); void *PrivRealloc(void *pointer, size_t size); void *PrivCalloc(size_t count, size_t size);