#pragma once #include "hardware.pb.h" #include /** * @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; };