diff --git a/cores/arduino/PluggableUSB.h b/cores/arduino/PluggableUSB.h index d4a1096..c08bc99 100644 --- a/cores/arduino/PluggableUSB.h +++ b/cores/arduino/PluggableUSB.h @@ -28,9 +28,6 @@ class PUSBListNode { public: PUSBListNode() { } - bool (*setup)(USBSetup& setup, uint8_t i); - int (*getInterface)(uint8_t* interfaceNum); - int (*getDescriptor)(int8_t t); int8_t numEndpoints; int8_t numInterfaces; uint8_t *endpointType; @@ -39,6 +36,10 @@ public: inline int8_t endpoint() const { return pluggedEndpoint; } protected: + virtual bool setup(USBSetup& setup, uint8_t i) = 0; + virtual int getInterface(uint8_t* interfaceNum) = 0; + virtual int getDescriptor(int8_t t) = 0; + uint8_t pluggedInterface; int8_t pluggedEndpoint; diff --git a/libraries/HID/HID.cpp b/libraries/HID/HID.cpp index 118d0c5..5685957 100644 --- a/libraries/HID/HID.cpp +++ b/libraries/HID/HID.cpp @@ -41,19 +41,19 @@ uint8_t HID_::epType[] = { EP_TYPE_INTERRUPT_IN }; uint8_t HID_::protocol = 1; uint8_t HID_::idle = 1; -int HID_::GetInterface(uint8_t* interfaceNum) +int HID_::getInterface(uint8_t* interfaceNum) { interfaceNum[0] += 1; // uses 1 hidInterface = { - D_INTERFACE(HID.interface(), 1, 3, 0, 0), + D_INTERFACE(interface(), 1, 3, 0, 0), D_HIDREPORT(sizeof_hidReportDescriptor), - D_ENDPOINT(USB_ENDPOINT_IN(HID.endpoint()), USB_ENDPOINT_TYPE_INTERRUPT, USB_EP_SIZE, 0x01) + D_ENDPOINT(USB_ENDPOINT_IN(endpoint()), USB_ENDPOINT_TYPE_INTERRUPT, USB_EP_SIZE, 0x01) }; return USB_SendControl(0, &hidInterface, sizeof(hidInterface)); } -int HID_::GetDescriptor(int8_t t) +int HID_::getDescriptor(int8_t t) { if (HID_REPORT_DESCRIPTOR_TYPE == t) { HIDDescriptorListNode* current = rootNode; @@ -85,13 +85,13 @@ void HID_::AppendDescriptor(HIDDescriptorListNode *node) void HID_::SendReport(uint8_t id, const void* data, int len) { - USB_Send(HID.endpoint(), &id, 1); - USB_Send(HID.endpoint() | TRANSFER_RELEASE,data,len); + USB_Send(endpoint(), &id, 1); + USB_Send(endpoint() | TRANSFER_RELEASE,data,len); } -bool HID_::Setup(USBSetup& setup, uint8_t i) +bool HID_::setup(USBSetup& setup, uint8_t i) { - if (HID.interface() != i) { + if (interface() != i) { return false; } else { uint8_t r = setup.bRequest; @@ -130,9 +130,6 @@ bool HID_::Setup(USBSetup& setup, uint8_t i) HID_::HID_(void) { - setup = HID_::Setup; - getInterface = HID_::GetInterface; - getDescriptor = HID_::GetDescriptor; numEndpoints = 1; numInterfaces = 1; endpointType = epType; diff --git a/libraries/HID/HID.h b/libraries/HID/HID.h index cb1125e..1c8e2fc 100644 --- a/libraries/HID/HID.h +++ b/libraries/HID/HID.h @@ -80,11 +80,13 @@ public: void SendReport(uint8_t id, const void* data, int len); void AppendDescriptor(HIDDescriptorListNode* node); -private: - static int GetInterface(uint8_t* interfaceNum); - static int GetDescriptor(int8_t t); - static bool Setup(USBSetup& setup, uint8_t i); +protected: + // Implementation of the PUSBListNode + int getInterface(uint8_t* interfaceNum); + int getDescriptor(int8_t t); + bool setup(USBSetup& setup, uint8_t i); +private: static HIDDescriptor hidInterface; static HIDDescriptorListNode* rootNode;