mirror of
https://github.com/thelsing/knx.git
synced 2025-08-31 13:47:01 +02:00
save work
This commit is contained in:
parent
9c7dc1e267
commit
2e1b61ec18
@ -11,46 +11,11 @@
|
|||||||
#define MAX_EP_SIZE 64
|
#define MAX_EP_SIZE 64
|
||||||
#define HID_HEADER_SIZE 3
|
#define HID_HEADER_SIZE 3
|
||||||
|
|
||||||
Adafruit_USBD_HID usb_hid;
|
extern Adafruit_USBD_HID usb_hid;
|
||||||
|
|
||||||
uint16_t manufacturerId;
|
uint16_t manufacturerId;
|
||||||
uint16_t maskVersion;
|
uint16_t maskVersion;
|
||||||
|
|
||||||
// HID report descriptor using TinyUSB's template
|
|
||||||
// Generic In Out with 64 bytes report (max)
|
|
||||||
uint8_t const desc_hid_report[] =
|
|
||||||
{
|
|
||||||
//TUD_HID_REPORT_DESC_GENERIC_INOUT(64)
|
|
||||||
0x06, 0xA0, 0xFF, // Usage Page (Vendor Defined 0xFFA0)
|
|
||||||
0x09, 0x01, // Usage (0x01)
|
|
||||||
0xA1, 0x01, // Collection (Application)
|
|
||||||
0x09, 0x01, // Usage (0x01)
|
|
||||||
0xA1, 0x00, // Collection (Physical)
|
|
||||||
0x06, 0xA1, 0xFF, // Usage Page (Vendor Defined 0xFFA1)
|
|
||||||
0x09, 0x03, // Usage (0x03)
|
|
||||||
0x09, 0x04, // Usage (0x04)
|
|
||||||
0x15, 0x80, // Logical Minimum (-128)
|
|
||||||
0x25, 0x7F, // Logical Maximum (127)
|
|
||||||
0x35, 0x00, // Physical Minimum (0)
|
|
||||||
0x45, 0xFF, // Physical Maximum (-1)
|
|
||||||
0x75, 0x08, // Report Size (8)
|
|
||||||
0x85, 0x01, // Report ID (1)
|
|
||||||
0x95, 0x3F, // Report Count (63)
|
|
||||||
0x81, 0x02, // Input (Data,Var,Abs,No Wrap,Linear,Preferred State,No Null Position)
|
|
||||||
0x09, 0x05, // Usage (0x05)
|
|
||||||
0x09, 0x06, // Usage (0x06)
|
|
||||||
0x15, 0x80, // Logical Minimum (-128)
|
|
||||||
0x25, 0x7F, // Logical Maximum (127)
|
|
||||||
0x35, 0x00, // Physical Minimum (0)
|
|
||||||
0x45, 0xFF, // Physical Maximum (-1)
|
|
||||||
0x75, 0x08, // Report Size (8)
|
|
||||||
0x85, 0x01, // Report ID (1)
|
|
||||||
0x95, 0x3F, // Report Count (63)
|
|
||||||
0x91, 0x02, // Output (Data,Var,Abs,No Wrap,Linear,Preferred State,No Null Position,Non-volatile)
|
|
||||||
0xC0, // End Collection
|
|
||||||
0xC0 // End Collection
|
|
||||||
};
|
|
||||||
|
|
||||||
struct _rx_queue_frame_t
|
struct _rx_queue_frame_t
|
||||||
{
|
{
|
||||||
uint8_t* data;
|
uint8_t* data;
|
||||||
@ -323,11 +288,6 @@ UsbDataLinkLayer::UsbDataLinkLayer(CemiServer& cemiServer,
|
|||||||
|
|
||||||
void UsbDataLinkLayer::loop()
|
void UsbDataLinkLayer::loop()
|
||||||
{
|
{
|
||||||
if (!_enabled)
|
|
||||||
{
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
// Make sure that the USB HW is also ready to send another report
|
// Make sure that the USB HW is also ready to send another report
|
||||||
if (!isTxQueueEmpty() && usb_hid.ready())
|
if (!isTxQueueEmpty() && usb_hid.ready())
|
||||||
{
|
{
|
||||||
@ -365,45 +325,11 @@ void UsbDataLinkLayer::loop()
|
|||||||
|
|
||||||
bool UsbDataLinkLayer::sendCemiFrame(CemiFrame& frame)
|
bool UsbDataLinkLayer::sendCemiFrame(CemiFrame& frame)
|
||||||
{
|
{
|
||||||
if (!_enabled)
|
|
||||||
return false;
|
|
||||||
|
|
||||||
addFrameTxQueue(frame);
|
addFrameTxQueue(frame);
|
||||||
|
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
void UsbDataLinkLayer::enabled(bool value)
|
|
||||||
{
|
|
||||||
if (value && !_enabled)
|
|
||||||
{
|
|
||||||
usb_hid.enableOutEndpoint(true);
|
|
||||||
usb_hid.setPollInterval(2);
|
|
||||||
usb_hid.setReportDescriptor(desc_hid_report, sizeof(desc_hid_report));
|
|
||||||
usb_hid.setReportCallback(NULL, set_report_callback);
|
|
||||||
|
|
||||||
usb_hid.begin();
|
|
||||||
|
|
||||||
// wait until device mounted
|
|
||||||
while( !USBDevice.mounted() ) delay(1);
|
|
||||||
|
|
||||||
_enabled = true;
|
|
||||||
println("KNX USB Interface enabled.");
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (!value && _enabled)
|
|
||||||
{
|
|
||||||
println("KNX USB Interface cannot be disabled once enabled!");
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
bool UsbDataLinkLayer::enabled() const
|
|
||||||
{
|
|
||||||
return _enabled;
|
|
||||||
}
|
|
||||||
|
|
||||||
void UsbDataLinkLayer::addFrameTxQueue(CemiFrame& frame)
|
void UsbDataLinkLayer::addFrameTxQueue(CemiFrame& frame)
|
||||||
{
|
{
|
||||||
_tx_queue_frame_t* tx_frame = new _tx_queue_frame_t;
|
_tx_queue_frame_t* tx_frame = new _tx_queue_frame_t;
|
||||||
|
@ -13,15 +13,11 @@ class UsbDataLinkLayer
|
|||||||
UsbDataLinkLayer(CemiServer& cemiServer, uint16_t manufacturerId, uint16_t maskVersion);
|
UsbDataLinkLayer(CemiServer& cemiServer, uint16_t manufacturerId, uint16_t maskVersion);
|
||||||
|
|
||||||
void loop();
|
void loop();
|
||||||
void enabled(bool value);
|
|
||||||
bool enabled() const;
|
|
||||||
|
|
||||||
// from cEMI server
|
// from cEMI server
|
||||||
bool sendCemiFrame(CemiFrame& frame);
|
bool sendCemiFrame(CemiFrame& frame);
|
||||||
|
|
||||||
private:
|
private:
|
||||||
bool _enabled = true;
|
|
||||||
|
|
||||||
struct _tx_queue_frame_t
|
struct _tx_queue_frame_t
|
||||||
{
|
{
|
||||||
uint8_t* data;
|
uint8_t* data;
|
||||||
|
Loading…
Reference in New Issue
Block a user