Merge branch 'develop'

This commit is contained in:
Karl Osterseher
2023-09-15 10:35:27 +02:00
Unverified
14 changed files with 6810 additions and 401 deletions

4517
.project

File diff suppressed because it is too large Load Diff

View File

@@ -3,17 +3,18 @@
### Synchronous Multiroom audio streaming client for [Snapcast](https://github.com/badaix/snapcast) ported to ESP32
## Feature list
- FLAC decoding currently supported
- FLAC, OPUS and PCM decoding currently supported
- Wifi setup from menuconfig or through espressif Android App "SoftAP Prov"
- Auto connect to snapcast server on network
- Buffers up to 1000ms on Wroom modules (tested with 44100:16:2)
- Buffers up to 758ms on Wroom modules (tested with 44100:16:2)
- Buffers more then enough on Wrover modules
- Multiroom sync delay controlled from Snapcast server (user has to ensure not to set this too high on the server)
- DSP / EQ functionality configurable through menuconfig and partly controllable through HTTP server running on ESP client (work in progress)
## Description
I have continued the work from @badaix, @bridadan and @jorgenkraghjakobsen towards a ESP32 Snapcast
client. Currently it support basic features like multiroom sync, network
controlled volume and mute. For now it only support FLAC 16bit
controlled volume and mute. For now it supports FLAC, OPUS, PCM 16bit
audio streams with sample rates up to 48Khz maybe more, I didn't test.
Please check out the task list and feel free to fill in.
@@ -26,7 +27,7 @@ samples and therefore no precise sync could be achieved.
### Codebase
The codebase is split into components and build on ESP-IDF v4.3.1. I still
The codebase is split into components and build on <b>ESP-IDF v4.3.1</b>. I still
have some refactoring on the todo list as the concept has started to settle and
allow for new features can be added in a structured manner. In the code you
will find parts that are only partly related features and still not on the task

View File

@@ -27,17 +27,20 @@ menu "Custom Audio Board"
menu "DAC I2C control interface"
config DAC_I2C_SDA
int "SDA pin"
default 21
default 12 if DAC_ADAU1961
default 21 if DAC_MA120 || DAC_PCM51XX || DAC_MA120 || DAC_MA120X0
help
I2C SDA pin of the DAC control interface
config DAC_I2C_SCL
int "SCL pin"
default 22
default 14 if DAC_ADAU1961
default 22 if DAC_MA120 || DAC_PCM51XX || DAC_MA120 || DAC_MA120X0
help
I2C SCL pin of the DAC control interface
config DAC_I2C_ADDR
hex "I2C address"
default 0x20
default 0x70 if DAC_ADAU1961
default 0x20 if DAC_MA120 || DAC_PCM51XX || DAC_MA120 || DAC_MA120X0
help
I2C Address of the DAC control interface
endmenu

View File

