1550ab15d6
- Added new bridge operations to the bridgeOperationToString and bridgeOperationFromString functions for better command recognition. - Implemented a fromCjson function to convert cJSON objects to DaliValue, supporting various data types including arrays and objects. - Introduced isKnownBridgeRequestKey function to filter out unknown keys in bridge requests. - Refactored handleDownlink to utilize the new fromCjson function for value and metadata extraction, improving code clarity and maintainability. - Updated response creation to use a more structured approach with DaliValue's toJson method. Signed-off-by: Tony <tonylu@tony-cloud.com>
75 lines
2.2 KiB
C++
75 lines
2.2 KiB
C++
#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 <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::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<BridgeModel> 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<std::string, BridgeModel> models_;
|
|
|
|
DaliBridgeResult executeResolved(const DaliBridgeRequest& request,
|
|
const BridgeModel* model,
|
|
BridgeOperation operation);
|
|
std::optional<int> resolveTargetAddress(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;
|
|
}; |