8000 usb_hid.set_interface_name · ladyada/circuitpython@898708a · GitHub
[go: up one dir, main page]

Skip to content

Commit 898708a

Browse files
committed
usb_hid.set_interface_name
1 parent 54e78c8 commit 898708a

File tree

4 files changed

+43
-3
lines changed

4 files changed

+43
-3
lines changed

shared-bindings/usb_hid/__init__.c

Lines changed: 32 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -155,6 +155,37 @@ STATIC mp_obj_t usb_hid_get_boot_device(void) {
155155
}
156156
MP_DEFINE_CONST_FUN_OBJ_0(usb_hid_get_boot_device_obj, usb_hid_get_boot_device);
157157

158+
159+
//| def set_interface_name(
160+
//| interface_name: str
161+
//| ) -> None:
162+
//| """Override HID interface name in the USB Interface Descriptor.
163+
//|
164+
//| `interface_name` must be ASCII string (or buffers) of at most 126.
165+
//|
166+
//| This method must be called in boot.py to have any effect.
167+
//|
168+
//| Not available on boards without native USB support.
169+
//| """
170+
//| ...
171+
//|
172+
STATIC mp_obj_t usb_hid_set_interface_name(size_t n_args, const mp_obj_t *pos_args, mp_map_t *kw_args) {
173+
static const mp_arg_t allowed_args[] = {
174+
{ MP_QSTR_interface_name, MP_ARG_OBJ | MP_ARG_REQUIRED, {.u_rom_obj = mp_const_none} }
175+
};
176+
mp_arg_val_t args[MP_ARRAY_SIZE(allowed_args)];
177+
mp_arg_parse_all(n_args, pos_args, kw_args, MP_ARRAY_SIZE(allowed_args), allowed_args, (mp_arg_val_t *)&args);
178+
179+
mp_buffer_info_t interface_name;
180+
mp_get_buffer_raise(args[0].u_obj, &interface_name, MP_BUFFER_READ);
181+
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;
184+
185+
return mp_const_none;
186+
}
187+
MP_DEFINE_CONST_FUN_OBJ_KW(usb_hid_set_interface_name_obj, 1, usb_hid_set_interface_name);
188+
158189
// usb_hid.devices is set once the usb devices are determined, after boot.py runs.
159190
STATIC mp_map_elem_t usb_hid_module_globals_table[] = {
160191
{ MP_ROM_QSTR(MP_QSTR___name__), MP_OBJ_NEW_QSTR(MP_QSTR_usb_hid) },
@@ -163,6 +194,7 @@ STATIC mp_map_elem_t usb_hid_module_globals_table[] = {
163194
{ MP_ROM_QSTR(MP_QSTR_disable), MP_OBJ_FROM_PTR(&usb_hid_disable_obj) },
164195
{ MP_ROM_QSTR(MP_QSTR_enable), MP_OBJ_FROM_PTR(&usb_hid_enable_obj) },
165196
{ MP_ROM_QSTR(MP_QSTR_get_boot_device), MP_OBJ_FROM_PTR(&usb_hid_get_boot_device_obj) },
197+
{ MP_ROM_QSTR(MP_QSTR_set_interface_name), MP_OBJ_FROM_PTR(&usb_hid_set_interface_name_obj) },
166198
};
167199

168200
STATIC MP_DEFINE_MUTABLE_DICT(usb_hid_module_globals, usb_hid_module_globals_table);

shared-module/usb_hid/Device.c

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -164,6 +164,10 @@ 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+
};
170+
167171
STATIC size_t get_report_id_idx(usb_hid_device_obj_t *self, size_t report_id) {
168172
for (size_t i = 0; i < self->num_report_ids; i++) {
169173
if (report_id == self->report_ids[i]) {

shared-module/usb_hid/Device.h

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -54,4 +54,10 @@ 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;
62+
5763
#endif /* SHARED_MODULE_USB_HID_DEVICE_H */

shared-module/usb_hid/__init__.c

Lines changed: 1 addition & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -163,8 +163,6 @@ size_t usb_hid_descriptor_length(void) {
163163
return sizeof(usb_hid_descriptor_template);
164164
}
165165

166-
static const char usb_hid_interface_name[] = USB_INTERFACE_NAME " HID";
167-
168166
// This is the interface descriptor, not the report descriptor.
169167
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) {
170168
memcpy(descriptor_buf, usb_hid_descriptor_template, sizeof(usb_hid_descriptor_template));
@@ -177,7 +175,7 @@ size_t usb_hid_add_descriptor(uint8_t *descriptor_buf, descriptor_counts_t *desc
177175
descriptor_buf[HID_DESCRIPTOR_INTERFACE_PROTOCOL_INDEX] = boot_device; // 1: keyboard, 2: mouse
178176
}
179177

180-
usb_add_interface_string(*current_interface_string, usb_hid_interface_name);
178+
usb_add_interface_string(*current_interface_string, usb_hid_interface_name_obj.interface_name);
181179
descriptor_buf[HID_DESCRIPTOR_INTERFACE_STRING_INDEX] = *current_interface_string;
182180
(*current_interface_string)++;
183181

0 commit comments

Comments
 (0)
0