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
100 void serviceUSB() override {
101 if (!usb_task_active_ && core == getActualCore()) tud_task();
102 }
103
104 int getActualCore() const override {
105#ifdef RP2040_HOWER
106 return get_core_num();
107#else
108 return -1;
109#endif
110 }
111
112 protected:
116
117 USBAudioBackend& backend() override { return backend_impl_; }
118
119 bool beginUSB() override {
121 TinyUSBDevice.setManufacturerDescriptor(config_.manufacturer);
122 TinyUSBDevice.setProductDescriptor(config_.product);
123 TinyUSBDevice.setSerialDescriptor(config_.serial);
125 return TinyUSBDevice.addInterface(*this);
126 }
127
128 void resizeBuffers() override {
129 uint16_t block_sz = packetSize();
130 uint8_t block_cnt = config_.fifo_packets;
131 if (isEpInEnabled()) buffer_tx_.resize(block_sz * block_cnt);
132 if (isEpOutEnabled()) buffer_rx_.resize(block_sz * block_cnt);
133 }
134
136 static uint8_t buffer[USB_DESCR_MAX_LEN];
137 TinyUSBDevice.setConfigurationBuffer(buffer, USB_DESCR_MAX_LEN);
138 }
139};
140
141} // 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:50
bool resize(size_t capacity) override
Resizes the buffer if supported: returns false if not supported.
Definition RingBufferSPSC.h:137
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:391
int core
Definition USBAudioDeviceBase.h:845
USBAudioConfig config_
Definition USBAudioDeviceBase.h:856
bool usb_task_active_
Definition USBAudioDeviceBase.h:836
uint16_t getDescriptor(uint8_t *desc)
Returns the audio-function descriptor block for use in tud_descriptor_configuration_cb().
Definition USBAudioDeviceBase.h:776
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:786
uint16_t packetSize() const
Definition USBAudioDeviceBase.h:1101
bool isFeedbackEpEnabled() const
Returns true if the feedback endpoint is enabled. Only meaningful in pure RX (OUT-only) mode: with an...
Definition USBAudioDeviceBase.h:399
bool isEpOutEnabled() const
Returns true if the OUT endpoint is enabled.
Definition USBAudioDeviceBase.h:394
USBAudioDeviceBase subclass for RP2040 / Adafruit TinyUSB.
Definition USBAudioDeviceTinyUSB.h:40
RingBufferSPSC< uint8_t > buffer_tx_
Definition USBAudioDeviceTinyUSB.h:114
BaseBuffer< uint8_t > & bufferTx() override
Returns the TX audio buffer (public to match USBAudioDeviceESP32, so sketches using the portable USBA...
Definition USBAudioDeviceTinyUSB.h:89
void serviceUSB() override
Process pending USB events. Skipped when a dedicated FreeRTOS task already calls tud_task() continuou...
Definition USBAudioDeviceTinyUSB.h:100
USBAudioDeviceTinyUSB(USBAudioConfig cfg)
Definition USBAudioDeviceTinyUSB.h:43
bool beginUSB() override
Override in platform subclasses to register descriptors and start the USB host-controller stack (e....
Definition USBAudioDeviceTinyUSB.h:119
RingBufferSPSC< uint8_t > buffer_rx_
Definition USBAudioDeviceTinyUSB.h:115
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:128
void setupDescrBuffer()
Definition USBAudioDeviceTinyUSB.h:135
USBAudioBackend & backend() override
Returns the backend used for all raw USB-stack calls (TinyUSB today, or a future native-HAL backend)....
Definition USBAudioDeviceTinyUSB.h:117
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:113
int getActualCore() const override
Returns the actual core on which the call is running (for RP2040)
Definition USBAudioDeviceTinyUSB.h:104
Generic Implementation of sound input and output for desktop environments using portaudio.
Definition LMSEchoCancellationStream.h:6
static Emulated_TinyUSB TinyUSBDevice
Definition USBAudioDeviceESP32.h:253
Configuration for USB Audio (inherits sample_rate / channels / bits_per_sample from AudioInfo).
Definition USBAudioConfig.h:117
bool enable_interrupt_ep
Definition USBAudioConfig.h:197
int16_t ep_fb
ISO IN (explicit feedback, RX-only mode)
Definition USBAudioConfig.h:134
const char * serial
Definition USBAudioConfig.h:162
int16_t ep_in
ISO IN (device → host, capture/microphone)
Definition USBAudioConfig.h:132
const char * product
Definition USBAudioConfig.h:161
int16_t ep_int
INT IN (AC status/change notifications)
Definition USBAudioConfig.h:135
const char * manufacturer
Definition USBAudioConfig.h:160
uint16_t pid
Definition USBAudioConfig.h:159
uint16_t vid
Definition USBAudioConfig.h:158
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