Skip to content

Commit 2151c2f

Browse files
committed
Read audio packets
1 parent d0da791 commit 2151c2f

File tree

2 files changed

+31
-3
lines changed

2 files changed

+31
-3
lines changed

Cargo.toml

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -14,6 +14,7 @@ name = "integration"
1414
harness = false
1515

1616
[dependencies]
17+
aligned = "0.4.1"
1718
bbqueue = "0.5.1"
1819
byte-slice-cast = { version = "1.2.1", default-features = false }
1920
bytemuck = "1.11.0"

src/bin/main.rs

Lines changed: 30 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -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

Comments
 (0)