@@ -90,8 +90,7 @@ void HID_::AppendDescriptor(HIDSubDescriptor *node)
90
90
int HID_::SetFeature (uint8_t id, const void * data, int len)
91
91
{
92
92
if (!rootReport) {
93
- static HIDReport report (id, data, len);
94
- rootReport = &report;
93
+ rootReport = new HIDReport (id, data, len);
95
94
} else {
96
95
HIDReport* current;
97
96
int i=0 ;
@@ -100,11 +99,12 @@ int HID_::SetFeature(uint8_t id, const void* data, int len)
100
99
return i;
101
100
}
102
101
// 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);
104
104
break ;
105
+ }
105
106
}
106
- static HIDReport report (id, data, len);
107
- current->next = &report;
107
+
108
108
}
109
109
110
110
reportCount++;
@@ -149,17 +149,23 @@ bool HID_::setup(USBSetup& setup)
149
149
150
150
if (setup.wValueH == HID_REPORT_TYPE_FEATURE)
151
151
{
152
-
152
+ // dbg->print(setup.wValueL);
153
153
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 ) {
157
162
if (USB_SendControl (0 , &(current->id ), 1 )<0 ||
158
163
USB_SendControl (0 , current->data , current->length )<0 )
159
- return false ;
160
-
164
+ return false ;
165
+
161
166
break ;
162
167
}
168
+ // dbg->println("");
163
169
}
164
170
165
171
}
0 commit comments