Files
DeautherX-SRAciJa/DeautherX/led.cpp
2025-12-02 18:52:45 +03:00

139 lines
4.0 KiB
C++
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

/* 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);
}
}
}