mirror of
https://github.com/SpacehuhnTech/esp8266_deauther.git
synced 2025-12-22 14:40:05 +01:00
Refactored LED class
No more sub classes for faster compile times. Libraries like Neopixel are only included if needed and there are less variables in the RAM.
This commit is contained in:
@@ -14,6 +14,7 @@ CLI::~CLI() {}
|
||||
|
||||
void CLI::load() {
|
||||
String defaultValue = String(CLI_DEFAULT_AUTOSTART);
|
||||
|
||||
checkFile(execPath, defaultValue);
|
||||
execFile(execPath);
|
||||
}
|
||||
@@ -689,7 +690,7 @@ void CLI::runCommand(String input) {
|
||||
// ===== STOP ===== //
|
||||
// stop [<mode>]
|
||||
else if (eqlsCMD(0, CLI_STOP)) {
|
||||
led.setMode(led.LED_MODE::IDLE, true);
|
||||
led.setMode(IDLE, true);
|
||||
|
||||
if ((list->size() >= 2) && !(eqlsCMD(1, CLI_ALL))) {
|
||||
for (int i = 1; i < list->size(); i++) {
|
||||
|
||||
@@ -1,79 +1,72 @@
|
||||
#include "LED.h"
|
||||
|
||||
LED::LED() {}
|
||||
// Strings used in printColor and tempDisable
|
||||
#include "language.h"
|
||||
|
||||
LED::~LED() {
|
||||
if (led) delete led;
|
||||
}
|
||||
// For Update()
|
||||
#include "Settings.h"
|
||||
#include "Attack.h"
|
||||
#include "Scan.h"
|
||||
|
||||
void LED::setup() {
|
||||
#if defined(DIGITAL_LED)
|
||||
led = new DigitalLED(LED_PIN_R, LED_PIN_G, LED_PIN_B, LED_ANODE);
|
||||
led->setup();
|
||||
#elif defined(RGB_LED)
|
||||
led = new LED::AnalogRGBLED(LED_PIN_R, LED_PIN_G, LED_PIN_B, LED_MODE_BRIGHTNESS, LED_ANODE);
|
||||
led->setup();
|
||||
#elif defined(NEOPIXEL_LED)
|
||||
led = new LED::NeopixelLED(LED_NEOPIXEL_NUM, LED_NEOPIXEL_PIN, LED_MODE_BRIGHTNESS);
|
||||
led->setup();
|
||||
#endif // if defined(DIGITAL_LED)
|
||||
}
|
||||
extern Settings settings;
|
||||
extern Attack attack;
|
||||
extern Scan scan;
|
||||
|
||||
void LED::update() {
|
||||
if (!tempEnabled || !led) return;
|
||||
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);
|
||||
}
|
||||
|
||||
void LED::setMode(uint8_t mode, bool force) {
|
||||
if (!led) return;
|
||||
|
||||
if ((mode != LED::mode) || force) {
|
||||
LED::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;
|
||||
if (!settings.getLedEnabled() && tempEnabled) {
|
||||
tempDisable();
|
||||
}
|
||||
|
||||
if (scan.isScanning() && (scan.deauths < settings.getMinDeauths())) {
|
||||
setMode(SCAN);
|
||||
} else if (scan.deauths >= settings.getMinDeauths()) {
|
||||
setMode(DEAUTH);
|
||||
} else if (attack.isRunning()) {
|
||||
setMode(ATTACK);
|
||||
} else {
|
||||
setMode(IDLE);
|
||||
}
|
||||
}
|
||||
|
||||
void LED::setColor(uint8_t r, uint8_t g, uint8_t b, bool output) {
|
||||
// debug output
|
||||
if (output) {
|
||||
void LED::printColor(uint8_t r, uint8_t g, uint8_t b) {
|
||||
char s[30];
|
||||
|
||||
sprintf_P(s, L_OUTPUT, r, g, b);
|
||||
prnt(String(s));
|
||||
}
|
||||
|
||||
led->setColor(r, g, b);
|
||||
}
|
||||
|
||||
void LED::setColor(uint8_t r, uint8_t g, uint8_t b, uint8_t brightness, bool output) {
|
||||
led->setBrightness(brightness);
|
||||
setColor(r, g, b, output);
|
||||
void LED::setMode(LED_MODE mode, bool force) {
|
||||
if ((mode != this->mode) || force) {
|
||||
this->mode = mode;
|
||||
|
||||
switch (mode) {
|
||||
case OFF:
|
||||
setColor(0, 0, 0);
|
||||
break;
|
||||
|
||||
case SCAN:
|
||||
setColor(0, 0, 255);
|
||||
break;
|
||||
|
||||
case ATTACK:
|
||||
setColor(255, 0, 0);
|
||||
break;
|
||||
|
||||
case DEAUTH:
|
||||
setColor(255, 0, 0);
|
||||
break;
|
||||
|
||||
case IDLE:
|
||||
setColor(0, 255, 0);
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
void LED::setBrightness(uint8_t brightness) {
|
||||
this->brightness = brightness % 100;
|
||||
}
|
||||
|
||||
void LED::tempEnable() {
|
||||
@@ -89,117 +82,3 @@ void LED::tempDisable() {
|
||||
bool LED::getTempEnabled() {
|
||||
return tempEnabled;
|
||||
}
|
||||
|
||||
#ifdef DIGITAL_LED
|
||||
// ===== DigitalLED ===== //
|
||||
LED::DigitalLED::DigitalLED(uint8_t rPin, uint8_t gPin, uint8_t bPin, bool anode) {
|
||||
LED::DigitalLED::anode = anode;
|
||||
LED::DigitalLED::rPin = rPin;
|
||||
LED::DigitalLED::gPin = gPin;
|
||||
LED::DigitalLED::bPin = bPin;
|
||||
}
|
||||
|
||||
LED::DigitalLED::~DigitalLED() {}
|
||||
|
||||
void LED::DigitalLED::setup() {
|
||||
if (rPin < 255) pinMode(rPin, OUTPUT);
|
||||
|
||||
if (gPin < 255) pinMode(gPin, OUTPUT);
|
||||
|
||||
if (bPin < 255) pinMode(bPin, OUTPUT);
|
||||
}
|
||||
|
||||
void LED::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 LED::DigitalLED::setBrightness(uint8_t brightness) {}
|
||||
#endif
|
||||
|
||||
#ifdef RGB_LED
|
||||
// ===== AnalogRGBLED ===== //
|
||||
LED::AnalogRGBLED::AnalogRGBLED(uint8_t rPin, uint8_t gPin, uint8_t bPin, uint8_t brightness, bool anode) {
|
||||
LED::AnalogRGBLED::anode = anode;
|
||||
LED::AnalogRGBLED::rPin = rPin;
|
||||
LED::AnalogRGBLED::gPin = gPin;
|
||||
LED::AnalogRGBLED::bPin = bPin;
|
||||
|
||||
setBrightness(brightness);
|
||||
}
|
||||
|
||||
LED::AnalogRGBLED::~AnalogRGBLED() {}
|
||||
|
||||
void LED::AnalogRGBLED::setup() {
|
||||
analogWriteRange(0xff);
|
||||
|
||||
if (rPin < 255) pinMode(rPin, OUTPUT);
|
||||
|
||||
if (gPin < 255) pinMode(gPin, OUTPUT);
|
||||
|
||||
if (bPin < 255) pinMode(bPin, OUTPUT);
|
||||
}
|
||||
|
||||
void LED::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 LED::AnalogRGBLED::setBrightness(uint8_t brightness) {
|
||||
if (brightness > 100) brightness = 100;
|
||||
LED::AnalogRGBLED::brightness = brightness;
|
||||
}
|
||||
#endif
|
||||
|
||||
#ifdef NEOPIXEL_LED
|
||||
// ===== NeopixelLED ===== //
|
||||
LED::NeopixelLED::NeopixelLED(int num, uint8_t dataPin, uint8_t brightness) {
|
||||
strip = new Adafruit_NeoPixel(num, dataPin, LED_NEOPIXEL_MODE);
|
||||
setBrightness(brightness);
|
||||
}
|
||||
|
||||
LED::NeopixelLED::~NeopixelLED() {
|
||||
delete strip;
|
||||
}
|
||||
|
||||
void LED::NeopixelLED::setup() {
|
||||
strip->begin();
|
||||
strip->show();
|
||||
}
|
||||
|
||||
void LED::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 LED::NeopixelLED::setBrightness(uint8_t brightness) {
|
||||
if (brightness > 100) brightness = 100;
|
||||
strip->setBrightness(brightness);
|
||||
}
|
||||
#endif
|
||||
|
||||
@@ -1,107 +1,126 @@
|
||||
#ifndef LED_h
|
||||
#define LED_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 "Arduino.h" // digitalWrite, analogWrite, pinMode
|
||||
#include "A_config.h" // Config for LEDs
|
||||
|
||||
// Inlcude libraries for Neopixel or MY92xx if used
|
||||
#if defined(NEOPIXEL_LED)
|
||||
#include <Adafruit_NeoPixel.h>
|
||||
#elif defined(MY92)
|
||||
#include <my92xx.h>
|
||||
#endif // if defined(NEOPIXEL_LED)
|
||||
|
||||
extern Settings settings;
|
||||
extern Attack attack;
|
||||
extern Scan scan;
|
||||
extern Stations stations;
|
||||
enum LED_MODE {
|
||||
OFF = 0,
|
||||
SCAN = 1,
|
||||
ATTACK = 2,
|
||||
DEAUTH = 3,
|
||||
IDLE = 4
|
||||
};
|
||||
|
||||
class LED {
|
||||
private:
|
||||
bool tempEnabled = true;
|
||||
LED_MODE mode = OFF;
|
||||
|
||||
uint8_t brightness = 100;
|
||||
|
||||
#if defined(NEOPIXEL_LED)
|
||||
Adafruit_NeoPixel strip(LED_NEOPIXEL_NUM, LED_NEOPIXEL_PIN, LED_NEOPIXEL_MODE);
|
||||
#elif defined(MY92)
|
||||
my92xx myled(MY92_MODEL, MY92_NUM, MY92_DATA, MY92_CLK, MY92XX_COMMAND_DEFAULT);
|
||||
#endif // if defined(NEOPIXEL_LED)
|
||||
|
||||
public:
|
||||
enum LED_MODE { OFF = 0, SCAN = 1, ATTACK = 2, DEAUTH = 3, IDLE = 4 };
|
||||
void setup() {
|
||||
analogWriteRange(0xff);
|
||||
|
||||
LED();
|
||||
~LED();
|
||||
#if defined(LED_MODE_BRIGHTNESS)
|
||||
brightness = LED_MODE_BRIGHTNESS;
|
||||
#endif // if defined(LED_MODE_BRIGHTNESS)
|
||||
|
||||
#if defined(DIGITAL_LED) || defined(RGB_LED)
|
||||
if (LED_PIN_R < 255) pinMode(LED_PIN_R, OUTPUT);
|
||||
if (LED_PIN_G < 255) pinMode(LED_PIN_G, OUTPUT);
|
||||
if (LED_PIN_B < 255) pinMode(LED_PIN_B, OUTPUT);
|
||||
#elif defined(NEOPIXEL_LED)
|
||||
strip.begin();
|
||||
strip.setBrightness(brightness);
|
||||
strip.show();
|
||||
#elif defined(MY9291)
|
||||
myled.setChannel(MY92_CH_R, 0);
|
||||
myled.setChannel(MY92_CH_G, 0);
|
||||
myled.setChannel(MY92_CH_B, 0);
|
||||
myled->setChannel(MY92_CH_BRIGHTNESS, brightness);
|
||||
myled->setChannel(3, 100);
|
||||
myled.setState(true);
|
||||
myled.update();
|
||||
#endif // if defined(DIGITAL_LED) || defined(RGB_LED)
|
||||
}
|
||||
|
||||
void setup();
|
||||
void update();
|
||||
|
||||
void setMode(uint8_t mode, bool force);
|
||||
void printColor(uint8_t r, uint8_t g, uint8_t b);
|
||||
|
||||
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 setMode(LED_MODE mode, bool force = false);
|
||||
void setBrightness(uint8_t brightness);
|
||||
|
||||
void setColor(uint8_t r, uint8_t g, uint8_t b, uint8_t brightness, bool output = false) {
|
||||
setBrightness(brightness);
|
||||
setColor(r, g, b, output);
|
||||
}
|
||||
|
||||
void setColor(uint8_t r, uint8_t g, uint8_t b, bool output = false) {
|
||||
if (output) printColor(r, g, b);
|
||||
|
||||
#if defined(DIGITAL_LED)
|
||||
if (LED_ANODE) {
|
||||
if (LED_PIN_R < 255) digitalWrite(LED_PIN_R, r > 0);
|
||||
if (LED_PIN_G < 255) digitalWrite(LED_PIN_G, g > 0);
|
||||
if (LED_PIN_B < 255) digitalWrite(LED_PIN_B, b > 0);
|
||||
} else {
|
||||
if (LED_PIN_R < 255) digitalWrite(LED_PIN_R, r == 0);
|
||||
if (LED_PIN_G < 255) digitalWrite(LED_PIN_G, g == 0);
|
||||
if (LED_PIN_B < 255) digitalWrite(LED_PIN_B, b == 0);
|
||||
}
|
||||
#elif defined(RGB_LED)
|
||||
if ((r > 0) && (brightness > 0)) r = r * brightness / 100;
|
||||
if ((g > 0) && (brightness > 0)) g = g * brightness / 100;
|
||||
if ((b > 0) && (brightness > 0)) b = b * brightness / 100;
|
||||
|
||||
if (LED_ANODE) {
|
||||
r = 255 - r;
|
||||
g = 255 - g;
|
||||
b = 255 - b;
|
||||
}
|
||||
|
||||
analogWrite(LED_PIN_R, r);
|
||||
analogWrite(LED_PIN_G, g);
|
||||
analogWrite(LED_PIN_B, b);
|
||||
#elif defined(NEOPIXEL_LED)
|
||||
if ((r > 0) && (brightness > 0)) r = r * brightness / 100;
|
||||
if ((g > 0) && (brightness > 0)) g = g * brightness / 100;
|
||||
if ((b > 0) && (brightness > 0)) b = b * brightness / 100;
|
||||
|
||||
for (size_t i = 0; i < LED_NEOPIXEL_NUM; i++) {
|
||||
strip.setPixelColor(i, r, g, b);
|
||||
}
|
||||
|
||||
strip.show();
|
||||
#elif defined(MY9291)
|
||||
myled->setChannel(MY92_CH_R, r);
|
||||
myled->setChannel(MY92_CH_G, g);
|
||||
myled->setChannel(MY92_CH_B, b);
|
||||
myled->setChannel(MY92_CH_BRIGHTNESS, brightness);
|
||||
myled->setState(true);
|
||||
myled->update();
|
||||
#endif // if defined(DIGITAL_LED)
|
||||
}
|
||||
|
||||
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;
|
||||
};
|
||||
#ifdef DIGITAL_LED
|
||||
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;
|
||||
};
|
||||
#endif
|
||||
#ifdef RGB_LED
|
||||
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;
|
||||
};
|
||||
#endif
|
||||
#ifdef NEOPIXEL_LED
|
||||
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;
|
||||
};
|
||||
#endif
|
||||
bool tempEnabled = true;
|
||||
uint8_t mode = LED_MODE::OFF;
|
||||
StatusLED* led = NULL;
|
||||
};
|
||||
|
||||
#endif // ifndef LED_h
|
||||
Reference in New Issue
Block a user