@@ -90,8 +90,7 @@ void HID_::AppendDescriptor(HIDSubDescriptor *node)
9090int HID_::SetFeature (uint8_t id, const void * data, int len)
9191{
9292 if (!rootReport) {
93- static HIDReport report (id, data, len);
94- rootReport = &report;
93+ rootReport = new HIDReport (id, data, len);
9594 } else {
9695 HIDReport* current;
9796 int i=0 ;
@@ -100,11 +99,12 @@ int HID_::SetFeature(uint8_t id, const void* data, int len)
10099 return i;
101100 }
102101 // check if we are on the last report
103- if (i+1 == reportCount)
102+ if (!current->next ) {
103+ current->next = new HIDReport (id, data, len);
104104 break ;
105+ }
105106 }
106- static HIDReport report (id, data, len);
107- current->next = &report;
107+
108108 }
109109
110110 reportCount++;
@@ -149,17 +149,23 @@ bool HID_::setup(USBSetup& setup)
149149
150150 if (setup.wValueH == HID_REPORT_TYPE_FEATURE )
151151 {
152-
152+ // dbg->print(setup.wValueL);
153153 HIDReport* current;
154- for (current=rootReport; current; current=current->next ) {
155-
156- if (current->id == setup.wValueL ) {
154+ int i=0 ;
155+ for (current=rootReport; current && i<reportCount; current=current->next , i++) {
156+ // dbg->print(":");
157+ // dbg->print(current->id);
158+ // dbg->print(" ");
159+ // dbg->print(current->length);
160+ // dbg->print(" ");
161+ if (setup.wValueL == current->id ) {
157162 if (USB_SendControl (0 , &(current->id ), 1 )<0 ||
158163 USB_SendControl (0 , current->data , current->length )<0 )
159- return false ;
160-
164+ return false ;
165+
161166 break ;
162167 }
168+ // dbg->println("");
163169 }
164170
165171 }
0 commit comments