139 lines
4.0 KiB
C++
139 lines
4.0 KiB
C++
/* This software is licensed under the MIT License: https://github.com/BlackTechX011/DeautherX */
|
||
|
||
#include "led.h"
|
||
#include "A_config.h"
|
||
#include <Arduino.h>
|
||
#include "language.h"
|
||
#include "settings.h"
|
||
#include "Attack.h"
|
||
#include "Scan.h"
|
||
|
||
extern Attack attack;
|
||
extern Scan scan;
|
||
|
||
namespace led {
|
||
// ===== PRIVATE ===== //
|
||
LED_MODE mode = OFF;
|
||
|
||
// Определяем пины для отдельных светодиодов
|
||
const uint8_t ZLED_PIN_R = 15; // D8 - Красный
|
||
const uint8_t ZLED_PIN_G = 16; // D0 - Зеленый
|
||
const uint8_t ZLED_PIN_B = 13; // D7 - Синий
|
||
|
||
// Яркость для каждого режима (0-255)
|
||
const uint8_t BRIGHTNESS_HIGH = 255;
|
||
const uint8_t BRIGHTNESS_MED = 128;
|
||
const uint8_t BRIGHTNESS_LOW = 64;
|
||
|
||
void setColor(uint8_t r, uint8_t g, uint8_t b) {
|
||
// Для отдельных светодиодов используем digitalWrite
|
||
// Если нужна яркость - можно использовать analogWrite с ШИМ пинами
|
||
|
||
// Красный светодиод
|
||
if (ZLED_PIN_R < 255) {
|
||
digitalWrite(ZLED_PIN_R, r > 0 ? HIGH : LOW);
|
||
}
|
||
|
||
// Зеленый светодиод
|
||
if (ZLED_PIN_G < 255) {
|
||
digitalWrite(ZLED_PIN_G, g > 0 ? HIGH : LOW);
|
||
}
|
||
|
||
// Синий светодиод
|
||
if (ZLED_PIN_B < 255) {
|
||
digitalWrite(ZLED_PIN_B, b > 0 ? HIGH : LOW);
|
||
}
|
||
}
|
||
|
||
// Функции для отдельных цветов (опционально)
|
||
void setRed() {
|
||
setColor(255, 0, 0);
|
||
}
|
||
|
||
void setGreen() {
|
||
setColor(0, 255, 0);
|
||
}
|
||
|
||
void setBlue() {
|
||
setColor(0, 0, 255);
|
||
}
|
||
|
||
void setYellow() {
|
||
setColor(255, 255, 0);
|
||
}
|
||
|
||
void setPurple() {
|
||
setColor(255, 0, 255);
|
||
}
|
||
|
||
void setCyan() {
|
||
setColor(0, 255, 255);
|
||
}
|
||
|
||
void setWhite() {
|
||
setColor(255, 255, 255);
|
||
}
|
||
|
||
// ===== PUBLIC ===== //
|
||
void setup() {
|
||
// Настраиваем пины как выходы
|
||
if (ZLED_PIN_R < 255) pinMode(ZLED_PIN_R, OUTPUT);
|
||
if (ZLED_PIN_G < 255) pinMode(ZLED_PIN_G, OUTPUT);
|
||
if (ZLED_PIN_B < 255) pinMode(ZLED_PIN_B, OUTPUT);
|
||
|
||
// Выключаем все светодиоды при старте
|
||
setColor(0, 0, 0);
|
||
}
|
||
|
||
void update() {
|
||
if (!settings::getLEDSettings().enabled) {
|
||
setMode(OFF);
|
||
} else if (scan.isScanning() && (scan.deauths < settings::getSnifferSettings().min_deauth_frames)) {
|
||
setMode(SCAN);
|
||
} else if (attack.isRunning()) {
|
||
setMode(ATTACK);
|
||
} else {
|
||
setMode(IDLE);
|
||
}
|
||
}
|
||
|
||
void setMode(LED_MODE new_mode, bool force) {
|
||
if ((new_mode != mode) || force) {
|
||
mode = new_mode;
|
||
|
||
switch (mode) {
|
||
case OFF:
|
||
setColor(0, 0, 0); // Все выключено
|
||
break;
|
||
case SCAN:
|
||
setColor(0, 255, 0); // Зеленый - сканирование
|
||
break;
|
||
case ATTACK:
|
||
setColor(255, 0, 0); // Красный - атака
|
||
break;
|
||
case IDLE:
|
||
setColor(0, 0, 255); // Синий - режим ожидания
|
||
break;
|
||
}
|
||
}
|
||
}
|
||
|
||
// Дополнительные функции для более сложных индикаций
|
||
void blinkRed(int times = 3, int delayMs = 200) {
|
||
for (int i = 0; i < times; i++) {
|
||
setRed();
|
||
delay(delayMs);
|
||
setColor(0, 0, 0);
|
||
delay(delayMs);
|
||
}
|
||
}
|
||
|
||
void blinkGreen(int times = 3, int delayMs = 200) {
|
||
for (int i = 0; i < times; i++) {
|
||
setGreen();
|
||
delay(delayMs);
|
||
setColor(0, 0, 0);
|
||
delay(delayMs);
|
||
}
|
||
}
|
||
} |