Compare commits

...

8 Commits

Author SHA1 Message Date
Just Call Me Koko
0491b4a798 Merge pull request #1093 from justcallmekoko/develop
Reduce frame buffer size for non-PSRAM
2026-01-30 15:53:58 -05:00
Just Call Me Koko
29b6783168 Fix for LDDB 2026-01-30 15:43:20 -05:00
Just Call Me Koko
01f21e0459 Reduce frame buffer size for non-PSRAM 2026-01-30 15:27:24 -05:00
Just Call Me Koko
ef6aec0b38 Merge pull request #1090 from justcallmekoko/develop
Fix Station Wardrive and Sniff titles
2026-01-29 11:03:17 -05:00
Just Call Me Koko
4a3fa3812f Fix station wardrive and sniff title 2026-01-29 10:56:16 -05:00
Just Call Me Koko
2eb5974a69 Verbose 2026-01-29 09:36:34 -05:00
Just Call Me Koko
a7bc611ede Merge pull request #1089 from justcallmekoko/develop
Add soft display buffer cap
2026-01-28 16:03:59 -05:00
Just Call Me Koko
d3d76a1fc4 Add soft display buffer cap 2026-01-28 14:45:09 -05:00
4 changed files with 72 additions and 46 deletions

View File

@@ -505,21 +505,26 @@ void Display::displayBuffer(bool do_clear)
{
if (this->display_buffer->size() > 0)
{
int print_count = 10;
while ((display_buffer->size() > 0) && (print_count > 0))
{
// Freeze adding to display buffer
if (display_buffer->size() > DISPLAY_BUFFER_LIMIT)
this->printing = true;
#ifndef SCREEN_BUFFER
xPos = 0;
if ((display_buffer->size() > 0) && (!loading))
{
printing = true;
//printing = true;
delay(print_delay_1);
yDraw = scroll_line(TFT_RED);
tft.setCursor(xPos, yDraw);
tft.setTextColor(TFT_GREEN, TFT_BLACK);
tft.print(display_buffer->shift());
printing = false;
//printing = false;
delay(print_delay_2);
}
if (!tteBar)
@@ -545,6 +550,8 @@ void Display::displayBuffer(bool do_clear)
print_count--;
}
this->printing = false;
}
}

View File

