Cli: reset, wifi_ap_clients, config_get\set, nvs_dump
This commit is contained in:
parent
0ca098b103
commit
35df50691c
|
@ -2,6 +2,7 @@ set(SOURCES
|
||||||
"main.c"
|
"main.c"
|
||||||
"usb-cdc.c"
|
"usb-cdc.c"
|
||||||
"nvs.c"
|
"nvs.c"
|
||||||
|
"nvs-config.c"
|
||||||
"led.c"
|
"led.c"
|
||||||
"cli-uart.c"
|
"cli-uart.c"
|
||||||
"i2c.c"
|
"i2c.c"
|
||||||
|
@ -15,6 +16,7 @@ set(SOURCES
|
||||||
"cli-commands.c"
|
"cli-commands.c"
|
||||||
"cli-commands-gpio.c"
|
"cli-commands-gpio.c"
|
||||||
"cli-commands-wifi.c"
|
"cli-commands-wifi.c"
|
||||||
|
"cli-commands-config.c"
|
||||||
"cli-commands-device-info.c"
|
"cli-commands-device-info.c"
|
||||||
"cli-args.c"
|
"cli-args.c"
|
||||||
)
|
)
|
||||||
|
|
|
@ -0,0 +1,214 @@
|
||||||
|
#include "cli.h"
|
||||||
|
#include "cli-args.h"
|
||||||
|
#include "cli-commands.h"
|
||||||
|
#include "helpers.h"
|
||||||
|
#include "nvs-config.h"
|
||||||
|
#include <nvs_flash.h>
|
||||||
|
#include <string.h>
|
||||||
|
|
||||||
|
void cli_config_get(Cli* cli, mstring_t* args) {
|
||||||
|
mstring_t* value = mstring_alloc();
|
||||||
|
WiFiMode wifi_mode;
|
||||||
|
|
||||||
|
nvs_config_get_ap_ssid(value);
|
||||||
|
cli_printf(cli, "ap_ssid: %s", mstring_get_cstr(value));
|
||||||
|
cli_write_eol(cli);
|
||||||
|
|
||||||
|
nvs_config_get_ap_pass(value);
|
||||||
|
cli_printf(cli, "ap_pass: %s", mstring_get_cstr(value));
|
||||||
|
cli_write_eol(cli);
|
||||||
|
|
||||||
|
nvs_config_get_sta_ssid(value);
|
||||||
|
cli_printf(cli, "sta_ssid: %s", mstring_get_cstr(value));
|
||||||
|
cli_write_eol(cli);
|
||||||
|
|
||||||
|
nvs_config_get_sta_pass(value);
|
||||||
|
cli_printf(cli, "sta_pass: %s", mstring_get_cstr(value));
|
||||||
|
cli_write_eol(cli);
|
||||||
|
|
||||||
|
nvs_config_get_wifi_mode(&wifi_mode);
|
||||||
|
switch(wifi_mode) {
|
||||||
|
case WiFiModeAP:
|
||||||
|
mstring_set(value, "AP");
|
||||||
|
break;
|
||||||
|
case WiFiModeSTA:
|
||||||
|
mstring_set(value, "STA");
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
|
cli_printf(cli, "wifi_mode: %s", mstring_get_cstr(value));
|
||||||
|
cli_write_eol(cli);
|
||||||
|
|
||||||
|
mstring_free(value);
|
||||||
|
}
|
||||||
|
|
||||||
|
void cli_config_set_wifi_mode_usage(Cli* cli) {
|
||||||
|
cli_write_str(cli, "config_set_wifi_mode <AP|STA>");
|
||||||
|
}
|
||||||
|
|
||||||
|
void cli_config_set_wifi_mode(Cli* cli, mstring_t* args) {
|
||||||
|
mstring_t* mode = mstring_alloc();
|
||||||
|
WiFiMode wifi_mode;
|
||||||
|
|
||||||
|
do {
|
||||||
|
if(!cli_args_read_string_and_trim(args, mode)) {
|
||||||
|
cli_config_set_wifi_mode_usage(cli);
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
|
if(mstring_cmp_cstr(mode, "AP") == 0) {
|
||||||
|
wifi_mode = WiFiModeAP;
|
||||||
|
} else if(mstring_cmp_cstr(mode, "STA") == 0) {
|
||||||
|
wifi_mode = WiFiModeSTA;
|
||||||
|
} else {
|
||||||
|
cli_config_set_wifi_mode_usage(cli);
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
|
if(nvs_config_set_wifi_mode(wifi_mode) == ESP_OK) {
|
||||||
|
cli_write_str(cli, "OK");
|
||||||
|
} else {
|
||||||
|
cli_write_str(cli, "ERR");
|
||||||
|
}
|
||||||
|
} while(false);
|
||||||
|
|
||||||
|
mstring_free(mode);
|
||||||
|
}
|
||||||
|
|
||||||
|
void cli_config_set_ap_pass(Cli* cli, mstring_t* args) {
|
||||||
|
mstring_t* pass = mstring_alloc();
|
||||||
|
|
||||||
|
do {
|
||||||
|
if(!cli_args_read_quoted_string_and_trim(args, pass)) {
|
||||||
|
cli_write_str(cli, "config_set_ap_pass \"<pass>\", min 8 symbols or empty quotes");
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
|
if(nvs_config_set_ap_pass(pass) == ESP_OK) {
|
||||||
|
cli_write_str(cli, "OK");
|
||||||
|
} else {
|
||||||
|
cli_write_str(cli, "config_set_ap_pass \"<pass>\", min 8 symbols or empty quotes");
|
||||||
|
}
|
||||||
|
} while(false);
|
||||||
|
|
||||||
|
mstring_free(pass);
|
||||||
|
}
|
||||||
|
|
||||||
|
void cli_config_set_ap_ssid(Cli* cli, mstring_t* args) {
|
||||||
|
mstring_t* ssid = mstring_alloc();
|
||||||
|
|
||||||
|
do {
|
||||||
|
if(!cli_args_read_quoted_string_and_trim(args, ssid)) {
|
||||||
|
cli_write_str(cli, "config_set_ap_ssid \"<ssid>\", 1-32 symbols");
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
|
if(nvs_config_set_ap_ssid(ssid) == ESP_OK) {
|
||||||
|
cli_write_str(cli, "OK");
|
||||||
|
} else {
|
||||||
|
cli_write_str(cli, "config_set_ap_ssid \"<ssid>\", 1-32 symbols");
|
||||||
|
}
|
||||||
|
} while(false);
|
||||||
|
|
||||||
|
mstring_free(ssid);
|
||||||
|
}
|
||||||
|
|
||||||
|
void cli_config_set_sta_pass(Cli* cli, mstring_t* args) {
|
||||||
|
mstring_t* pass = mstring_alloc();
|
||||||
|
|
||||||
|
do {
|
||||||
|
if(!cli_args_read_quoted_string_and_trim(args, pass)) {
|
||||||
|
cli_write_str(cli, "config_set_sta_pass \"<pass>\", min 8 symbols or empty quotes");
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
|
if(nvs_config_set_sta_pass(pass) == ESP_OK) {
|
||||||
|
cli_write_str(cli, "OK");
|
||||||
|
} else {
|
||||||
|
cli_write_str(cli, "config_set_sta_pass \"<pass>\", min 8 symbols or empty quotes");
|
||||||
|
}
|
||||||
|
} while(false);
|
||||||
|
|
||||||
|
mstring_free(pass);
|
||||||
|
}
|
||||||
|
|
||||||
|
void cli_config_set_sta_ssid(Cli* cli, mstring_t* args) {
|
||||||
|
mstring_t* ssid = mstring_alloc();
|
||||||
|
|
||||||
|
do {
|
||||||
|
if(!cli_args_read_quoted_string_and_trim(args, ssid)) {
|
||||||
|
cli_write_str(cli, "config_set_sta_ssid \"<ssid>\", 1-32 symbols");
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
|
if(nvs_config_set_sta_ssid(ssid) == ESP_OK) {
|
||||||
|
cli_write_str(cli, "OK");
|
||||||
|
} else {
|
||||||
|
cli_write_str(cli, "config_set_sta_ssid \"<ssid>\", 1-32 symbols");
|
||||||
|
}
|
||||||
|
} while(false);
|
||||||
|
|
||||||
|
mstring_free(ssid);
|
||||||
|
}
|
||||||
|
|
||||||
|
const char* nvs_type_to_str(nvs_type_t type) {
|
||||||
|
switch(type) {
|
||||||
|
case NVS_TYPE_U8:
|
||||||
|
return "U8";
|
||||||
|
case NVS_TYPE_I8:
|
||||||
|
return "I8";
|
||||||
|
case NVS_TYPE_U16:
|
||||||
|
return "U16";
|
||||||
|
case NVS_TYPE_I16:
|
||||||
|
return "I16";
|
||||||
|
case NVS_TYPE_U32:
|
||||||
|
return "U32";
|
||||||
|
case NVS_TYPE_I32:
|
||||||
|
return "I32";
|
||||||
|
case NVS_TYPE_U64:
|
||||||
|
return "U64";
|
||||||
|
case NVS_TYPE_I64:
|
||||||
|
return "I64";
|
||||||
|
case NVS_TYPE_STR:
|
||||||
|
return "STR";
|
||||||
|
case NVS_TYPE_BLOB:
|
||||||
|
return "BLOB";
|
||||||
|
case NVS_TYPE_ANY:
|
||||||
|
return "ANY";
|
||||||
|
default:
|
||||||
|
return "UNK";
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
void cli_nvs_dump(Cli* cli, mstring_t* args) {
|
||||||
|
const char* partitions[] = {
|
||||||
|
"nvs",
|
||||||
|
"nvs_storage",
|
||||||
|
};
|
||||||
|
|
||||||
|
for(size_t i = 0; i < COUNT_OF(partitions); i++) {
|
||||||
|
cli_write_str(cli, partitions[i]);
|
||||||
|
cli_write_str(cli, ":");
|
||||||
|
cli_write_eol(cli);
|
||||||
|
|
||||||
|
do {
|
||||||
|
nvs_iterator_t it = nvs_entry_find(partitions[i], NULL, NVS_TYPE_ANY);
|
||||||
|
while(it != NULL) {
|
||||||
|
nvs_entry_info_t info;
|
||||||
|
nvs_entry_info(it, &info);
|
||||||
|
it = nvs_entry_next(it);
|
||||||
|
|
||||||
|
if(strlen(info.namespace_name)) {
|
||||||
|
cli_printf(cli, " \"%s:%s\"", info.namespace_name, info.key);
|
||||||
|
} else {
|
||||||
|
cli_printf(cli, " \"%s\"", info.key);
|
||||||
|
}
|
||||||
|
cli_printf(cli, " %s", nvs_type_to_str(info.type));
|
||||||
|
cli_write_eol(cli);
|
||||||
|
};
|
||||||
|
|
||||||
|
} while(false);
|
||||||
|
}
|
||||||
|
|
||||||
|
cli_write_str(cli, "OK");
|
||||||
|
}
|
|
@ -96,4 +96,38 @@ void cli_wifi_scan(Cli* cli, mstring_t* args) {
|
||||||
|
|
||||||
cli_write_str(cli, "OK");
|
cli_write_str(cli, "OK");
|
||||||
free(ap_info);
|
free(ap_info);
|
||||||
|
}
|
||||||
|
|
||||||
|
void cli_wifi_ap_clients(Cli* cli, mstring_t* args) {
|
||||||
|
wifi_sta_list_t* wifi_sta_list = malloc(sizeof(wifi_sta_list_t));
|
||||||
|
esp_err_t err = esp_wifi_ap_get_sta_list(wifi_sta_list);
|
||||||
|
|
||||||
|
if(err == ESP_OK) {
|
||||||
|
for(size_t i = 0; i < wifi_sta_list->num; i++) {
|
||||||
|
cli_printf(
|
||||||
|
cli,
|
||||||
|
"%02x:%02x:%02x:%02x:%02x:%02x ",
|
||||||
|
wifi_sta_list->sta[i].mac[0],
|
||||||
|
wifi_sta_list->sta[i].mac[1],
|
||||||
|
wifi_sta_list->sta[i].mac[2],
|
||||||
|
wifi_sta_list->sta[i].mac[3],
|
||||||
|
wifi_sta_list->sta[i].mac[4],
|
||||||
|
wifi_sta_list->sta[i].mac[5]);
|
||||||
|
cli_printf(cli, "%idBm ", wifi_sta_list->sta[i].rssi);
|
||||||
|
|
||||||
|
if(wifi_sta_list->sta[i].phy_11b) cli_write_str(cli, "b");
|
||||||
|
if(wifi_sta_list->sta[i].phy_11g) cli_write_str(cli, "g");
|
||||||
|
if(wifi_sta_list->sta[i].phy_11n) cli_write_str(cli, "n");
|
||||||
|
if(wifi_sta_list->sta[i].phy_lr) cli_write_str(cli, "lr");
|
||||||
|
if(wifi_sta_list->sta[i].is_mesh_child) cli_write_str(cli, "m");
|
||||||
|
|
||||||
|
cli_write_eol(cli);
|
||||||
|
}
|
||||||
|
|
||||||
|
cli_write_str(cli, "OK");
|
||||||
|
} else {
|
||||||
|
cli_write_str(cli, "FAIL");
|
||||||
|
}
|
||||||
|
|
||||||
|
free(wifi_sta_list);
|
||||||
}
|
}
|
|
@ -1,5 +1,6 @@
|
||||||
#include <stdlib.h>
|
#include <stdlib.h>
|
||||||
#include <stdint.h>
|
#include <stdint.h>
|
||||||
|
#include <esp_system.h>
|
||||||
#include "cli.h"
|
#include "cli.h"
|
||||||
#include "led.h"
|
#include "led.h"
|
||||||
#include "nvs.h"
|
#include "nvs.h"
|
||||||
|
@ -7,14 +8,25 @@
|
||||||
#include "cli-args.h"
|
#include "cli-args.h"
|
||||||
#include "cli-commands.h"
|
#include "cli-commands.h"
|
||||||
|
|
||||||
|
void cli_device_info(Cli* cli, mstring_t* args);
|
||||||
|
void cli_factory_reset(Cli* cli, mstring_t* args);
|
||||||
|
void cli_gpio_get(Cli* cli, mstring_t* args);
|
||||||
|
void cli_gpio_set(Cli* cli, mstring_t* args);
|
||||||
void cli_led(Cli* cli, mstring_t* args);
|
void cli_led(Cli* cli, mstring_t* args);
|
||||||
void cli_help(Cli* cli, mstring_t* args);
|
void cli_help(Cli* cli, mstring_t* args);
|
||||||
void cli_ping(Cli* cli, mstring_t* args);
|
void cli_ping(Cli* cli, mstring_t* args);
|
||||||
void cli_gpio_set(Cli* cli, mstring_t* args);
|
void cli_sw_reset(Cli* cli, mstring_t* args);
|
||||||
void cli_gpio_get(Cli* cli, mstring_t* args);
|
|
||||||
void cli_device_info(Cli* cli, mstring_t* args);
|
|
||||||
void cli_factory_reset(Cli* cli, mstring_t* args);
|
|
||||||
void cli_wifi_scan(Cli* cli, mstring_t* args);
|
void cli_wifi_scan(Cli* cli, mstring_t* args);
|
||||||
|
void cli_wifi_ap_clients(Cli* cli, mstring_t* args);
|
||||||
|
|
||||||
|
void cli_config_get(Cli* cli, mstring_t* args);
|
||||||
|
void cli_config_set_wifi_mode(Cli* cli, mstring_t* args);
|
||||||
|
void cli_config_set_ap_pass(Cli* cli, mstring_t* args);
|
||||||
|
void cli_config_set_ap_ssid(Cli* cli, mstring_t* args);
|
||||||
|
void cli_config_set_sta_pass(Cli* cli, mstring_t* args);
|
||||||
|
void cli_config_set_sta_ssid(Cli* cli, mstring_t* args);
|
||||||
|
|
||||||
|
void cli_nvs_dump(Cli* cli, mstring_t* args);
|
||||||
|
|
||||||
const CliItem cli_items[] = {
|
const CliItem cli_items[] = {
|
||||||
{
|
{
|
||||||
|
@ -26,28 +38,28 @@ const CliItem cli_items[] = {
|
||||||
.callback = cli_help,
|
.callback = cli_help,
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
.name = "led",
|
.name = "config_get",
|
||||||
.callback = cli_led,
|
.callback = cli_config_get,
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
.name = "help",
|
.name = "config_set_wifi_mode",
|
||||||
.callback = cli_help,
|
.callback = cli_config_set_wifi_mode,
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
.name = "ping",
|
.name = "config_set_ap_pass",
|
||||||
.callback = cli_ping,
|
.callback = cli_config_set_ap_pass,
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
.name = "gpio_set",
|
.name = "config_set_ap_ssid",
|
||||||
.callback = cli_gpio_set,
|
.callback = cli_config_set_ap_ssid,
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
.name = "gpio_get",
|
.name = "config_set_sta_pass",
|
||||||
.callback = cli_gpio_get,
|
.callback = cli_config_set_sta_pass,
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
.name = "wifi_scan",
|
.name = "config_set_sta_ssid",
|
||||||
.callback = cli_wifi_scan,
|
.callback = cli_config_set_sta_ssid,
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
.name = "device_info",
|
.name = "device_info",
|
||||||
|
@ -57,6 +69,42 @@ const CliItem cli_items[] = {
|
||||||
.name = "factory_reset",
|
.name = "factory_reset",
|
||||||
.callback = cli_factory_reset,
|
.callback = cli_factory_reset,
|
||||||
},
|
},
|
||||||
|
{
|
||||||
|
.name = "gpio_get",
|
||||||
|
.callback = cli_gpio_get,
|
||||||
|
},
|
||||||
|
{
|
||||||
|
.name = "gpio_set",
|
||||||
|
.callback = cli_gpio_set,
|
||||||
|
},
|
||||||
|
{
|
||||||
|
.name = "help",
|
||||||
|
.callback = cli_help,
|
||||||
|
},
|
||||||
|
{
|
||||||
|
.name = "led",
|
||||||
|
.callback = cli_led,
|
||||||
|
},
|
||||||
|
{
|
||||||
|
.name = "nvs_dump",
|
||||||
|
.callback = cli_nvs_dump,
|
||||||
|
},
|
||||||
|
{
|
||||||
|
.name = "ping",
|
||||||
|
.callback = cli_ping,
|
||||||
|
},
|
||||||
|
{
|
||||||
|
.name = "reset",
|
||||||
|
.callback = cli_sw_reset,
|
||||||
|
},
|
||||||
|
{
|
||||||
|
.name = "wifi_ap_clients",
|
||||||
|
.callback = cli_wifi_ap_clients,
|
||||||
|
},
|
||||||
|
{
|
||||||
|
.name = "wifi_scan",
|
||||||
|
.callback = cli_wifi_scan,
|
||||||
|
},
|
||||||
};
|
};
|
||||||
|
|
||||||
size_t cli_items_count = COUNT_OF(cli_items);
|
size_t cli_items_count = COUNT_OF(cli_items);
|
||||||
|
@ -71,9 +119,18 @@ void cli_help(Cli* cli, mstring_t* args) {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void cli_sw_reset(Cli* cli, mstring_t* args) {
|
||||||
|
cli_write_str(cli, "SW RESET");
|
||||||
|
cli_write_eol(cli);
|
||||||
|
cli_flush(cli);
|
||||||
|
esp_restart();
|
||||||
|
cli_write_str(cli, "OK");
|
||||||
|
}
|
||||||
|
|
||||||
void cli_factory_reset(Cli* cli, mstring_t* args) {
|
void cli_factory_reset(Cli* cli, mstring_t* args) {
|
||||||
cli_write_str(cli, "Erasing NVS");
|
cli_write_str(cli, "Erasing NVS");
|
||||||
cli_write_eol(cli);
|
cli_write_eol(cli);
|
||||||
|
cli_flush(cli);
|
||||||
nvs_erase();
|
nvs_erase();
|
||||||
cli_write_str(cli, "OK");
|
cli_write_str(cli, "OK");
|
||||||
}
|
}
|
||||||
|
@ -85,6 +142,7 @@ void cli_ping(Cli* cli, mstring_t* args) {
|
||||||
void cli_led_print_usage(Cli* cli) {
|
void cli_led_print_usage(Cli* cli) {
|
||||||
cli_write_str(cli, "Usage: led <red> <green> <blue>");
|
cli_write_str(cli, "Usage: led <red> <green> <blue>");
|
||||||
}
|
}
|
||||||
|
|
||||||
void cli_led(Cli* cli, mstring_t* args) {
|
void cli_led(Cli* cli, mstring_t* args) {
|
||||||
int red;
|
int red;
|
||||||
int green;
|
int green;
|
||||||
|
|
Loading…
Reference in New Issue