mirror of
https://github.com/SpacehuhnTech/esp8266_deauther.git
synced 2025-12-23 15:10:06 +01:00
New string functions & better seperation of display functions
This commit is contained in:
@@ -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);
|
||||||
|
|||||||
@@ -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);
|
||||||
|
|
||||||
|
|||||||
@@ -3,23 +3,7 @@
|
|||||||
DisplayUI::DisplayUI() {}
|
DisplayUI::DisplayUI() {}
|
||||||
|
|
||||||
void DisplayUI::setupDisplay() {
|
void DisplayUI::setupDisplay() {
|
||||||
// ===== adjustable ===== //
|
configInit();
|
||||||
// initialize display
|
|
||||||
display.init();
|
|
||||||
|
|
||||||
/*
|
|
||||||
In case of a compiler (conversion char/uint8_t) error,
|
|
||||||
make sure to have version 4 of the display library installed
|
|
||||||
https://github.com/ThingPulse/esp8266-oled-ssd1306/releases/tag/4.0.0
|
|
||||||
*/
|
|
||||||
display.setFont(DejaVu_Sans_Mono_12);
|
|
||||||
display.setContrast(255);
|
|
||||||
#ifndef FLIP_DIPLAY
|
|
||||||
display.flipScreenVertically();
|
|
||||||
#endif // ifndef FLIP_DIPLAY
|
|
||||||
display.clear();
|
|
||||||
display.display();
|
|
||||||
// ====================== //
|
|
||||||
}
|
}
|
||||||
|
|
||||||
#ifdef HIGHLIGHT_LED
|
#ifdef HIGHLIGHT_LED
|
||||||
@@ -30,34 +14,81 @@ void DisplayUI::setupLED() {
|
|||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
void DisplayUI::on() {
|
|
||||||
// ===== adjustable ===== //
|
// ===== adjustable ===== //
|
||||||
if (enabled) {
|
void DisplayUI::configInit() {
|
||||||
|
// initialize display
|
||||||
|
display.init();
|
||||||
|
|
||||||
|
/*
|
||||||
|
In case of a compiler (conversion char/uint8_t) error,
|
||||||
|
make sure to have version 4 of the display library installed
|
||||||
|
https://github.com/ThingPulse/esp8266-oled-ssd1306/releases/tag/4.0.0
|
||||||
|
*/
|
||||||
|
display.setFont(DejaVu_Sans_Mono_12);
|
||||||
|
|
||||||
|
display.setContrast(255);
|
||||||
|
|
||||||
|
#ifndef FLIP_DIPLAY
|
||||||
|
display.flipScreenVertically();
|
||||||
|
#endif // ifndef FLIP_DIPLAY
|
||||||
|
|
||||||
|
display.clear();
|
||||||
|
display.display();
|
||||||
|
}
|
||||||
|
|
||||||
|
void DisplayUI::configOn() {
|
||||||
display.displayOn();
|
display.displayOn();
|
||||||
|
}
|
||||||
|
|
||||||
|
void DisplayUI::configOff() {
|
||||||
|
display.displayOff();
|
||||||
|
}
|
||||||
|
|
||||||
|
void DisplayUI::updatePrefix() {
|
||||||
|
display.clear(); // clear display
|
||||||
|
display.setTextAlignment(TEXT_ALIGN_LEFT); // reset text alignment just in case ;)
|
||||||
|
}
|
||||||
|
|
||||||
|
void DisplayUI::updateSuffix() {
|
||||||
|
display.display(); // draw changes
|
||||||
|
}
|
||||||
|
|
||||||
|
void DisplayUI::drawString(int x, int y, String str) {
|
||||||
|
display.drawString(x, y, replaceUtf8(str, String(QUESTIONMARK)));
|
||||||
|
}
|
||||||
|
|
||||||
|
void DisplayUI::drawString(int row, String str) {
|
||||||
|
drawString(0, row * lineHeight, str);
|
||||||
|
}
|
||||||
|
|
||||||
|
void DisplayUI::drawLine(int x1, int y1, int x2, int y2) {
|
||||||
|
display.drawLine(x1, y1, x2, y2);
|
||||||
|
}
|
||||||
|
// ====================== //
|
||||||
|
|
||||||
|
void DisplayUI::on() {
|
||||||
|
if (enabled) {
|
||||||
|
configOn();
|
||||||
mode = SCREEN_MODE_MENU;
|
mode = SCREEN_MODE_MENU;
|
||||||
buttonUp.time = currentTime; // update a button time to keep display on
|
buttonUp.time = currentTime; // update a button time to keep display on
|
||||||
prntln(D_MSG_DISPLAY_ON);
|
prntln(D_MSG_DISPLAY_ON);
|
||||||
} else {
|
} else {
|
||||||
prntln(D_ERROR_NOT_ENABLED);
|
prntln(D_ERROR_NOT_ENABLED);
|
||||||
}
|
}
|
||||||
// ====================== //
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void DisplayUI::off() {
|
void DisplayUI::off() {
|
||||||
// ===== adjustable ===== //
|
|
||||||
if (enabled) {
|
if (enabled) {
|
||||||
display.displayOff();
|
configOff();
|
||||||
mode = SCREEN_MODE_OFF;
|
mode = SCREEN_MODE_OFF;
|
||||||
prntln(D_MSG_DISPLAY_OFF);
|
prntln(D_MSG_DISPLAY_OFF);
|
||||||
} else {
|
} else {
|
||||||
prntln(D_ERROR_NOT_ENABLED);
|
prntln(D_ERROR_NOT_ENABLED);
|
||||||
}
|
}
|
||||||
// ====================== //
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void DisplayUI::setupButtons() {
|
void DisplayUI::setupButtons() {
|
||||||
// ===== adjustable ===== //
|
|
||||||
|
|
||||||
#ifdef BUTTON_UP
|
#ifdef BUTTON_UP
|
||||||
buttonUp.enabled = true;
|
buttonUp.enabled = true;
|
||||||
buttonUp.gpio = BUTTON_UP;
|
buttonUp.gpio = BUTTON_UP;
|
||||||
@@ -150,8 +181,6 @@ void DisplayUI::setupButtons() {
|
|||||||
buttonB.read = [this]() {
|
buttonB.read = [this]() {
|
||||||
return !digitalRead(buttonB.gpio);
|
return !digitalRead(buttonB.gpio);
|
||||||
};
|
};
|
||||||
|
|
||||||
// ====================== //
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void DisplayUI::setup() {
|
void DisplayUI::setup() {
|
||||||
@@ -352,16 +381,16 @@ void DisplayUI::setup() {
|
|||||||
// SHOW MENU
|
// SHOW MENU
|
||||||
createMenu(&showMenu, &mainMenu, [this]() {
|
createMenu(&showMenu, &mainMenu, [this]() {
|
||||||
addMenuNode(&showMenu, []() { // Accesspoints 0 [0]
|
addMenuNode(&showMenu, []() { // Accesspoints 0 [0]
|
||||||
return buildString(str(D_ACCESSPOINTS), (String)accesspoints.count(), CHARS_PER_LINE);
|
return leftRight(str(D_ACCESSPOINTS), (String)accesspoints.count(), CHARS_PER_LINE);
|
||||||
}, &apListMenu);
|
}, &apListMenu);
|
||||||
addMenuNode(&showMenu, []() { // Stations 0 [0]
|
addMenuNode(&showMenu, []() { // Stations 0 [0]
|
||||||
return buildString(str(D_STATIONS), (String)stations.count(), CHARS_PER_LINE);
|
return leftRight(str(D_STATIONS), (String)stations.count(), CHARS_PER_LINE);
|
||||||
}, &stationListMenu);
|
}, &stationListMenu);
|
||||||
addMenuNode(&showMenu, []() { // Names 0 [0]
|
addMenuNode(&showMenu, []() { // Names 0 [0]
|
||||||
return buildString(str(D_NAMES), (String)names.count(), CHARS_PER_LINE);
|
return leftRight(str(D_NAMES), (String)names.count(), CHARS_PER_LINE);
|
||||||
}, &nameListMenu);
|
}, &nameListMenu);
|
||||||
addMenuNode(&showMenu, []() { // SSIDs 0
|
addMenuNode(&showMenu, []() { // SSIDs 0
|
||||||
return buildString(str(D_SSIDS), (String)ssids.count(), CHARS_PER_LINE);
|
return leftRight(str(D_SSIDS), (String)ssids.count(), CHARS_PER_LINE);
|
||||||
}, &ssidListMenu);
|
}, &ssidListMenu);
|
||||||
});
|
});
|
||||||
|
|
||||||
@@ -629,10 +658,10 @@ void DisplayUI::setup() {
|
|||||||
// ATTACK MENU
|
// ATTACK MENU
|
||||||
createMenu(&attackMenu, &mainMenu, [this]() {
|
createMenu(&attackMenu, &mainMenu, [this]() {
|
||||||
addMenuNode(&attackMenu, [this]() { // *DEAUTH 0/0
|
addMenuNode(&attackMenu, [this]() { // *DEAUTH 0/0
|
||||||
if (attack.isRunning()) return buildString(b2a(deauthSelected) + str(D_DEAUTH),
|
if (attack.isRunning()) return leftRight(b2a(deauthSelected) + str(D_DEAUTH),
|
||||||
(String)attack.getDeauthPkts() + SLASH +
|
(String)attack.getDeauthPkts() + SLASH +
|
||||||
(String)attack.getDeauthMaxPkts(), CHARS_PER_LINE);
|
(String)attack.getDeauthMaxPkts(), CHARS_PER_LINE);
|
||||||
else return buildString(b2a(deauthSelected) + str(D_DEAUTH), (String)scan.countSelected(), CHARS_PER_LINE);
|
else return leftRight(b2a(deauthSelected) + str(D_DEAUTH), (String)scan.countSelected(), CHARS_PER_LINE);
|
||||||
}, [this]() { // deauth
|
}, [this]() { // deauth
|
||||||
deauthSelected = !deauthSelected;
|
deauthSelected = !deauthSelected;
|
||||||
|
|
||||||
@@ -642,10 +671,10 @@ void DisplayUI::setup() {
|
|||||||
}
|
}
|
||||||
});
|
});
|
||||||
addMenuNode(&attackMenu, [this]() { // *BEACON 0/0
|
addMenuNode(&attackMenu, [this]() { // *BEACON 0/0
|
||||||
if (attack.isRunning()) return buildString(b2a(beaconSelected) + str(D_BEACON),
|
if (attack.isRunning()) return leftRight(b2a(beaconSelected) + str(D_BEACON),
|
||||||
(String)attack.getBeaconPkts() + SLASH +
|
(String)attack.getBeaconPkts() + SLASH +
|
||||||
(String)attack.getBeaconMaxPkts(), CHARS_PER_LINE);
|
(String)attack.getBeaconMaxPkts(), CHARS_PER_LINE);
|
||||||
else return buildString(b2a(beaconSelected) + str(D_BEACON), (String)ssids.count(), CHARS_PER_LINE);
|
else return leftRight(b2a(beaconSelected) + str(D_BEACON), (String)ssids.count(), CHARS_PER_LINE);
|
||||||
}, [this]() { // beacon
|
}, [this]() { // beacon
|
||||||
beaconSelected = !beaconSelected;
|
beaconSelected = !beaconSelected;
|
||||||
|
|
||||||
@@ -655,10 +684,10 @@ void DisplayUI::setup() {
|
|||||||
}
|
}
|
||||||
});
|
});
|
||||||
addMenuNode(&attackMenu, [this]() { // *PROBE 0/0
|
addMenuNode(&attackMenu, [this]() { // *PROBE 0/0
|
||||||
if (attack.isRunning()) return buildString(b2a(probeSelected) + str(D_PROBE),
|
if (attack.isRunning()) return leftRight(b2a(probeSelected) + str(D_PROBE),
|
||||||
(String)attack.getProbePkts() + SLASH +
|
(String)attack.getProbePkts() + SLASH +
|
||||||
(String)attack.getProbeMaxPkts(), CHARS_PER_LINE);
|
(String)attack.getProbeMaxPkts(), CHARS_PER_LINE);
|
||||||
else return buildString(b2a(probeSelected) + str(D_PROBE), (String)ssids.count(), CHARS_PER_LINE);
|
else return leftRight(b2a(probeSelected) + str(D_PROBE), (String)ssids.count(), CHARS_PER_LINE);
|
||||||
}, [this]() { // probe
|
}, [this]() { // probe
|
||||||
probeSelected = !probeSelected;
|
probeSelected = !probeSelected;
|
||||||
|
|
||||||
@@ -668,7 +697,7 @@ void DisplayUI::setup() {
|
|||||||
}
|
}
|
||||||
});
|
});
|
||||||
addMenuNode(&attackMenu, []() { // START
|
addMenuNode(&attackMenu, []() { // START
|
||||||
return buildString(str(attack.isRunning() ? D_STOP_ATTACK : D_START_ATTACK),
|
return leftRight(str(attack.isRunning() ? D_STOP_ATTACK : D_START_ATTACK),
|
||||||
attack.getPacketRate() > 0 ? (String)attack.getPacketRate() : String(), CHARS_PER_LINE);
|
attack.getPacketRate() > 0 ? (String)attack.getPacketRate() : String(), CHARS_PER_LINE);
|
||||||
}, [this]() {
|
}, [this]() {
|
||||||
if (attack.isRunning()) attack.stop();
|
if (attack.isRunning()) attack.stop();
|
||||||
@@ -727,10 +756,7 @@ void DisplayUI::draw() {
|
|||||||
if ((currentTime - drawTime > DRAW_INTERVAL) && currentMenu) {
|
if ((currentTime - drawTime > DRAW_INTERVAL) && currentMenu) {
|
||||||
drawTime = currentTime;
|
drawTime = currentTime;
|
||||||
|
|
||||||
// ===== adjustable ===== //
|
updatePrefix();
|
||||||
display.clear(); // clear display
|
|
||||||
display.setTextAlignment(TEXT_ALIGN_LEFT); // reset text alignment just in case ;)
|
|
||||||
// ====================== //
|
|
||||||
|
|
||||||
switch (mode) {
|
switch (mode) {
|
||||||
case SCREEN_MODE_BUTTON_TEST:
|
case SCREEN_MODE_BUTTON_TEST:
|
||||||
@@ -758,32 +784,22 @@ void DisplayUI::draw() {
|
|||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
// ===== adjustable ===== //
|
updateSuffix();
|
||||||
display.display(); // draw changes
|
|
||||||
// ====================== //
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void DisplayUI::drawString(int x, int y, String str) {
|
|
||||||
// ===== adjustable ===== //
|
|
||||||
display.drawString(x, y, replaceUtf8(str, String(QUESTIONMARK)));
|
|
||||||
// ====================== //
|
|
||||||
}
|
|
||||||
|
|
||||||
void DisplayUI::drawButtonTest() {
|
void DisplayUI::drawButtonTest() {
|
||||||
// ===== adjustable ===== //
|
if (buttonUp.enabled) drawString(0, 0, str(D_UP) + b2s(buttonUp.pushed));
|
||||||
if (buttonUp.enabled) display.drawString(0, 0, str(D_UP) + b2s(buttonUp.pushed));
|
|
||||||
|
|
||||||
if (buttonDown.enabled) display.drawString(0, 9, str(D_DOWN) + b2s(buttonDown.pushed));
|
if (buttonDown.enabled) drawString(0, 9, str(D_DOWN) + b2s(buttonDown.pushed));
|
||||||
|
|
||||||
if (buttonLeft.enabled) display.drawString(0, 18, str(D_LEFT) + b2s(buttonLeft.pushed));
|
if (buttonLeft.enabled) drawString(0, 18, str(D_LEFT) + b2s(buttonLeft.pushed));
|
||||||
|
|
||||||
if (buttonRight.enabled) display.drawString(0, 27, str(D_RIGHT) + b2s(buttonRight.pushed));
|
if (buttonRight.enabled) drawString(0, 27, str(D_RIGHT) + b2s(buttonRight.pushed));
|
||||||
|
|
||||||
if (buttonA.enabled) display.drawString(0, 36, str(D_A) + b2s(buttonA.pushed));
|
if (buttonA.enabled) drawString(0, 36, str(D_A) + b2s(buttonA.pushed));
|
||||||
|
|
||||||
if (buttonB.enabled) display.drawString(0, 45, str(D_B) + b2s(buttonB.pushed));
|
if (buttonB.enabled) drawString(0, 45, str(D_B) + b2s(buttonB.pushed));
|
||||||
// ====================== //
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void DisplayUI::drawMenu() {
|
void DisplayUI::drawMenu() {
|
||||||
@@ -814,53 +830,47 @@ void DisplayUI::drawMenu() {
|
|||||||
}
|
}
|
||||||
|
|
||||||
void DisplayUI::drawLoadingScan() {
|
void DisplayUI::drawLoadingScan() {
|
||||||
// ===== adjustable ===== //
|
String percentage;
|
||||||
|
|
||||||
if (scan.isScanning()) {
|
if (scan.isScanning()) {
|
||||||
if (scan.isSniffing()) { // Scanning for Stations
|
percentage = String(scan.getPercentage()) + '%';
|
||||||
display.drawString(2, 0,
|
|
||||||
buildString(str(D_LOADING_SCREEN_0), (String)scan.getPercentage() + PERCENT,
|
|
||||||
CHARS_PER_LINE));
|
|
||||||
display.drawProgressBar(5, 22, 118, 8, scan.getPercentage());
|
|
||||||
display.drawString(2, 36, str(D_LOADING_SCREEN_1) + (String)accesspoints.count());
|
|
||||||
display.drawString(2, 50, str(D_LOADING_SCREEN_2) + (String)stations.count());
|
|
||||||
} else { // Scanning for APs
|
|
||||||
display.drawString(2, 10, str(D_LOADING_SCREEN_3));
|
|
||||||
display.drawString(2, 24, str(D_LOADING_SCREEN_4));
|
|
||||||
}
|
|
||||||
} else {
|
} else {
|
||||||
mode = SCREEN_MODE_MENU;
|
percentage = String(DSP_SCAN_DONE);
|
||||||
changeMenu(&showMenu);
|
|
||||||
}
|
}
|
||||||
// ====================== //
|
|
||||||
|
drawString(0, leftRight(String(DSP_SCAN_FOR), scan.getMode(), maxLen));
|
||||||
|
drawString(1, leftRight(String(DSP_APS), String(accesspoints.count()), maxLen));
|
||||||
|
drawString(2, leftRight(String(DSP_STS), String(stations.count()), maxLen));
|
||||||
|
drawString(3, leftRight(String(DSP_PKTS), String(scan.getPacketRate()) + String(DSP_S), maxLen));
|
||||||
|
drawString(4, center(percentage, maxLen));
|
||||||
|
}
|
||||||
|
|
||||||
|
String DisplayUI::getChannel() {
|
||||||
|
String ch = String(wifi_channel);
|
||||||
|
if(ch.length() < 2) ch = ' ' + ch;
|
||||||
|
return ch;
|
||||||
}
|
}
|
||||||
|
|
||||||
void DisplayUI::drawPacketMonitor() {
|
void DisplayUI::drawPacketMonitor() {
|
||||||
// ===== adjustable ===== //
|
|
||||||
double scale = scan.getScaleFactor(50);
|
double scale = scan.getScaleFactor(50);
|
||||||
|
|
||||||
display.drawString(0, 0, str(D_CH) + String(wifi_channel));
|
String headline = leftRight(str(D_CH) + getChannel() + String(' ') + String('[') + String(scan.deauths) + String(']'), String(scan.getPacketRate()) + str(D_PKTS) , maxLen);
|
||||||
display.drawString(40, 0, str(D_PKTS) + String(scan.getPacketRate()));
|
drawString(0, 0, headline);
|
||||||
display.setTextAlignment(TEXT_ALIGN_RIGHT);
|
|
||||||
display.drawString(128, 0, String(scan.deauths));
|
|
||||||
display.setTextAlignment(TEXT_ALIGN_LEFT);
|
|
||||||
|
|
||||||
if (scan.getMaxPacket() > 0) {
|
if (scan.getMaxPacket() > 0) {
|
||||||
for (int i = 0; i < SCAN_PACKET_LIST_SIZE * 2; i += 2) {
|
for (int i = 0; i < SCAN_PACKET_LIST_SIZE * 2; i += 2) {
|
||||||
display.drawLine(i, 64, i, 64 - scan.getPackets(i / 2) * scale);
|
drawLine(i, 64, i, 64 - scan.getPackets(i / 2) * scale);
|
||||||
display.drawLine(i + 1, 64, i + 1, 64 - scan.getPackets(i / 2) * scale);
|
drawLine(i + 1, 64, i + 1, 64 - scan.getPackets(i / 2) * scale);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
// ====================== //
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void DisplayUI::drawIntro() {
|
void DisplayUI::drawIntro() {
|
||||||
// ===== adjustable ===== //
|
drawString(0, lineHeight*0, center(String(F("")), maxLen));
|
||||||
display.setTextAlignment(TEXT_ALIGN_CENTER);
|
drawString(0, lineHeight*1, center(String(F("ESP8266 Deauther")), maxLen));
|
||||||
display.drawString(64, 6, String(F("ESP8266 Deauther")));
|
drawString(0, lineHeight*2, center(String(F("by @Spacehuhn")), maxLen));
|
||||||
display.drawString(64, 20, String(F("by @Spacehuhn")));
|
drawString(0, lineHeight*3, center(String(F("")), maxLen));
|
||||||
display.drawString(64, 34, String(F("")));
|
drawString(0, lineHeight*4, center(settings.getVersion(), maxLen));
|
||||||
display.drawString(64, 48, settings.getVersion());
|
|
||||||
// ====================== //
|
|
||||||
}
|
}
|
||||||
|
|
||||||
bool DisplayUI::updateButton(Button* button) {
|
bool DisplayUI::updateButton(Button* button) {
|
||||||
|
|||||||
@@ -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();
|
||||||
|
|||||||
@@ -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);
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -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);
|
||||||
|
|
||||||
|
|||||||
@@ -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);
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -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 {
|
||||||
|
|||||||
@@ -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();
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -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();
|
||||||
|
|||||||
@@ -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);
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -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));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -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";
|
||||||
|
|||||||
Reference in New Issue
Block a user