arduino-audio-tools
Loading...
Searching...
No Matches
USBAudioDeviceTinyUSB.h
Go to the documentation of this file.
1#pragma once
2#include <Adafruit_TinyUSB.h>
3
4#include <cstring>
5
9
10namespace audio_tools {
11
40 public Adafruit_USBD_Interface {
41 public:
44
61 uint16_t getInterfaceDescriptor(uint8_t /*itfnum_deprecated*/, uint8_t* buf,
62 uint16_t bufsize) override {
63 if (buf) {
66 if (config_.ep_in < 0)
67 config_.ep_in = TinyUSBDevice.allocEndpoint(TUSB_DIR_IN);
68 } else if (this->isFeedbackEpEnabled()) {
69 if (config_.ep_fb < 0)
70 config_.ep_fb = TinyUSBDevice.allocEndpoint(TUSB_DIR_IN);
71 }
73 if (config_.ep_out < 0)
74 config_.ep_out = TinyUSBDevice.allocEndpoint(TUSB_DIR_OUT);
75 }
77 if (config_.ep_int < 0)
78 config_.ep_int = TinyUSBDevice.allocEndpoint(TUSB_DIR_IN);
79 }
80 }
81 uint16_t len = getDescriptor(buf);
82 assert(bufsize >= len);
83 return len;
84 }
85
89 BaseBuffer<uint8_t>& bufferTx() override { return buffer_tx_; }
90
94 BaseBuffer<uint8_t>& bufferRx() override { return buffer_rx_; }
95
96 protected:
100
101 USBAudioBackend& backend() override { return backend_impl_; }
102
107 void serviceTinyUSB() override {
108 if (!usb_task_active_) tud_task();
109 }
110
111 bool beginUSB() override {
113 TinyUSBDevice.setManufacturerDescriptor(config_.manufacturer);
114 TinyUSBDevice.setProductDescriptor(config_.product);
115 TinyUSBDevice.setSerialDescriptor(config_.serial);
117 return TinyUSBDevice.addInterface(*this);
118 }
119
120 void resizeBuffers() override {
121 uint16_t block_sz = packetSize();
122 uint8_t block_cnt = config_.fifo_packets;
123 if (isEpInEnabled()) buffer_tx_.resize(block_sz * block_cnt);
124 if (isEpOutEnabled()) buffer_rx_.resize(block_sz * block_cnt);
125 }
126
128 static uint8_t buffer[USB_DESCR_MAX_LEN];
129 TinyUSBDevice.setConfigurationBuffer(buffer, USB_DESCR_MAX_LEN);
130 }
131};
132
133} // namespace audio_tools
#define USB_DESCR_MAX_LEN
Definition USBAudioDeviceBase.h:47
#define assert(T)
Definition avr.h:10
Shared functionality of all buffers.
Definition Buffers.h:23
Lock-free Single-Producer Single-Consumer ring buffer.
Definition RingBufferSPSC.h:40
bool resize(size_t capacity) override
Resizes the buffer if supported: returns false if not supported.
Definition RingBufferSPSC.h:120
Abstract seam for every raw USB-stack call the UAC2 driver (USBAudioDeviceBase) needs....
Definition USBAudioBackend.h:160
USBAudioBackend implementation wrapping the real TinyUSB device stack. Injected by the ESP32,...
Definition USBAudioBackendTinyUSB.h:48
USB Audio Device class for audio streaming over USB.
Definition USBAudioDeviceBase.h:109
bool isEpInEnabled() const
Returns true if the IN endpoint is enabled.
Definition USBAudioDeviceBase.h:387
USBAudioConfig config_
Definition USBAudioDeviceBase.h:804
bool usb_task_active_
Definition USBAudioDeviceBase.h:787
uint16_t getDescriptor(uint8_t *desc)
Returns the audio-function descriptor block for use in tud_descriptor_configuration_cb().
Definition USBAudioDeviceBase.h:734
uint8_t numInterfaces() const
Total number of USB interfaces claimed by the audio function (1 AC + 1 or 2 AS), for use in the bNumI...
Definition USBAudioDeviceBase.h:744
uint16_t packetSize() const
Definition USBAudioDeviceBase.h:1043
bool isFeedbackEpEnabled() const
Returns true if the feedback endpoint is enabled. Only meaningful in pure RX (OUT-only) mode: with an...
Definition USBAudioDeviceBase.h:395
bool isEpOutEnabled() const
Returns true if the OUT endpoint is enabled.
Definition USBAudioDeviceBase.h:390
USBAudioDeviceBase subclass for RP2040 / Adafruit TinyUSB.
Definition USBAudioDeviceTinyUSB.h:40
RingBufferSPSC< uint8_t > buffer_tx_
Definition USBAudioDeviceTinyUSB.h:98
BaseBuffer< uint8_t > & bufferTx() override
Returns the TX audio buffer (public to match USBAudioDeviceESP32, so sketches using the portable USBA...
Definition USBAudioDeviceTinyUSB.h:89
USBAudioDeviceTinyUSB(USBAudioConfig cfg)
Definition USBAudioDeviceTinyUSB.h:43
void serviceTinyUSB() override
Process pending USB events. Skipped when a dedicated FreeRTOS task already calls tud_task() continuou...
Definition USBAudioDeviceTinyUSB.h:107
bool beginUSB() override
Override in platform subclasses to register descriptors and start the USB host-controller stack (e....
Definition USBAudioDeviceTinyUSB.h:111
RingBufferSPSC< uint8_t > buffer_rx_
Definition USBAudioDeviceTinyUSB.h:99
uint16_t getInterfaceDescriptor(uint8_t, uint8_t *buf, uint16_t bufsize) override
Definition USBAudioDeviceTinyUSB.h:61
void resizeBuffers() override
Resize the platform audio buffers. Both platforms use NBuffer-style block pools: block size = max USB...
Definition USBAudioDeviceTinyUSB.h:120
void setupDescrBuffer()
Definition USBAudioDeviceTinyUSB.h:127
USBAudioBackend & backend() override
Returns the backend used for all raw USB-stack calls (TinyUSB today, or a future native-HAL backend)....
Definition USBAudioDeviceTinyUSB.h:101
BaseBuffer< uint8_t > & bufferRx() override
Returns the RX audio buffer (public to match USBAudioDeviceESP32, so sketches using the portable USBA...
Definition USBAudioDeviceTinyUSB.h:94
USBAudioBackendTinyUSB backend_impl_
Definition USBAudioDeviceTinyUSB.h:97
Generic Implementation of sound input and output for desktop environments using portaudio.
Definition LMSEchoCancellationStream.h:6
static Emulated_TinyUSB TinyUSBDevice
Definition USBAudioDeviceESP32.h:249
Configuration for USB Audio (inherits sample_rate / channels / bits_per_sample from AudioInfo).
Definition USBAudioConfig.h:117
bool enable_interrupt_ep
Definition USBAudioConfig.h:190
int16_t ep_fb
ISO IN (explicit feedback, RX-only mode)
Definition USBAudioConfig.h:134
const char * serial
Definition USBAudioConfig.h:155
int16_t ep_in
ISO IN (device → host, capture/microphone)
Definition USBAudioConfig.h:132
const char * product
Definition USBAudioConfig.h:154
int16_t ep_int
INT IN (AC status/change notifications)
Definition USBAudioConfig.h:135
const char * manufacturer
Definition USBAudioConfig.h:153
uint16_t pid
Definition USBAudioConfig.h:152
uint16_t vid
Definition USBAudioConfig.h:151
int16_t ep_out
ISO OUT (host → device, playback/speaker)
Definition USBAudioConfig.h:133
bool enable_ep_in
device → host (capture / microphone)
Definition USBAudioConfig.h:120
uint8_t itf_num_ac
Definition USBAudioConfig.h:140
uint8_t fifo_packets
Definition USBAudioConfig.h:148
bool enable_ep_out
host → device (playback / speaker)
Definition USBAudioConfig.h:121