@@ -78,13 +78,79 @@ STATIC mp_obj_t usb_midi_enable(void) {
78
78
}
79
79
MP_DEFINE_CONST_FUN_OBJ_0 (usb_midi_enable_obj , usb_midi_enable );
80
80
81
+
82
+ static void set_name (mp_obj_t name_obj , qstr arg_name_qstr , char * * custom_name_p ) {
83
+ if (name_obj != mp_const_none ) {
84
+ mp_buffer_info_t name ;
85
+ mp_get_buffer_raise (name_obj , & name , MP_BUFFER_READ );
86
+ mp_arg_validate_length_range (name .len , 1 , 126 , arg_name_qstr );
87
+
88
+ if (* custom_name_p == NULL ) {
89
+ * custom_name_p = port_malloc (sizeof (char ) * 128 , false);
90
+ }
91
+
92
+ memcpy (* custom_name_p , name .buf , name .len );
93
+ (* custom_name_p )[name .len ] = 0 ;
94
+ }
95
+ }
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
+ //| :param Optional[str] streaming_interface_name: an ASCII string (or buffer) of at most 126 characters, or ``None`` to use the default name.
109
+ //| :param Optional[str] audio_control_interface_name: an ASCII string (or buffer) of at most 126 characters, or ``None`` to use the default name.
110
+ //| :param Optional[str] in_jack_name: an ASCII string (or buffer) of at most 126 characters, or ``None`` to use the default name.
111
+ //| :param Optional[str] out_jack_name: an ASCII string (or buffer) of at most 126 characters, or ``None`` to use the default name.
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
+ enum { ARG_streaming_interface_name , ARG_audio_control_interface_name , ARG_in_jack_name , ARG_out_jack_name };
121
+ static const mp_arg_t allowed_args [] = {
122
+ { MP_QSTR_streaming_interface_name , MP_ARG_KW_ONLY | MP_ARG_OBJ , {.u_rom_obj = mp_const_none } },
123
+ { MP_QSTR_audio_control_interface_name , MP_ARG_KW_ONLY | MP_ARG_OBJ , {.u_rom_obj = mp_const_none } },
124
+ { MP_QSTR_in_jack_name , MP_ARG_KW_ONLY | MP_ARG_OBJ , {.u_rom_obj = mp_const_none } },
125
+ { MP_QSTR_out_jack_name , MP_ARG_KW_ONLY | MP_ARG_OBJ , {.u_rom_obj = mp_const_none } },
126
+ };
127
+ mp_arg_val_t args [MP_ARRAY_SIZE (allowed_args )];
128
+ mp_arg_parse_all (n_args , pos_args , kw_args , MP_ARRAY_SIZE (allowed_args ), allowed_args , (mp_arg_val_t * )& args );
129
+
130
+ mp_obj_t streaming_interface_name_obj = args [ARG_streaming_interface_name ].u_obj ;
131
+ set_name (streaming_interface_name_obj , MP_QSTR_streaming_interface_name , & custom_usb_midi_streaming_interface_name );
132
+
133
+ mp_obj_t audio_control_interface_name_obj = args [ARG_audio_control_interface_name ].u_obj ;
134
+ set_name (audio_control_interface_name_obj , MP_QSTR_audio_control_interface_name , & custom_usb_midi_audio_control_interface_name );
135
+
136
+ mp_obj_t in_jack_name_obj = args [ARG_in_jack_name ].u_obj ;
137
+ set_name (in_jack_name_obj , MP_QSTR_in_jack_name , & custom_usb_midi_in_jack_name );
138
+
139
+ mp_obj_t out_jack_name_obj = args [ARG_out_jack_name ].u_obj ;
140
+ set_name (out_jack_name_obj , MP_QSTR_out_jack_name , & custom_usb_midi_out_jack_name );
141
+
142
+ return mp_const_none ;
143
+ }
144
+ MP_DEFINE_CONST_FUN_OBJ_KW (usb_midi_set_names_obj , 0 , usb_midi_set_names );
145
+
81
146
mp_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 ) },
147
+ { MP_ROM_QSTR (MP_QSTR___name__ ), MP_ROM_QSTR (MP_QSTR_usb_midi ) },
148
+ { MP_ROM_QSTR (MP_QSTR_disable ), MP_OBJ_FROM_PTR (& usb_midi_disable_obj ) },
149
+ { MP_ROM_QSTR (MP_QSTR_enable ), MP_OBJ_FROM_PTR (& usb_midi_enable_obj ) },
150
+ { MP_ROM_QSTR (MP_QSTR_set_names ), MP_OBJ_FROM_PTR (& usb_midi_set_names_obj ) },
151
+ { MP_ROM_QSTR (MP_QSTR_ports ), mp_const_empty_tuple },
152
+ { MP_ROM_QSTR (MP_QSTR_PortIn ), MP_OBJ_FROM_PTR (& usb_midi_portin_type ) },
153
+ { MP_ROM_QSTR (MP_QSTR_PortOut ), MP_OBJ_FROM_PTR (& usb_midi_portout_type ) },
88
154
};
89
155
90
156
// This isn't const so we can set ports dynamically.
0 commit comments