Files
TX-Ultimate-Easy/components/tx_ultimate_easy/tx_ultimate_easy_light.cpp
Edward Firmo 0d0de08e19 Ensure brightness is limited to 100
As suggested by coderabbitai.
2025-08-06 19:21:32 +02:00

59 lines
2.1 KiB
C++

// tx_ultimate_easy_light.cpp
#ifdef TX_ULTIMATE_EASY_CORE_HW_LEDS
#include "esphome/core/log.h"
#include "tx_ultimate_easy_light.h"
#include <cinttypes>
#include <string>
namespace esphome {
namespace tx_ultimate_easy {
// Log tag
static const char *TAG = "tx_ultimate_easy.light";
// Constant definitions
const LightAttributes LIGHT_ATTRS_DEFAULT = {100, 255, 255, 255};
const uint32_t LIGHT_ATTRS_DEFAULT_PACKED = 0x64FFFFFF;
const uint64_t DEFAULT_DUAL_LIGHT_ATTRS_PACKED = 0x64FFFFFF64FFFFFF;
// Function implementations
uint32_t pack_light_attributes(const LightAttributes& attr) {
return (uint32_t(std::min(attr.brightness, uint8_t(100))) << 24) |
(uint32_t(attr.red) << 16) |
(uint32_t(attr.green) << 8) |
(uint32_t(attr.blue));
}
LightAttributes unpack_light_attributes(uint32_t packed) {
return {
.brightness = std::min(uint8_t((packed >> 24) & 0xFF), uint8_t(100)),
.red = uint8_t((packed >> 16) & 0xFF),
.green = uint8_t((packed >> 8) & 0xFF),
.blue = uint8_t(packed & 0xFF)
};
}
uint64_t pack_dual_light_attributes(const LightAttributes& group1_attrs, const LightAttributes& group2_attrs) {
uint32_t group1_packed = pack_light_attributes(group1_attrs);
uint32_t group2_packed = pack_light_attributes(group2_attrs);
return (uint64_t(group2_packed) << 32) | uint64_t(group1_packed);
}
std::pair<LightAttributes, LightAttributes> unpack_dual_light_attributes(uint64_t packed) {
uint32_t group1_packed = uint32_t(packed & 0xFFFFFFFF); // Lower 32 bits
uint32_t group2_packed = uint32_t((packed >> 32) & 0xFFFFFFFF); // Upper 32 bits
return std::make_pair(
unpack_light_attributes(group1_packed),
unpack_light_attributes(group2_packed)
);
}
} // namespace tx_ultimate_easy
} // namespace esphome
#endif // TX_ULTIMATE_EASY_CORE_HW_LEDS