fix: enhance command frame validation and add DALI bus configuration options
Signed-off-by: Tony <tonylu@tony-cloud.com>
This commit is contained in:
@@ -1171,6 +1171,34 @@ extern "C" void app_main(void) {
|
|||||||
if (s_controller == nullptr) {
|
if (s_controller == nullptr) {
|
||||||
return out;
|
return out;
|
||||||
}
|
}
|
||||||
|
if (!gateway::GatewayRuntime::isGatewayCommandFrame(frame) ||
|
||||||
|
!gateway::GatewayRuntime::hasValidChecksum(frame) ||
|
||||||
|
frame.size() < 5) {
|
||||||
|
out.status = gateway::GatewayKnxGatewayTransactionStatus::kInvalidFrame;
|
||||||
|
return out;
|
||||||
|
}
|
||||||
|
const auto is_write_only_dali_frame =
|
||||||
|
[](const std::vector<uint8_t>& command) {
|
||||||
|
if (command.size() < 5) {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
switch (command[3]) {
|
||||||
|
case 0x12:
|
||||||
|
case 0x13:
|
||||||
|
return command.size() >= 7;
|
||||||
|
case 0x60:
|
||||||
|
case 0x61:
|
||||||
|
return command.size() >= 8;
|
||||||
|
default:
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
};
|
||||||
|
if (is_write_only_dali_frame(frame)) {
|
||||||
|
out.status = s_controller->enqueueCommandFrame(frame)
|
||||||
|
? gateway::GatewayKnxGatewayTransactionStatus::kOk
|
||||||
|
: gateway::GatewayKnxGatewayTransactionStatus::kQueueRejected;
|
||||||
|
return out;
|
||||||
|
}
|
||||||
const auto result = s_controller->transactCommandFrame(frame, timeout_ms);
|
const auto result = s_controller->transactCommandFrame(frame, timeout_ms);
|
||||||
switch (result.status) {
|
switch (result.status) {
|
||||||
case gateway::GatewayCommandTransactionStatus::kOk:
|
case gateway::GatewayCommandTransactionStatus::kOk:
|
||||||
|
|||||||
@@ -2925,7 +2925,9 @@ CONFIG_DALI_FORWARD_AFTER_BACKWARD_WAIT_MS=10
|
|||||||
CONFIG_DALI_FORWARD_MAX_WAIT_MS=50
|
CONFIG_DALI_FORWARD_MAX_WAIT_MS=50
|
||||||
CONFIG_DALI_BACKWARD_IDLE_TIMEOUT_MS=10
|
CONFIG_DALI_BACKWARD_IDLE_TIMEOUT_MS=10
|
||||||
CONFIG_DALI_BUS_POWER_CHECK_INTERVAL_MS=500
|
CONFIG_DALI_BUS_POWER_CHECK_INTERVAL_MS=500
|
||||||
|
CONFIG_DALI_BUS_FAIL_EVENT_DELAY_MS=45
|
||||||
CONFIG_DALI_BUS_ABNORMAL_REPORT_INTERVAL_MS=3000
|
CONFIG_DALI_BUS_ABNORMAL_REPORT_INTERVAL_MS=3000
|
||||||
|
CONFIG_DALI_BUS_RESET_PULSE_MS=10
|
||||||
# CONFIG_DALI_LOG_LEVEL_NONE is not set
|
# CONFIG_DALI_LOG_LEVEL_NONE is not set
|
||||||
# CONFIG_DALI_LOG_LEVEL_ERROR is not set
|
# CONFIG_DALI_LOG_LEVEL_ERROR is not set
|
||||||
# CONFIG_DALI_LOG_LEVEL_WARN is not set
|
# CONFIG_DALI_LOG_LEVEL_WARN is not set
|
||||||
|
|||||||
@@ -696,7 +696,7 @@ bool GatewayKnxBridge::handleDalimasterDiscoveryState(const uint8_t*, size_t,
|
|||||||
response->push_back('G');
|
response->push_back('G');
|
||||||
response->push_back(0x01);
|
response->push_back(0x01);
|
||||||
response->push_back(kDalimasterTransferChunkBytes);
|
response->push_back(kDalimasterTransferChunkBytes);
|
||||||
uint16_t feature_flags = 0x0100 | 0x0080;
|
uint16_t feature_flags = 0x0100 | 0x0080 | 0x0200;
|
||||||
if (config_.tunnel_enabled) {
|
if (config_.tunnel_enabled) {
|
||||||
feature_flags |= 0x0001;
|
feature_flags |= 0x0001;
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user