Skip to content

Commit 52c38c8

Browse files
committed
usb_hid.set_interface_name: use port_malloc to allocate memory for interface name
1 parent bf0f9e4 commit 52c38c8

File tree

4 files changed

+18
-15
lines changed

4 files changed

+18
-15
lines changed

shared-bindings/usb_hid/__init__.c

Lines changed: 8 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -156,12 +156,10 @@ STATIC mp_obj_t usb_hid_get_boot_device(void) {
156156
MP_DEFINE_CONST_FUN_OBJ_0(usb_hid_get_boot_device_obj, usb_hid_get_boot_device);
157157

158158

159-
//| def set_interface_name(
160-
//| interface_name: str
161-
//| ) -> None:
159+
//| def set_interface_name(interface_name: str) -> None:
162160
//| """Override HID interface name in the USB Interface Descriptor.
163161
//|
164-
//| `interface_name` must be an ASCII string (or buffer) of at most 126.
162+
//| ``interface_name`` must be an ASCII string (or buffer) of at most 126.
165163
//|
166164
//| This method must be called in boot.py to have any effect.
167165
//|
@@ -179,8 +177,12 @@ STATIC mp_obj_t usb_hid_set_interface_name(size_t n_args, const mp_obj_t *pos_ar
179177
mp_buffer_info_t interface_name;
180178
mp_get_buffer_raise(args[0].u_obj, &interface_name, MP_BUFFER_READ);
181179
mp_arg_validate_length_range(interface_name.len, 1, 126, MP_QSTR_interface_name);
182-
memcpy(usb_hid_interface_name_obj.interface_name, interface_name.buf, interface_name.len);
183-
usb_hid_interface_name_obj.interface_name[interface_name.len] = 0;
180+
181+
if (custom_usb_hid_interface_name == NULL) {
182+
custom_usb_hid_interface_name = port_malloc(sizeof(char) * 128, false);
183+
}
184+
memcpy(custom_usb_hid_interface_name, interface_name.buf, interface_name.len);
185+
custom_usb_hid_interface_name[interface_name.len] = 0;
184186

185187
return mp_const_none;
186188
}

shared-module/usb_hid/Device.c

Lines changed: 1 addition & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -164,9 +164,7 @@ const usb_hid_device_obj_t usb_hid_device_consumer_control_obj = {
164164
.out_report_lengths = { 0, },
165165
};
166166

167-
usb_hid_interface_name_t usb_hid_interface_name_obj = {
168-
.interface_name = USB_INTERFACE_NAME " HID",
169-
};
167+
char *custom_usb_hid_interface_name;
170168

171169
STATIC size_t get_report_id_idx(usb_hid_device_obj_t *self, size_t report_id) {
172170
for (size_t i = 0; i < self->num_report_ids; i++) {

shared-module/usb_hid/Device.h

Lines changed: 1 addition & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -54,10 +54,6 @@ extern const usb_hid_device_obj_t usb_hid_device_consumer_control_obj;
5454

5555
void usb_hid_device_create_report_buffers(usb_hid_device_obj_t *self);
5656

57-
typedef struct {
58-
char interface_name[128];
59-
} usb_hid_interface_name_t;
60-
61-
extern usb_hid_interface_name_t usb_hid_interface_name_obj;
57+
extern char *custom_usb_hid_interface_name;
6258

6359
#endif /* SHARED_MODULE_USB_HID_DEVICE_H */

shared-module/usb_hid/__init__.c

Lines changed: 8 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -165,6 +165,8 @@ size_t usb_hid_descriptor_length(void) {
165165

166166
// This is the interface descriptor, not the report descriptor.
167167
size_t usb_hid_add_descriptor(uint8_t *descriptor_buf, descriptor_counts_t *descriptor_counts, uint8_t *current_interface_string, uint16_t report_descriptor_length, uint8_t boot_device) {
168+
const char *usb_hid_interface_name;
169+
168170
memcpy(descriptor_buf, usb_hid_descriptor_template, sizeof(usb_hid_descriptor_template));
169171

170172
descriptor_buf[HID_DESCRIPTOR_INTERFACE_INDEX] = descriptor_counts->current_interface;
@@ -175,7 +177,12 @@ size_t usb_hid_add_descriptor(uint8_t *descriptor_buf, descriptor_counts_t *desc
175177
descriptor_buf[HID_DESCRIPTOR_INTERFACE_PROTOCOL_INDEX] = boot_device; // 1: keyboard, 2: mouse
176178
}
177179

178-
usb_add_interface_string(*current_interface_string, usb_hid_interface_name_obj.interface_name);
180+
if (custom_usb_hid_interface_name == NULL) {
181+
usb_hid_interface_name = USB_INTERFACE_NAME " HID";
182+
} else {
183+
usb_hid_interface_name = custom_usb_hid_interface_name;
184+
}
185+
usb_add_interface_string(*current_interface_string, usb_hid_interface_name);
179186
descriptor_buf[HID_DESCRIPTOR_INTERFACE_STRING_INDEX] = *current_interface_string;
180187
(*current_interface_string)++;
181188

0 commit comments

Comments
 (0)