diff --git a/components/amp_adapter/include/aos_log.h b/components/amp_adapter/include/aos_log.h new file mode 100644 index 0000000000000000000000000000000000000000..6ee85ff84a3041b76f51313ac662eb0aef77675e --- /dev/null +++ b/components/amp_adapter/include/aos_log.h @@ -0,0 +1,58 @@ +/* + * Copyright (C) 2015-2020 Alibaba Group Holding Limited + */ + +#ifndef AOS_LOG_H +#define AOS_LOG_H + +#include +#include + +typedef enum { + AOS_LOG_NONE, /* disable log */ + AOS_LOG_FATAL, /* fatal log will output */ + AOS_LOG_ERROR, /* fatal + error log will output */ + AOS_LOG_WARN, /* fatal + warn + error log will output(default level) */ + AOS_LOG_INFO, /* info + warn + error log will output */ + AOS_LOG_DEBUG, /* debug + info + warn + error + fatal log will output */ + AOS_LOG_VERBOSE, +} haas_log_level_t; + +/** + * Function prototype for syncronized log text, Recommed using below brief API LOGX instead of this. + * + * @param[in] s Serverity of Log + * @param[in] tag Usually File name + * @param[in] fmt, ... Variable Parameter, support format print to log + * + * @return 0 on success, negative error on failure. + */ +int aos_log(const unsigned char s, const char *tag, const char *fmt, ...); + + +/** + * Set the log level. + * + * @param[in] log_level level to be set,must be one of AOS_LL_NONE,AOS_LL_FATAL, + * AOS_LL_ERROR,AOS_LL_WARN,AOS_LL_INFO or AOS_LL_DEBUG. + * + * @return 0 on success, negative error on failure. + */ +int aos_log_set_level(haas_log_level_t log_level); + + +#define AOS_LOGF(tag, ...) aos_log(AOS_LOG_FATAL, tag, __VA_ARGS__) + +#define AOS_LOGE(tag, ...) aos_log(AOS_LOG_ERROR, tag, __VA_ARGS__) + +#define AOS_LOGW(tag, ...) aos_log(AOS_LOG_WARN, tag, __VA_ARGS__) + +#define AOS_LOGI(tag, ...) aos_log(AOS_LOG_INFO, tag, __VA_ARGS__) + +#define AOS_LOGD(tag, ...) aos_log(AOS_LOG_DEBUG, tag, __VA_ARGS__) + +#define AOS_LOGV(tag, ...) aos_log(AOS_LOG_VERBOSE, tag, __VA_ARGS__) + + +#endif /* AOS_LOG_H */ + diff --git a/components/amp_adapter/include/aos_network.h b/components/amp_adapter/include/aos_network.h index d4a38cfd794a493bc2c99d9efb0c007f7ea89878..bdb68c44f5960105d8fe68e0066d3e6af822d24a 100644 --- a/components/amp_adapter/include/aos_network.h +++ b/components/amp_adapter/include/aos_network.h @@ -2,13 +2,57 @@ * Copyright (C) 2015-2020 Alibaba Group Holding Limited */ +#ifndef AOS_NETWORK_H +#define AOS_NETWORK_H + +#include #ifndef _AOS_NETWORK_H_ #define _AOS_NETWORK_H_ #define SCANNED_WIFI_COUNT_MAX 32 #define SCANNED_LOCATOR_COUNT_MAX 32 +typedef enum { + AOS_ERR_WIFI_BASE = 0x3000, /*!< WiFi ERR NUM BASE */ + AOS_ERR_WIFI_NOT_INIT, /*!< WiFi driver was not installed by esp_wifi_init */ + AOS_ERR_WIFI_NOT_STARTED, /*!< WiFi driver was not started by esp_wifi_start */ + AOS_ERR_WIFI_NOT_STOPPED, /*!< WiFi driver was not stopped by esp_wifi_stop */ + AOS_ERR_WIFI_IF, /*!< WiFi interface error */ + AOS_ERR_WIFI_MODE, /*!< WiFi mode error */ + AOS_ERR_WIFI_STATE, /*!< WiFi internal state error */ + AOS_ERR_WIFI_CONN, /*!< WiFi internal control block of station or soft-AP error */ + AOS_ERR_WIFI_NVS, /*!< WiFi internal NVS module error */ + AOS_ERR_WIFI_MAC, /*!< MAC address is invalid */ + AOS_ERR_WIFI_SSID, /*!< SSID is invalid */ + AOS_ERR_WIFI_PASSWORD, /*!< Password is invalid */ + AOS_ERR_WIFI_TIMEOUT, /*!< Timeout error */ + AOS_ERR_WIFI_WAKE_FAIL, /*!< WiFi is in sleep state(RF closed) and wakeup fail */ + AOS_ERR_WIFI_WOULD_BLOCK, /*!< The caller would block */ + AOS_ERR_WIFI_NOT_CONNECT, /*!< Station still in disconnect status */ + AOS_ERR_WIFI_POST, /*!< Failed to post the event to WiFi task */ + AOS_ERR_WIFI_INIT_STATE, /*!< Invalod WiFi state when init/deinit is called */ + AOS_ERR_WIFI_STOP_STATE, /*!< Returned when WiFi is stopping */ + AOS_ERR_WIFI_NOT_ASSOC, /*!< The WiFi connection is not associated */ + AOS_ERR_WIFI_TX_DISALLOW, /*!< The WiFi TX is disallowed */ + AOS_ERR_TCPIP_ADAPTER_INVALID_PARAMS, + AOS_ERR_TCPIP_ADAPTER_IF_NOT_READY, + AOS_ERR_TCPIP_ADAPTER_DHCPC_START_FAILED, + AOS_ERR_TCPIP_ADAPTER_NO_MEM +} AOS_NETWORK_ERR_E; + +typedef enum { + AOS_NET_NOINIT = 0, + AOS_NET_STA_STARTED, + AOS_NET_STA_GOT_IP, + AOS_NET_STA_LOST_IP, + AOS_NET_STA_DISCONNECTED, + AOS_NET_STA_CONNECTED, + AOS_NET_STA_STOPED, + AOS_NET_STATE_UNKNOWN +} AOS_NETWORK_STATE_E; typedef enum { AOS_NETWORK_WIFI, + AOS_NETWORK_WIFI_STA, + AOS_NETWORK_WIFI_AP, AOS_NETWORK_CELLULAR, AOS_NETWORK_ETHERNET, AOS_NETWORK_UNKNOW, @@ -35,6 +79,14 @@ typedef enum { AOS_NETWORK_SHAREMODE_AUTHTYPE_INVALID } AOS_NETWORK_SHAREMODE_AUTHTYPE_E; +typedef struct { + void (*cb)(int status, void *); + int wifi_state; + int wifi_mode; + bool is_initialized; + bool is_started; +} aos_wifi_manager_t; + typedef struct aos_sim_info { char imsi[32]; char imei[32]; @@ -61,6 +113,19 @@ typedef struct aos_wifi_info { int rssi; } aos_wifi_info_t; + +/** @brief network ifconfig type */ +#define IPADDR_STR_LEN 16 +typedef struct aos_ifconfig_info { + bool dhcp_en; /**< dhcp is enabled */ + char ip_addr[IPADDR_STR_LEN]; /**< ip address */ + char mask[IPADDR_STR_LEN]; /**< ip address mask */ + char gw[IPADDR_STR_LEN]; /**< gateway ip address */ + char dns_server[IPADDR_STR_LEN]; /**< dns server address */ + char mac[IPADDR_STR_LEN + 2]; /**< mac address */ + int rssi; /**< rssi */ +} aos_ifconfig_info_t; + typedef struct aos_scanned_wifi_info { int num; aos_wifi_info_t wifi_info[SCANNED_WIFI_COUNT_MAX]; @@ -76,41 +141,25 @@ typedef struct aos_sharemode_info { AOS_NETWORK_SHAREMODE_E share_mode; } aos_sharemode_info_t; -/** - * @brief file close - * - * @param[out] ip: ip pointer - * - * @return 0: success, -1: failed - */ -int aos_wifi_init(); +int aos_wifi_init(aos_wifi_manager_t *wifi_manager); + +int aos_wifi_start(aos_wifi_manager_t *wifi_manager); -/** - * @brief file close - * - * @param[out] ip: ip pointer - * - * @return 0: success, -1: failed - */ int aos_wifi_connect(const char *ssid, const char *passwd); -/** - * @brief file close - * - * @param[out] ip: ip pointer - * - * @return 0: success, -1: failed - */ +int aos_wifi_stop(aos_wifi_manager_t *wifi_manager); + int aos_wifi_disconnect(); -/** - * @brief file close - * - * @param[out] ip: ip pointer - * - * @return 0: success, -1: failed - */ -int aos_get_wifi_info(aos_wifi_info_t *wifi_info); +int aos_wifi_get_info(aos_wifi_info_t *wifi_info); + +int aos_wifi_get_state(); + +int aos_wifi_deinit(aos_wifi_manager_t *wifi_manager); + +int aos_net_set_ifconfig(aos_ifconfig_info_t *info); + +int aos_net_get_ifconfig(aos_ifconfig_info_t *info); /** * @brief file close @@ -198,3 +247,4 @@ int aos_location_scaned_wifi_info(aos_scanned_wifi_info_t *scaned_wifi); #endif /* _AOS_NETWORK_H_ */ +#endif diff --git a/components/amp_adapter/include/aos_system.h b/components/amp_adapter/include/aos_system.h index d34c3fb9f3bbb0c440525c06e6f974278500b06d..c218f3d11a211b2d4f8373639548c4e04ae025bb 100644 --- a/components/amp_adapter/include/aos_system.h +++ b/components/amp_adapter/include/aos_system.h @@ -76,33 +76,6 @@ const char *aos_get_device_name(void); */ int aos_system_sleep(void); -/** - * @brief get RTOS default priority - * - * @return default priority - */ -int aos_get_wireless_info(struct _amp_wireless_info_t *info); - -/** - * @brief get RTOS default priority - * - * @return default priority - */ -int aos_get_network_status(void); - -/** - * @brief get RTOS default priority - * - * @return default priority - */ -int aos_get_ip(char *ip); - -/** - * @brief get RTOS default priority - * - * @return default priority - */ -int aos_get_mac_addr(unsigned char mac[6]); /** * @brief get RTOS default priority diff --git a/components/amp_adapter/package.yaml b/components/amp_adapter/package.yaml index 5aa7612ab8b14eb50c900d363a5ba2ac2da3005d..17664ab87e82cef9073dedcdca3c75f27253856e 100644 --- a/components/amp_adapter/package.yaml +++ b/components/amp_adapter/package.yaml @@ -67,7 +67,6 @@ source_file: - platform/aos/haas200/amp_ota_port.c ? - platform/aos/haaseduk1/amp_ota_port.c ? - platform/aos/aos_system.c ? - - platform/aos/app_ota.c ? - platform/aos/network/*.c ? - platform/aos/peripheral/*.c ? - platform/esp_idf/*.c ? diff --git a/components/amp_adapter/platform/aos/aos_log.c b/components/amp_adapter/platform/aos/aos_log.c new file mode 100644 index 0000000000000000000000000000000000000000..e01a414ccd936269abf83ed4f1b46e63a8dea2ea --- /dev/null +++ b/components/amp_adapter/platform/aos/aos_log.c @@ -0,0 +1,32 @@ +#include "aos_log.h" + +#include +#include +#include + +#include "ulog/ulog.h" +#include "aos/kernel.h" +#include "aos/errno.h" + +static int local_log_level = AOS_LOG_VERBOSE; + +int aos_log(const unsigned char s, const char *tag, const char *fmt, ...) +{ + if (s > local_log_level) { + return 0; + } + + va_list list; + va_start(list, fmt); + ulog(s, "AOS", tag, 0, fmt, list); + va_end(list); + + return 0; +} + +int aos_log_set_level(haas_log_level_t log_level) +{ + local_log_level = log_level; + + aos_set_log_level(log_level); +} diff --git a/components/amp_adapter/platform/aos/aos_system.c b/components/amp_adapter/platform/aos/aos_system.c index 70c6d2bcce5504dd42a10ff437687ab5fc0b8292..ee4917d54b00c296a0975455bc61a074a67fe7c3 100644 --- a/components/amp_adapter/platform/aos/aos_system.c +++ b/components/amp_adapter/platform/aos/aos_system.c @@ -81,54 +81,12 @@ const char *aos_get_platform_type(void) return _SYSINFO_DEVICE_NAME; } -int aos_get_ip(char *ip) -{ -#ifndef AOS_BOARD_HAAS700 - netmgr_hdl_t hdl; - netmgr_ifconfig_info_t info = {0}; - - hdl = netmgr_get_dev("/dev/wifi0"); - if(hdl < 0) { - return -1; - } - - if(netmgr_get_ifconfig(hdl, &info) < 0) { - return -1; - } - - if (0 == strcmp(info.ip_addr, "0.0.0.0")) { - return -1; - } - return 0; -#else - return -1; -#endif -} - -int aos_get_mac_addr(unsigned char mac[8]) -{ - // TODO: ? - return 0; -} - int aos_network_status_registercb(void (*cb)(int status, void *), void *arg) { return aos_wifi_set_msg_cb(cb); } -int aos_get_network_status(void) -{ -#ifndef AOS_BOARD_HAAS700 - int ret = 0; - ret = aos_wifi_get_state(); - - return (ret == CONN_STATE_NETWORK_CONNECTED); -#else - return 0; -#endif -} - /** * @brief get wifi mac address * @param[out] mac: mac address,format: "01:23:45:67:89:ab" diff --git a/components/amp_adapter/platform/aos/network/aos_network.c b/components/amp_adapter/platform/aos/network/aos_network.c new file mode 100644 index 0000000000000000000000000000000000000000..0aad4c773d2c4fccba11391fa1784c863329b360 --- /dev/null +++ b/components/amp_adapter/platform/aos/network/aos_network.c @@ -0,0 +1,309 @@ +/* + * Copyright (C) 2015-2020 Alibaba Group Holding Limited + */ +#ifndef AOS_BOARD_HAAS700 +#include "amp_platform.h" +#include "aos_network.h" +#include "netmgr.h" +#include "netmgr_wifi.h" +#include +#include + +#ifndef WIFI_DEV_PATH +#define WIFI_DEV_PATH "/dev/wifi0" +#endif + +#define LOG_TAG "aos_wifi" + +static int _remap_exceptions(int e) +{ + int32_t err = 0; + // switch (e) { + // case ESP_ERR_WIFI_NOT_INIT: + // err = AOS_ERR_WIFI_NOT_INIT; + // break; + // case ESP_ERR_WIFI_NOT_STARTED: + // err = AOS_ERR_WIFI_NOT_STARTED; + // break; + // case ESP_ERR_WIFI_NOT_STOPPED: + // err = AOS_ERR_WIFI_NOT_STOPPED; + // break; + // case ESP_ERR_WIFI_IF: + // err = AOS_ERR_WIFI_IF; + // break; + // case ESP_ERR_WIFI_MODE: + // err = AOS_ERR_WIFI_MODE; + // break; + // case ESP_ERR_WIFI_STATE: + // err = AOS_ERR_WIFI_STATE; + // break; + // case ESP_ERR_WIFI_CONN: + // err = AOS_ERR_WIFI_CONN; + // break; + // case ESP_ERR_WIFI_NVS: + // err = AOS_ERR_WIFI_NVS; + // break; + // case ESP_ERR_WIFI_MAC: + // err = AOS_ERR_WIFI_MAC; + // break; + // case ESP_ERR_WIFI_SSID: + // err = AOS_ERR_WIFI_SSID; + // break; + // case ESP_ERR_WIFI_PASSWORD: + // err = AOS_ERR_WIFI_PASSWORD; + // break; + // case ESP_ERR_WIFI_TIMEOUT: + // err = ETIMEDOUT; + // break; + // case ESP_ERR_WIFI_WAKE_FAIL: + // err = AOS_ERR_WIFI_WAKE_FAIL; + // break; + // case ESP_ERR_WIFI_WOULD_BLOCK: + // err = AOS_ERR_WIFI_WOULD_BLOCK; + // break; + // case ESP_ERR_WIFI_NOT_CONNECT: + // err = AOS_ERR_WIFI_NOT_CONNECT; + // break; + // case ESP_ERR_TCPIP_ADAPTER_INVALID_PARAMS: + // err = AOS_ERR_TCPIP_ADAPTER_INVALID_PARAMS; + // break; + // case ESP_ERR_TCPIP_ADAPTER_IF_NOT_READY: + // err = AOS_ERR_TCPIP_ADAPTER_IF_NOT_READY; + // break; + // case ESP_ERR_TCPIP_ADAPTER_DHCPC_START_FAILED: + // err = AOS_ERR_TCPIP_ADAPTER_DHCPC_START_FAILED; + // break; + // case ESP_ERR_TCPIP_ADAPTER_NO_MEM: + // err = ENOMEM; + // break; + // } + return err; +} + + +static void wifi_event_cb(uint32_t event_id, const void *param, void *ctx) +{ + int32_t event; + int wifi_state = 0; + aos_wifi_manager_t *wifi_manager = NULL; + if (ctx != NULL) { + wifi_manager = (aos_wifi_manager_t *)ctx; + } + + switch (event_id) { + case EVENT_NETMGR_WIFI_DISCONNECTED: + wifi_state = AOS_NET_STA_DISCONNECTED; + break; + + case EVENT_NETMGR_WIFI_CONNECTED: + wifi_state = AOS_NET_STA_CONNECTED; + break; + + case EVENT_NETMGR_GOT_IP: + wifi_state = AOS_NET_STA_GOT_IP; + break; + + case EVENT_NETMGR_WIFI_CONN_TIMEOUT: + wifi_state = AOS_NET_STA_STARTED; + break; + + default: + event = AOS_NET_STATE_UNKNOWN; + break; + } + if (wifi_manager != NULL) { + wifi_manager->wifi_state = wifi_state; + } + + if (wifi_manager->cb != NULL) { + wifi_manager->cb(wifi_state, ctx); + } + return; +} + +int aos_wifi_init(aos_wifi_manager_t *wifi_manager) +{ + int ret = 0; + netmgr_hdl_t hdl = netmgr_get_dev(WIFI_DEV_PATH); + if (hdl >= 0) { + LOGE(LOG_TAG, "wifi already init by other task"); + } else { + LOGE(LOG_TAG, "aos_wifi_init start"); + ret = event_service_init(NULL); + if (ret != 0) { + LOGE(LOG_TAG, "event_service_init failed"); + return ret; + } + ret = netmgr_service_init(NULL); + if (ret != 0) { + LOGE(LOG_TAG, "netmgr_service_init failed"); + return ret; + } + + netmgr_set_auto_reconnect(NULL, false); + ret = netmgr_wifi_set_auto_save_ap(false); + if (ret != 0) { + LOGE(LOG_TAG, "netmgr_wifi_set_auto_save_ap failed"); + return ret; + } + } + event_subscribe(EVENT_NETMGR_WIFI_DISCONNECTED, wifi_event_cb, wifi_manager); + event_subscribe(EVENT_NETMGR_WIFI_CONNECTED, wifi_event_cb, wifi_manager); + event_subscribe(EVENT_NETMGR_WIFI_CONN_TIMEOUT, wifi_event_cb, wifi_manager); + event_subscribe(EVENT_NETMGR_GOT_IP, wifi_event_cb, wifi_manager); + return ret; +} + +int aos_wifi_deinit(aos_wifi_manager_t *wifi_manager) +{ + // return netmgr_service_deinit(); + return 0; +} + +int aos_wifi_start(aos_wifi_manager_t *wifi_manager) +{ + return 0; +} + +int aos_wifi_stop(aos_wifi_manager_t *wifi_manager) +{ + return 0; +} + +int aos_net_set_ifconfig(aos_ifconfig_info_t *info) +{ + netmgr_hdl_t hdl; + printf("dev %s open failed\n", __func__); + hdl = netmgr_get_dev(WIFI_DEV_PATH); + if (hdl == -1) { + return -1; + } + return netmgr_set_ifconfig(hdl, info); +} + +int aos_net_get_ifconfig(aos_ifconfig_info_t *info) +{ + netmgr_hdl_t hdl; + hdl = netmgr_get_dev(WIFI_DEV_PATH); + if (hdl == -1) { + return -1; + } + return netmgr_get_ifconfig(hdl, info); +} + +int aos_wifi_set_msg_cb(netmgr_msg_cb_t cb) +{ + netmgr_hdl_t hdl; + hdl = netmgr_get_dev(WIFI_DEV_PATH); + if (hdl == -1) { + return -1; + } + return netmgr_set_msg_cb(hdl, cb); +} + +int aos_wifi_del_msg_cb(netmgr_msg_cb_t cb) +{ + netmgr_hdl_t hdl; + hdl = netmgr_get_dev(WIFI_DEV_PATH); + if (hdl == -1) { + return -1; + } + return netmgr_del_msg_cb(hdl, cb); +} + +AOS_NETWORK_TYPE_E aos_get_network_type() +{ + return AOS_NETWORK_WIFI; +} + +int aos_wifi_connect(const char *ssid, const char *passwd) +{ + int ret = -1; + netmgr_hdl_t hdl; + netmgr_connect_params_t params; + hdl = netmgr_get_dev(WIFI_DEV_PATH); + if (hdl < 0) { + LOGE(LOG_TAG, "netmgr_get_dev failed"); + return -1; + } + + memset(¶ms, 0, sizeof(netmgr_connect_params_t)); + params.type = NETMGR_TYPE_WIFI; + strncpy(params.params.wifi_params.ssid, ssid, sizeof(params.params.wifi_params.ssid) - 1); + strncpy(params.params.wifi_params.pwd, passwd, sizeof(params.params.wifi_params.pwd) - 1); + params.params.wifi_params.timeout = 60000; + + ret = netmgr_connect(hdl, ¶ms); + if (ret != 0) { + LOGE(LOG_TAG, "netmgr_connect failed. %d\n", ret); + return ret; + } + + return ret; +} + +int aos_wifi_get_info(aos_wifi_info_t *wifi_info) +{ + netmgr_hdl_t hdl; + netmgr_config_t config; + netmgr_ifconfig_info_t info; + int ap_num; + int used_ap; /**< ap that is used in the array */ + hdl = netmgr_get_dev(WIFI_DEV_PATH); + if (hdl == -1) { + return -1; + } + + memset(&info, 0, sizeof(info)); + if (netmgr_get_ifconfig(hdl, &info) == -1) { + return -1; + } + + memset(&config, 0, sizeof(config)); + if (netmgr_get_config(hdl, &config) == -1) { + return -1; + } + ap_num = config.config.wifi_config.ap_num; + used_ap = config.config.wifi_config.used_ap; + + if ((ap_num < MAX_AP_CONFIG_NUM) && (used_ap < ap_num)) { + memset(wifi_info->ssid, 0, sizeof(wifi_info->ssid)); + strncpy(wifi_info->ssid, config.config.wifi_config.config[used_ap].ssid, sizeof(wifi_info->ssid) - 1); + } else { + return -1; + } + + snprintf(wifi_info->ip, sizeof(wifi_info->ip), "%s", info.ip_addr); + memcpy(wifi_info->mac, info.mac, sizeof(wifi_info->mac)); + wifi_info->rssi = info.rssi; + + return 0; +} + +int aos_wifi_disconnect() +{ + netmgr_hdl_t hdl; + hdl = netmgr_get_dev(WIFI_DEV_PATH); + if (hdl == -1) { + return -1; + } + return netmgr_disconnect(hdl); +} + +int aos_wifi_get_state() +{ + netmgr_hdl_t hdl; + hdl = netmgr_get_dev(WIFI_DEV_PATH); + if (hdl == -1) { + return -1; + } + return netmgr_get_state(hdl); +} + +int aos_get_network_status() +{ + int net_status = aos_wifi_get_state(); + return net_status == AOS_NET_STA_GOT_IP ? 1 : 0; +} + +#endif diff --git a/components/amp_adapter/platform/aos/network/aos_wifi.c b/components/amp_adapter/platform/aos/network/aos_wifi.c deleted file mode 100644 index a7ee8ff6ecc78ea9651cb1b4721bdd46221e6470..0000000000000000000000000000000000000000 --- a/components/amp_adapter/platform/aos/network/aos_wifi.c +++ /dev/null @@ -1,144 +0,0 @@ -/* - * Copyright (C) 2015-2020 Alibaba Group Holding Limited - */ -#ifndef AOS_BOARD_HAAS700 -#include "amp_platform.h" -#include "aos_network.h" -#include "netmgr.h" -#include "netmgr_wifi.h" - -#define WIFI_DEV_PATH "/dev/wifi0" - -int aos_wifi_init() -{ - return netmgr_service_init(NULL); -} - - -int aos_wifi_set_ifconfig(netmgr_ifconfig_info_t *info) -{ - netmgr_hdl_t hdl; - - if((hdl = netmgr_get_dev(WIFI_DEV_PATH)) == -1) { - return -1; - } - return netmgr_set_ifconfig(hdl, info); -} - -int aos_wifi_get_ifconfig(netmgr_ifconfig_info_t *info) -{ - netmgr_hdl_t hdl; - - if((hdl = netmgr_get_dev(WIFI_DEV_PATH)) == -1) { - return -1; - } - return netmgr_get_ifconfig(hdl, info); -} - -int aos_wifi_set_msg_cb(netmgr_msg_cb_t cb) -{ - netmgr_hdl_t hdl; - - if((hdl = netmgr_get_dev(WIFI_DEV_PATH)) == -1) { - return -1; - } - return netmgr_set_msg_cb(hdl, cb); -} - -int aos_wifi_del_msg_cb(netmgr_msg_cb_t cb) -{ - netmgr_hdl_t hdl; - - if((hdl = netmgr_get_dev(WIFI_DEV_PATH)) == -1) { - return -1; - } - return netmgr_del_msg_cb(hdl, cb); -} - -AOS_NETWORK_TYPE_E aos_get_network_type() -{ - return AOS_NETWORK_WIFI; -} - -int aos_wifi_connect(const char *ssid, const char *passwd) -{ - int ret = -1; - netmgr_hdl_t hdl; - netmgr_connect_params_t params; - - if((hdl = netmgr_get_dev(WIFI_DEV_PATH)) == -1) { - return -1; - } - - memset(¶ms, 0, sizeof(netmgr_connect_params_t)); - params.type = NETMGR_TYPE_WIFI; - strncpy(params.params.wifi_params.ssid, ssid, sizeof(params.params.wifi_params.ssid) - 1); - strncpy(params.params.wifi_params.pwd, passwd, sizeof(params.params.wifi_params.pwd) - 1); - params.params.wifi_params.timeout = 60000; - - ret = netmgr_connect(hdl, ¶ms); - if (ret != 0) { - return ret; - } - - return ret; -} - -int aos_get_wifi_info(aos_wifi_info_t *wifi_info) -{ - netmgr_hdl_t hdl; - netmgr_config_t config; - netmgr_ifconfig_info_t info; - int ap_num; - int used_ap; /**< ap that is used in the array */ - - if((hdl = netmgr_get_dev(WIFI_DEV_PATH)) == -1) { - return -1; - } - - memset(&info, 0, sizeof(info)); - if(netmgr_get_ifconfig(hdl, &info) == -1) { - return -1; - } - - memset(&config, 0, sizeof(config)); - if(netmgr_get_config(hdl, &config) == -1) { - return -1; - } - ap_num = config.config.wifi_config.ap_num; - used_ap = config.config.wifi_config.used_ap; - - if((ap_num < MAX_AP_CONFIG_NUM) && (used_ap < ap_num)) { - memset(wifi_info->ssid, 0, sizeof(wifi_info->ssid)); - strncpy(wifi_info->ssid, config.config.wifi_config.config[used_ap].ssid, sizeof(wifi_info->ssid) - 1); - } else { - return -1; - } - - snprintf(wifi_info->ip, sizeof(wifi_info->ip), "%s", info.ip_addr); - memcpy(wifi_info->mac, info.mac, sizeof(wifi_info->mac)); - wifi_info->rssi = info.rssi; - - return 0; -} - -int aos_wifi_disconnect() -{ - netmgr_hdl_t hdl; - - if((hdl = netmgr_get_dev(WIFI_DEV_PATH)) == -1) { - return -1; - } - return netmgr_disconnect(hdl); -} - -int aos_wifi_get_state() -{ - netmgr_hdl_t hdl; - - if((hdl = netmgr_get_dev(WIFI_DEV_PATH)) == -1) { - return -1; - } - return netmgr_get_state(hdl); -} -#endif diff --git a/components/py_engine/adapter/haas/CMakeLists.txt b/components/py_engine/adapter/haas/CMakeLists.txt index a575c3f56ad114145cae83f0dc3c30a4fc5cf1a8..cc7e69a5e3878f14a4a8c2a0f37d1f6aa547a620 100644 --- a/components/py_engine/adapter/haas/CMakeLists.txt +++ b/components/py_engine/adapter/haas/CMakeLists.txt @@ -117,6 +117,7 @@ set(MICROPY_SOURCE_PORT ${PROJECT_SOURCE_DIR}/mpstdinport.c ${PROJECT_SOURCE_DIR}/mpthreadport.c ${PROJECT_SOURCE_DIR}/utility.c + ${PROJECT_SOURCE_DIR}/modnetwork.c ) set(MICROPY_SOURCE_QSTR diff --git a/components/py_engine/adapter/haas/modnetwork.c b/components/py_engine/adapter/haas/modnetwork.c new file mode 100644 index 0000000000000000000000000000000000000000..2404e60cea0a2ef34fdb84fc314aa98581b8b861 --- /dev/null +++ b/components/py_engine/adapter/haas/modnetwork.c @@ -0,0 +1,324 @@ +#include +#include +#include +#include "aos_network.h" +#include "py/builtin.h" +#include "py/mperrno.h" +#include "py/obj.h" +#include "py/runtime.h" +#include "py/stackctrl.h" +#include "aos_log.h" +#include "utility.h" + +#define LOG_TAG "mod_network" + +typedef struct _aos_wifi_obj_t { + mp_obj_base_t base; + int if_mode; +} aos_wifi_if_obj_t; +const mp_obj_type_t aos_wifi_if_type; +STATIC const aos_wifi_if_obj_t aos_wifi_sta_obj = {{&aos_wifi_if_type}, AOS_NETWORK_WIFI_STA}; +STATIC const aos_wifi_if_obj_t aos_wifi_ap_obj = {{&aos_wifi_if_type}, AOS_NETWORK_WIFI_AP}; +STATIC aos_wifi_manager_t *wifi_manager = NULL; +static mp_obj_t on_wifi_event_cb = mp_const_none; + +STATIC void _network_exceptions(AOS_NETWORK_ERR_E e) +{ + switch (e) { + case AOS_ERR_WIFI_NOT_INIT: + mp_raise_msg(&mp_type_OSError, MP_ERROR_TEXT("Wifi Not Initialized")); + case AOS_ERR_WIFI_NOT_STARTED: + mp_raise_msg(&mp_type_OSError, MP_ERROR_TEXT("Wifi Not Started")); + case AOS_ERR_WIFI_NOT_STOPPED: + mp_raise_msg(&mp_type_OSError, MP_ERROR_TEXT("Wifi Not Stopped")); + case AOS_ERR_WIFI_IF: + mp_raise_msg(&mp_type_OSError, MP_ERROR_TEXT("Wifi Invalid Interface")); + case AOS_ERR_WIFI_MODE: + mp_raise_msg(&mp_type_OSError, MP_ERROR_TEXT("Wifi Invalid Mode")); + case AOS_ERR_WIFI_STATE: + mp_raise_msg(&mp_type_OSError, MP_ERROR_TEXT("Wifi Internal State Error")); + case AOS_ERR_WIFI_CONN: + mp_raise_msg(&mp_type_OSError, MP_ERROR_TEXT("Wifi Internal Error")); + case AOS_ERR_WIFI_NVS: + mp_raise_msg(&mp_type_OSError, MP_ERROR_TEXT("Wifi Internal NVS Error")); + case AOS_ERR_WIFI_MAC: + mp_raise_msg(&mp_type_OSError, MP_ERROR_TEXT("Wifi Invalid MAC Address")); + case AOS_ERR_WIFI_SSID: + mp_raise_msg(&mp_type_OSError, MP_ERROR_TEXT("Wifi SSID Invalid")); + case AOS_ERR_WIFI_PASSWORD: + mp_raise_msg(&mp_type_OSError, MP_ERROR_TEXT("Wifi Invalid Password")); + case AOS_ERR_WIFI_TIMEOUT: + mp_raise_OSError(MP_ETIMEDOUT); + case AOS_ERR_WIFI_WAKE_FAIL: + mp_raise_msg(&mp_type_OSError, MP_ERROR_TEXT("Wifi Wakeup Failure")); + case AOS_ERR_WIFI_WOULD_BLOCK: + mp_raise_msg(&mp_type_OSError, MP_ERROR_TEXT("Wifi Would Block")); + case AOS_ERR_WIFI_NOT_CONNECT: + mp_raise_msg(&mp_type_OSError, MP_ERROR_TEXT("Wifi Not Connected")); + case AOS_ERR_TCPIP_ADAPTER_INVALID_PARAMS: + mp_raise_msg(&mp_type_OSError, MP_ERROR_TEXT("TCP/IP Invalid Parameters")); + case AOS_ERR_TCPIP_ADAPTER_IF_NOT_READY: + mp_raise_msg(&mp_type_OSError, MP_ERROR_TEXT("TCP/IP IF Not Ready")); + case AOS_ERR_TCPIP_ADAPTER_DHCPC_START_FAILED: + mp_raise_msg(&mp_type_OSError, MP_ERROR_TEXT("TCP/IP DHCP Client Start Failed")); + case AOS_ERR_TCPIP_ADAPTER_NO_MEM: + mp_raise_OSError(MP_ENOMEM); + default: + mp_raise_msg_varg(&mp_type_RuntimeError, MP_ERROR_TEXT("Wifi Unknown Error 0x%04x"), e); + } +} +static inline void network_exceptions(AOS_NETWORK_ERR_E e) +{ + if (e != 0) { + _network_exceptions(e); + } +} + +static void wifi_event_cb(uint32_t event_id, void *context) +{ + if (on_wifi_event_cb != mp_const_none && mp_obj_is_callable(on_wifi_event_cb)) { + callback_to_python_LoBo(on_wifi_event_cb, MP_OBJ_NEW_SMALL_INT(event_id), NULL); + } +} + +STATIC mp_obj_t wifi_init() +{ + return mp_const_none; +} +MP_DEFINE_CONST_FUN_OBJ_0(aos_wifi_init_obj, wifi_init); + +STATIC mp_obj_t wifi_active(mp_obj_t self_in, mp_obj_t active) +{ + if (wifi_manager->is_started) { + return mp_const_none; + } + + if (mp_obj_is_true(active)) { + network_exceptions(aos_wifi_start(wifi_manager)); + } else { + network_exceptions(aos_wifi_stop(wifi_manager)); + } + return mp_const_none; +} +MP_DEFINE_CONST_FUN_OBJ_2(aos_wifi_active_obj, wifi_active); + +STATIC mp_obj_t wifi_connect(mp_obj_t self_in, mp_obj_t ssid_in, mp_obj_t pwd_in) +{ + const char *_ssid = mp_obj_str_get_str(ssid_in); + const char *_pwd = mp_obj_str_get_str(pwd_in); + + if (!wifi_manager) { + wifi_init(self_in); + network_exceptions(aos_wifi_start(wifi_manager)); + } + if (!wifi_manager->is_started) { + network_exceptions(aos_wifi_start(wifi_manager)); + } + + MP_THREAD_GIL_EXIT(); + network_exceptions(aos_wifi_connect(_ssid, _pwd)); + MP_THREAD_GIL_ENTER(); + return mp_const_none; +} +MP_DEFINE_CONST_FUN_OBJ_3(aos_wifi_connect_obj, wifi_connect); + +STATIC mp_obj_t wifi_disconnect(mp_obj_t self_in) +{ + network_exceptions(aos_wifi_disconnect()); + return mp_const_none; +} +MP_DEFINE_CONST_FUN_OBJ_1(aos_wifi_disconnect_obj, wifi_disconnect); + +STATIC mp_obj_t wifi_get_status(size_t n_args, const mp_obj_t *args) +{ + if (wifi_manager != NULL) + return mp_obj_new_int(wifi_manager->wifi_state); + else { + return mp_obj_new_int(-1); + } +} +MP_DEFINE_CONST_FUN_OBJ_VAR_BETWEEN(aos_wifi_get_status_obj, 1, 2, wifi_get_status); + +STATIC mp_obj_t wifi_is_connected(mp_obj_t self_in) +{ + if (wifi_manager->wifi_state == AOS_NET_STA_GOT_IP) + return mp_obj_new_bool(true); + return mp_obj_new_bool(false); +} +MP_DEFINE_CONST_FUN_OBJ_1(wifi_is_connected_obj, wifi_is_connected); + + +STATIC mp_obj_t wifi_on(mp_obj_t self_in, mp_obj_t func) +{ + on_wifi_event_cb = func; + return mp_const_none; +} +MP_DEFINE_CONST_FUN_OBJ_2(aos_wifi_on_obj, wifi_on); + +STATIC mp_obj_t wifi_get_info(mp_obj_t self_in) +{ + aos_wifi_info_t wifi_info = { 0 }; + mp_int_t ret = aos_wifi_get_info(&wifi_info); + if (ret < 0) { + AOS_LOGI(LOG_TAG, "Failed to get wifi info\n"); + return mp_const_none; + } + mp_obj_t dict = mp_obj_new_dict(4); + mp_obj_dict_store(dict, MP_OBJ_NEW_QSTR(qstr_from_str("ssid")), mp_obj_new_strn(wifi_info.ssid)); + mp_obj_dict_store(dict, MP_OBJ_NEW_QSTR(qstr_from_str("mac")), mp_obj_new_strn(wifi_info.mac)); + mp_obj_dict_store(dict, MP_OBJ_NEW_QSTR(qstr_from_str("ip")), mp_obj_new_strn(wifi_info.ip)); + mp_obj_dict_store(dict, MP_OBJ_NEW_QSTR(qstr_from_str("rssi")), mp_obj_new_int(wifi_info.rssi)); + return dict; +} +MP_DEFINE_CONST_FUN_OBJ_1(aos_wifi_get_info_obj, wifi_get_info); + +static int netutils_format_ipv4_addr(uint8_t *in_ip, char* out_ip) +{ + mp_uint_t ip_len; + if (sizeof(in_ip) < 4) { + AOS_LOGE("network", "invalid ip format."); + return -1; + } + ip_len = snprintf(out_ip, 16, "%u.%u.%u.%u", in_ip[3], in_ip[2], in_ip[1], in_ip[0]); + AOS_LOGE("network", out_ip); + return ip_len; +} +#ifndef NETUTILS_IPV4ADDR_BUFSIZE +#define NETUTILS_IPV4ADDR_BUFSIZE 4 +#endif + +static void netutils_parse_ipv4_addr(mp_obj_t addr_in, uint8_t *out_ip) +{ + size_t addr_len; + const char *addr_str = mp_obj_str_get_data(addr_in, &addr_len); + if (addr_len == 0) { + // special case of no address given + memset(out_ip, 0, NETUTILS_IPV4ADDR_BUFSIZE); + return; + } + const char *s = addr_str; + const char *s_top = addr_str + addr_len; + for (mp_uint_t i = 3; ; i--) { + mp_uint_t val = 0; + for (; s < s_top && *s != '.'; s++) { + val = val * 10 + *s - '0'; + } + // out_ip[i] = val; + out_ip[NETUTILS_IPV4ADDR_BUFSIZE - 1 - i] = val; + if (i == 0 && s == s_top) { + return; + } else if (i > 0 && s < s_top && *s == '.') { + s++; + } else { + mp_raise_ValueError(MP_ERROR_TEXT("invalid arguments")); + } + } +} + +STATIC mp_obj_t aos_ifconfig(size_t n_args, const mp_obj_t *args) +{ + aos_ifconfig_info_t info = { 0 }; + if (n_args == 1) { + // get + mp_int_t ret = aos_net_get_ifconfig(&info); + if (ret != 0) { + AOS_LOGI(LOG_TAG, "netmgr_get_config failed, ret = %d\n", ret); + return mp_const_none; + } + + mp_obj_t tuple[4] = { + mp_obj_new_strn(info.ip_addr), + mp_obj_new_strn(info.mask), + mp_obj_new_strn(info.gw), + mp_obj_new_strn(info.dns_server), + mp_obj_new_strn(info.mac), + }; + return mp_obj_new_tuple(5, tuple); + } else { + // set + if (mp_obj_is_type(args[1], &mp_type_tuple) || mp_obj_is_type(args[1], &mp_type_list)) { + mp_obj_t *items; + mp_obj_get_array_fixed_n(args[1], 4, &items); + netutils_format_ipv4_addr(items[0], (void *)&info.ip_addr); + netutils_format_ipv4_addr(items[1], (void *)&info.mask); + netutils_format_ipv4_addr(items[2], (void *)&info.gw); + netutils_format_ipv4_addr(items[3], (void *)&info.dns_server); + } + mp_int_t ret = aos_net_set_ifconfig(&info); + return mp_obj_new_int(ret); + } + return mp_const_none; +} +MP_DEFINE_CONST_FUN_OBJ_VAR_BETWEEN(aos_ifconfig_obj, 1, 2, aos_ifconfig); + +STATIC const mp_rom_map_elem_t wifi_if_locals_dict_table[] = { + { MP_ROM_QSTR(MP_QSTR_active), MP_ROM_PTR(&aos_wifi_active_obj) }, + { MP_OBJ_NEW_QSTR(MP_QSTR_connect), MP_ROM_PTR(&aos_wifi_connect_obj) }, + { MP_OBJ_NEW_QSTR(MP_QSTR_disconnect), MP_ROM_PTR(&aos_wifi_disconnect_obj) }, + { MP_OBJ_NEW_QSTR(MP_QSTR_status), MP_ROM_PTR(&aos_wifi_get_status_obj) }, + // { MP_ROM_QSTR(MP_QSTR_scan), MP_ROM_PTR(&aos_wifi_scan_obj) }, + { MP_ROM_QSTR(MP_QSTR_isconnected), MP_ROM_PTR(&wifi_is_connected_obj) }, + // { MP_ROM_QSTR(MP_QSTR_config), MP_ROM_PTR(&esp_config_obj) }, + { MP_OBJ_NEW_QSTR(MP_QSTR_ifconfig), MP_ROM_PTR(&aos_ifconfig_obj) }, + { MP_OBJ_NEW_QSTR(MP_QSTR_on), MP_ROM_PTR(&aos_wifi_on_obj) }, +}; + +STATIC MP_DEFINE_CONST_DICT(wifi_if_locals_dict, wifi_if_locals_dict_table); +const mp_obj_type_t aos_wifi_if_type = { + { &mp_type_type }, + .name = MP_QSTR_WIFI, + .locals_dict = (mp_obj_t)&wifi_if_locals_dict, +}; + +STATIC mp_obj_t get_wifi(size_t n_args, const mp_obj_t *args) +{ + int idx = (n_args > 0) ? mp_obj_get_int(args[0]) : AOS_NETWORK_WIFI_STA; + if (idx == AOS_NETWORK_WIFI_STA) { + if (!wifi_manager) { + wifi_manager = calloc(sizeof(aos_wifi_manager_t), 1); + if (!wifi_manager) { + network_exceptions(MP_ENOMEM); + } + wifi_manager->cb = wifi_event_cb; + wifi_manager->wifi_state = AOS_NET_NOINIT; + wifi_manager->wifi_mode = AOS_NETWORK_WIFI_STA; + wifi_manager->is_initialized = false; + wifi_manager->is_started = false; + } + network_exceptions(aos_wifi_init(wifi_manager)); + return MP_OBJ_FROM_PTR(&aos_wifi_sta_obj); + } else if (idx == AOS_NETWORK_WIFI_AP) { + return MP_OBJ_FROM_PTR(&aos_wifi_ap_obj); + } else { + mp_raise_ValueError(MP_ERROR_TEXT("invalid WLAN interface identifier")); + } +} +STATIC MP_DEFINE_CONST_FUN_OBJ_VAR_BETWEEN(aos_get_wifi_obj, 0, 1, get_wifi); + + + +STATIC const mp_rom_map_elem_t mp_module_network_globals_table[] = { + { MP_ROM_QSTR(MP_QSTR___name__), MP_ROM_QSTR(MP_QSTR_network) }, + // { MP_ROM_QSTR(MP_QSTR___init__), MP_ROM_PTR(&aos_wifi_init_obj) }, + { MP_ROM_QSTR(MP_QSTR_WLAN), MP_ROM_PTR(&aos_get_wifi_obj) }, + + { MP_ROM_QSTR(MP_QSTR_STA_IF), MP_ROM_INT(AOS_NETWORK_WIFI_STA)}, + { MP_ROM_QSTR(MP_QSTR_AP_IF), MP_ROM_INT(AOS_NETWORK_WIFI_AP)}, + + { MP_ROM_QSTR(MP_QSTR_STA_STARTED), MP_ROM_INT(AOS_NET_STA_STARTED) }, + { MP_ROM_QSTR(MP_QSTR_STA_CONNECTED), MP_ROM_INT(AOS_NET_STA_CONNECTED) }, + { MP_ROM_QSTR(MP_QSTR_STA_GOT_IP), MP_ROM_INT(AOS_NET_STA_GOT_IP) }, + { MP_ROM_QSTR(MP_QSTR_STA_LOST_IP), MP_ROM_INT(AOS_NET_STA_LOST_IP) }, + { MP_ROM_QSTR(MP_QSTR_STA_DISCONNECTED), MP_ROM_INT(AOS_NET_STA_DISCONNECTED) }, + { MP_ROM_QSTR(MP_QSTR_STA_STOPED), MP_ROM_INT(AOS_NET_STA_STOPED) }, + { MP_ROM_QSTR(MP_QSTR_STA_UNKNOWN), MP_ROM_INT(AOS_NET_STATE_UNKNOWN) }, +}; + +STATIC MP_DEFINE_CONST_DICT(mp_module_network_globals, mp_module_network_globals_table); + +const mp_obj_module_t mp_module_network = { + .base = { &mp_type_module }, + .globals = (mp_obj_dict_t *)&mp_module_network_globals, +}; + +MP_REGISTER_MODULE(MP_QSTR_network, mp_module_network, 1); diff --git a/components/py_engine/modules/netmgr/modnetmgr.c b/components/py_engine/modules/netmgr/modnetmgr.c index e6861c384ebe5d9ac10de67d8566f90dcd000ea9..1a137ea8e68eb4ba79f24d67a3a1adb027f883a2 100644 --- a/components/py_engine/modules/netmgr/modnetmgr.c +++ b/components/py_engine/modules/netmgr/modnetmgr.c @@ -1,179 +1,188 @@ #include #include #include - -#if MICROPY_PY_NETMGR - -#include -#include - #include "aos_network.h" -#include "netmgr.h" #include "py/builtin.h" #include "py/mperrno.h" #include "py/obj.h" #include "py/runtime.h" #include "py/stackctrl.h" -#include "ulog/ulog.h" +#include "aos_log.h" #include "utility.h" -#define WIFI_DEV_PATH "/dev/wifi0" - -#define LOG_TAG "mod_netmgr" +#define LOG_TAG "mod_netmgr" +STATIC aos_wifi_manager_t *wifi_manager = NULL; static mp_obj_t on_wifi_event_cb = mp_const_none; -static void wifi_event_cb(uint32_t event_id, const void *param, void *context) +STATIC void _network_exceptions(AOS_NETWORK_ERR_E e) { - if (on_wifi_event_cb != mp_const_none && mp_obj_is_callable(on_wifi_event_cb)) { - int32_t event; - switch (event_id) { - case EVENT_NETMGR_WIFI_DISCONNECTED: - event = CONN_STATE_DISCONNECTED; - break; - - case EVENT_NETMGR_WIFI_CONNECTED: - event = CONN_STATE_CONNECTED; - break; - - case EVENT_NETMGR_WIFI_CONN_TIMEOUT: - event = CONN_STATE_FAILED; - break; - - case EVENT_NETMGR_GOT_IP: - event = CONN_STATE_NETWORK_CONNECTED; - break; - - default: - event = CONN_STATE_UNKNOWN; - break; - } - - callback_to_python_LoBo(on_wifi_event_cb, MP_OBJ_NEW_SMALL_INT(event), NULL); + switch (e) { + case AOS_ERR_WIFI_NOT_INIT: + mp_raise_msg(&mp_type_OSError, MP_ERROR_TEXT("Wifi Not Initialized")); + case AOS_ERR_WIFI_NOT_STARTED: + mp_raise_msg(&mp_type_OSError, MP_ERROR_TEXT("Wifi Not Started")); + case AOS_ERR_WIFI_NOT_STOPPED: + mp_raise_msg(&mp_type_OSError, MP_ERROR_TEXT("Wifi Not Stopped")); + case AOS_ERR_WIFI_IF: + mp_raise_msg(&mp_type_OSError, MP_ERROR_TEXT("Wifi Invalid Interface")); + case AOS_ERR_WIFI_MODE: + mp_raise_msg(&mp_type_OSError, MP_ERROR_TEXT("Wifi Invalid Mode")); + case AOS_ERR_WIFI_STATE: + mp_raise_msg(&mp_type_OSError, MP_ERROR_TEXT("Wifi Internal State Error")); + case AOS_ERR_WIFI_CONN: + mp_raise_msg(&mp_type_OSError, MP_ERROR_TEXT("Wifi Internal Error")); + case AOS_ERR_WIFI_NVS: + mp_raise_msg(&mp_type_OSError, MP_ERROR_TEXT("Wifi Internal NVS Error")); + case AOS_ERR_WIFI_MAC: + mp_raise_msg(&mp_type_OSError, MP_ERROR_TEXT("Wifi Invalid MAC Address")); + case AOS_ERR_WIFI_SSID: + mp_raise_msg(&mp_type_OSError, MP_ERROR_TEXT("Wifi SSID Invalid")); + case AOS_ERR_WIFI_PASSWORD: + mp_raise_msg(&mp_type_OSError, MP_ERROR_TEXT("Wifi Invalid Password")); + case AOS_ERR_WIFI_TIMEOUT: + mp_raise_OSError(MP_ETIMEDOUT); + case AOS_ERR_WIFI_WAKE_FAIL: + mp_raise_msg(&mp_type_OSError, MP_ERROR_TEXT("Wifi Wakeup Failure")); + case AOS_ERR_WIFI_WOULD_BLOCK: + mp_raise_msg(&mp_type_OSError, MP_ERROR_TEXT("Wifi Would Block")); + case AOS_ERR_WIFI_NOT_CONNECT: + mp_raise_msg(&mp_type_OSError, MP_ERROR_TEXT("Wifi Not Connected")); + case AOS_ERR_TCPIP_ADAPTER_INVALID_PARAMS: + mp_raise_msg(&mp_type_OSError, MP_ERROR_TEXT("TCP/IP Invalid Parameters")); + case AOS_ERR_TCPIP_ADAPTER_IF_NOT_READY: + mp_raise_msg(&mp_type_OSError, MP_ERROR_TEXT("TCP/IP IF Not Ready")); + case AOS_ERR_TCPIP_ADAPTER_DHCPC_START_FAILED: + mp_raise_msg(&mp_type_OSError, MP_ERROR_TEXT("TCP/IP DHCP Client Start Failed")); + case AOS_ERR_TCPIP_ADAPTER_NO_MEM: + mp_raise_OSError(MP_ENOMEM); + default: + mp_raise_msg_varg(&mp_type_RuntimeError, MP_ERROR_TEXT("Wifi Unknown Error 0x%04x"), e); + } +} +static inline void network_exceptions(AOS_NETWORK_ERR_E e) +{ + if (e != 0) { + _network_exceptions(e); } } -STATIC mp_obj_t hapy_netmgr_init(void) +static void wifi_event_cb(uint32_t event_id, void *context) { - mp_int_t ret = 0; - netmgr_hdl_t hdl = netmgr_get_dev(WIFI_DEV_PATH); + if (on_wifi_event_cb != mp_const_none && mp_obj_is_callable(on_wifi_event_cb)) { + callback_to_python_LoBo(on_wifi_event_cb, MP_OBJ_NEW_SMALL_INT(event_id), NULL); + } +} - if (hdl >= 0) { - LOGD(LOG_TAG, "wifi already init by other task"); - } else { - LOGD(LOG_TAG, "wifi has not been inited"); - ret = event_service_init(NULL); - if (ret != 0) { - LOGE(LOG_TAG, "event_service_init failed"); - return ret; - } - ret = netmgr_service_init(NULL); - if (ret != 0) { - LOGE(LOG_TAG, "netmgr_service_init failed"); - return ret; - } - // netmgr_set_auto_reconnect(NULL, true); - ret = netmgr_wifi_set_auto_save_ap(true); - if (ret != 0) { - LOGE(LOG_TAG, "netmgr_wifi_set_auto_save_ap failed"); - return ret; +STATIC mp_obj_t wifi_init() +{ + if (!wifi_manager) { + wifi_manager = calloc(sizeof(aos_wifi_manager_t), 1); + if (!wifi_manager) { + network_exceptions(MP_ENOMEM); } + wifi_manager->cb = wifi_event_cb; + wifi_manager->wifi_state = AOS_NET_NOINIT; + // wifi_manager->wifi_mode = self->if_mode; + wifi_manager->wifi_mode = AOS_NETWORK_WIFI_STA; + wifi_manager->is_initialized = false; + wifi_manager->is_started = false; } - - event_subscribe(EVENT_NETMGR_WIFI_DISCONNECTED, wifi_event_cb, NULL); - event_subscribe(EVENT_NETMGR_WIFI_CONNECTED, wifi_event_cb, NULL); - event_subscribe(EVENT_NETMGR_WIFI_CONN_TIMEOUT, wifi_event_cb, NULL); - event_subscribe(EVENT_NETMGR_GOT_IP, wifi_event_cb, NULL); - - return mp_obj_new_int(ret); + network_exceptions(aos_wifi_init(wifi_manager)); + return mp_const_none; } -MP_DEFINE_CONST_FUN_OBJ_0(hapy_netmgr_init_obj, hapy_netmgr_init); +MP_DEFINE_CONST_FUN_OBJ_0(netmgr_wifi_init_obj, wifi_init); -STATIC mp_obj_t hapy_netmgr_deinit(void) +STATIC mp_obj_t wifi_active() { - return mp_obj_new_int(0); + network_exceptions(aos_wifi_start(wifi_manager)); + return mp_const_none; } -MP_DEFINE_CONST_FUN_OBJ_0(hapy_netmgr_deinit_obj, hapy_netmgr_deinit); +MP_DEFINE_CONST_FUN_OBJ_0(netmgr_wifi_active_obj, wifi_active); -STATIC mp_obj_t hapy_netmgr_connect(mp_obj_t ssid_in, mp_obj_t pwd_in) +STATIC mp_obj_t wifi_deactive() { - const char *_ssid = mp_obj_str_get_str(ssid_in); - const char *_pwd = mp_obj_str_get_str(pwd_in); - - mp_int_t ret = aos_wifi_connect(_ssid, _pwd); - return mp_obj_new_int(ret); + network_exceptions(aos_wifi_stop(wifi_manager)); + return mp_const_none; } -MP_DEFINE_CONST_FUN_OBJ_2(hapy_netmgr_connect_obj, hapy_netmgr_connect); +MP_DEFINE_CONST_FUN_OBJ_0(netmgr_wifi_deactive_obj, wifi_deactive); + -STATIC mp_obj_t hapy_netmgr_disconnect(void) +STATIC mp_obj_t wifi_deinit() { - mp_int_t ret = aos_wifi_disconnect(); - return mp_obj_new_int(ret); + network_exceptions(aos_wifi_deinit(wifi_manager)); + wifi_manager->cb = NULL; + free(wifi_manager); + wifi_manager = NULL; + return mp_const_none; } -MP_DEFINE_CONST_FUN_OBJ_0(hapy_netmgr_disconnect_obj, hapy_netmgr_disconnect); +MP_DEFINE_CONST_FUN_OBJ_0(netmgr_wifi_deinit_obj, wifi_deinit); -STATIC mp_obj_t hapy_netmgr_getInfo(void) +STATIC mp_obj_t wifi_connect(mp_obj_t ssid_in, mp_obj_t pwd_in) { - aos_wifi_info_t wifi_info = { 0 }; - mp_int_t ret = aos_get_wifi_info(&wifi_info); - if (ret < 0) { - LOGI(LOG_TAG, "Failed to get wifi info\n"); - return mp_const_none; - } + const char *_ssid = mp_obj_str_get_str(ssid_in); + const char *_pwd = mp_obj_str_get_str(pwd_in); - mp_obj_t dict = mp_obj_new_dict(4); - mp_obj_dict_store(dict, MP_OBJ_NEW_QSTR(qstr_from_str("ssid")), mp_obj_new_strn(wifi_info.ssid)); - mp_obj_dict_store(dict, MP_OBJ_NEW_QSTR(qstr_from_str("mac")), mp_obj_new_strn(wifi_info.mac)); - mp_obj_dict_store(dict, MP_OBJ_NEW_QSTR(qstr_from_str("ip")), mp_obj_new_strn(wifi_info.ip)); - mp_obj_dict_store(dict, MP_OBJ_NEW_QSTR(qstr_from_str("rssi")), mp_obj_new_int(wifi_info.rssi)); + if (!wifi_manager) { + wifi_init(); + network_exceptions(aos_wifi_start(wifi_manager)); + } + if (!wifi_manager->is_started) { + network_exceptions(aos_wifi_start(wifi_manager)); + } - return dict; + MP_THREAD_GIL_EXIT(); + network_exceptions(aos_wifi_connect(_ssid, _pwd)); + MP_THREAD_GIL_ENTER(); + return mp_const_none; } -MP_DEFINE_CONST_FUN_OBJ_0(hapy_netmgr_getInfo_obj, hapy_netmgr_getInfo); +MP_DEFINE_CONST_FUN_OBJ_2(netmgr_wifi_connect_obj, wifi_connect); -STATIC mp_obj_t hapy_netmgr_getType(void) +STATIC mp_obj_t wifi_disconnect() { - AOS_NETWORK_TYPE_E type = aos_get_network_type(); - return mp_obj_new_int(type); + network_exceptions(aos_wifi_disconnect()); + return mp_const_none; } -MP_DEFINE_CONST_FUN_OBJ_0(hapy_netmgr_getType_obj, hapy_netmgr_getType); +MP_DEFINE_CONST_FUN_OBJ_0(netmgr_wifi_disconnect_obj, wifi_disconnect); -STATIC mp_obj_t hapy_netmgr_getStatus(void) +STATIC mp_obj_t wifi_get_status() { - mp_int_t ret = aos_wifi_get_state(); - return mp_obj_new_int(ret); + if (wifi_manager != NULL) + return mp_obj_new_int(wifi_manager->wifi_state); + else { + return mp_obj_new_int(-1); + } } -MP_DEFINE_CONST_FUN_OBJ_0(hapy_netmgr_getStatus_obj, hapy_netmgr_getStatus); +MP_DEFINE_CONST_FUN_OBJ_0(netmgr_wifi_get_status_obj, wifi_get_status); -STATIC mp_obj_t hapy_netmgr_getDev(void) -{ - netmgr_hdl_t hdl = netmgr_get_dev(WIFI_DEV_PATH); - return mp_obj_new_int(hdl); -} -MP_DEFINE_CONST_FUN_OBJ_0(hapy_netmgr_getDev_obj, hapy_netmgr_getDev); -STATIC mp_obj_t hapy_netmgr_autoReconnect(mp_obj_t autoReconnect_in) +STATIC mp_obj_t wifi_on(mp_obj_t func) { - netmgr_hdl_t hdl = netmgr_get_dev(WIFI_DEV_PATH); - bool isAutoReconnect = mp_obj_is_true(autoReconnect_in); - netmgr_set_auto_reconnect(hdl, isAutoReconnect); - return mp_obj_new_int(0); + on_wifi_event_cb = func; + return mp_const_none; } -MP_DEFINE_CONST_FUN_OBJ_1(hapy_netmgr_autoReconnect_obj, hapy_netmgr_autoReconnect); +MP_DEFINE_CONST_FUN_OBJ_1(netmgr_wifi_on_obj, wifi_on); -STATIC mp_obj_t hapy_netmgr_autoSavaAP(mp_obj_t autoSave_in) +STATIC mp_obj_t wifi_get_info() { - netmgr_hdl_t hdl = netmgr_get_dev(WIFI_DEV_PATH); - bool isAutoSave = mp_obj_is_true(autoSave_in); - mp_int_t ret = netmgr_wifi_set_auto_save_ap(hdl, isAutoSave); - return mp_obj_new_int(ret); + aos_wifi_info_t wifi_info = { 0 }; + mp_int_t ret = aos_wifi_get_info(&wifi_info); + if (ret < 0) { + AOS_LOGI(LOG_TAG, "Failed to get wifi info\n"); + return mp_const_none; + } + mp_obj_t dict = mp_obj_new_dict(4); + mp_obj_dict_store(dict, MP_OBJ_NEW_QSTR(qstr_from_str("ssid")), mp_obj_new_strn(wifi_info.ssid)); + mp_obj_dict_store(dict, MP_OBJ_NEW_QSTR(qstr_from_str("mac")), mp_obj_new_strn(wifi_info.mac)); + mp_obj_dict_store(dict, MP_OBJ_NEW_QSTR(qstr_from_str("ip")), mp_obj_new_strn(wifi_info.ip)); + mp_obj_dict_store(dict, MP_OBJ_NEW_QSTR(qstr_from_str("rssi")), mp_obj_new_int(wifi_info.rssi)); + return dict; } -MP_DEFINE_CONST_FUN_OBJ_1(hapy_netmgr_autoSavaAP_obj, hapy_netmgr_autoSavaAP); +MP_DEFINE_CONST_FUN_OBJ_0(netmgr_wifi_get_info_obj, wifi_get_info); -STATIC mp_obj_t hapy_netmgr_ifconfig(mp_obj_t config_in) +STATIC mp_obj_t aos_ifconfig(mp_obj_t config_in) { - netmgr_ifconfig_info_t info = { 0 }; - + aos_ifconfig_info_t info = { 0 }; info.dhcp_en = get_int_from_dict(config_in, "dhcp_en") == 0 ? false : true; const char *ip_addr = get_str_from_dict(config_in, "ip_addr"); @@ -212,139 +221,52 @@ STATIC mp_obj_t hapy_netmgr_ifconfig(mp_obj_t config_in) } info.rssi = get_int_from_dict(config_in, "rssi"); - - mp_int_t ret = aos_wifi_set_ifconfig(&info); - return mp_obj_new_int(ret); -} -MP_DEFINE_CONST_FUN_OBJ_1(hapy_netmgr_ifconfig_obj, hapy_netmgr_ifconfig); - -STATIC mp_obj_t hapy_netmgr_getConfig(void) -{ - netmgr_config_t netmgr_config = { 0 }; - netmgr_hdl_t hdl = netmgr_get_dev(WIFI_DEV_PATH); - mp_int_t ret = netmgr_get_config(hdl, &netmgr_config); - if (ret != 0) { - LOGI(LOG_TAG, "netmgr_get_config failed, ret = %d\n", ret); - return mp_const_none; - } - - netmgr_wifi_config_t wifi_config = netmgr_config.config.wifi_config; - netmgr_wifi_ap_info_t ap_info = wifi_config.config[wifi_config.used_ap]; - - mp_obj_t config_dict = mp_obj_new_dict(7); - mp_obj_dict_store(config_dict, MP_OBJ_NEW_QSTR(qstr_from_str("ap_num")), mp_obj_new_int(wifi_config.ap_num)); - mp_obj_dict_store(config_dict, MP_OBJ_NEW_QSTR(qstr_from_str("used_ap")), mp_obj_new_int(wifi_config.used_ap)); - mp_obj_dict_store(config_dict, MP_OBJ_NEW_QSTR(qstr_from_str("ssid")), mp_obj_new_strn(ap_info.ssid)); - mp_obj_dict_store(config_dict, MP_OBJ_NEW_QSTR(qstr_from_str("pwd")), mp_obj_new_strn(ap_info.pwd)); - mp_obj_dict_store(config_dict, MP_OBJ_NEW_QSTR(qstr_from_str("bssid")), mp_obj_new_strn(ap_info.bssid)); - mp_obj_dict_store(config_dict, MP_OBJ_NEW_QSTR(qstr_from_str("ap_power")), mp_obj_new_int(ap_info.ap_power)); - mp_obj_dict_store(config_dict, MP_OBJ_NEW_QSTR(qstr_from_str("channel")), mp_obj_new_int(ap_info.channel)); - - mp_obj_t res_dict = mp_obj_new_dict(2); - mp_obj_dict_store(res_dict, MP_OBJ_NEW_QSTR(qstr_from_str("type")), mp_obj_new_int(netmgr_config.type)); - mp_obj_dict_store(res_dict, MP_OBJ_NEW_QSTR(qstr_from_str("config")), config_dict); - - return res_dict; -} -MP_DEFINE_CONST_FUN_OBJ_0(hapy_netmgr_getConfig_obj, hapy_netmgr_getConfig); - -STATIC mp_obj_t hapy_netmgr_saveConfig() -{ - netmgr_hdl_t hdl = netmgr_get_dev(WIFI_DEV_PATH); - mp_int_t ret = netmgr_save_config(hdl); + mp_int_t ret = aos_net_set_ifconfig(&info); return mp_obj_new_int(ret); } -MP_DEFINE_CONST_FUN_OBJ_0(hapy_netmgr_saveConfig_obj, hapy_netmgr_saveConfig); +MP_DEFINE_CONST_FUN_OBJ_1(netmgr_ifconfig_obj, aos_ifconfig); -STATIC mp_obj_t hapy_netmgr_deleteConfig(mp_obj_t config_in) +STATIC mp_obj_t aos_get_ifconfig() { - netmgr_del_config_t config = { 0 }; - - config.type = get_int_from_dict(config_in, "type"); - const char *ssid = get_str_from_dict(config_in, "ssid"); - memcpy(config.config.ssid, ssid, strlen(MP_QSTR_server_side)); - - netmgr_hdl_t hdl = netmgr_get_dev(WIFI_DEV_PATH); - mp_int_t ret = netmgr_del_config(hdl, &config); - return mp_obj_new_int(ret); -} -MP_DEFINE_CONST_FUN_OBJ_1(hapy_netmgr_deleteConfig_obj, hapy_netmgr_deleteConfig); - -STATIC mp_obj_t hapy_netmgr_getChannelList(void) -{ - netmgr_hdl_t hdl = netmgr_get_dev(WIFI_DEV_PATH); - - int channel_num = 0; - int *channel_array = NULL; - - mp_int_t ret = netmgr_wifi_get_channelist(hdl, &channel_array, &channel_num); + aos_ifconfig_info_t info = { 0 }; + mp_int_t ret = aos_net_get_ifconfig(&info); if (ret != 0) { - LOGE(LOG_TAG, "netmgr_wifi_get_channelist failed, ret = %d\n", ret); + AOS_LOGI(LOG_TAG, "netmgr_get_config failed, ret = %d\n", ret); return mp_const_none; } - vstr_t vstr = { 0 }; - vstr_init_len(&vstr, channel_num * sizeof(int)); - memcpy(vstr.buf, channel_array, channel_num * sizeof(int)); - - return mp_obj_new_str_from_vstr(&mp_type_bytes, &vstr); -} -MP_DEFINE_CONST_FUN_OBJ_0(hapy_netmgr_getChannelList_obj, hapy_netmgr_getChannelList); - -STATIC mp_obj_t hapy_netmgr_setChannelList(mp_obj_t channels_in) -{ - netmgr_hdl_t hdl = netmgr_get_dev(WIFI_DEV_PATH); - - mp_buffer_info_t channels; - mp_get_buffer_raise(channels_in, &channels, MP_BUFFER_READ); + mp_obj_t config_dict = mp_obj_new_dict(6); + mp_obj_dict_store(config_dict, MP_OBJ_NEW_QSTR(qstr_from_str("ip_addr")), mp_obj_new_strn(info.ip_addr)); + mp_obj_dict_store(config_dict, MP_OBJ_NEW_QSTR(qstr_from_str("mask")), mp_obj_new_strn(info.mask)); + mp_obj_dict_store(config_dict, MP_OBJ_NEW_QSTR(qstr_from_str("gateway")), mp_obj_new_strn(info.gw)); + mp_obj_dict_store(config_dict, MP_OBJ_NEW_QSTR(qstr_from_str("dns")), mp_obj_new_strn(info.dns_server)); + mp_obj_dict_store(config_dict, MP_OBJ_NEW_QSTR(qstr_from_str("mac")), mp_obj_new_strn(info.mac)); + mp_obj_dict_store(config_dict, MP_OBJ_NEW_QSTR(qstr_from_str("rssi")), mp_obj_new_int(info.rssi)); - mp_int_t ret = netmgr_wifi_set_channelist(hdl, channels.buf, channels.len); - return mp_obj_new_int(ret); + return config_dict; } -MP_DEFINE_CONST_FUN_OBJ_1(hapy_netmgr_setChannelList_obj, hapy_netmgr_setChannelList); +MP_DEFINE_CONST_FUN_OBJ_0(netmgr_get_ifconfig_obj, aos_get_ifconfig); -STATIC mp_obj_t disconnect_wifi(void) -{ - mp_int_t ret = aos_wifi_disconnect(); - return mp_obj_new_int(ret); -} -MP_DEFINE_CONST_FUN_OBJ_0(netmgr_obj_disconnect_wifi, disconnect_wifi); - -STATIC mp_obj_t hapy_netmgr_on(mp_obj_t func) -{ - on_wifi_event_cb = func; - return mp_const_none; -} -MP_DEFINE_CONST_FUN_OBJ_1(hapy_netmgr_on_obj, hapy_netmgr_on); STATIC const mp_rom_map_elem_t netmgr_module_globals_table[] = { { MP_OBJ_NEW_QSTR(MP_QSTR___name__), MP_ROM_QSTR(MP_QSTR_netmgr) }, - { MP_OBJ_NEW_QSTR(MP_QSTR_init), MP_ROM_PTR(&hapy_netmgr_init_obj) }, - { MP_OBJ_NEW_QSTR(MP_QSTR_deinit), MP_ROM_PTR(&hapy_netmgr_deinit_obj) }, - { MP_OBJ_NEW_QSTR(MP_QSTR_connect), MP_ROM_PTR(&hapy_netmgr_connect_obj) }, - { MP_OBJ_NEW_QSTR(MP_QSTR_disconnect), MP_ROM_PTR(&hapy_netmgr_disconnect_obj) }, - { MP_OBJ_NEW_QSTR(MP_QSTR_getStatus), MP_ROM_PTR(&hapy_netmgr_getStatus_obj) }, - { MP_OBJ_NEW_QSTR(MP_QSTR_getDev), MP_ROM_PTR(&hapy_netmgr_getDev_obj) }, - { MP_OBJ_NEW_QSTR(MP_QSTR_autoReconnect), MP_ROM_PTR(&hapy_netmgr_autoReconnect_obj) }, - { MP_OBJ_NEW_QSTR(MP_QSTR_autoSaveAP), MP_ROM_PTR(&hapy_netmgr_autoSavaAP_obj) }, - { MP_OBJ_NEW_QSTR(MP_QSTR_ifconfig), MP_ROM_PTR(&hapy_netmgr_ifconfig_obj) }, - { MP_OBJ_NEW_QSTR(MP_QSTR_getConfig), MP_ROM_PTR(&hapy_netmgr_getConfig_obj) }, - { MP_OBJ_NEW_QSTR(MP_QSTR_saveConfig), MP_ROM_PTR(&hapy_netmgr_saveConfig_obj) }, - { MP_OBJ_NEW_QSTR(MP_QSTR_deleteConfig), MP_ROM_PTR(&hapy_netmgr_deleteConfig_obj) }, - { MP_OBJ_NEW_QSTR(MP_QSTR_setChannelList), MP_ROM_PTR(&hapy_netmgr_setChannelList_obj) }, - { MP_OBJ_NEW_QSTR(MP_QSTR_getChannelList), MP_ROM_PTR(&hapy_netmgr_getChannelList_obj) }, - { MP_OBJ_NEW_QSTR(MP_QSTR_on), MP_ROM_PTR(&hapy_netmgr_on_obj) }, - { MP_OBJ_NEW_QSTR(MP_QSTR_getInfo), MP_ROM_PTR(&hapy_netmgr_getInfo_obj) }, - { MP_OBJ_NEW_QSTR(MP_QSTR_getType), MP_ROM_PTR(&hapy_netmgr_getType_obj) }, - + { MP_OBJ_NEW_QSTR(MP_QSTR_init), MP_ROM_PTR(&netmgr_wifi_init_obj) }, + { MP_OBJ_NEW_QSTR(MP_QSTR_deinit), MP_ROM_PTR(&netmgr_wifi_deinit_obj) }, + { MP_OBJ_NEW_QSTR(MP_QSTR_connect), MP_ROM_PTR(&netmgr_wifi_connect_obj) }, + { MP_OBJ_NEW_QSTR(MP_QSTR_disconnect), MP_ROM_PTR(&netmgr_wifi_disconnect_obj) }, + { MP_OBJ_NEW_QSTR(MP_QSTR_getStatus), MP_ROM_PTR(&netmgr_wifi_get_status_obj) }, + { MP_OBJ_NEW_QSTR(MP_QSTR_on), MP_ROM_PTR(&netmgr_wifi_on_obj) }, + { MP_OBJ_NEW_QSTR(MP_QSTR_getInfo), MP_ROM_PTR(&netmgr_wifi_get_info_obj) }, + { MP_OBJ_NEW_QSTR(MP_QSTR_ifconfig), MP_ROM_PTR(&netmgr_ifconfig_obj) }, + { MP_OBJ_NEW_QSTR(MP_QSTR_getIfconfig), MP_ROM_PTR(&netmgr_get_ifconfig_obj) }, /* network connect state */ - { MP_ROM_QSTR(MP_QSTR_NET_AP_DISCONNECTING), MP_ROM_INT(CONN_STATE_DISCONNECTING) }, - { MP_ROM_QSTR(MP_QSTR_NET_AP_DISCONNECTED), MP_ROM_INT(CONN_STATE_DISCONNECTED) }, - { MP_ROM_QSTR(MP_QSTR_NET_AP_CONNECTING), MP_ROM_INT(CONN_STATE_CONNECTING) }, - { MP_ROM_QSTR(MP_QSTR_NET_AP_CONNECTED), MP_ROM_INT(CONN_STATE_CONNECTED) }, - { MP_ROM_QSTR(MP_QSTR_NET_IP_OBTAINING), MP_ROM_INT(CONN_STATE_OBTAINING_IP) }, - { MP_ROM_QSTR(MP_QSTR_NET_IP_OBTAINED), MP_ROM_INT(CONN_STATE_NETWORK_CONNECTED) }, - { MP_ROM_QSTR(MP_QSTR_NET_FAILED), MP_ROM_INT(CONN_STATE_FAILED) }, + { MP_ROM_QSTR(MP_QSTR_NET_AP_DISCONNECTING), MP_ROM_INT(AOS_NET_STA_LOST_IP) }, + { MP_ROM_QSTR(MP_QSTR_NET_AP_DISCONNECTED), MP_ROM_INT(AOS_NET_STA_DISCONNECTED) }, + { MP_ROM_QSTR(MP_QSTR_NET_AP_CONNECTING), MP_ROM_INT(AOS_NET_STA_GOT_IP) }, + { MP_ROM_QSTR(MP_QSTR_NET_AP_CONNECTED), MP_ROM_INT(AOS_NET_STA_CONNECTED) }, + { MP_ROM_QSTR(MP_QSTR_NET_IP_OBTAINING), MP_ROM_INT(AOS_NET_STA_GOT_IP) }, + { MP_ROM_QSTR(MP_QSTR_NET_IP_OBTAINED), MP_ROM_INT(AOS_NET_STA_GOT_IP) }, + { MP_ROM_QSTR(MP_QSTR_NET_FAILED), MP_ROM_INT(AOS_NET_STA_DISCONNECTED) }, /* network type */ { MP_ROM_QSTR(MP_QSTR_NET_TYPE_WIFI), MP_ROM_INT(AOS_NETWORK_WIFI) }, @@ -359,5 +281,3 @@ const mp_obj_module_t netmgr_module = { }; MP_REGISTER_MODULE(MP_QSTR_netmgr, netmgr_module, MICROPY_PY_NETMGR); - -#endif // MICROPY_PY_NETMGR diff --git a/haas_lib_bundles/python/docs/haas_extended_api/network.md b/haas_lib_bundles/python/docs/haas_extended_api/network.md new file mode 100644 index 0000000000000000000000000000000000000000..124115d5696c90eaad0babce538c83366a0eb5c7 --- /dev/null +++ b/haas_lib_bundles/python/docs/haas_extended_api/network.md @@ -0,0 +1,239 @@ +# Network - 网络配置模块 +* 模块功能: +管理Wi-Fi和以太网 + +* 参考用法: +```python +import network +import time + +def callback(event_id): + print(event_id) + +nic = network.WLAN(network.STA_IF) +nic.on(callback) +nic.active(True) +if not nic.isconnected(): + nic.connect(ssid, password) + print("Waiting for connection...") + while not nic.isconnected(): + time.sleep(1) +print(nic.ifconfig()) +``` + +## 常量说明 +|常量|值|说明| +|:-|:-|:-| +|network.STA_IF|1|WLAN STA模式| +|network.AP_IF|2|WLAN AP模式| +|network.STA_STARTED|1|WLAN已启动| +|network.STA_GOT_IP|2|WLAN获得IP| +|network.STA_LOST_IP|3|WLAN已丢失IP| +|network.STA_DISCONNECTED|4|WLAN已断开连接| +|network.STA_CONNECTED|5|WLAN已链接| +|network.STA_STOPED|6|WLAN已停用| +|network.STA_UNKNOWN|7|未知状态| + + +## 错误码 + +```C +typedef enum { + AOS_ERR_WIFI_BASE = 0x3000, /*!< WiFi ERR NUM BASE */ + AOS_ERR_WIFI_NOT_INIT, /*!< WiFi driver was not installed by esp_wifi_init */ + AOS_ERR_WIFI_NOT_STARTED, /*!< WiFi driver was not started by esp_wifi_start */ + AOS_ERR_WIFI_NOT_STOPPED, /*!< WiFi driver was not stopped by esp_wifi_stop */ + AOS_ERR_WIFI_IF, /*!< WiFi interface error */ + AOS_ERR_WIFI_MODE, /*!< WiFi mode error */ + AOS_ERR_WIFI_STATE, /*!< WiFi internal state error */ + AOS_ERR_WIFI_CONN, /*!< WiFi internal control block of station or soft-AP error */ + AOS_ERR_WIFI_NVS, /*!< WiFi internal NVS module error */ + AOS_ERR_WIFI_MAC, /*!< MAC address is invalid */ + AOS_ERR_WIFI_SSID, /*!< SSID is invalid */ + AOS_ERR_WIFI_PASSWORD, /*!< Password is invalid */ + AOS_ERR_WIFI_TIMEOUT, /*!< Timeout error */ + AOS_ERR_WIFI_WAKE_FAIL, /*!< WiFi is in sleep state(RF closed) and wakeup fail */ + AOS_ERR_WIFI_WOULD_BLOCK, /*!< The caller would block */ + AOS_ERR_WIFI_NOT_CONNECT, /*!< Station still in disconnect status */ + AOS_ERR_WIFI_POST, /*!< Failed to post the event to WiFi task */ + AOS_ERR_WIFI_INIT_STATE, /*!< Invalod WiFi state when init/deinit is called */ + AOS_ERR_WIFI_STOP_STATE, /*!< Returned when WiFi is stopping */ + AOS_ERR_WIFI_NOT_ASSOC, /*!< The WiFi connection is not associated */ + AOS_ERR_WIFI_TX_DISALLOW, /*!< The WiFi TX is disallowed */ + AOS_ERR_TCPIP_ADAPTER_INVALID_PARAMS, + AOS_ERR_TCPIP_ADAPTER_IF_NOT_READY, + AOS_ERR_TCPIP_ADAPTER_DHCPC_START_FAILED, + AOS_ERR_TCPIP_ADAPTER_NO_MEM +} AOS_NETWORK_ERR_E; +``` + +## network.WLAN - 创建一个WLAN实例 + +* 函数原型: +> class network.WLAN(interface_id) + +* 参数说明: + +interface_id 可选值为 network.STA_IF 或 network.AP_IF + +* 返回值: +返回一个wlan实例 + +* 参考代码: +```python +wlan = network.WLAN(network.STA_IF) +``` + +## WLAN.active + +* 函数原型: +> WLAN.active(is_active) + +* 参数说明: + +|参数|类型|必选参数?|说明| +|-----|----|:---:|----| +|is_active|bool(True, False)|是|激活/反激活| + +## WLAN.connect + +* 函数功能: +链接Wi-FI + +* 函数原型: +> WLAN.connect(ssid, pwd) + +* 参数说明: + +|参数|类型|必选参数?|说明| +|-----|----|:---:|----| +|ssid|string|是|ssid名称| +|pwd|string|是|ssid密码| + +* 参数说明: + +|参数|类型|必选参数?|说明| +|-----|----|:---:|----| +|ssid|string|是|ssid名称| +|pwd|string|是|ssid密码| + +## WLAN.disconnect + +* 函数功能: +断开Wi-Fi链接 + +* 函数原型: +> WLAN.disconnect() + +* 参数说明:无 + +* 返回值: + +成功返回0,错误返回错误码 + +## WLAN.status + +* 函数功能: +获取Wi-Fi状态 + +* 函数原型: +> WLAN.status() + +* 参数说明:无 + +* 返回值 + +|定义| 数值 |说明| +|:-|:-|:-| +|network.STA_STARTED|1|WLAN已启动| +|network.STA_GOT_IP|2|WLAN获得IP| +|network.STA_LOST_IP|3|WLAN已丢失IP| +|network.STA_DISCONNECTED|4|WLAN已断开连接| +|network.STA_CONNECTED|5|WLAN已链接| +|network.STA_STOPED|6|WLAN已停用| +|network.STA_UNKNOWN|7|未知状态| + +## WLAN.isconnected + +* 函数功能: +查看Wi-Fi是否已链接 + +* 函数原型: +> WLAN.isconnected() + +* 参数说明:无 + +* 返回值 + +|类型| 数值 |说明| +|:-|:-|:-| +|bool|True|Wi-Fi已连接| +|bool|False|Wi-Fi未连接| + + +## WLAN.ifconfig + +* 函数功能: +查看Wi-Fi是否已链接 + +* 函数原型: +> WLAN.ifconfig([ip, subnet, gateway, dns]) + +* 参数说明: + +如果不传参数,则获取当前IP配置, 如果传入组合参数,则设定IP信息 + +|参数|类型|必选参数|说明| +|:----|:----|:---:|----| +|ip_info|tuple|否|ip信息| + +ip_info数据格式说明: + +|参数|类型|说明| +|:----|:----|:----| +|ip|stringip|地址| +|subnet|string|子网掩码| +|gateway|string|网关地址| +|dns|string|dns地址| + +* 返回值 + +成功返回0,错误返回错误码 + + +## WLAN.on + +* 函数功能: +注册回调函数,网络状态发生变化时候,引擎会调用毁掉函数 + +* 函数原型: +> WLAN.on(callback) + +* 参数说明: + +|参数|类型|必选参数|说明| +|:----|:----|:---:|----| +|callback|func|是|设定回调函数| + +* callback函数定义 +callback(event_type) + +* 返回值 + +成功返回0,错误返回错误码 + +## WLAN.scan + +* 函数功能: +扫描附近AP + +* 函数原型: +> WLAN.scan() + +* 参数说明: + +无 + +* 返回值 + +返回AP列表 \ No newline at end of file