feat(gateway): enhance DALI host activity tracking and presence management
Signed-off-by: Tony <tonylu@tony-cloud.com>
This commit is contained in:
@@ -127,6 +127,11 @@ class DaliDomainService {
|
||||
|
||||
bool resetBus(uint8_t gateway_id) const;
|
||||
bool isBusIdle(uint8_t gateway_id, uint32_t quiet_ms) const;
|
||||
void markHostActivity(uint8_t gateway_id) const;
|
||||
void markHostCommandFrame(uint8_t gateway_id, uint8_t raw_addr, uint8_t command) const;
|
||||
bool hasRecentHostActivity(uint8_t gateway_id, uint32_t window_ms) const;
|
||||
bool matchesRecentHostCommandFrame(uint8_t gateway_id, uint8_t raw_addr, uint8_t command,
|
||||
uint32_t window_ms) const;
|
||||
bool writeBridgeFrame(uint8_t gateway_id, const uint8_t* data, size_t len) const;
|
||||
std::vector<uint8_t> transactBridgeFrame(uint8_t gateway_id, const uint8_t* data,
|
||||
size_t len) const;
|
||||
@@ -184,6 +189,12 @@ class DaliDomainService {
|
||||
|
||||
private:
|
||||
struct DaliChannel;
|
||||
struct RecentHostCommandFrame {
|
||||
uint8_t raw_addr{0};
|
||||
uint8_t command{0};
|
||||
TickType_t tick{0};
|
||||
bool valid{false};
|
||||
};
|
||||
|
||||
DaliChannel* findChannelByGateway(uint8_t gateway_id);
|
||||
const DaliChannel* findChannelByGateway(uint8_t gateway_id) const;
|
||||
@@ -204,6 +215,9 @@ class DaliDomainService {
|
||||
SemaphoreHandle_t raw_frame_sink_lock_{nullptr};
|
||||
mutable SemaphoreHandle_t bus_activity_lock_{nullptr};
|
||||
mutable std::map<uint8_t, TickType_t> last_bus_activity_ticks_;
|
||||
mutable SemaphoreHandle_t host_activity_lock_{nullptr};
|
||||
mutable std::map<uint8_t, TickType_t> last_host_activity_ticks_;
|
||||
mutable std::map<uint8_t, RecentHostCommandFrame> recent_host_command_frames_;
|
||||
TaskHandle_t raw_frame_task_handle_{nullptr};
|
||||
};
|
||||
|
||||
|
||||
Reference in New Issue
Block a user