diff --git a/src/knx/cemi_server.cpp b/src/knx/cemi_server.cpp index c8405e9..2ad4ab4 100644 --- a/src/knx/cemi_server.cpp +++ b/src/knx/cemi_server.cpp @@ -302,7 +302,6 @@ void CemiServer::frameReceived(CemiFrame& frame) } } - void CemiServer::loop() { _usbTunnelInterface.loop(); diff --git a/src/knx/cemi_server.h b/src/knx/cemi_server.h index 289a89f..e45c3a9 100644 --- a/src/knx/cemi_server.h +++ b/src/knx/cemi_server.h @@ -21,7 +21,6 @@ class CemiServer public: /** * The constructor. - * @param tunnelInterface The TunnelInterface of the KNX tunnel (e.g. USB or KNXNET/IP) * @param bau methods are called here depending of the content of the APDU */ CemiServer(BauSystemB& bau); diff --git a/src/knx/usb_tunnel_interface.cpp b/src/knx/usb_tunnel_interface.cpp index 78090f3..783d694 100644 --- a/src/knx/usb_tunnel_interface.cpp +++ b/src/knx/usb_tunnel_interface.cpp @@ -5,13 +5,12 @@ #include #include -#include -#define MIN(a, b) ((a < b) ? (a) : (b)) #define MAX_EP_SIZE 64 #define HID_HEADER_SIZE 3 -extern Adafruit_USBD_HID usb_hid; +extern bool sendKnxHidReport(uint8_t* data, uint16_t length); +extern bool isKnxHidSendReportPossible(); uint16_t manufacturerId; uint16_t maskVersion; @@ -185,7 +184,7 @@ static void handleBusAccessServerProtocol(const uint8_t* requestData, uint16_t p } Serial1.println(""); */ - usb_hid.sendReport(0, data, MAX_EP_SIZE); + sendKnxHidReport(data, MAX_EP_SIZE); } } @@ -223,19 +222,14 @@ void sendKnxTunnelHidReport(uint8_t* data, uint16_t length) */ // We do not use reportId of the sendReport()-API here but instead provide it in the first byte of the buffer - usb_hid.sendReport(0, buffer, MAX_EP_SIZE); + sendKnxHidReport(buffer, MAX_EP_SIZE); } // Invoked when received SET_REPORT control request or -// received data on OUT endpoint ( Report ID = 0, Type = 0 ) -void set_report_callback(uint8_t report_id, hid_report_type_t report_type, uint8_t const* data, uint16_t bufSize) +void handleKnxHidReport(uint8_t const* data, uint16_t bufSize) { - // we don't use multiple report and report ID - (void) report_id; - (void) report_type; - if (bufSize!=MAX_EP_SIZE) - return; + return; if (data[0] == 0x01 && // ReportID (fixed 0x01) data[1] == 0x13) // PacketInfo must be 0x13 (SeqNo: 1, Type: 3) @@ -289,7 +283,7 @@ UsbTunnelInterface::UsbTunnelInterface(CemiServer& cemiServer, void UsbTunnelInterface::loop() { // Make sure that the USB HW is also ready to send another report - if (!isTxQueueEmpty() && usb_hid.ready()) + if (!isTxQueueEmpty() && isKnxHidSendReportPossible()) { uint8_t* buffer; uint16_t length;