a848e236d44eb1b5f2fea03650caadd2eda4d3b4
usbd-uac2
USB Audio Class 2.0
This crate provides a USB Audio Class 2.0 implementation for usb-device. It implements all required elements of the specification, however many controls are not implemented (e.g. mixers, effects).
Device behaviour is driven by implementing the ClockSource and
AudioHandler traits to configure the audio pipeline and source/sink data
to/from USB.
Example (creates a UAC2 device with in and out streams):
let mut audio = YourTraitImpl {...};
let config = UsbAudioClassConfig::new(usb_speed, FunctionCode::IoBox, &mut audio)
// base_id is USB entity ID, id 1 is always taken by the clock source, and each stream builds 2 entities
.with_output_config(TerminalConfig::builder().base_id(2).build())
.with_input_config(TerminalConfig::builder().base_id(4).build());
let mut uac2 = config.build(&usb_bus).unwrap();
let mut usb_dev = usbd_uac2::builder(&usb_bus, UsbVidPid(0x1209, 0x0001))
.strings(&[StringDescriptors::default()
.manufacturer("usbd_uac2")
.product("example")])
.unwrap()
.max_packet_size_0(64) // Required to be 64 on HS
.unwrap()
.build();
No work needs to be done in the poll loop, the class implementation will call your trait callbacks as required, just call the usb poll as usual:
loop {
usb_dev.poll(&mut [&mut uac2]);
}
See the trait documentation or examples for additional details.
Languages
Rust
100%