diff options
author | Martino Facchin <m.facchin@arduino.cc> | 2015-06-23 16:59:56 +0000 |
---|---|---|
committer | Cristian Maglie <c.maglie@arduino.cc> | 2015-07-16 13:13:39 +0200 |
commit | d269ed2854354e7046c85b700a1633e78aae398f (patch) | |
tree | 20117db788a831ec5538e6c40f59788477721caa /cores | |
parent | 3e516e93c4aa50a78112c704b89b38f5885a53d5 (diff) |
rework PUSBCallbacks initialization
Diffstat (limited to 'cores')
-rw-r--r-- | cores/arduino/PluggableUSB.cpp | 28 | ||||
-rw-r--r-- | cores/arduino/PluggableUSB.h | 11 |
2 files changed, 17 insertions, 22 deletions
diff --git a/cores/arduino/PluggableUSB.cpp b/cores/arduino/PluggableUSB.cpp index f59fc67..00f400d 100644 --- a/cores/arduino/PluggableUSB.cpp +++ b/cores/arduino/PluggableUSB.cpp @@ -28,12 +28,6 @@ static u8 lastIf = CDC_ACM_INTERFACE + CDC_INTERFACE_COUNT; static u8 lastEp = CDC_FIRST_ENDPOINT + CDC_ENPOINT_COUNT; -class PUSBListNode { -public: - PUSBListNode *next = NULL; - PUSBCallbacks cb; -}; - extern u8 _initEndpoints[]; //PUSBCallbacks cbs[MAX_MODULES]; @@ -47,7 +41,7 @@ int8_t PUSB_GetInterface(u8* interfaceNum) int8_t ret = 0; PUSBListNode* node = rootNode; for (u8 i=0; i<modules_count; i++) { - ret = node->cb.getInterface(interfaceNum); + ret = node->cb->getInterface(interfaceNum); node = node->next; } return ret; @@ -58,7 +52,7 @@ int8_t PUSB_GetDescriptor(int8_t t) int8_t ret = 0; PUSBListNode* node = rootNode; for (u8 i=0; i<modules_count && ret == 0; i++) { - ret = node->cb.getDescriptor(t); + ret = node->cb->getDescriptor(t); node = node->next; } return ret; @@ -69,24 +63,18 @@ bool PUSB_Setup(Setup& setup, u8 j) bool ret = false; PUSBListNode* node = rootNode; for (u8 i=0; i<modules_count && ret == false; i++) { - ret = node->cb.setup(setup, j); + ret = node->cb->setup(setup, j); node = node->next; } return ret; } -int8_t PUSB_AddFunction(PUSBCallbacks *cb, u8* interface) +int8_t PUSB_AddFunction(PUSBListNode *node, u8* interface) { if (modules_count >= MAX_MODULES) { return 0; } - PUSBListNode *node = new PUSBListNode; - - node->cb.setup = cb->setup; - node->cb.getInterface = cb->getInterface; - node->cb.getDescriptor = cb->getDescriptor; - if (modules_count == 0) { rootNode = node; lastNode = node; @@ -95,13 +83,13 @@ int8_t PUSB_AddFunction(PUSBCallbacks *cb, u8* interface) } *interface = lastIf; - lastIf += cb->numInterfaces; - for ( u8 i = 0; i< cb->numEndpoints; i++) { - _initEndpoints[lastEp] = cb->endpointType[i]; + lastIf += node->cb->numInterfaces; + for ( u8 i = 0; i< node->cb->numEndpoints; i++) { + _initEndpoints[lastEp] = node->cb->endpointType[i]; lastEp++; } modules_count++; - return lastEp - cb->numEndpoints; + return lastEp - node->cb->numEndpoints; // restart USB layer??? } diff --git a/cores/arduino/PluggableUSB.h b/cores/arduino/PluggableUSB.h index 8e7f5d7..f729deb 100644 --- a/cores/arduino/PluggableUSB.h +++ b/cores/arduino/PluggableUSB.h @@ -32,7 +32,7 @@ typedef struct int8_t (*getDescriptor)(int8_t t); int8_t numEndpoints; int8_t numInterfaces; - u8 endpointType[]; + uint8_t *endpointType; } PUSBCallbacks; typedef struct @@ -41,7 +41,14 @@ typedef struct u8 firstEndpoint; } PUSBReturn; -int8_t PUSB_AddFunction(PUSBCallbacks *cb, u8 *interface); +class PUSBListNode { +public: + PUSBListNode *next = NULL; + PUSBCallbacks *cb; + PUSBListNode(PUSBCallbacks *ncb) {cb = ncb;} +}; + +int8_t PUSB_AddFunction(PUSBListNode *node, u8 *interface); int8_t PUSB_GetInterface(u8* interfaceNum); |