@@ -78,13 +78,110 @@ 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
+ //| def set_names(
82
+ //| self,
83
+ //| *,
84
+ //| streaming_interface_name: str = None,
85
+ //| audio_control_interface_name: str = None,
86
+ //| in_jack_name: str = None,
87
+ //| out_jack_name: str = None
88
+ //| ) -> None:
89
+ //| """Override the MIDI interface names in the USB Interface Descriptor.
90
+ //|
91
+ //| ``streaming_interface_name`` must be an ASCII string (or buffer) of at most 126 characters.
92
+ //| ``audio_control_interface_name`` must be an ASCII string (or buffer) of at most 126 characters.
93
+ //| ``in_jack_name`` must be an ASCII string (or buffer) of at most 126 characters.
94
+ //| ``out_jack_name`` must be an ASCII string (or buffer) of at most 126 characters.
95
+ //|
96
+ //| This method must be called in boot.py to have any effect.
97
+ //|
98
+ //| Not available on boards without native USB support.
99
+ //| """
100
+ //| ...
101
+ //|
102
+ STATIC mp_obj_t usb_midi_set_names (size_t n_args , const mp_obj_t * pos_args , mp_map_t * kw_args ) {
103
+ enum { ARG_streaming_interface_name , ARG_audio_control_interface_name , ARG_in_jack_name , ARG_out_jack_name };
104
+ static const mp_arg_t allowed_args [] = {
105
+ { MP_QSTR_streaming_interface_name , MP_ARG_KW_ONLY | MP_ARG_OBJ , {.u_rom_obj = mp_const_none } },
106
+ { MP_QSTR_audio_control_interface_name , MP_ARG_KW_ONLY | MP_ARG_OBJ , {.u_rom_obj = mp_const_none } },
107
+ { MP_QSTR_in_jack_name , MP_ARG_KW_ONLY | MP_ARG_OBJ , {.u_rom_obj = mp_const_none } },
108
+ { MP_QSTR_out_jack_name , MP_ARG_KW_ONLY | MP_ARG_OBJ , {.u_rom_obj = mp_const_none } },
109
+ };
110
+ mp_arg_val_t args [MP_ARRAY_SIZE (allowed_args )];
111
+ mp_arg_parse_all (n_args , pos_args , kw_args , MP_ARRAY_SIZE (allowed_args ), allowed_args , (mp_arg_val_t * )& args );
112
+
113
+ mp_obj_t streaming_interface_name_obj = args [ARG_streaming_interface_name ].u_obj ;
114
+
115
+ if (streaming_interface_name_obj != mp_const_none ) {
116
+ mp_buffer_info_t streaming_interface_name ;
117
+ mp_get_buffer_raise (streaming_interface_name_obj , & streaming_interface_name , MP_BUFFER_READ );
118
+ mp_arg_validate_length_range (streaming_interface_name .len , 1 , 126 , MP_QSTR_streaming_interface_name );
119
+
120
+ if (custom_usb_midi_streaming_interface_name == NULL ) {
121
+ custom_usb_midi_streaming_interface_name = port_malloc (sizeof (char ) * 128 , false);
122
+ }
123
+
124
+ memcpy (custom_usb_midi_streaming_interface_name , streaming_interface_name .buf , streaming_interface_name .len );
125
+ custom_usb_midi_streaming_interface_name [streaming_interface_name .len ] = 0 ;
126
+ }
127
+
128
+ mp_obj_t audio_control_interface_name_obj = args [ARG_audio_control_interface_name ].u_obj ;
129
+
130
+ if (audio_control_interface_name_obj != mp_const_none ) {
131
+ mp_buffer_info_t audio_control_interface_name ;
132
+ mp_get_buffer_raise (audio_control_interface_name_obj , & audio_control_interface_name , MP_BUFFER_READ );
133
+ mp_arg_validate_length_range (audio_control_interface_name .len , 1 , 126 , MP_QSTR_audio_control_interface_name );
134
+
135
+ if (custom_usb_midi_audio_control_interface_name == NULL ) {
136
+ custom_usb_midi_audio_control_interface_name = port_malloc (sizeof (char ) * 128 , false);
137
+ }
138
+
139
+ memcpy (custom_usb_midi_audio_control_interface_name , audio_control_interface_name .buf , audio_control_interface_name .len );
140
+ custom_usb_midi_audio_control_interface_name [audio_control_interface_name .len ] = 0 ;
141
+ }
142
+
143
+ mp_obj_t in_jack_name_obj = args [ARG_in_jack_name ].u_obj ;
144
+
145
+ if (in_jack_name_obj != mp_const_none ) {
146
+ mp_buffer_info_t in_jack_name ;
147
+ mp_get_buffer_raise (in_jack_name_obj , & in_jack_name , MP_BUFFER_READ );
148
+ mp_arg_validate_length_range (in_jack_name .len , 1 , 126 , MP_QSTR_in_jack_name );
149
+
150
+ if (custom_usb_midi_in_jack_name == NULL ) {
151
+ custom_usb_midi_in_jack_name = port_malloc (sizeof (char ) * 128 , false);
152
+ }
153
+
154
+ memcpy (custom_usb_midi_in_jack_name , in_jack_name .buf , in_jack_name .len );
155
+ custom_usb_midi_in_jack_name [in_jack_name .len ] = 0 ;
156
+ }
157
+
158
+ mp_obj_t out_jack_name_obj = args [ARG_out_jack_name ].u_obj ;
159
+
160
+ if (out_jack_name_obj != mp_const_none ) {
161
+ mp_buffer_info_t out_jack_name ;
162
+ mp_get_buffer_raise (out_jack_name_obj , & out_jack_name , MP_BUFFER_READ );
163
+ mp_arg_validate_length_range (out_jack_name .len , 1 , 126 , MP_QSTR_out_jack_name );
164
+
165
+ if (custom_usb_midi_out_jack_name == NULL ) {
166
+ custom_usb_midi_out_jack_name = port_malloc (sizeof (char ) * 128 , false);
167
+ }
168
+
169
+ memcpy (custom_usb_midi_out_jack_name , out_jack_name .buf , out_jack_name .len );
170
+ custom_usb_midi_out_jack_name [out_jack_name .len ] = 0 ;
171
+ }
172
+
173
+ return mp_const_none ;
174
+ }
175
+ MP_DEFINE_CONST_FUN_OBJ_KW (usb_midi_set_names_obj , 0 , usb_midi_set_names );
176
+
81
177
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 ) },
178
+ { MP_ROM_QSTR (MP_QSTR___name__ ), MP_ROM_QSTR (MP_QSTR_usb_midi ) },
179
+ { MP_ROM_QSTR (MP_QSTR_disable ), MP_OBJ_FROM_PTR (& usb_midi_disable_obj ) },
180
+ { MP_ROM_QSTR (MP_QSTR_enable ), MP_OBJ_FROM_PTR (& usb_midi_enable_obj ) },
181
+ { MP_ROM_QSTR (MP_QSTR_ports ), mp_const_empty_tuple },
182
+ { MP_ROM_QSTR (MP_QSTR_PortIn ), MP_OBJ_FROM_PTR (& usb_midi_portin_type ) },
183
+ { MP_ROM_QSTR (MP_QSTR_PortOut ), MP_OBJ_FROM_PTR (& usb_midi_portout_type ) },
184
+ { MP_ROM_QSTR (MP_QSTR_set_names ), MP_OBJ_FROM_PTR (& usb_midi_set_names_obj ) },
88
185
};
89
186
90
187
// This isn't const so we can set ports dynamically.
0 commit comments