New string functions & better seperation of display functions

This commit is contained in:
Stefan Kremser
2018-10-12 13:41:26 +02:00
parent 9097a07a38
commit 7242543017
13 changed files with 2452 additions and 2357 deletions

View File

@@ -68,15 +68,15 @@ void Accesspoints::print(int num, bool header, bool footer) {
prntln(AP_TABLE_HEADER); prntln(AP_TABLE_HEADER);
prntln(AP_TABLE_DIVIDER); prntln(AP_TABLE_DIVIDER);
} }
prnt(buildString(String(), (String)num, 2)); prnt(leftRight(String(), (String)num, 2));
prnt(buildString(String(SPACE) + getSSID(num), String(), 33)); prnt(leftRight(String(SPACE) + getSSID(num), String(), 33));
prnt(buildString(String(SPACE) + getNameStr(num), String(), 17)); prnt(leftRight(String(SPACE) + getNameStr(num), String(), 17));
prnt(buildString(String(SPACE), (String)getCh(num), 3)); prnt(leftRight(String(SPACE), (String)getCh(num), 3));
prnt(buildString(String(SPACE), (String)getRSSI(num), 5)); prnt(leftRight(String(SPACE), (String)getRSSI(num), 5));
prnt(buildString(String(SPACE), getEncStr(num), 5)); prnt(leftRight(String(SPACE), getEncStr(num), 5));
prnt(buildString(String(SPACE) + getMacStr(num), String(), 18)); prnt(leftRight(String(SPACE) + getMacStr(num), String(), 18));
prnt(buildString(String(SPACE) + getVendorStr(num), String(), 9)); prnt(leftRight(String(SPACE) + getVendorStr(num), String(), 9));
prntln(buildString(String(SPACE) + getSelectedStr(num), String(), 9)); prntln(leftRight(String(SPACE) + getSelectedStr(num), String(), 9));
if (footer) { if (footer) {
prntln(AP_TABLE_DIVIDER); prntln(AP_TABLE_DIVIDER);

View File

@@ -13,7 +13,7 @@ extern "C" {
extern Names names; extern Names names;
extern String searchVendor(uint8_t* mac); extern String searchVendor(uint8_t* mac);
extern String buildString(String left, String right, int maxLen); extern String leftRight(String a, String b, int len);
extern String fixUtf8(String str); extern String fixUtf8(String str);
extern String bytesToStr(uint8_t* b, uint32_t size); extern String bytesToStr(uint8_t* b, uint32_t size);

File diff suppressed because it is too large Load Diff

View File

@@ -24,7 +24,11 @@ extern Scan scan;
extern Attack attack; extern Attack attack;
extern uint32_t currentTime; extern uint32_t currentTime;
extern String buildString(String left, String right, int maxLen); extern String leftRight(String a, String b, int len);
extern String center(String a, int len);
extern String left(String a, int len);
extern String right(String a, int len);
extern String leftRight(String a, String b, int len);
extern String replaceUtf8(String str, String r); extern String replaceUtf8(String str, String r);
// different display modes // different display modes
@@ -82,6 +86,19 @@ class DisplayUI {
bool highlightLED = false; bool highlightLED = false;
#endif #endif
// ===== adjustable ===== //
void configInit();
void configOn();
void configOff();
void updatePrefix();
void updateSuffix();
void drawString(int x, int y, String str);
void drawString(int row, String str);
void drawLine(int x1, int y1, int x2, int y2);
uint8_t maxLen = 18;
uint8_t lineHeight = 12;
// ====================== //
void update(); void update();
void on(); void on();
void off(); void off();
@@ -112,12 +129,13 @@ class DisplayUI {
bool deauthSelected = false; bool deauthSelected = false;
bool probeSelected = false; bool probeSelected = false;
String getChannel();
// functions for buttons // functions for buttons
bool updateButton(Button* button); // read and update bool updateButton(Button* button); // read and update
// draw functions // draw functions
void draw(); void draw();
void drawString(int x, int y, String str);
void drawButtonTest(); void drawButtonTest();
void drawMenu(); void drawMenu();
void drawLoadingScan(); void drawLoadingScan();

View File

@@ -143,13 +143,13 @@ void Names::print(int num, bool header, bool footer) {
prntln(N_TABLE_DIVIDER); prntln(N_TABLE_DIVIDER);
} }
prnt(buildString(String(), (String)num, 2)); prnt(leftRight(String(), (String)num, 2));
prnt(buildString(String(SPACE) + getMacStr(num), String(), 18)); prnt(leftRight(String(SPACE) + getMacStr(num), String(), 18));
prnt(buildString(String(SPACE) + getVendorStr(num), String(), 9)); prnt(leftRight(String(SPACE) + getVendorStr(num), String(), 9));
prnt(buildString(String(SPACE) + getName(num), String(), 17)); prnt(leftRight(String(SPACE) + getName(num), String(), 17));
prnt(buildString(String(SPACE) + getBssidStr(num), String(), 18)); prnt(leftRight(String(SPACE) + getBssidStr(num), String(), 18));
prnt(buildString(String(SPACE), (String)getCh(num), 3)); prnt(leftRight(String(SPACE), (String)getCh(num), 3));
prntln(buildString(String(SPACE) + getSelectedStr(num), String(), 9)); prntln(leftRight(String(SPACE) + getSelectedStr(num), String(), 9));
if (footer) prntln(N_TABLE_DIVIDER); if (footer) prntln(N_TABLE_DIVIDER);
} }

View File

@@ -21,7 +21,7 @@ extern bool appendFile(String path, String& buf);
extern bool strToMac(String macStr, uint8_t* mac); extern bool strToMac(String macStr, uint8_t* mac);
extern String searchVendor(uint8_t* mac); extern String searchVendor(uint8_t* mac);
extern String fixUtf8(String str); extern String fixUtf8(String str);
extern String buildString(String left, String right, int maxLen); extern String leftRight(String a, String b, int len);
extern String escape(String str); extern String escape(String str);
extern String bytesToStr(uint8_t* b, uint32_t size); extern String bytesToStr(uint8_t* b, uint32_t size);

View File

@@ -254,9 +254,9 @@ void SSIDs::print(int num, bool header, bool footer) {
prntln(SS_TABLE_DIVIDER); prntln(SS_TABLE_DIVIDER);
} }
prnt(buildString(String(), (String)num, 2)); prnt(leftRight(String(), (String)num, 2));
prnt(buildString(String(SPACE), getEncStr(num), 5)); prnt(leftRight(String(SPACE), getEncStr(num), 5));
prntln(buildString(String(SPACE) + getName(num), String(), 33)); prntln(leftRight(String(SPACE) + getName(num), String(), 33));
if (footer) prntln(SS_TABLE_DIVIDER); if (footer) prntln(SS_TABLE_DIVIDER);
} }