@@ -9,8 +9,8 @@
static const uint8_t *g_filter_bssid = nullptr;
uint8_t *current_act = nullptr;
MacEntry WiFiScan::mac_entries[mac_history_len];
uint8_t WiFiScan::mac_entry_state[mac_history_len];
MacEntry WiFiScan::mac_entries[mac_history_len_half];
uint8_t WiFiScan::mac_entry_state[mac_history_len_half];
int num_beacon = 0;
int num_deauth = 0;
@@ -493,11 +493,11 @@ extern "C" {
Serial.println();
while (display_obj.printing)
delay(1);
display_obj.loading = true;
display_obj.display_buffer->add(display_string);
display_obj.loading = false;
if (!display_obj.printing) {
display_obj.loading = true;
display_obj.display_buffer->add(display_string);
display_obj.loading = false;
}
#endif
}
}
@@ -971,11 +971,11 @@ extern "C" {
{
display_string.concat(" ");
}
while (display_obj.printing)
delay(1);
display_obj.loading = true;
display_obj.display_buffer->add(display_string);
display_obj.loading = false;
if (!display_obj.printing) {
display_obj.loading = true;
display_obj.display_buffer->add(display_string);
display_obj.loading = false;
}
}
#endif
}
@@ -1194,11 +1194,11 @@ extern "C" {
Serial.println();
while (display_obj.printing)
delay(1);
display_obj.loading = true;
display_obj.display_buffer->add(display_string);
display_obj.loading = false;
if (!display_obj.printing) {
display_obj.loading = true;
display_obj.display_buffer->add(display_string);
display_obj.loading = false;
}
#endif
}
}
@@ -1654,11 +1654,11 @@ extern "C" {
{
display_string.concat(" ");
}
while (display_obj.printing)
delay(1);
display_obj.loading = true;
display_obj.display_buffer->add(display_string);
display_obj.loading = false;
if (!display_obj.printing) {
display_obj.loading = true;
display_obj.display_buffer->add(display_string);
display_obj.loading = false;
}
}
#endif
}
@@ -1721,7 +1721,7 @@ void WiFiScan::RunSetup() {
mac_history = (struct mac_addr*) ps_malloc(mac_history_len * sizeof(struct mac_addr));
#endif
for (int i = 0; i < mac_history_len; i++)
for (int i = 0; i < mac_history_len_half; i++)
mac_entry_state[i] = 0;
#ifdef HAS_BT
@@ -1762,6 +1762,8 @@ void WiFiScan::RunSetup() {
this->shutdownBLE();
Serial.println("Initializing WiFi...");
esp_wifi_init(&cfg);
#ifdef HAS_IDF_3
esp_wifi_set_country(&country);
@@ -1773,7 +1775,9 @@ void WiFiScan::RunSetup() {
esp_wifi_get_mac(WIFI_IF_STA, this->sta_mac);
delay(10);
esp_wifi_get_mac(WIFI_IF_AP, this->ap_mac);
Serial.println("Setting MAC...");
this->setMac();
Serial.println("Shutting down WiFi...");
this->shutdownWiFi();
#endif
@@ -2360,6 +2364,10 @@ bool WiFiScan::shutdownBLE() {
pBLEScan->clearResults();
delay(100);
Serial.println("Deinitializing NimBLE...");
//#ifndef HAS_DUAL_BAND
NimBLEDevice::deinit();
//#endif
@@ -2629,7 +2637,7 @@ int16_t WiFiScan::seen_mac_int(unsigned char* mac, bool simple) {
tmp[x] = mac[x];
}
for (int x = 0; x < mac_history_len; x++) {
for (int x = 0; x < mac_history_len_half; x++) {
if (this->mac_cmp(tmp, mac_entries[x].mac)) {
return x;
}
@@ -2650,12 +2658,12 @@ inline uint32_t WiFiScan::hash_mac(const uint8_t mac[6]) {
int WiFiScan::update_mac_entry(const uint8_t mac[6], int8_t rssi, bool bt) {
const uint32_t now_ms = millis();
const uint32_t start_idx = hash_mac(mac) & (mac_history_len - 1);
const uint32_t start_idx = hash_mac(mac) & (mac_history_len_half - 1);
int32_t first_tombstone = -1;
for (uint32_t probe = 0; probe < mac_history_len; probe++) {
const uint32_t idx = (start_idx + probe) & (mac_history_len - 1);
for (uint32_t probe = 0; probe < mac_history_len_half; probe++) {
const uint32_t idx = (start_idx + probe) & (mac_history_len_half - 1);
switch (mac_entry_state[idx]) {
@@ -2691,7 +2699,7 @@ int WiFiScan::update_mac_entry(const uint8_t mac[6], int8_t rssi, bool bt) {
mac_entries[idx].rssi = rssi;
return idx + mac_history_len;
return idx + mac_history_len_half;
}
break;
}
@@ -2729,7 +2737,7 @@ void WiFiScan::evict_and_insert(const uint8_t mac[6], uint32_t now_ms) {
const uint32_t EVICT_AGE_MS = TRACK_EVICT_SEC * 1000UL;
// 1) Prefer reusing a tombstone if any exist.
for (uint32_t i = 0; i < mac_history_len; i++) {
for (uint32_t i = 0; i < mac_history_len_half; i++) {
if (mac_entry_state[i] == TOMBSTONE_ENTRY) {
insert_mac_entry(i, mac, now_ms);
return;
@@ -2746,7 +2754,7 @@ void WiFiScan::evict_and_insert(const uint8_t mac[6], uint32_t now_ms) {
uint16_t victim_any_frames = 0xFFFF;
uint32_t victim_any_age = 0;
for (uint32_t i = 0; i < mac_history_len; i++) {
for (uint32_t i = 0; i < mac_history_len_half; i++) {
if (mac_entry_state[i] != VALID_ENTRY) continue;
const uint32_t age = (uint32_t)(now_ms - mac_entries[i].last_seen_ms);
@@ -2882,7 +2890,7 @@ uint8_t WiFiScan::build_top10_for_ui(MacEntry* out_top10, MacSortMode mode) {
}
};
for (uint32_t i = 0; i < mac_history_len; i++) {
for (uint32_t i = 0; i < mac_history_len_half; i++) {
if (mac_entry_state[i] != VALID_ENTRY)
continue;
@@ -5030,7 +5038,7 @@ void WiFiScan::RunStationScan(uint8_t scan_mode, uint16_t color)
display_obj.print_delay_2 = 10;
display_obj.initScrollValues(true);
display_obj.tft.setTextWrap(false);
display_obj.tft.setTextColor(TFT_WHITE, color);
display_obj.tft.setTextColor(TFT_BLACK, color);
#ifdef HAS_FULL_SCREEN
display_obj.tft.fillRect(0,16,TFT_WIDTH,16, color);
display_obj.tft.drawCentreString(text_table1[59],TFT_WIDTH / 2,16,2);
@@ -5311,6 +5319,8 @@ void WiFiScan::RunProbeScan(uint8_t scan_mode, uint16_t color)
display_obj.tft.drawCentreString(text_table4[40],TFT_WIDTH / 2,16,2);
else if (scan_mode == WIFI_SCAN_DETECT_FOLLOW)
display_obj.tft.drawCentreString("MAC Monitor",TFT_WIDTH / 2,16,2);
else if (scan_mode == WIFI_SCAN_STATION_WAR_DRIVE)
display_obj.tft.drawCentreString("Station Wardrive",TFT_WIDTH / 2,16,2);
else {
Serial.println(F("Starting WiFi sniff for Flock..."));
display_obj.tft.drawCentreString("Flock Sniff",TFT_WIDTH / 2,16,2);
@@ -7701,7 +7711,11 @@ void WiFiScan::beaconSnifferCallback(void* buf, wifi_promiscuous_pkt_type_t type
Serial.print(F(" "));
display_obj.display_buffer->add(display_string);
if (!display_obj.printing) {
display_obj.loading = true;
display_obj.display_buffer->add(display_string);
display_obj.loading = false;
}
#endif
Serial.println();
@@ -8071,12 +8085,12 @@ void WiFiScan::beaconSnifferCallback(void* buf, wifi_promiscuous_pkt_type_t type
else if (wifi_scan_obj.currentScanMode == WIFI_SCAN_DETECT_FOLLOW) {
int frame_check = wifi_scan_obj.update_mac_entry(src_addr, snifferPacket->rx_ctrl.rssi);
if (frame_check >= mac_history_len) {
if (frame_check >= mac_history_len_half) {
int32_t dloc = 0;
bool is_following = is_following_candidate_light(wifi_scan_obj.mac_entries[frame_check - mac_history_len], millis(), &dloc);
bool is_following = is_following_candidate_light(wifi_scan_obj.mac_entries[frame_check - mac_history_len_half], millis(), &dloc);
if (is_following) {
wifi_scan_obj.mac_entries[frame_check - mac_history_len].dloc = dloc;
wifi_scan_obj.mac_entries[frame_check - mac_history_len].following = is_following;
wifi_scan_obj.mac_entries[frame_check - mac_history_len_half].dloc = dloc;
wifi_scan_obj.mac_entries[frame_check - mac_history_len_half].following = is_following;
buffer_obj.append(snifferPacket, len);
}
}

View File

@@ -662,8 +662,8 @@ class WiFiScan
volatile bool bt_pending_clear = false;
static MacEntry mac_entries[mac_history_len];
static uint8_t mac_entry_state[mac_history_len];
static MacEntry mac_entries[mac_history_len_half];
static uint8_t mac_entry_state[mac_history_len_half];
// Stuff for RAW stats
uint32_t mgmt_frames = 0;

View File

@@ -34,7 +34,7 @@
//#define MARAUDER_V8
//// END BOARD TARGETS
#define MARAUDER_VERSION "v1.10.1"
#define MARAUDER_VERSION "v1.10.2"
#define GRAPH_REFRESH 100
@@ -42,6 +42,8 @@
#define DUAL_BAND_CHANNELS 51
#define DISPLAY_BUFFER_LIMIT 20
//// HARDWARE NAMES
#ifdef MARAUDER_M5STICKC
#define HARDWARE_NAME "M5Stick-C Plus"
@@ -153,7 +155,7 @@
#define HAS_BT
#define HAS_BT_REMOTE
#define HAS_BUTTONS
#define HAS_NEOPIXEL_LED
//#define HAS_NEOPIXEL_LED
//#define HAS_PWR_MGMT
#define HAS_SCREEN
#define HAS_FULL_SCREEN
@@ -2332,6 +2334,8 @@
#define mac_history_len 100
#endif
#define mac_history_len_half (mac_history_len / 2)
#if defined(MARAUDER_V6) || defined(MARAUDER_V6_1)
#define GPS_SERIAL_INDEX 2
#define GPS_TX 4
@@ -2407,6 +2411,7 @@
#endif
#else
#define mac_history_len 100
#define mac_history_len_half (mac_history_len / 2)
#endif
//// END GPS STUFF
@@ -2517,9 +2522,9 @@
#ifdef HAS_PSRAM
#define BUF_SIZE 8 * 1024 // Had to reduce buffer size to save RAM. GG @spacehuhn
#define SNAP_LEN 1 * 4096 // max len of each recieved packet
#elif !defined(HAS_ILI9341)
#define BUF_SIZE 8 * 1024 // Had to reduce buffer size to save RAM. GG @spacehuhn
#define SNAP_LEN 4096 // max len of each recieved packet
//#elif !defined(HAS_ILI9341)
// #define BUF_SIZE 8 * 1024 // Had to reduce buffer size to save RAM. GG @spacehuhn
// #define SNAP_LEN 4096 // max len of each recieved packet
#else
#define BUF_SIZE 3 * 1024 // Had to reduce buffer size to save RAM. GG @spacehuhn
#define SNAP_LEN 2324 // max len of each recieved packet