feat(gateway): add support for DALI scene handling and relative brightness adjustments

Signed-off-by: Tony <tonylu@tony-cloud.com>
This commit is contained in:
Tony
2026-05-16 04:38:15 +08:00
parent 323ff24c04
commit 82142dd46c
4 changed files with 476 additions and 39 deletions
@@ -43,6 +43,8 @@ class EtsDeviceRuntime {
void setProgrammingMode(bool enabled);
void toggleProgrammingMode();
EtsMemorySnapshot snapshot() const;
uint8_t paramByte(uint32_t addr) const;
bool paramBit(uint32_t addr, uint8_t shift) const;
// Accessors for OpenKNX integration (DIB construction, IP parameter object).
DeviceObject& deviceObject();
@@ -86,6 +86,8 @@ enum class GatewayKnxDaliDataType : uint8_t {
kBrightness = 2,
kColorTemperature = 3,
kRgb = 4,
kBrightnessRelative = 5,
kScene = 6,
};
enum class GatewayKnxDaliTargetKind : uint8_t {
@@ -143,6 +145,7 @@ class GatewayKnxBridge {
explicit GatewayKnxBridge(DaliBridgeEngine& engine);
void setConfig(const GatewayKnxConfig& config);
void setRuntimeContext(const openknx::EtsDeviceRuntime* runtime);
const GatewayKnxConfig& config() const;
size_t etsBindingCount() const;
@@ -164,6 +167,8 @@ class GatewayKnxBridge {
GatewayKnxDaliDataType data_type,
GatewayKnxDaliTarget target,
const uint8_t* data, size_t len);
DaliBridgeResult executeReg1SceneWrite(uint16_t group_address, const uint8_t* data,
size_t len);
DaliBridgeResult executeEtsBindings(uint16_t group_address,
const std::vector<GatewayKnxDaliBinding>& bindings,
const uint8_t* data, size_t len);
@@ -194,6 +199,7 @@ class GatewayKnxBridge {
DaliBridgeEngine& engine_;
GatewayKnxConfig config_;
const openknx::EtsDeviceRuntime* runtime_{nullptr};
std::map<uint16_t, std::vector<GatewayKnxDaliBinding>> ets_bindings_by_group_address_;
bool commissioning_scan_done_{true};
bool commissioning_assign_done_{true};