@@ -31,7 +31,8 @@
#include "soc/rtc.h"
#include "esp_attr.h"
#include "esp_efuse.h"
#include "soc/chip_revision.h"
#include "hal/efuse_hal.h"
#include "esp_err.h"
#include "esp_intr_alloc.h"
#include "esp_log.h"
@@ -184,12 +185,11 @@ static float i2s_apll_get_fi2s(int bits_per_sample, int sdm0, int sdm1,
int f_xtal = (int)rtc_clk_xtal_freq_get() * 1000000;
#if CONFIG_IDF_TARGET_ESP32
/* ESP32 rev0 silicon issue for APLL range/accuracy, please see ESP32 ECO
* document for more information on this */
if (esp_efuse_get_chip_ver() == 0) {
sdm0 = 0;
sdm1 = 0;
}
/* ESP32 rev0 silicon issue for APLL range/accuracy, please see ESP32 ECO document for more information on this */
if (!ESP_CHIP_REV_ABOVE(efuse_hal_chip_revision(), 100)) {
sdm0 = 0;
sdm1 = 0;
}
#endif
float fout = f_xtal * (sdm2 + sdm1 / 256.0f + sdm0 / 65536.0f + 4);
if (fout < SOC_I2S_APLL_MIN_FREQ || fout > SOC_I2S_APLL_MAX_FREQ) {

View File

@@ -1,6 +1,8 @@
#ifndef _DSP_PROCESSOR_H_
#define _DSP_PROCESSOR_H_
#include "esp_err.h"
typedef enum dspFlows {
dspfStereo,
dspfBiamp,

View File

@@ -72,6 +72,8 @@ static QueueHandle_t snapcastSettingQueueHandle = NULL;
static uint32_t i2sDmaBufCnt;
static uint32_t i2sDmaBufMaxLen;
static SemaphoreHandle_t playerPcmQueueMux = NULL;
static SemaphoreHandle_t snapcastSettingsMux = NULL;
static snapcastSetting_t currentSnapcastSetting;
@@ -193,6 +195,8 @@ static int destroy_pcm_queue(QueueHandle_t *queueHandle) {
int ret = pdPASS;
pcm_chunk_message_t *chnk = NULL;
xSemaphoreTake(playerPcmQueueMux, portMAX_DELAY);
if (*queueHandle == NULL) {
ESP_LOGW(TAG, "no pcm chunk queue created?");
ret = pdFAIL;
@@ -214,6 +218,8 @@ static int destroy_pcm_queue(QueueHandle_t *queueHandle) {
ret = pdPASS;
}
xSemaphoreGive(playerPcmQueueMux);
return ret;
}
@@ -237,6 +243,11 @@ int deinit_player(void) {
ret = destroy_pcm_queue(&pcmChkQHdl);
if (playerPcmQueueMux != NULL) {
vSemaphoreDelete(playerPcmQueueMux);
playerPcmQueueMux = NULL;
}
if (latencyBufSemaphoreHandle == NULL) {
ESP_LOGW(TAG, "no latency buffer semaphore created?");
} else {
@@ -271,6 +282,11 @@ int init_player(void) {
xSemaphoreGive(snapcastSettingsMux);
}
if (playerPcmQueueMux == NULL) {
playerPcmQueueMux = xSemaphoreCreateMutex();
xSemaphoreGive(playerPcmQueueMux);
}
ret = player_setup_i2s(I2S_NUM_0, &currentSnapcastSetting);
if (ret < 0) {
ESP_LOGE(TAG, "player_setup_i2s failed: %d", ret);
@@ -919,10 +935,20 @@ int32_t allocate_pcm_chunk_memory(pcm_chunk_message_t **pcmChunk,
"couldn't get memory to insert chunk, inserting an chunk "
"containing just 0");
// xSemaphoreTake(playerPcmQueueMux, portMAX_DELAY);
// ESP_LOGW(
// TAG, "%d, %d, %d, %d, %d",
// heap_caps_get_free_size(MALLOC_CAP_8BIT),
// heap_caps_get_largest_free_block(MALLOC_CAP_8BIT),
// uxQueueMessagesWaiting(pcmChkQHdl),
// heap_caps_get_free_size(MALLOC_CAP_32BIT | MALLOC_CAP_EXEC),
// heap_caps_get_largest_free_block(MALLOC_CAP_32BIT |
// MALLOC_CAP_EXEC));
// xSemaphoreGive(playerPcmQueueMux);
ESP_LOGW(
TAG, "%d, %d, %d, %d, %d", heap_caps_get_free_size(MALLOC_CAP_8BIT),
TAG, "%d, %d, %d, %d", heap_caps_get_free_size(MALLOC_CAP_8BIT),
heap_caps_get_largest_free_block(MALLOC_CAP_8BIT),
uxQueueMessagesWaiting(pcmChkQHdl),
heap_caps_get_free_size(MALLOC_CAP_32BIT | MALLOC_CAP_EXEC),
heap_caps_get_largest_free_block(MALLOC_CAP_32BIT | MALLOC_CAP_EXEC));
@@ -952,38 +978,61 @@ int32_t insert_pcm_chunk(pcm_chunk_message_t *pcmChunk) {
return -1;
}
bool isFull = false;
latency_buffer_full(&isFull, portMAX_DELAY);
if (isFull == false) {
free_pcm_chunk(pcmChunk);
// ESP_LOGW(TAG, "%s: wait for initial latency measurement to finish",
// __func__);
return -3;
}
xSemaphoreTake(playerPcmQueueMux, portMAX_DELAY);
if (pcmChkQHdl == NULL) {
ESP_LOGW(TAG, "pcm chunk queue not created");
free_pcm_chunk(pcmChunk);
xSemaphoreGive(playerPcmQueueMux);
return -2;
}
if (uxQueueSpacesAvailable(pcmChkQHdl) == 0) {
pcm_chunk_message_t *element;
// if (uxQueueSpacesAvailable(pcmChkQHdl) == 0) {
// pcm_chunk_message_t *element;
//
// xQueueReceive(pcmChkQHdl, &element, portMAX_DELAY);
//
// free_pcm_chunk(element);
// }
xQueueReceive(pcmChkQHdl, &element, portMAX_DELAY);
free_pcm_chunk(element);
}
if (xQueueSend(pcmChkQHdl, &pcmChunk, pdMS_TO_TICKS(10)) != pdTRUE) {
// if (xQueueSend(pcmChkQHdl, &pcmChunk, pdMS_TO_TICKS(10)) != pdTRUE) {
if (xQueueSend(pcmChkQHdl, &pcmChunk, pdMS_TO_TICKS(1)) != pdTRUE) {
ESP_LOGW(TAG, "send: pcmChunkQueue full, messages waiting %d",
uxQueueMessagesWaiting(pcmChkQHdl));
free_pcm_chunk(pcmChunk);
}
xSemaphoreGive(playerPcmQueueMux);
return 0;
}
int32_t pcm_chunk_queue_msg_waiting(void) {
int ret = 0;
xSemaphoreTake(playerPcmQueueMux, portMAX_DELAY);
if (pcmChkQHdl) {
return uxQueueMessagesWaiting(pcmChkQHdl);
} else {
return 0;
ret = uxQueueMessagesWaiting(pcmChkQHdl);
}
xSemaphoreGive(playerPcmQueueMux);
return ret;
}
/**
@@ -1077,11 +1126,11 @@ static void player_task(void *pvParameters) {
if ((__scSet.buf_ms != scSet.buf_ms) ||
(__scSet.chkInFrames != scSet.chkInFrames)) {
if (pcmChkQHdl != NULL) {
destroy_pcm_queue(&pcmChkQHdl);
}
destroy_pcm_queue(&pcmChkQHdl);
}
// xSemaphoreTake(playerPcmQueueMux, portMAX_DELAY);
if (pcmChkQHdl == NULL) {
int entries = ceil(((float)__scSet.sr / (float)__scSet.chkInFrames) *
((float)__scSet.buf_ms / 1000));
@@ -1095,6 +1144,8 @@ static void player_task(void *pvParameters) {
ESP_LOGI(TAG, "created new queue with %d", entries);
}
// xSemaphoreGive(playerPcmQueueMux);
ESP_LOGI(TAG,
"snapserver config changed, buffer %dms, chunk %d frames, "
"sample rate %d, ch %d, bits %d mute %d latency %d",
@@ -1130,11 +1181,16 @@ static void player_task(void *pvParameters) {
}
if (chnk == NULL) {
// xSemaphoreTake(playerPcmQueueMux, portMAX_DELAY);
if (pcmChkQHdl != NULL) {
ret = xQueueReceive(pcmChkQHdl, &chnk, pdMS_TO_TICKS(2000));
// xSemaphoreGive(playerPcmQueueMux);
} else {
// ESP_LOGE (TAG, "Couldn't get PCM chunk, pcm queue not created");
// xSemaphoreGive(playerPcmQueueMux);
vTaskDelay(pdMS_TO_TICKS(100));
continue;
@@ -1154,6 +1210,10 @@ static void player_task(void *pvParameters) {
(int64_t)chnk->timestamp.usec;
age = serverNow - chunkStart - buf_us + clientDacLatency_us;
// ESP_LOGE(TAG,"age: %lld, serverNow %lld, chunkStart %lld,
// buf_us %lld", age, serverNow, chunkStart, buf_us);
if (initialSync == 1) {
// on initialSync == 0 (hard sync) we don't have any data in i2s DMA
// buffer so in that case we don't need to add this
@@ -1187,12 +1247,15 @@ static void player_task(void *pvParameters) {
uint32_t currentDescriptor = 0, currentDescriptorOffset = 0;
uint32_t tmpCnt = CHNK_CTRL_CNT;
// xSemaphoreTake(playerPcmQueueMux, portMAX_DELAY);
while (tmpCnt) {
if (chnk == NULL) {
if (pcmChkQHdl != NULL) {
ret = xQueueReceive(pcmChkQHdl, &chnk, portMAX_DELAY);
}
}
// xSemaphoreGive(playerPcmQueueMux);
fragment = chnk->fragment;
p_payload = fragment->payload;
@@ -1290,7 +1353,9 @@ static void player_task(void *pvParameters) {
uint32_t c = ceil((float)age / (float)chkDur_us); // round up
// now clear all those chunks which are probably late too
while (c--) {
// xSemaphoreTake(playerPcmQueueMux, portMAX_DELAY);
ret = xQueueReceive(pcmChkQHdl, &chnk, pdMS_TO_TICKS(1));
// xSemaphoreGive(playerPcmQueueMux);
if (ret == pdPASS) {
free_pcm_chunk(chnk);
chnk = NULL;
@@ -1305,12 +1370,21 @@ static void player_task(void *pvParameters) {
timer_pause(TIMER_GROUP_1, TIMER_1);
timer_set_auto_reload(TIMER_GROUP_1, TIMER_1, TIMER_AUTORELOAD_DIS);
// xSemaphoreTake(playerPcmQueueMux, portMAX_DELAY);
// ESP_LOGW(TAG,
// "RESYNCING HARD 1: age %lldus, latency %lldus, free
// %d, " "largest block %d, %d, rssi: %d", age,
// diff2Server,
// heap_caps_get_free_size(MALLOC_CAP_32BIT),
// heap_caps_get_largest_free_block(MALLOC_CAP_32BIT),
// uxQueueMessagesWaiting(pcmChkQHdl), ap.rssi);
// xSemaphoreGive(playerPcmQueueMux);
ESP_LOGW(TAG,
"RESYNCING HARD 1: age %lldus, latency %lldus, free %d, "
"largest block %d, %d, rssi: %d",
"largest block %d, rssi: %d",
age, diff2Server, heap_caps_get_free_size(MALLOC_CAP_32BIT),
heap_caps_get_largest_free_block(MALLOC_CAP_32BIT),
uxQueueMessagesWaiting(pcmChkQHdl), ap.rssi);
heap_caps_get_largest_free_block(MALLOC_CAP_32BIT), ap.rssi);
dir = 0;
@@ -1337,11 +1411,16 @@ static void player_task(void *pvParameters) {
shortMedian = MEDIANFILTER_Insert(&shortMedianFilter, avg);
miniMedian = MEDIANFILTER_Insert(&miniMedianFilter, avg);
// xSemaphoreTake(playerPcmQueueMux, portMAX_DELAY);
int msgWaiting = uxQueueMessagesWaiting(pcmChkQHdl);
// xSemaphoreGive(playerPcmQueueMux);
// resync hard if we are getting very late / early.
// rest gets tuned in through apll speed control
if ((uxQueueMessagesWaiting(pcmChkQHdl) == 0) ||
((abs(avg) > hardResyncThreshold) &&
MEDIANFILTER_isFull(&shortMedianFilter))) {
if ((msgWaiting == 0) || (MEDIANFILTER_isFull(&shortMedianFilter) &&
(abs(shortMedian) > hardResyncThreshold)))
// if (msgWaiting == 0)
{
if (chnk != NULL) {
free_pcm_chunk(chnk);
chnk = NULL;
@@ -1350,12 +1429,13 @@ static void player_task(void *pvParameters) {
wifi_ap_record_t ap;
esp_wifi_sta_get_ap_info(&ap);
// xSemaphoreTake(playerPcmQueueMux, portMAX_DELAY);
ESP_LOGW(TAG,
"RESYNCING HARD 2: age %lldus, latency %lldus, free "
"%d, largest block %d, %d, rssi: %d",
avg, diff2Server, heap_caps_get_free_size(MALLOC_CAP_32BIT),
heap_caps_get_largest_free_block(MALLOC_CAP_32BIT),
uxQueueMessagesWaiting(pcmChkQHdl), ap.rssi);
msgWaiting, ap.rssi);
// // get count of chunks we are late for
// uint32_t c = ceil((float)age / (float)chkDur_us); //
@@ -1371,6 +1451,8 @@ static void player_task(void *pvParameters) {
// }
// }
// xSemaphoreGive(playerPcmQueueMux);
timer_pause(TIMER_GROUP_1, TIMER_1);
timer_set_auto_reload(TIMER_GROUP_1, TIMER_1, TIMER_AUTORELOAD_DIS);
@@ -1421,11 +1503,17 @@ static void player_task(void *pvParameters) {
msec = usec / 1000;
usec = usec % 1000;
// ESP_LOGI (TAG, "%d, %lldus, %lldus %llds, %lld.%lldms",
// dir, age, avg, sec, msec, usec);
// ESP_LOGI(TAG, "%d, %lldus, %lldus, %lldus, q:%d", dir,
// avg, shortMedian, miniMedian,
// uxQueueMessagesWaiting(pcmChkQHdl));
// xSemaphoreTake(playerPcmQueueMux, portMAX_DELAY);
//ESP_LOGI (TAG, "%d, %lldus, q %d", dir, avg, uxQueueMessagesWaiting(pcmChkQHdl));
// ESP_LOGI (TAG, "%d, %lldus, %lldus %llds,
// %lld.%lldms", dir, age, avg, sec, msec, usec);
// ESP_LOGI(TAG, "%d, %lldus, %lldus, %lldus, q:%d", dir,
// avg, shortMedian, miniMedian,
// uxQueueMessagesWaiting(pcmChkQHdl));
// ESP_LOGI( TAG, "8b f
// %d b %d", heap_caps_get_free_size(MALLOC_CAP_8BIT |
// MALLOC_CAP_INTERNAL),
@@ -1434,6 +1522,8 @@ static void player_task(void *pvParameters) {
// heap_caps_get_free_size(MALLOC_CAP_32BIT |
// MALLOC_CAP_EXEC), heap_caps_get_largest_free_block
// (MALLOC_CAP_32BIT | MALLOC_CAP_EXEC));
// xSemaphoreGive(playerPcmQueueMux);
}
dir = 0;
@@ -1518,12 +1608,14 @@ static void player_task(void *pvParameters) {
msec = usec / 1000;
usec = usec % 1000;
// xSemaphoreTake(playerPcmQueueMux, portMAX_DELAY);
if (pcmChkQHdl != NULL) {
ESP_LOGE(TAG,
"Couldn't get PCM chunk, recv: messages waiting %d, "
"diff2Server: %llds, %lld.%lldms",
uxQueueMessagesWaiting(pcmChkQHdl), sec, msec, usec);
}
// xSemaphoreGive(playerPcmQueueMux);
dir = 0;

View File

@@ -8,29 +8,106 @@
h1 {font-size: 2.9rem;}
h2 {font-size: 2.1rem;}
p {font-size: 1.9rem;}
body {max-width: 500px; margin:0px auto; padding-bottom: 30px;}
.slider { -webkit-appearance: none; margin: 14px; width: 400px; height: 15px; border-radius: 5px; background: #39a6de; outline: none; -webkit-transition: .2s; transition: opacity .2s;}
.slider::-webkit-slider-thumb {-webkit-appearance: none; appearance: none; width: 25px; height: 25px; border-radius: 12px; background: #f74d4d; cursor: pointer;}
.slider::-moz-range-thumb { width: 25px; height: 25px; border-radius: 12px; background: #F74D4D; cursor: pointer; }
.slider {
writing-mode: bt-lr; /* IE */
-webkit-appearance: slider-vertical; /* Chromium */
margin: 14px;
width: 15px;
height: 200px;
border-radius: 5px;
background: #39a6de;
outline: none;
-webkit-transition: .2s;
transition: opacity .2s;
}
.slider::-webkit-slider-thumb {
-webkit-appearance: none;
appearance: none;
width: 25px;
height: 25px;
border-radius: 12px;
background: #f74d4d;
cursor: pointer;
}
.slider::-moz-range-thumb {
width: 25px;
height: 25px;
border-radius: 12px;
background: #F74D4D;
cursor: pointer;
}
</style>
</head>
<body>
<h1>DSP processor filter configuration</h1>
<!-- Displays the range of the slider from -6 to 6 in steps of 0.1 -->
<h2>base gain</h2>
<div class="headline_container">
<h1>DSP processor filter configuration</h1>
</div>
<div class="body_container" style="max-width: 500px; margin:0px auto; padding-bottom: 30px;">
<div class="range_container">
<div class="range_1_container" style="float:left; margin:10px">
<div class="sliders_labels">
<label for="BaseGainSlider">Base</label>
</div>
<div class="sliders_control">
<input id="BaseGainSlider" type="range" orient="vertical" onchange="sendUpdateSlider()" oninput="updateSlider('baseSliderValue', this.value)" min="-6.00" max="6.00" value="0.00" step="0.01" class="slider">
</div>
<div class="slider_value" style="width: 100px;">
<span id="baseSliderValue">0.00</span> dB
</div>
</div>
<div class="range_2_container" style="float:left; margin:10px">
<div class="sliders_labels">
<label for="MidGainSlider"">Mids</label>
</div>
<div class="sliders_control">
<input id="MidGainSlider" type="range" orient="vertical" onchange="sendUpdateSlider()" oninput="updateSlider('midsSliderValue', this.value)" min="-6.00" max="6.00" value="0.00" step="0.01" class="slider">
</div>
<div class="slider_value" style="width: 100px;">
<span id="midsSliderValue">0.00</span> dB
</div>
</div>
<div class="range_3_container" style="float:left; margin:10px">
<div class="sliders_labels">
<label for="heightsGainSlider">Heights</label>
</div>
<div class="sliders_control">
<input id="heightsGainSlider" type="range" orient="vertical" onchange="sendUpdateSlider()" oninput="updateSlider('heightsSliderValue', this.value)" min="-6.00" max="6.00" value="0.00" step="0.01" class="slider">
</div>
<div class="slider_value" style="width: 100px;">
<span id="heightsSliderValue">0.00</span> dB
</div>
</div>
</div>
<!-- Displays the range of the slider from 0 to 100 in steps of 1 -->
<p><span id="textSliderValue">50</span> &#37</p>
<p><input type="range" onchange="updateSlider(this)" id="BaseGainSlider" min="0" max="100" value="50" step="1" class="slider"></p>
<script>
function updateSlider(element) {
var sliderValue = document.getElementById("BaseGainSlider").value;
document.getElementById("textSliderValue").innerHTML = sliderValue;
console.log(sliderValue);
function sendUpdateSlider() {
var gain_1 = document.getElementById('BaseGainSlider').value;
var gain_2 = document.getElementById('MidGainSlider').value;
var gain_3 = document.getElementById('heightsGainSlider').value;
console.log(gain_1 + ", " + gain_2 + ", " + gain_3);
console.log("/post?gain_1=" + gain_1 + "&gain_2= " + gain_2 + "&gain_3=" + gain_3 );
var httpRequest = new XMLHttpRequest();
httpRequest.open("POST", "/post?value="+sliderValue, true);
httpRequest.open("POST", "/post?gain_1=" + gain_1 + "&gain_2= " + gain_2 + "&gain_3=" + gain_3, true);
httpRequest.send();
}
function updateSlider(id, val) {
var output = document.getElementById(id);
output.innerHTML = val;
}
</script>
</body>
</html>

View File

@@ -4,8 +4,11 @@
void init_http_server_task(char *key);
typedef struct {
char str_value[4];
char str_value[8];
long long_value;
float gain_1;
float gain_2;
float gain_3;
} URL_t;
#endif // __UI_HTTP_SERVER_H__

View File

@@ -8,6 +8,8 @@
CONDITIONS OF ANY KIND, either express or implied.
*/
#include "ui_http_server.h"
#include <inttypes.h>
#include <math.h>
#include <mbedtls/base64.h>
@@ -15,19 +17,16 @@
#include <string.h>
#include <sys/stat.h>
#include "freertos/FreeRTOS.h"
#include "freertos/queue.h"
#include "freertos/task.h"
#include "dsp_processor.h"
#include "esp_err.h"
#include "esp_http_server.h"
#include "esp_log.h"
#include "esp_spiffs.h"
#include "esp_vfs.h"
#include "esp_wifi.h"
#include "dsp_processor.h"
#include "ui_http_server.h"
#include "freertos/FreeRTOS.h"
#include "freertos/queue.h"
#include "freertos/task.h"
static const char *TAG = "HTTP";
@@ -198,7 +197,7 @@ static esp_err_t root_get_handler(httpd_req_t *req) {
Text2Html(req, "/html/index.html");
/* Send Image */
Image2Html(req, "/html/ESP-LOGO.txt", "png");
// Image2Html(req, "/html/ESP-LOGO.txt", "png");
/* Send empty chunk to signal HTTP response completion */
httpd_resp_sendstr_chunk(req, NULL);
@@ -212,14 +211,48 @@ static esp_err_t root_get_handler(httpd_req_t *req) {
static esp_err_t root_post_handler(httpd_req_t *req) {
// ESP_LOGI(TAG, "root_post_handler req->uri=[%s]", req->uri);
URL_t urlBuf;
find_key_value("value=", (char *)req->uri, urlBuf.str_value);
// ESP_LOGD(TAG, "urlBuf.str_value=[%s]", urlBuf.str_value);
urlBuf.long_value = strtol(urlBuf.str_value, NULL, 10);
// ESP_LOGD(TAG, "urlBuf.long_value=%ld", urlBuf.long_value);
int ret = -1;
// Send to http_server_task
if (xQueueSend(xQueueHttp, &urlBuf, portMAX_DELAY) != pdPASS) {
ESP_LOGE(TAG, "xQueueSend Fail");
memset(&urlBuf, 0, sizeof(URL_t));
if (find_key_value("gain_1=", (char *)req->uri, urlBuf.str_value)) {
ESP_LOGD(TAG, "urlBuf.str_value=[%s]", urlBuf.str_value);
urlBuf.gain_1 = strtof(urlBuf.str_value, NULL);
ESP_LOGD(TAG, "urlBuf.float_value=%f", urlBuf.gain_1);
ret = 0;
} else {
ESP_LOGD(TAG, "key 'gain_1=' not found");
}
if (find_key_value("gain_2=", (char *)req->uri, urlBuf.str_value)) {
ESP_LOGD(TAG, "urlBuf.str_value=[%s]", urlBuf.str_value);
urlBuf.gain_2 = strtof(urlBuf.str_value, NULL);
ESP_LOGD(TAG, "urlBuf.float_value=%f", urlBuf.gain_2);
ret = 0;
} else {
ESP_LOGD(TAG, "key 'gain_2=' not found");
}
if (find_key_value("gain_3=", (char *)req->uri, urlBuf.str_value)) {
ESP_LOGD(TAG, "urlBuf.str_value=[%s]", urlBuf.str_value);
urlBuf.gain_3 = strtof(urlBuf.str_value, NULL);
ESP_LOGD(TAG, "urlBuf.float_value=%f", urlBuf.gain_3);
ret = 0;
} else {
ESP_LOGD(TAG, "key 'gain_3=' not found");
}
if (ret >= 0) {
// Send to http_server_task
if (xQueueSend(xQueueHttp, &urlBuf, portMAX_DELAY) != pdPASS) {
ESP_LOGE(TAG, "xQueueSend Fail");
}
}
/* Redirect onto root to see the updated file list */
@@ -367,18 +400,15 @@ static void http_server_task(void *pvParameters) {
// Waiting for post
if (xQueueReceive(xQueueHttp, &urlBuf, portMAX_DELAY) == pdTRUE) {
filterParams_t filterParams;
float scale, gainMax = 6.0;
// ESP_LOGI(TAG, "str_value=%s long_value=%ld", urlBuf.str_value,
// urlBuf.long_value);
scale = ((float)(2 * urlBuf.long_value - 50) / 100.0);
ESP_LOGI(TAG, "str_value=%s gain_1=%f, gain_2=%f, gain_3=%f",
urlBuf.str_value, urlBuf.gain_1, urlBuf.gain_2, urlBuf.gain_3);
filterParams.dspFlow = dspfEQBassTreble;
filterParams.fc_1 = 300.0;
filterParams.gain_1 = gainMax * scale;
filterParams.gain_1 = urlBuf.gain_1;
filterParams.fc_3 = 4000.0;
filterParams.gain_3 = gainMax * 0;
filterParams.gain_3 = urlBuf.gain_3;
#if CONFIG_USE_DSP_PROCESSOR
dsp_processor_update_filter_params(&filterParams);

View File

@@ -74,7 +74,7 @@ static void error_callback(const FLAC__StreamDecoder *decoder,
static FLAC__StreamDecoder *flacDecoder = NULL;
static QueueHandle_t decoderReadQHdl = NULL;
static QueueHandle_t decoderWriteQHdl = NULL;
static QueueHandle_t flacTaskQHdl = NULL;
static QueueHandle_t decoderTaskQHdl = NULL;
SemaphoreHandle_t decoderReadSemaphore = NULL;
SemaphoreHandle_t decoderWriteSemaphore = NULL;
@@ -93,12 +93,16 @@ const char *VERSION_STRING = "0.0.2";
#define FLAC_TASK_PRIORITY 8
#define FLAC_TASK_CORE_ID tskNO_AFFINITY
#define OPUS_TASK_PRIORITY 8
#define OPUS_TASK_CORE_ID tskNO_AFFINITY
// 1 // tskNO_AFFINITY
xTaskHandle t_ota_task = NULL;
xTaskHandle t_http_get_task = NULL;
xTaskHandle t_flac_decoder_task = NULL;
xTaskHandle t_flac_task = NULL;
xTaskHandle dec_task_handle = NULL;
#define FAST_SYNC_LATENCY_BUF 10000 // in µs
#define NORMAL_SYNC_LATENCY_BUF 1000000 // in µs
@@ -136,14 +140,14 @@ dspFlows_t dspFlow = dspfEQBassTreble;
#endif
#endif
typedef struct flacData_s {
typedef struct decoderData_s {
uint32_t type; // should be SNAPCAST_MESSAGE_CODEC_HEADER
// or SNAPCAST_MESSAGE_WIRE_CHUNK
char *inData;
uint8_t *inData;
tv_t timestamp;
pcm_chunk_message_t *outData;
uint32_t bytes;
} flacData_t;
} decoderData_t;
void time_sync_msg_cb(void *args);
@@ -157,6 +161,9 @@ static const esp_timer_create_args_t tSyncArgs = {
struct netconn *lwipNetconn;
static int id_counter = 0;
static OpusDecoder *opusDecoder = NULL;
/**
*
*/
@@ -240,7 +247,7 @@ void time_sync_msg_cb(void *args) {
/**
*
*/
void free_flac_data(flacData_t *pFlacData) {
void free_flac_data(decoderData_t *pFlacData) {
if (pFlacData->inData) {
free(pFlacData->inData);
pFlacData->inData = NULL;
@@ -264,7 +271,7 @@ static FLAC__StreamDecoderReadStatus read_callback(
const FLAC__StreamDecoder *decoder, FLAC__byte buffer[], size_t *bytes,
void *client_data) {
snapcastSetting_t *scSet = (snapcastSetting_t *)client_data;
flacData_t *flacData;
decoderData_t *flacData;
(void)scSet;
@@ -313,7 +320,7 @@ static FLAC__StreamDecoderWriteStatus write_callback(
const FLAC__StreamDecoder *decoder, const FLAC__Frame *frame,
const FLAC__int32 *const buffer[], void *client_data) {
size_t i;
flacData_t *flacData = NULL; // = &flacOutData;
decoderData_t *flacData = NULL; // = &flacOutData;
snapcastSetting_t *scSet = (snapcastSetting_t *)client_data;
int ret = 0;
uint32_t fragmentCnt = 0;
@@ -350,12 +357,12 @@ static FLAC__StreamDecoderWriteStatus write_callback(
return FLAC__STREAM_DECODER_WRITE_STATUS_ABORT;
}
flacData = (flacData_t *)malloc(sizeof(flacData_t));
flacData = (decoderData_t *)malloc(sizeof(decoderData_t));
if (flacData == NULL) {
return FLAC__STREAM_DECODER_WRITE_STATUS_ABORT;
}
memset(flacData, 0, sizeof(flacData_t));
memset(flacData, 0, sizeof(decoderData_t));
flacData->bytes = frame->header.blocksize * frame->header.channels *
(frame->header.bits_per_sample / 8);
@@ -420,7 +427,7 @@ static FLAC__StreamDecoderWriteStatus write_callback(
void metadata_callback(const FLAC__StreamDecoder *decoder,
const FLAC__StreamMetadata *metadata,
void *client_data) {
flacData_t *flacData; // = &flacOutData;
decoderData_t *flacData; // = &flacOutData;
snapcastSetting_t *scSet = (snapcastSetting_t *)client_data;
(void)decoder;
@@ -430,14 +437,14 @@ void metadata_callback(const FLAC__StreamDecoder *decoder,
if (metadata->type == FLAC__METADATA_TYPE_STREAMINFO) {
// ESP_LOGI(TAG, "in flac meta cb");
flacData = (flacData_t *)malloc(sizeof(flacData_t));
flacData = (decoderData_t *)malloc(sizeof(decoderData_t));
if (flacData == NULL) {
ESP_LOGE(TAG, "in flac meta cb, malloc failed");
return;
}
memset(flacData, 0, sizeof(flacData_t));
memset(flacData, 0, sizeof(decoderData_t));
// save for later
scSet->sr = metadata->data.stream_info.sample_rate;
@@ -471,39 +478,6 @@ static void flac_decoder_task(void *pvParameters) {
FLAC__StreamDecoderInitStatus init_status;
snapcastSetting_t *scSet = (snapcastSetting_t *)pvParameters;
if (flacTaskQHdl != NULL) {
vQueueDelete(flacTaskQHdl);
flacTaskQHdl = NULL;
}
flacTaskQHdl = xQueueCreate(8, sizeof(flacData_t *));
if (flacTaskQHdl == NULL) {
ESP_LOGE(TAG, "Failed to create flac flacTaskQHdl");
return;
}
if (decoderReadQHdl != NULL) {
vQueueDelete(decoderReadQHdl);
decoderReadQHdl = NULL;
}
decoderReadQHdl = xQueueCreate(1, sizeof(flacData_t *));
if (decoderReadQHdl == NULL) {
ESP_LOGE(TAG, "Failed to create flac read queue");
return;
}
if (decoderWriteQHdl != NULL) {
vQueueDelete(decoderWriteQHdl);
decoderWriteQHdl = NULL;
}
decoderWriteQHdl = xQueueCreate(1, sizeof(flacData_t *));
if (decoderWriteQHdl == NULL) {
ESP_LOGE(TAG, "Failed to create flac write queue");
return;
}
if (flacDecoder != NULL) {
FLAC__stream_decoder_finish(flacDecoder);
FLAC__stream_decoder_delete(flacDecoder);
@@ -538,14 +512,14 @@ static void flac_decoder_task(void *pvParameters) {
*/
void flac_task(void *pvParameters) {
tv_t currentTimestamp;
flacData_t *pFlacData = NULL;
decoderData_t *pFlacData = NULL;
snapcastSetting_t *scSet = (snapcastSetting_t *)pvParameters;
#if CONFIG_USE_DSP_PROCESSOR
int flow_drain_counter = 0;
#endif
while (1) {
xQueueReceive(flacTaskQHdl, &pFlacData,
xQueueReceive(decoderTaskQHdl, &pFlacData,
portMAX_DELAY); // get data from tcp task
if (pFlacData != NULL) {
@@ -640,6 +614,139 @@ void flac_task(void *pvParameters) {
}
}
/**
*
*/
void opus_decoder_task(void *pvParameters) {
tv_t currentTimestamp;
decoderData_t *pOpusData = NULL;
snapcastSetting_t *scSet = (snapcastSetting_t *)pvParameters;
#if CONFIG_USE_DSP_PROCESSOR
int flow_drain_counter = 0;
#endif
while (1) {
// get data from tcp task
xQueueReceive(decoderTaskQHdl, &pOpusData, portMAX_DELAY);
if (pOpusData) {
currentTimestamp = pOpusData->timestamp;
// ESP_LOGE(TAG, "%s: Got timestamp %lld", __func__,
// (uint64_t)currentTimestamp.sec *
// 1000000 +
// (uint64_t)currentTimestamp.usec);
if (pOpusData->inData) {
int frame_size = 0;
int sample_count = 0;
int samples_per_frame = 0;
int frame_count;
opus_int16 *audio;
samples_per_frame =
opus_packet_get_samples_per_frame(pOpusData->inData, scSet->sr);
if (samples_per_frame < 0) {
ESP_LOGE(TAG,
"couldn't get samples per frame count "
"of packet");
}
scSet->chkInFrames = samples_per_frame;
size_t bytes = samples_per_frame * scSet->ch * scSet->bits / 8;
if (samples_per_frame > 480) {
ESP_LOGE(TAG, "samples_per_frame: %d, pOpusData->bytes %d, bytes %d",
samples_per_frame, pOpusData->bytes, bytes);
}
// TODO: insert some break condition if we wait
// too long
while ((audio = (opus_int16 *)malloc(bytes)) == NULL) {
ESP_LOGE(TAG, "couldn't get memory for audio");
vTaskDelay(pdMS_TO_TICKS(1));
}
frame_size =
opus_decode(opusDecoder, pOpusData->inData, pOpusData->bytes,
(opus_int16 *)audio, samples_per_frame, 0);
free(pOpusData->inData);
pOpusData->inData = NULL;
if (frame_size < 0) {
ESP_LOGE(TAG, "Decode error : %d \n", frame_size);
} else {
pcm_chunk_message_t *pcmData = NULL;
bytes = frame_size * scSet->ch * scSet->bits / 8;
if (allocate_pcm_chunk_memory(&pcmData, bytes) < 0) {
pcmData = NULL;
} else {
pcmData->timestamp = currentTimestamp;
if (pcmData->fragment->payload) {
volatile uint32_t *sample;
uint32_t tmpData;
uint32_t cnt = 0;
for (int i = 0; i < bytes; i += 4) {
sample =
(volatile uint32_t *)(&(pcmData->fragment->payload[i]));
tmpData = (((uint32_t)audio[cnt] << 16) & 0xFFFF0000) |
(((uint32_t)audio[cnt + 1] << 0) & 0x0000FFFF);
*sample = (volatile uint32_t)tmpData;
cnt += 2;
}
}
free(audio);
audio = NULL;
}
if (player_send_snapcast_setting(scSet) != pdPASS) {
ESP_LOGE(TAG,
"Failed to notify "
"sync task about "
"codec. Did you "
"init player?");
return;
}
#if CONFIG_USE_DSP_PROCESSOR
if (flow_drain_counter > 0) {
flow_drain_counter--;
double dynamic_vol =
((double)scSet->volume / 100 / (20 - flow_drain_counter));
if (flow_drain_counter == 0) {
#if SNAPCAST_USE_SOFT_VOL
dynamic_vol = 0.0;
#else
dynamic_vol = 1.0;
#endif
audio_hal_set_mute(board_handle->audio_hal, scSet->muted);
}
dsp_processor_set_volome(dynamic_vol);
}
dsp_processor_worker(pcmData->fragment->payload,
pcmData->fragment->size, scSet->sr);
#endif
insert_pcm_chunk(pcmData);
}
}
free(pOpusData);
pOpusData = NULL;
}
}
}
/**
*
*/
@@ -668,18 +775,17 @@ static void http_get_task(void *pvParameters) {
int64_t tmpDiffToServer;
int64_t lastTimeSync = 0;
esp_timer_handle_t timeSyncMessageTimer = NULL;
uint16_t channels;
esp_err_t err = 0;
server_settings_message_t server_settings_message;
bool received_header = false;
mdns_result_t *r;
OpusDecoder *opusDecoder = NULL;
codec_type_t codec = NONE;
snapcastSetting_t scSet;
// flacData_t flacData = {SNAPCAST_MESSAGE_CODEC_HEADER, NULL, {0, 0}, NULL,
// 0};
flacData_t *pFlacData = NULL;
decoderData_t *pDecData = NULL;
pcm_chunk_message_t *pcmData = NULL;
uint8_t *opusData = NULL;
ip_addr_t remote_ip;
uint16_t remotePort = 0;
int rc1 = ERR_OK, rc2 = ERR_OK;
@@ -734,9 +840,9 @@ static void http_get_task(void *pvParameters) {
t_flac_decoder_task = NULL;
}
if (t_flac_task != NULL) {
vTaskDelete(t_flac_task);
t_flac_task = NULL;
if (dec_task_handle != NULL) {
vTaskDelete(dec_task_handle);
dec_task_handle = NULL;
}
if (flacDecoder != NULL) {
@@ -755,9 +861,9 @@ static void http_get_task(void *pvParameters) {
decoderReadQHdl = NULL;
}
if (flacTaskQHdl != NULL) {
vQueueDelete(flacTaskQHdl);
flacTaskQHdl = NULL;
if (decoderTaskQHdl != NULL) {
vQueueDelete(decoderTaskQHdl);
decoderTaskQHdl = NULL;
}
#if SNAPCAST_SERVER_USE_MDNS
@@ -933,6 +1039,8 @@ static void http_get_task(void *pvParameters) {
int32_t payloadDataShift = 0;
int flow_drain_counter = 0;
int16_t pcm_size = 120;
#define BASE_MESSAGE_STATE 0
#define TYPED_MESSAGE_STATE 1
@@ -1348,42 +1456,94 @@ static void http_get_task(void *pvParameters) {
if (received_header == true) {
switch (codec) {
case OPUS: {
if (opusData == NULL) {
// TODO: insert some break condition if we wait
// too long
while ((opusData = (uint8_t *)malloc(
wire_chnk.size)) == NULL) {
ESP_LOGE(TAG, "couldn't memory for opusData");
vTaskDelay(pdMS_TO_TICKS(1));
}
payloadOffset = 0;
}
memcpy(&opusData[payloadOffset], start, tmp);
payloadOffset += tmp;
// ESP_LOGE(TAG,"payloadOffset
// %d, wire_chnk.size
// %d", payloadOffset,
// wire_chnk.size);
if (payloadOffset >= wire_chnk.size) {
pDecData = NULL;
while (!pDecData) {
pDecData = (decoderData_t *)malloc(
sizeof(decoderData_t));
if (!pDecData) {
vTaskDelay(pdMS_TO_TICKS(1));
}
}
// store timestamp for
// later use
pDecData->timestamp = wire_chnk.timestamp;
pDecData->inData = opusData;
pDecData->bytes = wire_chnk.size;
pDecData->outData = NULL;
pDecData->type = SNAPCAST_MESSAGE_WIRE_CHUNK;
// send data to separate task which will handle
// this
xQueueSend(decoderTaskQHdl, &pDecData,
portMAX_DELAY);
opusData = NULL;
pDecData = NULL;
}
break;
}
case FLAC: {
#if TEST_DECODER_TASK
pFlacData = NULL;
while (!pFlacData) {
pFlacData =
(flacData_t *)malloc(sizeof(flacData_t));
if (!pFlacData) {
pDecData = NULL;
while (!pDecData) {
pDecData = (decoderData_t *)malloc(
sizeof(decoderData_t));
if (!pDecData) {
vTaskDelay(pdMS_TO_TICKS(1));
}
}
pFlacData->bytes = tmp;
pDecData->bytes = tmp;
// store timestamp for
// later use
pFlacData->timestamp = wire_chnk.timestamp;
pFlacData->inData = NULL;
pDecData->timestamp = wire_chnk.timestamp;
pDecData->inData = NULL;
// while ((!pFlacData->inData) && (mallocCnt < 100))
// {
while (!pFlacData->inData) {
pFlacData->inData =
(char *)malloc(pFlacData->bytes);
if (!pFlacData->inData) {
while (!pDecData->inData) {
pDecData->inData =
(uint8_t *)malloc(pDecData->bytes);
if (!pDecData->inData) {
vTaskDelay(pdMS_TO_TICKS(1));
}
}
if (pFlacData->inData) {
memcpy(pFlacData->inData, start, tmp);
pFlacData->outData = NULL;
pFlacData->type = SNAPCAST_MESSAGE_WIRE_CHUNK;
if (pDecData->inData) {
memcpy(pDecData->inData, start, tmp);
pDecData->outData = NULL;
pDecData->type = SNAPCAST_MESSAGE_WIRE_CHUNK;
// send data to seperate task which will handle
// send data to separate task which will handle
// this
xQueueSend(flacTaskQHdl, &pFlacData,
xQueueSend(decoderTaskQHdl, &pDecData,
portMAX_DELAY);
}
#else
@@ -1392,14 +1552,14 @@ static void http_get_task(void *pvParameters) {
wire_chnk.timestamp; // store timestamp for
// later use
flacData.inData = start;
pFlacData = &flacData;
pDecData = &flacData;
startTime = esp_timer_get_time();
xSemaphoreTake(decoderReadSemaphore, portMAX_DELAY);
// send data to flac decoder
xQueueSend(decoderReadQHdl, &pFlacData,
xQueueSend(decoderReadQHdl, &pDecData,
portMAX_DELAY);
// and wait until data was
// processed
@@ -1507,25 +1667,30 @@ static void http_get_task(void *pvParameters) {
if (typedMsgCurrentPos >= base_message_rx.size) {
if (received_header == true) {
switch (codec) {
case OPUS: {
// nothing to do here
break;
}
case FLAC: {
#if TEST_DECODER_TASK
pFlacData = NULL; // send NULL so we know to wait
// for decoded data in task
pDecData = NULL; // send NULL so we know to wait
// for decoded data in task
// ESP_LOGE(TAG, "%s: flacTaskQHdl start
// wireChnk", __func__);
xQueueSend(flacTaskQHdl, &pFlacData,
xQueueSend(decoderTaskQHdl, &pDecData,
portMAX_DELAY);
// ESP_LOGE(TAG, "%s: flacTaskQHdl stop wireChnk",
// __func__);
#else
xSemaphoreGive(decoderWriteSemaphore);
// and wait until it is done
xQueueReceive(decoderWriteQHdl, &pFlacData,
xQueueReceive(decoderWriteQHdl, &pDecData,
portMAX_DELAY);
if (pFlacData->outData != NULL) {
pcmData = pFlacData->outData;
if (pDecData->outData != NULL) {
pcmData = pDecData->outData;
pcmData->timestamp = wire_chnk.timestamp;
size_t decodedSize =
@@ -1909,9 +2074,9 @@ static void http_get_task(void *pvParameters) {
t_flac_decoder_task = NULL;
}
if (t_flac_task != NULL) {
vTaskDelete(t_flac_task);
t_flac_task = NULL;
if (dec_task_handle != NULL) {
vTaskDelete(dec_task_handle);
dec_task_handle = NULL;
}
if (flacDecoder != NULL) {
@@ -1930,16 +2095,81 @@ static void http_get_task(void *pvParameters) {
decoderReadQHdl = NULL;
}
if (flacTaskQHdl != NULL) {
vQueueDelete(flacTaskQHdl);
flacTaskQHdl = NULL;
if (decoderTaskQHdl != NULL) {
vQueueDelete(decoderTaskQHdl);
decoderTaskQHdl = NULL;
}
if (opusDecoder != NULL) {
opus_decoder_destroy(opusDecoder);
opusDecoder = NULL;
}
if (codec == OPUS) {
ESP_LOGI(TAG, "OPUS not implemented yet");
decoderTaskQHdl =
xQueueCreate(8, sizeof(decoderData_t *));
if (decoderTaskQHdl == NULL) {
ESP_LOGE(TAG, "Failed to create decoderTaskQHdl");
return;
}
return;
// ESP_LOGI(TAG, "OPUS not
// implemented yet"); return;
uint16_t channels;
uint32_t rate;
uint16_t bits;
memcpy(&rate, tmp + 4, sizeof(rate));
memcpy(&bits, tmp + 8, sizeof(bits));
memcpy(&channels, tmp + 10, sizeof(channels));
scSet.codec = codec;
scSet.bits = bits;
scSet.ch = channels;
scSet.sr = rate;
ESP_LOGI(TAG, "Opus sample format: %d:%d:%d\n", rate,
bits, channels);
int error = 0;
opusDecoder =
opus_decoder_create(scSet.sr, scSet.ch, &error);
if (error != 0) {
ESP_LOGI(TAG, "Failed to init opus coder");
return;
}
ESP_LOGI(TAG, "Initialized opus Decoder: %d", error);
if (dec_task_handle == NULL) {
xTaskCreatePinnedToCore(
&opus_decoder_task, "opus_task", 8 * 1024,
&scSet, OPUS_TASK_PRIORITY, &dec_task_handle,
OPUS_TASK_CORE_ID);
}
} else if (codec == FLAC) {
decoderTaskQHdl =
xQueueCreate(8, sizeof(decoderData_t *));
if (decoderTaskQHdl == NULL) {
ESP_LOGE(TAG, "Failed to create decoderTaskQHdl");
return;
}
decoderReadQHdl =
xQueueCreate(1, sizeof(decoderData_t *));
if (decoderReadQHdl == NULL) {
ESP_LOGE(TAG, "Failed to create flac read queue");
return;
}
decoderWriteQHdl =
xQueueCreate(1, sizeof(decoderData_t *));
if (decoderWriteQHdl == NULL) {
ESP_LOGE(TAG, "Failed to create flac write queue");
return;
}
if (t_flac_decoder_task == NULL) {
xTaskCreatePinnedToCore(
&flac_decoder_task, "flac_decoder_task",
@@ -1948,42 +2178,36 @@ static void http_get_task(void *pvParameters) {
FLAC_DECODER_TASK_CORE_ID);
}
// TODO: find a smarter way for
// this wait for task creation done
// maybe use task notification
while (flacTaskQHdl == NULL) {
vTaskDelay(10);
}
#if TEST_DECODER_TASK
if (t_flac_task == NULL) {
if (dec_task_handle == NULL) {
xTaskCreatePinnedToCore(
&flac_task, "flac_task", 9 * 256, &scSet,
FLAC_TASK_PRIORITY, &t_flac_task,
FLAC_TASK_PRIORITY, &dec_task_handle,
FLAC_TASK_CORE_ID);
}
pFlacData = (flacData_t *)malloc(sizeof(flacData_t));
memset(pFlacData, 0, sizeof(flacData_t));
pDecData =
(decoderData_t *)malloc(sizeof(decoderData_t));
memset(pDecData, 0, sizeof(decoderData_t));
pFlacData->bytes = typedMsgLen;
pFlacData->inData = (char *)malloc(typedMsgLen);
memcpy(pFlacData->inData, tmp, typedMsgLen);
pFlacData->outData = NULL;
pFlacData->type = SNAPCAST_MESSAGE_CODEC_HEADER;
pDecData->bytes = typedMsgLen;
pDecData->inData = (uint8_t *)malloc(typedMsgLen);
memcpy(pDecData->inData, tmp, typedMsgLen);
pDecData->outData = NULL;
pDecData->type = SNAPCAST_MESSAGE_CODEC_HEADER;
// ESP_LOGE(TAG, "%s: flacTaskQHdl start codec
// header", __func__);
// send codec header to flac decoder
xQueueSend(flacTaskQHdl, &pFlacData, portMAX_DELAY);
xQueueSend(decoderTaskQHdl, &pDecData, portMAX_DELAY);
// ESP_LOGE(TAG, "sent codec header");
// send NULL so we know to wait
// for decoded data in task
pFlacData = NULL;
xQueueSend(flacTaskQHdl, &pFlacData, portMAX_DELAY);
pDecData = NULL;
xQueueSend(decoderTaskQHdl, &pDecData, portMAX_DELAY);
// ESP_LOGE(TAG, "%s: flacTaskQHdl done codec header",
// __func__);
@@ -1997,7 +2221,7 @@ static void http_get_task(void *pvParameters) {
flacData.bytes = typedMsgLen;
flacData.inData = tmp;
pFlacData = &flacData;
pDecData = &flacData;
// TODO: find a smarter way for
// this wait for task creation done
@@ -2008,8 +2232,7 @@ static void http_get_task(void *pvParameters) {
xSemaphoreTake(decoderReadSemaphore, portMAX_DELAY);
// send data to flac decoder
xQueueSend(decoderReadQHdl, &pFlacData,
portMAX_DELAY);
xQueueSend(decoderReadQHdl, &pDecData, portMAX_DELAY);
// and wait until data was
// processed
xSemaphoreTake(decoderReadSemaphore, portMAX_DELAY);
@@ -2017,17 +2240,19 @@ static void http_get_task(void *pvParameters) {
// for next round
xSemaphoreGive(decoderReadSemaphore);
// wait until it is done
xQueueReceive(decoderWriteQHdl, &pFlacData,
xQueueReceive(decoderWriteQHdl, &pDecData,
portMAX_DELAY);
ESP_LOGI(TAG, "fLaC sampleformat: %d:%d:%d", scSet.sr,
scSet.bits, scSet.ch);
#endif
} else if (codec == PCM) {
memcpy(&channels, tmp + 22, sizeof(channels));
uint16_t channels;
uint32_t rate;
memcpy(&rate, tmp + 24, sizeof(rate));
uint16_t bits;
memcpy(&channels, tmp + 22, sizeof(channels));
memcpy(&rate, tmp + 24, sizeof(rate));
memcpy(&bits, tmp + 34, sizeof(bits));
scSet.codec = codec;
@@ -2730,7 +2955,7 @@ void app_main(void) {
xTaskCreatePinnedToCore(&ota_server_task, "ota", 14 * 256, NULL,
OTA_TASK_PRIORITY, t_ota_task, OTA_TASK_CORE_ID);
xTaskCreatePinnedToCore(&http_get_task, "http", 3 * 1024, NULL,
xTaskCreatePinnedToCore(&http_get_task, "http", 4 * 1024, NULL,
HTTP_TASK_PRIORITY, &t_http_get_task,
HTTP_TASK_CORE_ID);

View File

@@ -65,6 +65,7 @@ CONFIG_BOOTLOADER_APP_ROLLBACK_ENABLE=y
# CONFIG_BOOTLOADER_SKIP_VALIDATE_ALWAYS is not set
CONFIG_BOOTLOADER_RESERVE_RTC_SIZE=0
# CONFIG_BOOTLOADER_CUSTOM_RESERVE_RTC is not set
CONFIG_BOOTLOADER_FLASH_XMC_SUPPORT=y
# end of Bootloader config
#
@@ -143,13 +144,7 @@ CONFIG_ESP_LYRAT_V4_3_BOARD=y
#
# ESP32 DSP processor config
#
CONFIG_USE_DSP_PROCESSOR=y
# CONFIG_SNAPCLIENT_DSP_FLOW_STEREO is not set
# CONFIG_SNAPCLIENT_DSP_FLOW_BASSBOOST is not set
# CONFIG_SNAPCLIENT_DSP_FLOW_BIAMP is not set
CONFIG_SNAPCLIENT_DSP_FLOW_BASS_TREBLE_EQ=y
CONFIG_USE_BIQUAD_ASM=y
CONFIG_SNAPCLIENT_USE_SOFT_VOL=y
# CONFIG_USE_DSP_PROCESSOR is not set
# end of ESP32 DSP processor config
#
@@ -168,9 +163,9 @@ CONFIG_SNTP_SERVER="pool.ntp.org"
#
# Wifi Configuration
#
CONFIG_ENABLE_WIFI_PROVISIONING=y
CONFIG_WIFI_PROVISIONING_SSID="prov_snapclient"
CONFIG_WIFI_PROVISIONING_PASSWORD="12345678"
# CONFIG_ENABLE_WIFI_PROVISIONING is not set
CONFIG_WIFI_SSID="zuhause"
CONFIG_WIFI_PASSWORD="dErtischlEr"
CONFIG_WIFI_MAXIMUM_RETRY=0
# end of Wifi Configuration
@@ -215,7 +210,7 @@ CONFIG_COMPILER_STACK_CHECK_MODE_NONE=y
#
# Application Level Tracing
#
# CONFIG_APPTRACE_DEST_TRAX is not set
# CONFIG_APPTRACE_DEST_JTAG is not set
CONFIG_APPTRACE_DEST_NONE=y
CONFIG_APPTRACE_LOCK_ENABLE=y
# end of Application Level Tracing
@@ -230,35 +225,6 @@ CONFIG_APPTRACE_LOCK_ENABLE=y
# Bluetooth
#
# CONFIG_BT_ENABLED is not set
CONFIG_BTDM_CTRL_BR_EDR_SCO_DATA_PATH_EFF=0
CONFIG_BTDM_CTRL_PCM_ROLE_EFF=0
CONFIG_BTDM_CTRL_PCM_POLAR_EFF=0
CONFIG_BTDM_CTRL_BLE_MAX_CONN_EFF=0
CONFIG_BTDM_CTRL_BR_EDR_MAX_ACL_CONN_EFF=0
CONFIG_BTDM_CTRL_BR_EDR_MAX_SYNC_CONN_EFF=0
CONFIG_BTDM_CTRL_PINNED_TO_CORE=0
CONFIG_BTDM_BLE_SLEEP_CLOCK_ACCURACY_INDEX_EFF=1
CONFIG_BT_CTRL_MODE_EFF=1
CONFIG_BT_CTRL_BLE_MAX_ACT=10
CONFIG_BT_CTRL_BLE_MAX_ACT_EFF=10
CONFIG_BT_CTRL_BLE_STATIC_ACL_TX_BUF_NB=0
CONFIG_BT_CTRL_PINNED_TO_CORE=0
CONFIG_BT_CTRL_HCI_TL=1
CONFIG_BT_CTRL_ADV_DUP_FILT_MAX=30
CONFIG_BT_CTRL_HW_CCA_EFF=0
CONFIG_BT_CTRL_DFT_TX_POWER_LEVEL_EFF=0
CONFIG_BT_CTRL_BLE_ADV_REPORT_FLOW_CTRL_SUPP=y
CONFIG_BT_CTRL_BLE_ADV_REPORT_FLOW_CTRL_NUM=100
CONFIG_BT_CTRL_BLE_ADV_REPORT_DISCARD_THRSHOLD=20
CONFIG_BT_CTRL_BLE_SCAN_DUPL=y
CONFIG_BT_CTRL_SCAN_DUPL_TYPE=0
CONFIG_BT_CTRL_SCAN_DUPL_CACHE_SIZE=100
CONFIG_BT_CTRL_COEX_PHY_CODED_TX_RX_TLIM_EFF=0
CONFIG_BT_CTRL_SLEEP_MODE_EFF=0
CONFIG_BT_CTRL_SLEEP_CLOCK_EFF=0
CONFIG_BT_CTRL_HCI_TL_EFF=1
CONFIG_BT_RESERVE_DRAM=0
CONFIG_BT_NIMBLE_USE_ESP_TIMER=y
# end of Bluetooth
#
@@ -298,6 +264,7 @@ CONFIG_SPI_MASTER_ISR_IN_IRAM=y
# CONFIG_TWAI_ERRATA_FIX_TX_INTR_LOST is not set
# CONFIG_TWAI_ERRATA_FIX_RX_FRAME_INVALID is not set
# CONFIG_TWAI_ERRATA_FIX_RX_FIFO_CORRUPT is not set
# CONFIG_TWAI_ERRATA_FIX_LISTEN_ONLY_DOM is not set
# end of TWAI configuration
#
@@ -345,9 +312,16 @@ CONFIG_ESP_TLS_USING_MBEDTLS=y
#
CONFIG_ESP32_REV_MIN_0=y
# CONFIG_ESP32_REV_MIN_1 is not set
# CONFIG_ESP32_REV_MIN_1_1 is not set
# CONFIG_ESP32_REV_MIN_2 is not set
# CONFIG_ESP32_REV_MIN_3 is not set
# CONFIG_ESP32_REV_MIN_3_1 is not set
CONFIG_ESP32_REV_MIN=0
CONFIG_ESP32_REV_MIN_FULL=0
CONFIG_ESP_REV_MIN_FULL=0
CONFIG_ESP32_REV_MAX_FULL_STR_OPT=y
CONFIG_ESP32_REV_MAX_FULL=399
CONFIG_ESP_REV_MAX_FULL=399
CONFIG_ESP32_DPORT_WORKAROUND=y
# CONFIG_ESP32_DEFAULT_CPU_FREQ_80 is not set
# CONFIG_ESP32_DEFAULT_CPU_FREQ_160 is not set
@@ -445,7 +419,7 @@ CONFIG_ETH_PHY_INTERFACE_RMII=y
CONFIG_ETH_RMII_CLK_INPUT=y
# CONFIG_ETH_RMII_CLK_OUTPUT is not set
CONFIG_ETH_RMII_CLK_IN_GPIO=0
CONFIG_ETH_DMA_BUFFER_SIZE=512
CONFIG_ETH_DMA_BUFFER_SIZE=1024
CONFIG_ETH_DMA_RX_BUFFER_NUM=30
CONFIG_ETH_DMA_TX_BUFFER_NUM=5
# CONFIG_ETH_SOFT_FLOW_CONTROL is not set
@@ -521,6 +495,12 @@ CONFIG_ESP_SYSTEM_PANIC_PRINT_REBOOT=y
# CONFIG_ESP_SYSTEM_PANIC_SILENT_REBOOT is not set
# CONFIG_ESP_SYSTEM_PANIC_GDBSTUB is not set
CONFIG_ESP_SYSTEM_PD_FLASH=y
# CONFIG_ESP_SYSTEM_FLASH_LEAKAGE_WORKAROUND is not set
#
# RTC Clock Config
#
# end of RTC Clock Config
#
# Memory protection
@@ -561,14 +541,15 @@ CONFIG_ESP32_WIFI_MGMT_SBUF_NUM=32
# CONFIG_WIFI_LOG_DEFAULT_LEVEL_NONE is not set
# CONFIG_WIFI_LOG_DEFAULT_LEVEL_ERROR is not set
# CONFIG_WIFI_LOG_DEFAULT_LEVEL_WARN is not set
# CONFIG_WIFI_LOG_DEFAULT_LEVEL_INFO is not set
CONFIG_WIFI_LOG_DEFAULT_LEVEL_INFO=y
# CONFIG_WIFI_LOG_DEFAULT_LEVEL_DEBUG is not set
CONFIG_WIFI_LOG_DEFAULT_LEVEL_VERBOSE=y
# CONFIG_WIFI_LOG_DEFAULT_LEVEL_VERBOSE is not set
# CONFIG_ESP32_WIFI_IRAM_OPT is not set
CONFIG_ESP32_WIFI_RX_IRAM_OPT=y
CONFIG_ESP32_WIFI_ENABLE_WPA3_SAE=y
# CONFIG_ESP_WIFI_SLP_IRAM_OPT is not set
# CONFIG_ESP_WIFI_STA_DISCONNECTED_PM_ENABLE is not set
# CONFIG_ESP_WIFI_SLP_BEACON_LOST_OPT is not set
# end of Wi-Fi
#
@@ -640,6 +621,10 @@ CONFIG_FMB_SERIAL_BUF_SIZE=256
CONFIG_FMB_SERIAL_ASCII_BITS_PER_SYMB=8
CONFIG_FMB_SERIAL_ASCII_TIMEOUT_RESPOND_MS=1000
CONFIG_FMB_PORT_TASK_PRIO=10
# CONFIG_FMB_PORT_TASK_AFFINITY_NO_AFFINITY is not set
CONFIG_FMB_PORT_TASK_AFFINITY_CPU0=y
# CONFIG_FMB_PORT_TASK_AFFINITY_CPU1 is not set
CONFIG_FMB_PORT_TASK_AFFINITY=0x0
CONFIG_FMB_CONTROLLER_SLAVE_ID_SUPPORT=y
CONFIG_FMB_CONTROLLER_SLAVE_ID=0x00112233
CONFIG_FMB_CONTROLLER_NOTIFY_TIMEOUT=20
@@ -649,6 +634,8 @@ CONFIG_FMB_EVENT_QUEUE_TIMEOUT=20
CONFIG_FMB_TIMER_PORT_ENABLED=y
CONFIG_FMB_TIMER_GROUP=0
CONFIG_FMB_TIMER_INDEX=0
CONFIG_FMB_MASTER_TIMER_GROUP=0
CONFIG_FMB_MASTER_TIMER_INDEX=0
# CONFIG_FMB_TIMER_ISR_IN_IRAM is not set
# end of Modbus configuration
@@ -756,6 +743,7 @@ CONFIG_LWIP_TCPIP_RECVMBOX_SIZE=32
CONFIG_LWIP_DHCP_DOES_ARP_CHECK=y
# CONFIG_LWIP_DHCP_DISABLE_CLIENT_ID is not set
# CONFIG_LWIP_DHCP_RESTORE_LAST_IP is not set
CONFIG_LWIP_DHCP_COARSE_TIMER_SECS=1
#
# DHCP server
@@ -782,6 +770,7 @@ CONFIG_LWIP_TCP_SYNMAXRTX=12
CONFIG_LWIP_TCP_MSS=1460
CONFIG_LWIP_TCP_TMR_INTERVAL=250
CONFIG_LWIP_TCP_MSL=60000
CONFIG_LWIP_TCP_FIN_WAIT_TIMEOUT=20000
CONFIG_LWIP_TCP_SND_BUF_DEFAULT=11680
CONFIG_LWIP_TCP_WND_DEFAULT=11680
CONFIG_LWIP_TCP_RECVMBOX_SIZE=10
@@ -871,6 +860,15 @@ CONFIG_MBEDTLS_SSL_OUT_CONTENT_LEN=4096
# CONFIG_MBEDTLS_DYNAMIC_BUFFER is not set
# CONFIG_MBEDTLS_DEBUG is not set
#
# mbedTLS v2.28.x related
#
# CONFIG_MBEDTLS_SSL_VARIABLE_BUFFER_LENGTH is not set
# CONFIG_MBEDTLS_X509_TRUSTED_CERT_CALLBACK is not set
# CONFIG_MBEDTLS_SSL_CONTEXT_SERIALIZATION is not set
CONFIG_MBEDTLS_SSL_KEEP_PEER_CERTIFICATE=y
# end of mbedTLS v2.28.x related
#
# Certificate Bundle
#
@@ -1069,6 +1067,8 @@ CONFIG_SPI_FLASH_SUPPORT_ISSI_CHIP=y
CONFIG_SPI_FLASH_SUPPORT_MXIC_CHIP=y
CONFIG_SPI_FLASH_SUPPORT_GD_CHIP=y
CONFIG_SPI_FLASH_SUPPORT_WINBOND_CHIP=y
# CONFIG_SPI_FLASH_SUPPORT_BOYA_CHIP is not set
# CONFIG_SPI_FLASH_SUPPORT_TH_CHIP is not set
# end of Auto-detect flash chips
CONFIG_SPI_FLASH_ENABLE_ENCRYPTED_READ_WRITE=y
@@ -1179,6 +1179,7 @@ CONFIG_WPA_MBEDTLS_CRYPTO=y
# CONFIG_WPA_TESTING_OPTIONS is not set
# CONFIG_WPA_WPS_STRICT is not set
# CONFIG_WPA_11KV_SUPPORT is not set
# CONFIG_WPA_DPP_SUPPORT is not set
# end of Supplicant
#
@@ -1255,10 +1256,6 @@ CONFIG_STACK_CHECK_NONE=y
# CONFIG_ESP32_APPTRACE_DEST_TRAX is not set
CONFIG_ESP32_APPTRACE_DEST_NONE=y
CONFIG_ESP32_APPTRACE_LOCK_ENABLE=y
CONFIG_BTDM_CONTROLLER_BLE_MAX_CONN_EFF=0
CONFIG_BTDM_CONTROLLER_BR_EDR_MAX_ACL_CONN_EFF=0
CONFIG_BTDM_CONTROLLER_BR_EDR_MAX_SYNC_CONN_EFF=0
CONFIG_BTDM_CONTROLLER_PINNED_TO_CORE=0
CONFIG_ADC2_DISABLE_DAC=y
# CONFIG_SPIRAM_SUPPORT is not set
CONFIG_TRACEMEM_RESERVE_DRAM=0x0

View File

@@ -65,6 +65,7 @@ CONFIG_BOOTLOADER_APP_ROLLBACK_ENABLE=y
# CONFIG_BOOTLOADER_SKIP_VALIDATE_ALWAYS is not set
CONFIG_BOOTLOADER_RESERVE_RTC_SIZE=0
# CONFIG_BOOTLOADER_CUSTOM_RESERVE_RTC is not set
CONFIG_BOOTLOADER_FLASH_XMC_SUPPORT=y
# end of Bootloader config
#
@@ -130,8 +131,8 @@ CONFIG_PARTITION_TABLE_MD5=y
#
# Audio HAL
#
CONFIG_AUDIO_BOARD_CUSTOM=y
# CONFIG_ESP_LYRAT_V4_3_BOARD is not set
# CONFIG_AUDIO_BOARD_CUSTOM is not set
CONFIG_ESP_LYRAT_V4_3_BOARD=y
# CONFIG_ESP_LYRAT_V4_2_BOARD is not set
# CONFIG_ESP_LYRATD_MSC_V2_1_BOARD is not set
# CONFIG_ESP_LYRATD_MSC_V2_2_BOARD is not set
@@ -140,51 +141,10 @@ CONFIG_AUDIO_BOARD_CUSTOM=y
# CONFIG_ESP32_S2_KALUGA_1_V1_2_BOARD is not set
# end of Audio HAL
#
# Custom Audio Board
#
# CONFIG_DAC_PCM51XX is not set
# CONFIG_DAC_PCM5102A is not set
# CONFIG_DAC_MA120 is not set
# CONFIG_DAC_MA120X0 is not set
CONFIG_DAC_ADAU1961=y
#
# DAC I2C control interface
#
CONFIG_DAC_I2C_SDA=12
CONFIG_DAC_I2C_SCL=14
CONFIG_DAC_I2C_ADDR=0x70
# end of DAC I2C control interface
#
# I2S master interface
#
CONFIG_MASTER_I2S_MCLK_PIN=3
CONFIG_MASTER_I2S_BCK_PIN=15
CONFIG_MASTER_I2S_LRCK_PIN=13
CONFIG_MASTER_I2S_DATAOUT_PIN=4
# end of I2S master interface
#
# I2S slave interface
#
CONFIG_SLAVE_I2S_BCK_PIN=26
CONFIG_SLAVE_I2S_LRCK_PIN=12
CONFIG_SLAVE_I2S_DATAOUT_PIN=5
# end of I2S slave interface
# end of Custom Audio Board
#
# ESP32 DSP processor config
#
CONFIG_USE_DSP_PROCESSOR=y
# CONFIG_SNAPCLIENT_DSP_FLOW_STEREO is not set
# CONFIG_SNAPCLIENT_DSP_FLOW_BASSBOOST is not set
# CONFIG_SNAPCLIENT_DSP_FLOW_BIAMP is not set
CONFIG_SNAPCLIENT_DSP_FLOW_BASS_TREBLE_EQ=y
CONFIG_USE_BIQUAD_ASM=y
CONFIG_SNAPCLIENT_USE_SOFT_VOL=y
# CONFIG_USE_DSP_PROCESSOR is not set
# end of ESP32 DSP processor config
#
@@ -203,9 +163,9 @@ CONFIG_SNTP_SERVER="pool.ntp.org"
#
# Wifi Configuration
#
CONFIG_ENABLE_WIFI_PROVISIONING=y
CONFIG_WIFI_PROVISIONING_SSID="prov_snapclient"
CONFIG_WIFI_PROVISIONING_PASSWORD="12345678"
# CONFIG_ENABLE_WIFI_PROVISIONING is not set
CONFIG_WIFI_SSID="zuhause"
CONFIG_WIFI_PASSWORD="dErtischlEr"
CONFIG_WIFI_MAXIMUM_RETRY=0
# end of Wifi Configuration
@@ -250,7 +210,7 @@ CONFIG_COMPILER_STACK_CHECK_MODE_NONE=y
#
# Application Level Tracing
#
# CONFIG_APPTRACE_DEST_TRAX is not set
# CONFIG_APPTRACE_DEST_JTAG is not set
CONFIG_APPTRACE_DEST_NONE=y
CONFIG_APPTRACE_LOCK_ENABLE=y
# end of Application Level Tracing
@@ -265,35 +225,6 @@ CONFIG_APPTRACE_LOCK_ENABLE=y
# Bluetooth
#
# CONFIG_BT_ENABLED is not set
CONFIG_BTDM_CTRL_BR_EDR_SCO_DATA_PATH_EFF=0
CONFIG_BTDM_CTRL_PCM_ROLE_EFF=0
CONFIG_BTDM_CTRL_PCM_POLAR_EFF=0
CONFIG_BTDM_CTRL_BLE_MAX_CONN_EFF=0
CONFIG_BTDM_CTRL_BR_EDR_MAX_ACL_CONN_EFF=0
CONFIG_BTDM_CTRL_BR_EDR_MAX_SYNC_CONN_EFF=0
CONFIG_BTDM_CTRL_PINNED_TO_CORE=0
CONFIG_BTDM_BLE_SLEEP_CLOCK_ACCURACY_INDEX_EFF=1
CONFIG_BT_CTRL_MODE_EFF=1
CONFIG_BT_CTRL_BLE_MAX_ACT=10
CONFIG_BT_CTRL_BLE_MAX_ACT_EFF=10
CONFIG_BT_CTRL_BLE_STATIC_ACL_TX_BUF_NB=0
CONFIG_BT_CTRL_PINNED_TO_CORE=0
CONFIG_BT_CTRL_HCI_TL=1
CONFIG_BT_CTRL_ADV_DUP_FILT_MAX=30
CONFIG_BT_CTRL_HW_CCA_EFF=0
CONFIG_BT_CTRL_DFT_TX_POWER_LEVEL_EFF=0
CONFIG_BT_CTRL_BLE_ADV_REPORT_FLOW_CTRL_SUPP=y
CONFIG_BT_CTRL_BLE_ADV_REPORT_FLOW_CTRL_NUM=100
CONFIG_BT_CTRL_BLE_ADV_REPORT_DISCARD_THRSHOLD=20
CONFIG_BT_CTRL_BLE_SCAN_DUPL=y
CONFIG_BT_CTRL_SCAN_DUPL_TYPE=0
CONFIG_BT_CTRL_SCAN_DUPL_CACHE_SIZE=100
CONFIG_BT_CTRL_COEX_PHY_CODED_TX_RX_TLIM_EFF=0
CONFIG_BT_CTRL_SLEEP_MODE_EFF=0
CONFIG_BT_CTRL_SLEEP_CLOCK_EFF=0
CONFIG_BT_CTRL_HCI_TL_EFF=1
CONFIG_BT_RESERVE_DRAM=0
CONFIG_BT_NIMBLE_USE_ESP_TIMER=y
# end of Bluetooth
#
@@ -333,6 +264,7 @@ CONFIG_SPI_MASTER_ISR_IN_IRAM=y
# CONFIG_TWAI_ERRATA_FIX_TX_INTR_LOST is not set
# CONFIG_TWAI_ERRATA_FIX_RX_FRAME_INVALID is not set
# CONFIG_TWAI_ERRATA_FIX_RX_FIFO_CORRUPT is not set
# CONFIG_TWAI_ERRATA_FIX_LISTEN_ONLY_DOM is not set
# end of TWAI configuration
#
@@ -378,17 +310,87 @@ CONFIG_ESP_TLS_USING_MBEDTLS=y
#
# ESP32-specific
#
CONFIG_ESP32_ECO3_CACHE_LOCK_FIX=y
CONFIG_ESP32_REV_MIN_0=y
# CONFIG_ESP32_REV_MIN_1 is not set
# CONFIG_ESP32_REV_MIN_1_1 is not set
# CONFIG_ESP32_REV_MIN_2 is not set
# CONFIG_ESP32_REV_MIN_3 is not set
# CONFIG_ESP32_REV_MIN_3_1 is not set
CONFIG_ESP32_REV_MIN=0
CONFIG_ESP32_REV_MIN_FULL=0
CONFIG_ESP_REV_MIN_FULL=0
CONFIG_ESP32_REV_MAX_FULL_STR_OPT=y
CONFIG_ESP32_REV_MAX_FULL=399
CONFIG_ESP_REV_MAX_FULL=399
CONFIG_ESP32_DPORT_WORKAROUND=y
# CONFIG_ESP32_DEFAULT_CPU_FREQ_80 is not set
# CONFIG_ESP32_DEFAULT_CPU_FREQ_160 is not set
CONFIG_ESP32_DEFAULT_CPU_FREQ_240=y
CONFIG_ESP32_DEFAULT_CPU_FREQ_MHZ=240
# CONFIG_ESP32_SPIRAM_SUPPORT is not set
CONFIG_ESP32_SPIRAM_SUPPORT=y
#
# SPI RAM config
#
CONFIG_SPIRAM_TYPE_AUTO=y
# CONFIG_SPIRAM_TYPE_ESPPSRAM16 is not set
# CONFIG_SPIRAM_TYPE_ESPPSRAM32 is not set
# CONFIG_SPIRAM_TYPE_ESPPSRAM64 is not set
CONFIG_SPIRAM_SIZE=-1
# CONFIG_SPIRAM_SPEED_40M is not set
CONFIG_SPIRAM_SPEED_80M=y
CONFIG_SPIRAM=y
CONFIG_SPIRAM_BOOT_INIT=y
# CONFIG_SPIRAM_IGNORE_NOTFOUND is not set
# CONFIG_SPIRAM_USE_MEMMAP is not set
# CONFIG_SPIRAM_USE_CAPS_ALLOC is not set
CONFIG_SPIRAM_USE_MALLOC=y
CONFIG_SPIRAM_MEMTEST=y
CONFIG_SPIRAM_MALLOC_ALWAYSINTERNAL=16384
# CONFIG_SPIRAM_TRY_ALLOCATE_WIFI_LWIP is not set
CONFIG_SPIRAM_MALLOC_RESERVE_INTERNAL=32768
# CONFIG_SPIRAM_ALLOW_BSS_SEG_EXTERNAL_MEMORY is not set
CONFIG_SPIRAM_CACHE_WORKAROUND=y
#
# SPIRAM cache workaround debugging
#
CONFIG_SPIRAM_CACHE_WORKAROUND_STRATEGY_MEMW=y
# CONFIG_SPIRAM_CACHE_WORKAROUND_STRATEGY_DUPLDST is not set
# CONFIG_SPIRAM_CACHE_WORKAROUND_STRATEGY_NOPS is not set
# end of SPIRAM cache workaround debugging
CONFIG_SPIRAM_BANKSWITCH_ENABLE=y
CONFIG_SPIRAM_BANKSWITCH_RESERVE=8
# CONFIG_SPIRAM_ALLOW_STACK_EXTERNAL_MEMORY is not set
# CONFIG_SPIRAM_OCCUPY_HSPI_HOST is not set
CONFIG_SPIRAM_OCCUPY_VSPI_HOST=y
# CONFIG_SPIRAM_OCCUPY_NO_HOST is not set
#
# PSRAM clock and cs IO for ESP32-DOWD
#
CONFIG_D0WD_PSRAM_CLK_IO=17
CONFIG_D0WD_PSRAM_CS_IO=16
# end of PSRAM clock and cs IO for ESP32-DOWD
#
# PSRAM clock and cs IO for ESP32-D2WD
#
CONFIG_D2WD_PSRAM_CLK_IO=9
CONFIG_D2WD_PSRAM_CS_IO=10
# end of PSRAM clock and cs IO for ESP32-D2WD
#
# PSRAM clock and cs IO for ESP32-PICO
#
CONFIG_PICO_PSRAM_CS_IO=10
# end of PSRAM clock and cs IO for ESP32-PICO
# CONFIG_SPIRAM_2T_MODE is not set
# end of SPI RAM config
# CONFIG_ESP32_TRAX is not set
CONFIG_ESP32_TRACEMEM_RESERVE_DRAM=0x0
# CONFIG_ESP32_UNIVERSAL_MAC_ADDRESSES_TWO is not set
@@ -480,7 +482,7 @@ CONFIG_ETH_PHY_INTERFACE_RMII=y
CONFIG_ETH_RMII_CLK_INPUT=y
# CONFIG_ETH_RMII_CLK_OUTPUT is not set
CONFIG_ETH_RMII_CLK_IN_GPIO=0
CONFIG_ETH_DMA_BUFFER_SIZE=512
CONFIG_ETH_DMA_BUFFER_SIZE=1024
CONFIG_ETH_DMA_RX_BUFFER_NUM=30
CONFIG_ETH_DMA_TX_BUFFER_NUM=5
# CONFIG_ETH_SOFT_FLOW_CONTROL is not set
@@ -555,7 +557,13 @@ CONFIG_ESP_NETIF_TCPIP_ADAPTER_COMPATIBLE_LAYER=y
CONFIG_ESP_SYSTEM_PANIC_PRINT_REBOOT=y
# CONFIG_ESP_SYSTEM_PANIC_SILENT_REBOOT is not set
# CONFIG_ESP_SYSTEM_PANIC_GDBSTUB is not set
CONFIG_ESP_SYSTEM_PD_FLASH=y
# CONFIG_ESP_SYSTEM_PSRAM_LEAKAGE_WORKAROUND is not set
# CONFIG_ESP_SYSTEM_FLASH_LEAKAGE_WORKAROUND is not set
#
# RTC Clock Config
#
# end of RTC Clock Config
#
# Memory protection
@@ -580,14 +588,15 @@ CONFIG_ESP_TIMER_IMPL_TG0_LAC=y
CONFIG_ESP32_WIFI_STATIC_RX_BUFFER_NUM=8
CONFIG_ESP32_WIFI_DYNAMIC_RX_BUFFER_NUM=64
CONFIG_ESP32_WIFI_STATIC_TX_BUFFER=y
# CONFIG_ESP32_WIFI_DYNAMIC_TX_BUFFER is not set
CONFIG_ESP32_WIFI_TX_BUFFER_TYPE=0
CONFIG_ESP32_WIFI_STATIC_TX_BUFFER_NUM=8
CONFIG_ESP32_WIFI_CACHE_TX_BUFFER_NUM=32
# CONFIG_ESP32_WIFI_CSI_ENABLED is not set
CONFIG_ESP32_WIFI_AMPDU_TX_ENABLED=y
CONFIG_ESP32_WIFI_TX_BA_WIN=8
CONFIG_ESP32_WIFI_AMPDU_RX_ENABLED=y
CONFIG_ESP32_WIFI_RX_BA_WIN=16
# CONFIG_ESP32_WIFI_AMSDU_TX_ENABLED is not set
CONFIG_ESP32_WIFI_NVS_ENABLED=y
CONFIG_ESP32_WIFI_TASK_PINNED_TO_CORE_0=y
# CONFIG_ESP32_WIFI_TASK_PINNED_TO_CORE_1 is not set
@@ -596,14 +605,15 @@ CONFIG_ESP32_WIFI_MGMT_SBUF_NUM=32
# CONFIG_WIFI_LOG_DEFAULT_LEVEL_NONE is not set
# CONFIG_WIFI_LOG_DEFAULT_LEVEL_ERROR is not set
# CONFIG_WIFI_LOG_DEFAULT_LEVEL_WARN is not set
# CONFIG_WIFI_LOG_DEFAULT_LEVEL_INFO is not set
CONFIG_WIFI_LOG_DEFAULT_LEVEL_INFO=y
# CONFIG_WIFI_LOG_DEFAULT_LEVEL_DEBUG is not set
CONFIG_WIFI_LOG_DEFAULT_LEVEL_VERBOSE=y
# CONFIG_WIFI_LOG_DEFAULT_LEVEL_VERBOSE is not set
# CONFIG_ESP32_WIFI_IRAM_OPT is not set
CONFIG_ESP32_WIFI_RX_IRAM_OPT=y
CONFIG_ESP32_WIFI_ENABLE_WPA3_SAE=y
# CONFIG_ESP_WIFI_SLP_IRAM_OPT is not set
# CONFIG_ESP_WIFI_STA_DISCONNECTED_PM_ENABLE is not set
# CONFIG_ESP_WIFI_SLP_BEACON_LOST_OPT is not set
# end of Wi-Fi
#
@@ -655,6 +665,7 @@ CONFIG_FATFS_LFN_NONE=y
CONFIG_FATFS_FS_LOCK=0
CONFIG_FATFS_TIMEOUT_MS=10000
CONFIG_FATFS_PER_FILE_CACHE=y
CONFIG_FATFS_ALLOC_PREFER_EXTRAM=y
# CONFIG_FATFS_USE_FASTSEEK is not set
# end of FAT Filesystem support
@@ -675,6 +686,10 @@ CONFIG_FMB_SERIAL_BUF_SIZE=256
CONFIG_FMB_SERIAL_ASCII_BITS_PER_SYMB=8
CONFIG_FMB_SERIAL_ASCII_TIMEOUT_RESPOND_MS=1000
CONFIG_FMB_PORT_TASK_PRIO=10
# CONFIG_FMB_PORT_TASK_AFFINITY_NO_AFFINITY is not set
CONFIG_FMB_PORT_TASK_AFFINITY_CPU0=y
# CONFIG_FMB_PORT_TASK_AFFINITY_CPU1 is not set
CONFIG_FMB_PORT_TASK_AFFINITY=0x0
CONFIG_FMB_CONTROLLER_SLAVE_ID_SUPPORT=y
CONFIG_FMB_CONTROLLER_SLAVE_ID=0x00112233
CONFIG_FMB_CONTROLLER_NOTIFY_TIMEOUT=20
@@ -684,6 +699,8 @@ CONFIG_FMB_EVENT_QUEUE_TIMEOUT=20
CONFIG_FMB_TIMER_PORT_ENABLED=y
CONFIG_FMB_TIMER_GROUP=0
CONFIG_FMB_TIMER_INDEX=0
CONFIG_FMB_MASTER_TIMER_GROUP=0
CONFIG_FMB_MASTER_TIMER_INDEX=0
# CONFIG_FMB_TIMER_ISR_IN_IRAM is not set
# end of Modbus configuration
@@ -791,6 +808,7 @@ CONFIG_LWIP_TCPIP_RECVMBOX_SIZE=32
CONFIG_LWIP_DHCP_DOES_ARP_CHECK=y
# CONFIG_LWIP_DHCP_DISABLE_CLIENT_ID is not set
# CONFIG_LWIP_DHCP_RESTORE_LAST_IP is not set
CONFIG_LWIP_DHCP_COARSE_TIMER_SECS=1
#
# DHCP server
@@ -817,6 +835,7 @@ CONFIG_LWIP_TCP_SYNMAXRTX=12
CONFIG_LWIP_TCP_MSS=1460
CONFIG_LWIP_TCP_TMR_INTERVAL=250
CONFIG_LWIP_TCP_MSL=60000
CONFIG_LWIP_TCP_FIN_WAIT_TIMEOUT=20000
CONFIG_LWIP_TCP_SND_BUF_DEFAULT=11680
CONFIG_LWIP_TCP_WND_DEFAULT=11680
CONFIG_LWIP_TCP_RECVMBOX_SIZE=10
@@ -898,6 +917,7 @@ CONFIG_LWIP_HOOK_NETCONN_EXT_RESOLVE_NONE=y
# mbedTLS
#
CONFIG_MBEDTLS_INTERNAL_MEM_ALLOC=y
# CONFIG_MBEDTLS_EXTERNAL_MEM_ALLOC is not set
# CONFIG_MBEDTLS_DEFAULT_MEM_ALLOC is not set
# CONFIG_MBEDTLS_CUSTOM_MEM_ALLOC is not set
CONFIG_MBEDTLS_ASYMMETRIC_CONTENT_LEN=y
@@ -906,6 +926,15 @@ CONFIG_MBEDTLS_SSL_OUT_CONTENT_LEN=4096
# CONFIG_MBEDTLS_DYNAMIC_BUFFER is not set
# CONFIG_MBEDTLS_DEBUG is not set
#
# mbedTLS v2.28.x related
#
# CONFIG_MBEDTLS_SSL_VARIABLE_BUFFER_LENGTH is not set
# CONFIG_MBEDTLS_X509_TRUSTED_CERT_CALLBACK is not set
# CONFIG_MBEDTLS_SSL_CONTEXT_SERIALIZATION is not set
CONFIG_MBEDTLS_SSL_KEEP_PEER_CERTIFICATE=y
# end of mbedTLS v2.28.x related
#
# Certificate Bundle
#
@@ -1104,6 +1133,8 @@ CONFIG_SPI_FLASH_SUPPORT_ISSI_CHIP=y
CONFIG_SPI_FLASH_SUPPORT_MXIC_CHIP=y
CONFIG_SPI_FLASH_SUPPORT_GD_CHIP=y
CONFIG_SPI_FLASH_SUPPORT_WINBOND_CHIP=y
# CONFIG_SPI_FLASH_SUPPORT_BOYA_CHIP is not set
# CONFIG_SPI_FLASH_SUPPORT_TH_CHIP is not set
# end of Auto-detect flash chips
CONFIG_SPI_FLASH_ENABLE_ENCRYPTED_READ_WRITE=y
@@ -1214,6 +1245,7 @@ CONFIG_WPA_MBEDTLS_CRYPTO=y
# CONFIG_WPA_TESTING_OPTIONS is not set
# CONFIG_WPA_WPS_STRICT is not set
# CONFIG_WPA_11KV_SUPPORT is not set
# CONFIG_WPA_DPP_SUPPORT is not set
# end of Supplicant
#
@@ -1290,12 +1322,9 @@ CONFIG_STACK_CHECK_NONE=y
# CONFIG_ESP32_APPTRACE_DEST_TRAX is not set
CONFIG_ESP32_APPTRACE_DEST_NONE=y
CONFIG_ESP32_APPTRACE_LOCK_ENABLE=y
CONFIG_BTDM_CONTROLLER_BLE_MAX_CONN_EFF=0
CONFIG_BTDM_CONTROLLER_BR_EDR_MAX_ACL_CONN_EFF=0
CONFIG_BTDM_CONTROLLER_BR_EDR_MAX_SYNC_CONN_EFF=0
CONFIG_BTDM_CONTROLLER_PINNED_TO_CORE=0
CONFIG_ADC2_DISABLE_DAC=y
# CONFIG_SPIRAM_SUPPORT is not set
CONFIG_SPIRAM_SUPPORT=y
# CONFIG_WIFI_LWIP_ALLOCATION_FROM_SPIRAM_FIRST is not set
CONFIG_TRACEMEM_RESERVE_DRAM=0x0
# CONFIG_TWO_UNIVERSAL_MAC_ADDRESS is not set
CONFIG_FOUR_UNIVERSAL_MAC_ADDRESS=y

1439
sdkconfig_PSRAM_lyrat_v4.3 Normal file

File diff suppressed because it is too large Load Diff

View File

@@ -65,6 +65,7 @@ CONFIG_BOOTLOADER_APP_ROLLBACK_ENABLE=y
# CONFIG_BOOTLOADER_SKIP_VALIDATE_ALWAYS is not set
CONFIG_BOOTLOADER_RESERVE_RTC_SIZE=0
# CONFIG_BOOTLOADER_CUSTOM_RESERVE_RTC is not set
CONFIG_BOOTLOADER_FLASH_XMC_SUPPORT=y
# end of Bootloader config
#
@@ -143,15 +144,15 @@ CONFIG_ESP_LYRAT_V4_3_BOARD=y
#
# ESP32 DSP processor config
#
CONFIG_USE_DSP_PROCESSOR=y
# CONFIG_SNAPCLIENT_DSP_FLOW_STEREO is not set
# CONFIG_SNAPCLIENT_DSP_FLOW_BASSBOOST is not set
# CONFIG_SNAPCLIENT_DSP_FLOW_BIAMP is not set
CONFIG_SNAPCLIENT_DSP_FLOW_BASS_TREBLE_EQ=y
CONFIG_USE_BIQUAD_ASM=y
# CONFIG_SNAPCLIENT_USE_SOFT_VOL is not set
# CONFIG_USE_DSP_PROCESSOR is not set
# end of ESP32 DSP processor config
#
# Snapclient Ethernet Configuration
#
# CONFIG_SNAPCLIENT_ENABLE_ETHERNET is not set
# end of Snapclient Ethernet Configuration
#
# SNTP Configuration
#
@@ -160,36 +161,26 @@ CONFIG_SNTP_SERVER="pool.ntp.org"
# end of SNTP Configuration
#
# Application Configuration
# Wifi Configuration
#
# CONFIG_ENABLE_WIFI_PROVISIONING is not set
CONFIG_WIFI_SSID="zuhause"
CONFIG_WIFI_PASSWORD="dErtischlEr"
CONFIG_WIFI_MAXIMUM_RETRY=0
# end of Wifi Configuration
#
# Snapclient Configuration
#
CONFIG_SNAPSERVER_USE_MDNS=y
CONFIG_SNAPCLIENT_NAME="esp-snapclient"
#
# HTTP Server Setting
#
CONFIG_WEB_PORT=8000
# end of HTTP Server Setting
#
# GPIO Setting
#
CONFIG_GPIO_RANGE_MAX=33
CONFIG_BLINK_GPIO=5
# end of GPIO Setting
# end of Application Configuration
#
# Wifi Configuration
#
CONFIG_ENABLE_WIFI_PROVISIONING=y
CONFIG_WIFI_MAXIMUM_RETRY=0
# end of Wifi Configuration
#
# Snapcast Configuration
#
CONFIG_SNAPSERVER_USE_MDNS=y
CONFIG_SNAPCLIENT_NAME="esp-snapclient"
# end of Snapcast Configuration
# end of Snapclient Configuration
#
# Compiler options
@@ -219,7 +210,7 @@ CONFIG_COMPILER_STACK_CHECK_MODE_NONE=y
#
# Application Level Tracing
#
# CONFIG_APPTRACE_DEST_TRAX is not set
# CONFIG_APPTRACE_DEST_JTAG is not set
CONFIG_APPTRACE_DEST_NONE=y
CONFIG_APPTRACE_LOCK_ENABLE=y
# end of Application Level Tracing
@@ -234,35 +225,6 @@ CONFIG_APPTRACE_LOCK_ENABLE=y
# Bluetooth
#
# CONFIG_BT_ENABLED is not set
CONFIG_BTDM_CTRL_BR_EDR_SCO_DATA_PATH_EFF=0
CONFIG_BTDM_CTRL_PCM_ROLE_EFF=0
CONFIG_BTDM_CTRL_PCM_POLAR_EFF=0
CONFIG_BTDM_CTRL_BLE_MAX_CONN_EFF=0
CONFIG_BTDM_CTRL_BR_EDR_MAX_ACL_CONN_EFF=0
CONFIG_BTDM_CTRL_BR_EDR_MAX_SYNC_CONN_EFF=0
CONFIG_BTDM_CTRL_PINNED_TO_CORE=0
CONFIG_BTDM_BLE_SLEEP_CLOCK_ACCURACY_INDEX_EFF=1
CONFIG_BT_CTRL_MODE_EFF=1
CONFIG_BT_CTRL_BLE_MAX_ACT=10
CONFIG_BT_CTRL_BLE_MAX_ACT_EFF=10
CONFIG_BT_CTRL_BLE_STATIC_ACL_TX_BUF_NB=0
CONFIG_BT_CTRL_PINNED_TO_CORE=0
CONFIG_BT_CTRL_HCI_TL=1
CONFIG_BT_CTRL_ADV_DUP_FILT_MAX=30
CONFIG_BT_CTRL_HW_CCA_EFF=0
CONFIG_BT_CTRL_DFT_TX_POWER_LEVEL_EFF=0
CONFIG_BT_CTRL_BLE_ADV_REPORT_FLOW_CTRL_SUPP=y
CONFIG_BT_CTRL_BLE_ADV_REPORT_FLOW_CTRL_NUM=100
CONFIG_BT_CTRL_BLE_ADV_REPORT_DISCARD_THRSHOLD=20
CONFIG_BT_CTRL_BLE_SCAN_DUPL=y
CONFIG_BT_CTRL_SCAN_DUPL_TYPE=0
CONFIG_BT_CTRL_SCAN_DUPL_CACHE_SIZE=100
CONFIG_BT_CTRL_COEX_PHY_CODED_TX_RX_TLIM_EFF=0
CONFIG_BT_CTRL_SLEEP_MODE_EFF=0
CONFIG_BT_CTRL_SLEEP_CLOCK_EFF=0
CONFIG_BT_CTRL_HCI_TL_EFF=1
CONFIG_BT_RESERVE_DRAM=0
CONFIG_BT_NIMBLE_USE_ESP_TIMER=y
# end of Bluetooth
#
@@ -302,6 +264,7 @@ CONFIG_SPI_MASTER_ISR_IN_IRAM=y
# CONFIG_TWAI_ERRATA_FIX_TX_INTR_LOST is not set
# CONFIG_TWAI_ERRATA_FIX_RX_FRAME_INVALID is not set
# CONFIG_TWAI_ERRATA_FIX_RX_FIFO_CORRUPT is not set
# CONFIG_TWAI_ERRATA_FIX_LISTEN_ONLY_DOM is not set
# end of TWAI configuration
#
@@ -349,9 +312,16 @@ CONFIG_ESP_TLS_USING_MBEDTLS=y
#
CONFIG_ESP32_REV_MIN_0=y
# CONFIG_ESP32_REV_MIN_1 is not set
# CONFIG_ESP32_REV_MIN_1_1 is not set
# CONFIG_ESP32_REV_MIN_2 is not set
# CONFIG_ESP32_REV_MIN_3 is not set
# CONFIG_ESP32_REV_MIN_3_1 is not set
CONFIG_ESP32_REV_MIN=0
CONFIG_ESP32_REV_MIN_FULL=0
CONFIG_ESP_REV_MIN_FULL=0
CONFIG_ESP32_REV_MAX_FULL_STR_OPT=y
CONFIG_ESP32_REV_MAX_FULL=399
CONFIG_ESP_REV_MAX_FULL=399
CONFIG_ESP32_DPORT_WORKAROUND=y
# CONFIG_ESP32_DEFAULT_CPU_FREQ_80 is not set
# CONFIG_ESP32_DEFAULT_CPU_FREQ_160 is not set
@@ -413,7 +383,7 @@ CONFIG_ADC_CAL_LUT_ENABLE=y
CONFIG_ESP_ERR_TO_NAME_LOOKUP=y
CONFIG_ESP_SYSTEM_EVENT_QUEUE_SIZE=32
CONFIG_ESP_SYSTEM_EVENT_TASK_STACK_SIZE=2304
CONFIG_ESP_MAIN_TASK_STACK_SIZE=2048
CONFIG_ESP_MAIN_TASK_STACK_SIZE=2560
CONFIG_ESP_IPC_TASK_STACK_SIZE=1024
CONFIG_ESP_IPC_USES_CALLERS_PRIORITY=y
CONFIG_ESP_MINIMAL_SHARED_STACK_SIZE=2048
@@ -449,9 +419,10 @@ CONFIG_ETH_PHY_INTERFACE_RMII=y
CONFIG_ETH_RMII_CLK_INPUT=y
# CONFIG_ETH_RMII_CLK_OUTPUT is not set
CONFIG_ETH_RMII_CLK_IN_GPIO=0
CONFIG_ETH_DMA_BUFFER_SIZE=512
CONFIG_ETH_DMA_RX_BUFFER_NUM=10
CONFIG_ETH_DMA_TX_BUFFER_NUM=10
CONFIG_ETH_DMA_BUFFER_SIZE=1024
CONFIG_ETH_DMA_RX_BUFFER_NUM=30
CONFIG_ETH_DMA_TX_BUFFER_NUM=5
# CONFIG_ETH_SOFT_FLOW_CONTROL is not set
CONFIG_ETH_USE_SPI_ETHERNET=y
# CONFIG_ETH_SPI_ETHERNET_DM9051 is not set
# CONFIG_ETH_SPI_ETHERNET_W5500 is not set
@@ -524,6 +495,12 @@ CONFIG_ESP_SYSTEM_PANIC_PRINT_REBOOT=y
# CONFIG_ESP_SYSTEM_PANIC_SILENT_REBOOT is not set
# CONFIG_ESP_SYSTEM_PANIC_GDBSTUB is not set
CONFIG_ESP_SYSTEM_PD_FLASH=y
# CONFIG_ESP_SYSTEM_FLASH_LEAKAGE_WORKAROUND is not set
#
# RTC Clock Config
#
# end of RTC Clock Config
#
# Memory protection
@@ -568,10 +545,11 @@ CONFIG_WIFI_LOG_DEFAULT_LEVEL_INFO=y
# CONFIG_WIFI_LOG_DEFAULT_LEVEL_DEBUG is not set
# CONFIG_WIFI_LOG_DEFAULT_LEVEL_VERBOSE is not set
# CONFIG_ESP32_WIFI_IRAM_OPT is not set
# CONFIG_ESP32_WIFI_RX_IRAM_OPT is not set
CONFIG_ESP32_WIFI_RX_IRAM_OPT=y
CONFIG_ESP32_WIFI_ENABLE_WPA3_SAE=y
# CONFIG_ESP_WIFI_SLP_IRAM_OPT is not set
# CONFIG_ESP_WIFI_STA_DISCONNECTED_PM_ENABLE is not set
# CONFIG_ESP_WIFI_SLP_BEACON_LOST_OPT is not set
# end of Wi-Fi
#
@@ -643,6 +621,10 @@ CONFIG_FMB_SERIAL_BUF_SIZE=256
CONFIG_FMB_SERIAL_ASCII_BITS_PER_SYMB=8
CONFIG_FMB_SERIAL_ASCII_TIMEOUT_RESPOND_MS=1000
CONFIG_FMB_PORT_TASK_PRIO=10
# CONFIG_FMB_PORT_TASK_AFFINITY_NO_AFFINITY is not set
CONFIG_FMB_PORT_TASK_AFFINITY_CPU0=y
# CONFIG_FMB_PORT_TASK_AFFINITY_CPU1 is not set
CONFIG_FMB_PORT_TASK_AFFINITY=0x0
CONFIG_FMB_CONTROLLER_SLAVE_ID_SUPPORT=y
CONFIG_FMB_CONTROLLER_SLAVE_ID=0x00112233
CONFIG_FMB_CONTROLLER_NOTIFY_TIMEOUT=20
@@ -652,6 +634,8 @@ CONFIG_FMB_EVENT_QUEUE_TIMEOUT=20
CONFIG_FMB_TIMER_PORT_ENABLED=y
CONFIG_FMB_TIMER_GROUP=0
CONFIG_FMB_TIMER_INDEX=0
CONFIG_FMB_MASTER_TIMER_GROUP=0
CONFIG_FMB_MASTER_TIMER_INDEX=0
# CONFIG_FMB_TIMER_ISR_IN_IRAM is not set
# end of Modbus configuration
@@ -759,6 +743,7 @@ CONFIG_LWIP_TCPIP_RECVMBOX_SIZE=32
CONFIG_LWIP_DHCP_DOES_ARP_CHECK=y
# CONFIG_LWIP_DHCP_DISABLE_CLIENT_ID is not set
# CONFIG_LWIP_DHCP_RESTORE_LAST_IP is not set
CONFIG_LWIP_DHCP_COARSE_TIMER_SECS=1
#
# DHCP server
@@ -785,6 +770,7 @@ CONFIG_LWIP_TCP_SYNMAXRTX=12
CONFIG_LWIP_TCP_MSS=1460
CONFIG_LWIP_TCP_TMR_INTERVAL=250
CONFIG_LWIP_TCP_MSL=60000
CONFIG_LWIP_TCP_FIN_WAIT_TIMEOUT=20000
CONFIG_LWIP_TCP_SND_BUF_DEFAULT=11680
CONFIG_LWIP_TCP_WND_DEFAULT=11680
CONFIG_LWIP_TCP_RECVMBOX_SIZE=10
@@ -874,6 +860,15 @@ CONFIG_MBEDTLS_SSL_OUT_CONTENT_LEN=4096
# CONFIG_MBEDTLS_DYNAMIC_BUFFER is not set
# CONFIG_MBEDTLS_DEBUG is not set
#
# mbedTLS v2.28.x related
#
# CONFIG_MBEDTLS_SSL_VARIABLE_BUFFER_LENGTH is not set
# CONFIG_MBEDTLS_X509_TRUSTED_CERT_CALLBACK is not set
# CONFIG_MBEDTLS_SSL_CONTEXT_SERIALIZATION is not set
CONFIG_MBEDTLS_SSL_KEEP_PEER_CERTIFICATE=y
# end of mbedTLS v2.28.x related
#
# Certificate Bundle
#
@@ -1072,6 +1067,8 @@ CONFIG_SPI_FLASH_SUPPORT_ISSI_CHIP=y
CONFIG_SPI_FLASH_SUPPORT_MXIC_CHIP=y
CONFIG_SPI_FLASH_SUPPORT_GD_CHIP=y
CONFIG_SPI_FLASH_SUPPORT_WINBOND_CHIP=y
# CONFIG_SPI_FLASH_SUPPORT_BOYA_CHIP is not set
# CONFIG_SPI_FLASH_SUPPORT_TH_CHIP is not set
# end of Auto-detect flash chips
CONFIG_SPI_FLASH_ENABLE_ENCRYPTED_READ_WRITE=y
@@ -1182,6 +1179,7 @@ CONFIG_WPA_MBEDTLS_CRYPTO=y
# CONFIG_WPA_TESTING_OPTIONS is not set
# CONFIG_WPA_WPS_STRICT is not set
# CONFIG_WPA_11KV_SUPPORT is not set
# CONFIG_WPA_DPP_SUPPORT is not set
# end of Supplicant
#
@@ -1258,10 +1256,6 @@ CONFIG_STACK_CHECK_NONE=y
# CONFIG_ESP32_APPTRACE_DEST_TRAX is not set
CONFIG_ESP32_APPTRACE_DEST_NONE=y
CONFIG_ESP32_APPTRACE_LOCK_ENABLE=y
CONFIG_BTDM_CONTROLLER_BLE_MAX_CONN_EFF=0
CONFIG_BTDM_CONTROLLER_BR_EDR_MAX_ACL_CONN_EFF=0
CONFIG_BTDM_CONTROLLER_BR_EDR_MAX_SYNC_CONN_EFF=0
CONFIG_BTDM_CONTROLLER_PINNED_TO_CORE=0
CONFIG_ADC2_DISABLE_DAC=y
# CONFIG_SPIRAM_SUPPORT is not set
CONFIG_TRACEMEM_RESERVE_DRAM=0x0
@@ -1290,7 +1284,7 @@ CONFIG_ESP32_RTC_CLOCK_SOURCE_INTERNAL_RC=y
# CONFIG_COMPATIBLE_PRE_V2_1_BOOTLOADERS is not set
CONFIG_SYSTEM_EVENT_QUEUE_SIZE=32
CONFIG_SYSTEM_EVENT_TASK_STACK_SIZE=2304
CONFIG_MAIN_TASK_STACK_SIZE=2048
CONFIG_MAIN_TASK_STACK_SIZE=2560
CONFIG_IPC_TASK_STACK_SIZE=1024
CONFIG_CONSOLE_UART_DEFAULT=y
# CONFIG_CONSOLE_UART_CUSTOM is not set