Files
dali_cpp/include/bridge.hpp
T
Tony 21afc6b942 Implement DALI Bridge Engine and Model Management
- Added `bridge.cpp` to handle DALI bridge operations including model management, command execution, and response formatting.
- Introduced `bridge_model.cpp` for defining bridge models, value transformations, and JSON serialization/deserialization.
- Created `bridge_provisioning.cpp` for managing bridge configuration storage and retrieval using NVS on ESP platform.
- Enhanced `gateway_cloud.cpp` to integrate DALI bridge requests and responses with cloud communication.
- Introduced `modbus_bridge.cpp` to handle Modbus-specific operations and register management.
- Implemented utility functions for converting between DaliValue and cJSON formats.
- Added error handling and metadata management in bridge responses.
2026-04-22 10:14:42 +08:00

66 lines
2.0 KiB
C++

#pragma once
#include "base.hpp"
#include "bridge_model.hpp"
#include "dali_comm.hpp"
#include "dt1.hpp"
#include "dt8.hpp"
#include <map>
#include <optional>
#include <string>
#include <vector>
struct DaliBridgeRequest {
std::string sequence;
std::string modelID;
std::optional<BridgeOperation> operation;
std::optional<int> rawAddress;
std::optional<int> rawCommand;
std::optional<int> shortAddress;
DaliValue value;
DaliValue::Object metadata;
};
struct DaliBridgeResult {
std::string sequence;
std::string modelID;
BridgeOperation operation = BridgeOperation::unknown;
bool ok = false;
std::optional<int> data;
std::string error;
DaliValue::Object metadata;
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<BridgeModel> listModels() const;
DaliBridgeResult execute(const DaliBridgeRequest& request);
private:
DaliComm& comm_;
DaliBase base_;
DaliDT1 dt1_;
DaliDT8 dt8_;
std::map<std::string, BridgeModel> models_;
DaliBridgeResult executeResolved(const DaliBridgeRequest& request,
const BridgeModel* model,
BridgeOperation operation);
std::optional<int> resolveShortAddress(const DaliBridgeRequest& request,
const BridgeModel* model) const;
std::optional<int> resolveRawAddress(const DaliBridgeRequest& request,
const BridgeModel* model) const;
std::optional<int> resolveRawCommand(const DaliBridgeRequest& request,
const BridgeModel* model) const;
std::optional<int> resolveIntValue(const DaliBridgeRequest& request, const BridgeModel* model) const;
std::optional<double> resolveDoubleValue(const DaliBridgeRequest& request) const;
};