From c44444aa465b58fc3779e0c899ce641d9f5cdeab Mon Sep 17 00:00:00 2001 From: Stefan Kremser Date: Wed, 6 Jun 2018 08:00:10 +0200 Subject: [PATCH] Whoops, deleted too much :D --- esp8266_deauther/LEDController.cpp | 211 +++++++++++++++++++++++++++++ esp8266_deauther/LEDController.h | 105 ++++++++++++++ esp8266_deauther/Neopixel.cpp | 27 ---- esp8266_deauther/RGBLed.cpp | 115 ---------------- esp8266_deauther/RGBLed.h | 46 ------- 5 files changed, 316 insertions(+), 188 deletions(-) create mode 100644 esp8266_deauther/LEDController.cpp create mode 100644 esp8266_deauther/LEDController.h delete mode 100644 esp8266_deauther/Neopixel.cpp delete mode 100644 esp8266_deauther/RGBLed.cpp delete mode 100644 esp8266_deauther/RGBLed.h diff --git a/esp8266_deauther/LEDController.cpp b/esp8266_deauther/LEDController.cpp new file mode 100644 index 0000000..b9e8537 --- /dev/null +++ b/esp8266_deauther/LEDController.cpp @@ -0,0 +1,211 @@ +#include "LEDController.h" + +LEDController::LEDController() {} + +LEDController::~LEDController() { + if (led) delete led; +} + +void LEDController::setup() { + #ifdef DIGITAL_LED + led = new DigitalLED(LED_PIN_R, LED_PIN_G, LED_PIN_B, LED_ANODE); + led->setup(); + return; + + #endif // ifdef DIGITAL_LED + + #ifdef RGB_LED + led = new LEDController::AnalogRGBLED(LED_PIN_R, LED_PIN_G, LED_PIN_B, LED_MODE_BRIGHTNESS, LED_ANODE); + led->setup(); + return; + + #endif // ifdef RGB_LED + + #ifdef NEOPIXEL_LED + led = new LEDController::NeopixelLED(LED_NEOPIXEL_NUM, LED_NEOPIXEL_PIN, LED_MODE_BRIGHTNESS); + led->setup(); + return; + + #endif // ifdef NEOPIXEL_LED + + prntln(L_NOT_CONFIGURED); +} + +void LEDController::update() { + if (!tempEnabled || !led) return; + + if (!settings.getLedEnabled() && tempEnabled) tempDisable(); + + if (scan.isScanning() && (scan.deauths < settings.getMinDeauths())) setMode(LED_MODE::SCAN, false); + else if (scan.deauths >= settings.getMinDeauths()) setMode(LED_MODE::DEAUTH, false); + else if (attack.isRunning()) setMode(LED_MODE::ATTACK, false); + else setMode(LED_MODE::IDLE, false); +} + +void LEDController::setMode(uint8_t mode, bool force) { + if (!led) return; + + if ((mode != LEDController::mode) || force) { + LEDController::mode = mode; + + switch (mode) { + case LED_MODE::OFF: + led->setColor(0, 0, 0); + break; + + case LED_MODE::SCAN: + led->setColor(0, 0, 255); + break; + + case LED_MODE::ATTACK: + led->setColor(255, 255, 0); + break; + + case LED_MODE::DEAUTH: + led->setColor(255, 0, 0); + break; + + case LED_MODE::IDLE: + led->setColor(0, 255, 0); + break; + } + } +} + +void LEDController::setColor(uint8_t r, uint8_t g, uint8_t b, bool output) { + // debug output + if (output) { + char s[30]; + sprintf_P(s, L_OUTPUT, r, g, b); + prnt(String(s)); + } + + led->setColor(r, g, b); +} + +void LEDController::setColor(uint8_t r, uint8_t g, uint8_t b, uint8_t brightness, bool output) { + led->setBrightness(brightness); + setColor(r, g, b, output); +} + +void LEDController::tempEnable() { + tempEnabled = true; + prntln(L_ENABLED); +} + +void LEDController::tempDisable() { + tempEnabled = false; + prntln(L_DISABLED); +} + +bool LEDController::getTempEnabled() { + return tempEnabled; +} + +// ===== DigitalLED ===== // +LEDController::DigitalLED::DigitalLED(uint8_t rPin, uint8_t gPin, uint8_t bPin, bool anode) { + LEDController::DigitalLED::anode = anode; + LEDController::DigitalLED::rPin = rPin; + LEDController::DigitalLED::gPin = gPin; + LEDController::DigitalLED::bPin = bPin; +} + +LEDController::DigitalLED::~DigitalLED() {} + +void LEDController::DigitalLED::setup() { + if (rPin < 255) pinMode(rPin, OUTPUT); + + if (gPin < 255) pinMode(gPin, OUTPUT); + + if (bPin < 255) pinMode(bPin, OUTPUT); +} + +void LEDController::DigitalLED::setColor(uint8_t r, uint8_t g, uint8_t b) { + if (anode) { + if (rPin < 255) digitalWrite(rPin, r > 0); + + if (gPin < 255) digitalWrite(gPin, g > 0); + + if (bPin < 255) digitalWrite(bPin, b > 0); + } else { + if (rPin < 255) digitalWrite(rPin, r == 0); + + if (gPin < 255) digitalWrite(gPin, g == 0); + + if (bPin < 255) digitalWrite(bPin, b == 0); + } +} + +void LEDController::DigitalLED::setBrightness(uint8_t brightness) {} + + +// ===== AnalogRGBLED ===== // +LEDController::AnalogRGBLED::AnalogRGBLED(uint8_t rPin, uint8_t gPin, uint8_t bPin, uint8_t brightness, bool anode) { + LEDController::AnalogRGBLED::anode = anode; + LEDController::AnalogRGBLED::rPin = rPin; + LEDController::AnalogRGBLED::gPin = gPin; + LEDController::AnalogRGBLED::bPin = bPin; + setBrightness(brightness); +} + +LEDController::AnalogRGBLED::~AnalogRGBLED() {} + +void LEDController::AnalogRGBLED::setup() { + analogWriteRange(0xff); + + if (rPin < 255) pinMode(rPin, OUTPUT); + + if (gPin < 255) pinMode(gPin, OUTPUT); + + if (bPin < 255) pinMode(bPin, OUTPUT); +} + +void LEDController::AnalogRGBLED::setColor(uint8_t r, uint8_t g, uint8_t b) { + if ((r > 0) && (brightness < 100)) r = r * brightness / 100; + + if ((g > 0) && (brightness < 100)) g = g * brightness / 100; + + if ((b > 0) && (brightness < 100)) b = b * brightness / 100; + + if (anode) { + r = 255 - r; + g = 255 - g; + b = 255 - b; + } + + analogWrite(rPin, r); + analogWrite(gPin, g); + analogWrite(bPin, b); +} + +void LEDController::AnalogRGBLED::setBrightness(uint8_t brightness) { + if (brightness > 100) brightness = 100; + LEDController::AnalogRGBLED::brightness = brightness; +} + +// ===== NeopixelLED ===== // +LEDController::NeopixelLED::NeopixelLED(int num, uint8_t dataPin, uint8_t brightness) { + strip = new Adafruit_NeoPixel(num, dataPin, LED_NEOPIXEL_MODE); + setBrightness(brightness); +} + +LEDController::NeopixelLED::~NeopixelLED() { + delete strip; +} + +void LEDController::NeopixelLED::setup() { + strip->begin(); + strip->show(); +} + +void LEDController::NeopixelLED::setColor(uint8_t r, uint8_t g, uint8_t b) { + int num = strip->numPixels(); + + for (uint16_t i = 0; i < num; i++) strip->setPixelColor(i, strip->Color(r, g, b)); + strip->show(); +} + +void LEDController::NeopixelLED::setBrightness(uint8_t brightness) { + if (brightness > 100) brightness = 100; + strip->setBrightness(brightness); +} \ No newline at end of file diff --git a/esp8266_deauther/LEDController.h b/esp8266_deauther/LEDController.h new file mode 100644 index 0000000..79d6add --- /dev/null +++ b/esp8266_deauther/LEDController.h @@ -0,0 +1,105 @@ +#ifndef LEDController_h +#define LEDController_h + +#include "Arduino.h" +extern "C" { + #include "user_interface.h" +} +#include "language.h" +#include "A_config.h" +#include "Settings.h" +#include "Attack.h" +#include "Scan.h" + +#include + +extern Settings settings; +extern Attack attack; +extern Scan scan; +extern Stations stations; + +class LEDController { + public: + enum LED_MODE { OFF = 0, SCAN = 1, ATTACK = 2, DEAUTH = 3, IDLE = 4 }; + + LEDController(); + ~LEDController(); + + void setup(); + void update(); + + void setMode(uint8_t mode, bool force); + + void setColor(uint8_t r, uint8_t g, uint8_t b, bool output); + void setColor(uint8_t r, uint8_t g, uint8_t b, uint8_t brightness, bool output); + + void tempEnable(); + void tempDisable(); + bool getTempEnabled(); + + private: + class StatusLED { + public: + virtual ~StatusLED() = default; + + virtual void setup() = 0; + + virtual void setColor(uint8_t r, uint8_t g, uint8_t b) = 0; + virtual void setBrightness(uint8_t brightness) = 0; + }; + + class DigitalLED : public StatusLED { + public: + DigitalLED(uint8_t rPin, uint8_t gPin, uint8_t bPin, bool anode); + ~DigitalLED(); + + void setup(); + void setColor(uint8_t r, uint8_t g, uint8_t b); + void setBrightness(uint8_t brightness); + void setMode(uint8_t mode, bool force); + + private: + bool anode = true; + uint8_t rPin = 255; + uint8_t gPin = 255; + uint8_t bPin = 255; + }; + + class AnalogRGBLED : public StatusLED { + public: + AnalogRGBLED(uint8_t rPin, uint8_t gPin, uint8_t bPin, uint8_t brightness, bool anode); + ~AnalogRGBLED(); + + void setup(); + void setColor(uint8_t r, uint8_t g, uint8_t b); + void setBrightness(uint8_t brightness); + void setMode(uint8_t mode, bool force); + + private: + bool anode = true; + uint8_t rPin = 255; + uint8_t gPin = 255; + uint8_t bPin = 255; + uint8_t brightness = 0; + }; + + class NeopixelLED : public StatusLED { + public: + NeopixelLED(int num, uint8_t dataPin, uint8_t brightness); + ~NeopixelLED(); + + void setup(); + void setColor(uint8_t r, uint8_t g, uint8_t b); + void setBrightness(uint8_t brightness); + void setMode(uint8_t mode, bool force); + + private: + Adafruit_NeoPixel* strip; + }; + + bool tempEnabled = true; + uint8_t mode = LED_MODE::OFF; + StatusLED* led = NULL; +}; + +#endif // ifndef LEDController_h \ No newline at end of file diff --git a/esp8266_deauther/Neopixel.cpp b/esp8266_deauther/Neopixel.cpp deleted file mode 100644 index 15e7e2e..0000000 --- a/esp8266_deauther/Neopixel.cpp +++ /dev/null @@ -1,27 +0,0 @@ -#include "NeopixelLED.h" - -NeopixelLED::NeopixelLED(int num, uint8_t dataPin, uint8_t brightness) { - strip = new Adafruit_NeoPixel(num, dataPin, NEO_GRB + NEO_KHZ800); - setBrightness(brightness); -} - -NeopixelLED::~NeopixelLED() { - delete strip; -} - -void NeopixelLED::setup() { - strip->begin(); - strip->show(); -} - -void NeopixelLED::setColor(uint8_t r, uint8_t g, uint8_t b) { - int num = strip->numPixels(); - - for (uint16_t i = 0; i < num; i++) strip->setPixelColor(i, strip->Color(r, g, b)); - strip->show(); -} - -void NeopixelLED::setBrightness(uint8_t brightness) { - if (brightness > 100) brightness = 100; - strip->setBrightness(brightness); -} \ No newline at end of file diff --git a/esp8266_deauther/RGBLed.cpp b/esp8266_deauther/RGBLed.cpp deleted file mode 100644 index 89a35e9..0000000 --- a/esp8266_deauther/RGBLed.cpp +++ /dev/null @@ -1,115 +0,0 @@ -#include "RGBLed.h" - -RGBLed::RGBLed() { - -} - -// setup pins -void RGBLed::setup(){ - if(!settings.getLedEnabled()) return; - - // ===== adjustable ===== // - pinMode(LED_PIN_R, OUTPUT); - pinMode(LED_PIN_G, OUTPUT); - pinMode(LED_PIN_B, OUTPUT); - // ====================== // - - setMode(LED_MODE_OFF, true); -} - -void RGBLed::setColor(uint8_t r, uint8_t g, uint8_t b, uint8_t brightness, bool output) { - // debug output - if (output){ - char s[30]; - sprintf(s,str(L_OUTPUT_A).c_str(), r, g, b); - prnt(String(s)); - } - - // ===== adjustable ===== // - if (brightness > 0 && brightness < 100) { - if (r > 0 && brightness < 100) r = r * brightness / 100; - if (g > 0 && brightness < 100) g = g * brightness / 100; - if (b > 0 && brightness < 100) b = b * brightness / 100; - } - - if (!LED_CATHODE) { - r = 255 - r; - g = 255 - g; - b = 255 - b; - } - - analogWrite(LED_PIN_R, r); - analogWrite(LED_PIN_G, g); - analogWrite(LED_PIN_B, b); - // ====================== // - - // debug output - if (output){ - char s[30]; - sprintf(s,str(L_OUTPUT_B).c_str(), r?255:0, g?255:0, b?255:0); - prnt(String(s)); - } -} - -// customize color codes for different LED modes -void RGBLed::setMode(uint8_t mode, bool force) { - // ===== adjustable ===== // - if (mode != RGBLed::mode || force) { - RGBLed::mode = mode; - switch (mode) { - case LED_MODE_OFF: - setColor(0, 0, 0, LED_MODE_BRIGHTNESS, false); - break; - case LED_MODE_SCAN: - if(LED_DYNAMIC_BRIGHTNESS) setColor(0, 0, 255, (uint8_t)(scan.getScaleFactor(100)*scan.getPacketRate()), false); // change color depending on packet rate - else setColor(0, 0, 255, LED_MODE_BRIGHTNESS, false); - break; - case LED_MODE_ATTACK: - setColor(255, 255, 0, LED_MODE_BRIGHTNESS, false); - break; - case LED_MODE_DEAUTH: - if(LED_DYNAMIC_BRIGHTNESS) setColor(255, 0, 0, scan.deauths > 255 ? 255 : scan.deauths , false); // brightness depending on how many deauths/s - else setColor(255, 0, 0, LED_MODE_BRIGHTNESS, false); - break; - case LED_MODE_IDLE: - setColor(0, 255, 0, LED_MODE_BRIGHTNESS, false); - break; - } - } - // ====================== // -} - -void RGBLed::tempEnable() { - tempEnabled = true; - prntln(L_ENABLED); -} - -void RGBLed::tempDisable() { - tempEnabled = false; - prntln(L_DISABLED); -} - -bool RGBLed::getTempEnabled() { - return tempEnabled; -} - -void RGBLed::setColor(uint8_t r, uint8_t g, uint8_t b) { - setColor(r, g, b, 100, true); -} - -void RGBLed::setColor(uint8_t r, uint8_t g, uint8_t b, uint8_t brightness) { - setColor(r, g, b, brightness, true); -} - -void RGBLed::update() { - if (!tempEnabled) return; - if (!settings.getLedEnabled() && tempEnabled) tempDisable(); - - if (scan.isScanning() && scan.deauths < settings.getMinDeauths()) setMode(LED_MODE_SCAN, false); - else if (scan.deauths >= settings.getMinDeauths()) setMode(LED_MODE_DEAUTH, false); - else if (attack.isRunning()) setMode(LED_MODE_ATTACK, false); - else setMode(LED_MODE_IDLE, false); -} - - - diff --git a/esp8266_deauther/RGBLed.h b/esp8266_deauther/RGBLed.h deleted file mode 100644 index 951995f..0000000 --- a/esp8266_deauther/RGBLed.h +++ /dev/null @@ -1,46 +0,0 @@ -#ifndef RGBLed_h -#define RGBLed_h - -#include "Arduino.h" -#include -extern "C" { - #include "user_interface.h" -} -#include "language.h" -#include "A_config.h" -#include "Settings.h" -#include "Attack.h" -#include "Scan.h" - -#define LED_MODE_OFF 0 -#define LED_MODE_SCAN 1 -#define LED_MODE_ATTACK 2 -#define LED_MODE_DEAUTH 3 -#define LED_MODE_IDLE 4 - -extern Settings settings; -extern Attack attack; -extern Scan scan; -extern Stations stations; - -class RGBLed { - public: - RGBLed(); - void setup(); - void setColor(uint8_t r, uint8_t g, uint8_t b); - void setColor(uint8_t r, uint8_t g, uint8_t b, uint8_t brightness); - void setMode(uint8_t mode, bool force); - void update(); - void tempEnable(); - void tempDisable(); - bool getTempEnabled(); - private: - uint8_t mode; - bool tempEnabled = true; - void setColor(uint8_t r, uint8_t g, uint8_t b, uint8_t brightness, bool output); -}; - -#endif - - -