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
8
9namespace audio_tools {
10
39 public Adafruit_USBD_Interface {
40 public:
43
60 uint16_t getInterfaceDescriptor(uint8_t /*itfnum_deprecated*/, uint8_t* buf,
61 uint16_t bufsize) override {
62 if (buf) {
65 if (config_.ep_in < 0)
66 config_.ep_in = TinyUSBDevice.allocEndpoint(TUSB_DIR_IN);
67 } else if (this->isFeedbackEpEnabled()) {
68 if (config_.ep_fb < 0)
69 config_.ep_fb = TinyUSBDevice.allocEndpoint(TUSB_DIR_IN);
70 }
72 if (config_.ep_out < 0)
73 config_.ep_out = TinyUSBDevice.allocEndpoint(TUSB_DIR_OUT);
74 }
76 if (config_.ep_int < 0)
77 config_.ep_int = TinyUSBDevice.allocEndpoint(TUSB_DIR_IN);
78 }
79 }
80 uint16_t len = getDescriptor(buf);
81 assert(bufsize >= len);
82 return len;
83 }
84
85 protected:
88
89 bool beginUSB() override {
91 TinyUSBDevice.setManufacturerDescriptor(config_.manufacturer);
92 TinyUSBDevice.setProductDescriptor(config_.product);
93 TinyUSBDevice.setSerialDescriptor(config_.serial);
95 return TinyUSBDevice.addInterface(*this);
96 }
97
98 BaseBuffer<uint8_t>& bufferTx() override { return buffer_tx_; }
99 BaseBuffer<uint8_t>& bufferRx() override { return buffer_rx_; }
100
101 void resizeBuffers() override {
102 uint16_t block_sz = packetSize();
103 uint8_t block_cnt = config_.fifo_packets;
104 if (isEpInEnabled()) buffer_tx_.resize(block_sz * block_cnt);
105 if (isEpOutEnabled()) buffer_rx_.resize(block_sz * block_cnt);
106 }
107
109 static uint8_t buffer[USB_DESCR_MAX_LEN];
110 TinyUSBDevice.setConfigurationBuffer(buffer, USB_DESCR_MAX_LEN);
111 }
112};
113
114} // namespace audio_tools
#define USB_DESCR_MAX_LEN
Definition USBAudioDeviceBase.h:37
#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
USB Audio Device class for audio streaming over USB.
Definition USBAudioDeviceBase.h:111
bool isEpInEnabled() const
Returns true if the IN endpoint is enabled.
Definition USBAudioDeviceBase.h:375
USBAudioConfig config_
Definition USBAudioDeviceBase.h:835
uint16_t getDescriptor(uint8_t *desc)
Returns the audio-function descriptor block for use in tud_descriptor_configuration_cb().
Definition USBAudioDeviceBase.h:727
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:737
uint16_t packetSize() const
Definition USBAudioDeviceBase.h:1088
bool isFeedbackEpEnabled() const
Returns true if the feedback endpoint is enabled. Only meaningful in pure RX (OUT-only) mode: with an...
Definition USBAudioDeviceBase.h:383
bool isEpOutEnabled() const
Returns true if the OUT endpoint is enabled.
Definition USBAudioDeviceBase.h:378
USBAudioDeviceBase subclass for RP2040 / Adafruit TinyUSB.
Definition USBAudioDeviceTinyUSB.h:39
RingBufferSPSC< uint8_t > buffer_tx_
Definition USBAudioDeviceTinyUSB.h:86
BaseBuffer< uint8_t > & bufferTx() override
Returns the TX audio buffer. Must be overridden by subclasses.
Definition USBAudioDeviceTinyUSB.h:98
USBAudioDeviceTinyUSB(USBAudioConfig cfg)
Definition USBAudioDeviceTinyUSB.h:42
bool beginUSB() override
Override in platform subclasses to register descriptors and start the USB host-controller stack (e....
Definition USBAudioDeviceTinyUSB.h:89
RingBufferSPSC< uint8_t > buffer_rx_
Definition USBAudioDeviceTinyUSB.h:87
uint16_t getInterfaceDescriptor(uint8_t, uint8_t *buf, uint16_t bufsize) override
Definition USBAudioDeviceTinyUSB.h:60
void resizeBuffers() override
Resize the platform audio buffers. Both platforms use NBuffer-style block pools: block size = max USB...
Definition USBAudioDeviceTinyUSB.h:101
void setupDescrBuffer()
Definition USBAudioDeviceTinyUSB.h:108
BaseBuffer< uint8_t > & bufferRx() override
Returns the RX audio buffer. Must be overridden by subclasses.
Definition USBAudioDeviceTinyUSB.h:99
Generic Implementation of sound input and output for desktop environments using portaudio.
Definition LMSEchoCancellationStream.h:6
static Emulated_TinyUSB TinyUSBDevice
Definition USBAudioDeviceESP32.h:198
Configuration for USB Audio (inherits sample_rate / channels / bits_per_sample from AudioInfo).
Definition USBAudioConfig.h:89
bool enable_interrupt_ep
Definition USBAudioConfig.h:146
int16_t ep_fb
ISO IN (explicit feedback, RX-only mode)
Definition USBAudioConfig.h:106
const char * serial
Definition USBAudioConfig.h:127
int16_t ep_in
ISO IN (device → host, capture/microphone)
Definition USBAudioConfig.h:104
const char * product
Definition USBAudioConfig.h:126
int16_t ep_int
INT IN (AC status/change notifications)
Definition USBAudioConfig.h:107
const char * manufacturer
Definition USBAudioConfig.h:125
uint16_t pid
Definition USBAudioConfig.h:124
uint16_t vid
Definition USBAudioConfig.h:123
int16_t ep_out
ISO OUT (host → device, playback/speaker)
Definition USBAudioConfig.h:105
bool enable_ep_in
device → host (capture / microphone)
Definition USBAudioConfig.h:92
uint8_t itf_num_ac
Definition USBAudioConfig.h:112
uint8_t fifo_packets
Definition USBAudioConfig.h:120
bool enable_ep_out
host → device (playback / speaker)
Definition USBAudioConfig.h:93