1+ /*
2+ Copyright (c) 2020 Stefan Kremser (@Spacehuhn)
3+ This software is licensed under the MIT License. See the license file for details.
4+ Source: github.com/spacehuhn/esp8266_deauther
5+ */
6+
7+ #include " led.h"
8+
9+ #include " A_config.h" // Config for LEDs
10+ #include < Arduino.h> // digitalWrite, analogWrite, pinMode
11+ #include " language.h" // Strings used in printColor and tempDisable
12+ #include " settings.h" // used in update()
13+ #include " Attack.h" // used in update()
14+ #include " Scan.h" // used in update()
15+
16+ // Inlcude libraries for Neopixel or LED_MY92xx if used
17+ #if defined(NEOPIXEL_LED) || defined(LED_NEOPIXEL_RGB) || defined(LED_NEOPIXEL_GRB)
18+ #include < Adafruit_NeoPixel.h>
19+ #elif defined(LED_MY92)
20+ #include < my92xx.h>
21+ #endif // if defined(NEOPIXEL_LED)
22+
23+ extern Attack attack;
24+ extern Scan scan;
25+
26+ namespace led {
27+ // ===== PRIVATE ===== //
28+ LED_MODE mode = OFF;
29+
30+ #if defined(LED_NEOPIXEL_RGB)
31+ Adafruit_NeoPixel strip = Adafruit_NeoPixel(LED_NEOPIXEL_NUM, LED_NEOPIXEL_PIN, NEO_RGB + NEO_KHZ400);
32+ #elif defined(LED_NEOPIXEL_GRB)
33+ Adafruit_NeoPixel strip = Adafruit_NeoPixel(LED_NEOPIXEL_NUM, LED_NEOPIXEL_PIN, NEO_GRB + NEO_KHZ400);
34+ #elif defined(LED_MY92)
35+ my92xx myled = my92xx(LED_MY92_MODEL, LED_MY92_NUM, LED_MY92_DATA, LED_MY92_CLK, MY92XX_COMMAND_DEFAULT);
36+ #endif // if defined(NEOPIXEL_LED)
37+
38+
39+ void setColor (uint8_t r, uint8_t g, uint8_t b) {
40+ #if defined(LED_DIGITAL)
41+ if (LED_ANODE) {
42+ if (LED_PIN_R < 255 ) digitalWrite (LED_PIN_R, r > 0 );
43+ if (LED_PIN_G < 255 ) digitalWrite (LED_PIN_G, g > 0 );
44+ if (LED_PIN_B < 255 ) digitalWrite (LED_PIN_B, b > 0 );
45+ } else {
46+ if (LED_PIN_R < 255 ) digitalWrite (LED_PIN_R, r == 0 );
47+ if (LED_PIN_G < 255 ) digitalWrite (LED_PIN_G, g == 0 );
48+ if (LED_PIN_B < 255 ) digitalWrite (LED_PIN_B, b == 0 );
49+ }
50+ #elif defined(LED_RGB)
51+ if (r > 0 ) r = r * LED_MODE_BRIGHTNESS / 100 ;
52+ if (g > 0 ) g = g * LED_MODE_BRIGHTNESS / 100 ;
53+ if (b > 0 ) b = b * LED_MODE_BRIGHTNESS / 100 ;
54+
55+ if (LED_ANODE) {
56+ r = 255 - r;
57+ g = 255 - g;
58+ b = 255 - b;
59+ }
60+
61+ analogWrite (LED_PIN_R, r);
62+ analogWrite (LED_PIN_G, g);
63+ analogWrite (LED_PIN_B, b);
64+ #elif defined(NEOPIXEL_LED)
65+
66+ for (size_t i = 0 ; i < LED_NEOPIXEL_NUM; i++) {
67+ strip.setPixelColor (i, r, g, b);
68+ }
69+
70+ strip.show ();
71+ #elif defined(LED_MY9291)
72+ myled.setChannel (LED_MY92_CH_R, r);
73+ myled.setChannel (LED_MY92_CH_G, g);
74+ myled.setChannel (LED_MY92_CH_B, b);
75+ myled.setChannel (LED_MY92_CH_BRIGHTNESS, LED_MODE_BRIGHTNESS);
76+ myled.setState (true );
77+ myled.update ();
78+ #endif // if defined(LED_DIGITAL)
79+ }
80+
81+ // ===== PUBLIC ===== //
82+ void setup () {
83+ analogWriteRange (0xff );
84+
85+ #if defined(LED_DIGITAL) || defined(LED_RGB)
86+ if (LED_PIN_R < 255 ) pinMode (LED_PIN_R, OUTPUT);
87+ if (LED_PIN_G < 255 ) pinMode (LED_PIN_G, OUTPUT);
88+ if (LED_PIN_B < 255 ) pinMode (LED_PIN_B, OUTPUT);
89+ #elif defined(NEOPIXEL_LED)
90+ strip.begin ();
91+ strip.setBrightness (LED_MODE_BRIGHTNESS);
92+ strip.show ();
93+ #elif defined(LED_MY9291)
94+ myled.setChannel (LED_MY92_CH_R, 0 );
95+ myled.setChannel (LED_MY92_CH_G, 0 );
96+ myled.setChannel (LED_MY92_CH_B, 0 );
97+ myled.setChannel (LED_MY92_CH_BRIGHTNESS, LED_MODE_BRIGHTNESS);
98+ myled.setState (true );
99+ myled.update ();
100+ #endif // if defined(LED_DIGITAL) || defined(LED_RGB)
101+ }
102+
103+ void update () {
104+ if (!settings::getLEDSettings ().enabled ) {
105+ setMode (OFF);
106+ } else if (scan.isScanning () && (scan.deauths < settings::getSnifferSettings ().min_deauth_frames )) {
107+ setMode (SCAN);
108+ } else if (attack.isRunning ()) {
109+ setMode (ATTACK);
110+ } else {
111+ setMode (IDLE);
112+ }
113+ }
114+
115+ void setMode (LED_MODE new_mode, bool force) {
116+ if ((new_mode != mode) || force) {
117+ mode = new_mode;
118+
119+ switch (mode) {
120+ case OFF:
121+ setColor (LED_MODE_OFF);
122+ break ;
123+ case SCAN:
124+ setColor (LED_MODE_SCAN);
125+ break ;
126+ case ATTACK:
127+ setColor (LED_MODE_ATTACK);
128+ break ;
129+ case IDLE:
130+ setColor (LED_MODE_IDLE);
131+ break ;
132+ }
133+ }
134+ }
135+ }
0 commit comments