44 lines
1.4 KiB
C++
44 lines
1.4 KiB
C++
#pragma once
|
|
|
|
#include "hardware.pb.h"
|
|
#include <Adafruit_NeoPixel.h>
|
|
|
|
/**
|
|
* @class HardwareLed
|
|
* @brief Manages an LED strip on ESP8266 using Adafruit NeoPixel library.
|
|
* Supports animations defined by hardware_LedConfig (static, pulse, fade, flicker).
|
|
*/
|
|
class HardwareLed {
|
|
public:
|
|
using AnimationCallback = void (*)();
|
|
|
|
HardwareLed(uint8_t pin, uint8_t numPixels = 1);
|
|
void begin();
|
|
void end();
|
|
void update(); // Removed const
|
|
void set(const hardware_LedConfig& config);
|
|
void setAnimationCallback(AnimationCallback cb) { m_callback = cb; }
|
|
float estimateCurrent_mA() const;
|
|
|
|
private:
|
|
void applyStatic(const hardware_StaticParams& params);
|
|
void applyPulse(const hardware_PulseParams& params);
|
|
void applyFade(const hardware_FadeParams& params); // Removed const
|
|
void applyFlicker(const hardware_FlickerParams& params);
|
|
void setColor(uint32_t color, uint8_t brightness = 255);
|
|
uint32_t lerpColor(uint32_t color1, uint32_t color2, float t) const;
|
|
|
|
Adafruit_NeoPixel m_strip;
|
|
hardware_LedConfig m_currentConfig = hardware_LedConfig_init_default;
|
|
unsigned long m_startTime;
|
|
uint8_t m_pulseState;
|
|
unsigned long m_lastPulseTime;
|
|
uint8_t m_fadeIndex;
|
|
unsigned long m_lastFadeTime;
|
|
uint32_t m_fadeCurrentColor;
|
|
uint32_t m_fadeTargetColor;
|
|
float m_fadeProgress;
|
|
unsigned long m_fadeStartTime;
|
|
bool m_isActive;
|
|
AnimationCallback m_callback = nullptr;
|
|
}; |