@@ -150,10 +150,16 @@ impl<B: UsbBus> UsbClass<B> for UsbMidiClass<'_, B> {
150150 let midi_streaming_total_length = 7
151151 + ( self . n_in_jacks + self . n_out_jacks ) as usize
152152 * ( MIDI_IN_SIZE + MIDI_OUT_SIZE ) as usize
153- + 9
154- + ( 4 + self . n_out_jacks as usize )
155- + 9
156- + ( 4 + self . n_in_jacks as usize ) ;
153+ + if self . n_out_jacks > 0 {
154+ 9 + ( 4 + self . n_out_jacks as usize )
155+ } else {
156+ 0
157+ }
158+ + if self . n_in_jacks > 0 {
159+ 9 + 4 + self . n_in_jacks as usize
160+ } else {
161+ 0
162+ } ;
157163
158164 // Streaming extra info
159165 writer. write (
@@ -233,37 +239,41 @@ impl<B: UsbBus> UsbClass<B> for UsbMidiClass<'_, B> {
233239 0 , // jack mappings. must be filled in and cropped.
234240 ] ;
235241
236- writer. endpoint_ex ( & self . standard_bulkout , |data| {
237- data[ 0 ] = 0 ; // bRefresh
238- data[ 1 ] = 0 ; // bSynchAddress
239- Ok ( 2 )
240- } ) ?; // len = 9
241-
242- endpoint_data[ 1 ] = self . n_out_jacks ;
243- for i in 0 ..self . n_out_jacks {
244- endpoint_data[ 2 + i as usize ] = self . in_jack_id_emb ( i) ;
242+ if self . n_out_jacks > 0 {
243+ writer. endpoint_ex ( & self . standard_bulkout , |data| {
244+ data[ 0 ] = 0 ; // bRefresh
245+ data[ 1 ] = 0 ; // bSynchAddress
246+ Ok ( 2 )
247+ } ) ?; // len = 9
248+
249+ endpoint_data[ 1 ] = self . n_out_jacks ;
250+ for i in 0 ..self . n_out_jacks {
251+ endpoint_data[ 2 + i as usize ] = self . in_jack_id_emb ( i) ;
252+ }
253+ writer. write (
254+ // len = 4 + self.n_out_jacks
255+ CS_ENDPOINT ,
256+ & endpoint_data[ 0 ..2 + self . n_out_jacks as usize ] ,
257+ ) ?;
245258 }
246- writer. write (
247- // len = 4 + self.n_out_jacks
248- CS_ENDPOINT ,
249- & endpoint_data[ 0 ..2 + self . n_out_jacks as usize ] ,
250- ) ?;
251259
252- writer. endpoint_ex ( & self . standard_bulkin , |data| {
253- data[ 0 ] = 0 ; // bRefresh
254- data[ 1 ] = 0 ; // bSynchAddress
255- Ok ( 2 )
256- } ) ?; // len = 9
257-
258- endpoint_data[ 1 ] = self . n_in_jacks ;
259- for i in 0 ..self . n_in_jacks {
260- endpoint_data[ 2 + i as usize ] = self . out_jack_id_emb ( i) ;
260+ if self . n_in_jacks > 0 {
261+ writer. endpoint_ex ( & self . standard_bulkin , |data| {
262+ data[ 0 ] = 0 ; // bRefresh
263+ data[ 1 ] = 0 ; // bSynchAddress
264+ Ok ( 2 )
265+ } ) ?; // len = 9
266+
267+ endpoint_data[ 1 ] = self . n_in_jacks ;
268+ for i in 0 ..self . n_in_jacks {
269+ endpoint_data[ 2 + i as usize ] = self . out_jack_id_emb ( i) ;
270+ }
271+ writer. write (
272+ // len = 4 + self.n_in_jacks
273+ CS_ENDPOINT ,
274+ & endpoint_data[ 0 ..2 + self . n_in_jacks as usize ] ,
275+ ) ?;
261276 }
262- writer. write (
263- // len = 4 + self.n_in_jacks
264- CS_ENDPOINT ,
265- & endpoint_data[ 0 ..2 + self . n_in_jacks as usize ] ,
266- ) ?;
267277
268278 let midi_streaming_end_byte = writer. position ( ) ;
269279 assert ! ( midi_streaming_end_byte - midi_streaming_start_byte == midi_streaming_total_length) ;
0 commit comments