22#include "USBDescriptor.h"
23#include "USBDevice_Types.h"
27#include "OperationList.h"
28#include "ByteBuffer.h"
29#include "rtos/EventFlags.h"
95 USBAudio(
bool connect =
true, uint32_t frequency_rx = 48000, uint8_t channel_count_rx = 1, uint32_t frequency_tx = 8000, uint8_t channel_count_tx = 1, uint32_t buffer_ms = 10, uint16_t vendor_id = 0x7bb8, uint16_t product_id = 0x1111, uint16_t product_release = 0x0100);
118 USBAudio(
USBPhy *phy, uint32_t frequency_rx, uint8_t channel_count_rx, uint32_t frequency_tx, uint8_t channel_count_tx, uint32_t buffer_ms, uint16_t vendor_id, uint16_t product_id, uint16_t product_release);
148 bool read(uint8_t *buf, uint32_t size);
160 void read_nb(uint8_t *buf, uint32_t size, uint32_t *actual);
190 bool write(uint8_t *buf, uint32_t size);
202 void write_nb(uint8_t *buf, uint32_t size, uint32_t *actual);
258 virtual void callback_set_configuration(uint8_t configuration);
259 virtual void callback_set_interface(uint16_t interface, uint8_t alternate);
261 virtual const uint8_t *string_iproduct_desc();
262 virtual const uint8_t *string_iinterface_desc();
263 virtual const uint8_t *configuration_desc(uint8_t index);
276 void _init(uint32_t frequency_rx, uint8_t channel_count_rx, uint32_t frequency_tx, uint8_t channel_count_tx, uint32_t buffer_ms);
287 void _build_configuration_desc();
289 void _receive_change(ChannelState new_state);
291 void _send_change(ChannelState new_state);
292 void _send_isr_start();
293 void _send_isr_next_sync();
327 uint32_t _rx_overflow;
330 uint32_t _tx_underflow;
337 uint8_t _rx_channel_count;
338 uint8_t _tx_channel_count;
341 uint16_t _tx_frame_fract;
342 uint16_t _tx_whole_frames_per_xfer;
343 uint16_t _tx_fract_frames_per_xfer;
346 uint16_t _tx_packet_size_max;
347 uint16_t _rx_packet_size_max;
350 uint8_t *_tx_packet_buf;
351 uint8_t *_rx_packet_buf;
358 ChannelState _tx_state;
359 ChannelState _rx_state;
376 uint16_t _channel_config_rx;
377 uint16_t _channel_config_tx;
380 uint8_t _config_descriptor[183];
383 uint8_t _control_receive[2];
void write_nb(uint8_t *buf, uint32_t size, uint32_t *actual)
Nonblocking audio data write.
virtual void callback_request(const setup_packet_t *setup)
Called by USBDevice on Endpoint0 request.
void connect()
Connect USBAudio.
void read_nb(uint8_t *buf, uint32_t size, uint32_t *actual)
Nonblocking audio data read.
uint32_t write_underflows(bool clear=false)
Return the number write packets not sent due to underflow.
virtual void callback_request_xfer_done(const setup_packet_t *setup, bool aborted)
Called by USBDevice on data stage completion.
void attach(mbed::Callback< void()> &cb)
Attach a Callback to update the volume.
virtual void callback_state_change(DeviceState new_state)
Called when USB changes state.
virtual ~USBAudio()
Destroy this object.
bool write(uint8_t *buf, uint32_t size)
Write audio data.
void attach_rx(mbed::Callback< void(AudioEvent)> &cb)
attach a Callback to Rx Done
void attach_tx(mbed::Callback< void(AudioEvent)> &cb)
attach a Callback to Tx Done
uint32_t read_overflows(bool clear=false)
Return the number read packets dropped due to overflow.
void write_wait_ready()
Wait until the audio write channel is open.
bool write_ready()
Check if the audio write channel is open.
void disconnect()
Disconnect USBAudio.
void read_wait_ready()
Wait until the audio read channel is open.
USBAudio(USBPhy *phy, uint32_t frequency_rx, uint8_t channel_count_rx, uint32_t frequency_tx, uint8_t channel_count_tx, uint32_t buffer_ms, uint16_t vendor_id, uint16_t product_id, uint16_t product_release)
Fully featured constructor.
USBAudio(bool connect=true, uint32_t frequency_rx=48000, uint8_t channel_count_rx=1, uint32_t frequency_tx=8000, uint8_t channel_count_tx=1, uint32_t buffer_ms=10, uint16_t vendor_id=0x7bb8, uint16_t product_id=0x1111, uint16_t product_release=0x0100)
Basic constructor.
bool read_ready()
Check if the audio read channel is open.
bool read(uint8_t *buf, uint32_t size)
Read audio data.
float get_volume()
Get current volume between 0.0 and 1.0.
Abstract interface to physical USB hardware.
Callback class based on template specialization.
The EventFlags class is used to control event flags or wait for event flags other threads control.