97 lines
2.6 KiB
C++
97 lines
2.6 KiB
C++
#include "Arduino.h"
|
|
#include "AudioTools.h"
|
|
|
|
#if defined(ESP32) && defined(USE_ANALOG) && !USE_LEGACY_I2S
|
|
|
|
using namespace audio_tools;
|
|
|
|
AnalogAudioStream analog_in;
|
|
uint8_t buffer[256];
|
|
|
|
uint32_t iterations = 0;
|
|
uint32_t short_reads = 0;
|
|
uint32_t last_report_ms = 0;
|
|
size_t min_bytes_read = sizeof(buffer);
|
|
size_t max_bytes_read = 0;
|
|
int min_avail_before = 0x7fffffff;
|
|
int max_avail_before = 0;
|
|
int min_avail_after = 0x7fffffff;
|
|
int max_avail_after = 0;
|
|
bool rx_active = false;
|
|
|
|
void setup() {
|
|
Serial.begin(115200);
|
|
while (!Serial) {
|
|
delay(10);
|
|
}
|
|
|
|
AudioToolsLogger.begin(Serial, AudioToolsLogLevel::Info);
|
|
|
|
auto cfg = analog_in.defaultConfig(RX_MODE);
|
|
cfg.sample_rate = 12000;
|
|
cfg.channels = 2;
|
|
cfg.buffer_size = 128;
|
|
cfg.buffer_count = 4;
|
|
cfg.adc_channels[0] = ADC_CHANNEL_4;
|
|
cfg.adc_channels[1] = ADC_CHANNEL_5;
|
|
|
|
Serial.println("ESP32 RX V1 multichannel soak test");
|
|
Serial.printf("buffer_size: %u results\n", cfg.buffer_size);
|
|
Serial.printf("buffer_count: %u frames\n", cfg.buffer_count);
|
|
Serial.printf("expected readable bytes: %u\n",
|
|
(unsigned)(cfg.buffer_size * sizeof(int16_t)));
|
|
|
|
Serial.printf("effective ADC rate: %u Hz\n",
|
|
(unsigned)(cfg.sample_rate * cfg.channels));
|
|
|
|
rx_active = analog_in.begin(cfg);
|
|
if (!rx_active) {
|
|
Serial.println("analog_in.begin failed; stopping test");
|
|
while (true) {
|
|
delay(1000);
|
|
}
|
|
}
|
|
delay(50);
|
|
last_report_ms = millis();
|
|
}
|
|
|
|
void loop() {
|
|
if (!rx_active) {
|
|
delay(1000);
|
|
return;
|
|
}
|
|
|
|
int avail_before = analog_in.available();
|
|
size_t bytes_read = analog_in.readBytes(buffer, sizeof(buffer));
|
|
int avail_after = analog_in.available();
|
|
|
|
iterations++;
|
|
if (bytes_read != sizeof(buffer)) {
|
|
short_reads++;
|
|
}
|
|
|
|
if (bytes_read < min_bytes_read) min_bytes_read = bytes_read;
|
|
if (bytes_read > max_bytes_read) max_bytes_read = bytes_read;
|
|
if (avail_before < min_avail_before) min_avail_before = avail_before;
|
|
if (avail_before > max_avail_before) max_avail_before = avail_before;
|
|
if (avail_after < min_avail_after) min_avail_after = avail_after;
|
|
if (avail_after > max_avail_after) max_avail_after = avail_after;
|
|
|
|
uint32_t now = millis();
|
|
if (now - last_report_ms >= 1000) {
|
|
Serial.printf(
|
|
"iter=%lu short_reads=%lu bytes[min/max]=%u/%u "
|
|
"avail_before[min/max]=%d/%d avail_after[min/max]=%d/%d\n",
|
|
(unsigned long)iterations, (unsigned long)short_reads,
|
|
(unsigned)min_bytes_read, (unsigned)max_bytes_read, min_avail_before,
|
|
max_avail_before, min_avail_after, max_avail_after);
|
|
last_report_ms = now;
|
|
}
|
|
}
|
|
|
|
#else
|
|
|
|
void setup() {}
|
|
void loop() {}
|
|
|
|
#endif
|