From 6ac9b9a198325bed1463dd136c992dd18ff5a5cd Mon Sep 17 00:00:00 2001 From: Felix Pankratz Date: Sun, 24 Dec 2023 14:26:57 +0100 Subject: [PATCH] gauge mode, fixes, idk its been to long --- platformio.ini | 1 - src/main.cpp | 93 +++++++++++++++++++++++++++++++++++++------------- 2 files changed, 69 insertions(+), 25 deletions(-) diff --git a/platformio.ini b/platformio.ini index 1820f36..b2ac37c 100644 --- a/platformio.ini +++ b/platformio.ini @@ -7,4 +7,3 @@ build_flags = '-DESP_IDF_LWIP_HOOK_FILENAME="lwip_hooks.h"' lib_deps = adafruit/Adafruit NeoPixel - diff --git a/src/main.cpp b/src/main.cpp index 63838fb..60be935 100644 --- a/src/main.cpp +++ b/src/main.cpp @@ -12,12 +12,28 @@ #define PROTO_TCP 6 #define PROTO_UDP 17 -char ssid[] = "MyWifi"; // your network SSID (name) +enum mode{Disco, Gauge}; +enum mode active_mode = Disco; + +char ssid[] = "MySSID"; // your network SSID (name) char pass[] = "MyPassphrase"; // your network password (use for WPA, or use as key for WEP) Adafruit_NeoPixel pixels(NUMPIXELS, PIN_NEOPIXEL, NEO_GRB + NEO_KHZ800); Adafruit_NeoPixel onboard_pixel(1, PIN_NEOPIXEL_ONBOARD, NEO_GRB + NEO_KHZ800); +long last_gauge_show = 0; +int packets_received = 0; +uint32_t gauge_colors[] = { + pixels.Color(0, 255, 0), // red + pixels.Color(128, 255, 0), + pixels.Color(191, 255, 0), + pixels.Color(255, 255, 0), // yellow + pixels.Color(255, 191, 0), + pixels.Color(255, 128, 0), + pixels.Color(255, 64, 0), + pixels.Color(255, 0, 0) // red +}; + void ssh_attempt() { printf("Someone connected to SSH!"); pixels.fill(pixels.Color(255, 0, 0)); @@ -34,15 +50,11 @@ void ssh_attempt() { } void icmp_ping() { - pixels.setPixelColor(2, pixels.Color(255, 255, 255)); pixels.setPixelColor(3, pixels.Color(255, 255, 255)); - pixels.setPixelColor(6, pixels.Color(255, 255, 255)); pixels.setPixelColor(7, pixels.Color(255, 255, 255)); pixels.show(); delay(100); - pixels.setPixelColor(2, 0); pixels.setPixelColor(3, 0); - pixels.setPixelColor(6, 0); pixels.setPixelColor(7, 0); pixels.show(); } @@ -50,25 +62,43 @@ void icmp_ping() { extern "C" { void log_packet(uint16_t port, u16_t proto) { if (WiFi.status() == WL_CONNECTED) { - uint32_t color = pixels.ColorHSV(port); - switch (proto) { - case PROTO_ICMP: - icmp_ping(); - break; - case PROTO_TCP: - if (port == 22) { - ssh_attempt(); - } else { - pixels.setPixelColor(0, color); - pixels.setPixelColor(1, color); + if (active_mode == Disco) { + uint32_t color = pixels.ColorHSV(port); + switch (proto) { + case PROTO_ICMP: + icmp_ping(); + break; + case PROTO_TCP: + if (port == 22) { + ssh_attempt(); + } else { + pixels.setPixelColor(0, color); + pixels.setPixelColor(1, color); + pixels.setPixelColor(2, color); + pixels.show(); + } + break; + case PROTO_UDP: + pixels.setPixelColor(4, color); + pixels.setPixelColor(5, color); + pixels.setPixelColor(6, color); pixels.show(); - } - break; - case PROTO_UDP: - pixels.setPixelColor(4, color); - pixels.setPixelColor(5, color); - pixels.show(); - break; + break; + } + } else if (active_mode == Gauge) { + packets_received++; + if (millis() - last_gauge_show > 200) { + int num_leds = round(log((double)packets_received)); + printf("gauge: Packets: %d LEDs: %d", packets_received, num_leds); + if (num_leds > NUMPIXELS) {num_leds = NUMPIXELS;} + pixels.clear(); + for(int i = 0; i < num_leds; i++) { + pixels.setPixelColor(i, gauge_colors[i]); + } + pixels.show(); + packets_received = 0; + last_gauge_show = millis(); + } } } } @@ -100,12 +130,27 @@ extern "C" void app_main() } onboard_pixel.fill(onboard_pixel.Color(0, 255, 0)); onboard_pixel.show(); + printf("\nConnected!\n"); printf("SSID: %s\n", WiFi.SSID().c_str()); printf("IP: %s\n", WiFi.localIP().toString().c_str()); + long last_touch = 0; + // Arduino-like loop() while(true){ - ; + int capacity = touchRead(8); + if (capacity > 20000) { + long cur_time = millis(); + if (cur_time - last_touch > 500) { + active_mode = mode((active_mode + 1) % (Gauge + 1)); + pixels.clear(); + printf("changed mode: %u!\n", active_mode); + if (active_mode == Gauge) { + last_gauge_show = millis(); + } + last_touch = cur_time; + } + } } }