26 const char*
ssid =
nullptr;
99 LOGE(
"Only 16 bits supported")
115 size_t write(
const uint8_t* data,
size_t len)
override {
118 int16_t* adc_data = (int16_t*)data;
126 for (
int j = 0; j < samples; j++) {
184 LOGE(
"Wifi not connected");
187 WiFi.setSleep(
false);
196 LOGE(
"Wifi not connected");
199 WiFi.setSleep(
false);
201 this->available_active =
false;
208 udp.onPacket([
this](AsyncUDPPacket packet) {
receive_udp(packet); });
224 if (
cfg.
ssid ==
nullptr)
return;
340 static char str[11] = {0};
341 snprintf(str, 11,
"%d.%d.%d.%d", adr[0], adr[1], adr[2], adr[3]);
361 uint16_t vban_rx_data_bytes, vban_rx_sample_count;
362 int16_t* vban_rx_data;
363 uint32_t* vban_rx_pkt_nbr;
367 int len = packet.length();
369 LOGD(
"receive_udp %d", len);
370 uint8_t* udpIncomingPacket = packet.data();
375 LOGE(
"Too short to be VBAN (%u bytes)", len);
380 if (strncmp(
"VBAN", (
const char*)udpIncomingPacket, 4) != 0) {
381 LOGE(
"Unrecognized preamble %.4s", udpIncomingPacket);
390 LOGE(
"Service packet length invalid: %u bytes", len);
396 LOGE(
"Audio/other packet length invalid: %u bytes", len);
411 uint8_t service_type = udpIncomingPacket[5];
412 uint8_t service_fnct = udpIncomingPacket[6];
416 uint8_t function = service_fnct & 0x7F;
418 if (!isReply && function == 0) {
419 LOGI(
"Received VBAN PING0 request");
433 uint8_t vbanSampleRateIdx = udpIncomingPacket[4] &
VBAN_SR_MASK;
434 uint8_t vbchannels = udpIncomingPacket[6] + 1;
435 uint8_t vbframes = udpIncomingPacket[5] + 1;
438 uint32_t vbanSampleRate =
VBanSRList[vbanSampleRateIdx];
445 LOGE(
"Format ignored: 0x%x", vbformat);
451 LOGE(
"Format only 16 bits supported");
458 LOGE(
"unexpected packet size: %u", vban_rx_sample_count);
474 int size_written =
p_out->
write((uint8_t*)vban_rx_data, vban_rx_data_bytes);
475 if (size_written != vban_rx_data_bytes) {
476 LOGE(
"buffer overflow %d -> %d", vban_rx_data_bytes, size_written);
483 if (size_written != vban_rx_data_bytes) {
484 LOGE(
"buffer overflow %d -> %d", vban_rx_data_bytes, size_written);
492 LOGI(
"Activating vban");
503 memset(header, 0,
sizeof(header));
504 memcpy(header,
"VBAN", 4);
509 const uint8_t* data = sourcePacket.data();
510 memcpy(&header[8], &data[8], 16);
513 uint32_t frameNumber = (uint32_t)((data[24] & 0xFF) | ((data[25] & 0xFF) << 8) | ((data[26] & 0xFF) << 16) | ((data[27] & 0xFF) << 24));
514 memcpy(&header[24], &frameNumber, 4);
518 memset(&ping0, 0,
sizeof(ping0));
554 WiFi.macAddress(mac);
556 snprintf(macStr,
sizeof(macStr),
"%02X:%02X:%02X:%02X:%02X:%02X", mac[0], mac[1], mac[2], mac[3], mac[4], mac[5]);
566 if (!hostName || hostName[0] ==
'\0') {
567 hostName =
WiFi.getHostname();
568 if (!hostName) hostName =
"ESP32";
579 memcpy(packet, header, 28);
580 memcpy(packet + 28, &ping0,
sizeof(
VBAN_PING0));
583 udp.writeTo(packet,
sizeof(packet), sourcePacket.remoteIP(), sourcePacket.remotePort());
588 if (dest_size == 0)
return;
589 strncpy(dest, src, dest_size - 1);
590 dest[dest_size - 1] =
'\0';
static HardwareSerial Serial
Definition Arduino.h:179
#define TRACED()
Definition AudioLoggerIDF.h:31
#define LOGI(...)
Definition AudioLoggerIDF.h:28
#define LOGD(...)
Definition AudioLoggerIDF.h:27
#define LOGE(...)
Definition AudioLoggerIDF.h:30
#define DEFAULT_BUFFER_SIZE
Definition avr.h:20
virtual size_t write(const uint8_t *data, size_t len)
Definition Arduino.h:120
RxTxMode
The Microcontroller is the Audio Source (TX_MODE) or Audio Sink (RX_MODE). RXTX_MODE is Source and Si...
Definition AudioTypes.h:26
@ TX_MODE
Definition AudioTypes.h:26
uint16_t DistantReserved
Definition vban.h:195
char ManufacturerName_ascii[64]
Definition vban.h:197
char DeviceName_ascii[64]
Definition vban.h:196
char UserName_utf8[128]
Definition vban.h:200
char HostName_ascii[64]
Definition vban.h:199
char USER_Position[8]
Definition vban.h:189
char LangCode_ascii[8]
Definition vban.h:190
char ApplicationName_ascii[64]
Definition vban.h:198
char UserComment_utf8[128]
Definition vban.h:201
char DistantIP_ascii[32]
Definition vban.h:193
uint8_t nVersion[4]
Definition vban.h:187
uint32_t bitfeature
Definition vban.h:181
uint32_t bitfeatureEx
Definition vban.h:182
uint32_t MaxRate
Definition vban.h:185
uint32_t bitType
Definition vban.h:180
uint32_t PreferedRate
Definition vban.h:183
uint32_t color_rgb
Definition vban.h:186
uint32_t MinRate
Definition vban.h:184
uint16_t DistantPort
Definition vban.h:194
uint16_t packet_total_bytes
Definition vban.h:67
uint8_t * data_frame
Definition vban.h:64
uint8_t packet[1464]
Definition vban.h:65
uint32_t * packet_counter
Definition vban.h:63
uint16_t packet_data_bytes
Definition vban.h:66
VBanHeader * hdr
Definition vban.h:62
#define VBAN_SERVICE_FNCT_REPLY
Definition vban.h:177
#define VBAN_PROTOCOL_SERVICE
Definition vban.h:167
#define VBAN_SR_MASK
Definition vban.h:73
#define VBAN_PACKET_COUNTER_BYTES
Definition vban.h:46
VBanSampleRates
Definition vban.h:83
@ SAMPLE_RATE_384000_HZ
Definition vban.h:90
@ SAMPLE_RATE_8000_HZ
Definition vban.h:91
@ SAMPLE_RATE_6000_HZ
Definition vban.h:84
@ SAMPLE_RATE_44100_HZ
Definition vban.h:100
@ SAMPLE_RATE_256000_HZ
Definition vban.h:96
@ SAMPLE_RATE_176400_HZ
Definition vban.h:102
@ SAMPLE_RATE_128000_HZ
Definition vban.h:95
@ SAMPLE_RATE_88200_HZ
Definition vban.h:101
@ SAMPLE_RATE_11025_HZ
Definition vban.h:98
@ SAMPLE_RATE_16000_HZ
Definition vban.h:92
@ SAMPLE_RATE_12000_HZ
Definition vban.h:85
@ SAMPLE_RATE_192000_HZ
Definition vban.h:89
@ SAMPLE_RATE_32000_HZ
Definition vban.h:93
@ SAMPLE_RATE_352800_HZ
Definition vban.h:103
@ SAMPLE_RATE_22050_HZ
Definition vban.h:99
@ SAMPLE_RATE_705600_HZ
Definition vban.h:104
@ SAMPLE_RATE_24000_HZ
Definition vban.h:86
@ SAMPLE_RATE_512000_HZ
Definition vban.h:97
@ SAMPLE_RATE_64000_HZ
Definition vban.h:94
@ SAMPLE_RATE_48000_HZ
Definition vban.h:87
@ SAMPLE_RATE_96000_HZ
Definition vban.h:88
#define VBAN_BIT_RESOLUTION_MASK
Definition vban.h:120
#define VBAN_SERVICE_IDENTIFICATION
Definition vban.h:170
#define VBAN_PACKET_NUM_SAMPLES
Definition vban.h:43
@ VBAN_CODEC_PCM
Definition vban.h:144
#define VBAN_STREAM_NAME_SIZE
Definition vban.h:35
@ VBAN_BITFMT_16_INT
Definition vban.h:124
#define VBAN_PROTOCOL_MASK
Definition vban.h:108
#define VBAN_SERVICE_FNCT_PING0
Definition vban.h:176
#define VBAN_PACKET_MAX_SAMPLES
Definition vban.h:44
static long const VBanSRList[21]
Definition vban.h:75
@ VBAN_PROTOCOL_AUDIO
Definition vban.h:111
#define VBAN_PACKET_MAX_LEN_BYTES
Definition vban.h:47
#define VBAN_PACKET_HEADER_BYTES
Definition vban.h:45