mirror of
https://github.com/HEYAHONG/ESP32ModRTOSDemo.git
synced 2025-06-04 23:33:03 +08:00
初步添加配置
This commit is contained in:
parent
59ab543232
commit
dc0058ed36
@ -9,7 +9,8 @@
|
||||
#include "mesh_netif.h"
|
||||
#include "driver/gpio.h"
|
||||
#include "freertos/semphr.h"
|
||||
|
||||
#include "init.h"
|
||||
#include "string.h"
|
||||
|
||||
#if CONFIG_WIFI_MESH_NETWORK == 1
|
||||
|
||||
@ -31,7 +32,7 @@ static mesh_addr_t mesh_parent_addr;
|
||||
static int mesh_layer = -1;
|
||||
static esp_ip4_addr_t s_current_ip;
|
||||
|
||||
static wifimeshnet_callback_t wifimeshnet_callback={NULL,NULL,NULL};
|
||||
static wifimeshnet_callback_t wifimeshnet_callback= {NULL,NULL,NULL};
|
||||
|
||||
static void recv_cb(mesh_addr_t *from, mesh_data_t *data)
|
||||
{
|
||||
@ -44,207 +45,208 @@ static void recv_cb(mesh_addr_t *from, mesh_data_t *data)
|
||||
}
|
||||
|
||||
static void mesh_event_handler(void *arg, esp_event_base_t event_base,
|
||||
int32_t event_id, void *event_data)
|
||||
int32_t event_id, void *event_data)
|
||||
{
|
||||
if(wifimeshnet_callback.mesh_event_handler!=NULL)
|
||||
{
|
||||
wifimeshnet_callback.mesh_event_handler(arg,event_base,event_id,event_data);
|
||||
wifimeshnet_callback.mesh_event_handler(arg,event_base,event_id,event_data);
|
||||
};
|
||||
|
||||
mesh_addr_t id = {0,};
|
||||
static uint8_t last_layer = 0;
|
||||
|
||||
switch (event_id) {
|
||||
switch (event_id)
|
||||
{
|
||||
case MESH_EVENT_STARTED:
|
||||
{
|
||||
esp_mesh_get_id(&id);
|
||||
ESP_LOGI(MESH_TAG, "<MESH_EVENT_MESH_STARTED>ID:"MACSTR"", MAC2STR(id.addr));
|
||||
mesh_layer = esp_mesh_get_layer();
|
||||
}
|
||||
break;
|
||||
mesh_layer = esp_mesh_get_layer();
|
||||
}
|
||||
break;
|
||||
case MESH_EVENT_STOPPED:
|
||||
{
|
||||
ESP_LOGI(MESH_TAG, "<MESH_EVENT_STOPPED>");
|
||||
mesh_layer = esp_mesh_get_layer();
|
||||
}
|
||||
break;
|
||||
{
|
||||
ESP_LOGI(MESH_TAG, "<MESH_EVENT_STOPPED>");
|
||||
mesh_layer = esp_mesh_get_layer();
|
||||
}
|
||||
break;
|
||||
case MESH_EVENT_CHILD_CONNECTED:
|
||||
{
|
||||
mesh_event_child_connected_t *child_connected = (mesh_event_child_connected_t *)event_data;
|
||||
ESP_LOGI(MESH_TAG, "<MESH_EVENT_CHILD_CONNECTED>aid:%d, "MACSTR"",
|
||||
child_connected->aid,
|
||||
MAC2STR(child_connected->mac));
|
||||
}
|
||||
break;
|
||||
{
|
||||
mesh_event_child_connected_t *child_connected = (mesh_event_child_connected_t *)event_data;
|
||||
ESP_LOGI(MESH_TAG, "<MESH_EVENT_CHILD_CONNECTED>aid:%d, "MACSTR"",
|
||||
child_connected->aid,
|
||||
MAC2STR(child_connected->mac));
|
||||
}
|
||||
break;
|
||||
case MESH_EVENT_CHILD_DISCONNECTED:
|
||||
{
|
||||
mesh_event_child_disconnected_t *child_disconnected = (mesh_event_child_disconnected_t *)event_data;
|
||||
ESP_LOGI(MESH_TAG, "<MESH_EVENT_CHILD_DISCONNECTED>aid:%d, "MACSTR"",
|
||||
child_disconnected->aid,
|
||||
MAC2STR(child_disconnected->mac));
|
||||
}
|
||||
break;
|
||||
{
|
||||
mesh_event_child_disconnected_t *child_disconnected = (mesh_event_child_disconnected_t *)event_data;
|
||||
ESP_LOGI(MESH_TAG, "<MESH_EVENT_CHILD_DISCONNECTED>aid:%d, "MACSTR"",
|
||||
child_disconnected->aid,
|
||||
MAC2STR(child_disconnected->mac));
|
||||
}
|
||||
break;
|
||||
case MESH_EVENT_ROUTING_TABLE_ADD:
|
||||
{
|
||||
mesh_event_routing_table_change_t *routing_table = (mesh_event_routing_table_change_t *)event_data;
|
||||
ESP_LOGW(MESH_TAG, "<MESH_EVENT_ROUTING_TABLE_ADD>add %d, new:%d",
|
||||
routing_table->rt_size_change,
|
||||
routing_table->rt_size_new);
|
||||
}
|
||||
break;
|
||||
{
|
||||
mesh_event_routing_table_change_t *routing_table = (mesh_event_routing_table_change_t *)event_data;
|
||||
ESP_LOGW(MESH_TAG, "<MESH_EVENT_ROUTING_TABLE_ADD>add %d, new:%d",
|
||||
routing_table->rt_size_change,
|
||||
routing_table->rt_size_new);
|
||||
}
|
||||
break;
|
||||
case MESH_EVENT_ROUTING_TABLE_REMOVE:
|
||||
{
|
||||
mesh_event_routing_table_change_t *routing_table = (mesh_event_routing_table_change_t *)event_data;
|
||||
ESP_LOGW(MESH_TAG, "<MESH_EVENT_ROUTING_TABLE_REMOVE>remove %d, new:%d",
|
||||
routing_table->rt_size_change,
|
||||
routing_table->rt_size_new);
|
||||
}
|
||||
break;
|
||||
{
|
||||
mesh_event_routing_table_change_t *routing_table = (mesh_event_routing_table_change_t *)event_data;
|
||||
ESP_LOGW(MESH_TAG, "<MESH_EVENT_ROUTING_TABLE_REMOVE>remove %d, new:%d",
|
||||
routing_table->rt_size_change,
|
||||
routing_table->rt_size_new);
|
||||
}
|
||||
break;
|
||||
case MESH_EVENT_NO_PARENT_FOUND:
|
||||
{
|
||||
mesh_event_no_parent_found_t *no_parent = (mesh_event_no_parent_found_t *)event_data;
|
||||
ESP_LOGI(MESH_TAG, "<MESH_EVENT_NO_PARENT_FOUND>scan times:%d",
|
||||
no_parent->scan_times);
|
||||
}
|
||||
{
|
||||
mesh_event_no_parent_found_t *no_parent = (mesh_event_no_parent_found_t *)event_data;
|
||||
ESP_LOGI(MESH_TAG, "<MESH_EVENT_NO_PARENT_FOUND>scan times:%d",
|
||||
no_parent->scan_times);
|
||||
}
|
||||
/* TODO handler for the failure */
|
||||
break;
|
||||
break;
|
||||
case MESH_EVENT_PARENT_CONNECTED:
|
||||
{
|
||||
mesh_event_connected_t *connected = (mesh_event_connected_t *)event_data;
|
||||
esp_mesh_get_id(&id);
|
||||
mesh_layer = connected->self_layer;
|
||||
memcpy(&mesh_parent_addr.addr, connected->connected.bssid, 6);
|
||||
ESP_LOGI(MESH_TAG,
|
||||
"<MESH_EVENT_PARENT_CONNECTED>layer:%d-->%d, parent:"MACSTR"%s, ID:"MACSTR"",
|
||||
last_layer, mesh_layer, MAC2STR(mesh_parent_addr.addr),
|
||||
esp_mesh_is_root() ? "<ROOT>" :
|
||||
(mesh_layer == 2) ? "<layer2>" : "", MAC2STR(id.addr));
|
||||
last_layer = mesh_layer;
|
||||
mesh_netifs_start(esp_mesh_is_root());
|
||||
}
|
||||
break;
|
||||
{
|
||||
mesh_event_connected_t *connected = (mesh_event_connected_t *)event_data;
|
||||
esp_mesh_get_id(&id);
|
||||
mesh_layer = connected->self_layer;
|
||||
memcpy(&mesh_parent_addr.addr, connected->connected.bssid, 6);
|
||||
ESP_LOGI(MESH_TAG,
|
||||
"<MESH_EVENT_PARENT_CONNECTED>layer:%d-->%d, parent:"MACSTR"%s, ID:"MACSTR"",
|
||||
last_layer, mesh_layer, MAC2STR(mesh_parent_addr.addr),
|
||||
esp_mesh_is_root() ? "<ROOT>" :
|
||||
(mesh_layer == 2) ? "<layer2>" : "", MAC2STR(id.addr));
|
||||
last_layer = mesh_layer;
|
||||
mesh_netifs_start(esp_mesh_is_root());
|
||||
}
|
||||
break;
|
||||
case MESH_EVENT_PARENT_DISCONNECTED:
|
||||
{
|
||||
mesh_event_disconnected_t *disconnected = (mesh_event_disconnected_t *)event_data;
|
||||
ESP_LOGI(MESH_TAG,
|
||||
"<MESH_EVENT_PARENT_DISCONNECTED>reason:%d",
|
||||
disconnected->reason);
|
||||
mesh_layer = esp_mesh_get_layer();
|
||||
mesh_netifs_stop();
|
||||
}
|
||||
break;
|
||||
{
|
||||
mesh_event_disconnected_t *disconnected = (mesh_event_disconnected_t *)event_data;
|
||||
ESP_LOGI(MESH_TAG,
|
||||
"<MESH_EVENT_PARENT_DISCONNECTED>reason:%d",
|
||||
disconnected->reason);
|
||||
mesh_layer = esp_mesh_get_layer();
|
||||
mesh_netifs_stop();
|
||||
}
|
||||
break;
|
||||
case MESH_EVENT_LAYER_CHANGE:
|
||||
{
|
||||
mesh_event_layer_change_t *layer_change = (mesh_event_layer_change_t *)event_data;
|
||||
mesh_layer = layer_change->new_layer;
|
||||
ESP_LOGI(MESH_TAG, "<MESH_EVENT_LAYER_CHANGE>layer:%d-->%d%s",
|
||||
last_layer, mesh_layer,
|
||||
esp_mesh_is_root() ? "<ROOT>" :
|
||||
(mesh_layer == 2) ? "<layer2>" : "");
|
||||
last_layer = mesh_layer;
|
||||
}
|
||||
break;
|
||||
{
|
||||
mesh_event_layer_change_t *layer_change = (mesh_event_layer_change_t *)event_data;
|
||||
mesh_layer = layer_change->new_layer;
|
||||
ESP_LOGI(MESH_TAG, "<MESH_EVENT_LAYER_CHANGE>layer:%d-->%d%s",
|
||||
last_layer, mesh_layer,
|
||||
esp_mesh_is_root() ? "<ROOT>" :
|
||||
(mesh_layer == 2) ? "<layer2>" : "");
|
||||
last_layer = mesh_layer;
|
||||
}
|
||||
break;
|
||||
case MESH_EVENT_ROOT_ADDRESS:
|
||||
{
|
||||
mesh_event_root_address_t *root_addr = (mesh_event_root_address_t *)event_data;
|
||||
ESP_LOGI(MESH_TAG, "<MESH_EVENT_ROOT_ADDRESS>root address:"MACSTR"",
|
||||
MAC2STR(root_addr->addr));
|
||||
}
|
||||
break;
|
||||
{
|
||||
mesh_event_root_address_t *root_addr = (mesh_event_root_address_t *)event_data;
|
||||
ESP_LOGI(MESH_TAG, "<MESH_EVENT_ROOT_ADDRESS>root address:"MACSTR"",
|
||||
MAC2STR(root_addr->addr));
|
||||
}
|
||||
break;
|
||||
case MESH_EVENT_VOTE_STARTED:
|
||||
{
|
||||
mesh_event_vote_started_t *vote_started = (mesh_event_vote_started_t *)event_data;
|
||||
ESP_LOGI(MESH_TAG,
|
||||
"<MESH_EVENT_VOTE_STARTED>attempts:%d, reason:%d, rc_addr:"MACSTR"",
|
||||
vote_started->attempts,
|
||||
vote_started->reason,
|
||||
MAC2STR(vote_started->rc_addr.addr));
|
||||
}
|
||||
break;
|
||||
{
|
||||
mesh_event_vote_started_t *vote_started = (mesh_event_vote_started_t *)event_data;
|
||||
ESP_LOGI(MESH_TAG,
|
||||
"<MESH_EVENT_VOTE_STARTED>attempts:%d, reason:%d, rc_addr:"MACSTR"",
|
||||
vote_started->attempts,
|
||||
vote_started->reason,
|
||||
MAC2STR(vote_started->rc_addr.addr));
|
||||
}
|
||||
break;
|
||||
case MESH_EVENT_VOTE_STOPPED:
|
||||
{
|
||||
ESP_LOGI(MESH_TAG, "<MESH_EVENT_VOTE_STOPPED>");
|
||||
break;
|
||||
}
|
||||
{
|
||||
ESP_LOGI(MESH_TAG, "<MESH_EVENT_VOTE_STOPPED>");
|
||||
break;
|
||||
}
|
||||
case MESH_EVENT_ROOT_SWITCH_REQ:
|
||||
{
|
||||
mesh_event_root_switch_req_t *switch_req = (mesh_event_root_switch_req_t *)event_data;
|
||||
ESP_LOGI(MESH_TAG,
|
||||
"<MESH_EVENT_ROOT_SWITCH_REQ>reason:%d, rc_addr:"MACSTR"",
|
||||
switch_req->reason,
|
||||
MAC2STR( switch_req->rc_addr.addr));
|
||||
}
|
||||
break;
|
||||
{
|
||||
mesh_event_root_switch_req_t *switch_req = (mesh_event_root_switch_req_t *)event_data;
|
||||
ESP_LOGI(MESH_TAG,
|
||||
"<MESH_EVENT_ROOT_SWITCH_REQ>reason:%d, rc_addr:"MACSTR"",
|
||||
switch_req->reason,
|
||||
MAC2STR( switch_req->rc_addr.addr));
|
||||
}
|
||||
break;
|
||||
case MESH_EVENT_ROOT_SWITCH_ACK:
|
||||
{
|
||||
/* new root */
|
||||
mesh_layer = esp_mesh_get_layer();
|
||||
esp_mesh_get_parent_bssid(&mesh_parent_addr);
|
||||
ESP_LOGI(MESH_TAG, "<MESH_EVENT_ROOT_SWITCH_ACK>layer:%d, parent:"MACSTR"", mesh_layer, MAC2STR(mesh_parent_addr.addr));
|
||||
}
|
||||
break;
|
||||
{
|
||||
/* new root */
|
||||
mesh_layer = esp_mesh_get_layer();
|
||||
esp_mesh_get_parent_bssid(&mesh_parent_addr);
|
||||
ESP_LOGI(MESH_TAG, "<MESH_EVENT_ROOT_SWITCH_ACK>layer:%d, parent:"MACSTR"", mesh_layer, MAC2STR(mesh_parent_addr.addr));
|
||||
}
|
||||
break;
|
||||
case MESH_EVENT_TODS_STATE:
|
||||
{
|
||||
mesh_event_toDS_state_t *toDs_state = (mesh_event_toDS_state_t *)event_data;
|
||||
ESP_LOGI(MESH_TAG, "<MESH_EVENT_TODS_REACHABLE>state:%d", *toDs_state);
|
||||
}
|
||||
break;
|
||||
{
|
||||
mesh_event_toDS_state_t *toDs_state = (mesh_event_toDS_state_t *)event_data;
|
||||
ESP_LOGI(MESH_TAG, "<MESH_EVENT_TODS_REACHABLE>state:%d", *toDs_state);
|
||||
}
|
||||
break;
|
||||
case MESH_EVENT_ROOT_FIXED:
|
||||
{
|
||||
mesh_event_root_fixed_t *root_fixed = (mesh_event_root_fixed_t *)event_data;
|
||||
ESP_LOGI(MESH_TAG, "<MESH_EVENT_ROOT_FIXED>%s",
|
||||
root_fixed->is_fixed ? "fixed" : "not fixed");
|
||||
}
|
||||
break;
|
||||
{
|
||||
mesh_event_root_fixed_t *root_fixed = (mesh_event_root_fixed_t *)event_data;
|
||||
ESP_LOGI(MESH_TAG, "<MESH_EVENT_ROOT_FIXED>%s",
|
||||
root_fixed->is_fixed ? "fixed" : "not fixed");
|
||||
}
|
||||
break;
|
||||
case MESH_EVENT_ROOT_ASKED_YIELD:
|
||||
{
|
||||
mesh_event_root_conflict_t *root_conflict = (mesh_event_root_conflict_t *)event_data;
|
||||
ESP_LOGI(MESH_TAG,
|
||||
"<MESH_EVENT_ROOT_ASKED_YIELD>"MACSTR", rssi:%d, capacity:%d",
|
||||
MAC2STR(root_conflict->addr),
|
||||
root_conflict->rssi,
|
||||
root_conflict->capacity);
|
||||
}
|
||||
break;
|
||||
{
|
||||
mesh_event_root_conflict_t *root_conflict = (mesh_event_root_conflict_t *)event_data;
|
||||
ESP_LOGI(MESH_TAG,
|
||||
"<MESH_EVENT_ROOT_ASKED_YIELD>"MACSTR", rssi:%d, capacity:%d",
|
||||
MAC2STR(root_conflict->addr),
|
||||
root_conflict->rssi,
|
||||
root_conflict->capacity);
|
||||
}
|
||||
break;
|
||||
case MESH_EVENT_CHANNEL_SWITCH:
|
||||
{
|
||||
mesh_event_channel_switch_t *channel_switch = (mesh_event_channel_switch_t *)event_data;
|
||||
ESP_LOGI(MESH_TAG, "<MESH_EVENT_CHANNEL_SWITCH>new channel:%d", channel_switch->channel);
|
||||
}
|
||||
break;
|
||||
{
|
||||
mesh_event_channel_switch_t *channel_switch = (mesh_event_channel_switch_t *)event_data;
|
||||
ESP_LOGI(MESH_TAG, "<MESH_EVENT_CHANNEL_SWITCH>new channel:%d", channel_switch->channel);
|
||||
}
|
||||
break;
|
||||
case MESH_EVENT_SCAN_DONE:
|
||||
{
|
||||
mesh_event_scan_done_t *scan_done = (mesh_event_scan_done_t *)event_data;
|
||||
ESP_LOGI(MESH_TAG, "<MESH_EVENT_SCAN_DONE>number:%d",
|
||||
scan_done->number);
|
||||
}
|
||||
break;
|
||||
{
|
||||
mesh_event_scan_done_t *scan_done = (mesh_event_scan_done_t *)event_data;
|
||||
ESP_LOGI(MESH_TAG, "<MESH_EVENT_SCAN_DONE>number:%d",
|
||||
scan_done->number);
|
||||
}
|
||||
break;
|
||||
case MESH_EVENT_NETWORK_STATE:
|
||||
{
|
||||
mesh_event_network_state_t *network_state = (mesh_event_network_state_t *)event_data;
|
||||
ESP_LOGI(MESH_TAG, "<MESH_EVENT_NETWORK_STATE>is_rootless:%d",
|
||||
network_state->is_rootless);
|
||||
}
|
||||
break;
|
||||
{
|
||||
mesh_event_network_state_t *network_state = (mesh_event_network_state_t *)event_data;
|
||||
ESP_LOGI(MESH_TAG, "<MESH_EVENT_NETWORK_STATE>is_rootless:%d",
|
||||
network_state->is_rootless);
|
||||
}
|
||||
break;
|
||||
case MESH_EVENT_STOP_RECONNECTION:
|
||||
{
|
||||
ESP_LOGI(MESH_TAG, "<MESH_EVENT_STOP_RECONNECTION>");
|
||||
}
|
||||
break;
|
||||
{
|
||||
ESP_LOGI(MESH_TAG, "<MESH_EVENT_STOP_RECONNECTION>");
|
||||
}
|
||||
break;
|
||||
case MESH_EVENT_FIND_NETWORK:
|
||||
{
|
||||
mesh_event_find_network_t *find_network = (mesh_event_find_network_t *)event_data;
|
||||
ESP_LOGI(MESH_TAG, "<MESH_EVENT_FIND_NETWORK>new channel:%d, router BSSID:"MACSTR"",
|
||||
find_network->channel, MAC2STR(find_network->router_bssid));
|
||||
}
|
||||
break;
|
||||
{
|
||||
mesh_event_find_network_t *find_network = (mesh_event_find_network_t *)event_data;
|
||||
ESP_LOGI(MESH_TAG, "<MESH_EVENT_FIND_NETWORK>new channel:%d, router BSSID:"MACSTR"",
|
||||
find_network->channel, MAC2STR(find_network->router_bssid));
|
||||
}
|
||||
break;
|
||||
case MESH_EVENT_ROUTER_SWITCH:
|
||||
{
|
||||
mesh_event_router_switch_t *router_switch = (mesh_event_router_switch_t *)event_data;
|
||||
ESP_LOGI(MESH_TAG, "<MESH_EVENT_ROUTER_SWITCH>new router:%s, channel:%d, "MACSTR"",
|
||||
router_switch->ssid, router_switch->channel, MAC2STR(router_switch->bssid));
|
||||
}
|
||||
break;
|
||||
{
|
||||
mesh_event_router_switch_t *router_switch = (mesh_event_router_switch_t *)event_data;
|
||||
ESP_LOGI(MESH_TAG, "<MESH_EVENT_ROUTER_SWITCH>new router:%s, channel:%d, "MACSTR"",
|
||||
router_switch->ssid, router_switch->channel, MAC2STR(router_switch->bssid));
|
||||
}
|
||||
break;
|
||||
default:
|
||||
ESP_LOGI(MESH_TAG, "unknown id:%d", event_id);
|
||||
break;
|
||||
@ -307,6 +309,88 @@ void wifimeshnet_init(wifimeshnet_callback_t callback)
|
||||
cfg.mesh_ap.max_connection = CONFIG_MESH_AP_CONNECTIONS;
|
||||
memcpy((uint8_t *) &cfg.mesh_ap.password, CONFIG_MESH_AP_PASSWD,
|
||||
strlen(CONFIG_MESH_AP_PASSWD));
|
||||
|
||||
{//加载配置
|
||||
cJSON *obj=system_config_get_item("wifimeshnet");
|
||||
if(obj==NULL)
|
||||
{
|
||||
wifimeshnet_set_config(NULL);
|
||||
}
|
||||
else
|
||||
{
|
||||
if(cJSON_HasObjectItem(obj,"mesh_id"))
|
||||
{
|
||||
cJSON *item=cJSON_GetObjectItem(obj,"mesh_id");
|
||||
if(cJSON_IsArray(item))
|
||||
{
|
||||
for(size_t i=0;i<6;i++)
|
||||
{
|
||||
if(i<cJSON_GetArraySize(item))
|
||||
{
|
||||
if(cJSON_IsNumber(cJSON_GetArrayItem(item,i)))
|
||||
cfg.mesh_id.addr[i]=cJSON_GetNumberValue(cJSON_GetArrayItem(item,i));
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
if(cJSON_HasObjectItem(obj,"mesh_ap_password"))
|
||||
{
|
||||
cJSON *item=cJSON_GetObjectItem(obj,"mesh_ap_password");
|
||||
if(cJSON_IsString(item))
|
||||
{
|
||||
char * str=cJSON_GetStringValue(item);
|
||||
memcpy((uint8_t *) &cfg.mesh_ap.password, str,strlen(str));
|
||||
}
|
||||
}
|
||||
if(cJSON_HasObjectItem(obj,"mesh_ap_max_connections"))
|
||||
{
|
||||
cJSON *item=cJSON_GetObjectItem(obj,"mesh_ap_max_connections");
|
||||
if(cJSON_IsNumber(item))
|
||||
{
|
||||
cfg.mesh_ap.max_connection=cJSON_GetNumberValue(item);
|
||||
}
|
||||
}
|
||||
if(cJSON_HasObjectItem(obj,"mesh_channel"))
|
||||
{
|
||||
cJSON *item=cJSON_GetObjectItem(obj,"mesh_channel");
|
||||
if(cJSON_IsNumber(item))
|
||||
{
|
||||
cfg.channel=cJSON_GetNumberValue(item);
|
||||
}
|
||||
}
|
||||
if(cJSON_HasObjectItem(obj,"router_ssid"))
|
||||
{
|
||||
cJSON *item=cJSON_GetObjectItem(obj,"router_ssid");
|
||||
if(cJSON_IsString(item))
|
||||
{
|
||||
char * str=cJSON_GetStringValue(item);
|
||||
memcpy((uint8_t *) &cfg.router.ssid, str,strlen(str));
|
||||
}
|
||||
}
|
||||
if(cJSON_HasObjectItem(obj,"router_password"))
|
||||
{
|
||||
cJSON *item=cJSON_GetObjectItem(obj,"router_password");
|
||||
if(cJSON_IsString(item))
|
||||
{
|
||||
char * str=cJSON_GetStringValue(item);
|
||||
memcpy((uint8_t *) &cfg.router.password, str,strlen(str));
|
||||
}
|
||||
}
|
||||
if(cJSON_HasObjectItem(obj,"router_ssid_len"))
|
||||
{
|
||||
cJSON *item=cJSON_GetObjectItem(obj,"router_ssid_len");
|
||||
if(cJSON_IsNumber(item))
|
||||
{
|
||||
cfg.router.ssid_len=cJSON_GetNumberValue(item);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
cJSON_Delete(obj);
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
ESP_ERROR_CHECK(esp_mesh_set_config(&cfg));
|
||||
/* mesh start */
|
||||
ESP_ERROR_CHECK(esp_mesh_start());
|
||||
@ -316,4 +400,131 @@ void wifimeshnet_init(wifimeshnet_callback_t callback)
|
||||
|
||||
}
|
||||
|
||||
|
||||
void wifimeshnet_set_config(wifimeshnet_config_t *cfg)
|
||||
{
|
||||
wifimeshnet_config_t *config=cfg;
|
||||
if(cfg==NULL)
|
||||
{
|
||||
//默认配置
|
||||
config=(wifimeshnet_config_t *)malloc(sizeof(wifimeshnet_config_t));
|
||||
memset(config,0,sizeof(wifimeshnet_config_t));
|
||||
memcpy((uint8_t *) config->mesh_id, MESH_ID, 6);
|
||||
config->mesh_channel=CONFIG_MESH_CHANNEL;
|
||||
config->mesh_ap_max_connections=CONFIG_MESH_AP_CONNECTIONS;
|
||||
config->router_ssid_len=strlen(CONFIG_MESH_ROUTER_SSID);
|
||||
memcpy((uint8_t *) config->router_ssid, CONFIG_MESH_ROUTER_SSID,config->router_ssid_len);
|
||||
memcpy((uint8_t *) config->router_password, CONFIG_MESH_ROUTER_PASSWD,strlen(CONFIG_MESH_ROUTER_PASSWD));
|
||||
memcpy((uint8_t *) config->mesh_ap_password, CONFIG_MESH_AP_PASSWD,strlen(CONFIG_MESH_AP_PASSWD));
|
||||
|
||||
}
|
||||
|
||||
{//检查参数
|
||||
if(config->router_ssid_len==0)
|
||||
{
|
||||
config->router_ssid_len=strlen((char *)config->router_ssid);
|
||||
}
|
||||
|
||||
if(config->mesh_ap_max_connections==0)
|
||||
{
|
||||
config->mesh_ap_max_connections=10;
|
||||
}
|
||||
}
|
||||
|
||||
{
|
||||
cJSON *obj=system_config_get_item("wifimeshnet");
|
||||
if(obj==NULL)
|
||||
{
|
||||
obj=cJSON_CreateObject();
|
||||
}
|
||||
|
||||
{//删除原有数据项
|
||||
if(cJSON_HasObjectItem(obj,"mesh_id"))
|
||||
{
|
||||
cJSON_DeleteItemFromObject(obj,"mesh_id");
|
||||
}
|
||||
if(cJSON_HasObjectItem(obj,"mesh_ap_password"))
|
||||
{
|
||||
cJSON_DeleteItemFromObject(obj,"mesh_ap_password");
|
||||
}
|
||||
if(cJSON_HasObjectItem(obj,"mesh_ap_max_connections"))
|
||||
{
|
||||
cJSON_DeleteItemFromObject(obj,"mesh_ap_max_connections");
|
||||
}
|
||||
if(cJSON_HasObjectItem(obj,"mesh_channel"))
|
||||
{
|
||||
cJSON_DeleteItemFromObject(obj,"mesh_channel");
|
||||
}
|
||||
if(cJSON_HasObjectItem(obj,"router_ssid"))
|
||||
{
|
||||
cJSON_DeleteItemFromObject(obj,"router_ssid");
|
||||
}
|
||||
if(cJSON_HasObjectItem(obj,"router_password"))
|
||||
{
|
||||
cJSON_DeleteItemFromObject(obj,"router_password");
|
||||
}
|
||||
if(cJSON_HasObjectItem(obj,"router_ssid_len"))
|
||||
{
|
||||
cJSON_DeleteItemFromObject(obj,"router_ssid_len");
|
||||
}
|
||||
}
|
||||
|
||||
{//添加数据项
|
||||
|
||||
{//mesh_id
|
||||
|
||||
int mesh_id_int[6]={0};
|
||||
for(size_t i=0;i<6;i++)
|
||||
{
|
||||
mesh_id_int[i]=config->mesh_id[i];
|
||||
}
|
||||
|
||||
cJSON *mesh_id=cJSON_CreateIntArray(mesh_id_int,6);
|
||||
cJSON_AddItemToObject(obj,"mesh_id",mesh_id);
|
||||
}
|
||||
|
||||
{//mesh_ap_password
|
||||
cJSON *mesh_ap_password=cJSON_CreateString((char *)config->mesh_ap_password);
|
||||
cJSON_AddItemToObject(obj,"mesh_ap_password",mesh_ap_password);
|
||||
}
|
||||
{//mesh_ap_max_connections
|
||||
cJSON *mesh_ap_max_connections=cJSON_CreateNumber(config->mesh_ap_max_connections);
|
||||
cJSON_AddItemToObject(obj,"mesh_ap_max_connections",mesh_ap_max_connections);
|
||||
}
|
||||
{//mesh_channel
|
||||
cJSON *mesh_channel=cJSON_CreateNumber(config->mesh_channel);
|
||||
cJSON_AddItemToObject(obj,"mesh_channel",mesh_channel);
|
||||
}
|
||||
|
||||
{//router_ssid
|
||||
cJSON *router_ssid=cJSON_CreateString((char *)config->router_ssid);
|
||||
cJSON_AddItemToObject(obj,"router_ssid",router_ssid);
|
||||
}
|
||||
|
||||
{//router_password
|
||||
cJSON *router_password=cJSON_CreateString((char *)config->router_password);
|
||||
cJSON_AddItemToObject(obj,"router_password",router_password);
|
||||
}
|
||||
|
||||
{//router_ssid_len
|
||||
cJSON *router_ssid_len=cJSON_CreateNumber(config->router_ssid_len);
|
||||
cJSON_AddItemToObject(obj,"router_ssid_len",router_ssid_len);
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
|
||||
//保存数据
|
||||
system_config_put_item(obj,"wifimeshnet");
|
||||
system_config_save();
|
||||
|
||||
cJSON_Delete(obj);
|
||||
}
|
||||
|
||||
if(cfg==NULL)
|
||||
{
|
||||
free(config);
|
||||
}
|
||||
}
|
||||
|
||||
#endif // CONFIG_WIFI_MESH_NETWORK
|
||||
|
@ -36,6 +36,19 @@ typedef struct
|
||||
//初始化wifimeshnet
|
||||
void wifimeshnet_init(wifimeshnet_callback_t callback);
|
||||
|
||||
typedef struct
|
||||
{
|
||||
uint8_t mesh_id[6];
|
||||
uint8_t mesh_ap_password[64];
|
||||
size_t mesh_ap_max_connections;
|
||||
int mesh_channel;
|
||||
uint8_t router_ssid[32];
|
||||
size_t router_ssid_len;
|
||||
uint8_t router_password[64];
|
||||
} wifimeshnet_config_t;
|
||||
//设置配置参数
|
||||
void wifimeshnet_set_config(wifimeshnet_config_t *cfg);
|
||||
|
||||
#ifdef __cplusplus
|
||||
}
|
||||
#endif // __cplusplus
|
||||
|
Loading…
x
Reference in New Issue
Block a user