т.е. что это за переменные wifi_rdcfg и wifi_newcfg ? и что за значения...
Существует некая структура, через которою обслуживаются все установки WiFi. Она же и сохраняется. Для управления конфигом WiFi есть всего 4-ре процедуры:
1) Считать состояние WiFi в данную структуру
2) Записать состояние из структуры в WiFi
3) Сравнить структуру и состояние WiFi
4) Установить значения в структуре в default
Каждая из этих процедур управляется только флагами/маской:
Код:
#define WIFI_MASK_ALL 0x00003FFF // 0x00003FFF
#define WIFI_MASK_MODE 0x00000001
#define WIFI_MASK_PHY 0x00000002
#define WIFI_MASK_CHL 0x00000004
#define WIFI_MASK_SLEEP 0x00000008
#define WIFI_MASK_APIP 0x00000010
#define WIFI_MASK_APCFG 0x00000020
#define WIFI_MASK_APDHCP 0x00000040
#define WIFI_MASK_APIPDHCP 0x00000080
#define WIFI_MASK_APMAC 0x00000100
#define WIFI_MASK_STIP 0x00000200
#define WIFI_MASK_STCFG 0x00000400
#define WIFI_MASK_STDHCP 0x00000800
#define WIFI_MASK_STACN 0x00001000
#define WIFI_MASK_STMAC 0x00002000
#define WIFI_MASK_SAVE 0x00010000
#define WIFI_MASK_REBOOT 0x00020000
struct bits_wifi_chg { // структура передачи изменений или ошибок
unsigned mode : 1; //0 0x00000001
unsigned phy : 1; //1 0x00000002
unsigned chl : 1; //2 0x00000004
unsigned sleep : 1; //3 0x00000008
unsigned ap_ipinfo : 1; //4 0x00000010
unsigned ap_config : 1; //5 0x00000020
unsigned ap_dhcp : 1; //6 0x00000040
unsigned ap_ipdhcp : 1; //7 0x00000080
unsigned ap_macaddr : 1; //8 0x00000100
unsigned st_ipinfo : 1; //9 0x00000200
unsigned st_config : 1; //10 0x00000400
unsigned st_dhcp : 1; //11 0x00000800
unsigned st_autocon : 1; //12 0x00001000
unsigned st_macaddr : 1; //13 0x00002000
unsigned st_connect : 1; //14 0x00004000
unsigned none : 1; //15 0x00008000
unsigned save_cfg : 1; //16 0x00010000
unsigned reboot : 1; //17 0x00020000
} __attribute__((packed));
Например сравнение структуры с реальной WiFi сравнивает что указано в маске и выставляет биты в выходной маске что разнится.
Эту выходную маску направляем на установку WiFi из структуры, что устанавливать. Она отвечает маской ошибок установки по тем же битам.
Что обновить, считать в структуру из WiFi тоже задается битовой маской.... Дефаултовые поля - аналогично.
Непосредственно разные разрозненные процедуры установок WiFi из SDK "свалка" таким образом не использует. Это всё ещё необходимо для определения порядка последовательности установок WiFi, что требуется включить или выключить перед применением каждого блока из структуры...
Значения из Web передаются только в структуру, а потом, когда дана команда wifi_newcfg, когда закроется соединение (после передачи HTML страницы) то произойдет их применение к аппаратуре WiFi... Это не всё, а коротко - условий много. Основная причина такого - сложность установок WiFi в SDK от Espressif.
Смотрите Web_Base4\app\web\wifi.c - там всё и увидите
Можно и нужно это переработать-доработать, т.к. делалось давно для старых SDK и не всё было четко и известно... Так-же не известны были оптимальные алго установок WiFi с Web, а счас это уже более менее устоялось...
HTML:
<input type='hidden' name='wifi_rdcfg' value='0x1C00'></td>
- Считать что счас у WiFi в st_config, st_dhcp, и st_autocon (на всякий случай, т.к. потом будем менять и вдруг кто не долетит
....)
HTML:
<input type='hidden' name='wifi_newcfg' value='0x11C00'>
- Установить в WiFi st_config, st_dhcp, и st_autocon + записать конфиг в flash, если он отличается от прошлой записи там.