2323#if defined(USBCON)
2424#ifdef PLUGGABLE_USB_ENABLED
2525
26- #define MAX_MODULES 6
26+ // TODO: set correct value for different CPUs
27+ #define MAX_EP 6
2728
2829extern uint8_t _initEndpoints[];
2930
30- // PUSBCallbacks cbs[MAX_MODULES];
31-
3231PluggableUSB_ PluggableUSB;
3332
3433int PluggableUSB_::getInterface (uint8_t * interfaceNum)
3534{
3635 int ret = 0 ;
37- PUSBListNode* node = rootNode ;
38- for (uint8_t i= 0 ; i<modulesCount; i++ ) {
36+ PUSBListNode* node;
37+ for (node = rootNode; node; node = node-> next ) {
3938 ret = node->getInterface (interfaceNum);
40- node = node->next ;
4139 }
4240 return ret;
4341}
4442
4543int PluggableUSB_::getDescriptor (int8_t t)
4644{
47- int ret = 0 ;
48- PUSBListNode* node = rootNode;
49- for ( uint8_t i= 0 ; i<modulesCount && ret == 0 ; i++) {
50- ret = node-> getDescriptor (t);
51- node = node-> next ;
45+ PUSBListNode* node ;
46+ for ( node = rootNode; node; node = node-> next ) {
47+ int ret = node-> getDescriptor (t);
48+ if (ret)
49+ return ret ;
5250 }
53- return ret ;
51+ return 0 ;
5452}
5553
5654bool PluggableUSB_::setup (USBSetup& setup, uint8_t j)
5755{
58- bool ret = false ;
59- PUSBListNode* node = rootNode;
60- for ( uint8_t i= 0 ; i<modulesCount && ret == false ; i++ ) {
61- ret = node-> setup (setup, j) ;
62- node = node-> next ;
56+ PUSBListNode* node ;
57+ for ( node = rootNode; node; node = node-> next ) {
58+ if (node-> setup (setup, j) ) {
59+ return true ;
60+ }
6361 }
64- return ret ;
62+ return false ;
6563}
6664
6765bool PluggableUSB_::plug (PUSBListNode *node)
6866{
69- if (modulesCount >= MAX_MODULES ) {
67+ if ((lastEp + node-> numEndpoints ) >= MAX_EP ) {
7068 return false ;
7169 }
7270
73- if (modulesCount == 0 ) {
71+ if (!rootNode ) {
7472 rootNode = node;
7573 } else {
7674 PUSBListNode *current = rootNode;
77- while (current->next != NULL ) {
75+ while (current->next ) {
7876 current = current->next ;
7977 }
8078 current->next = node;
@@ -83,18 +81,17 @@ bool PluggableUSB_::plug(PUSBListNode *node)
8381 node->pluggedInterface = lastIf;
8482 node->pluggedEndpoint = lastEp;
8583 lastIf += node->numInterfaces ;
86- for (uint8_t i= 0 ; i< node->numEndpoints ; i++) {
84+ for (uint8_t i = 0 ; i < node->numEndpoints ; i++) {
8785 _initEndpoints[lastEp] = node->endpointType [i];
8886 lastEp++;
8987 }
90- modulesCount++;
9188 return true ;
9289 // restart USB layer???
9390}
9491
9592PluggableUSB_::PluggableUSB_ () : lastIf(CDC_ACM_INTERFACE + CDC_INTERFACE_COUNT),
9693 lastEp(CDC_FIRST_ENDPOINT + CDC_ENPOINT_COUNT),
97- modulesCount( 0 ), rootNode(NULL )
94+ rootNode(NULL )
9895{
9996 // Empty
10097}
0 commit comments