mirror of
https://github.com/SpacehuhnTech/esp8266_deauther.git
synced 2025-12-21 23:01:00 -08: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() {
|
void CLI::load() {
|
||||||
String defaultValue = String(CLI_DEFAULT_AUTOSTART);
|
String defaultValue = String(CLI_DEFAULT_AUTOSTART);
|
||||||
|
|
||||||
checkFile(execPath, defaultValue);
|
checkFile(execPath, defaultValue);
|
||||||
execFile(execPath);
|
execFile(execPath);
|
||||||
}
|
}
|
||||||
@@ -689,7 +690,7 @@ void CLI::runCommand(String input) {
|
|||||||
// ===== STOP ===== //
|
// ===== STOP ===== //
|
||||||
// stop [<mode>]
|
// stop [<mode>]
|
||||||
else if (eqlsCMD(0, CLI_STOP)) {
|
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))) {
|
if ((list->size() >= 2) && !(eqlsCMD(1, CLI_ALL))) {
|
||||||
for (int i = 1; i < list->size(); i++) {
|
for (int i = 1; i < list->size(); i++) {
|
||||||
|
|||||||
@@ -1,79 +1,72 @@
|
|||||||
#include "LED.h"
|
#include "LED.h"
|
||||||
|
|
||||||
LED::LED() {}
|
// Strings used in printColor and tempDisable
|
||||||
|
#include "language.h"
|
||||||
|
|
||||||
LED::~LED() {
|
// For Update()
|
||||||
if (led) delete led;
|
#include "Settings.h"
|
||||||
}
|
#include "Attack.h"
|
||||||
|
#include "Scan.h"
|
||||||
|
|
||||||
void LED::setup() {
|
extern Settings settings;
|
||||||
#if defined(DIGITAL_LED)
|
extern Attack attack;
|
||||||
led = new DigitalLED(LED_PIN_R, LED_PIN_G, LED_PIN_B, LED_ANODE);
|
extern Scan scan;
|
||||||
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)
|
|
||||||
}
|
|
||||||
|
|
||||||
void LED::update() {
|
void LED::update() {
|
||||||
if (!tempEnabled || !led) return;
|
if (!tempEnabled) return;
|
||||||
|
|
||||||
if (!settings.getLedEnabled() && tempEnabled) tempDisable();
|
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 (scan.isScanning() && (scan.deauths < settings.getMinDeauths())) {
|
||||||
if (!led) return;
|
setMode(SCAN);
|
||||||
|
} else if (scan.deauths >= settings.getMinDeauths()) {
|
||||||
if ((mode != LED::mode) || force) {
|
setMode(DEAUTH);
|
||||||
LED::mode = mode;
|
} else if (attack.isRunning()) {
|
||||||
|
setMode(ATTACK);
|
||||||
switch (mode) {
|
} else {
|
||||||
case LED_MODE::OFF:
|
setMode(IDLE);
|
||||||
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 LED::setColor(uint8_t r, uint8_t g, uint8_t b, bool output) {
|
void LED::printColor(uint8_t r, uint8_t g, uint8_t b) {
|
||||||
// debug output
|
|
||||||
if (output) {
|
|
||||||
char s[30];
|
char s[30];
|
||||||
|
|
||||||
sprintf_P(s, L_OUTPUT, r, g, b);
|
sprintf_P(s, L_OUTPUT, r, g, b);
|
||||||
prnt(String(s));
|
prnt(String(s));
|
||||||
}
|
}
|
||||||
|
|
||||||
led->setColor(r, g, b);
|
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::setColor(uint8_t r, uint8_t g, uint8_t b, uint8_t brightness, bool output) {
|
void LED::setBrightness(uint8_t brightness) {
|
||||||
led->setBrightness(brightness);
|
this->brightness = brightness % 100;
|
||||||
setColor(r, g, b, output);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void LED::tempEnable() {
|
void LED::tempEnable() {
|
||||||
@@ -89,117 +82,3 @@ void LED::tempDisable() {
|
|||||||
bool LED::getTempEnabled() {
|
bool LED::getTempEnabled() {
|
||||||
return tempEnabled;
|
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
|
#ifndef LED_h
|
||||||
#define LED_h
|
#define LED_h
|
||||||
|
|
||||||
#include "Arduino.h"
|
#include "Arduino.h" // digitalWrite, analogWrite, pinMode
|
||||||
extern "C" {
|
#include "A_config.h" // Config for LEDs
|
||||||
#include "user_interface.h"
|
|
||||||
}
|
|
||||||
#include "language.h"
|
|
||||||
#include "A_config.h"
|
|
||||||
#include "Settings.h"
|
|
||||||
#include "Attack.h"
|
|
||||||
#include "Scan.h"
|
|
||||||
|
|
||||||
|
// Inlcude libraries for Neopixel or MY92xx if used
|
||||||
|
#if defined(NEOPIXEL_LED)
|
||||||
#include <Adafruit_NeoPixel.h>
|
#include <Adafruit_NeoPixel.h>
|
||||||
|
#elif defined(MY92)
|
||||||
|
#include <my92xx.h>
|
||||||
|
#endif // if defined(NEOPIXEL_LED)
|
||||||
|
|
||||||
extern Settings settings;
|
enum LED_MODE {
|
||||||
extern Attack attack;
|
OFF = 0,
|
||||||
extern Scan scan;
|
SCAN = 1,
|
||||||
extern Stations stations;
|
ATTACK = 2,
|
||||||
|
DEAUTH = 3,
|
||||||
|
IDLE = 4
|
||||||
|
};
|
||||||
|
|
||||||
class LED {
|
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:
|
public:
|
||||||
enum LED_MODE { OFF = 0, SCAN = 1, ATTACK = 2, DEAUTH = 3, IDLE = 4 };
|
void setup() {
|
||||||
|
analogWriteRange(0xff);
|
||||||
|
|
||||||
LED();
|
#if defined(LED_MODE_BRIGHTNESS)
|
||||||
~LED();
|
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 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 setMode(LED_MODE mode, bool force = false);
|
||||||
void setColor(uint8_t r, uint8_t g, uint8_t b, uint8_t brightness, bool output);
|
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 tempEnable();
|
||||||
void tempDisable();
|
void tempDisable();
|
||||||
bool getTempEnabled();
|
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
|
#endif // ifndef LED_h
|
||||||
Reference in New Issue
Block a user