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/USBAudioDeviceBase.h
"
7
#include "
AudioTools/Concurrency/LockFree/RingBufferSPSC.h
"
8
9
namespace
audio_tools
{
10
38
class
USBAudioDeviceTinyUSB
:
public
USBAudioDeviceBase
,
39
public
Adafruit_USBD_Interface {
40
public
:
41
USBAudioDeviceTinyUSB
() =
default
;
42
USBAudioDeviceTinyUSB
(
USBAudioConfig
cfg) :
USBAudioDeviceBase
(cfg) {}
43
60
uint16_t
getInterfaceDescriptor
(uint8_t
/*itfnum_deprecated*/
, uint8_t* buf,
61
uint16_t bufsize)
override
{
62
if
(buf) {
63
config_
.
itf_num_ac
=
TinyUSBDevice
.allocInterface(
numInterfaces
());
64
if
(
config_
.
enable_ep_in
) {
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
}
71
if
(
config_
.
enable_ep_out
) {
72
if
(
config_
.
ep_out
< 0)
73
config_
.
ep_out
=
TinyUSBDevice
.allocEndpoint(TUSB_DIR_OUT);
74
}
75
if
(
config_
.
enable_interrupt_ep
) {
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
:
86
RingBufferSPSC<uint8_t>
buffer_tx_
;
87
RingBufferSPSC<uint8_t>
buffer_rx_
;
88
89
bool
beginUSB
()
override
{
90
TinyUSBDevice
.setID(
config_
.
vid
,
config_
.
pid
);
91
TinyUSBDevice
.setManufacturerDescriptor(
config_
.
manufacturer
);
92
TinyUSBDevice
.setProductDescriptor(
config_
.
product
);
93
TinyUSBDevice
.setSerialDescriptor(
config_
.
serial
);
94
setupDescrBuffer
();
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
108
void
setupDescrBuffer
() {
109
static
uint8_t buffer[
USB_DESCR_MAX_LEN
];
110
TinyUSBDevice
.setConfigurationBuffer(buffer,
USB_DESCR_MAX_LEN
);
111
}
112
};
113
114
}
// namespace audio_tools
RingBufferSPSC.h
USBAudioDeviceBase.h
USB_DESCR_MAX_LEN
#define USB_DESCR_MAX_LEN
Definition
USBAudioDeviceBase.h:37
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::USBAudioDeviceBase
USB Audio Device class for audio streaming over USB.
Definition
USBAudioDeviceBase.h:111
audio_tools::USBAudioDeviceBase::isEpInEnabled
bool isEpInEnabled() const
Returns true if the IN endpoint is enabled.
Definition
USBAudioDeviceBase.h:375
audio_tools::USBAudioDeviceBase::config_
USBAudioConfig config_
Definition
USBAudioDeviceBase.h:835
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:727
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:737
audio_tools::USBAudioDeviceBase::packetSize
uint16_t packetSize() const
Definition
USBAudioDeviceBase.h:1088
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:383
audio_tools::USBAudioDeviceBase::isEpOutEnabled
bool isEpOutEnabled() const
Returns true if the OUT endpoint is enabled.
Definition
USBAudioDeviceBase.h:378
audio_tools::USBAudioDeviceTinyUSB
USBAudioDeviceBase subclass for RP2040 / Adafruit TinyUSB.
Definition
USBAudioDeviceTinyUSB.h:39
audio_tools::USBAudioDeviceTinyUSB::USBAudioDeviceTinyUSB
USBAudioDeviceTinyUSB()=default
audio_tools::USBAudioDeviceTinyUSB::buffer_tx_
RingBufferSPSC< uint8_t > buffer_tx_
Definition
USBAudioDeviceTinyUSB.h:86
audio_tools::USBAudioDeviceTinyUSB::bufferTx
BaseBuffer< uint8_t > & bufferTx() override
Returns the TX audio buffer. Must be overridden by subclasses.
Definition
USBAudioDeviceTinyUSB.h:98
audio_tools::USBAudioDeviceTinyUSB::USBAudioDeviceTinyUSB
USBAudioDeviceTinyUSB(USBAudioConfig cfg)
Definition
USBAudioDeviceTinyUSB.h:42
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:89
audio_tools::USBAudioDeviceTinyUSB::buffer_rx_
RingBufferSPSC< uint8_t > buffer_rx_
Definition
USBAudioDeviceTinyUSB.h:87
audio_tools::USBAudioDeviceTinyUSB::getInterfaceDescriptor
uint16_t getInterfaceDescriptor(uint8_t, uint8_t *buf, uint16_t bufsize) override
Definition
USBAudioDeviceTinyUSB.h:60
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:101
audio_tools::USBAudioDeviceTinyUSB::setupDescrBuffer
void setupDescrBuffer()
Definition
USBAudioDeviceTinyUSB.h:108
audio_tools::USBAudioDeviceTinyUSB::bufferRx
BaseBuffer< uint8_t > & bufferRx() override
Returns the RX audio buffer. Must be overridden by subclasses.
Definition
USBAudioDeviceTinyUSB.h:99
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:198
audio_tools::USBAudioConfig
Configuration for USB Audio (inherits sample_rate / channels / bits_per_sample from AudioInfo).
Definition
USBAudioConfig.h:89
audio_tools::USBAudioConfig::enable_interrupt_ep
bool enable_interrupt_ep
Definition
USBAudioConfig.h:146
audio_tools::USBAudioConfig::ep_fb
int16_t ep_fb
ISO IN (explicit feedback, RX-only mode)
Definition
USBAudioConfig.h:106
audio_tools::USBAudioConfig::serial
const char * serial
Definition
USBAudioConfig.h:127
audio_tools::USBAudioConfig::ep_in
int16_t ep_in
ISO IN (device → host, capture/microphone)
Definition
USBAudioConfig.h:104
audio_tools::USBAudioConfig::product
const char * product
Definition
USBAudioConfig.h:126
audio_tools::USBAudioConfig::ep_int
int16_t ep_int
INT IN (AC status/change notifications)
Definition
USBAudioConfig.h:107
audio_tools::USBAudioConfig::manufacturer
const char * manufacturer
Definition
USBAudioConfig.h:125
audio_tools::USBAudioConfig::pid
uint16_t pid
Definition
USBAudioConfig.h:124
audio_tools::USBAudioConfig::vid
uint16_t vid
Definition
USBAudioConfig.h:123
audio_tools::USBAudioConfig::ep_out
int16_t ep_out
ISO OUT (host → device, playback/speaker)
Definition
USBAudioConfig.h:105
audio_tools::USBAudioConfig::enable_ep_in
bool enable_ep_in
device → host (capture / microphone)
Definition
USBAudioConfig.h:92
audio_tools::USBAudioConfig::itf_num_ac
uint8_t itf_num_ac
Definition
USBAudioConfig.h:112
audio_tools::USBAudioConfig::fifo_packets
uint8_t fifo_packets
Definition
USBAudioConfig.h:120
audio_tools::USBAudioConfig::enable_ep_out
bool enable_ep_out
host → device (playback / speaker)
Definition
USBAudioConfig.h:93
Generated by
1.9.8