arduino-audio-tools
Loading...
Searching...
No Matches
src
AudioTools
Communication
USB
USBAudioDeviceTinyUSB.h
Go to the documentation of this file.
1
#pragma once
2
#include <Adafruit_TinyUSB.h>
3
4
#include <cstring>
5
6
#include "
AudioTools/Communication/USB/USBAudioBackendTinyUSB.h
"
7
#include "
AudioTools/Communication/USB/USBAudioDeviceBase.h
"
8
#include "
AudioTools/Concurrency/LockFree/RingBufferSPSC.h
"
9
10
namespace
audio_tools
{
11
39
class
USBAudioDeviceTinyUSB
:
public
USBAudioDeviceBase
,
40
public
Adafruit_USBD_Interface {
41
public
:
42
USBAudioDeviceTinyUSB
() =
default
;
43
USBAudioDeviceTinyUSB
(
USBAudioConfig
cfg) :
USBAudioDeviceBase
(cfg) {}
44
61
uint16_t
getInterfaceDescriptor
(uint8_t
/*itfnum_deprecated*/
, uint8_t* buf,
62
uint16_t bufsize)
override
{
63
if
(buf) {
64
config_
.
itf_num_ac
=
TinyUSBDevice
.allocInterface(
numInterfaces
());
65
if
(
config_
.
enable_ep_in
) {
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
}
72
if
(
config_
.
enable_ep_out
) {
73
if
(
config_
.
ep_out
< 0)
74
config_
.
ep_out
=
TinyUSBDevice
.allocEndpoint(TUSB_DIR_OUT);
75
}
76
if
(
config_
.
enable_interrupt_ep
) {
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
:
97
USBAudioBackendTinyUSB
backend_impl_
;
98
RingBufferSPSC<uint8_t>
buffer_tx_
;
99
RingBufferSPSC<uint8_t>
buffer_rx_
;
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
{
112
TinyUSBDevice
.setID(
config_
.
vid
,
config_
.
pid
);
113
TinyUSBDevice
.setManufacturerDescriptor(
config_
.
manufacturer
);
114
TinyUSBDevice
.setProductDescriptor(
config_
.
product
);
115
TinyUSBDevice
.setSerialDescriptor(
config_
.
serial
);
116
setupDescrBuffer
();
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
127
void
setupDescrBuffer
() {
128
static
uint8_t buffer[
USB_DESCR_MAX_LEN
];
129
TinyUSBDevice
.setConfigurationBuffer(buffer,
USB_DESCR_MAX_LEN
);
130
}
131
};
132
133
}
// namespace audio_tools
RingBufferSPSC.h
USBAudioBackendTinyUSB.h
USBAudioDeviceBase.h
USB_DESCR_MAX_LEN
#define USB_DESCR_MAX_LEN
Definition
USBAudioDeviceBase.h:47
assert
#define assert(T)
Definition
avr.h:10
audio_tools::BaseBuffer
Shared functionality of all buffers.
Definition
Buffers.h:23
audio_tools::RingBufferSPSC
Lock-free Single-Producer Single-Consumer ring buffer.
Definition
RingBufferSPSC.h:40
audio_tools::RingBufferSPSC::resize
bool resize(size_t capacity) override
Resizes the buffer if supported: returns false if not supported.
Definition
RingBufferSPSC.h:120
audio_tools::USBAudioBackend
Abstract seam for every raw USB-stack call the UAC2 driver (USBAudioDeviceBase) needs....
Definition
USBAudioBackend.h:160
audio_tools::USBAudioBackendTinyUSB
USBAudioBackend implementation wrapping the real TinyUSB device stack. Injected by the ESP32,...
Definition
USBAudioBackendTinyUSB.h:48
audio_tools::USBAudioDeviceBase
USB Audio Device class for audio streaming over USB.
Definition
USBAudioDeviceBase.h:109
audio_tools::USBAudioDeviceBase::isEpInEnabled
bool isEpInEnabled() const
Returns true if the IN endpoint is enabled.
Definition
USBAudioDeviceBase.h:387
audio_tools::USBAudioDeviceBase::config_
USBAudioConfig config_
Definition
USBAudioDeviceBase.h:804
audio_tools::USBAudioDeviceBase::usb_task_active_
bool usb_task_active_
Definition
USBAudioDeviceBase.h:787
audio_tools::USBAudioDeviceBase::getDescriptor
uint16_t getDescriptor(uint8_t *desc)
Returns the audio-function descriptor block for use in tud_descriptor_configuration_cb().
Definition
USBAudioDeviceBase.h:734
audio_tools::USBAudioDeviceBase::numInterfaces
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
audio_tools::USBAudioDeviceBase::packetSize
uint16_t packetSize() const
Definition
USBAudioDeviceBase.h:1043
audio_tools::USBAudioDeviceBase::isFeedbackEpEnabled
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
audio_tools::USBAudioDeviceBase::isEpOutEnabled
bool isEpOutEnabled() const
Returns true if the OUT endpoint is enabled.
Definition
USBAudioDeviceBase.h:390
audio_tools::USBAudioDeviceTinyUSB
USBAudioDeviceBase subclass for RP2040 / Adafruit TinyUSB.
Definition
USBAudioDeviceTinyUSB.h:40
audio_tools::USBAudioDeviceTinyUSB::USBAudioDeviceTinyUSB
USBAudioDeviceTinyUSB()=default
audio_tools::USBAudioDeviceTinyUSB::buffer_tx_
RingBufferSPSC< uint8_t > buffer_tx_
Definition
USBAudioDeviceTinyUSB.h:98
audio_tools::USBAudioDeviceTinyUSB::bufferTx
BaseBuffer< uint8_t > & bufferTx() override
Returns the TX audio buffer (public to match USBAudioDeviceESP32, so sketches using the portable USBA...
Definition
USBAudioDeviceTinyUSB.h:89
audio_tools::USBAudioDeviceTinyUSB::USBAudioDeviceTinyUSB
USBAudioDeviceTinyUSB(USBAudioConfig cfg)
Definition
USBAudioDeviceTinyUSB.h:43
audio_tools::USBAudioDeviceTinyUSB::serviceTinyUSB
void serviceTinyUSB() override
Process pending USB events. Skipped when a dedicated FreeRTOS task already calls tud_task() continuou...
Definition
USBAudioDeviceTinyUSB.h:107
audio_tools::USBAudioDeviceTinyUSB::beginUSB
bool beginUSB() override
Override in platform subclasses to register descriptors and start the USB host-controller stack (e....
Definition
USBAudioDeviceTinyUSB.h:111
audio_tools::USBAudioDeviceTinyUSB::buffer_rx_
RingBufferSPSC< uint8_t > buffer_rx_
Definition
USBAudioDeviceTinyUSB.h:99
audio_tools::USBAudioDeviceTinyUSB::getInterfaceDescriptor
uint16_t getInterfaceDescriptor(uint8_t, uint8_t *buf, uint16_t bufsize) override
Definition
USBAudioDeviceTinyUSB.h:61
audio_tools::USBAudioDeviceTinyUSB::resizeBuffers
void resizeBuffers() override
Resize the platform audio buffers. Both platforms use NBuffer-style block pools: block size = max USB...
Definition
USBAudioDeviceTinyUSB.h:120
audio_tools::USBAudioDeviceTinyUSB::setupDescrBuffer
void setupDescrBuffer()
Definition
USBAudioDeviceTinyUSB.h:127
audio_tools::USBAudioDeviceTinyUSB::backend
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
audio_tools::USBAudioDeviceTinyUSB::bufferRx
BaseBuffer< uint8_t > & bufferRx() override
Returns the RX audio buffer (public to match USBAudioDeviceESP32, so sketches using the portable USBA...
Definition
USBAudioDeviceTinyUSB.h:94
audio_tools::USBAudioDeviceTinyUSB::backend_impl_
USBAudioBackendTinyUSB backend_impl_
Definition
USBAudioDeviceTinyUSB.h:97
audio_tools
Generic Implementation of sound input and output for desktop environments using portaudio.
Definition
LMSEchoCancellationStream.h:6
audio_tools::TinyUSBDevice
static Emulated_TinyUSB TinyUSBDevice
Definition
USBAudioDeviceESP32.h:249
audio_tools::USBAudioConfig
Configuration for USB Audio (inherits sample_rate / channels / bits_per_sample from AudioInfo).
Definition
USBAudioConfig.h:117
audio_tools::USBAudioConfig::enable_interrupt_ep
bool enable_interrupt_ep
Definition
USBAudioConfig.h:190
audio_tools::USBAudioConfig::ep_fb
int16_t ep_fb
ISO IN (explicit feedback, RX-only mode)
Definition
USBAudioConfig.h:134
audio_tools::USBAudioConfig::serial
const char * serial
Definition
USBAudioConfig.h:155
audio_tools::USBAudioConfig::ep_in
int16_t ep_in
ISO IN (device → host, capture/microphone)
Definition
USBAudioConfig.h:132
audio_tools::USBAudioConfig::product
const char * product
Definition
USBAudioConfig.h:154
audio_tools::USBAudioConfig::ep_int
int16_t ep_int
INT IN (AC status/change notifications)
Definition
USBAudioConfig.h:135
audio_tools::USBAudioConfig::manufacturer
const char * manufacturer
Definition
USBAudioConfig.h:153
audio_tools::USBAudioConfig::pid
uint16_t pid
Definition
USBAudioConfig.h:152
audio_tools::USBAudioConfig::vid
uint16_t vid
Definition
USBAudioConfig.h:151
audio_tools::USBAudioConfig::ep_out
int16_t ep_out
ISO OUT (host → device, playback/speaker)
Definition
USBAudioConfig.h:133
audio_tools::USBAudioConfig::enable_ep_in
bool enable_ep_in
device → host (capture / microphone)
Definition
USBAudioConfig.h:120
audio_tools::USBAudioConfig::itf_num_ac
uint8_t itf_num_ac
Definition
USBAudioConfig.h:140
audio_tools::USBAudioConfig::fifo_packets
uint8_t fifo_packets
Definition
USBAudioConfig.h:148
audio_tools::USBAudioConfig::enable_ep_out
bool enable_ep_out
host → device (playback / speaker)
Definition
USBAudioConfig.h:121
Generated by
1.9.8