Merge branch 'feature/transfer_ACK_type_to_sc_callback' into 'master'

feat(sc): transfer smartconfig ACK type to sc_callback

See merge request sdk/ESP8266_RTOS_SDK!944
This commit is contained in:
Dong Heng
2019-05-31 09:58:27 +08:00
3 changed files with 31 additions and 6 deletions

View File

@ -54,6 +54,14 @@ typedef struct sc_ack {
} ctx; } ctx;
} sc_ack_t; } 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. * @brief Send smartconfig ACK to cellphone.
* *

View File

@ -53,8 +53,14 @@ 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; tcpip_adapter_ip_info_t local_ip;
sc_callback_data_t sc_callback_data;
uint8_t remote_ip[4]; 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)); 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; int remote_port = (ack->type == SC_ACK_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);
@ -117,7 +123,7 @@ static void sc_ack_send_task(void *pvParameters)
server_addr.sin_addr.s_addr = from.sin_addr.s_addr; server_addr.sin_addr.s_addr = from.sin_addr.s_addr;
} else { } else {
if (ack->cb) { if (ack->cb) {
ack->cb(SC_STATUS_LINK_OVER, remote_ip); ack->cb(SC_STATUS_LINK_OVER, &sc_callback_data);
} }
goto _end; goto _end;
} }
@ -140,7 +146,7 @@ static void sc_ack_send_task(void *pvParameters)
*ack->link_flag = 1; *ack->link_flag = 1;
} }
if (ack->cb) { if (ack->cb) {
ack->cb(SC_STATUS_LINK_OVER, remote_ip); ack->cb(SC_STATUS_LINK_OVER, &sc_callback_data);
} }
goto _end; goto _end;
} }

View File

@ -19,6 +19,7 @@
#include "nvs_flash.h" #include "nvs_flash.h"
#include "tcpip_adapter.h" #include "tcpip_adapter.h"
#include "esp_smartconfig.h" #include "esp_smartconfig.h"
#include "smartconfig_ack.h"
/* FreeRTOS event group to signal when we are connected & ready to make a request */ /* FreeRTOS event group to signal when we are connected & ready to make a request */
static EventGroupHandle_t wifi_event_group; static EventGroupHandle_t wifi_event_group;
@ -88,9 +89,19 @@ static void sc_callback(smartconfig_status_t status, void *pdata)
case SC_STATUS_LINK_OVER: case SC_STATUS_LINK_OVER:
ESP_LOGI(TAG, "SC_STATUS_LINK_OVER"); ESP_LOGI(TAG, "SC_STATUS_LINK_OVER");
if (pdata != NULL) { if (pdata != NULL) {
uint8_t phone_ip[4] = { 0 }; sc_callback_data_t *sc_callback_data = (sc_callback_data_t *)pdata;
memcpy(phone_ip, (uint8_t* )pdata, 4); switch (sc_callback_data->type) {
ESP_LOGI(TAG, "Phone ip: %d.%d.%d.%d\n", phone_ip[0], phone_ip[1], phone_ip[2], phone_ip[3]); 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); xEventGroupSetBits(wifi_event_group, ESPTOUCH_DONE_BIT);
break; break;
@ -102,7 +113,7 @@ static void sc_callback(smartconfig_status_t status, void *pdata)
void smartconfig_example_task(void * parm) void smartconfig_example_task(void * parm)
{ {
EventBits_t uxBits; EventBits_t uxBits;
ESP_ERROR_CHECK( esp_smartconfig_set_type(SC_TYPE_ESPTOUCH) ); ESP_ERROR_CHECK( esp_smartconfig_set_type(SC_TYPE_ESPTOUCH_AIRKISS) );
ESP_ERROR_CHECK( esp_smartconfig_start(sc_callback) ); ESP_ERROR_CHECK( esp_smartconfig_start(sc_callback) );
while (1) { while (1) {
uxBits = xEventGroupWaitBits(wifi_event_group, CONNECTED_BIT | ESPTOUCH_DONE_BIT, true, false, portMAX_DELAY); uxBits = xEventGroupWaitBits(wifi_event_group, CONNECTED_BIT | ESPTOUCH_DONE_BIT, true, false, portMAX_DELAY);