From 296fb85b80b8d2da3652349e3659afdf4bedb15e Mon Sep 17 00:00:00 2001 From: Stefan Kremser Date: Thu, 5 Apr 2018 15:32:20 +0200 Subject: [PATCH] No more static stuff Moved the print functions to the function.h and included them in language using extern so not every class has to "extern" them again. Also fixed some type comparisons and made removed the static from the progmem variables. C code is super messy! But I'm not going to rewrite it again so deal with it :D --- esp8266_deauther/Names.cpp | 2 +- esp8266_deauther/SSIDs.cpp | 2 +- esp8266_deauther/Scan.cpp | 4 +- esp8266_deauther/SerialInterface.cpp | 6 +- esp8266_deauther/functions.h | 113 ++- esp8266_deauther/language.h | 1086 ++++++++++++-------------- 6 files changed, 615 insertions(+), 598 deletions(-) diff --git a/esp8266_deauther/Names.cpp b/esp8266_deauther/Names.cpp index b71167e..ebaf2d8 100644 --- a/esp8266_deauther/Names.cpp +++ b/esp8266_deauther/Names.cpp @@ -12,7 +12,7 @@ void Names::load() { checkFile(FILE_PATH, String(OPEN_BRACKET) + String(CLOSE_BRACKET)); JsonArray &arr = parseJSONFile(FILE_PATH, jsonBuffer); - for (int i = 0; i < arr.size() && i < NAME_LIST_SIZE; i++) { + for (uint32_t i = 0; i < arr.size() && i < NAME_LIST_SIZE; i++) { JsonArray &tmpArray = arr.get(i); internal_add(tmpArray.get(0), tmpArray.get(2), tmpArray.get(3), tmpArray.get(4), false); sort(); diff --git a/esp8266_deauther/SSIDs.cpp b/esp8266_deauther/SSIDs.cpp index c05ac38..538f976 100644 --- a/esp8266_deauther/SSIDs.cpp +++ b/esp8266_deauther/SSIDs.cpp @@ -12,7 +12,7 @@ void SSIDs::load() { JsonObject &obj = parseJSONFile(FILE_PATH, jsonBuffer); JsonArray &arr = obj.get(str(SS_JSON_SSIDS)); - for (int i = 0; i < arr.size() && i < SSID_LIST_SIZE; i++) { + for (uint32_t i = 0; i < arr.size() && i < SSID_LIST_SIZE; i++) { JsonArray &tmpArray = arr.get(i); internal_add(tmpArray.get(0), tmpArray.get(1), tmpArray.get(2)); } diff --git a/esp8266_deauther/Scan.cpp b/esp8266_deauther/Scan.cpp index fa58833..5614c6e 100644 --- a/esp8266_deauther/Scan.cpp +++ b/esp8266_deauther/Scan.cpp @@ -261,7 +261,7 @@ void Scan::save(bool force) { buf = String(); // clear buffer uint32_t apCount = accesspoints.count(); - for (int i = 0; i < apCount; i++) { + for (uint32_t i = 0; i < apCount; i++) { buf += String(OPEN_BRACKET) + String(DOUBLEQUOTES) + escape(accesspoints.getSSID(i)) + String(DOUBLEQUOTES) + String(COMMA); // ["ssid", buf += String(DOUBLEQUOTES) + escape(accesspoints.getNameStr(i)) + String(DOUBLEQUOTES) + String(COMMA); // "name", buf += String(accesspoints.getCh(i)) + String(COMMA); // 1, @@ -287,7 +287,7 @@ void Scan::save(bool force) { buf += String(CLOSE_BRACKET) + String(COMMA) + String(DOUBLEQUOTES) + str(SC_JSON_STATIONS) + String(DOUBLEQUOTES) + String(DOUBLEPOINT) + String(OPEN_BRACKET); // ],"stations":[; uint32_t stationCount = stations.count(); - for (int i = 0; i < stationCount; i++) { + for (uint32_t i = 0; i < stationCount; i++) { buf += String(OPEN_BRACKET) + String(DOUBLEQUOTES) + stations.getMacStr(i) + String(DOUBLEQUOTES) + String(COMMA); // ["00:11:22:00:11:22", buf += String(stations.getCh(i)) + String(COMMA); // 1, buf += String(DOUBLEQUOTES) + stations.getNameStr(i) + String(DOUBLEQUOTES) + String(COMMA); // "name", diff --git a/esp8266_deauther/SerialInterface.cpp b/esp8266_deauther/SerialInterface.cpp index dbb36a5..0f41290 100644 --- a/esp8266_deauther/SerialInterface.cpp +++ b/esp8266_deauther/SerialInterface.cpp @@ -49,7 +49,7 @@ void SerialInterface::parameterError(String parameter) { bool SerialInterface::isInt(String str) { if (eqls(str,STR_TRUE) || eqls(str,STR_FALSE)) return true; - for (int i = 0; i < str.length(); i++) + for (uint32_t i = 0; i < str.length(); i++) if (!isDigit(str.charAt(i))) return false; return true; } @@ -130,7 +130,7 @@ void SerialInterface::update() { void SerialInterface::runCommands(String input) { String tmp; - for (int i = 0; i < input.length(); i++) { + for (uint32_t i = 0; i < input.length(); i++) { // when 2 semicolons in a row without a backslash escaping the first if (input.charAt(i) == SEMICOLON && input.charAt(i + 1) == SEMICOLON && input.charAt(i - 1) != BACKSLASH) { runCommand(tmp); @@ -156,7 +156,7 @@ void SerialInterface::runCommand(String input) { bool withinQuotes = false; bool escaped = false; char c; - for (int i = 0; i < input.length() && i < 512; i++) { + for (uint32_t i = 0; i < input.length() && i < 512; i++) { c = input.charAt(i); // when char is an unescaped diff --git a/esp8266_deauther/functions.h b/esp8266_deauther/functions.h index 941c94e..3ba370f 100644 --- a/esp8266_deauther/functions.h +++ b/esp8266_deauther/functions.h @@ -153,6 +153,117 @@ String replaceUtf8(String str, String r){ return result; } +// ===== LANGUAGE STRING FUNCTIONS ===== // + +// for reading Strings from the PROGMEM +String str(const char* ptr){ + char keyword[strlen_P(ptr)]; + strcpy_P(keyword, ptr); + return String(keyword); +} + +// for converting keywords +String keyword(const char* keywordPtr){ + char keyword[strlen_P(keywordPtr)]; + strcpy_P(keyword, keywordPtr); + + String str = ""; + uint8_t len = strlen(keyword); + uint8_t i = 0; + + while(i 255) return false; // when string too long + + char keyword[strlen_P(keywordPtr) + 1]; + strcpy_P(keyword, keywordPtr); + + uint8_t lenStr = strlen(str); + uint8_t lenKeyword = strlen(keyword); + if(lenStr > lenKeyword) return false; // string can't be longer than keyword (but can be smaller because of '/' and ',') + + uint8_t a = 0; + uint8_t b = 0; + bool result = true; + while(a < lenStr && b < lenKeyword){ + if(keyword[b] == SLASH || keyword[b] == COMMA) b++; + if(tolower(str[a]) != tolower(keyword[b])) result = false; + if((a == lenStr && !result) || !result){ // fast forward to next comma + while(b < lenKeyword && keyword[b] != COMMA) b++; + result = true; + a = 0; + } else { + a++; + b++; + } + } + // comparison correct AND string checked until the end AND keyword checked until the end + return result && a == lenStr && (keyword[b] == COMMA || keyword[b] == SLASH || keyword[b] == ENDOFLINE); +} + +bool eqls(String str, const char* keywordPtr){ + return eqls(str.c_str(), keywordPtr); +} + +// boolean to string +String b2s(bool input){ + return str(input ? STR_TRUE : STR_FALSE); +} + +// boolean to asterix * +String b2a(bool input){ + return (input ? String(ASTERIX) : String(SPACE)); +} + +// string to boolean +bool s2b(String input){ + return eqls(input, STR_TRUE); +} + +// ===== PRINT FUNCTIONS ===== // +void prnt(String s){ + Serial.print(s); +} +void prnt(bool b){ + Serial.print(b2s(b)); +} +void prnt(char c){ + Serial.print(c); +} +void prnt(const char* ptr){ + Serial.print(FPSTR(ptr)); +} +void prnt(int i){ + Serial.print((String)i); +} + +void prntln(){ + Serial.println(); +} +void prntln(String s){ + Serial.println(s); +} +void prntln(bool b){ + Serial.println(b2s(b)); +} +void prntln(char c){ + Serial.println(c); +} +void prntln(const char* ptr){ + Serial.println(FPSTR(ptr)); +} +void prntln(int i){ + Serial.println((String)i); +} + /* ===== WiFi ===== */ void setWifiChannel(uint8_t ch){ if(ch != wifi_channel && ch > 0 && ch < 15){ @@ -593,4 +704,4 @@ String formatBytes(size_t bytes) { #endif - + diff --git a/esp8266_deauther/language.h b/esp8266_deauther/language.h index ce9a366..6e43aff 100644 --- a/esp8266_deauther/language.h +++ b/esp8266_deauther/language.h @@ -1,6 +1,25 @@ #ifndef language_h #define language_h +extern String str(const char* ptr); +extern String keyword(const char* keywordPtr); +extern bool eqls(const char* str, const char* keywordPtr); +extern bool eqls(String str, const char* keywordPtr); +extern String b2s(bool input); +extern String b2a(bool input); +extern bool s2b(String input); +extern void prnt(String s); +extern void prnt(bool b); +extern void prnt(char c); +extern void prnt(const char* ptr); +extern void prnt(int i); +extern void prntln(); +extern void prntln(String s); +extern void prntln(bool b); +extern void prntln(char c); +extern void prntln(const char* ptr); +extern void prntln(int i); + /* The following variables are the strings used for the serial interface, display interface and settings. The keywords for the serial CLI have a simple structure to save a bit of memory and CPU time: @@ -13,644 +32,531 @@ // ===== GLOBAL STRINGS ===== // // Often used characters, therefor in the RAM -static const char CURSOR = '|'; -static const char SPACE = ' '; -static const char DOUBLEPOINT = ':'; -static const char EQUALS = '='; -static const char HASHSIGN = '#'; -static const char ASTERIX = '*'; -static const char PERCENT = '%'; -static const char DASH = '-'; -static const char QUESTIONMARK = '?'; -static const char ZERO = '0'; -static const char S = 's'; -static const char M = 'm'; -static const char D = 'd'; -static const char DOUBLEQUOTES = '\"'; -static const char SLASH = '/'; -static const char NEWLINE = '\n'; -static const char CARRIAGERETURN = '\r'; -static const char SEMICOLON = ';'; -static const char BACKSLASH = '\\'; -static const char POINT = '.'; -static const char VERTICALBAR = '|'; -static const char COMMA = ','; -static const char ENDOFLINE = '\0'; -static const char OPEN_BRACKET = '['; -static const char CLOSE_BRACKET = ']'; -static const char OPEN_CURLY_BRACKET = '{'; -static const char CLOSE_CURLY_BRACKET = '}'; +const char CURSOR = '|'; +const char SPACE = ' '; +const char DOUBLEPOINT = ':'; +const char EQUALS = '='; +const char HASHSIGN = '#'; +const char ASTERIX = '*'; +const char PERCENT = '%'; +const char DASH = '-'; +const char QUESTIONMARK = '?'; +const char ZERO = '0'; +const char S = 's'; +const char M = 'm'; +const char D = 'd'; +const char DOUBLEQUOTES = '\"'; +const char SLASH = '/'; +const char NEWLINE = '\n'; +const char CARRIAGERETURN = '\r'; +const char SEMICOLON = ';'; +const char BACKSLASH = '\\'; +const char POINT = '.'; +const char VERTICALBAR = '|'; +const char COMMA = ','; +const char ENDOFLINE = '\0'; +const char OPEN_BRACKET = '['; +const char CLOSE_BRACKET = ']'; +const char OPEN_CURLY_BRACKET = '{'; +const char CLOSE_CURLY_BRACKET = '}'; -static const char STR_TRUE[] PROGMEM = "true"; -static const char STR_FALSE[] PROGMEM = "false"; -static const char STR_MIN[] PROGMEM = "min"; - -// ===== GLOBAL FUNCTIONS ===== // - -// for reading Strings from the PROGMEM -static String str(const char* ptr){ - char keyword[strlen_P(ptr)]; - strcpy_P(keyword, ptr); - return String(keyword); -} - -// for converting keywords -static String keyword(const char* keywordPtr){ - char keyword[strlen_P(keywordPtr)]; - strcpy_P(keyword, keywordPtr); - - String str = ""; - uint8_t len = strlen(keyword); - uint8_t i = 0; - - while(i 255) return false; // when string too long - - char keyword[strlen_P(keywordPtr) + 1]; - strcpy_P(keyword, keywordPtr); - - uint8_t lenStr = strlen(str); - uint8_t lenKeyword = strlen(keyword); - if(lenStr > lenKeyword) return false; // string can't be longer than keyword (but can be smaller because of '/' and ',') - - uint8_t a = 0; - uint8_t b = 0; - bool result = true; - while(a < lenStr && b < lenKeyword){ - if(keyword[b] == SLASH || keyword[b] == COMMA) b++; - if(tolower(str[a]) != tolower(keyword[b])) result = false; - if((a == lenStr && !result) || !result){ // fast forward to next comma - while(b < lenKeyword && keyword[b] != COMMA) b++; - result = true; - a = 0; - } else { - a++; - b++; - } - } - // comparison correct AND string checked until the end AND keyword checked until the end - return result && a == lenStr && (keyword[b] == COMMA || keyword[b] == SLASH || keyword[b] == ENDOFLINE); -} - -static bool eqls(String str, const char* keywordPtr){ - return eqls(str.c_str(), keywordPtr); -} - -// boolean to string -static String b2s(bool input){ - return str(input ? STR_TRUE : STR_FALSE); -} - -// boolean to asterix * -static String b2a(bool input){ - return (input ? String(ASTERIX) : String(SPACE)); -} - -// string to boolean -static bool s2b(String input){ - return eqls(input, STR_TRUE); -} - -// ===== PRINT FUNCTIONS ===== // -static void prnt(String s){ - Serial.print(s); -} -static void prnt(bool b){ - Serial.print(b2s(b)); -} -static void prnt(char c){ - Serial.print(c); -} -static void prnt(const char* ptr){ - Serial.print(FPSTR(ptr)); -} -static void prnt(int i){ - Serial.print((String)i); -} - -static void prntln(){ - Serial.println(); -} -static void prntln(String s){ - Serial.println(s); -} -static void prntln(bool b){ - Serial.println(b2s(b)); -} -static void prntln(char c){ - Serial.println(c); -} -static void prntln(const char* ptr){ - Serial.println(FPSTR(ptr)); -} -static void prntln(int i){ - Serial.println((String)i); -} +const char STR_TRUE[] PROGMEM = "true"; +const char STR_FALSE[] PROGMEM = "false"; +const char STR_MIN[] PROGMEM = "min"; // ===== SETUP ===== // -static const char SETUP_OK[] PROGMEM = "OK"; -static const char SETUP_ERROR[] PROGMEM = "ERROR"; -static const char SETUP_MOUNT_SPIFFS[] PROGMEM = "Mounting SPIFFS..."; -static const char SETUP_FORMAT_SPIFFS[] PROGMEM = "Formatting SPIFFS..."; -static const char SETUP_SERIAL_WARNING[] PROGMEM = "Warning: Serial deactivated"; -static const char SETUP_STARTED[] PROGMEM = "STARTED! \\o/"; -static const char SETUP_COPYING[] PROGMEM = "Copying "; -static const char SETUP_PROGMEM_TO_SPIFFS[] PROGMEM = " from PROGMEM to SPIFFS..."; +const char SETUP_OK[] PROGMEM = "OK"; +const char SETUP_ERROR[] PROGMEM = "ERROR"; +const char SETUP_MOUNT_SPIFFS[] PROGMEM = "Mounting SPIFFS..."; +const char SETUP_FORMAT_SPIFFS[] PROGMEM = "Formatting SPIFFS..."; +const char SETUP_SERIAL_WARNING[] PROGMEM = "Warning: Serial deactivated"; +const char SETUP_STARTED[] PROGMEM = "STARTED! \\o/"; +const char SETUP_COPYING[] PROGMEM = "Copying "; +const char SETUP_PROGMEM_TO_SPIFFS[] PROGMEM = " from PROGMEM to SPIFFS..."; // ===== SERIAL COMMAND LINE INTERFACE ===== // -static const char CLI_SCAN[] PROGMEM = "scan"; // scan -static const char CLI_REBOOT[] PROGMEM = "reboot"; // reboot -static const char CLI_STATUS[] PROGMEM = "status"; // status -static const char CLI_SHOW[] PROGMEM = "show"; // show -static const char CLI_REMOVE[] PROGMEM = "remove"; // remove -static const char CLI_SET[] PROGMEM = "set"; // set -static const char CLI_STOP[] PROGMEM = "stop"; // stop -static const char CLI_LOAD[] PROGMEM = "load"; // load -static const char CLI_SAVE[] PROGMEM = "save"; // save -static const char CLI_ADD[] PROGMEM = "add"; // add -static const char CLI_DESELECT[] PROGMEM = "deselect"; // deselect -static const char CLI_CLEAR[] PROGMEM = "clear"; // clear -static const char CLI_SYSINFO[] PROGMEM = "sysinfo"; // sysinfo -static const char CLI_RESET[] PROGMEM = "reset"; // reset -static const char CLI_ON[] PROGMEM = "on"; // on -static const char CLI_OFF[] PROGMEM = "off"; // off -static const char CLI_RANDOM[] PROGMEM = "random"; // random -static const char CLI_GET[] PROGMEM = "get"; // get -static const char CLI_INFO[] PROGMEM = "info"; // info -static const char CLI_HELP[] PROGMEM = "help"; // help -static const char CLI_RICE[] PROGMEM = "rice"; // rice -static const char CLI_FORMAT[] PROGMEM = "format"; // format -static const char CLI_DELETE[] PROGMEM = "delete"; // delete -static const char CLI_PRINT[] PROGMEM = "print"; // print -static const char CLI_RUN[] PROGMEM = "run"; // run -static const char CLI_WRITE[] PROGMEM = "write"; // write -static const char CLI_LED[] PROGMEM = "led"; // led -static const char CLI_SEND[] PROGMEM = "send"; // send -static const char CLI_CUSTOM[] PROGMEM = "custom"; // custom -static const char CLI_DELAY[] PROGMEM = "delay"; // delay -static const char CLI_REPLACE[] PROGMEM = "replace"; // replace -static const char CLI_DRAW[] PROGMEM = "draw"; // draw -static const char CLI_SCRIPT[] PROGMEM = "script"; // script -static const char CLI_STARTAP[] PROGMEM = "startap"; // startap -static const char CLI_STOPAP[] PROGMEM = "stopap"; // stopap -static const char CLI_RENAME[] PROGMEM = "rename"; // rename -static const char CLI_COPY[] PROGMEM = "copy"; // copy -static const char CLI_ENABLE[] PROGMEM = "enable/d"; // enable, enabled -static const char CLI_DISABLE[] PROGMEM = "disable/d"; // disable, disabled -static const char CLI_WPA2[] PROGMEM = "wpa/2,-wpa/2"; // wpa, wpa2, -wpa, -wpa2 -static const char CLI_ATTACK[] PROGMEM = "attack/s"; // attack, attacks -static const char CLI_CHICKEN[] PROGMEM = "chicken/s"; // chicken, chickens -static const char CLI_SETTING[] PROGMEM = "setting/s"; // setting, settings -static const char CLI_ID[] PROGMEM = "id,-i/d"; // id, -i, -id -static const char CLI_ALL[] PROGMEM = "all,-a"; // all, -a -static const char CLI_TIME[] PROGMEM = "time,-t"; // time, -t -static const char CLI_CONTINUE[] PROGMEM = "continue,-c"; // continue, -c -static const char CLI_CHANNEL[] PROGMEM = "channel,-ch"; // channel, -ch -static const char CLI_MAC[] PROGMEM = "mac,-m"; // mac, -m -static const char CLI_BSSID[] PROGMEM = "bssid,-b"; // bssid, -b -static const char CLI_BEACON[] PROGMEM = "beacon,-b"; // bssid, -b -static const char CLI_DEAUTH[] PROGMEM = "deauth,-d"; // deauth, -d -static const char CLI_DEAUTHALL[] PROGMEM = "deauthall,-da"; // deauthall, -da -static const char CLI_PROBE[] PROGMEM = "probe,-p"; // probe, -p -static const char CLI_NOOUTPUT[] PROGMEM = "nooutput,-no"; // nooutput, -no -static const char CLI_FORCE[] PROGMEM = "force,-f"; // force, -f -static const char CLI_TIMEOUT[] PROGMEM = "timeout,-t"; // timeout, -t -static const char CLI_WIFI[] PROGMEM = "wifi,-w"; // wifi, -w -static const char CLI_CLONES[] PROGMEM = "clones,-cl"; // clones, -cl -static const char CLI_PATH[] PROGMEM = "path,-p"; // path, -p -static const char CLI_PASSWORD[] PROGMEM = "password,-ps/wd"; // password, -ps, -pswd -static const char CLI_HIDDEN[] PROGMEM = "hidden,-h"; // hidden, -h -static const char CLI_CAPTIVEPORTAL[] PROGMEM = "captiveportal,-cp"; // captiveportal, -cp -static const char CLI_SELECT[] PROGMEM = "select/ed,-s"; // select, selected, -s -static const char CLI_SSID[] PROGMEM = "ssid/s,-s/s"; // ssid, ssids, -s, -ss -static const char CLI_AP[] PROGMEM = "ap/s,-ap/s"; // ap, aps, -ap, -aps -static const char CLI_STATION[] PROGMEM = "station/s,-st"; // station, stations, -st -static const char CLI_NAME[] PROGMEM = "name/s,-n"; // name, names, -n -static const char CLI_LINE[] PROGMEM = "line/s,-l"; // line, lines, -l -static const char CLI_COMMENT[] PROGMEM = "//"; // // -static const char CLI_SCREEN[] PROGMEM = "screen"; // screen -static const char CLI_MODE[] PROGMEM = "mode,-m"; // mode -static const char CLI_MODE_BUTTONTEST[] PROGMEM = "buttontest"; // buttontest -static const char CLI_MODE_PACKETMONITOR[] PROGMEM = "packetmonitor"; // packetmonitor -static const char CLI_MODE_LOADINGSCREEN[] PROGMEM = "loadingscreen"; // loading -static const char CLI_MODE_MENU[] PROGMEM = "menu"; // menu +const char CLI_SCAN[] PROGMEM = "scan"; // scan +const char CLI_REBOOT[] PROGMEM = "reboot"; // reboot +const char CLI_STATUS[] PROGMEM = "status"; // status +const char CLI_SHOW[] PROGMEM = "show"; // show +const char CLI_REMOVE[] PROGMEM = "remove"; // remove +const char CLI_SET[] PROGMEM = "set"; // set +const char CLI_STOP[] PROGMEM = "stop"; // stop +const char CLI_LOAD[] PROGMEM = "load"; // load +const char CLI_SAVE[] PROGMEM = "save"; // save +const char CLI_ADD[] PROGMEM = "add"; // add +const char CLI_DESELECT[] PROGMEM = "deselect"; // deselect +const char CLI_CLEAR[] PROGMEM = "clear"; // clear +const char CLI_SYSINFO[] PROGMEM = "sysinfo"; // sysinfo +const char CLI_RESET[] PROGMEM = "reset"; // reset +const char CLI_ON[] PROGMEM = "on"; // on +const char CLI_OFF[] PROGMEM = "off"; // off +const char CLI_RANDOM[] PROGMEM = "random"; // random +const char CLI_GET[] PROGMEM = "get"; // get +const char CLI_INFO[] PROGMEM = "info"; // info +const char CLI_HELP[] PROGMEM = "help"; // help +const char CLI_RICE[] PROGMEM = "rice"; // rice +const char CLI_FORMAT[] PROGMEM = "format"; // format +const char CLI_DELETE[] PROGMEM = "delete"; // delete +const char CLI_PRINT[] PROGMEM = "print"; // print +const char CLI_RUN[] PROGMEM = "run"; // run +const char CLI_WRITE[] PROGMEM = "write"; // write +const char CLI_LED[] PROGMEM = "led"; // led +const char CLI_SEND[] PROGMEM = "send"; // send +const char CLI_CUSTOM[] PROGMEM = "custom"; // custom +const char CLI_DELAY[] PROGMEM = "delay"; // delay +const char CLI_REPLACE[] PROGMEM = "replace"; // replace +const char CLI_DRAW[] PROGMEM = "draw"; // draw +const char CLI_SCRIPT[] PROGMEM = "script"; // script +const char CLI_STARTAP[] PROGMEM = "startap"; // startap +const char CLI_STOPAP[] PROGMEM = "stopap"; // stopap +const char CLI_RENAME[] PROGMEM = "rename"; // rename +const char CLI_COPY[] PROGMEM = "copy"; // copy +const char CLI_ENABLE[] PROGMEM = "enable/d"; // enable, enabled +const char CLI_DISABLE[] PROGMEM = "disable/d"; // disable, disabled +const char CLI_WPA2[] PROGMEM = "wpa/2,-wpa/2"; // wpa, wpa2, -wpa, -wpa2 +const char CLI_ATTACK[] PROGMEM = "attack/s"; // attack, attacks +const char CLI_CHICKEN[] PROGMEM = "chicken/s"; // chicken, chickens +const char CLI_SETTING[] PROGMEM = "setting/s"; // setting, settings +const char CLI_ID[] PROGMEM = "id,-i/d"; // id, -i, -id +const char CLI_ALL[] PROGMEM = "all,-a"; // all, -a +const char CLI_TIME[] PROGMEM = "time,-t"; // time, -t +const char CLI_CONTINUE[] PROGMEM = "continue,-c"; // continue, -c +const char CLI_CHANNEL[] PROGMEM = "channel,-ch"; // channel, -ch +const char CLI_MAC[] PROGMEM = "mac,-m"; // mac, -m +const char CLI_BSSID[] PROGMEM = "bssid,-b"; // bssid, -b +const char CLI_BEACON[] PROGMEM = "beacon,-b"; // bssid, -b +const char CLI_DEAUTH[] PROGMEM = "deauth,-d"; // deauth, -d +const char CLI_DEAUTHALL[] PROGMEM = "deauthall,-da"; // deauthall, -da +const char CLI_PROBE[] PROGMEM = "probe,-p"; // probe, -p +const char CLI_NOOUTPUT[] PROGMEM = "nooutput,-no"; // nooutput, -no +const char CLI_FORCE[] PROGMEM = "force,-f"; // force, -f +const char CLI_TIMEOUT[] PROGMEM = "timeout,-t"; // timeout, -t +const char CLI_WIFI[] PROGMEM = "wifi,-w"; // wifi, -w +const char CLI_CLONES[] PROGMEM = "clones,-cl"; // clones, -cl +const char CLI_PATH[] PROGMEM = "path,-p"; // path, -p +const char CLI_PASSWORD[] PROGMEM = "password,-ps/wd"; // password, -ps, -pswd +const char CLI_HIDDEN[] PROGMEM = "hidden,-h"; // hidden, -h +const char CLI_CAPTIVEPORTAL[] PROGMEM = "captiveportal,-cp"; // captiveportal, -cp +const char CLI_SELECT[] PROGMEM = "select/ed,-s"; // select, selected, -s +const char CLI_SSID[] PROGMEM = "ssid/s,-s/s"; // ssid, ssids, -s, -ss +const char CLI_AP[] PROGMEM = "ap/s,-ap/s"; // ap, aps, -ap, -aps +const char CLI_STATION[] PROGMEM = "station/s,-st"; // station, stations, -st +const char CLI_NAME[] PROGMEM = "name/s,-n"; // name, names, -n +const char CLI_LINE[] PROGMEM = "line/s,-l"; // line, lines, -l +const char CLI_COMMENT[] PROGMEM = "//"; // // +const char CLI_SCREEN[] PROGMEM = "screen"; // screen +const char CLI_MODE[] PROGMEM = "mode,-m"; // mode +const char CLI_MODE_BUTTONTEST[] PROGMEM = "buttontest"; // buttontest +const char CLI_MODE_PACKETMONITOR[] PROGMEM = "packetmonitor"; // packetmonitor +const char CLI_MODE_LOADINGSCREEN[] PROGMEM = "loadingscreen"; // loading +const char CLI_MODE_MENU[] PROGMEM = "menu"; // menu -static const char CLI_HELP_HELP[] PROGMEM = "help"; -static const char CLI_HELP_SCAN[] PROGMEM = "scan [] [-t