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
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
:
113
USBAudioBackendTinyUSB
backend_impl_
;
114
RingBufferSPSC<uint8_t>
buffer_tx_
;
115
RingBufferSPSC<uint8_t>
buffer_rx_
;
116
117
USBAudioBackend
&
backend
()
override
{
return
backend_impl_
; }
118
119
bool
beginUSB
()
override
{
120
TinyUSBDevice
.setID(
config_
.
vid
,
config_
.
pid
);
121
TinyUSBDevice
.setManufacturerDescriptor(
config_
.
manufacturer
);
122
TinyUSBDevice
.setProductDescriptor(
config_
.
product
);
123
TinyUSBDevice
.setSerialDescriptor(
config_
.
serial
);
124
setupDescrBuffer
();
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
135
void
setupDescrBuffer
() {
136
static
uint8_t buffer[
USB_DESCR_MAX_LEN
];
137
TinyUSBDevice
.setConfigurationBuffer(buffer,
USB_DESCR_MAX_LEN
);
138
}
139
};
140
141
}
// 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:50
audio_tools::RingBufferSPSC::resize
bool resize(size_t capacity) override
Resizes the buffer if supported: returns false if not supported.
Definition
RingBufferSPSC.h:137
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:391
audio_tools::USBAudioDeviceBase::core
int core
Definition
USBAudioDeviceBase.h:845
audio_tools::USBAudioDeviceBase::config_
USBAudioConfig config_
Definition
USBAudioDeviceBase.h:856
audio_tools::USBAudioDeviceBase::usb_task_active_
bool usb_task_active_
Definition
USBAudioDeviceBase.h:836
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:776
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:786
audio_tools::USBAudioDeviceBase::packetSize
uint16_t packetSize() const
Definition
USBAudioDeviceBase.h:1101
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:399
audio_tools::USBAudioDeviceBase::isEpOutEnabled
bool isEpOutEnabled() const
Returns true if the OUT endpoint is enabled.
Definition
USBAudioDeviceBase.h:394
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:114
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::serviceUSB
void serviceUSB() override
Process pending USB events. Skipped when a dedicated FreeRTOS task already calls tud_task() continuou...
Definition
USBAudioDeviceTinyUSB.h:100
audio_tools::USBAudioDeviceTinyUSB::USBAudioDeviceTinyUSB
USBAudioDeviceTinyUSB(USBAudioConfig cfg)
Definition
USBAudioDeviceTinyUSB.h:43
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:119
audio_tools::USBAudioDeviceTinyUSB::buffer_rx_
RingBufferSPSC< uint8_t > buffer_rx_
Definition
USBAudioDeviceTinyUSB.h:115
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:128
audio_tools::USBAudioDeviceTinyUSB::setupDescrBuffer
void setupDescrBuffer()
Definition
USBAudioDeviceTinyUSB.h:135
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:117
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:113
audio_tools::USBAudioDeviceTinyUSB::getActualCore
int getActualCore() const override
Returns the actual core on which the call is running (for RP2040)
Definition
USBAudioDeviceTinyUSB.h:104
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:253
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:197
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:162
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:161
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:160
audio_tools::USBAudioConfig::pid
uint16_t pid
Definition
USBAudioConfig.h:159
audio_tools::USBAudioConfig::vid
uint16_t vid
Definition
USBAudioConfig.h:158
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