8000 usb_hid.set_interface_name: use port_malloc to allocate memory for in… · ladyada/circuitpython@52c38c8 · GitHub
[go: up one dir, main page]

Skip to content

Navigation Menu

Sign in
Appearance settings

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Appearance settings

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)
0