View File

@@ -25,7 +25,7 @@ extern bool appendFile(String path, String& buf);
extern bool writeFile(String path, String& buf); extern bool writeFile(String path, String& buf);
extern void readFileToSerial(String path); extern void readFileToSerial(String path);
extern String fixUtf8(String str); extern String fixUtf8(String str);
extern String buildString(String left, String right, int maxLen); extern String leftRight(String a, String b, int len);
extern String escape(String str); extern String escape(String str);
class SSIDs { class SSIDs {

View File

@@ -115,7 +115,7 @@ void Scan::start(uint8_t mode, uint32_t time, uint8_t nextmode, uint32_t continu
if (sniffTime > 0) prnt(String(sniffTime / 1000) + S); if (sniffTime > 0) prnt(String(sniffTime / 1000) + S);
else prnt(SC_INFINITELY); else prnt(SC_INFINITELY);
prnt(SC_ON_CHANNEL); prnt(SC_ON_CHANNEL);
prntln(channelHop ? str(SC_ONE_TO) + (String)settings.getMaxCh() : (String)wifi_channel); prntln(channelHop ? str(SC_ONE_TO) + (String)14 : (String)wifi_channel);
// enable sniffer // enable sniffer
stopAP(); stopAP();
@@ -230,8 +230,8 @@ void Scan::stop() {
} }
void Scan::setChannel(uint8_t ch) { void Scan::setChannel(uint8_t ch) {
if (ch > settings.getMaxCh()) ch = 1; if (ch > 14) ch = 1;
else if (ch < 1) ch = settings.getMaxCh(); else if (ch < 1) ch = 14;
wifi_promiscuous_enable(0); wifi_promiscuous_enable(0);
setWifiChannel(ch); setWifiChannel(ch);
@@ -245,7 +245,7 @@ void Scan::nextChannel() {
do { do {
ch++; ch++;
if (ch > settings.getMaxCh()) ch = 1; if (ch > 14) ch = 1;
} while (!apWithChannel(ch)); } while (!apWithChannel(ch));
setChannel(ch); setChannel(ch);
} }
@@ -408,6 +408,23 @@ uint32_t Scan::getPackets(int i) {
} }
} }
String Scan::getMode(){
switch(scanMode) {
case SCAN_MODE_OFF:
return String(SC_MODE_OFF);
case SCAN_MODE_APS:
return String(SC_MODE_AP);
case SCAN_MODE_STATIONS:
return String(SC_MODE_ST);
case SCAN_MODE_ALL:
return String(SC_MODE_ALL);
case SCAN_MODE_SNIFFER:
return String(SC_MODE_SNIFFER);
default:
return String();
}
}
double Scan::getScaleFactor(uint8_t height) { double Scan::getScaleFactor(uint8_t height) {
return (double)height / (double)getMaxPacket(); return (double)height / (double)getMaxPacket();
} }

