diff --git a/src/knx/usb_tunnel_interface.h b/src/knx/usb_tunnel_interface.h index 78f8238..43c04cf 100644 --- a/src/knx/usb_tunnel_interface.h +++ b/src/knx/usb_tunnel_interface.h @@ -17,23 +17,44 @@ class UsbTunnelInterface // from cEMI server bool sendCemiFrame(CemiFrame& frame); + static const uint8_t* getKnxHidReportDescriptor(); + static uint16_t getHidReportDescriptorLength(); + static void receiveKnxHidReport(uint8_t const* data, uint16_t bufSize); + private: - struct _tx_queue_frame_t + struct _queue_buffer_t { uint8_t* data; uint16_t length; - _tx_queue_frame_t* next; + _queue_buffer_t* next; }; - struct _tx_queue_t + struct _queue_t { - _tx_queue_frame_t* front = nullptr; - _tx_queue_frame_t* back = nullptr; - } _tx_queue; + _queue_buffer_t* front = nullptr; + _queue_buffer_t* back = nullptr; + }; + + static const uint8_t descHidReport[]; CemiServer& _cemiServer; + uint16_t _manufacturerId; + uint16_t _maskVersion; + + // USB TX queue + _queue_t _tx_queue; void addFrameTxQueue(CemiFrame& frame); bool isTxQueueEmpty(); void loadNextTxFrame(uint8_t** sendBuffer, uint16_t* sendBufferLength); + + // USB RX queue + static _queue_t _rx_queue; + static void addBufferRxQueue(const uint8_t* data, uint16_t length); + bool isRxQueueEmpty(); + void loadNextRxBuffer(uint8_t** receiveBuffer, uint16_t* receiveBufferLength); + + void handleKnxHidReport(uint8_t const* data, uint16_t bufSize); + void handleBusAccessServerProtocol(const uint8_t* requestData, uint16_t packetLength); + void sendKnxTunnelHidReport(uint8_t* data, uint16_t length); };