#pragma once #include #include #include #include "dali_domain.hpp" #include "esp_err.h" #include "freertos/FreeRTOS.h" #include "freertos/task.h" namespace gateway { class GatewayController; struct GatewayUsbSetupBridgeConfig { bool enabled{false}; uint8_t channel_index{0}; size_t rx_buffer_size{256}; size_t tx_buffer_size{256}; uint32_t read_timeout_ms{20}; uint32_t write_timeout_ms{20}; uint32_t task_stack_size{4096}; UBaseType_t task_priority{4}; }; class GatewayUsbSetupBridge { public: GatewayUsbSetupBridge(GatewayController& controller, DaliDomainService& dali_domain, GatewayUsbSetupBridgeConfig config = {}); esp_err_t start(); private: static void TaskEntry(void* arg); void taskLoop(); void handleBytes(const uint8_t* data, size_t len); void handleRawFrame(const DaliRawFrame& frame); uint8_t setupGatewayId() const; GatewayController& controller_; DaliDomainService& dali_domain_; GatewayUsbSetupBridgeConfig config_; TaskHandle_t task_handle_{nullptr}; bool started_{false}; }; } // namespace gateway