From d3a974f6f2bbd5d3ffa2d88bc1d66237aeb1ff6c Mon Sep 17 00:00:00 2001 From: chenwen Date: Tue, 20 Oct 2020 16:57:54 +0800 Subject: [PATCH] feat(smartconfig): refactor smartconfig callback to use esp event Consistent with esp-idf(branch: release/v4.2, commit id: c5bb6c4) --- components/esp8266/CMakeLists.txt | 2 + components/esp8266/include/esp_private/wifi.h | 55 +++++-- components/esp8266/include/esp_smartconfig.h | 60 +++++--- components/esp8266/include/smartconfig_ack.h | 44 ++++++ components/esp8266/lib/VERSION | 2 +- components/esp8266/lib/libsmartconfig.a | Bin 206642 -> 89192 bytes components/esp8266/source/smartconfig.c | 83 ++++++++++ .../source}/smartconfig_ack.c | 136 ++++++++--------- components/smartconfig_ack/CMakeLists.txt | 6 - components/smartconfig_ack/component.mk | 2 - .../smartconfig_ack/include/smartconfig_ack.h | 94 ------------ docs/Doxyfile | 8 +- .../wifi/smart_config/main/smartconfig_main.c | 143 ++++++++---------- 13 files changed, 339 insertions(+), 296 deletions(-) create mode 100644 components/esp8266/include/smartconfig_ack.h create mode 100644 components/esp8266/source/smartconfig.c rename components/{smartconfig_ack => esp8266/source}/smartconfig_ack.c (63%) delete mode 100644 components/smartconfig_ack/CMakeLists.txt delete mode 100644 components/smartconfig_ack/component.mk delete mode 100644 components/smartconfig_ack/include/smartconfig_ack.h diff --git a/components/esp8266/CMakeLists.txt b/components/esp8266/CMakeLists.txt index ff2f4269..22615a57 100644 --- a/components/esp8266/CMakeLists.txt +++ b/components/esp8266/CMakeLists.txt @@ -32,6 +32,8 @@ else() "source/crc.c" "source/phy_init.c" "source/reset_reason.c" + "source/smartconfig.c" + "source/smartconfig_ack.c" "source/startup.c" "source/system_api.c" "source/task_wdt.c" diff --git a/components/esp8266/include/esp_private/wifi.h b/components/esp8266/include/esp_private/wifi.h index 8c8042c6..170262df 100644 --- a/components/esp8266/include/esp_private/wifi.h +++ b/components/esp8266/include/esp_private/wifi.h @@ -18,6 +18,7 @@ #include "esp_wifi_types.h" #include "esp_event.h" #include "esp_wifi.h" +#include "esp_smartconfig.h" #ifdef __cplusplus extern "C" { @@ -39,7 +40,7 @@ typedef enum { WIFI_LOG_DEBUG, /*can be set in menuconfig*/ WIFI_LOG_VERBOSE, /*can be set in menuconfig*/ } wifi_log_level_t; - + /** * @brief WiFi log submodule definition * @@ -81,7 +82,7 @@ typedef enum { * - ESP_ERR_NO_MEM: out of memory * - others: refer to error code esp_err.h */ -esp_err_t esp_wifi_init_internal(const wifi_init_config_t *config); +esp_err_t esp_wifi_init_internal(const wifi_init_config_t* config); /** * @brief Deinitialize Wi-Fi Driver @@ -117,14 +118,14 @@ wifi_rx_pbuf_mem_type_t esp_wifi_get_rx_pbuf_mem_type(void); int8_t esp_wifi_get_ap_rssi(void); /** - * @brief The RX callback function when receive probe request packet. + * @brief The RX callback function when receive probe request packet. * When probe request packet is received, the callback function will be called. * * @param frame Data of received probe request. * @param len length of received probe request. * @param rssi rssi of received probe request. */ -typedef void (*wifi_sta_rx_probe_req_t)(const uint8_t *frame, int len, int rssi); +typedef void (*wifi_sta_rx_probe_req_t)(const uint8_t* frame, int len, int rssi); /** * @brief Register the RX callback function when receive probe request. @@ -159,14 +160,14 @@ void esp_wifi_internal_free_rx_buffer(void* buffer); * - ERR_IF : WiFi driver error * - ERR_ARG : Invalid argument */ -int esp_wifi_internal_tx(wifi_interface_t wifi_if, void *buffer, uint16_t len); +int esp_wifi_internal_tx(wifi_interface_t wifi_if, void* buffer, uint16_t len); /** * @brief The WiFi RX callback function * * Each time the WiFi need to forward the packets to high layer, the callback function will be called */ -typedef esp_err_t (*wifi_rxcb_t)(void *buffer, uint16_t len, void *eb); +typedef esp_err_t (*wifi_rxcb_t)(void* buffer, uint16_t len, void* eb); /** * @brief Set the WiFi RX callback @@ -183,7 +184,7 @@ typedef esp_err_t (*wifi_rxcb_t)(void *buffer, uint16_t len, void *eb); esp_err_t esp_wifi_internal_reg_rxcb(wifi_interface_t ifx, wifi_rxcb_t fn); /** - * @brief Set current WiFi log level + * @brief Set current WiFi log level * * @param level Log level. * @@ -207,7 +208,7 @@ esp_err_t esp_wifi_internal_set_log_level(wifi_log_level_t level); esp_err_t esp_wifi_internal_set_log_mod(uint32_t submodule); /** - * @brief Get current WiFi log info + * @brief Get current WiFi log info * * @param log_level the return log level. * @param log_mod the return log module and submodule @@ -215,21 +216,49 @@ esp_err_t esp_wifi_internal_set_log_mod(uint32_t submodule); * @return * - ESP_OK: succeed */ -esp_err_t esp_wifi_internal_get_log(wifi_log_level_t *log_level, uint32_t *log_mod); +esp_err_t esp_wifi_internal_get_log(wifi_log_level_t* log_level, uint32_t* log_mod); /** * @brief get wifi power management config. - * + * * @param ps_config power management config */ -void esp_wifi_set_pm_config(esp_pm_config_t *pm_config); +void esp_wifi_set_pm_config(esp_pm_config_t* pm_config); /** * @brief set wifi power management config. - * + * * @param ps_config power management config */ -void esp_wifi_get_pm_config(esp_pm_config_t *pm_config); +void esp_wifi_get_pm_config(esp_pm_config_t* pm_config); + +/** + * @brief Start SmartConfig, config ESP device to connect AP. You need to broadcast information by phone APP. + * Device sniffer special packets from the air that containing SSID and password of target AP. + * + * @attention 1. This API can be called in station or softAP-station mode. + * @attention 2. Can not call esp_smartconfig_start twice before it finish, please call + * esp_smartconfig_stop first. + * + * @param config pointer to smartconfig start configure structure + * + * @return + * - ESP_OK: succeed + * - others: fail + */ +esp_err_t esp_smartconfig_internal_start(const smartconfig_start_config_t* config); + +/** + * @brief Stop SmartConfig, free the buffer taken by esp_smartconfig_start. + * + * @attention Whether connect to AP succeed or not, this API should be called to free + * memory taken by smartconfig_start. + * + * @return + * - ESP_OK: succeed + * - others: fail + */ +esp_err_t esp_smartconfig_internal_stop(void); #ifdef __cplusplus } diff --git a/components/esp8266/include/esp_smartconfig.h b/components/esp8266/include/esp_smartconfig.h index f7b8e431..52be7899 100644 --- a/components/esp8266/include/esp_smartconfig.h +++ b/components/esp8266/include/esp_smartconfig.h @@ -18,37 +18,48 @@ #include #include #include "esp_err.h" +#include "esp_event_base.h" #ifdef __cplusplus extern "C" { #endif -typedef enum { - SC_STATUS_WAIT = 0, /**< Waiting to start connect */ - SC_STATUS_FIND_CHANNEL, /**< Finding target channel */ - SC_STATUS_GETTING_SSID_PSWD, /**< Getting SSID and password of target AP */ - SC_STATUS_LINK, /**< Connecting to target AP */ - SC_STATUS_LINK_OVER, /**< Connected to AP successfully */ -} smartconfig_status_t; - typedef enum { SC_TYPE_ESPTOUCH = 0, /**< protocol: ESPTouch */ SC_TYPE_AIRKISS, /**< protocol: AirKiss */ SC_TYPE_ESPTOUCH_AIRKISS, /**< protocol: ESPTouch and AirKiss */ } smartconfig_type_t; -/** - * @brief The callback of SmartConfig, executed when smart-config status changed. - * - * @param status Status of SmartConfig: - * - SC_STATUS_GETTING_SSID_PSWD : pdata is a pointer of smartconfig_type_t, means config type. - * - SC_STATUS_LINK : pdata is a pointer of struct station_config. - * - SC_STATUS_LINK_OVER : pdata is a pointer of phone's IP address(4 bytes) if pdata unequal NULL. - * - otherwise : parameter void *pdata is NULL. - * @param pdata According to the different status have different values. - * - */ -typedef void (*sc_callback_t)(smartconfig_status_t status, void *pdata); +/** Smartconfig event declarations */ +typedef enum { + SC_EVENT_SCAN_DONE, /*!< ESP32 station smartconfig has finished to scan for APs */ + SC_EVENT_FOUND_CHANNEL, /*!< ESP32 station smartconfig has found the channel of the target AP */ + SC_EVENT_GOT_SSID_PSWD, /*!< ESP32 station smartconfig got the SSID and password */ + SC_EVENT_SEND_ACK_DONE, /*!< ESP32 station smartconfig has sent ACK to cellphone */ +} smartconfig_event_t; + +/** @brief smartconfig event base declaration */ +ESP_EVENT_DECLARE_BASE(SC_EVENT); + +/** Argument structure for SC_EVENT_GOT_SSID_PSWD event */ +typedef struct { + uint8_t ssid[32]; /**< SSID of the AP. Null terminated string. */ + uint8_t password[64]; /**< Password of the AP. Null terminated string. */ + bool bssid_set; /**< whether set MAC address of target AP or not. */ + uint8_t bssid[6]; /**< MAC address of target AP. */ + smartconfig_type_t type; /**< Type of smartconfig(ESPTouch or AirKiss). */ + uint8_t token; /**< Token from cellphone which is used to send ACK to cellphone. */ + uint8_t cellphone_ip[4]; /**< IP address of cellphone. */ +} smartconfig_event_got_ssid_pswd_t; + +/** Configure structure for esp_smartconfig_start */ +typedef struct { + bool enable_log; /**< Enable smartconfig logs. */ +} smartconfig_start_config_t; + +#define SMARTCONFIG_START_CONFIG_DEFAULT() { \ + .enable_log = false \ + }; /** * @brief Get the version of SmartConfig. @@ -56,24 +67,23 @@ typedef void (*sc_callback_t)(smartconfig_status_t status, void *pdata); * @return * - SmartConfig version const char. */ -const char *esp_smartconfig_get_version(void); +const char* esp_smartconfig_get_version(void); /** * @brief Start SmartConfig, config ESP device to connect AP. You need to broadcast information by phone APP. * Device sniffer special packets from the air that containing SSID and password of target AP. * - * @attention 1. This API can be called in station or softAP-station mode. + * @attention 1. This API can be called in station mode. * @attention 2. Can not call esp_smartconfig_start twice before it finish, please call * esp_smartconfig_stop first. * - * @param cb SmartConfig callback function. - * @param ... log 1: UART output logs; 0: UART only outputs the result. + * @param config pointer to smartconfig start configure structure * * @return * - ESP_OK: succeed * - others: fail */ -esp_err_t esp_smartconfig_start(sc_callback_t cb, ...); +esp_err_t esp_smartconfig_start(const smartconfig_start_config_t* config); /** * @brief Stop SmartConfig, free the buffer taken by esp_smartconfig_start. diff --git a/components/esp8266/include/smartconfig_ack.h b/components/esp8266/include/smartconfig_ack.h new file mode 100644 index 00000000..2e3d2432 --- /dev/null +++ b/components/esp8266/include/smartconfig_ack.h @@ -0,0 +1,44 @@ +// Copyright 2018 Espressif Systems (Shanghai) PTE LTD +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +#ifndef SMARTCONFIG_ACK_H +#define SMARTCONFIG_ACK_H + +#ifdef __cplusplus +extern "C" { +#endif + +/** + * @brief Send smartconfig ACK to cellphone. + * + * @attention The API can only be used when receiving SC_EVENT_GOT_SSID_PSWD event. + * + * @param type: smartconfig type(ESPTouch or AirKiss); + * token: token from the cellphone; + * cellphone_ip: IP address of the cellphone; + * + * @retuen ESP_OK: succeed + * others: fail + */ +esp_err_t sc_send_ack_start(smartconfig_type_t type, uint8_t token, uint8_t* cellphone_ip); + +/** + * @brief Stop sending smartconfig ACK to cellphone. + */ +void sc_send_ack_stop(void); + +#ifdef __cplusplus +} +#endif +#endif diff --git a/components/esp8266/lib/VERSION b/components/esp8266/lib/VERSION index 3655a18c..a4445363 100644 --- a/components/esp8266/lib/VERSION +++ b/components/esp8266/lib/VERSION @@ -4,5 +4,5 @@ gwen: pp: 4a1ab49 espnow: a4246a0 - smartconfig: 2.8.2 + smartconfig: 2.9.0 phy: 1163.0 diff --git a/components/esp8266/lib/libsmartconfig.a b/components/esp8266/lib/libsmartconfig.a index 039759dc89d836e9cf31628e6163aa0cb576a218..5f079f17512fbb889bae9da89676051c0e280c1a 100644 GIT binary patch literal 89192 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 literal 206642 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 +#include +#include "esp_log.h" +#include "esp_event_base.h" +#include "esp_private/wifi.h" +#include "esp_smartconfig.h" +#include "smartconfig_ack.h" + +/* Smartconfig events definitions */ +ESP_EVENT_DEFINE_BASE(SC_EVENT); + +static const char* TAG = "smartconfig"; + +static void handler_got_ssid_passwd(void* arg, esp_event_base_t base, int32_t event_id, void* data) +{ + smartconfig_event_got_ssid_pswd_t* evt = (smartconfig_event_got_ssid_pswd_t*)data; + uint8_t ssid[33] = { 0 }; + uint8_t password[65] = { 0 }; + uint8_t cellphone_ip[4]; + esp_err_t err = ESP_OK; + + memcpy(ssid, evt->ssid, sizeof(evt->ssid)); + memcpy(password, evt->password, sizeof(evt->password)); + memcpy(cellphone_ip, evt->cellphone_ip, sizeof(evt->cellphone_ip)); + + ESP_LOGD(TAG, "SSID:%s", ssid); + ESP_LOGD(TAG, "PASSWORD:%s", password); + ESP_LOGD(TAG, "Phone ip: %d.%d.%d.%d\n", cellphone_ip[0], cellphone_ip[1], cellphone_ip[2], cellphone_ip[3]); + + err = sc_send_ack_start(evt->type, evt->token, evt->cellphone_ip); + + if (err != ESP_OK) { + ESP_LOGE(TAG, "Send smartconfig ACK error: %d", err); + } +} + +esp_err_t esp_smartconfig_start(const smartconfig_start_config_t* config) +{ + esp_err_t err = ESP_OK; + + err = esp_event_handler_register(SC_EVENT, SC_EVENT_GOT_SSID_PSWD, handler_got_ssid_passwd, NULL); + + if (err != ESP_OK) { + ESP_LOGE(TAG, "Register smartconfig default event handler fail!"); + return err; + } + + err = esp_smartconfig_internal_start(config); + + if (err != ESP_OK) { + esp_event_handler_unregister(SC_EVENT, SC_EVENT_GOT_SSID_PSWD, handler_got_ssid_passwd); + } + + return err; +} + +esp_err_t esp_smartconfig_stop(void) +{ + esp_err_t err = ESP_OK; + + err = esp_smartconfig_internal_stop(); + + if (err == ESP_OK) { + sc_send_ack_stop(); + esp_event_handler_unregister(SC_EVENT, SC_EVENT_GOT_SSID_PSWD, handler_got_ssid_passwd); + } + + return err; +} \ No newline at end of file diff --git a/components/smartconfig_ack/smartconfig_ack.c b/components/esp8266/source/smartconfig_ack.c similarity index 63% rename from components/smartconfig_ack/smartconfig_ack.c rename to components/esp8266/source/smartconfig_ack.c index 4a18fda6..b2f3aa19 100644 --- a/components/smartconfig_ack/smartconfig_ack.c +++ b/components/esp8266/source/smartconfig_ack.c @@ -32,12 +32,35 @@ #include "esp_smartconfig.h" #include "smartconfig_ack.h" -static const char *TAG = "smartconfig"; +#define SC_ACK_TASK_PRIORITY 2 /*!< Priority of sending smartconfig ACK task */ +#define SC_ACK_TASK_STACK_SIZE 2048 /*!< Stack size of sending smartconfig ACK task */ + +#define SC_ACK_TOUCH_SERVER_PORT 18266 /*!< ESP touch UDP port of server on cellphone */ +#define SC_ACK_AIRKISS_SERVER_PORT 10000 /*!< Airkiss UDP port of server on cellphone */ +#define SC_ACK_AIRKISS_DEVICE_PORT 10001 /*!< Airkiss UDP port of server on device */ +#define SC_ACK_AIRKISS_TIMEOUT 1500 /*!< Airkiss read data timout millisecond */ + +#define SC_ACK_TOUCH_LEN 11 /*!< Length of ESP touch ACK context */ +#define SC_ACK_AIRKISS_LEN 7 /*!< Length of Airkiss ACK context */ + +#define SC_ACK_MAX_COUNT 60 /*!< Maximum count of sending smartconfig ACK */ + +/** + * @brief Smartconfig parameters passed to sc_ack_send call. + */ +typedef struct sc_ack { + smartconfig_type_t type; /*!< Smartconfig type(ESPTouch or AirKiss) */ + struct { + uint8_t token; /*!< Smartconfig token from the cellphone */ + uint8_t mac[6]; /*!< MAC address of station */ + uint8_t ip[4]; /*!< IP address of cellphone */ + } ctx; +} sc_ack_t; + +static const char* TAG = "smartconfig"; /* Flag to indicate sending smartconfig ACK or not. */ static bool s_sc_ack_send = false; -static void *s_sc_ack_info = NULL; -static size_t s_sc_ack_info_size = 0; static int sc_ack_send_get_errno(int fd) { @@ -49,32 +72,26 @@ static int sc_ack_send_get_errno(int fd) return sock_errno; } -static void sc_ack_send_task(void *pvParameters) +static void sc_ack_send_task(void* pvParameters) { - sc_ack_t *ack = (sc_ack_t *)pvParameters; + sc_ack_t* ack = (sc_ack_t*)pvParameters; tcpip_adapter_ip_info_t local_ip; - sc_callback_data_t sc_callback_data; uint8_t remote_ip[4]; - memset(&sc_callback_data, 0x0, sizeof(sc_callback_data_t)); - if (ack->type == SC_ACK_TYPE_ESPTOUCH) { - memcpy(sc_callback_data.ip, ack->ctx.ip, sizeof(sc_callback_data.ip)); - } - memcpy(remote_ip, ack->ctx.ip, sizeof(remote_ip)); - sc_callback_data.type = ack->type; - int remote_port = (ack->type == SC_ACK_TYPE_ESPTOUCH) ? SC_ACK_TOUCH_SERVER_PORT : SC_ACK_AIRKISS_SERVER_PORT; + memset(remote_ip, 0xFF, sizeof(remote_ip)); + int remote_port = (ack->type == SC_TYPE_ESPTOUCH) ? SC_ACK_TOUCH_SERVER_PORT : SC_ACK_AIRKISS_SERVER_PORT; struct sockaddr_in server_addr; socklen_t sin_size = sizeof(server_addr); int send_sock = -1; int optval = 1; int sendlen; - int ack_len = (ack->type == SC_ACK_TYPE_ESPTOUCH) ? SC_ACK_TOUCH_LEN : SC_ACK_AIRKISS_LEN; + int ack_len = (ack->type == SC_TYPE_ESPTOUCH) ? SC_ACK_TOUCH_LEN : SC_ACK_AIRKISS_LEN; uint8_t packet_count = 1; int err; int ret; bzero(&server_addr, sizeof(struct sockaddr_in)); server_addr.sin_family = AF_INET; - server_addr.sin_addr.s_addr = inet_addr((const char*)remote_ip); + memcpy(&server_addr.sin_addr.s_addr, remote_ip, sizeof(remote_ip)); server_addr.sin_port = htons(remote_port); esp_wifi_get_mac(WIFI_IF_STA, ack->ctx.mac); @@ -84,22 +101,24 @@ static void sc_ack_send_task(void *pvParameters) while (s_sc_ack_send) { /* Get local IP address of station */ ret = tcpip_adapter_get_ip_info(TCPIP_ADAPTER_IF_STA, &local_ip); + if ((ESP_OK == ret) && (local_ip.ip.addr != INADDR_ANY)) { /* If ESP touch, smartconfig ACK contains local IP address. */ - if (ack->type == SC_ACK_TYPE_ESPTOUCH) { + if (ack->type == SC_TYPE_ESPTOUCH) { memcpy(ack->ctx.ip, &local_ip.ip.addr, 4); } /* Create UDP socket. */ send_sock = socket(AF_INET, SOCK_DGRAM, 0); + if ((send_sock < LWIP_SOCKET_OFFSET) || (send_sock > (FD_SETSIZE - 1))) { ESP_LOGE(TAG, "Creat udp socket failed"); - goto _end; + goto _end; } setsockopt(send_sock, SOL_SOCKET, SO_BROADCAST | SO_REUSEADDR, &optval, sizeof(int)); - if (ack->type == SC_ACK_TYPE_AIRKISS) { + if (ack->type == SC_TYPE_AIRKISS) { char data = 0; struct sockaddr_in local_addr, from; socklen_t sockadd_len = sizeof(struct sockaddr); @@ -114,18 +133,15 @@ static void sc_ack_send_task(void *pvParameters) local_addr.sin_addr.s_addr = INADDR_ANY; local_addr.sin_port = htons(SC_ACK_AIRKISS_DEVICE_PORT); - bind(send_sock, (struct sockaddr *)&local_addr, sockadd_len); + bind(send_sock, (struct sockaddr*)&local_addr, sockadd_len); setsockopt(send_sock, SOL_SOCKET, SO_RCVTIMEO, &timeout, sizeof(timeout)); - recvfrom(send_sock, &data, 1, 0, (struct sockaddr *)&from, &sockadd_len); + recvfrom(send_sock, &data, 1, 0, (struct sockaddr*)&from, &sockadd_len); + if (from.sin_addr.s_addr != INADDR_ANY) { memcpy(remote_ip, &from.sin_addr, 4); - memcpy(sc_callback_data.ip, &from.sin_addr, sizeof(sc_callback_data.ip)); server_addr.sin_addr.s_addr = from.sin_addr.s_addr; } else { - if (ack->cb) { - ack->cb(SC_STATUS_LINK_OVER, &sc_callback_data); - } goto _end; } } @@ -133,95 +149,73 @@ static void sc_ack_send_task(void *pvParameters) while (s_sc_ack_send) { /* Send smartconfig ACK every 100ms. */ vTaskDelay(100 / portTICK_RATE_MS); - - if (s_sc_ack_info) { - sendlen = sendto(send_sock, s_sc_ack_info, s_sc_ack_info_size, 0, (struct sockaddr*) &server_addr, sin_size); - } else { - sendlen = sendto(send_sock, &ack->ctx, ack_len, 0, (struct sockaddr*) &server_addr, sin_size); - } + sendlen = sendto(send_sock, &ack->ctx, ack_len, 0, (struct sockaddr*) &server_addr, sin_size); if (sendlen > 0) { /* Totally send 30 smartconfig ACKs. Then smartconfig is successful. */ if (packet_count++ >= SC_ACK_MAX_COUNT) { - if (ack->link_flag) { - *ack->link_flag = 1; - } - if (ack->cb) { - ack->cb(SC_STATUS_LINK_OVER, &sc_callback_data); - } + esp_event_post(SC_EVENT, SC_EVENT_SEND_ACK_DONE, NULL, 0, portMAX_DELAY); goto _end; } - } - else { + } else { err = sc_ack_send_get_errno(send_sock); + if (err == ENOMEM || err == EAGAIN) { ESP_LOGD(TAG, "send failed, errno %d", err); continue; } + ESP_LOGE(TAG, "send failed, errno %d", err); goto _end; } } - } - else { - vTaskDelay((portTickType)(100 / portTICK_RATE_MS)); + } else { + vTaskDelay((portTickType)(200 / portTICK_RATE_MS)); } } _end: + if ((send_sock >= LWIP_SOCKET_OFFSET) && (send_sock <= (FD_SETSIZE - 1))) { close(send_sock); } - if (s_sc_ack_info) { - free(s_sc_ack_info); - s_sc_ack_info = NULL; - s_sc_ack_info_size = 0; - } + free(ack); vTaskDelete(NULL); } -void sc_ack_send(sc_ack_t *param) +esp_err_t sc_send_ack_start(smartconfig_type_t type, uint8_t token, uint8_t* cellphone_ip) { - sc_ack_t *ack = NULL; + sc_ack_t* ack = NULL; - if (param == NULL) { - ESP_LOGE(TAG, "Smart config ack parameter error"); - return; + if (cellphone_ip == NULL) { + ESP_LOGE(TAG, "Cellphone IP address is NULL"); + return ESP_ERR_INVALID_ARG; } ack = malloc(sizeof(sc_ack_t)); + if (ack == NULL) { - ESP_LOGE(TAG, "Smart config ack parameter malloc fail"); - return; + ESP_LOGE(TAG, "ACK parameter malloc fail"); + return ESP_ERR_NO_MEM; } - memcpy(ack, param, sizeof(sc_ack_t)); + + ack->type = type; + ack->ctx.token = token; + memcpy(ack->ctx.ip, cellphone_ip, 4); s_sc_ack_send = true; if (xTaskCreate(sc_ack_send_task, "sc_ack_send_task", SC_ACK_TASK_STACK_SIZE, ack, SC_ACK_TASK_PRIORITY, NULL) != pdPASS) { ESP_LOGE(TAG, "Create sending smartconfig ACK task fail"); free(ack); + return ESP_ERR_NO_MEM; } + + return ESP_OK; } -void sc_ack_send_stop(void) +void sc_send_ack_stop(void) { s_sc_ack_send = false; } - -bool sc_ack_send_info(void *buffer, size_t size) -{ - if (!buffer || !size) - return false; - - s_sc_ack_info = s_sc_ack_info ? realloc(s_sc_ack_info, size + 1) : malloc(size + 1); - if (!s_sc_ack_info) - return false; - - s_sc_ack_info_size = size; - memset(s_sc_ack_info, 0, size + 1); - memcpy(s_sc_ack_info, buffer, size); - - return true; -} diff --git a/components/smartconfig_ack/CMakeLists.txt b/components/smartconfig_ack/CMakeLists.txt deleted file mode 100644 index 8b18007d..00000000 --- a/components/smartconfig_ack/CMakeLists.txt +++ /dev/null @@ -1,6 +0,0 @@ -set(COMPONENT_SRCDIRS ".") -set(COMPONENT_ADD_INCLUDEDIRS "include") - -set(COMPONENT_PRIV_REQUIRES lwip tcpip_adapter) - -register_component() diff --git a/components/smartconfig_ack/component.mk b/components/smartconfig_ack/component.mk deleted file mode 100644 index 58eac9a5..00000000 --- a/components/smartconfig_ack/component.mk +++ /dev/null @@ -1,2 +0,0 @@ -# -# Component Makefile diff --git a/components/smartconfig_ack/include/smartconfig_ack.h b/components/smartconfig_ack/include/smartconfig_ack.h deleted file mode 100644 index 1f037a57..00000000 --- a/components/smartconfig_ack/include/smartconfig_ack.h +++ /dev/null @@ -1,94 +0,0 @@ -// Copyright 2018 Espressif Systems (Shanghai) PTE LTD -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. - -#ifndef SMARTCONFIG_ACK_H -#define SMARTCONFIG_ACK_H - -#ifdef __cplusplus -extern "C" { -#endif - -#define SC_ACK_TASK_PRIORITY 2 /*!< Priority of sending smartconfig ACK task */ -#define SC_ACK_TASK_STACK_SIZE 2048 /*!< Stack size of sending smartconfig ACK task */ - -#define SC_ACK_TOUCH_SERVER_PORT 18266 /*!< ESP touch UDP port of server on cellphone */ -#define SC_ACK_AIRKISS_SERVER_PORT 10000 /*!< Airkiss UDP port of server on cellphone */ -#define SC_ACK_AIRKISS_DEVICE_PORT 10001 /*!< Airkiss UDP port of server on device */ -#define SC_ACK_AIRKISS_TIMEOUT 1500 /*!< Airkiss read data timeout millisecond */ - -#define SC_ACK_TOUCH_LEN 11 /*!< Length of ESP touch ACK context */ -#define SC_ACK_AIRKISS_LEN 7 /*!< Length of Airkiss ACK context */ - -#define SC_ACK_MAX_COUNT 30 /*!< Maximum count of sending smartconfig ACK */ - -/** - * @brief Smartconfig ACK type. - */ -typedef enum { - SC_ACK_TYPE_ESPTOUCH = 0, /*!< ESP touch ACK type */ - SC_ACK_TYPE_AIRKISS, /*!< Airkiss ACK type */ -} sc_ack_type_t; - -/** - * @brief Smartconfig parameters passed to sc_ack_send call. - */ -typedef struct sc_ack { - sc_ack_type_t type; /*!< Smartconfig ACK type */ - uint8_t *link_flag; /*!< Smartconfig link flag */ - sc_callback_t cb; /*!< Smartconfig callback function */ - struct { - uint8_t token; /*!< Smartconfig token to be sent */ - uint8_t mac[6]; /*!< MAC address of station */ - uint8_t ip[4]; /*!< IP address of cellphone */ - } ctx; -} sc_ack_t; - -/** - * @brief Smartconfig parameters passed sc_callback call. - */ -typedef struct sc_callback_ack { - uint8_t ip[4]; /*!< IP address of cellphone */ - sc_ack_type_t type; /*!< Smartconfig ACK type */ -} sc_callback_data_t; - -/** - * @brief Send smartconfig ACK to cellphone. - * - * @attention The API is only used in libsmartconfig.a. - * - * @param param: smartconfig parameters; - */ -void sc_ack_send(sc_ack_t *param); - -/** - * @brief Stop sending smartconfig ACK to cellphone. - * - * @attention The API is only used in libsmartconfig.a. - */ -void sc_ack_send_stop(void); - -/** - * @brief Fill smartconfig ACK information to cellphone. - * - * @attention The API is only used in libsmartconfig.a. - * - * @param buffer: Transmits the data in the buffer; - * @param size: The size argument specifies the number of bytes to be transmitted. - */ -bool sc_ack_send_info(void *buffer, size_t size); - -#ifdef __cplusplus -} -#endif -#endif diff --git a/docs/Doxyfile b/docs/Doxyfile index 1516f915..40c1c94d 100644 --- a/docs/Doxyfile +++ b/docs/Doxyfile @@ -28,6 +28,11 @@ INPUT = \ ../../components/esp8266/include/esp_wifi_types.h \ ../../components/esp8266/include/esp_smartconfig.h \ ## + ## Event loop - API Reference + ../../components/esp_event/include/esp_event.h \ + ../../components/esp_event/include/esp_event_base.h \ + ../../components/esp_event/include/esp_event_legacy.h \ + ## ## TCP-IP - API Reference ## ../../components/tcpip_adapter/include/tcpip_adapter.h \ @@ -78,7 +83,8 @@ PREDEFINED = \ configTHREAD_LOCAL_STORAGE_DELETE_CALLBACKS=1 \ configNUM_THREAD_LOCAL_STORAGE_POINTERS=1 \ configUSE_APPLICATION_TASK_TAG=1 \ - configTASKLIST_INCLUDE_COREID=1 + configTASKLIST_INCLUDE_COREID=1 \ + "ESP_EVENT_DECLARE_BASE(x)=extern esp_event_base_t x" ## Do not complain about not having dot ## diff --git a/examples/wifi/smart_config/main/smartconfig_main.c b/examples/wifi/smart_config/main/smartconfig_main.c index bf9dc59f..fd1299a8 100644 --- a/examples/wifi/smart_config/main/smartconfig_main.c +++ b/examples/wifi/smart_config/main/smartconfig_main.c @@ -22,118 +22,95 @@ #include "smartconfig_ack.h" /* FreeRTOS event group to signal when we are connected & ready to make a request */ -static EventGroupHandle_t wifi_event_group; +static EventGroupHandle_t s_wifi_event_group; /* The event group allows multiple bits for each event, but we only care about one event - are we connected to the AP with an IP? */ static const int CONNECTED_BIT = BIT0; static const int ESPTOUCH_DONE_BIT = BIT1; -static const char *TAG = "sc"; +static const char* TAG = "smartconfig_example"; -static void smartconfig_example_task(void * parm); +static void smartconfig_example_task(void* parm); -static void on_wifi_start(void *arg, esp_event_base_t event_base, - int32_t event_id, void *event_data) +static void event_handler(void* arg, esp_event_base_t event_base, + int32_t event_id, void* event_data) { - xTaskCreate(smartconfig_example_task, "smartconfig_example_task", 4096, NULL, 3, NULL); -} + if (event_base == WIFI_EVENT && event_id == WIFI_EVENT_STA_START) { + xTaskCreate(smartconfig_example_task, "smartconfig_example_task", 4096, NULL, 3, NULL); + } else if (event_base == WIFI_EVENT && event_id == WIFI_EVENT_STA_DISCONNECTED) { + esp_wifi_connect(); + xEventGroupClearBits(s_wifi_event_group, CONNECTED_BIT); + } else if (event_base == IP_EVENT && event_id == IP_EVENT_STA_GOT_IP) { + xEventGroupSetBits(s_wifi_event_group, CONNECTED_BIT); + } else if (event_base == SC_EVENT && event_id == SC_EVENT_SCAN_DONE) { + ESP_LOGI(TAG, "Scan done"); + } else if (event_base == SC_EVENT && event_id == SC_EVENT_FOUND_CHANNEL) { + ESP_LOGI(TAG, "Found channel"); + } else if (event_base == SC_EVENT && event_id == SC_EVENT_GOT_SSID_PSWD) { + ESP_LOGI(TAG, "Got SSID and password"); -static void on_wifi_disconnect(void *arg, esp_event_base_t event_base, - int32_t event_id, void *event_data) -{ - system_event_sta_disconnected_t *event = (system_event_sta_disconnected_t *)event_data; + smartconfig_event_got_ssid_pswd_t* evt = (smartconfig_event_got_ssid_pswd_t*)event_data; + wifi_config_t wifi_config; + uint8_t ssid[33] = { 0 }; + uint8_t password[65] = { 0 }; - ESP_LOGI(TAG, "Wi-Fi disconnected, trying to reconnect..."); - if (event->reason == WIFI_REASON_BASIC_RATE_NOT_SUPPORT) { - /*Switch to 802.11 bgn mode */ - esp_wifi_set_protocol(ESP_IF_WIFI_STA, WIFI_PROTOCOL_11B | WIFI_PROTOCOL_11G | WIFI_PROTOCOL_11N); + bzero(&wifi_config, sizeof(wifi_config_t)); + memcpy(wifi_config.sta.ssid, evt->ssid, sizeof(wifi_config.sta.ssid)); + memcpy(wifi_config.sta.password, evt->password, sizeof(wifi_config.sta.password)); + wifi_config.sta.bssid_set = evt->bssid_set; + + if (wifi_config.sta.bssid_set == true) { + memcpy(wifi_config.sta.bssid, evt->bssid, sizeof(wifi_config.sta.bssid)); + } + + memcpy(ssid, evt->ssid, sizeof(evt->ssid)); + memcpy(password, evt->password, sizeof(evt->password)); + ESP_LOGI(TAG, "SSID:%s", ssid); + ESP_LOGI(TAG, "PASSWORD:%s", password); + + ESP_ERROR_CHECK(esp_wifi_disconnect()); + ESP_ERROR_CHECK(esp_wifi_set_config(ESP_IF_WIFI_STA, &wifi_config)); + ESP_ERROR_CHECK(esp_wifi_connect()); + } else if (event_base == SC_EVENT && event_id == SC_EVENT_SEND_ACK_DONE) { + xEventGroupSetBits(s_wifi_event_group, ESPTOUCH_DONE_BIT); } - ESP_ERROR_CHECK(esp_wifi_connect()); -} - -static void on_got_ip(void *arg, esp_event_base_t event_base, - int32_t event_id, void *event_data) -{ - xEventGroupSetBits(wifi_event_group, CONNECTED_BIT); } static void initialise_wifi(void) { tcpip_adapter_init(); - wifi_event_group = xEventGroupCreate(); + s_wifi_event_group = xEventGroupCreate(); ESP_ERROR_CHECK(esp_event_loop_create_default()); wifi_init_config_t cfg = WIFI_INIT_CONFIG_DEFAULT(); - ESP_ERROR_CHECK( esp_wifi_init(&cfg) ); + ESP_ERROR_CHECK(esp_wifi_init(&cfg)); + ESP_ERROR_CHECK(esp_wifi_set_ps(WIFI_PS_NONE)); + ESP_ERROR_CHECK(esp_event_handler_register(WIFI_EVENT, ESP_EVENT_ANY_ID, &event_handler, NULL)); + ESP_ERROR_CHECK(esp_event_handler_register(IP_EVENT, IP_EVENT_STA_GOT_IP, &event_handler, NULL)); + ESP_ERROR_CHECK(esp_event_handler_register(SC_EVENT, ESP_EVENT_ANY_ID, &event_handler, NULL)); - ESP_ERROR_CHECK(esp_event_handler_register(WIFI_EVENT, WIFI_EVENT_STA_START, &on_wifi_start, NULL)); - ESP_ERROR_CHECK(esp_event_handler_register(WIFI_EVENT, WIFI_EVENT_STA_DISCONNECTED, &on_wifi_disconnect, NULL)); - ESP_ERROR_CHECK(esp_event_handler_register(IP_EVENT, IP_EVENT_STA_GOT_IP, &on_got_ip, NULL)); - - ESP_ERROR_CHECK( esp_wifi_set_mode(WIFI_MODE_STA) ); - ESP_ERROR_CHECK( esp_wifi_start() ); - ESP_ERROR_CHECK( esp_wifi_connect() ); + ESP_ERROR_CHECK(esp_wifi_set_mode(WIFI_MODE_STA)); + ESP_ERROR_CHECK(esp_wifi_start()); } -static void sc_callback(smartconfig_status_t status, void *pdata) -{ - switch (status) { - case SC_STATUS_WAIT: - ESP_LOGI(TAG, "SC_STATUS_WAIT"); - break; - case SC_STATUS_FIND_CHANNEL: - ESP_LOGI(TAG, "SC_STATUS_FINDING_CHANNEL"); - break; - case SC_STATUS_GETTING_SSID_PSWD: - ESP_LOGI(TAG, "SC_STATUS_GETTING_SSID_PSWD"); - break; - case SC_STATUS_LINK: - ESP_LOGI(TAG, "SC_STATUS_LINK"); - wifi_config_t *wifi_config = pdata; - ESP_LOGI(TAG, "SSID:%s", wifi_config->sta.ssid); - ESP_LOGI(TAG, "PASSWORD:%s", wifi_config->sta.password); - ESP_ERROR_CHECK( esp_wifi_disconnect() ); - ESP_ERROR_CHECK( esp_wifi_set_config(ESP_IF_WIFI_STA, wifi_config) ); - ESP_ERROR_CHECK( esp_wifi_connect() ); - break; - case SC_STATUS_LINK_OVER: - ESP_LOGI(TAG, "SC_STATUS_LINK_OVER"); - if (pdata != NULL) { - sc_callback_data_t *sc_callback_data = (sc_callback_data_t *)pdata; - switch (sc_callback_data->type) { - case SC_ACK_TYPE_ESPTOUCH: - ESP_LOGI(TAG, "Phone ip: %d.%d.%d.%d", sc_callback_data->ip[0], sc_callback_data->ip[1], sc_callback_data->ip[2], sc_callback_data->ip[3]); - ESP_LOGI(TAG, "TYPE: ESPTOUCH"); - break; - case SC_ACK_TYPE_AIRKISS: - ESP_LOGI(TAG, "TYPE: AIRKISS"); - break; - default: - ESP_LOGE(TAG, "TYPE: ERROR"); - break; - } - } - xEventGroupSetBits(wifi_event_group, ESPTOUCH_DONE_BIT); - break; - default: - break; - } -} - -static void smartconfig_example_task(void * parm) +static void smartconfig_example_task(void* parm) { EventBits_t uxBits; - ESP_ERROR_CHECK( esp_smartconfig_set_type(SC_TYPE_ESPTOUCH_AIRKISS) ); - ESP_ERROR_CHECK( esp_smartconfig_start(sc_callback) ); + ESP_ERROR_CHECK(esp_smartconfig_set_type(SC_TYPE_ESPTOUCH)); + smartconfig_start_config_t cfg = SMARTCONFIG_START_CONFIG_DEFAULT(); + ESP_ERROR_CHECK(esp_smartconfig_start(&cfg)); + while (1) { - uxBits = xEventGroupWaitBits(wifi_event_group, CONNECTED_BIT | ESPTOUCH_DONE_BIT, true, false, portMAX_DELAY); - if(uxBits & CONNECTED_BIT) { + uxBits = xEventGroupWaitBits(s_wifi_event_group, CONNECTED_BIT | ESPTOUCH_DONE_BIT, true, false, portMAX_DELAY); + + if (uxBits & CONNECTED_BIT) { ESP_LOGI(TAG, "WiFi Connected to ap"); } - if(uxBits & ESPTOUCH_DONE_BIT) { + + if (uxBits & ESPTOUCH_DONE_BIT) { ESP_LOGI(TAG, "smartconfig over"); esp_smartconfig_stop(); vTaskDelete(NULL); @@ -143,7 +120,7 @@ static void smartconfig_example_task(void * parm) void app_main() { - ESP_ERROR_CHECK( nvs_flash_init() ); + ESP_ERROR_CHECK(nvs_flash_init()); initialise_wifi(); }