View File

@@ -64,6 +64,7 @@ class Scan {
void nextChannel(); void nextChannel();
void setChannel(uint8_t newChannel); void setChannel(uint8_t newChannel);
String getMode();
double getScaleFactor(uint8_t height); double getScaleFactor(uint8_t height);
uint32_t getMaxPacket(); uint32_t getMaxPacket();
uint32_t getPacketRate(); uint32_t getPacketRate();

View File

@@ -100,15 +100,15 @@ void Stations::print(int num, bool header, bool footer) {
prntln(ST_TABLE_DIVIDER); prntln(ST_TABLE_DIVIDER);
} }
prnt(buildString(String(), (String)num, 2)); prnt(leftRight(String(), (String)num, 2));
prnt(buildString(String(SPACE) + getMacStr(num), String(), 18)); prnt(leftRight(String(SPACE) + getMacStr(num), String(), 18));
prnt(buildString(String(SPACE), (String)getCh(num), 3)); prnt(leftRight(String(SPACE), (String)getCh(num), 3));
prnt(buildString(String(SPACE) + getNameStr(num), String(), 17)); prnt(leftRight(String(SPACE) + getNameStr(num), String(), 17));
prnt(buildString(String(SPACE) + getVendorStr(num), String(), 9)); prnt(leftRight(String(SPACE) + getVendorStr(num), String(), 9));
prnt(buildString(String(SPACE), (String) * getPkts(num), 9)); prnt(leftRight(String(SPACE), (String) * getPkts(num), 9));
prnt(buildString(String(SPACE) + getAPStr(num), String(), 33)); prnt(leftRight(String(SPACE) + getAPStr(num), String(), 33));
prnt(buildString(String(SPACE) + getTimeStr(num), String(), 10)); prnt(leftRight(String(SPACE) + getTimeStr(num), String(), 10));
prntln(buildString(String(SPACE) + getSelectedStr(num), String(), 9)); prntln(leftRight(String(SPACE) + getSelectedStr(num), String(), 9));
if (footer) prntln(ST_TABLE_DIVIDER); if (footer) prntln(ST_TABLE_DIVIDER);
} }

View File

