21afc6b942
- 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.
66 lines
2.0 KiB
C++
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;
|
|
}; |