diff --git a/WiFiManager.cpp b/WiFiManager.cpp index d6c93f2..7df48f6 100644 --- a/WiFiManager.cpp +++ b/WiFiManager.cpp @@ -152,7 +152,9 @@ WiFiManager::WiFiManager():WiFiManager(Serial) { } void WiFiManager::WiFiManagerInit(){ + setMenu(_menuIdsDefault); if(_debug && _debugLevel > DEBUG_DEV) debugPlatformInfo(); + _usermode = WiFi.getMode(); WiFi.persistent(false); // disable persistent so scannetworks and mode switching do not cause overwrites @@ -820,10 +822,8 @@ void WiFiManager::handleParam(){ String WiFiManager::getMenuOut(){ String page; - for(menu_page_t& v :_menuIds_v ){ - // DEBUG_WM("menuid:",(String)v); - // if(v == MENU_END) break; // MENU_END - if((v == MENU_PARAM) && (_paramsCount == 0)) continue; // no params set, omit params + for(auto& v :_menuIds ){ + if(((String)v == "param") && (_paramsCount == 0)) continue; // no params set, omit params page += HTTP_PORTAL_MENU[v]; } @@ -1913,22 +1913,33 @@ void WiFiManager::setShowInfoErase(boolean enabled){ * @since $dev * @param uint8_t menu[] array of menu ids */ -void WiFiManager::setMenu(menu_page_t menu[], uint8_t size){ - int i; - size_t n = size; - for(i=0;i= n) _menuIds[i] = MENU_END; - else _menuIds[i] = menu[i]; +void WiFiManager::setMenu(const char * menu[], uint8_t size){ + _menuIds.clear(); + for(size_t i = 0; i < size; i++){ + for(size_t j = 0; j < _menuids_cnt; j++){ + if(menu[i] == _menutokens[j]){ + if((String)menu[i] == "param") _paramsInWifi = false; // param auto flag + _menuIds.push_back(j); + } + } } - - // @todo copy into vector if we keep this.. + // DEBUG_WM(getMenuOut()); } -void WiFiManager::setMenu(std::vector& menu){ - _menuIds_v = menu; +void WiFiManager::setMenu(std::vector& menu){ + _menuIds.clear(); + for(auto v : menu ){ + for(size_t j = 0; j<_menuids_cnt; j++){ + if(v == _menutokens[j]){ + if((String)v == "param") _paramsInWifi = false; // param auto flag + _menuIds.push_back(j); + } + } + } + // DEBUG_WM(getMenuOut()); } + // GETTERS /** @@ -1988,12 +1999,12 @@ void WiFiManager::DEBUG_WM(wm_debuglevel_t level,Generic text,Genericb textb) { if(_debugLevel < level) return; if (_debug) { - if(_debugLevel > 3){ + if(_debugLevel >= DEBUG_MAX){ _debugPort.print("MEM: "); _debugPort.println((String)ESP.getFreeHeap()); } _debugPort.print("*WM: "); - // _debugPort.print("["+(String)level+"] "); + if(_debugLevel == DEBUG_DEV) _debugPort.print("["+(String)level+"] "); _debugPort.print(text); if(textb){ _debugPort.print(" "); diff --git a/WiFiManager.h b/WiFiManager.h index b9636d6..b1b2abf 100644 --- a/WiFiManager.h +++ b/WiFiManager.h @@ -128,19 +128,6 @@ class WiFiManager ~WiFiManager(); void WiFiManagerInit(); - typedef enum { - MENU_WIFI = 0, - MENU_WIFINOSCAN = 1, - MENU_INFO = 2, - MENU_PARAM = 3, - MENU_CLOSE = 4, - MENU_RESTART = 5, - MENU_EXIT = 6, - MENU_ERASE = 7, - MENU_SEP = 8, - MENU_END = 255 - } menu_page_t; - // auto connect to saved wifi, or custom, and start config portal on failures boolean autoConnect(); boolean autoConnect(char const *apName, char const *apPassword = NULL); @@ -223,8 +210,9 @@ class WiFiManager void setShowInfoErase(boolean enabled); // set custom menu - void setMenu(std::vector& menu); - void setMenu(menu_page_t menu[], uint8_t size); + // void setMenu(std::vector& menu); + void setMenu(std::vector& menu); + void setMenu(const char* menu[], uint8_t size); // get last connection result, includes autoconnect and wifisave uint8_t getLastConxResult(); @@ -247,16 +235,21 @@ class WiFiManager #endif std::unique_ptr server; - typedef enum { - DEBUG_ERROR = 0, - DEBUG_NOTIFY = 1, // default - DEBUG_VERBOSE = 2, - DEBUG_DEV = 3, - DEBUG_MAX = 4 - } wm_debuglevel_t; + int _menuids_cnt = 9; + const char * const _menutokens[9] PROGMEM = { + "wifi", + "wifinoscan", + "info", + "param", + "close", + "restart", + "exit", + "erase", + "sep" + }; - menu_page_t _menuIds[10] = {MENU_WIFI,MENU_INFO,MENU_EXIT,MENU_END}; - std::vector _menuIds_v = {MENU_WIFI,MENU_INFO,MENU_EXIT}; + std::vector _menuIds; + std::vector _menuIdsDefault = {"wifi","info","exit"}; // ip configs @todo struct ? IPAddress _ap_static_ip; @@ -402,8 +395,16 @@ class WiFiManager WiFiManagerParameter** _params = NULL; // debugging + typedef enum { + DEBUG_ERROR = 0, + DEBUG_NOTIFY = 1, // default + DEBUG_VERBOSE = 2, + DEBUG_DEV = 3, + DEBUG_MAX = 4 + } wm_debuglevel_t; + boolean _debug = true; - uint8_t _debugLevel = DEBUG_NOTIFY; + uint8_t _debugLevel = DEBUG_DEV; Stream& _debugPort; // debug output stream ref template