@@ -79,7 +79,7 @@ static const uint8_t usb_hid_descriptor_template[] = {
79
79
static supervisor_allocation * hid_report_descriptor_allocation ;
80
80
static usb_hid_device_obj_t hid_devices [MAX_HID_DEVICES ];
81
81
// If 0, USB HID is disabled.
82
- static mp_int_t hid_devices_num ;
82
+ static mp_int_t num_hid_devices ;
83
83
84
84
// This tuple is store in usb_hid.devices.
85
85
static mp_obj_tuple_t * hid_devices_tuple ;
@@ -97,7 +97,7 @@ static mp_obj_tuple_t default_hid_devices_tuple = {
97
97
};
98
98
99
99
bool usb_hid_enabled (void ) {
100
- return hid_devices_num > 0 ;
100
+ return num_hid_devices > 0 ;
101
101
}
102
102
103
103
void usb_hid_set_defaults (void ) {
@@ -140,13 +140,13 @@ size_t usb_hid_add_descriptor(uint8_t *descriptor_buf, descriptor_counts_t *desc
140
140
// Make up a fresh tuple containing the device objects saved in the static
141
141
// devices table. Save the tuple in usb_hid.devices.
142
142
static void usb_hid_set_devices_from_hid_devices (void ) {
143
- mp_obj_t tuple_items [hid_devices_num ];
144
- for (mp_int_t i = 0 ; i < hid_devices_num ; i ++ ) {
143
+ mp_obj_t tuple_items [num_hid_devices ];
144
+ for (mp_int_t i = 0 ; i < num_hid_devices ; i ++ ) {
145
145
tuple_items [i ] = & hid_devices [i ];
146
146
}
147
147
148
148
// Remember tuple for gc purposes.
149
- hid_devices_tuple = mp_obj_new_tuple (hid_devices_num , tuple_items );
149
+ hid_devices_tuple = mp_obj_new_tuple (num_hid_devices , tuple_items );
150
150
usb_hid_set_devices (hid_devices_tuple );
151
151
}
152
152
@@ -160,13 +160,15 @@ bool common_hal_usb_hid_enable(const mp_obj_t devices) {
160
160
return false;
161
161
}
162
162
163
- hid_devices_num = MP_OBJ_SMALL_INT_VALUE (mp_obj_len (devices ));
164
- if (hid_devices_num > MAX_HID_DEVICES ) {
163
+ const mp_int_t num_devices = MP_OBJ_SMALL_INT_VALUE (mp_obj_len (devices ));
164
+ if (num_devices > MAX_HID_DEVICES ) {
165
165
mp_raise_ValueError_varg (translate ("No more than %d HID devices allowed" ), MAX_HID_DEVICES );
166
166
}
167
167
168
+ num_hid_devices = num_devices ;
169
+
168
170
// Remember the devices in static storage so they live across VMs.
169
- for (mp_int_t i = 0 ; i < hid_devices_num ; i ++ ) {
171
+ for (mp_int_t i = 0 ; i < num_hid_devices ; i ++ ) {
170
172
// devices has already been validated to contain only usb_hid_device_obj_t objects.
171
173
usb_hid_device_obj_t * device =
172
174
MP_OBJ_TO_PTR (mp_obj_subscr (devices , MP_OBJ_NEW_SMALL_INT (i ), MP_OBJ_SENTINEL ));
@@ -183,20 +185,20 @@ void usb_hid_setup_devices(void) {
183
185
usb_hid_set_devices_from_hid_devices ();
184
186
185
187
// Create report buffers on the heap.
186
- for (mp_int_t i = 0 ; i < hid_devices_num ; i ++ ) {
188
+ for (mp_int_t i = 0 ; i < num_hid_devices ; i ++ ) {
187
189
usb_hid_device_create_report_buffers (& hid_devices [i ]);
188
190
}
189
191
}
190
192
191
193
// Total length of the report descriptor, with all configured devices.
192
194
size_t usb_hid_report_descriptor_length (void ) {
193
195
size_t total_hid_report_descriptor_length = 0 ;
194
- for (mp_int_t i = 0 ; i < hid_devices_num ; i ++ ) {
196
+ for (mp_int_t i = 0 ; i < num_hid_devices ; i ++ ) {
195
197
total_hid_report_descriptor_length += hid_devices [i ].report_descriptor_length ;
196
198
}
197
199
198
200
// Don't need space for a report id if there's only one device.
199
- if (hid_devices_num == 1 ) {
201
+ if (num_hid_devices == 1 ) {
200
202
total_hid_report_descriptor_length -= 2 ;
201
203
}
202
204
return total_hid_report_descriptor_length ;
@@ -210,10 +212,10 @@ void usb_hid_build_report_descriptor(uint8_t *report_descriptor_space, size_t re
210
212
211
213
uint8_t * report_descriptor_start = report_descriptor_space ;
212
214
213
- for (mp_int_t i = 0 ; i < hid_devices_num ; i ++ ) {
215
+ for (mp_int_t i = 0 ; i < num_hid_devices ; i ++ ) {
214
216
usb_hid_device_obj_t * device = & hid_devices [i ];
215
217
// Copy the report descriptor for this device.
216
- if (hid_devices_num == 1 ) {
218
+ if (num_hid_devices == 1 ) {
217
219
// There's only one device, so it shouldn't have a report ID.
218
220
// Copy the descriptor, but splice out the report id indicator and value (2 bytes).
219
221
memcpy (report_descriptor_start , device -> report_descriptor , device -> report_id_index - 1 );
@@ -258,13 +260,13 @@ void usb_hid_gc_collect(void) {
258
260
gc_collect_ptr (hid_devices_tuple );
259
261
260
262
// Mark any heap pointers in the static device list as in use.
261
- for (mp_int_t i = 0 ; i < hid_devices_num ; i ++ ) {
263
+ for (mp_int_t i = 0 ; i < num_hid_devices ; i ++ ) {
262
264
gc_collect_ptr (& hid_devices [i ]);
263
265
}
264
266
}
265
267
266
268
usb_hid_device_obj_t * usb_hid_get_device_with_report_id (uint8_t report_id ) {
267
- for (uint8_t i = 0 ; i < hid_devices_num ; i ++ ) {
269
+ for (uint8_t i = 0 ; i < num_hid_devices ; i ++ ) {
268
270
usb_hid_device_obj_t * device = & hid_devices [i ];
269
271
if (device -> report_id == report_id ) {
270
272
return & hid_devices [i ];
0 commit comments