Files
bw16-research/WiFiX-Enhanced/src/oled_display.h

193 lines
5.1 KiB
C++

#ifndef OLED_DISPLAY_H
#define OLED_DISPLAY_H
#include <Arduino.h>
#include <Wire.h>
#include <Adafruit_GFX.h>
#include <Adafruit_SSD1306.h>
#include <WiFi.h>
// Display configuration
#define SCREEN_WIDTH 128
#define SCREEN_HEIGHT 64
#define OLED_RESET -1
#define SCREEN_ADDRESS 0x3C
// Display pages
enum DisplayPage {
PAGE_BOOT = 0,
PAGE_MAIN_STATUS,
PAGE_ATTACK_STATUS,
PAGE_CREDENTIAL_COUNT,
PAGE_NETWORK_INFO,
PAGE_SYSTEM_INFO,
PAGE_ERROR,
PAGE_COUNT
};
// Attack status types
enum AttackStatus {
ATTACK_IDLE = 0,
ATTACK_SCANNING,
ATTACK_DEAUTH_ACTIVE,
ATTACK_PORTAL_ACTIVE,
ATTACK_SUCCESS,
ATTACK_FAILED
};
// System status
struct SystemStatus {
bool esp32_online;
bool bw16_online;
bool ai_online;
bool wifi_connected;
uint8_t wifi_signal;
uint32_t uptime;
uint32_t free_memory;
float cpu_usage;
uint8_t temperature;
};
// Attack information
struct AttackInfo {
AttackStatus status;
String target_ssid;
String target_bssid;
uint8_t target_channel;
uint32_t deauth_packets_sent;
uint32_t portal_connections;
uint32_t credentials_captured;
uint32_t attack_duration;
float success_rate;
String last_error;
};
// Network information
struct NetworkInfo {
String ap_ssid;
String ap_password;
IPAddress ap_ip;
uint8_t connected_clients;
String sta_ssid;
IPAddress sta_ip;
uint8_t nearby_networks;
};
class OLEDDisplay {
private:
Adafruit_SSD1306* display;
DisplayPage current_page;
uint32_t last_update;
uint32_t page_switch_time;
bool auto_rotate;
uint8_t brightness;
bool display_enabled;
// Status data
SystemStatus system_status;
AttackInfo attack_info;
NetworkInfo network_info;
// Animation variables
uint8_t animation_frame;
uint32_t last_animation;
bool blink_state;
// Display methods
void drawBootScreen();
void drawMainStatus();
void drawAttackStatus();
void drawCredentialCount();
void drawNetworkInfo();
void drawSystemInfo();
void drawErrorScreen();
// Helper methods
void drawHeader(const char* title);
void drawFooter();
void drawProgressBar(int x, int y, int width, int height, float progress);
void drawSignalBars(int x, int y, uint8_t signal_strength);
void drawBattery(int x, int y, uint8_t level);
void drawWiFiIcon(int x, int y, bool connected);
void drawStatusIcon(int x, int y, bool status, const char* icon);
void drawScrollingText(int x, int y, const String& text, int max_width);
// Animation methods
void updateAnimations();
void drawLoadingAnimation(int x, int y);
void drawPulseAnimation(int x, int y, int radius);
// Text formatting
String formatUptime(uint32_t seconds);
String formatMemory(uint32_t bytes);
String formatDuration(uint32_t seconds);
String truncateString(const String& str, int max_chars);
public:
OLEDDisplay();
~OLEDDisplay();
// Initialization
bool begin(uint8_t i2c_address = SCREEN_ADDRESS);
void setBrightness(uint8_t brightness);
void setAutoRotate(bool enable);
void enable(bool enabled);
// Page management
void setPage(DisplayPage page);
void nextPage();
void previousPage();
DisplayPage getCurrentPage() const { return current_page; }
// Status updates
void updateSystemStatus(const SystemStatus& status);
void updateAttackInfo(const AttackInfo& info);
void updateNetworkInfo(const NetworkInfo& info);
// Quick status updates
void setAttackStatus(AttackStatus status, const String& target = "");
void setCredentialCount(uint32_t count);
void setError(const String& error);
void clearError();
// Display control
void update();
void clear();
void showMessage(const String& message, uint32_t duration_ms = 2000);
void showProgress(const String& message, float progress);
// Utility methods
void drawCenteredText(const String& text, int y);
void drawRightAlignedText(const String& text, int x, int y);
void drawWrappedText(const String& text, int x, int y, int max_width);
// Debug methods
void printStatus();
void testDisplay();
};
// Global instance
extern OLEDDisplay oledDisplay;
// Convenience macros
#define OLED_LOG(msg) Serial.println("[OLED] " + String(msg))
#define OLED_LOG_F(fmt, ...) Serial.printf("[OLED] " fmt "\n", ##__VA_ARGS__)
// Display update intervals (ms)
#define DISPLAY_UPDATE_INTERVAL 100
#define PAGE_AUTO_SWITCH_INTERVAL 5000
#define ANIMATION_UPDATE_INTERVAL 200
// Icons (8x8 bitmaps)
extern const unsigned char PROGMEM icon_wifi_connected[];
extern const unsigned char PROGMEM icon_wifi_disconnected[];
extern const unsigned char PROGMEM icon_bluetooth[];
extern const unsigned char PROGMEM icon_lora[];
extern const unsigned char PROGMEM icon_zigbee[];
extern const unsigned char PROGMEM icon_attack[];
extern const unsigned char PROGMEM icon_shield[];
extern const unsigned char PROGMEM icon_warning[];
extern const unsigned char PROGMEM icon_success[];
extern const unsigned char PROGMEM icon_error[];
#endif // OLED_DISPLAY_H