@@ -22,6 +22,8 @@ mod app {
2222 use usb_device:: prelude:: * ;
2323 use usb_device:: bus:: UsbBusAllocator ;
2424
25+ use aligned:: { Aligned , A4 } ;
26+
2527 use bbqueue:: {
2628 BBBuffer ,
2729 Consumer ,
@@ -38,7 +40,8 @@ mod app {
3840 const USB_SAMPLE_SIZE : usize = 4 ;
3941 const SAMPLE_RATE : usize = 96000 ;
4042 const USB_FRAME_RATE : usize = 1000 ;
41- const MAX_FRAME_SIZE : usize = CHANNELS * ( USB_SAMPLE_SIZE * SAMPLE_RATE / USB_FRAME_RATE + 1 ) ;
43+ const MAX_SAMPLES_PER_FRAME : usize = SAMPLE_RATE / USB_FRAME_RATE + 1 ;
44+ const MAX_FRAME_SIZE : usize = CHANNELS * USB_SAMPLE_SIZE * MAX_SAMPLES_PER_FRAME ;
4245 const BUFFER_SIZE : usize = MAX_FRAME_SIZE * 2 ;
4346
4447 #[ shared]
@@ -137,20 +140,44 @@ mod app {
137140 }
138141 }
139142
143+ #[ inline( never) ]
144+ #[ link_section = ".data.sof_timer_handler" ]
145+ #[ task( binds = TIM2 , priority = 3 , local = [ sof_timer] ) ]
146+ fn sof_timer_handler ( cx : sof_timer_handler:: Context ) {
147+ let period = cx. local . sof_timer . get_period_clocks ( ) ;
148+ defmt:: debug!( "SOF :: {0=14..24}.{0=0..14}" , period) ;
149+ }
150+
140151 #[ inline( never) ]
141152 #[ link_section = ".data.usb_handler" ]
142- #[ task( binds = OTG_FS , local = [ producer, usb_dev, usb_audio] ) ]
153+ #[ task( binds = OTG_FS , priority = 2 , local = [
154+ producer,
155+ usb_dev,
156+ usb_audio,
157+ usb_audio_buf: Aligned <A4 , [ u8 ; MAX_FRAME_SIZE ] > = Aligned ( [ 0 ; MAX_FRAME_SIZE ] )
158+ ] ) ]
143159 fn usb_handler ( cx : usb_handler:: Context ) {
144160 let producer: & mut bbqueue:: Producer < ' static , BUFFER_SIZE > = cx. local . producer ;
145161 let usb_dev: & mut UsbDevice < UsbBusType > = cx. local . usb_dev ;
146162 let usb_audio: & mut SimpleStereoOutput < UsbBusType > = cx. local . usb_audio ;
163+ let usb_audio_buf = & mut * * cx. local . usb_audio_buf ;
147164
148165 // TODO replace this with real USB data
149166 let bytes_received: usize = MAX_FRAME_SIZE ;
150167 let data: [ u8 ; MAX_FRAME_SIZE ] = [ 0 ; MAX_FRAME_SIZE ] ;
151168 let volume_amp: i32 = 1 ;
152169
153- while usb_dev. poll ( & mut [ usb_audio] ) {
170+ usb_dev. poll ( & mut [ usb_audio] ) ;
171+ if usb_audio. audio_feedback_needed {
172+ match usb_audio. write_raw_feedback ( 24576 << 6 ) {
173+ Ok ( _) => defmt:: debug!( "USB :: Feedback OK" ) ,
174+ Err ( _) => defmt:: warn!( "USB :: Feedback ERR" ) ,
175+ }
176+ }
177+
178+ if usb_audio. audio_data_available {
179+ let bytes_received = usb_audio. read_audio_data ( usb_audio_buf) . unwrap ( ) ;
180+ defmt:: debug!( "USB :: received {} bytes of audio data" , bytes_received) ;
154181 }
155182
156183 //match producer.grant_exact(bytes_received) {
0 commit comments