#pragma once #include "base.hpp" #include "addr.hpp" #include "bridge_model.hpp" #include "dali_comm.hpp" #include "dt1.hpp" #include "dt4.hpp" #include "dt5.hpp" #include "dt6.hpp" #include "dt8.hpp" #include #include #include #include struct DaliBridgeRequest { std::string sequence; std::string modelID; std::optional operation; std::optional rawAddress; std::optional rawCommand; std::optional shortAddress; DaliValue value; DaliValue::Object metadata; }; struct DaliBridgeResult { std::string sequence; std::string modelID; BridgeOperation operation = BridgeOperation::unknown; bool ok = false; std::optional data; std::string error; DaliValue::Object metadata; DaliValue::Array results; DaliValue::Object toJson() const; }; class DaliBridgeEngine { public: explicit DaliBridgeEngine(DaliComm& comm); bool upsertModel(const BridgeModel& model); bool removeModel(const std::string& modelID); const BridgeModel* findModel(const std::string& modelID) const; std::vector listModels() const; DaliBridgeResult execute(const DaliBridgeRequest& request); private: DaliComm& comm_; DaliBase base_; DaliDT1 dt1_; DaliDT4 dt4_; DaliDT5 dt5_; DaliDT6 dt6_; DaliDT8 dt8_; DaliAddr addr_; std::map models_; DaliBridgeResult executeResolved(const DaliBridgeRequest& request, const BridgeModel* model, BridgeOperation operation); std::optional resolveTargetAddress(const DaliBridgeRequest& request, const BridgeModel* model) const; std::optional resolveRawAddress(const DaliBridgeRequest& request, const BridgeModel* model) const; std::optional resolveRawCommand(const DaliBridgeRequest& request, const BridgeModel* model) const; std::optional resolveIntValue(const DaliBridgeRequest& request, const BridgeModel* model) const; std::optional resolveDoubleValue(const DaliBridgeRequest& request) const; };