mirror of
https://github.com/espressif/esp-idf.git
synced 2025-08-02 12:14:32 +02:00
Merge branch 'feature/add_esptouch_v2' into 'master'
WiFi: add ESPTouch v2 Closes WIFI-942 and WIFI-2619 See merge request espressif/esp-idf!10093
This commit is contained in:
@@ -28,6 +28,7 @@ typedef enum {
|
|||||||
SC_TYPE_ESPTOUCH = 0, /**< protocol: ESPTouch */
|
SC_TYPE_ESPTOUCH = 0, /**< protocol: ESPTouch */
|
||||||
SC_TYPE_AIRKISS, /**< protocol: AirKiss */
|
SC_TYPE_AIRKISS, /**< protocol: AirKiss */
|
||||||
SC_TYPE_ESPTOUCH_AIRKISS, /**< protocol: ESPTouch and AirKiss */
|
SC_TYPE_ESPTOUCH_AIRKISS, /**< protocol: ESPTouch and AirKiss */
|
||||||
|
SC_TYPE_ESPTOUCH_V2, /**< protocol: ESPTouch v2*/
|
||||||
} smartconfig_type_t;
|
} smartconfig_type_t;
|
||||||
|
|
||||||
/** Smartconfig event declarations */
|
/** Smartconfig event declarations */
|
||||||
@@ -55,10 +56,14 @@ typedef struct {
|
|||||||
/** Configure structure for esp_smartconfig_start */
|
/** Configure structure for esp_smartconfig_start */
|
||||||
typedef struct {
|
typedef struct {
|
||||||
bool enable_log; /**< Enable smartconfig logs. */
|
bool enable_log; /**< Enable smartconfig logs. */
|
||||||
|
bool esp_touch_v2_enable_crypt; /**< Enable ESPTouch v2 crypt. */
|
||||||
|
char *esp_touch_v2_key; /**< ESPTouch v2 crypt key, len should be 16. */
|
||||||
} smartconfig_start_config_t;
|
} smartconfig_start_config_t;
|
||||||
|
|
||||||
#define SMARTCONFIG_START_CONFIG_DEFAULT() { \
|
#define SMARTCONFIG_START_CONFIG_DEFAULT() { \
|
||||||
.enable_log = false \
|
.enable_log = false, \
|
||||||
|
.esp_touch_v2_enable_crypt = false,\
|
||||||
|
.esp_touch_v2_key = NULL \
|
||||||
};
|
};
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@@ -139,6 +144,18 @@ esp_err_t esp_smartconfig_set_type(smartconfig_type_t type);
|
|||||||
*/
|
*/
|
||||||
esp_err_t esp_smartconfig_fast_mode(bool enable);
|
esp_err_t esp_smartconfig_fast_mode(bool enable);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @brief Get reserved data of ESPTouch v2.
|
||||||
|
*
|
||||||
|
* @param rvd_data reserved data
|
||||||
|
* @param len length of reserved data
|
||||||
|
*
|
||||||
|
* @return
|
||||||
|
* - ESP_OK: succeed
|
||||||
|
* - others: fail
|
||||||
|
*/
|
||||||
|
esp_err_t esp_smartconfig_get_rvd_data(uint8_t *rvd_data, uint8_t len);
|
||||||
|
|
||||||
#ifdef __cplusplus
|
#ifdef __cplusplus
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
@@ -385,6 +385,8 @@ typedef struct {
|
|||||||
esp_aes_decrypt_t aes_decrypt;
|
esp_aes_decrypt_t aes_decrypt;
|
||||||
esp_aes_decrypt_init_t aes_decrypt_init;
|
esp_aes_decrypt_init_t aes_decrypt_init;
|
||||||
esp_aes_decrypt_deinit_t aes_decrypt_deinit;
|
esp_aes_decrypt_deinit_t aes_decrypt_deinit;
|
||||||
|
esp_aes_128_encrypt_t aes_128_encrypt;
|
||||||
|
esp_aes_128_decrypt_t aes_128_decrypt;
|
||||||
esp_omac1_aes_128_t omac1_aes_128;
|
esp_omac1_aes_128_t omac1_aes_128;
|
||||||
esp_ccmp_decrypt_t ccmp_decrypt;
|
esp_ccmp_decrypt_t ccmp_decrypt;
|
||||||
esp_ccmp_encrypt_t ccmp_encrypt;
|
esp_ccmp_encrypt_t ccmp_encrypt;
|
||||||
|
Submodule components/esp_wifi/lib updated: dd9b0bf481...8017558a14
@@ -34,12 +34,14 @@
|
|||||||
#define SC_ACK_TASK_PRIORITY 2 /*!< Priority of sending smartconfig ACK task */
|
#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_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_TOUCH_DEVICE_PORT 7001 /*!< ESPTouch UDP port of server on device */
|
||||||
|
#define SC_ACK_TOUCH_SERVER_PORT 18266 /*!< ESPTouch UDP port of server on cellphone */
|
||||||
|
#define SC_ACK_TOUCH_V2_SERVER_PORT(i) (18266+i*10000) /*!< ESPTouch v2 UDP port of server on cellphone */
|
||||||
#define SC_ACK_AIRKISS_SERVER_PORT 10000 /*!< Airkiss 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_DEVICE_PORT 10001 /*!< Airkiss UDP port of server on device */
|
||||||
#define SC_ACK_AIRKISS_TIMEOUT 1500 /*!< Airkiss read data timout millisecond */
|
#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_TOUCH_LEN 11 /*!< Length of ESPTouch ACK context */
|
||||||
#define SC_ACK_AIRKISS_LEN 7 /*!< Length of Airkiss 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 */
|
#define SC_ACK_MAX_COUNT 30 /*!< Maximum count of sending smartconfig ACK */
|
||||||
@@ -77,7 +79,6 @@ static void sc_ack_send_task(void *pvParameters)
|
|||||||
esp_netif_ip_info_t local_ip;
|
esp_netif_ip_info_t local_ip;
|
||||||
uint8_t remote_ip[4];
|
uint8_t remote_ip[4];
|
||||||
memcpy(remote_ip, ack->ctx.ip, sizeof(remote_ip));
|
memcpy(remote_ip, ack->ctx.ip, 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;
|
struct sockaddr_in server_addr;
|
||||||
socklen_t sin_size = sizeof(server_addr);
|
socklen_t sin_size = sizeof(server_addr);
|
||||||
int send_sock = -1;
|
int send_sock = -1;
|
||||||
@@ -88,6 +89,19 @@ static void sc_ack_send_task(void *pvParameters)
|
|||||||
int err;
|
int err;
|
||||||
int ret;
|
int ret;
|
||||||
|
|
||||||
|
int remote_port = 0;
|
||||||
|
if (ack->type == SC_TYPE_ESPTOUCH) {
|
||||||
|
remote_port = SC_ACK_TOUCH_SERVER_PORT;
|
||||||
|
} else if (ack->type == SC_TYPE_ESPTOUCH_V2) {
|
||||||
|
uint8_t port_bit = ack->ctx.token;
|
||||||
|
if(port_bit > 3) {
|
||||||
|
port_bit = 0;
|
||||||
|
}
|
||||||
|
remote_port = SC_ACK_TOUCH_V2_SERVER_PORT(port_bit);
|
||||||
|
} else {
|
||||||
|
remote_port = SC_ACK_AIRKISS_SERVER_PORT;
|
||||||
|
}
|
||||||
|
|
||||||
bzero(&server_addr, sizeof(struct sockaddr_in));
|
bzero(&server_addr, sizeof(struct sockaddr_in));
|
||||||
server_addr.sin_family = AF_INET;
|
server_addr.sin_family = AF_INET;
|
||||||
memcpy(&server_addr.sin_addr.s_addr, remote_ip, sizeof(remote_ip));
|
memcpy(&server_addr.sin_addr.s_addr, remote_ip, sizeof(remote_ip));
|
||||||
@@ -101,7 +115,7 @@ static void sc_ack_send_task(void *pvParameters)
|
|||||||
/* Get local IP address of station */
|
/* Get local IP address of station */
|
||||||
ret = esp_netif_get_ip_info(esp_netif_get_handle_from_ifkey("WIFI_STA_DEF"), &local_ip);
|
ret = esp_netif_get_ip_info(esp_netif_get_handle_from_ifkey("WIFI_STA_DEF"), &local_ip);
|
||||||
if ((ESP_OK == ret) && (local_ip.ip.addr != INADDR_ANY)) {
|
if ((ESP_OK == ret) && (local_ip.ip.addr != INADDR_ANY)) {
|
||||||
/* If ESP touch, smartconfig ACK contains local IP address. */
|
/* If ESPTouch, smartconfig ACK contains local IP address. */
|
||||||
if (ack->type == SC_TYPE_ESPTOUCH) {
|
if (ack->type == SC_TYPE_ESPTOUCH) {
|
||||||
memcpy(ack->ctx.ip, &local_ip.ip.addr, 4);
|
memcpy(ack->ctx.ip, &local_ip.ip.addr, 4);
|
||||||
}
|
}
|
||||||
@@ -128,7 +142,11 @@ static void sc_ack_send_task(void *pvParameters)
|
|||||||
bzero(&from, sizeof(struct sockaddr_in));
|
bzero(&from, sizeof(struct sockaddr_in));
|
||||||
local_addr.sin_family = AF_INET;
|
local_addr.sin_family = AF_INET;
|
||||||
local_addr.sin_addr.s_addr = INADDR_ANY;
|
local_addr.sin_addr.s_addr = INADDR_ANY;
|
||||||
|
if (ack->type == SC_TYPE_AIRKISS) {
|
||||||
local_addr.sin_port = htons(SC_ACK_AIRKISS_DEVICE_PORT);
|
local_addr.sin_port = htons(SC_ACK_AIRKISS_DEVICE_PORT);
|
||||||
|
} else {
|
||||||
|
local_addr.sin_port = htons(SC_ACK_TOUCH_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));
|
setsockopt(send_sock, SOL_SOCKET, SO_RCVTIMEO, &timeout, sizeof(timeout));
|
||||||
|
@@ -50,6 +50,8 @@ const wpa_crypto_funcs_t g_wifi_default_wpa_crypto_funcs = {
|
|||||||
.aes_decrypt = (esp_aes_decrypt_t)aes_decrypt,
|
.aes_decrypt = (esp_aes_decrypt_t)aes_decrypt,
|
||||||
.aes_decrypt_init = (esp_aes_decrypt_init_t)aes_decrypt_init,
|
.aes_decrypt_init = (esp_aes_decrypt_init_t)aes_decrypt_init,
|
||||||
.aes_decrypt_deinit = (esp_aes_decrypt_deinit_t)aes_decrypt_deinit,
|
.aes_decrypt_deinit = (esp_aes_decrypt_deinit_t)aes_decrypt_deinit,
|
||||||
|
.aes_128_encrypt = (esp_aes_128_encrypt_t)aes_128_cbc_encrypt,
|
||||||
|
.aes_128_decrypt = (esp_aes_128_decrypt_t)aes_128_cbc_decrypt,
|
||||||
.omac1_aes_128 = (esp_omac1_aes_128_t)omac1_aes_128,
|
.omac1_aes_128 = (esp_omac1_aes_128_t)omac1_aes_128,
|
||||||
.ccmp_decrypt = (esp_ccmp_decrypt_t)ccmp_decrypt,
|
.ccmp_decrypt = (esp_ccmp_decrypt_t)ccmp_decrypt,
|
||||||
.ccmp_encrypt = (esp_ccmp_encrypt_t)ccmp_encrypt
|
.ccmp_encrypt = (esp_ccmp_encrypt_t)ccmp_encrypt
|
||||||
|
@@ -54,6 +54,7 @@ static void event_handler(void* arg, esp_event_base_t event_base,
|
|||||||
wifi_config_t wifi_config;
|
wifi_config_t wifi_config;
|
||||||
uint8_t ssid[33] = { 0 };
|
uint8_t ssid[33] = { 0 };
|
||||||
uint8_t password[65] = { 0 };
|
uint8_t password[65] = { 0 };
|
||||||
|
uint8_t rvd_data[33] = { 0 };
|
||||||
|
|
||||||
bzero(&wifi_config, sizeof(wifi_config_t));
|
bzero(&wifi_config, sizeof(wifi_config_t));
|
||||||
memcpy(wifi_config.sta.ssid, evt->ssid, sizeof(wifi_config.sta.ssid));
|
memcpy(wifi_config.sta.ssid, evt->ssid, sizeof(wifi_config.sta.ssid));
|
||||||
@@ -67,6 +68,14 @@ static void event_handler(void* arg, esp_event_base_t event_base,
|
|||||||
memcpy(password, evt->password, sizeof(evt->password));
|
memcpy(password, evt->password, sizeof(evt->password));
|
||||||
ESP_LOGI(TAG, "SSID:%s", ssid);
|
ESP_LOGI(TAG, "SSID:%s", ssid);
|
||||||
ESP_LOGI(TAG, "PASSWORD:%s", password);
|
ESP_LOGI(TAG, "PASSWORD:%s", password);
|
||||||
|
if (evt->type == SC_TYPE_ESPTOUCH_V2) {
|
||||||
|
ESP_ERROR_CHECK( esp_smartconfig_get_rvd_data(rvd_data, sizeof(rvd_data)) );
|
||||||
|
ESP_LOGI(TAG, "RVD_DATA:");
|
||||||
|
for (int i=0; i<33; i++) {
|
||||||
|
printf("%02x ", rvd_data[i]);
|
||||||
|
}
|
||||||
|
printf("\n");
|
||||||
|
}
|
||||||
|
|
||||||
ESP_ERROR_CHECK( esp_wifi_disconnect() );
|
ESP_ERROR_CHECK( esp_wifi_disconnect() );
|
||||||
ESP_ERROR_CHECK( esp_wifi_set_config(ESP_IF_WIFI_STA, &wifi_config) );
|
ESP_ERROR_CHECK( esp_wifi_set_config(ESP_IF_WIFI_STA, &wifi_config) );
|
||||||
|
Reference in New Issue
Block a user