feat: implement raw frame dispatch and handling in DaliDomainService

Signed-off-by: Tony <tonylu@tony-cloud.com>
This commit is contained in:
Tony
2026-06-14 21:20:42 +08:00
parent 4d2cfa3cb3
commit 9598147dd5
3 changed files with 122 additions and 11 deletions
@@ -13,6 +13,7 @@
#include "esp_err.h"
#include "freertos/FreeRTOS.h"
#include "freertos/queue.h"
#include "freertos/semphr.h"
#include "freertos/task.h"
@@ -220,9 +221,13 @@ class DaliDomainService {
esp_err_t startSerialRxTask(DaliChannel& channel);
static void SerialRxTaskEntry(void* arg);
void serialRxTaskLoop(DaliChannel* channel);
esp_err_t startRawFrameDispatchTask();
static void RawFrameDispatchTaskEntry(void* arg);
void rawFrameDispatchTaskLoop();
esp_err_t startRawFrameTask();
static void RawFrameTaskEntry(void* arg);
void rawFrameTaskLoop();
void queueRawFrame(const DaliChannel& channel, const uint8_t* data, size_t len);
void notifyRawFrameSinks(const DaliRawFrame& frame);
void markBusActivity(uint8_t gateway_id) const;
@@ -234,6 +239,8 @@ class DaliDomainService {
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_;
QueueHandle_t raw_frame_dispatch_queue_{nullptr};
TaskHandle_t raw_frame_dispatch_task_handle_{nullptr};
TaskHandle_t raw_frame_task_handle_{nullptr};
};