@@ -78,13 +78,76 @@ STATIC mp_obj_t usb_midi_enable(void) {
7878}
7979MP_DEFINE_CONST_FUN_OBJ_0 (usb_midi_enable_obj , usb_midi_enable );
8080
81+ STATIC void set_name (mp_obj_t * arg_obj , qstr arg_name , char * * custom_name ) {
82+ if (* arg_obj == mp_const_none ) {
83+ return ;
84+ }
85+
86+ mp_buffer_info_t name ;
87+ mp_get_buffer_raise (* arg_obj , & name , MP_BUFFER_READ );
88+ mp_arg_validate_length_range (name .len , 1 , 126 , arg_name );
89+
90+ if (* custom_name == NULL ) {
91+ * custom_name = port_malloc (sizeof (char ) * 128 , false);
92+ }
93+
94+ memcpy (* custom_name , name .buf , name .len );
95+ * custom_name [name .len ] = 0 ;
96+ }
97+
98+ //| def set_names(
99+ //| self,
100+ //| *,
101+ //| streaming_interface_name: Optional[str] = None,
102+ //| audio_control_interface_name: Optional[str] = None,
103+ //| in_jack_name: Optional[str] = None,
104+ //| out_jack_name: Optional[str] = None
105+ //| ) -> None:
106+ //| """Override the MIDI interface names in the USB Interface Descriptor.
107+ //|
108+ //| ``streaming_interface_name`` must be an ASCII string (or buffer) of at most 126 characters.
109+ //| ``audio_control_interface_name`` must be an ASCII string (or buffer) of at most 126 characters.
110+ //| ``in_jack_name`` must be an ASCII string (or buffer) of at most 126 characters.
111+ //| ``out_jack_name`` must be an ASCII string (or buffer) of at most 126 characters.
112+ //|
113+ //| This method must be called in boot.py to have any effect.
114+ //|
115+ //| Not available on boards without native USB support.
116+ //| """
117+ //| ...
118+ //|
119+ STATIC mp_obj_t usb_midi_set_names (size_t n_args , const mp_obj_t * pos_args , mp_map_t * kw_args ) {
120+ static const mp_arg_t allowed_args [] = {
121+ { MP_QSTR_streaming_interface_name , MP_ARG_KW_ONLY | MP_ARG_OBJ , {.u_rom_obj = mp_const_none } },
122+ { MP_QSTR_audio_control_interface_name , MP_ARG_KW_ONLY | MP_ARG_OBJ , {.u_rom_obj = mp_const_none } },
123+ { MP_QSTR_in_jack_name , MP_ARG_KW_ONLY | MP_ARG_OBJ , {.u_rom_obj = mp_const_none } },
124+ { MP_QSTR_out_jack_name , MP_ARG_KW_ONLY | MP_ARG_OBJ , {.u_rom_obj = mp_const_none } },
125+ };
126+ struct {
127+ mp_arg_val_t streaming_interface_name ;
128+ mp_arg_val_t audio_control_interface_name ;
129+ mp_arg_val_t in_jack_name ;
130+ mp_arg_val_t out_jack_name ;
131+ } args ;
132+ mp_arg_parse_all (n_args , pos_args , kw_args , MP_ARRAY_SIZE (allowed_args ), allowed_args , (mp_arg_val_t * )& args );
133+
134+ set_name (& (args .streaming_interface_name .u_obj ), MP_QSTR_streaming_interface_name , & custom_usb_midi_streaming_interface_name );
135+ set_name (& (args .audio_control_interface_name .u_obj ), MP_QSTR_audio_control_interface_name , & custom_usb_midi_audio_control_interface_name );
136+ set_name (& (args .in_jack_name .u_obj ), MP_QSTR_in_jack_name , & custom_usb_midi_in_jack_name );
137+ set_name (& (args .out_jack_name .u_obj ), MP_QSTR_out_jack_name , & custom_usb_midi_out_jack_name );
138+
139+ return mp_const_none ;
140+ }
141+ MP_DEFINE_CONST_FUN_OBJ_KW (usb_midi_set_names_obj , 0 , usb_midi_set_names );
142+
81143mp_map_elem_t usb_midi_module_globals_table [] = {
82- { MP_ROM_QSTR (MP_QSTR___name__ ), MP_ROM_QSTR (MP_QSTR_usb_midi ) },
83- { MP_ROM_QSTR (MP_QSTR_disable ), MP_OBJ_FROM_PTR (& usb_midi_disable_obj ) },
84- { MP_ROM_QSTR (MP_QSTR_enable ), MP_OBJ_FROM_PTR (& usb_midi_enable_obj ) },
85- { MP_ROM_QSTR (MP_QSTR_ports ), mp_const_empty_tuple },
86- { MP_ROM_QSTR (MP_QSTR_PortIn ), MP_OBJ_FROM_PTR (& usb_midi_portin_type ) },
87- { MP_ROM_QSTR (MP_QSTR_PortOut ), MP_OBJ_FROM_PTR (& usb_midi_portout_type ) },
144+ { MP_ROM_QSTR (MP_QSTR___name__ ), MP_ROM_QSTR (MP_QSTR_usb_midi ) },
145+ { MP_ROM_QSTR (MP_QSTR_disable ), MP_OBJ_FROM_PTR (& usb_midi_disable_obj ) },
146+ { MP_ROM_QSTR (MP_QSTR_enable ), MP_OBJ_FROM_PTR (& usb_midi_enable_obj ) },
147+ { MP_ROM_QSTR (MP_QSTR_set_names ), MP_OBJ_FROM_PTR (& usb_midi_set_names_obj ) },
148+ { MP_ROM_QSTR (MP_QSTR_ports ), mp_const_empty_tuple },
149+ { MP_ROM_QSTR (MP_QSTR_PortIn ), MP_OBJ_FROM_PTR (& usb_midi_portin_type ) },
150+ { MP_ROM_QSTR (MP_QSTR_PortOut ), MP_OBJ_FROM_PTR (& usb_midi_portout_type ) },
88151};
89152
90153// This isn't const so we can set ports dynamically.
0 commit comments