feat: add KNX gateway snapshot and command transaction handling
Signed-off-by: Tony <tonylu@tony-cloud.com>
This commit is contained in:
@@ -1148,6 +1148,46 @@ extern "C" void app_main(void) {
|
||||
bridge_config.gateway_device_name_provider = []() {
|
||||
return s_runtime == nullptr ? std::string() : s_runtime->deviceName();
|
||||
};
|
||||
bridge_config.knx_gateway_snapshot_provider = []() {
|
||||
gateway::GatewayKnxGatewaySnapshot out;
|
||||
if (s_controller == nullptr) {
|
||||
return out;
|
||||
}
|
||||
const auto snapshot = s_controller->snapshot();
|
||||
out.channels.reserve(snapshot.channels.size());
|
||||
for (const auto& channel : snapshot.channels) {
|
||||
out.channels.push_back(
|
||||
gateway::GatewayKnxGatewayChannelSnapshot{channel.gateway_id});
|
||||
}
|
||||
return out;
|
||||
};
|
||||
bridge_config.knx_gateway_command_transactor =
|
||||
[](const std::vector<uint8_t>& frame, uint32_t timeout_ms) {
|
||||
gateway::GatewayKnxGatewayTransactionResult out;
|
||||
if (s_controller == nullptr) {
|
||||
return out;
|
||||
}
|
||||
const auto result = s_controller->transactCommandFrame(frame, timeout_ms);
|
||||
switch (result.status) {
|
||||
case gateway::GatewayCommandTransactionStatus::kOk:
|
||||
out.status = gateway::GatewayKnxGatewayTransactionStatus::kOk;
|
||||
break;
|
||||
case gateway::GatewayCommandTransactionStatus::kInvalidFrame:
|
||||
out.status = gateway::GatewayKnxGatewayTransactionStatus::kInvalidFrame;
|
||||
break;
|
||||
case gateway::GatewayCommandTransactionStatus::kQueueRejected:
|
||||
out.status = gateway::GatewayKnxGatewayTransactionStatus::kQueueRejected;
|
||||
break;
|
||||
case gateway::GatewayCommandTransactionStatus::kTimeout:
|
||||
out.status = gateway::GatewayKnxGatewayTransactionStatus::kTimeout;
|
||||
break;
|
||||
case gateway::GatewayCommandTransactionStatus::kNoResponse:
|
||||
out.status = gateway::GatewayKnxGatewayTransactionStatus::kNoResponse;
|
||||
break;
|
||||
}
|
||||
out.frames = result.frames;
|
||||
return out;
|
||||
};
|
||||
s_bridge = std::make_unique<gateway::GatewayBridgeService>(*s_dali_domain, *s_cache,
|
||||
bridge_config);
|
||||
s_controller->setBridgeService(s_bridge.get());
|
||||
|
||||
Reference in New Issue
Block a user