@@ -449,15 +449,58 @@ void strToColor(String str, uint8_t* buf) {
for (uint8_t i = 0; i < 3; i++) buf[i] = strtoul((str.substring(i * 2, i * 2 + 2)).c_str(), NULL, 16); for (uint8_t i = 0; i < 3; i++) buf[i] = strtoul((str.substring(i * 2, i * 2 + 2)).c_str(), NULL, 16);
} }
String buildString(String left, String right, int maxLen) {
String result = left;
int spacesToAdd = maxLen - left.length() /*utf8Len(left)*/ - right.length() /*utf8Len(right)*/;
for (int i = 0; i < spacesToAdd; i++) { String center(String a, int len) {
result += SPACE; int spaces = len - a.length();
for (int i = 0; i < spaces; i+=2) {
a = ' ' + a + ' ';
} }
result += right;
return result; a = a.substring(0, len);
return a;
}
String left(String a, int len) {
int spaces = len - a.length();
while (spaces > 0) {
a = a + ' ';
spaces--;
}
a = a.substring(0, len);
return a;
}
String right(String a, int len) {
int spaces = len - a.length();
while (spaces > 0) {
a = ' ' + a;
spaces--;
}
a = a.substring(0, len);
return a;
}
String leftRight(String a, String b, int len) {
int spaces = len - a.length() - b.length();
while (spaces > 0) {
a = a + ' ';
spaces--;
}
a = a + b;
a = a.substring(0, len);
return a;
} }
/* ===== SPIFFS ===== */ /* ===== SPIFFS ===== */
@@ -509,7 +552,7 @@ void readFileToSerial(String path, bool showLineNum) {
char tmp; char tmp;
if (showLineNum) { if (showLineNum) {
prnt(buildString(String(), (String)c + String(VERTICALBAR), 6)); prnt(leftRight(String(), (String)c + String(VERTICALBAR), 6));
} }
while (f.available()) { while (f.available()) {
@@ -518,7 +561,7 @@ void readFileToSerial(String path, bool showLineNum) {
if ((tmp == NEWLINE) && showLineNum) { if ((tmp == NEWLINE) && showLineNum) {
c++; c++;
prnt(buildString(String(), (String)c + String(VERTICALBAR), 6)); prnt(leftRight(String(), (String)c + String(VERTICALBAR), 6));
} }
} }

View File

@@ -268,11 +268,12 @@ const char D_MSG_DISPLAY_OFF[] PROGMEM = "Turned display off";
const char D_MSG_DISPLAY_ON[] PROGMEM = "Turned display on"; const char D_MSG_DISPLAY_ON[] PROGMEM = "Turned display on";
// LOADING SCREEN // LOADING SCREEN
const char D_LOADING_SCREEN_0[] PROGMEM = "Scanning..."; const char DSP_SCAN_FOR[] PROGMEM = "Scan for";
const char D_LOADING_SCREEN_1[] PROGMEM = "APs: "; const char DSP_APS[] PROGMEM = "APs";
const char D_LOADING_SCREEN_2[] PROGMEM = "Stations: "; const char DSP_STS[] PROGMEM = "STs";
const char D_LOADING_SCREEN_3[] PROGMEM = "Searching for"; const char DSP_PKTS[] PROGMEM = "Pkts";
const char D_LOADING_SCREEN_4[] PROGMEM = "Access Points..."; const char DSP_S[] PROGMEM = "/s";
const char DSP_SCAN_DONE[] PROGMEM = "Done";
// ALL MENUS // ALL MENUS
const char D_BACK[] PROGMEM = "[BACK]"; const char D_BACK[] PROGMEM = "[BACK]";
@@ -325,10 +326,10 @@ const char D_STOP_ATTACK[] PROGMEM = "STOP";
const char D_ENCRYPTION[] PROGMEM = "Encryption:"; const char D_ENCRYPTION[] PROGMEM = "Encryption:";
const char D_RSSI[] PROGMEM = "RSSI:"; const char D_RSSI[] PROGMEM = "RSSI:";
const char D_CHANNEL[] PROGMEM = "Channel:"; const char D_CHANNEL[] PROGMEM = "Channel:";
const char D_CH[] PROGMEM = "CH:"; const char D_CH[] PROGMEM = "Ch";
const char D_VENDOR[] PROGMEM = "Vendor:"; const char D_VENDOR[] PROGMEM = "Vendor:";
const char D_AP[] PROGMEM = "AP:"; const char D_AP[] PROGMEM = "AP:";
const char D_PKTS[] PROGMEM = "Pkts:"; const char D_PKTS[] PROGMEM = "pkts";
const char D_SEEN[] PROGMEM = "Seen:"; const char D_SEEN[] PROGMEM = "Seen:";
// ===== STATIONS ===== // // ===== STATIONS ===== //
@@ -388,7 +389,7 @@ const char S_ERROR_VERSION[] PROGMEM = "Sorry, you can't change the version numb
const char S_ERROR_NOT_FOUND[] PROGMEM = "ERROR: No setting found for "; const char S_ERROR_NOT_FOUND[] PROGMEM = "ERROR: No setting found for ";
const char S_CHANGED_SETTING[] PROGMEM = "Changed setting "; const char S_CHANGED_SETTING[] PROGMEM = "Changed setting ";
const char S_CHANNEL_CHANGE[] PROGMEM = "Switched to Channel "; const char S_CHANNEL_CHANGE[] PROGMEM = "Switched to Channel ";
const char S_CHANNEL_ERROR[] PROGMEM = "ERROR: Channel must be between 1 and "; const char S_CHANNEL_ERROR[] PROGMEM = "ERROR: Channel must be between 1 and 14";
const char S_ERROR_SSID_LEN[] PROGMEM = "ERROR: SSID must be between 1 and 32 characters"; const char S_ERROR_SSID_LEN[] PROGMEM = "ERROR: SSID must be between 1 and 32 characters";
const char S_ERROR_PASSWORD_LEN[] PROGMEM = "ERROR: Password must be between 8 and 32 characters"; const char S_ERROR_PASSWORD_LEN[] PROGMEM = "ERROR: Password must be between 8 and 32 characters";
const char S_RANDOM[] PROGMEM = "random"; const char S_RANDOM[] PROGMEM = "random";
@@ -492,6 +493,11 @@ const char SC_JSON_STATIONS[] PROGMEM = "stations";
const char SC_JSON_NAMES[] PROGMEM = "names"; const char SC_JSON_NAMES[] PROGMEM = "names";
const char SC_SAVED[] PROGMEM = "Saved scan results"; const char SC_SAVED[] PROGMEM = "Saved scan results";
const char SC_SAVED_IN[] PROGMEM = "Scan results saved in "; const char SC_SAVED_IN[] PROGMEM = "Scan results saved in ";
const char SC_MODE_OFF[] PROGMEM = "-";
const char SC_MODE_AP[] PROGMEM = "APs";
const char SC_MODE_ST[] PROGMEM = "STs";
const char SC_MODE_ALL[] PROGMEM = "AP+ST";
const char SC_MODE_SNIFFER[] PROGMEM = "Sniffer";
// ===== FUNCTIONS ===== // // ===== FUNCTIONS ===== //
const char F_ERROR_MAC[] PROGMEM = "ERROR: MAC address invalid"; const char F_ERROR_MAC[] PROGMEM = "ERROR: MAC address invalid";