diff options
author | Cristian Maglie <c.maglie@arduino.cc> | 2015-09-30 16:35:43 +0200 |
---|---|---|
committer | Cristian Maglie <c.maglie@arduino.cc> | 2015-10-02 11:59:23 +0200 |
commit | 90652295956b6f4bcccb740aeb4f7c546327e499 (patch) | |
tree | d46ac6c9029afcebce9ced39a5ab7963b62dde13 | |
parent | ab19daef2878e6fdbbe29f69dd0006bdb2508cc3 (diff) |
[PUSB] callbacks are now pure virtual methods
This change allows the compiler to handle callbacks resolution.
Callbacks now must be implemented on the class that extends
PUSBListNode and this is forced by compiler by means of pure
virtual methods.
Also the calls to HID.interface() and HID.endpoint() can now
be simplified to interface() and endpoint() respectively since
the methods are no more static.
-rw-r--r-- | cores/arduino/PluggableUSB.h | 7 | ||||
-rw-r--r-- | libraries/HID/HID.cpp | 19 | ||||
-rw-r--r-- | libraries/HID/HID.h | 10 |
3 files changed, 18 insertions, 18 deletions
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; |