diff --git a/components/lightsnapcast/include/player.h b/components/lightsnapcast/include/player.h index 3560ba5..97971df 100644 --- a/components/lightsnapcast/include/player.h +++ b/components/lightsnapcast/include/player.h @@ -9,9 +9,9 @@ #define I2S_PORT I2S_NUM_0 -#define LATENCY_MEDIAN_FILTER_LEN 49 // 99 +#define LATENCY_MEDIAN_FILTER_LEN 29 // 99 -#define SHORT_BUFFER_LEN 29 +#define SHORT_BUFFER_LEN 9 typedef struct pcm_chunk_fragment pcm_chunk_fragment_t; struct pcm_chunk_fragment @@ -29,7 +29,7 @@ typedef struct pcm_chunk_message typedef enum codec_type_e { - NONE, + NONE = 0, PCM, FLAC, OGG, @@ -57,7 +57,11 @@ typedef struct snapcastSetting_s int init_player (void); int deinit_player (void); -int8_t insert_pcm_chunk (wire_chunk_message_t *decodedWireChunk); +int8_t allocate_pcm_chunk_memory (pcm_chunk_message_t **pcmChunk, + size_t bytes); +int8_t insert_pcm_chunk (wire_chunk_message_t *pcmChunk); + +// int8_t insert_pcm_chunk (wire_chunk_message_t *decodedWireChunk); int8_t free_pcm_chunk (pcm_chunk_message_t *pcmChunk); int8_t player_latency_insert (int64_t newValue); diff --git a/components/lightsnapcast/include/snapcast.h b/components/lightsnapcast/include/snapcast.h index 0a5604d..02b8682 100644 --- a/components/lightsnapcast/include/snapcast.h +++ b/components/lightsnapcast/include/snapcast.h @@ -5,7 +5,8 @@ #include #include -enum message_type { +enum message_type +{ SNAPCAST_MESSAGE_BASE = 0, SNAPCAST_MESSAGE_CODEC_HEADER = 1, SNAPCAST_MESSAGE_WIRE_CHUNK = 2, @@ -18,12 +19,14 @@ enum message_type { SNAPCAST_MESSAGE_LAST = SNAPCAST_MESSAGE_STREAM_TAGS }; -typedef struct tv { +typedef struct tv +{ int32_t sec; int32_t usec; } tv_t; -typedef struct base_message { +typedef struct base_message +{ uint16_t type; uint16_t id; uint16_t refersTo; @@ -32,13 +35,13 @@ typedef struct base_message { uint32_t size; } base_message_t; -extern const int BASE_MESSAGE_SIZE; -extern const int TIME_MESSAGE_SIZE; +#define BASE_MESSAGE_SIZE 26 +#define TIME_MESSAGE_SIZE 8 -int base_message_serialize(base_message_t *msg, char *data, uint32_t size); +int base_message_serialize (base_message_t *msg, char *data, uint32_t size); -int base_message_deserialize(base_message_t *msg, const char *data, - uint32_t size); +int base_message_deserialize (base_message_t *msg, const char *data, + uint32_t size); /* Sample Hello message { @@ -54,7 +57,8 @@ int base_message_deserialize(base_message_t *msg, const char *data, } */ -typedef struct hello_message { +typedef struct hello_message +{ char *mac; char *hostname; char *version; @@ -66,45 +70,49 @@ typedef struct hello_message { int protocol_version; } hello_message_t; -char *hello_message_serialize(hello_message_t *msg, size_t *size); +char *hello_message_serialize (hello_message_t *msg, size_t *size); -typedef struct server_settings_message { +typedef struct server_settings_message +{ int32_t buffer_ms; int32_t latency; uint32_t volume; bool muted; } server_settings_message_t; -int server_settings_message_deserialize(server_settings_message_t *msg, - const char *json_str); +int server_settings_message_deserialize (server_settings_message_t *msg, + const char *json_str); -typedef struct codec_header_message { +typedef struct codec_header_message +{ char *codec; uint32_t size; char *payload; } codec_header_message_t; -int codec_header_message_deserialize(codec_header_message_t *msg, - const char *data, uint32_t size); -void codec_header_message_free(codec_header_message_t *msg); +int codec_header_message_deserialize (codec_header_message_t *msg, + const char *data, uint32_t size); +void codec_header_message_free (codec_header_message_t *msg); -typedef struct wire_chunk_message { +typedef struct wire_chunk_message +{ tv_t timestamp; size_t size; char *payload; } wire_chunk_message_t; // TODO currently copies, could be made to not copy probably -int wire_chunk_message_deserialize(wire_chunk_message_t *msg, const char *data, - uint32_t size); -void wire_chunk_message_free(wire_chunk_message_t *msg); +int wire_chunk_message_deserialize (wire_chunk_message_t *msg, + const char *data, uint32_t size); +void wire_chunk_message_free (wire_chunk_message_t *msg); -typedef struct time_message { +typedef struct time_message +{ tv_t latency; } time_message_t; -int time_message_serialize(time_message_t *msg, char *data, uint32_t size); -int time_message_deserialize(time_message_t *msg, const char *data, - uint32_t size); +int time_message_serialize (time_message_t *msg, char *data, uint32_t size); +int time_message_deserialize (time_message_t *msg, const char *data, + uint32_t size); -#endif // __SNAPCAST_H__ +#endif // __SNAPCAST_H__ diff --git a/components/lightsnapcast/player.c b/components/lightsnapcast/player.c index 8616f6a..b141b9d 100644 --- a/components/lightsnapcast/player.c +++ b/components/lightsnapcast/player.c @@ -14,6 +14,8 @@ #include "esp_log.h" +#include "esp_wifi.h" + #include "soc/rtc.h" #include "driver/timer.h" @@ -310,10 +312,10 @@ init_player (void) if (syncTaskHandle == NULL) { - ESP_LOGI (TAG, "Start snapcast_sync_task"); + ESP_LOGI (TAG, "Start player_task"); - xTaskCreatePinnedToCore (player_task, "snapcast_sync_task", 8 * 1024, - NULL, SYNC_TASK_PRIORITY, &syncTaskHandle, + xTaskCreatePinnedToCore (player_task, "player", 2048 + 512, NULL, + SYNC_TASK_PRIORITY, &syncTaskHandle, SYNC_TASK_CORE_ID); } @@ -356,7 +358,7 @@ player_latency_insert (int64_t newValue) int64_t medianValue; medianValue = MEDIANFILTER_Insert (&latencyMedianFilterLong, newValue); - if (xSemaphoreTake (latencyBufSemaphoreHandle, pdMS_TO_TICKS (1)) == pdTRUE) + if (xSemaphoreTake (latencyBufSemaphoreHandle, pdMS_TO_TICKS (5)) == pdTRUE) { if (MEDIANFILTER_isFull (&latencyMedianFilterLong)) { @@ -528,8 +530,8 @@ get_diff_to_server (int64_t *tDiff) { *tDiff = lastDiff; - // ESP_LOGW(TAG, "get_diff_to_server: can't take semaphore. Old diff - // retrieved"); + ESP_LOGW ( + TAG, "get_diff_to_server: can't take semaphore. Old diff retrieved"); return -1; } @@ -773,18 +775,824 @@ free_pcm_chunk (pcm_chunk_message_t *pcmChunk) return 0; } +int8_t +insert_pcm_chunk_IRAM (wire_chunk_message_t *decodedWireChunk, + pcm_chunk_message_t *pcmChunk) +{ + size_t largestFreeBlock, freeMem; + int ret = -3; + + // we got valid memory for pcm_chunk_message_t + // first we try to allocated 32 bit aligned memory for payload + // check available memory first so we can decide if we need to fragment the + // data + freeMem = heap_caps_get_free_size (MALLOC_CAP_32BIT | MALLOC_CAP_EXEC); + largestFreeBlock + = heap_caps_get_largest_free_block (MALLOC_CAP_32BIT | MALLOC_CAP_EXEC); + if ((freeMem >= decodedWireChunk->size) + && (largestFreeBlock >= decodedWireChunk->size)) + { + // ESP_LOGI( + // TAG, + // "32b f %d b %d", freeMem, + // largestFreeBlock); + + pcmChunk->fragment->payload = (char *)heap_caps_malloc ( + decodedWireChunk->size, MALLOC_CAP_32BIT | MALLOC_CAP_EXEC); + if (pcmChunk->fragment->payload == NULL) + { + ESP_LOGE (TAG, + "Failed to allocate IRAM memory for pcm chunk payload"); + + // free_pcm_chunk (pcmChunk); + + ret = -2; + } + else + { + // copy the whole payload to our fragment + memcpy (pcmChunk->fragment->payload, decodedWireChunk->payload, + decodedWireChunk->size); + pcmChunk->fragment->nextFragment = NULL; + pcmChunk->fragment->size = decodedWireChunk->size; + + ret = 0; + } + } + else + { + // ESP_LOGE (TAG, "couldn't get memory to insert + // chunk of size %d, IRAM freemem: %d blocksize %d", + // decodedWireChunk->size, + // freeMem, largestFreeBlock); + } + + return ret; +} + +int8_t +insert_pcm_chunk_DRAM (wire_chunk_message_t *decodedWireChunk, + pcm_chunk_message_t *pcmChunk) +{ + size_t largestFreeBlock, freeMem; + int ret = -3; + + // we got valid memory for pcm_chunk_message_t + // first we try to allocated 32 bit aligned memory for payload + // check available memory first so we can decide if we need to fragment the + // data + freeMem = heap_caps_get_free_size (MALLOC_CAP_8BIT); + largestFreeBlock = heap_caps_get_largest_free_block (MALLOC_CAP_8BIT); + if ((freeMem >= decodedWireChunk->size) + && (largestFreeBlock >= decodedWireChunk->size)) + { + // ESP_LOGI( + // TAG, + // "32b f %d b %d", freeMem, + // largestFreeBlock); + + pcmChunk->fragment->payload + = (char *)heap_caps_malloc (decodedWireChunk->size, MALLOC_CAP_8BIT); + if (pcmChunk->fragment->payload == NULL) + { + ESP_LOGE (TAG, + "Failed to allocate DRAM memory for pcm chunk payload"); + + // free_pcm_chunk (pcmChunk); + + ret = -2; + } + else + { + // copy the whole payload to our fragment + memcpy (pcmChunk->fragment->payload, decodedWireChunk->payload, + decodedWireChunk->size); + pcmChunk->fragment->nextFragment = NULL; + pcmChunk->fragment->size = decodedWireChunk->size; + + ret = 0; + } + } + else + { + // ESP_LOGE (TAG, "couldn't get memory to insert chunk + // of size %d, DRAM freemem: %d blocksize %d", + // decodedWireChunk->size, freeMem, largestFreeBlock); + } + + return ret; +} + +int8_t +insert_pcm_chunk_IRAM_fragmented (wire_chunk_message_t *decodedWireChunk, + pcm_chunk_message_t *pcmChunk) +{ + size_t largestFreeBlock, freeMem; + int ret = -3; + size_t tmpSize; + pcm_chunk_fragment_t *next = NULL; + size_t s; + + freeMem = heap_caps_get_free_size (MALLOC_CAP_32BIT | MALLOC_CAP_EXEC); + largestFreeBlock + = heap_caps_get_largest_free_block (MALLOC_CAP_32BIT | MALLOC_CAP_EXEC); + // ESP_LOGW( + // TAG, + // "32b f %d b %d", freeMem, + // largestFreeBlock); + + // just to be sure, normally insert_pcm_chunk_IRAM() would have been called + // previously and this shouldn't be possible now + if (largestFreeBlock >= decodedWireChunk->size) + { + ret = insert_pcm_chunk_IRAM (decodedWireChunk, pcmChunk); + } + else + { + ret = 0; + + if (freeMem >= decodedWireChunk->size) + { + tmpSize = decodedWireChunk->size; + // heap_caps_aligned_alloc(sizeof(uint32_t), decodedWireChunk->size, + // MALLOC_CAP_32BIT); + pcmChunk->fragment->payload = (char *)heap_caps_malloc ( + largestFreeBlock, MALLOC_CAP_32BIT | MALLOC_CAP_EXEC); + if (pcmChunk->fragment->payload == NULL) + { + ESP_LOGE (TAG, "Failed to allocate IRAM memory for pcm chunk " + "fragmented payload"); + + free_pcm_chunk (pcmChunk); + + ret = -2; + } + else + { + next = pcmChunk->fragment; + s = largestFreeBlock; + + // loop until we have all data stored to a fragment + do + { + // copy the whole payload to our fragment + memcpy (next->payload, decodedWireChunk->payload, s); + next->size = s; + tmpSize -= s; + decodedWireChunk->payload += s; + + // ESP_LOGI (TAG,"%p %d", next->payload, + // next->size); + + if (tmpSize > 0) + { + next->nextFragment + = (pcm_chunk_fragment_t *)heap_caps_calloc ( + 1, sizeof (pcm_chunk_fragment_t), + MALLOC_CAP_8BIT); + if (next->nextFragment == NULL) + { + ESP_LOGE ( + TAG, + "Failed to allocate IRAM memory for next pcm " + "chunk fragment %d %d", + heap_caps_get_free_size (MALLOC_CAP_8BIT), + heap_caps_get_largest_free_block ( + MALLOC_CAP_8BIT)); + + // free_pcm_chunk + //(pcmChunk); + + ret = -3; + + break; + } + else + { + largestFreeBlock = heap_caps_get_largest_free_block ( + MALLOC_CAP_32BIT | MALLOC_CAP_EXEC); + if (largestFreeBlock <= tmpSize) + { + s = largestFreeBlock; + } + else + { + s = tmpSize; + } + + next->nextFragment->payload + = (char *)heap_caps_malloc ( + s, MALLOC_CAP_32BIT | MALLOC_CAP_EXEC); + if (next->nextFragment->payload == NULL) + { + ESP_LOGE ( + TAG, + "Failed to allocate IRAM memory for pcm " + "chunk next fragmented payload"); + + // free_pcm_chunk + //(pcmChunk); + + ret = -3; + + break; + } + else + { + next = next->nextFragment; + } + } + } + } + while (tmpSize); + } + } + } + + /* + if (ret < 0) { +// freeMem = heap_caps_get_free_size (MALLOC_CAP_8BIT); +// largestFreeBlock = heap_caps_get_largest_free_block +(MALLOC_CAP_8BIT); + // ESP_LOGW( + // TAG, + // "32b f %d b %d", freeMem, + // largestFreeBlock); + + // just to be sure, normally insert_pcm_chunk_DRAM() would have been +called previously and this shouldn't be possible now +// if (largestFreeBlock >= decodedWireChunk->size) +// { +// ret = insert_pcm_chunk_DRAM(decodedWireChunk, +pcmChunk); +// } +// else + { +// pcm_chunk_fragment_t *next = NULL; +// size_t s; + + ret = 0; + +// tmpSize = decodedWireChunk->size; + // heap_caps_aligned_alloc(sizeof(uint32_t), +decodedWireChunk->size, + // MALLOC_CAP_32BIT); + pcmChunk->fragment->payload + = (char *)heap_caps_malloc (largestFreeBlock, +MALLOC_CAP_8BIT); if (pcmChunk->fragment->payload == NULL) + { + ESP_LOGE (TAG, "Failed to allocate DRAM memory for +pcm chunk " "fragmented payload"); + + free_pcm_chunk (pcmChunk); + + ret = -2; + } + else + { + next = pcmChunk->fragment; + s = largestFreeBlock; + + // loop until we have all data stored to a fragment + do + { + // copy the whole payload to our fragment + memcpy (next->payload, +decodedWireChunk->payload, s); next->size = s; tmpSize -= s; + decodedWireChunk->payload += s; + +// ESP_LOGI (TAG,"%p %d", next->payload, next->size); + + if (tmpSize > 0) + { + next->nextFragment = +(pcm_chunk_fragment_t *)heap_caps_calloc ( 1, sizeof (pcm_chunk_fragment_t), +MALLOC_CAP_8BIT); if (next->nextFragment == NULL) + { + ESP_LOGE (TAG, + "Failed +to allocate DRAM memory for next pcm " "chunk fragment %d %d", + heap_caps_get_free_size +(MALLOC_CAP_8BIT), heap_caps_get_largest_free_block ( MALLOC_CAP_8BIT)); + + free_pcm_chunk (pcmChunk); + + ret = -3; + + break; + } + else + { + largestFreeBlock = +heap_caps_get_largest_free_block (MALLOC_CAP_8BIT); if (largestFreeBlock <= +tmpSize) + { + s = largestFreeBlock; + } + else + { + s = tmpSize; + } + + next->nextFragment->payload + = (char +*)heap_caps_malloc (s, MALLOC_CAP_8BIT); if (next->nextFragment->payload == +NULL) + { + ESP_LOGE (TAG, + "Failed to allocate DRAM memory for pcm " + "chunk next fragmented payload"); + + free_pcm_chunk +(pcmChunk); + + ret = -3; + + break; + } + else + { + next = +next->nextFragment; + } + } + } + } + while (tmpSize); + } + } + } + */ + + return ret; +} + +int8_t +insert_pcm_chunk_DRAM_fragmented (wire_chunk_message_t *decodedWireChunk, + pcm_chunk_message_t *pcmChunk) +{ + size_t largestFreeBlock, freeMem; + int ret = -3; + size_t tmpSize; + pcm_chunk_fragment_t *next = NULL; + size_t s; + + freeMem = heap_caps_get_free_size (MALLOC_CAP_8BIT); + largestFreeBlock = heap_caps_get_largest_free_block (MALLOC_CAP_8BIT); + // ESP_LOGW( + // TAG, + // "32b f %d b %d", freeMem, + // largestFreeBlock); + + // just to be sure, normally insert_pcm_chunk_IRAM() would have been called + // previously and this shouldn't be possible now + if (largestFreeBlock >= decodedWireChunk->size) + { + ret = insert_pcm_chunk_DRAM (decodedWireChunk, pcmChunk); + } + else + { + ret = 0; + + if (freeMem >= decodedWireChunk->size) + { + tmpSize = decodedWireChunk->size; + // heap_caps_aligned_alloc(sizeof(uint32_t), decodedWireChunk->size, + // MALLOC_CAP_32BIT); + pcmChunk->fragment->payload + = (char *)heap_caps_malloc (largestFreeBlock, MALLOC_CAP_8BIT); + if (pcmChunk->fragment->payload == NULL) + { + ESP_LOGE (TAG, "Failed to allocate IRAM memory for pcm chunk " + "fragmented payload"); + + free_pcm_chunk (pcmChunk); + + ret = -2; + } + else + { + next = pcmChunk->fragment; + s = largestFreeBlock; + + // loop until we have all data stored to a fragment + do + { + // copy the whole payload to our fragment + memcpy (next->payload, decodedWireChunk->payload, s); + next->size = s; + tmpSize -= s; + decodedWireChunk->payload += s; + + // ESP_LOGI (TAG,"%p %d", next->payload, + // next->size); + + if (tmpSize > 0) + { + next->nextFragment + = (pcm_chunk_fragment_t *)heap_caps_calloc ( + 1, sizeof (pcm_chunk_fragment_t), + MALLOC_CAP_8BIT); + if (next->nextFragment == NULL) + { + ESP_LOGE ( + TAG, + "Failed to allocate IRAM memory for next pcm " + "chunk fragment %d %d", + heap_caps_get_free_size (MALLOC_CAP_8BIT), + heap_caps_get_largest_free_block ( + MALLOC_CAP_8BIT)); + + // free_pcm_chunk + //(pcmChunk); + + ret = -3; + + break; + } + else + { + largestFreeBlock = heap_caps_get_largest_free_block ( + MALLOC_CAP_8BIT); + if (largestFreeBlock <= tmpSize) + { + s = largestFreeBlock; + } + else + { + s = tmpSize; + } + + next->nextFragment->payload + = (char *)heap_caps_malloc (s, MALLOC_CAP_8BIT); + if (next->nextFragment->payload == NULL) + { + ESP_LOGE ( + TAG, + "Failed to allocate IRAM memory for pcm " + "chunk next fragmented payload"); + + // free_pcm_chunk + //(pcmChunk); + + ret = -3; + + break; + } + else + { + next = next->nextFragment; + } + } + } + } + while (tmpSize); + } + } + } + + /* + if (ret < 0) { +// freeMem = heap_caps_get_free_size (MALLOC_CAP_8BIT); +// largestFreeBlock = heap_caps_get_largest_free_block +(MALLOC_CAP_8BIT); + // ESP_LOGW( + // TAG, + // "32b f %d b %d", freeMem, + // largestFreeBlock); + + // just to be sure, normally insert_pcm_chunk_DRAM() would have been +called previously and this shouldn't be possible now +// if (largestFreeBlock >= decodedWireChunk->size) +// { +// ret = insert_pcm_chunk_DRAM(decodedWireChunk, +pcmChunk); +// } +// else + { +// pcm_chunk_fragment_t *next = NULL; +// size_t s; + + ret = 0; + +// tmpSize = decodedWireChunk->size; + // heap_caps_aligned_alloc(sizeof(uint32_t), +decodedWireChunk->size, + // MALLOC_CAP_32BIT); + pcmChunk->fragment->payload + = (char *)heap_caps_malloc (largestFreeBlock, +MALLOC_CAP_8BIT); if (pcmChunk->fragment->payload == NULL) + { + ESP_LOGE (TAG, "Failed to allocate DRAM memory for +pcm chunk " "fragmented payload"); + + free_pcm_chunk (pcmChunk); + + ret = -2; + } + else + { + next = pcmChunk->fragment; + s = largestFreeBlock; + + // loop until we have all data stored to a fragment + do + { + // copy the whole payload to our fragment + memcpy (next->payload, +decodedWireChunk->payload, s); next->size = s; tmpSize -= s; + decodedWireChunk->payload += s; + +// ESP_LOGI (TAG,"%p %d", next->payload, next->size); + + if (tmpSize > 0) + { + next->nextFragment = +(pcm_chunk_fragment_t *)heap_caps_calloc ( 1, sizeof (pcm_chunk_fragment_t), +MALLOC_CAP_8BIT); if (next->nextFragment == NULL) + { + ESP_LOGE (TAG, + "Failed +to allocate DRAM memory for next pcm " "chunk fragment %d %d", + heap_caps_get_free_size +(MALLOC_CAP_8BIT), heap_caps_get_largest_free_block ( MALLOC_CAP_8BIT)); + + free_pcm_chunk (pcmChunk); + + ret = -3; + + break; + } + else + { + largestFreeBlock = +heap_caps_get_largest_free_block (MALLOC_CAP_8BIT); if (largestFreeBlock <= +tmpSize) + { + s = largestFreeBlock; + } + else + { + s = tmpSize; + } + + next->nextFragment->payload + = (char +*)heap_caps_malloc (s, MALLOC_CAP_8BIT); if (next->nextFragment->payload == +NULL) + { + ESP_LOGE (TAG, + "Failed to allocate DRAM memory for pcm " + "chunk next fragmented payload"); + + free_pcm_chunk +(pcmChunk); + + ret = -3; + + break; + } + else + { + next = +next->nextFragment; + } + } + } + } + while (tmpSize); + } + } + } + */ + + return ret; +} + /** * */ int8_t -insert_pcm_chunk (wire_chunk_message_t *decodedWireChunk) +allocate_pcm_chunk_memory_IRAM (pcm_chunk_message_t *pcmChunk, size_t bytes) +{ + size_t largestFreeBlock, freeMem; + int ret = -3; + + // we got valid memory for pcm_chunk_message_t + // first we try to allocated 32 bit aligned memory for payload + // check available memory first so we can decide if we need to fragment the + // data + freeMem = heap_caps_get_free_size (MALLOC_CAP_32BIT | MALLOC_CAP_EXEC); + largestFreeBlock + = heap_caps_get_largest_free_block (MALLOC_CAP_32BIT | MALLOC_CAP_EXEC); + if ((freeMem >= bytes) && (largestFreeBlock >= bytes)) + { + // ESP_LOGI( + // TAG, + // "32b f %d b %d", freeMem, + // largestFreeBlock); + + pcmChunk->fragment->payload = (char *)heap_caps_malloc ( + bytes, MALLOC_CAP_32BIT | MALLOC_CAP_EXEC); + if (pcmChunk->fragment->payload == NULL) + { + ESP_LOGE (TAG, + "Failed to allocate IRAM memory for pcm chunk payload"); + + // free_pcm_chunk (pcmChunk); + + ret = -2; + } + else + { + pcmChunk->fragment->nextFragment = NULL; + pcmChunk->fragment->size = bytes; + + ret = 0; + } + } + else + { + // ESP_LOGE (TAG, "couldn't get memory to insert + // chunk of size %d, IRAM freemem: %d blocksize %d", + // decodedWireChunk->size, + // freeMem, largestFreeBlock); + } + + return ret; +} + +/** + * + */ +int8_t +allocate_pcm_chunk_memory_DRAM (pcm_chunk_message_t *pcmChunk, size_t bytes) +{ + size_t largestFreeBlock, freeMem; + int ret = -3; + + // we got valid memory for pcm_chunk_message_t + // first we try to allocated 32 bit aligned memory for payload + // check available memory first so we can decide if we need to fragment the + // data + freeMem = heap_caps_get_free_size (MALLOC_CAP_8BIT); + largestFreeBlock = heap_caps_get_largest_free_block (MALLOC_CAP_8BIT); + if ((freeMem >= bytes) && (largestFreeBlock >= bytes)) + { + // ESP_LOGI( + // TAG, + // "32b f %d b %d", freeMem, + // largestFreeBlock); + + pcmChunk->fragment->payload + = (char *)heap_caps_malloc (bytes, MALLOC_CAP_8BIT); + if (pcmChunk->fragment->payload == NULL) + { + ESP_LOGE (TAG, + "Failed to allocate IRAM memory for pcm chunk payload"); + + // free_pcm_chunk (pcmChunk); + + ret = -2; + } + else + { + pcmChunk->fragment->nextFragment = NULL; + pcmChunk->fragment->size = bytes; + + ret = 0; + } + } + else + { + // ESP_LOGE (TAG, "couldn't get memory to insert + // chunk of size %d, IRAM freemem: %d blocksize %d", + // decodedWireChunk->size, + // freeMem, largestFreeBlock); + } + + return ret; +} + +int8_t +allocate_pcm_chunk_memory (pcm_chunk_message_t **pcmChunk, size_t bytes) +{ + size_t largestFreeBlock, freeMem; + int ret = -3; + + *pcmChunk = (pcm_chunk_message_t *)calloc (1, sizeof (pcm_chunk_message_t)); + if (*pcmChunk == NULL) + { + ESP_LOGE (TAG, "Failed to allocate memory for pcm chunk message"); + + return -2; + } + + (*pcmChunk)->fragment + = (pcm_chunk_fragment_t *)calloc (1, sizeof (pcm_chunk_fragment_t)); + if ((*pcmChunk)->fragment == NULL) + { + ESP_LOGE (TAG, "Failed to allocate memory for pcm chunk fragment"); + + free_pcm_chunk (*pcmChunk); + + return -2; + } + +#if CONFIG_USE_PSRAM + (*pcmChunk)->fragment->payload + = (char *)heap_caps_malloc (bytes, MALLOC_CAP_8BIT | MALLOC_CAP_SPIRAM); + if ((*pcmChunk)->fragment->payload == NULL) + { + // ESP_LOGE (TAG, + // "Failed to allocate memory for pcm chunk + // fragment payload"); + + // free_pcm_chunk (pcmChunk); + + // freeMem = heap_caps_get_free_size (MALLOC_CAP_8BIT | + // MALLOC_CAP_SPIRAM); + + ret = -2; + } + else + { + (*pcmChunk)->fragment->nextFragment = NULL; + (*pcmChunk)->fragment->size = bytes; + + ret = 0; + } +#else + ret = allocate_pcm_chunk_memory_IRAM (*pcmChunk, bytes); + if (ret < 0) + { + ret = allocate_pcm_chunk_memory_DRAM (*pcmChunk, bytes); + } +#endif + + if (ret < 0) + { + ESP_LOGE (TAG, "couldn't get memory to insert chunk"); + + ESP_LOGI (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)); + + free_pcm_chunk (*pcmChunk); + } + else + { + // ESP_LOGI (TAG, "got memory for pcm chunk %p %p %d", *pcmChunk, + // (*pcmChunk)->fragment->payload, bytes); + } + + return ret; +} + +int8_t +insert_pcm_chunk (wire_chunk_message_t *pcmChunk) +{ + if (pcmChunk == NULL) + { + ESP_LOGE (TAG, "Parameter Error"); + + return -1; + } + + if (pcmChkQHdl == NULL) + { + ESP_LOGW (TAG, "pcm chunk queue not created"); + + return -2; + } + + if (xQueueSendToBack (pcmChkQHdl, &pcmChunk, pdMS_TO_TICKS (1000)) != pdTRUE) + { + ESP_LOGW (TAG, "send: pcmChunkQueue full, messages waiting %d", + uxQueueMessagesWaiting (pcmChkQHdl)); + + free_pcm_chunk (pcmChunk); + } + + return 0; +} + +/** + * + */ +int8_t +insert_pcm_chunk_backup (wire_chunk_message_t *decodedWireChunk) { pcm_chunk_message_t *pcmChunk; size_t tmpSize; size_t largestFreeBlock, freeMem; int ret = -3; - // heap_caps_get_free_size(MALLOC_CAP_8BIT); + // heap_caps_get_free_size(MALLOC_CAP_8BIT); // heap_caps_get_largest_free_block(MALLOC_CAP_8BIT); // heap_caps_get_free_size(MALLOC_CAP_32BIT); // heap_caps_get_largest_free_block(MALLOC_CAP_32BIT); @@ -826,6 +1634,10 @@ insert_pcm_chunk (wire_chunk_message_t *decodedWireChunk) pcmChunk->timestamp = decodedWireChunk->timestamp; #if CONFIG_USE_PSRAM + freeMem = heap_caps_get_free_size (MALLOC_CAP_8BIT | MALLOC_CAP_SPIRAM); + largestFreeBlock + = heap_caps_get_largest_free_block (MALLOC_CAP_8BIT | MALLOC_CAP_SPIRAM); + pcmChunk->fragment->payload = (char *)heap_caps_malloc ( decodedWireChunk->size, MALLOC_CAP_8BIT | MALLOC_CAP_SPIRAM); if (pcmChunk->fragment->payload == NULL) @@ -854,18 +1666,20 @@ insert_pcm_chunk (wire_chunk_message_t *decodedWireChunk) // first we try to allocated 32 bit aligned memory for payload // check available memory first so we can decide if we need to fragment the // data - freeMem = heap_caps_get_free_size (MALLOC_CAP_32BIT); - if (freeMem >= decodedWireChunk->size) + freeMem = heap_caps_get_free_size (MALLOC_CAP_32BIT | MALLOC_CAP_EXEC); + largestFreeBlock + = heap_caps_get_largest_free_block (MALLOC_CAP_32BIT | MALLOC_CAP_EXEC); + // if (freeMem >= decodedWireChunk->size) + if ((freeMem >= decodedWireChunk->size) + && (largestFreeBlock >= decodedWireChunk->size)) { - largestFreeBlock = heap_caps_get_largest_free_block (MALLOC_CAP_32BIT); - // ESP_LOGI( - // TAG, - // "32b f %d b %d", freeMem, - // largestFreeBlock); + // largestFreeBlock = heap_caps_get_largest_free_block + // (MALLOC_CAP_32BIT | MALLOC_CAP_EXEC); ESP_LOGW( + // TAG, "32b f %d b %d", freeMem, largestFreeBlock); if (largestFreeBlock >= decodedWireChunk->size) { pcmChunk->fragment->payload = (char *)heap_caps_malloc ( - decodedWireChunk->size, MALLOC_CAP_32BIT); + decodedWireChunk->size, MALLOC_CAP_32BIT | MALLOC_CAP_EXEC); if (pcmChunk->fragment->payload == NULL) { ESP_LOGE ( @@ -892,11 +1706,13 @@ insert_pcm_chunk (wire_chunk_message_t *decodedWireChunk) pcm_chunk_fragment_t *next = NULL; size_t s; + ret = 0; + tmpSize = decodedWireChunk->size; // heap_caps_aligned_alloc(sizeof(uint32_t), decodedWireChunk->size, // MALLOC_CAP_32BIT); - pcmChunk->fragment->payload - = (char *)heap_caps_malloc (largestFreeBlock, MALLOC_CAP_32BIT); + pcmChunk->fragment->payload = (char *)heap_caps_malloc ( + largestFreeBlock, MALLOC_CAP_32BIT | MALLOC_CAP_EXEC); if (pcmChunk->fragment->payload == NULL) { ESP_LOGE (TAG, "Failed to allocate memory for pcm chunk " @@ -911,6 +1727,8 @@ insert_pcm_chunk (wire_chunk_message_t *decodedWireChunk) next = pcmChunk->fragment; s = largestFreeBlock; + ret = 0; + // loop until we have all data stored to a fragment do { @@ -920,6 +1738,9 @@ insert_pcm_chunk (wire_chunk_message_t *decodedWireChunk) tmpSize -= s; decodedWireChunk->payload += s; + // ESP_LOGI (TAG,"%p %d", next->payload, + // next->size); + if (tmpSize > 0) { next->nextFragment = (pcm_chunk_fragment_t *)calloc ( @@ -929,9 +1750,10 @@ insert_pcm_chunk (wire_chunk_message_t *decodedWireChunk) ESP_LOGE (TAG, "Failed to allocate memory for next pcm " "chunk fragment %d %d", - heap_caps_get_free_size (MALLOC_CAP_8BIT), + heap_caps_get_free_size ( + MALLOC_CAP_32BIT | MALLOC_CAP_EXEC), heap_caps_get_largest_free_block ( - MALLOC_CAP_8BIT)); + MALLOC_CAP_32BIT | MALLOC_CAP_EXEC)); free_pcm_chunk (pcmChunk); @@ -942,7 +1764,7 @@ insert_pcm_chunk (wire_chunk_message_t *decodedWireChunk) else { largestFreeBlock = heap_caps_get_largest_free_block ( - MALLOC_CAP_32BIT); + MALLOC_CAP_32BIT | MALLOC_CAP_EXEC); if (largestFreeBlock <= tmpSize) { s = largestFreeBlock; @@ -953,7 +1775,8 @@ insert_pcm_chunk (wire_chunk_message_t *decodedWireChunk) } next->nextFragment->payload - = (char *)heap_caps_malloc (s, MALLOC_CAP_32BIT); + = (char *)heap_caps_malloc ( + s, MALLOC_CAP_32BIT | MALLOC_CAP_EXEC); if (next->nextFragment->payload == NULL) { ESP_LOGE (TAG, @@ -977,7 +1800,7 @@ insert_pcm_chunk (wire_chunk_message_t *decodedWireChunk) } } - ret = 0; + // ret = 0; } else { @@ -986,14 +1809,17 @@ insert_pcm_chunk (wire_chunk_message_t *decodedWireChunk) // memory for payload check available memory first so we can decide if we // need to fragment the data freeMem = heap_caps_get_free_size (MALLOC_CAP_8BIT); - if (freeMem >= decodedWireChunk->size) + largestFreeBlock = heap_caps_get_largest_free_block (MALLOC_CAP_8BIT); + // if (freeMem >= decodedWireChunk->size) + if ((freeMem >= decodedWireChunk->size) + && (largestFreeBlock >= decodedWireChunk->size)) { - largestFreeBlock - = heap_caps_get_largest_free_block (MALLOC_CAP_8BIT); - // ESP_LOGI( + // largestFreeBlock + // = heap_caps_get_largest_free_block (MALLOC_CAP_8BIT); + // ESP_LOGW( // TAG, // "8b f %d b %d", freeMem, - // largestFreeBlock); + // largestFreeBlock); if (largestFreeBlock >= decodedWireChunk->size) { pcmChunk->fragment->payload = (char *)heap_caps_malloc ( @@ -1023,6 +1849,8 @@ insert_pcm_chunk (wire_chunk_message_t *decodedWireChunk) pcm_chunk_fragment_t *next = NULL; size_t s; + ret = 0; + tmpSize = decodedWireChunk->size; // heap_caps_aligned_alloc(sizeof(uint32_t), // decodedWireChunk->size, MALLOC_CAP_32BIT); @@ -1042,6 +1870,8 @@ insert_pcm_chunk (wire_chunk_message_t *decodedWireChunk) next = pcmChunk->fragment; s = largestFreeBlock; + ret = 0; + // loop until we have all data stored to a fragment do { @@ -1111,7 +1941,7 @@ insert_pcm_chunk (wire_chunk_message_t *decodedWireChunk) } } - ret = 0; + // ret = 0; } } #endif @@ -1129,8 +1959,10 @@ insert_pcm_chunk (wire_chunk_message_t *decodedWireChunk) } else { - ESP_LOGE (TAG, "couldn't get memory to insert fragmented chunk, %d", - freeMem); + ESP_LOGE (TAG, + "couldn't get memory to insert fragmented chunk of size %d, " + "freemem: %d blocksize %d", + decodedWireChunk->size, freeMem, largestFreeBlock); } return ret; @@ -1162,7 +1994,7 @@ player_task (void *pvParameters) size_t written; bool gotSnapserverConfig = false; int64_t clientDacLatency_us = 0; - uint64_t start, end; + uint8_t sendResyncMSg = 0; ESP_LOGI (TAG, "started sync task"); @@ -1185,6 +2017,13 @@ player_task (void *pvParameters) while (1) { + // ESP_LOGW( + // TAG, + // "32b f %d b %d", heap_caps_get_free_size + //(MALLOC_CAP_8BIT), heap_caps_get_largest_free_block (MALLOC_CAP_8BIT)); + // ESP_LOGW (TAG, "stack free: %d", + // uxTaskGetStackHighWaterMark(NULL)); + // check if we got changed setting available, if so we need to // reinitialize ret = xQueueReceive (snapcastSettingQueueHandle, &scSetChgd, 0); @@ -1252,8 +2091,6 @@ player_task (void *pvParameters) continue; } - start = esp_timer_get_time (); - if (chnk == NULL) { if (pcmChkQHdl != NULL) @@ -1294,7 +2131,7 @@ player_task (void *pvParameters) } else { - // ESP_LOGW(TAG, "couldn't get server now"); + // ESP_LOGW(TAG, "couldn't get server now"); if (chnk != NULL) { @@ -1327,7 +2164,7 @@ player_task (void *pvParameters) } } - // ESP_LOGW(TAG, "diff buffer not full"); + // ESP_LOGW(TAG, "diff buffer not full"); vTaskDelay (pdMS_TO_TICKS (10)); @@ -1454,6 +2291,7 @@ player_task (void *pvParameters) } initialSync = 1; + sendResyncMSg = 1; ESP_LOGI (TAG, "initial sync %lldus", age); @@ -1470,11 +2308,22 @@ player_task (void *pvParameters) int64_t t; get_diff_to_server (&t); - end = esp_timer_get_time (); - ESP_LOGW ( - TAG, - "RESYNCING HARD 1 %lldus, %lldus, %lldus, exTime: %lldus", - age, avg, t, end - start); + + wifi_ap_record_t ap; + esp_wifi_sta_get_ap_info (&ap); + + if (sendResyncMSg == 1) + { + sendResyncMSg = 0; + + ESP_LOGW ( + TAG, + "RESYNCING HARD 1: age %lldus, latency %lldus, free %d, " + "largest block %d, %d, rssi: %d", + age, t, heap_caps_get_free_size (MALLOC_CAP_32BIT), + heap_caps_get_largest_free_block (MALLOC_CAP_32BIT), + uxQueueMessagesWaiting (pcmChkQHdl), ap.rssi); + } dir = 0; @@ -1489,8 +2338,8 @@ player_task (void *pvParameters) * 1; // this value is highly coupled with I2S DMA buffer // size. DMA buffer has a size of 1 chunk (e.g. 20ms) // so next chunk we get from queue will be -20ms - const int64_t maxOffset = 50; //µs, softsync 1 - const int64_t hardResyncThreshold = 3000; //µs, hard sync + const int64_t maxOffset = 25; //µs, softsync 1 + const int64_t hardResyncThreshold = 10000; //µs, hard sync if (initialSync == 1) { @@ -1503,8 +2352,17 @@ player_task (void *pvParameters) else { // resync hard if we are off too far - if ((avg < -hardResyncThreshold) - || (avg > hardResyncThreshold) || (initialSync == 0)) + // if ((avg < -hardResyncThreshold) + // || (avg > hardResyncThreshold) || + // (initialSync == 0)) + if ((initialSync == 0) + || (uxQueueMessagesWaiting (pcmChkQHdl) + == 0)) // only resync if we are getting late. + // hopefully being early will get ok through + // apll speed control + // if ((avg > hardResyncThreshold) || (initialSync == 0)) + // // only resync if we are getting late. hopefully being + // early will get ok through apll speed control { if (chnk != NULL) { @@ -1514,11 +2372,17 @@ player_task (void *pvParameters) int64_t t; get_diff_to_server (&t); - end = esp_timer_get_time (); - ESP_LOGW (TAG, - "RESYNCING HARD 2 %lldus, %lldus, %lldus, " - "exTime: %lldus", - age, avg, t, end - start); + + wifi_ap_record_t ap; + esp_wifi_sta_get_ap_info (&ap); + + ESP_LOGW ( + TAG, + "RESYNCING HARD 2: age %lldus, latency %lldus, free " + "%d, largest block %d, %d, rssi: %d", + avg, t, heap_caps_get_free_size (MALLOC_CAP_32BIT), + heap_caps_get_largest_free_block (MALLOC_CAP_32BIT), + uxQueueMessagesWaiting (pcmChkQHdl), ap.rssi); initialSync = 0; @@ -1547,20 +2411,34 @@ player_task (void *pvParameters) int64_t t; get_diff_to_server (&t); - if ((avg < 30 * -maxOffset) || (avg > 30 * maxOffset)) - { - end = esp_timer_get_time (); + // struct timeval now; + // // get current time + // if (gettimeofday (&now, NULL)) + // { + // ESP_LOGE (TAG, "Failed to get time of day"); + // } + // + // // for getting rssi value + // wifi_ap_record_t ap; + // esp_wifi_sta_get_ap_info(&ap); + //// + // ESP_LOGI (TAG, "%ld.%ld, rssi: %d, %d, + // %lldus, %lldus %lldus, %d, %d, %d, %d, %d", + // now.tv_sec, now.tv_usec, ap.rssi, + // dir, age, avg, t, + // 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)); - ESP_LOGW (TAG, "%d: %lldus, %lldus %lldus, exTime: %lldus", - dir, age, avg, t, end - start); - } - else - { - end = esp_timer_get_time (); + // ESP_LOGI (TAG, "%d, %lldus, %lldus %lldus", dir, age, avg, t); - ESP_LOGI (TAG, "%d: %lldus, %lldus %lldus, exTime: %lldus", - dir, age, avg, t, end - start); - } + // ESP_LOGI (TAG, "%d %lldus, %d", dir, avg, + // uxQueueMessagesWaiting (pcmChkQHdl)); fragment = chnk->fragment; p_payload = fragment->payload; @@ -1573,7 +2451,8 @@ player_task (void *pvParameters) &written, portMAX_DELAY) != ESP_OK) { - ESP_LOGE (TAG, "i2s_playback_task: I2S write error"); + ESP_LOGE (TAG, "i2s_playback_task: I2S write error %d", + size); } if (written < size) { diff --git a/components/lightsnapcast/snapcast.c b/components/lightsnapcast/snapcast.c index fb5fb91..2941070 100644 --- a/components/lightsnapcast/snapcast.c +++ b/components/lightsnapcast/snapcast.c @@ -19,47 +19,49 @@ /* Logging tag */ static const char *TAG = "libSNAPCAST"; -const int BASE_MESSAGE_SIZE = 26; -const int TIME_MESSAGE_SIZE = 8; - -int base_message_serialize(base_message_t *msg, char *data, uint32_t size) { +int +base_message_serialize (base_message_t *msg, char *data, uint32_t size) +{ write_buffer_t buffer; int result = 0; - buffer_write_init(&buffer, data, size); + buffer_write_init (&buffer, data, size); - result |= buffer_write_uint16(&buffer, msg->type); - result |= buffer_write_uint16(&buffer, msg->id); - result |= buffer_write_uint16(&buffer, msg->refersTo); - result |= buffer_write_int32(&buffer, msg->sent.sec); - result |= buffer_write_int32(&buffer, msg->sent.usec); - result |= buffer_write_int32(&buffer, msg->received.sec); - result |= buffer_write_int32(&buffer, msg->received.usec); - result |= buffer_write_uint32(&buffer, msg->size); + result |= buffer_write_uint16 (&buffer, msg->type); + result |= buffer_write_uint16 (&buffer, msg->id); + result |= buffer_write_uint16 (&buffer, msg->refersTo); + result |= buffer_write_int32 (&buffer, msg->sent.sec); + result |= buffer_write_int32 (&buffer, msg->sent.usec); + result |= buffer_write_int32 (&buffer, msg->received.sec); + result |= buffer_write_int32 (&buffer, msg->received.usec); + result |= buffer_write_uint32 (&buffer, msg->size); return result; } -int base_message_deserialize(base_message_t *msg, const char *data, - uint32_t size) { +int +base_message_deserialize (base_message_t *msg, const char *data, uint32_t size) +{ read_buffer_t buffer; int result = 0; - buffer_read_init(&buffer, data, size); + buffer_read_init (&buffer, data, size); - result |= buffer_read_uint16(&buffer, &(msg->type)); - result |= buffer_read_uint16(&buffer, &(msg->id)); - result |= buffer_read_uint16(&buffer, &(msg->refersTo)); - result |= buffer_read_int32(&buffer, &(msg->sent.sec)); - result |= buffer_read_int32(&buffer, &(msg->sent.usec)); - result |= buffer_read_int32(&buffer, &(msg->received.sec)); - result |= buffer_read_int32(&buffer, &(msg->received.usec)); - result |= buffer_read_uint32(&buffer, &(msg->size)); + result |= buffer_read_uint16 (&buffer, &(msg->type)); + result |= buffer_read_uint16 (&buffer, &(msg->id)); + result |= buffer_read_uint16 (&buffer, &(msg->refersTo)); + result |= buffer_read_int32 (&buffer, &(msg->sent.sec)); + result |= buffer_read_int32 (&buffer, &(msg->sent.usec)); + result |= buffer_read_int32 (&buffer, &(msg->received.sec)); + result |= buffer_read_int32 (&buffer, &(msg->received.usec)); + result |= buffer_read_uint32 (&buffer, &(msg->size)); return result; } -static cJSON *hello_message_to_json(hello_message_t *msg) { +static cJSON * +hello_message_to_json (hello_message_t *msg) +{ cJSON *mac; cJSON *hostname; cJSON *version; @@ -71,257 +73,304 @@ static cJSON *hello_message_to_json(hello_message_t *msg) { cJSON *protocol_version; cJSON *json = NULL; - json = cJSON_CreateObject(); - if (!json) { - goto error; - } + json = cJSON_CreateObject (); + if (!json) + { + goto error; + } - mac = cJSON_CreateString(msg->mac); - if (!mac) { - goto error; - } - cJSON_AddItemToObject(json, "MAC", mac); + mac = cJSON_CreateString (msg->mac); + if (!mac) + { + goto error; + } + cJSON_AddItemToObject (json, "MAC", mac); - hostname = cJSON_CreateString(msg->hostname); - if (!hostname) { - goto error; - } - cJSON_AddItemToObject(json, "HostName", hostname); + hostname = cJSON_CreateString (msg->hostname); + if (!hostname) + { + goto error; + } + cJSON_AddItemToObject (json, "HostName", hostname); - version = cJSON_CreateString(msg->version); - if (!version) { - goto error; - } - cJSON_AddItemToObject(json, "Version", version); + version = cJSON_CreateString (msg->version); + if (!version) + { + goto error; + } + cJSON_AddItemToObject (json, "Version", version); - client_name = cJSON_CreateString(msg->client_name); - if (!client_name) { - goto error; - } - cJSON_AddItemToObject(json, "ClientName", client_name); + client_name = cJSON_CreateString (msg->client_name); + if (!client_name) + { + goto error; + } + cJSON_AddItemToObject (json, "ClientName", client_name); - os = cJSON_CreateString(msg->os); - if (!os) { - goto error; - } - cJSON_AddItemToObject(json, "OS", os); + os = cJSON_CreateString (msg->os); + if (!os) + { + goto error; + } + cJSON_AddItemToObject (json, "OS", os); - arch = cJSON_CreateString(msg->arch); - if (!arch) { - goto error; - } - cJSON_AddItemToObject(json, "Arch", arch); + arch = cJSON_CreateString (msg->arch); + if (!arch) + { + goto error; + } + cJSON_AddItemToObject (json, "Arch", arch); - instance = cJSON_CreateNumber(msg->instance); - if (!instance) { - goto error; - } - cJSON_AddItemToObject(json, "Instance", instance); + instance = cJSON_CreateNumber (msg->instance); + if (!instance) + { + goto error; + } + cJSON_AddItemToObject (json, "Instance", instance); - id = cJSON_CreateString(msg->id); - if (!id) { - goto error; - } - cJSON_AddItemToObject(json, "ID", id); + id = cJSON_CreateString (msg->id); + if (!id) + { + goto error; + } + cJSON_AddItemToObject (json, "ID", id); - protocol_version = cJSON_CreateNumber(msg->protocol_version); - if (!protocol_version) { - goto error; - } - cJSON_AddItemToObject(json, "SnapStreamProtocolVersion", protocol_version); + protocol_version = cJSON_CreateNumber (msg->protocol_version); + if (!protocol_version) + { + goto error; + } + cJSON_AddItemToObject (json, "SnapStreamProtocolVersion", protocol_version); goto end; error: - cJSON_Delete(json); + cJSON_Delete (json); end: return json; } -char *hello_message_serialize(hello_message_t *msg, size_t *size) { +char * +hello_message_serialize (hello_message_t *msg, size_t *size) +{ int str_length, prefixed_length; cJSON *json; char *str = NULL; char *prefixed_str = NULL; - json = hello_message_to_json(msg); - if (!json) { - return NULL; - } + json = hello_message_to_json (msg); + if (!json) + { + return NULL; + } - str = cJSON_PrintUnformatted(json); - if (!str) { - return NULL; - } - cJSON_Delete(json); + str = cJSON_PrintUnformatted (json); + if (!str) + { + return NULL; + } + cJSON_Delete (json); - str_length = strlen(str); + str_length = strlen (str); prefixed_length = str_length + 4; - prefixed_str = malloc(prefixed_length); - if (!prefixed_str) { - return NULL; - } + prefixed_str = malloc (prefixed_length); + if (!prefixed_str) + { + return NULL; + } prefixed_str[0] = str_length & 0xff; prefixed_str[1] = (str_length >> 8) & 0xff; prefixed_str[2] = (str_length >> 16) & 0xff; prefixed_str[3] = (str_length >> 24) & 0xff; - memcpy(&(prefixed_str[4]), str, str_length); - free(str); + memcpy (&(prefixed_str[4]), str, str_length); + free (str); *size = prefixed_length; return prefixed_str; } -int server_settings_message_deserialize(server_settings_message_t *msg, - const char *json_str) { +int +server_settings_message_deserialize (server_settings_message_t *msg, + const char *json_str) +{ int status = 1; cJSON *value = NULL; - cJSON *json = cJSON_Parse(json_str); - if (!json) { - const char *error_ptr = cJSON_GetErrorPtr(); - if (error_ptr) { - ESP_LOGE(TAG, "Error before: %s", error_ptr); + cJSON *json = cJSON_Parse (json_str); + if (!json) + { + const char *error_ptr = cJSON_GetErrorPtr (); + if (error_ptr) + { + ESP_LOGE (TAG, "Error before: %s", error_ptr); + goto end; + } + } + + if (msg == NULL) + { + status = 2; goto end; } - } - if (msg == NULL) { - status = 2; - goto end; - } + value = cJSON_GetObjectItemCaseSensitive (json, "bufferMs"); + if (cJSON_IsNumber (value)) + { + msg->buffer_ms = value->valueint; + } - value = cJSON_GetObjectItemCaseSensitive(json, "bufferMs"); - if (cJSON_IsNumber(value)) { - msg->buffer_ms = value->valueint; - } + value = cJSON_GetObjectItemCaseSensitive (json, "latency"); + if (cJSON_IsNumber (value)) + { + msg->latency = value->valueint; + } - value = cJSON_GetObjectItemCaseSensitive(json, "latency"); - if (cJSON_IsNumber(value)) { - msg->latency = value->valueint; - } + value = cJSON_GetObjectItemCaseSensitive (json, "volume"); + if (cJSON_IsNumber (value)) + { + msg->volume = value->valueint; + } - value = cJSON_GetObjectItemCaseSensitive(json, "volume"); - if (cJSON_IsNumber(value)) { - msg->volume = value->valueint; - } - - value = cJSON_GetObjectItemCaseSensitive(json, "muted"); - msg->muted = cJSON_IsTrue(value); + value = cJSON_GetObjectItemCaseSensitive (json, "muted"); + msg->muted = cJSON_IsTrue (value); status = 0; end: - cJSON_Delete(json); + cJSON_Delete (json); return status; } -int codec_header_message_deserialize(codec_header_message_t *msg, - const char *data, uint32_t size) { +int +codec_header_message_deserialize (codec_header_message_t *msg, + const char *data, uint32_t size) +{ read_buffer_t buffer; uint32_t string_size; int result = 0; - buffer_read_init(&buffer, data, size); + buffer_read_init (&buffer, data, size); - result |= buffer_read_uint32(&buffer, &string_size); - if (result) { - // Can't allocate the proper size string if we didn't read the size, so fail - // early - return 1; - } + result |= buffer_read_uint32 (&buffer, &string_size); + if (result) + { + // Can't allocate the proper size string if we didn't read the size, so + // fail early + return 1; + } - msg->codec = malloc(string_size + 1); - if (!msg->codec) { - return 2; - } + msg->codec = malloc (string_size + 1); + if (!msg->codec) + { + return 2; + } - result |= buffer_read_buffer(&buffer, msg->codec, string_size); + result |= buffer_read_buffer (&buffer, msg->codec, string_size); // Make sure the codec is a proper C string by terminating it with a null // character msg->codec[string_size] = '\0'; - result |= buffer_read_uint32(&buffer, &(msg->size)); - if (result) { - // Can't allocate the proper size string if we didn't read the size, so fail - // early - return 1; - } + result |= buffer_read_uint32 (&buffer, &(msg->size)); + if (result) + { + // Can't allocate the proper size string if we didn't read the size, so + // fail early + return 1; + } - msg->payload = malloc(msg->size); - if (!msg->payload) { - return 2; - } + // msg->payload = malloc(msg->size); + // if (!msg->payload) { + // return 2; + // } - result |= buffer_read_buffer(&buffer, msg->payload, msg->size); + msg->payload = &data[buffer.index]; + + // result |= buffer_read_buffer(&buffer, msg->payload, msg->size); return result; } -int wire_chunk_message_deserialize(wire_chunk_message_t *msg, const char *data, - uint32_t size) { +int +wire_chunk_message_deserialize (wire_chunk_message_t *msg, const char *data, + uint32_t size) +{ read_buffer_t buffer; int result = 0; - buffer_read_init(&buffer, data, size); + buffer_read_init (&buffer, data, size); - result |= buffer_read_int32(&buffer, &(msg->timestamp.sec)); - result |= buffer_read_int32(&buffer, &(msg->timestamp.usec)); - result |= buffer_read_uint32(&buffer, &(msg->size)); + result |= buffer_read_int32 (&buffer, &(msg->timestamp.sec)); + result |= buffer_read_int32 (&buffer, &(msg->timestamp.usec)); + result |= buffer_read_uint32 (&buffer, &(msg->size)); - // If there's been an error already (especially for the size bit) return early - if (result) { - return result; - } + // If there's been an error already (especially for the size bit) return + // early + if (result) + { + return result; + } + + // TODO maybe should check to see if need to free memory? + //#if CONFIG_USE_PSRAM + // msg->payload = + // (char *)heap_caps_malloc(msg->size * sizeof(char), + // MALLOC_CAP_SPIRAM); + //#else + // msg->payload = heap_caps_malloc(msg->size * sizeof(char), + // MALLOC_CAP_8BIT); + //#endif + + msg->payload = &data[buffer.index]; -// TODO maybe should check to see if need to free memory? -#if CONFIG_USE_PSRAM - msg->payload = - (char *)heap_caps_malloc(msg->size * sizeof(char), MALLOC_CAP_SPIRAM); -#else - msg->payload = malloc(msg->size * sizeof(char)); -#endif // Failed to allocate the memory - if (!msg->payload) { - return 2; - } + if (!msg->payload) + { + return 2; + } - result |= buffer_read_buffer(&buffer, msg->payload, msg->size); + // result |= buffer_read_buffer(&buffer, msg->payload, msg->size); return result; } -void codec_header_message_free(codec_header_message_t *msg) { - free(msg->codec); +void +codec_header_message_free (codec_header_message_t *msg) +{ + free (msg->codec); msg->codec = NULL; - free(msg->payload); - msg->payload = NULL; + // free(msg->payload); + // msg->payload = NULL; } -void wire_chunk_message_free(wire_chunk_message_t *msg) { - if (msg->payload) { - free(msg->payload); - msg->payload = NULL; - } +void +wire_chunk_message_free (wire_chunk_message_t *msg) +{ + // if (msg->payload) { + // free(msg->payload); + // msg->payload = NULL; + // } } -int time_message_serialize(time_message_t *msg, char *data, uint32_t size) { +int +time_message_serialize (time_message_t *msg, char *data, uint32_t size) +{ write_buffer_t buffer; int result = 0; - buffer_write_init(&buffer, data, size); + buffer_write_init (&buffer, data, size); - result |= buffer_write_int32(&buffer, msg->latency.sec); - result |= buffer_write_int32(&buffer, msg->latency.usec); + result |= buffer_write_int32 (&buffer, msg->latency.sec); + result |= buffer_write_int32 (&buffer, msg->latency.usec); return result; } -int time_message_deserialize(time_message_t *msg, const char *data, - uint32_t size) { +int +time_message_deserialize (time_message_t *msg, const char *data, uint32_t size) +{ read_buffer_t buffer; int result = 0; - buffer_read_init(&buffer, data, size); + buffer_read_init (&buffer, data, size); - result |= buffer_read_int32(&buffer, &(msg->latency.sec)); - result |= buffer_read_int32(&buffer, &(msg->latency.usec)); + result |= buffer_read_int32 (&buffer, &(msg->latency.sec)); + result |= buffer_read_int32 (&buffer, &(msg->latency.usec)); return result; } diff --git a/components/ota_server/CMakeLists.txt b/components/ota_server/CMakeLists.txt index 98bb8b9..df33e34 100644 --- a/components/ota_server/CMakeLists.txt +++ b/components/ota_server/CMakeLists.txt @@ -1,3 +1,3 @@ idf_component_register(SRCS "ota_server.c" INCLUDE_DIRS "include" - REQUIRES app_update dsp_processor wifi_interface lightsnapcast) + REQUIRES app_update dsp_processor wifi_interface lightsnapcast wifi_logger) diff --git a/components/ota_server/ota_server.c b/components/ota_server/ota_server.c index 11e4bde..e31458a 100644 --- a/components/ota_server/ota_server.c +++ b/components/ota_server/ota_server.c @@ -22,6 +22,8 @@ #include "ota_server.h" +#include "wifi_logger.h" + extern xTaskHandle t_http_get_task; const int OTA_CONNECTED_BIT = BIT0; @@ -30,11 +32,17 @@ EventGroupHandle_t ota_event_group; /*socket*/ static int connect_socket = 0; -void ota_server_task(void *param) { +void +ota_server_task (void *param) +{ // xEventGroupWaitBits(ota_event_group, OTA_CONNECTED_BIT, false, true, // portMAX_DELAY); - ota_server_start_my(); - vTaskDelete(NULL); + + // TODO: find a god place to verify app is working properly after OTA + esp_ota_mark_app_valid_cancel_rollback (); + + ota_server_start_my (); + vTaskDelete (NULL); } /* @@ -81,175 +89,208 @@ void initialise_wifi(void) } */ -static int get_socket_error_code(int socket) { +static int +get_socket_error_code (int socket) +{ int result; - u32_t optlen = sizeof(int); + u32_t optlen = sizeof (int); - int err = getsockopt(socket, SOL_SOCKET, SO_ERROR, &result, &optlen); + int err = getsockopt (socket, SOL_SOCKET, SO_ERROR, &result, &optlen); - if (err == -1) { - ESP_LOGE(TAG, "getsockopt failed:%s", strerror(err)); - return -1; - } + if (err == -1) + { + ESP_LOGE (TAG, "getsockopt failed:%s", strerror (err)); + return -1; + } return result; } -static int show_socket_error_reason(const char *str, int socket) { - int err = get_socket_error_code(socket); +static int +show_socket_error_reason (const char *str, int socket) +{ + int err = get_socket_error_code (socket); - if (err != 0) { - ESP_LOGW(TAG, "%s socket error %d %s", str, err, strerror(err)); - } + if (err != 0) + { + ESP_LOGW (TAG, "%s socket error %d %s", str, err, strerror (err)); + } return err; } -static esp_err_t create_tcp_server() { - ESP_LOGI(TAG, - "idf.py build ; curl snapclient.local:%d --data-binary @- < " - "build/snapclient.bin", - OTA_LISTEN_PORT); +static esp_err_t +create_tcp_server () +{ + ESP_LOGI (TAG, + "idf.py build ; curl snapclient.local:%d --data-binary @- < " + "build/snapclient.bin", + OTA_LISTEN_PORT); int server_socket = 0; struct sockaddr_in server_addr; - server_socket = socket(AF_INET, SOCK_STREAM, 0); + server_socket = socket (AF_INET, SOCK_STREAM, 0); - if (server_socket < 0) { - show_socket_error_reason("create_server", server_socket); - return ESP_FAIL; - } + if (server_socket < 0) + { + show_socket_error_reason ("create_server", server_socket); + return ESP_FAIL; + } server_addr.sin_family = AF_INET; - server_addr.sin_port = htons(OTA_LISTEN_PORT); - server_addr.sin_addr.s_addr = htonl(INADDR_ANY); - if (bind(server_socket, (struct sockaddr *)&server_addr, - sizeof(server_addr)) < 0) { - show_socket_error_reason("bind_server", server_socket); - close(server_socket); - return ESP_FAIL; - } + server_addr.sin_port = htons (OTA_LISTEN_PORT); + server_addr.sin_addr.s_addr = htonl (INADDR_ANY); + if (bind (server_socket, (struct sockaddr *)&server_addr, + sizeof (server_addr)) + < 0) + { + show_socket_error_reason ("bind_server", server_socket); + close (server_socket); + return ESP_FAIL; + } - if (listen(server_socket, 5) < 0) { - show_socket_error_reason("listen_server", server_socket); - close(server_socket); - return ESP_FAIL; - } + if (listen (server_socket, 5) < 0) + { + show_socket_error_reason ("listen_server", server_socket); + close (server_socket); + return ESP_FAIL; + } struct sockaddr_in client_addr; - unsigned int socklen = sizeof(client_addr); - connect_socket = - accept(server_socket, (struct sockaddr *)&client_addr, &socklen); + unsigned int socklen = sizeof (client_addr); + connect_socket + = accept (server_socket, (struct sockaddr *)&client_addr, &socklen); - if (connect_socket < 0) { - show_socket_error_reason("accept_server", connect_socket); - close(server_socket); - return ESP_FAIL; - } + if (connect_socket < 0) + { + show_socket_error_reason ("accept_server", connect_socket); + close (server_socket); + return ESP_FAIL; + } /*connection established,now can send/recv*/ - ESP_LOGI(TAG, "tcp connection established!"); + ESP_LOGI (TAG, "tcp connection established!"); return ESP_OK; } -void ota_server_start_my(void) { +void +ota_server_start_my (void) +{ uint8_t percent_loaded; uint8_t old_percent_loaded; - ESP_ERROR_CHECK(create_tcp_server()); + ESP_ERROR_CHECK (create_tcp_server ()); - const esp_partition_t *update_partition = - esp_ota_get_next_update_partition(NULL); + const esp_partition_t *update_partition + = esp_ota_get_next_update_partition (NULL); - ESP_LOGI(TAG, "Writing to partition subtype %d at offset 0x%x", - update_partition->subtype, update_partition->address); + ESP_LOGI (TAG, "Writing to partition subtype %d at offset 0x%x", + update_partition->subtype, update_partition->address); // https://docs.espressif.com/projects/esp-idf/en/latest/api-reference/system/log.html // I don't want to see all the Log esp_image stuff while its flashing it - esp_log_level_set( + esp_log_level_set ( "esp_image", - ESP_LOG_ERROR); // set all components to ERROR level ESP_LOG_NONE + ESP_LOG_ERROR); // set all components to ERROR level ESP_LOG_NONE // We don't want any other thread running during this update. // SuspendAllThreads(); // KillAllThreads(); // dsp_i2s_task_deinit(); - vTaskDelete(t_http_get_task); - deinit_player(); // ensure this is called after http_task was killed + vTaskDelete (t_http_get_task); + deinit_player (); // ensure this is called after http_task was killed + stop_wifi_logger (); int recv_len; - char ota_buff[OTA_BUFF_SIZE] = {0}; + char ota_buff[OTA_BUFF_SIZE] = { 0 }; bool is_req_body_started = false; int content_length = -1; int content_received = 0; esp_ota_handle_t ota_handle; - do { - recv_len = recv(connect_socket, ota_buff, OTA_BUFF_SIZE, 0); + do + { + // ESP_LOGW (TAG, "stack free: %d", + // uxTaskGetStackHighWaterMark(NULL)); - if (recv_len > 0) { - if (!is_req_body_started) { - const char *content_length_start = "Content-Length: "; - char *content_length_start_p = strstr(ota_buff, content_length_start) + - strlen(content_length_start); - sscanf(content_length_start_p, "%d", &content_length); - ESP_LOGI(TAG, "Detected content length: %d", content_length); - ESP_ERROR_CHECK( - esp_ota_begin(update_partition, OTA_SIZE_UNKNOWN, &ota_handle)); - const char *header_end = "\r\n\r\n"; - char *body_start_p = strstr(ota_buff, header_end) + strlen(header_end); - int body_part_len = recv_len - (body_start_p - ota_buff); - esp_ota_write(ota_handle, body_start_p, body_part_len); - content_received += body_part_len; - is_req_body_started = true; - } else { - esp_ota_write(ota_handle, ota_buff, recv_len); - content_received += recv_len; + recv_len = recv (connect_socket, ota_buff, OTA_BUFF_SIZE, 0); - percent_loaded = - (((float)content_received / (float)content_length) * 100.00); - if ((percent_loaded % 10 == 0) & - (percent_loaded != old_percent_loaded)) { - old_percent_loaded = percent_loaded; - ESP_LOGI(TAG, "Uploaded %03u%%", percent_loaded); + if (recv_len > 0) + { + if (!is_req_body_started) + { + const char *content_length_start = "Content-Length: "; + char *content_length_start_p + = strstr (ota_buff, content_length_start) + + strlen (content_length_start); + sscanf (content_length_start_p, "%d", &content_length); + ESP_LOGI (TAG, "Detected content length: %d", content_length); + ESP_ERROR_CHECK (esp_ota_begin (update_partition, + OTA_SIZE_UNKNOWN, &ota_handle)); + const char *header_end = "\r\n\r\n"; + char *body_start_p + = strstr (ota_buff, header_end) + strlen (header_end); + int body_part_len = recv_len - (body_start_p - ota_buff); + esp_ota_write (ota_handle, body_start_p, body_part_len); + content_received += body_part_len; + is_req_body_started = true; + } + else + { + esp_ota_write (ota_handle, ota_buff, recv_len); + content_received += recv_len; + + percent_loaded + = (((float)content_received / (float)content_length) + * 100.00); + if ((percent_loaded % 10 == 0) + & (percent_loaded != old_percent_loaded)) + { + old_percent_loaded = percent_loaded; + ESP_LOGI (TAG, "Uploaded %03u%%", percent_loaded); + } + } + } + else if (recv_len < 0) + { + ESP_LOGI (TAG, "Error: recv data error! errno=%d", errno); } - } - } else if (recv_len < 0) { - ESP_LOGI(TAG, "Error: recv data error! errno=%d", errno); } + while (recv_len > 0 && content_received < content_length); - } while (recv_len > 0 && content_received < content_length); - - ESP_LOGI(TAG, "OTA Transferred Finished: %d bytes", content_received); + ESP_LOGI (TAG, "OTA Transferred Finished: %d bytes", content_received); char res_buff[128]; int send_len; - send_len = sprintf(res_buff, "200 OK\n\n"); - send(connect_socket, res_buff, send_len, 0); - vTaskDelay(2000 / portTICK_PERIOD_MS); - close(connect_socket); + send_len = sprintf (res_buff, "200 OK\n\n"); + send (connect_socket, res_buff, send_len, 0); + vTaskDelay (2000 / portTICK_PERIOD_MS); + close (connect_socket); - ESP_ERROR_CHECK(esp_ota_end(ota_handle)); + ESP_ERROR_CHECK (esp_ota_end (ota_handle)); - esp_err_t err = esp_ota_set_boot_partition(update_partition); + esp_err_t err = esp_ota_set_boot_partition (update_partition); - if (err == ESP_OK) { - const esp_partition_t *boot_partition = esp_ota_get_boot_partition(); + if (err == ESP_OK) + { + const esp_partition_t *boot_partition = esp_ota_get_boot_partition (); - ESP_LOGI(TAG, - "***********************************************************"); - ESP_LOGI(TAG, "OTA Successful"); - ESP_LOGI(TAG, "Next Boot Partition Subtype %d At Offset 0x%x", - boot_partition->subtype, boot_partition->address); - ESP_LOGI(TAG, - "***********************************************************"); - } else { - ESP_LOGI(TAG, "!!! OTA Failed !!!"); - } + ESP_LOGI (TAG, + "***********************************************************"); + ESP_LOGI (TAG, "OTA Successful"); + ESP_LOGI (TAG, "Next Boot Partition Subtype %d At Offset 0x%x", + boot_partition->subtype, boot_partition->address); + ESP_LOGI (TAG, + "***********************************************************"); + } + else + { + ESP_LOGI (TAG, "!!! OTA Failed !!!"); + } // for (int x = 2; x >= 1; x--) //{ - ESP_LOGI(TAG, "Prepare to restart system.."); - vTaskDelay(1000 / portTICK_PERIOD_MS); + ESP_LOGI (TAG, "Prepare to restart system.."); + vTaskDelay (1000 / portTICK_PERIOD_MS); //} - esp_restart(); + esp_restart (); } diff --git a/components/protocol/protocol.c b/components/protocol/protocol.c index 7357ec6..af870ea 100644 --- a/components/protocol/protocol.c +++ b/components/protocol/protocol.c @@ -10,7 +10,7 @@ Select audio source (Snapcast, RTPrx, Bluetooth, Signal generator) Enable DSP processing 1 Device communication I2C - 2 GPIO manipolation + 2 GPIO manipulation 3 Audio generator 4 Telemetri subsystem 5 Test function diff --git a/components/protocol_examples_common/CMakeLists.txt b/components/protocol_examples_common/CMakeLists.txt new file mode 100644 index 0000000..357e064 --- /dev/null +++ b/components/protocol_examples_common/CMakeLists.txt @@ -0,0 +1,4 @@ +idf_component_register(SRCS "connect.c" "stdin_out.c" "addr_from_stdin.c" + INCLUDE_DIRS "include" + PRIV_REQUIRES esp_netif wifi_interface + ) diff --git a/components/protocol_examples_common/Kconfig.projbuild b/components/protocol_examples_common/Kconfig.projbuild new file mode 100644 index 0000000..eccf778 --- /dev/null +++ b/components/protocol_examples_common/Kconfig.projbuild @@ -0,0 +1,218 @@ +menu "Example Connection Configuration" + + config EXAMPLE_CONNECT_WIFI + bool "connect using WiFi interface" + default y + help + Protocol examples can use Wi-Fi and/or Ethernet to connect to the network. + Choose this option to connect with WiFi + + if EXAMPLE_CONNECT_WIFI + config EXAMPLE_WIFI_SSID + string "WiFi SSID" + default "myssid" + help + SSID (network name) for the example to connect to. + + config EXAMPLE_WIFI_PASSWORD + string "WiFi Password" + default "mypassword" + help + WiFi password (WPA or WPA2) for the example to use. + Can be left blank if the network has no security set. + endif + + config EXAMPLE_CONNECT_ETHERNET + bool "connect using Ethernet interface" + default n + help + Protocol examples can use Wi-Fi and/or Ethernet to connect to the network. + Choose this option to connect with Ethernet + + if EXAMPLE_CONNECT_ETHERNET + choice EXAMPLE_USE_ETHERNET + prompt "Ethernet Type" + default EXAMPLE_USE_INTERNAL_ETHERNET if IDF_TARGET_ESP32 + default EXAMPLE_USE_DM9051 if !IDF_TARGET_ESP32 + help + Select which kind of Ethernet will be used in the example. + + config EXAMPLE_USE_INTERNAL_ETHERNET + depends on IDF_TARGET_ESP32 + select ETH_USE_ESP32_EMAC + bool "Internal EMAC" + help + Select internal Ethernet MAC controller. + + config EXAMPLE_USE_DM9051 + bool "DM9051 Module" + select ETH_USE_SPI_ETHERNET + select ETH_SPI_ETHERNET_DM9051 + help + Select external SPI-Ethernet module. + + config EXAMPLE_USE_OPENETH + bool "OpenCores Ethernet MAC (EXPERIMENTAL)" + select ETH_USE_OPENETH + help + When this option is enabled, the example is built with support for + OpenCores Ethernet MAC, which allows testing the example in QEMU. + Note that this option is used for internal testing purposes, and + not officially supported. Examples built with this option enabled + will not run on a real ESP32 chip. + + endchoice + + if EXAMPLE_USE_INTERNAL_ETHERNET + choice EXAMPLE_ETH_PHY_MODEL + prompt "Ethernet PHY Device" + default EXAMPLE_ETH_PHY_IP101 + help + Select the Ethernet PHY device to use in the example. + + config EXAMPLE_ETH_PHY_IP101 + bool "IP101" + help + IP101 is a single port 10/100 MII/RMII/TP/Fiber Fast Ethernet Transceiver. + Goto http://www.icplus.com.tw/pp-IP101G.html for more information about it. + + config EXAMPLE_ETH_PHY_RTL8201 + bool "RTL8201/SR8201" + help + RTL8201F/SR8201F is a single port 10/100Mb Ethernet Transceiver with auto MDIX. + Goto http://www.corechip-sz.com/productsview.asp?id=22 for more information about it. + + config EXAMPLE_ETH_PHY_LAN8720 + bool "LAN8720" + help + LAN8720A is a small footprint RMII 10/100 Ethernet Transceiver with HP Auto-MDIX Support. + Goto https://www.microchip.com/LAN8720A for more information about it. + + config EXAMPLE_ETH_PHY_DP83848 + bool "DP83848" + help + DP83848 is a single port 10/100Mb/s Ethernet Physical Layer Transceiver. + Goto http://www.ti.com/product/DP83848J for more information about it. + endchoice + + config EXAMPLE_ETH_MDC_GPIO + int "SMI MDC GPIO number" + default 23 + help + Set the GPIO number used by SMI MDC. + + config EXAMPLE_ETH_MDIO_GPIO + int "SMI MDIO GPIO number" + default 18 + help + Set the GPIO number used by SMI MDIO. + endif + + if EXAMPLE_USE_DM9051 + config EXAMPLE_DM9051_SPI_HOST + int "SPI Host Number" + range 0 2 + default 1 + help + Set the SPI host used to communicate with DM9051. + + config EXAMPLE_DM9051_SCLK_GPIO + int "SPI SCLK GPIO number" + range 0 33 + default 19 + help + Set the GPIO number used by SPI SCLK. + + config EXAMPLE_DM9051_MOSI_GPIO + int "SPI MOSI GPIO number" + range 0 33 + default 23 + help + Set the GPIO number used by SPI MOSI. + + config EXAMPLE_DM9051_MISO_GPIO + int "SPI MISO GPIO number" + range 0 33 + default 25 + help + Set the GPIO number used by SPI MISO. + + config EXAMPLE_DM9051_CS_GPIO + int "SPI CS GPIO number" + range 0 33 + default 22 + help + Set the GPIO number used by SPI CS. + + config EXAMPLE_DM9051_SPI_CLOCK_MHZ + int "SPI clock speed (MHz)" + range 20 80 + default 20 + help + Set the clock speed (MHz) of SPI interface. + + config EXAMPLE_DM9051_INT_GPIO + int "Interrupt GPIO number" + default 4 + help + Set the GPIO number used by DM9051 interrupt. + endif + + config EXAMPLE_ETH_PHY_RST_GPIO + int "PHY Reset GPIO number" + default 5 + help + Set the GPIO number used to reset PHY chip. + Set to -1 to disable PHY chip hardware reset. + + config EXAMPLE_ETH_PHY_ADDR + int "PHY Address" + range 0 31 if EXAMPLE_USE_INTERNAL_ETHERNET + range 1 1 if !EXAMPLE_USE_INTERNAL_ETHERNET + default 1 + help + Set PHY address according your board schematic. + endif + + config EXAMPLE_CONNECT_IPV6 + bool "Obtain IPv6 address" + default y + help + By default, examples will wait until IPv4 and IPv6 local link addresses are obtained. + Disable this option if the network does not support IPv6. + Choose the preferred IPv6 address type if the connection code should wait until other than + the local link address gets assigned. + + if EXAMPLE_CONNECT_IPV6 + choice EXAMPLE_CONNECT_PREFERRED_IPV6 + prompt "Preferred IPv6 Type" + default EXAMPLE_CONNECT_IPV6_PREF_LOCAL_LINK + help + Select which kind of IPv6 address the connect logic waits for. + + config EXAMPLE_CONNECT_IPV6_PREF_LOCAL_LINK + bool "Local Link Address" + help + Blocks until Local link address assigned. + + config EXAMPLE_CONNECT_IPV6_PREF_GLOBAL + bool "Global Address" + help + Blocks until Global address assigned. + + config EXAMPLE_CONNECT_IPV6_PREF_SITE_LOCAL + bool "Site Local Address" + help + Blocks until Site link address assigned. + + config EXAMPLE_CONNECT_IPV6_PREF_UNIQUE_LOCAL + bool "Unique Local Link Address" + help + Blocks until Unique local address assigned. + + endchoice + + endif + + +endmenu diff --git a/components/protocol_examples_common/addr_from_stdin.c b/components/protocol_examples_common/addr_from_stdin.c new file mode 100644 index 0000000..a01c010 --- /dev/null +++ b/components/protocol_examples_common/addr_from_stdin.c @@ -0,0 +1,75 @@ +#include "esp_log.h" +#include "esp_netif.h" +#include "esp_system.h" +#include "protocol_examples_common.h" +#include + +#include "lwip/sockets.h" +#include +#include + +#define HOST_IP_SIZE 128 + +esp_err_t +get_addr_from_stdin (int port, int sock_type, int *ip_protocol, + int *addr_family, struct sockaddr_in6 *dest_addr) +{ + char host_ip[HOST_IP_SIZE]; + int len; + static bool already_init = false; + + // this function could be called multiple times -> make sure UART init runs + // only once + if (!already_init) + { + example_configure_stdin_stdout (); + already_init = true; + } + + // ignore empty or LF only string (could receive from DUT class) + do + { + fgets (host_ip, HOST_IP_SIZE, stdin); + len = strlen (host_ip); + } + while (len <= 1 && host_ip[0] == '\n'); + host_ip[len - 1] = '\0'; + + struct addrinfo hints, *addr_list, *cur; + memset (&hints, 0, sizeof (hints)); + + // run getaddrinfo() to decide on the IP protocol + hints.ai_family = AF_UNSPEC; + hints.ai_socktype = sock_type; + hints.ai_protocol = IPPROTO_TCP; + if (getaddrinfo (host_ip, NULL, &hints, &addr_list) != 0) + { + return ESP_FAIL; + } + for (cur = addr_list; cur != NULL; cur = cur->ai_next) + { + memcpy (dest_addr, cur->ai_addr, sizeof (*dest_addr)); + if (cur->ai_family == AF_INET) + { + *ip_protocol = IPPROTO_IP; + *addr_family = AF_INET; + // add port number and return on first IPv4 match + ((struct sockaddr_in *)dest_addr)->sin_port = htons (port); + freeaddrinfo (addr_list); + return ESP_OK; + } + // else if (cur->ai_family == AF_INET6) { + // *ip_protocol = IPPROTO_IPV6; + // *addr_family = AF_INET6; + // // add port and interface number and return on first IPv6 + // match dest_addr->sin6_port = htons(port); + // dest_addr->sin6_scope_id = + // esp_netif_get_netif_impl_index(EXAMPLE_INTERFACE); + // freeaddrinfo( addr_list ); + // return ESP_OK; + // } + } + // no match found + freeaddrinfo (addr_list); + return ESP_FAIL; +} diff --git a/components/protocol_examples_common/component.mk b/components/protocol_examples_common/component.mk new file mode 100644 index 0000000..e69de29 diff --git a/components/protocol_examples_common/connect.c b/components/protocol_examples_common/connect.c new file mode 100644 index 0000000..b3b24b2 --- /dev/null +++ b/components/protocol_examples_common/connect.c @@ -0,0 +1,488 @@ +/* Common functions for protocol examples, to establish Wi-Fi or Ethernet + connection. + + This example code is in the Public Domain (or CC0 licensed, at your option.) + + Unless required by applicable law or agreed to in writing, this + software is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR + CONDITIONS OF ANY KIND, either express or implied. + */ + +#include "esp_event.h" +#include "esp_wifi.h" +#include "esp_wifi_default.h" +#include "protocol_examples_common.h" +#include "sdkconfig.h" +#include +#if CONFIG_EXAMPLE_CONNECT_ETHERNET +#include "esp_eth.h" +#endif +#include "driver/gpio.h" +#include "esp_log.h" +#include "esp_netif.h" +#include "freertos/FreeRTOS.h" +#include "freertos/event_groups.h" +#include "freertos/task.h" +#include "lwip/err.h" +#include "lwip/sys.h" +#include "wifi_interface.h" + +#ifdef CONFIG_EXAMPLE_CONNECT_IPV6 +#define MAX_IP6_ADDRS_PER_NETIF (5) +#define NR_OF_IP_ADDRESSES_TO_WAIT_FOR (s_active_interfaces * 2) + +#if defined(CONFIG_EXAMPLE_CONNECT_IPV6_PREF_LOCAL_LINK) +#define EXAMPLE_CONNECT_PREFERRED_IPV6_TYPE ESP_IP6_ADDR_IS_LINK_LOCAL +#elif defined(CONFIG_EXAMPLE_CONNECT_IPV6_PREF_GLOBAL) +#define EXAMPLE_CONNECT_PREFERRED_IPV6_TYPE ESP_IP6_ADDR_IS_GLOBAL +#elif defined(CONFIG_EXAMPLE_CONNECT_IPV6_PREF_SITE_LOCAL) +#define EXAMPLE_CONNECT_PREFERRED_IPV6_TYPE ESP_IP6_ADDR_IS_SITE_LOCAL +#elif defined(CONFIG_EXAMPLE_CONNECT_IPV6_PREF_UNIQUE_LOCAL) +#define EXAMPLE_CONNECT_PREFERRED_IPV6_TYPE ESP_IP6_ADDR_IS_UNIQUE_LOCAL +#endif // if-elif CONFIG_EXAMPLE_CONNECT_IPV6_PREF_... + +#else +#define NR_OF_IP_ADDRESSES_TO_WAIT_FOR (s_active_interfaces) +#endif + +static int s_active_interfaces = 0; +static xSemaphoreHandle s_semph_get_ip_addrs; +static esp_ip4_addr_t s_ip_addr; +// static esp_netif_t *s_example_esp_netif = NULL; + +// extern esp_netif_t *esp_wifi_netif; + +#ifdef CONFIG_EXAMPLE_CONNECT_IPV6 +static esp_ip6_addr_t s_ipv6_addr; + +/* types of ipv6 addresses to be displayed on ipv6 events */ +static const char *s_ipv6_addr_types[] + = { "ESP_IP6_ADDR_IS_UNKNOWN", "ESP_IP6_ADDR_IS_GLOBAL", + "ESP_IP6_ADDR_IS_LINK_LOCAL", "ESP_IP6_ADDR_IS_SITE_LOCAL", + "ESP_IP6_ADDR_IS_UNIQUE_LOCAL", "ESP_IP6_ADDR_IS_IPV4_MAPPED_IPV6" }; +#endif + +static const char *TAG = "example_connect"; + +#if CONFIG_EXAMPLE_CONNECT_WIFI +static esp_netif_t *wifi_start (void); +static void wifi_stop (void); +#endif +#if CONFIG_EXAMPLE_CONNECT_ETHERNET +static esp_netif_t *eth_start (void); +static void eth_stop (void); +#endif + +/** + * @brief Checks the netif description if it contains specified prefix. + * All netifs created withing common connect component are prefixed with the + * module TAG, so it returns true if the specified netif is owned by this + * module + */ +static bool +is_our_netif (const char *prefix, esp_netif_t *netif) +{ + return strncmp (prefix, esp_netif_get_desc (netif), strlen (prefix) - 1) + == 0; +} + +/* set up connection, Wi-Fi and/or Ethernet */ +static void +start (void) +{ + +#if CONFIG_EXAMPLE_CONNECT_WIFI + esp_wifi_netif = wifi_start (); + s_active_interfaces++; +#endif + +#if CONFIG_EXAMPLE_CONNECT_ETHERNET + esp_wifi_netif = eth_start (); + s_active_interfaces++; +#endif + +#if CONFIG_EXAMPLE_CONNECT_WIFI && CONFIG_EXAMPLE_CONNECT_ETHERNET + /* if both intefaces at once, clear out to indicate that multiple netifs are + * active */ + esp_wifi_netif = NULL; +#endif + + s_semph_get_ip_addrs + = xSemaphoreCreateCounting (NR_OF_IP_ADDRESSES_TO_WAIT_FOR, 0); +} + +/* tear down connection, release resources */ +static void +stop (void) +{ +#if CONFIG_EXAMPLE_CONNECT_WIFI + wifi_stop (); + s_active_interfaces--; +#endif + +#if CONFIG_EXAMPLE_CONNECT_ETHERNET + eth_stop (); + s_active_interfaces--; +#endif +} + +static void +on_got_ip (void *arg, esp_event_base_t event_base, int32_t event_id, + void *event_data) +{ + ip_event_got_ip_t *event = (ip_event_got_ip_t *)event_data; + if (!is_our_netif (TAG, event->esp_netif)) + { + ESP_LOGW (TAG, "Got IPv4 from another interface \"%s\": ignored", + esp_netif_get_desc (event->esp_netif)); + return; + } + ESP_LOGI (TAG, "Got IPv4 event: Interface \"%s\" address: " IPSTR, + esp_netif_get_desc (event->esp_netif), + IP2STR (&event->ip_info.ip)); + memcpy (&s_ip_addr, &event->ip_info.ip, sizeof (s_ip_addr)); + xSemaphoreGive (s_semph_get_ip_addrs); +} + +#ifdef CONFIG_EXAMPLE_CONNECT_IPV6 + +static void +on_got_ipv6 (void *arg, esp_event_base_t event_base, int32_t event_id, + void *event_data) +{ + ip_event_got_ip6_t *event = (ip_event_got_ip6_t *)event_data; + if (!is_our_netif (TAG, event->esp_netif)) + { + ESP_LOGW (TAG, "Got IPv6 from another netif: ignored"); + return; + } + esp_ip6_addr_type_t ipv6_type + = esp_netif_ip6_get_addr_type (&event->ip6_info.ip); + ESP_LOGI (TAG, + "Got IPv6 event: Interface \"%s\" address: " IPV6STR ", type: %s", + esp_netif_get_desc (event->esp_netif), + IPV62STR (event->ip6_info.ip), s_ipv6_addr_types[ipv6_type]); + if (ipv6_type == EXAMPLE_CONNECT_PREFERRED_IPV6_TYPE) + { + memcpy (&s_ipv6_addr, &event->ip6_info.ip, sizeof (s_ipv6_addr)); + xSemaphoreGive (s_semph_get_ip_addrs); + } +} + +#endif // CONFIG_EXAMPLE_CONNECT_IPV6 + +esp_err_t +example_connect (void) +{ + if (s_semph_get_ip_addrs != NULL) + { + return ESP_ERR_INVALID_STATE; + } + start (); + ESP_ERROR_CHECK (esp_register_shutdown_handler (&stop)); + // ESP_LOGI(TAG, "Waiting for IP(s)"); + // for (int i=0; idel (s_phy)); + ESP_ERROR_CHECK (s_mac->del (s_mac)); + + esp_netif_destroy (eth_netif); + esp_wifi_netif = NULL; +} + +#endif // CONFIG_EXAMPLE_CONNECT_ETHERNET + +esp_netif_t * +get_example_netif (void) +{ + return get_current_netif (); +} + +esp_netif_t * +get_example_netif_from_desc (const char *desc) +{ + esp_netif_t *netif = NULL; + char *expected_desc; + asprintf (&expected_desc, "%s: %s", TAG, desc); + while ((netif = esp_netif_next (netif)) != NULL) + { + if (strcmp (esp_netif_get_desc (netif), expected_desc) == 0) + { + free (expected_desc); + return netif; + } + } + free (expected_desc); + return netif; +} diff --git a/components/protocol_examples_common/include/addr_from_stdin.h b/components/protocol_examples_common/include/addr_from_stdin.h new file mode 100644 index 0000000..3a20f61 --- /dev/null +++ b/components/protocol_examples_common/include/addr_from_stdin.h @@ -0,0 +1,45 @@ +/* Common utilities for socket address input interface: + The API get_addr_from_stdin() is mainly used by socket client examples + which read IP address from stdin (if configured). This option is typically + used in the CI, but could be enabled in the project configuration. In that + case this component is used to receive a string that is evaluated and + processed to output socket structures to open a connectio This example code + is in the Public Domain (or CC0 licensed, at your option.) + + Unless required by applicable law or agreed to in writing, this + software is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR + CONDITIONS OF ANY KIND, either express or implied. + */ + +#pragma once + +#ifdef __cplusplus +extern "C" +{ +#endif + +#include "lwip/sys.h" +#include +#include + + /** + * @brief Read and evaluate IP address from stdin + * + * This API reads stdin and parses the input address using getaddrinfo() + * to fill in struct sockaddr_in6 (for both IPv4 and IPv6) used to open + * a socket. IP protocol is guessed from the IP address string. + * + * @param[in] port port number of expected connection + * @param[in] sock_type expected protocol: SOCK_STREAM or SOCK_DGRAM + * @param[out] ip_protocol resultant IP protocol: IPPROTO_IP or IPPROTO_IP6 + * @param[out] addr_family resultant address family: AF_INET or AF_INET6 + * @param[out] dest_addr sockaddr_in6 structure (for both IPv4 and IPv6) + * @return ESP_OK on success, ESP_FAIL otherwise + */ + esp_err_t get_addr_from_stdin (int port, int sock_type, int *ip_protocol, + int *addr_family, + struct sockaddr_in6 *dest_addr); + +#ifdef __cplusplus +} +#endif diff --git a/components/protocol_examples_common/include/protocol_examples_common.h b/components/protocol_examples_common/include/protocol_examples_common.h new file mode 100644 index 0000000..6faee41 --- /dev/null +++ b/components/protocol_examples_common/include/protocol_examples_common.h @@ -0,0 +1,80 @@ +/* Common functions for protocol examples, to establish Wi-Fi or Ethernet + connection. + + This example code is in the Public Domain (or CC0 licensed, at your option.) + + Unless required by applicable law or agreed to in writing, this + software is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR + CONDITIONS OF ANY KIND, either express or implied. + */ + +#pragma once + +#ifdef __cplusplus +extern "C" +{ +#endif + +#include "esp_err.h" +#include "esp_netif.h" + +#ifdef CONFIG_EXAMPLE_CONNECT_ETHERNET +#define EXAMPLE_INTERFACE get_example_netif () +#endif + +#ifdef CONFIG_EXAMPLE_CONNECT_WIFI +#define EXAMPLE_INTERFACE get_example_netif () +#endif + + /** + * @brief Configure Wi-Fi or Ethernet, connect, wait for IP + * + * This all-in-one helper function is used in protocols examples to + * reduce the amount of boilerplate in the example. + * + * It is not intended to be used in real world applications. + * See examples under examples/wifi/getting_started/ and examples/ethernet/ + * for more complete Wi-Fi or Ethernet initialization code. + * + * Read "Establishing Wi-Fi or Ethernet Connection" section in + * examples/protocols/README.md for more information about this function. + * + * @return ESP_OK on successful connection + */ + esp_err_t example_connect (void); + + /** + * Counterpart to example_connect, de-initializes Wi-Fi or Ethernet + */ + esp_err_t example_disconnect (void); + + /** + * @brief Configure stdin and stdout to use blocking I/O + * + * This helper function is used in ASIO examples. It wraps installing the + * UART driver and configuring VFS layer to use UART driver for console I/O. + */ + esp_err_t example_configure_stdin_stdout (void); + + /** + * @brief Returns esp-netif pointer created by example_connect() + * + * @note If multiple interfaces active at once, this API return NULL + * In that case the get_example_netif_from_desc() should be used + * to get esp-netif pointer based on interface description + */ + esp_netif_t *get_example_netif (void); + + /** + * @brief Returns esp-netif pointer created by example_connect() described by + * the supplied desc field + * + * @param desc Textual interface of created network interface, for example + * "sta" indicate default WiFi station, "eth" default Ethernet interface. + * + */ + esp_netif_t *get_example_netif_from_desc (const char *desc); + +#ifdef __cplusplus +} +#endif diff --git a/components/protocol_examples_common/stdin_out.c b/components/protocol_examples_common/stdin_out.c new file mode 100644 index 0000000..b318c5b --- /dev/null +++ b/components/protocol_examples_common/stdin_out.c @@ -0,0 +1,32 @@ +/* Common functions for protocol examples, to configure stdin and stdout. + + This example code is in the Public Domain (or CC0 licensed, at your option.) + + Unless required by applicable law or agreed to in writing, this + software is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR + CONDITIONS OF ANY KIND, either express or implied. + */ + +#include "driver/uart.h" +#include "esp_err.h" +#include "esp_vfs_dev.h" +#include "protocol_examples_common.h" +#include "sdkconfig.h" + +esp_err_t +example_configure_stdin_stdout (void) +{ + // Initialize VFS & UART so we can use std::cout/cin + setvbuf (stdin, NULL, _IONBF, 0); + /* Install UART driver for interrupt-driven reads and writes */ + ESP_ERROR_CHECK (uart_driver_install ( + (uart_port_t)CONFIG_ESP_CONSOLE_UART_NUM, 256, 0, 0, NULL, 0)); + /* Tell VFS to use UART driver */ + esp_vfs_dev_uart_use_driver (CONFIG_ESP_CONSOLE_UART_NUM); + esp_vfs_dev_uart_port_set_rx_line_endings (CONFIG_ESP_CONSOLE_UART_NUM, + ESP_LINE_ENDINGS_CR); + /* Move the caret to the beginning of the next line on '\n' */ + esp_vfs_dev_uart_port_set_tx_line_endings (CONFIG_ESP_CONSOLE_UART_NUM, + ESP_LINE_ENDINGS_CRLF); + return ESP_OK; +} diff --git a/components/wifi_interface/include/wifi_interface.h b/components/wifi_interface/include/wifi_interface.h index 0006347..d1571c3 100644 --- a/components/wifi_interface/include/wifi_interface.h +++ b/components/wifi_interface/include/wifi_interface.h @@ -1,6 +1,7 @@ #ifndef _WIFI_INTERFACE_H_ #define _WIFI_INTERFACE_H_ +#include "esp_netif_types.h" #include "freertos/event_groups.h" // use wifi provisioning @@ -23,6 +24,7 @@ #define WIFI_CONNECTED_BIT BIT0 #define WIFI_FAIL_BIT BIT1 -void wifi_init(void); +void wifi_init (void); +esp_netif_t *get_current_netif (void); #endif /* _WIFI_INTERFACE_H_ */ diff --git a/components/wifi_interface/wifi_interface.c b/components/wifi_interface/wifi_interface.c index 1478ac4..055cd8d 100644 --- a/components/wifi_interface/wifi_interface.c +++ b/components/wifi_interface/wifi_interface.c @@ -15,7 +15,7 @@ #include "wifi_interface.h" #if ENABLE_WIFI_PROVISIONING -#include // for memcpy +#include // for memcpy #include #include #endif @@ -29,6 +29,8 @@ EventGroupHandle_t s_wifi_event_group; static int s_retry_num = 0; static wifi_config_t wifi_config; +static esp_netif_t *esp_wifi_netif = NULL; + /* FreeRTOS event group to signal when we are connected & ready to make a * request */ // static EventGroupHandle_t wifi_event_group; @@ -38,183 +40,211 @@ static wifi_config_t wifi_config; to the AP with an IP? */ // Event handler for catching system events -static void event_handler(void *arg, esp_event_base_t event_base, int event_id, - void *event_data) { - if (event_base == WIFI_EVENT && event_id == WIFI_EVENT_STA_START) { - esp_wifi_connect(); - } else if (event_base == IP_EVENT && event_id == IP_EVENT_STA_GOT_IP) { - ip_event_got_ip_t *event = (ip_event_got_ip_t *)event_data; - ESP_LOGI(TAG, "Connected with IP Address:" IPSTR, - IP2STR(&event->ip_info.ip)); - s_retry_num = 0; - // Signal main application to continue execution - xEventGroupSetBits(s_wifi_event_group, WIFI_CONNECTED_BIT); - } else if (event_base == WIFI_EVENT && - event_id == WIFI_EVENT_STA_DISCONNECTED) { - if ((s_retry_num < WIFI_MAXIMUM_RETRY) || (WIFI_MAXIMUM_RETRY == 0)) { - esp_wifi_connect(); - s_retry_num++; - ESP_LOGI(TAG, "retry to connect to the AP"); - } else { - xEventGroupSetBits(s_wifi_event_group, WIFI_FAIL_BIT); +static void +event_handler (void *arg, esp_event_base_t event_base, int event_id, + void *event_data) +{ + if (event_base == WIFI_EVENT && event_id == WIFI_EVENT_STA_START) + { + esp_wifi_connect (); } - ESP_LOGI(TAG, "connect to the AP fail"); - } else { + else if (event_base == IP_EVENT && event_id == IP_EVENT_STA_GOT_IP) + { + ip_event_got_ip_t *event = (ip_event_got_ip_t *)event_data; + ESP_LOGI (TAG, "Connected with IP Address:" IPSTR, + IP2STR (&event->ip_info.ip)); + + s_retry_num = 0; + // Signal main application to continue execution + xEventGroupSetBits (s_wifi_event_group, WIFI_CONNECTED_BIT); + } + else if (event_base == WIFI_EVENT && event_id == WIFI_EVENT_STA_DISCONNECTED) + { + if ((s_retry_num < WIFI_MAXIMUM_RETRY) || (WIFI_MAXIMUM_RETRY == 0)) + { + esp_wifi_connect (); + s_retry_num++; + ESP_LOGI (TAG, "retry to connect to the AP"); + } + else + { + xEventGroupSetBits (s_wifi_event_group, WIFI_FAIL_BIT); + } + ESP_LOGI (TAG, "connect to the AP fail"); + } + else + { #if ENABLE_WIFI_PROVISIONING - if (event_base == WIFI_PROV_EVENT) { - switch (event_id) { - case WIFI_PROV_START: - ESP_LOGI(TAG, "Provisioning started"); - break; - case WIFI_PROV_CRED_RECV: { - wifi_sta_config_t *wifi_sta_cfg = (wifi_sta_config_t *)event_data; - ESP_LOGI(TAG, - "Received Wi-Fi credentials" - "\n\tSSID : %s\n\tPassword : %s", - (const char *)wifi_sta_cfg->ssid, - (const char *)wifi_sta_cfg->password); - memcpy(&(wifi_config.sta), wifi_sta_cfg, sizeof(wifi_sta_config_t)); - break; + if (event_base == WIFI_PROV_EVENT) + { + switch (event_id) + { + case WIFI_PROV_START: + ESP_LOGI (TAG, "Provisioning started"); + break; + case WIFI_PROV_CRED_RECV: + { + wifi_sta_config_t *wifi_sta_cfg + = (wifi_sta_config_t *)event_data; + ESP_LOGI (TAG, + "Received Wi-Fi credentials" + "\n\tSSID : %s\n\tPassword : %s", + (const char *)wifi_sta_cfg->ssid, + (const char *)wifi_sta_cfg->password); + memcpy (&(wifi_config.sta), wifi_sta_cfg, + sizeof (wifi_sta_config_t)); + break; + } + case WIFI_PROV_CRED_FAIL: + { + wifi_prov_sta_fail_reason_t *reason + = (wifi_prov_sta_fail_reason_t *)event_data; + ESP_LOGE (TAG, + "Provisioning failed!\n\tReason : %s" + "\n\tPlease reset to factory and retry provisioning", + (*reason == WIFI_PROV_STA_AUTH_ERROR) + ? "Wi-Fi station authentication failed" + : "Wi-Fi access-point not found"); + break; + } + case WIFI_PROV_CRED_SUCCESS: + ESP_LOGI (TAG, "Provisioning successful"); + break; + case WIFI_PROV_END: + /* De-initialize manager once provisioning is finished */ + wifi_prov_mgr_deinit (); + break; + default: + break; + } } - case WIFI_PROV_CRED_FAIL: { - wifi_prov_sta_fail_reason_t *reason = - (wifi_prov_sta_fail_reason_t *)event_data; - ESP_LOGE(TAG, - "Provisioning failed!\n\tReason : %s" - "\n\tPlease reset to factory and retry provisioning", - (*reason == WIFI_PROV_STA_AUTH_ERROR) - ? "Wi-Fi station authentication failed" - : "Wi-Fi access-point not found"); - break; - } - case WIFI_PROV_CRED_SUCCESS: - ESP_LOGI(TAG, "Provisioning successful"); - break; - case WIFI_PROV_END: - /* De-initialize manager once provisioning is finished */ - wifi_prov_mgr_deinit(); - break; - default: - break; - } - } #endif - } + } } #if ENABLE_WIFI_PROVISIONING -static void get_device_service_name(char *service_name, size_t max) { +static void +get_device_service_name (char *service_name, size_t max) +{ uint8_t eth_mac[6]; const char *ssid_prefix = "PROV_"; - esp_wifi_get_mac(WIFI_IF_STA, eth_mac); - snprintf(service_name, max, "%s%02X%02X%02X", ssid_prefix, eth_mac[3], - eth_mac[4], eth_mac[5]); + esp_wifi_get_mac (WIFI_IF_STA, eth_mac); + snprintf (service_name, max, "%s%02X%02X%02X", ssid_prefix, eth_mac[3], + eth_mac[4], eth_mac[5]); } #endif -void wifi_init(void) { - s_wifi_event_group = xEventGroupCreate(); +void +wifi_init (void) +{ + s_wifi_event_group = xEventGroupCreate (); - ESP_ERROR_CHECK(esp_netif_init()); + ESP_ERROR_CHECK (esp_netif_init ()); - ESP_ERROR_CHECK(esp_event_loop_create_default()); + ESP_ERROR_CHECK (esp_event_loop_create_default ()); - ESP_ERROR_CHECK(esp_event_handler_register(WIFI_EVENT, ESP_EVENT_ANY_ID, - &event_handler, NULL)); - ESP_ERROR_CHECK(esp_event_handler_register(IP_EVENT, IP_EVENT_STA_GOT_IP, - &event_handler, NULL)); + ESP_ERROR_CHECK (esp_event_handler_register (WIFI_EVENT, ESP_EVENT_ANY_ID, + &event_handler, NULL)); + ESP_ERROR_CHECK (esp_event_handler_register (IP_EVENT, IP_EVENT_STA_GOT_IP, + &event_handler, NULL)); #if ENABLE_WIFI_PROVISIONING - ESP_ERROR_CHECK(esp_event_handler_register(WIFI_PROV_EVENT, ESP_EVENT_ANY_ID, - &event_handler, NULL)); + ESP_ERROR_CHECK (esp_event_handler_register ( + WIFI_PROV_EVENT, ESP_EVENT_ANY_ID, &event_handler, NULL)); #endif - esp_netif_create_default_wifi_sta(); + esp_wifi_netif = esp_netif_create_default_wifi_sta (); #if ENABLE_WIFI_PROVISIONING - esp_netif_create_default_wifi_ap(); + esp_netif_create_default_wifi_ap (); #endif - wifi_init_config_t cfg = WIFI_INIT_CONFIG_DEFAULT(); - ESP_ERROR_CHECK(esp_wifi_init(&cfg)); + wifi_init_config_t cfg = WIFI_INIT_CONFIG_DEFAULT (); + ESP_ERROR_CHECK (esp_wifi_init (&cfg)); + + // esp_wifi_set_ps(WIFI_PS_MIN_MODEM); + // esp_wifi_set_ps(WIFI_PS_NONE); #if ENABLE_WIFI_PROVISIONING // Configuration for the provisioning manager - wifi_prov_mgr_config_t config = { - .scheme = wifi_prov_scheme_softap, - .scheme_event_handler = WIFI_PROV_EVENT_HANDLER_NONE}; + wifi_prov_mgr_config_t config + = { .scheme = wifi_prov_scheme_softap, + .scheme_event_handler = WIFI_PROV_EVENT_HANDLER_NONE }; // Initialize provisioning manager with the // configuration parameters set above - ESP_ERROR_CHECK(wifi_prov_mgr_init(config)); + ESP_ERROR_CHECK (wifi_prov_mgr_init (config)); bool provisioned = false; /* Let's find out if the device is provisioned */ - ESP_ERROR_CHECK(wifi_prov_mgr_is_provisioned(&provisioned)); + ESP_ERROR_CHECK (wifi_prov_mgr_is_provisioned (&provisioned)); /* If device is not yet provisioned start provisioning service */ - if (!provisioned) { - ESP_LOGI(TAG, "Starting provisioning"); + if (!provisioned) + { + ESP_LOGI (TAG, "Starting provisioning"); - // Wi-Fi SSID when scheme is wifi_prov_scheme_softap - char service_name[12]; - get_device_service_name(service_name, sizeof(service_name)); + // Wi-Fi SSID when scheme is wifi_prov_scheme_softap + char service_name[12]; + get_device_service_name (service_name, sizeof (service_name)); - /* What is the security level that we want (0 or 1): - * - WIFI_PROV_SECURITY_0 is simply plain text communication. - * - WIFI_PROV_SECURITY_1 is secure communication which consists of - * secure handshake using X25519 key exchange and proof of possession (pop) - * and AES-CTR for encryption/decryption of messages. - */ - wifi_prov_security_t security = WIFI_PROV_SECURITY_1; + /* What is the security level that we want (0 or 1): + * - WIFI_PROV_SECURITY_0 is simply plain text communication. + * - WIFI_PROV_SECURITY_1 is secure communication which consists of + * secure handshake using X25519 key exchange and proof of possession + * (pop) and AES-CTR for encryption/decryption of messages. + */ + wifi_prov_security_t security = WIFI_PROV_SECURITY_1; - /* Do we want a proof-of-possession (ignored if Security 0 is selected): - * - this should be a string with length > 0 - * - NULL if not used - */ - const char *pop = NULL; //"abcd1234"; + /* Do we want a proof-of-possession (ignored if Security 0 is selected): + * - this should be a string with length > 0 + * - NULL if not used + */ + const char *pop = NULL; //"abcd1234"; - /* What is the service key (could be NULL) - * This translates to : - * - Wi-Fi password when scheme is wifi_prov_scheme_softap - * - simply ignored when scheme is wifi_prov_scheme_ble - */ - const char *service_key = "12345678"; + /* What is the service key (could be NULL) + * This translates to : + * - Wi-Fi password when scheme is wifi_prov_scheme_softap + * - simply ignored when scheme is wifi_prov_scheme_ble + */ + const char *service_key = "12345678"; - /* An optional endpoint that applications can create if they expect to - * get some additional custom data during provisioning workflow. - * The endpoint name can be anything of your choice. - * This call must be made before starting the provisioning. - */ - // wifi_prov_mgr_endpoint_create("custom-data"); - /* Start provisioning service */ - ESP_ERROR_CHECK(wifi_prov_mgr_start_provisioning( - security, pop, service_name, service_key)); + /* An optional endpoint that applications can create if they expect to + * get some additional custom data during provisioning workflow. + * The endpoint name can be anything of your choice. + * This call must be made before starting the provisioning. + */ + // wifi_prov_mgr_endpoint_create("custom-data"); + /* Start provisioning service */ + ESP_ERROR_CHECK (wifi_prov_mgr_start_provisioning ( + security, pop, service_name, service_key)); - /* The handler for the optional endpoint created above. - * This call must be made after starting the provisioning, and only if the - * endpoint has already been created above. - */ - // wifi_prov_mgr_endpoint_register("custom-data", custom_prov_data_handler, - // NULL); + /* The handler for the optional endpoint created above. + * This call must be made after starting the provisioning, and only if + * the endpoint has already been created above. + */ + // wifi_prov_mgr_endpoint_register("custom-data", + // custom_prov_data_handler, NULL); - /* Uncomment the following to wait for the provisioning to finish and then - * release the resources of the manager. Since in this case - * de-initialization is triggered by the default event loop handler, we - * don't need to call the following */ - // wifi_prov_mgr_wait(); - // wifi_prov_mgr_deinit(); - } else { - ESP_LOGI(TAG, "Already provisioned, starting Wi-Fi STA"); + /* Uncomment the following to wait for the provisioning to finish and + * then release the resources of the manager. Since in this case + * de-initialization is triggered by the default event loop handler, we + * don't need to call the following */ + // wifi_prov_mgr_wait(); + // wifi_prov_mgr_deinit(); + } + else + { + ESP_LOGI (TAG, "Already provisioned, starting Wi-Fi STA"); - /* We don't need the manager as device is already provisioned, - * so let's release it's resources */ - wifi_prov_mgr_deinit(); + /* We don't need the manager as device is already provisioned, + * so let's release it's resources */ + wifi_prov_mgr_deinit (); - /* Start Wi-Fi station */ - ESP_ERROR_CHECK(esp_wifi_set_mode(WIFI_MODE_STA)); - ESP_ERROR_CHECK(esp_wifi_start()); + /* Start Wi-Fi station */ + ESP_ERROR_CHECK (esp_wifi_set_mode (WIFI_MODE_STA)); + ESP_ERROR_CHECK (esp_wifi_start ()); - ESP_LOGI(TAG, "wifi_init_sta finished."); - } + ESP_LOGI (TAG, "wifi_init_sta finished."); + } #else wifi_config_t wifi_config = { .sta = @@ -225,40 +255,52 @@ void wifi_init(void) { .pmf_cfg = {.capable = true, .required = false}, }, }; - ESP_ERROR_CHECK(esp_wifi_set_config(ESP_IF_WIFI_STA, &wifi_config)); + ESP_ERROR_CHECK (esp_wifi_set_config (ESP_IF_WIFI_STA, &wifi_config)); /* Start Wi-Fi station */ - ESP_ERROR_CHECK(esp_wifi_set_mode(WIFI_MODE_STA)); - ESP_ERROR_CHECK(esp_wifi_start()); + ESP_ERROR_CHECK (esp_wifi_set_mode (WIFI_MODE_STA)); + ESP_ERROR_CHECK (esp_wifi_start ()); - ESP_LOGI(TAG, "wifi_init_sta finished."); + ESP_LOGI (TAG, "wifi_init_sta finished."); #endif /* Waiting until either the connection is established (WIFI_CONNECTED_BIT) or * connection failed for the maximum number of re-tries (WIFI_FAIL_BIT). The * bits are set by event_handler() (see above) */ - EventBits_t bits = xEventGroupWaitBits(s_wifi_event_group, - WIFI_CONNECTED_BIT | WIFI_FAIL_BIT, - pdFALSE, pdFALSE, portMAX_DELAY); + EventBits_t bits = xEventGroupWaitBits (s_wifi_event_group, + WIFI_CONNECTED_BIT | WIFI_FAIL_BIT, + pdFALSE, pdFALSE, portMAX_DELAY); /* xEventGroupWaitBits() returns the bits before the call returned, hence we * can test which event actually happened. */ - if (bits & WIFI_CONNECTED_BIT) { - ESP_LOGI(TAG, "connected to ap SSID: %s", wifi_config.sta.ssid); - } else if (bits & WIFI_FAIL_BIT) { - ESP_LOGI(TAG, "Failed to connect to SSID:%s, password:%s", - wifi_config.sta.ssid, wifi_config.sta.password); - } else { - ESP_LOGE(TAG, "UNEXPECTED EVENT"); - } + if (bits & WIFI_CONNECTED_BIT) + { + ESP_LOGI (TAG, "connected to ap SSID: %s", wifi_config.sta.ssid); + } + else if (bits & WIFI_FAIL_BIT) + { + ESP_LOGI (TAG, "Failed to connect to SSID:%s, password:%s", + wifi_config.sta.ssid, wifi_config.sta.password); + } + else + { + ESP_LOGE (TAG, "UNEXPECTED EVENT"); + } uint8_t base_mac[6]; // Get MAC address for WiFi station - esp_read_mac(base_mac, ESP_MAC_WIFI_STA); - sprintf(mac_address, "%02X:%02X:%02X:%02X:%02X:%02X", base_mac[0], - base_mac[1], base_mac[2], base_mac[3], base_mac[4], base_mac[5]); + esp_read_mac (base_mac, ESP_MAC_WIFI_STA); + sprintf (mac_address, "%02X:%02X:%02X:%02X:%02X:%02X", base_mac[0], + base_mac[1], base_mac[2], base_mac[3], base_mac[4], base_mac[5]); - // ESP_ERROR_CHECK(esp_event_handler_unregister(IP_EVENT, IP_EVENT_STA_GOT_IP, - // &event_handler)); ESP_ERROR_CHECK(esp_event_handler_unregister(WIFI_EVENT, - // ESP_EVENT_ANY_ID, &event_handler)); vEventGroupDelete(s_wifi_event_group); + // ESP_ERROR_CHECK(esp_event_handler_unregister(IP_EVENT, + // IP_EVENT_STA_GOT_IP, &event_handler)); + // ESP_ERROR_CHECK(esp_event_handler_unregister(WIFI_EVENT, ESP_EVENT_ANY_ID, + // &event_handler)); vEventGroupDelete(s_wifi_event_group); +} + +esp_netif_t * +get_current_netif (void) +{ + return esp_wifi_netif; } diff --git a/components/wifi_logger b/components/wifi_logger new file mode 160000 index 0000000..23bf246 --- /dev/null +++ b/components/wifi_logger @@ -0,0 +1 @@ +Subproject commit 23bf246c863c15d118c46cce47dd3f1657809ab7 diff --git a/main/main.c b/main/main.c index 72ecb4c..f40ef84 100644 --- a/main/main.c +++ b/main/main.c @@ -22,6 +22,7 @@ #include "board.h" #include "es8388.h" #include "esp_netif.h" +#include "lwip/api.h" #include "lwip/dns.h" #include "lwip/err.h" #include "lwip/netdb.h" @@ -30,6 +31,8 @@ #include "mdns.h" #include "net_functions.h" +#include "wifi_logger.h" + // Web socket server #include "websocket_if.h" //#include "websocket_server.h" @@ -68,6 +71,8 @@ static void error_callback (const FLAC__StreamDecoder *decoder, static FLAC__StreamDecoder *flacDecoder = NULL; static QueueHandle_t flacReadQHdl = NULL; static QueueHandle_t flacWriteQHdl = NULL; +SemaphoreHandle_t flacReadSemaphore = NULL; +SemaphoreHandle_t flacWriteSemaphore = NULL; const char *VERSION_STRING = "0.0.2"; @@ -75,9 +80,9 @@ const char *VERSION_STRING = "0.0.2"; #define HTTP_TASK_CORE_ID 1 // tskNO_AFFINITY #define OTA_TASK_PRIORITY 6 -#define OTA_TASK_CORE_ID tskNO_AFFINITY +#define OTA_TASK_CORE_ID 1 // tskNO_AFFINITY -#define FLAC_TASK_PRIORITY HTTP_TASK_PRIORITY + 1 +#define FLAC_TASK_PRIORITY HTTP_TASK_PRIORITY #define FLAC_TASK_CORE_ID 1 // tskNO_AFFINITY xTaskHandle t_ota_task = NULL; @@ -85,7 +90,7 @@ xTaskHandle t_http_get_task = NULL; xTaskHandle t_flac_decoder_task = NULL; struct timeval tdif, tavg; -audio_board_handle_t board_handle = NULL; +static audio_board_handle_t board_handle = NULL; /* snapast parameters; configurable in menuconfig */ #define SNAPCAST_SERVER_USE_MDNS CONFIG_SNAPSERVER_USE_MDNS @@ -111,7 +116,7 @@ uint8_t dspFlow = dspfStereo; // dspfBiamp; // dspfStereo; // dspfBassBoost; typedef struct flacData_s { char *inData; - char *outData; + pcm_chunk_message_t *outData; uint32_t bytes; } flacData_t; @@ -145,7 +150,8 @@ read_callback (const FLAC__StreamDecoder *decoder, FLAC__byte buffer[], xQueueReceive (flacReadQHdl, &flacData, portMAX_DELAY); - // ESP_LOGI(TAG, "in flac read cb %p", flacData); + // ESP_LOGI(TAG, "in flac read cb %d %p", flacData->bytes, + // flacData->inData); if (flacData->bytes <= 0) { @@ -161,36 +167,43 @@ read_callback (const FLAC__StreamDecoder *decoder, FLAC__byte buffer[], { memcpy (buffer, flacData->inData, flacData->bytes); *bytes = flacData->bytes; - // ESP_LOGW(TAG, "read all flac inData %d", *bytes); + // ESP_LOGW(TAG, "read all flac inData %d", *bytes); } else { memcpy (buffer, flacData->inData, *bytes); - // ESP_LOGW(TAG, "dind't read all flac inData %d", - //*bytes); + ESP_LOGW (TAG, "dind't read all flac inData %d", *bytes); flacData->inData += *bytes; flacData->bytes -= *bytes; } - xQueueSend (flacReadQHdl, &flacData, portMAX_DELAY); + // xQueueSend (flacReadQHdl, &flacData, portMAX_DELAY); + + xSemaphoreGive (flacReadSemaphore); return FLAC__STREAM_DECODER_READ_STATUS_CONTINUE; } +static flacData_t flacOutData; + 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; + flacData_t *flacData = &flacOutData; snapcastSetting_t *scSet = (snapcastSetting_t *)client_data; + int ret = 0; + uint32_t tmpData; (void)decoder; - xQueueReceive (flacReadQHdl, &flacData, portMAX_DELAY); + xSemaphoreTake (flacWriteSemaphore, portMAX_DELAY); - // ESP_LOGI(TAG, "in flac write cb %d %p", frame->header.blocksize, - // flacData); + // xQueueReceive (flacReadQHdl, &flacData, portMAX_DELAY); + + // ESP_LOGI(TAG, "in flac write cb %d %p", frame->header.blocksize, + // flacData); if (frame->header.channels != scSet->ch) { @@ -219,21 +232,50 @@ write_callback (const FLAC__StreamDecoder *decoder, const FLAC__Frame *frame, return FLAC__STREAM_DECODER_WRITE_STATUS_ABORT; } - flacData->bytes = frame->header.blocksize * scSet->ch * (scSet->bits / 8); - ; - flacData->outData = (char *)realloc (flacData->outData, flacData->bytes); + flacData->bytes = frame->header.blocksize * frame->header.channels + * (frame->header.bits_per_sample / 8); - for (i = 0; i < frame->header.blocksize; i++) + // flacData->outData = (char *)realloc (flacData->outData, flacData->bytes); + // flacData->outData = (char *)malloc (flacData->bytes); + ret = allocate_pcm_chunk_memory (&(flacData->outData), flacData->bytes); + + // ESP_LOGI (TAG, "mem %p %p %d", flacData->outData, + // flacData->outData->fragment->payload, flacData->bytes); + + if (ret == 0) { - // write little endian - flacData->outData[4 * i] = (uint8_t)buffer[0][i]; - flacData->outData[4 * i + 1] = (uint8_t) (buffer[0][i] >> 8); - flacData->outData[4 * i + 2] = (uint8_t)buffer[1][i]; - flacData->outData[4 * i + 3] = (uint8_t) (buffer[1][i] >> 8); + for (i = 0; i < frame->header.blocksize; i++) + { + // write little endian + // flacData->outData-[4 * i] = (uint8_t)buffer[0][i]; + // flacData->outData[4 * i + 1] = (uint8_t) (buffer[0][i] + //>> 8); flacData->outData[4 * i + 2] = + // (uint8_t)buffer[1][i]; flacData->outData[4 * i + 3] = + // (uint8_t) + //(buffer[1][i] >> 8); + + // TODO: for now fragmented payload is not supported and the whole + // chunk is expected to be in the first fragment + tmpData = ((uint32_t) ((buffer[1][i] >> 8) & 0xFF) << 24) + | ((uint32_t) ((buffer[1][i] >> 0) & 0xFF) << 16) + | ((uint32_t) ((buffer[0][i] >> 8) & 0xFF) << 8) + | ((uint32_t) ((buffer[0][i] >> 0) & 0xFF) << 0); + + uint32_t *test = &(flacData->outData->fragment->payload[4 * i]); + *test = tmpData; + // memcpy((uint32_t *)&(flacData->outData->fragment->payload[4 * i]), + // &tmpData, sizeof(tmpData)); + } + } + else + { + flacData->outData = NULL; } xQueueSend (flacWriteQHdl, &flacData, portMAX_DELAY); + // xSemaphoreGive(flacWriteSemaphore); + return FLAC__STREAM_DECODER_WRITE_STATUS_CONTINUE; } @@ -241,12 +283,12 @@ void metadata_callback (const FLAC__StreamDecoder *decoder, const FLAC__StreamMetadata *metadata, void *client_data) { - flacData_t *flacData; + flacData_t *flacData = &flacOutData; snapcastSetting_t *scSet = (snapcastSetting_t *)client_data; (void)decoder; - xQueueReceive (flacReadQHdl, &flacData, portMAX_DELAY); + // xQueueReceive (flacReadQHdl, &flacData, portMAX_DELAY); if (metadata->type == FLAC__METADATA_TYPE_STREAMINFO) { @@ -259,6 +301,8 @@ metadata_callback (const FLAC__StreamDecoder *decoder, xQueueSend (flacWriteQHdl, &flacData, portMAX_DELAY); } + + // xSemaphoreGive(flacReadSemaphore); } void @@ -335,6 +379,13 @@ flac_decoder_task (void *pvParameters) } } +static char base_message_serialized[BASE_MESSAGE_SIZE]; +static char time_message_serialized[TIME_MESSAGE_SIZE]; +static const esp_timer_create_args_t tSyncArgs + = { .callback = &time_sync_msg_cb, .name = "tSyncMsg" }; + +struct netconn *lwipNetconn; + /** * */ @@ -344,19 +395,18 @@ http_get_task (void *pvParameters) struct sockaddr_in servaddr; char *start; int sock = -1; - base_message_t base_message; + base_message_t base_message_rx; + base_message_t base_message_tx; hello_message_t hello_message; - char base_message_serialized[BASE_MESSAGE_SIZE]; - char time_message_serialized[TIME_MESSAGE_SIZE]; + wire_chunk_message_t wire_chnk = { { 0, 0 }, 0, NULL }; char *hello_message_serialized = NULL; int result, size, id_counter; struct timeval now, trx, tdif, ttx; - time_message_t time_message; + time_message_t time_message_rx = { { 0, 0 } }; + time_message_t time_message_tx = { { 0, 0 } }; struct timeval tmpDiffToServer; struct timeval lastTimeSync = { 0, 0 }; esp_timer_handle_t timeSyncMessageTimer = NULL; - const esp_timer_create_args_t tSyncArgs - = { .callback = &time_sync_msg_cb, .name = "tSyncMsg" }; int16_t frameSize = 960; // 960*2: 20ms, 960*1: 10ms int16_t *audio = NULL; int16_t pcm_size = 120; @@ -371,6 +421,16 @@ http_get_task (void *pvParameters) snapcastSetting_t scSet; flacData_t flacData = { NULL, NULL, 0 }; flacData_t *pFlacData; + char *typedMsg = NULL; + uint32_t lastTypedMsgSize = 0; + // struct netconn *lwipNetconn = NULL; + ip_addr_t local_ip; + ip_addr_t remote_ip; + uint16_t remotePort = 0; + int rc1 = ERR_OK, rc2 = ERR_OK; + struct netbuf *firstNetBuf = NULL; + struct netbuf *newNetBuf = NULL; + uint16_t len; // create a timer to send time sync messages every x µs esp_timer_create (&tSyncArgs, &timeSyncMessageTimer); @@ -429,6 +489,2109 @@ http_get_task (void *pvParameters) flacReadQHdl = NULL; } +#if SNAPCAST_SERVER_USE_MDNS + // Find snapcast server + // Connect to first snapcast server found + r = NULL; + err = 0; + while (!r || err) + { + ESP_LOGI (TAG, "Lookup snapcast service on network"); + esp_err_t err = mdns_query_ptr ("_snapcast", "_tcp", 3000, 20, &r); + if (err) + { + ESP_LOGE (TAG, "Query Failed"); + } + + if (!r) + { + ESP_LOGW (TAG, "No results found!"); + } + + vTaskDelay (1000 / portTICK_PERIOD_MS); + } + + char serverAddr[] = "255.255.255.255"; + ESP_LOGI (TAG, "Found %s:%d", + inet_ntop (AF_INET, &(r->addr->addr.u_addr.ip4.addr), + serverAddr, sizeof (serverAddr)), + r->port); + + servaddr.sin_family = AF_INET; + servaddr.sin_addr.s_addr = r->addr->addr.u_addr.ip4.addr; + servaddr.sin_port = htons (r->port); + + ip_addr_copy (remote_ip, r->addr->addr); + remotePort = r->port; + + mdns_query_results_free (r); +#else + // configure a failsafe snapserver according to CONFIG values + servaddr.sin_family = AF_INET; + inet_pton (AF_INET, SNAPCAST_SERVER_HOST, &(servaddr.sin_addr.s_addr)); + servaddr.sin_port = htons (SNAPCAST_SERVER_PORT); + + inet_pton (AF_INET, SNAPCAST_SERVER_HOST, &(remote_ip.u_addr.ip4.addr)); + remotePort = SNAPCAST_SERVER_PORT; +#endif + + if (lwipNetconn != NULL) + { + netconn_delete (lwipNetconn); + lwipNetconn = NULL; + } + + lwipNetconn = netconn_new (NETCONN_TCP); + if (lwipNetconn == NULL) + { + ESP_LOGE (TAG, "can't create netconn"); + + continue; + } + + // local_ip.u_addr.ip4.addr = get_current_ip4().addr; + //// local_ip.u_addr.ip4.addr = ipaddr_addr("192.168.1.21"); + //// ESP_LOGI (TAG, "netconn bind to %s", inet_ntop (AF_INET, + ///&(local_ip.u_addr.ip4.addr), serverAddr, sizeof (serverAddr))); + rc1 = netconn_bind (lwipNetconn, IPADDR_ANY, 0); + if (rc1 != ERR_OK) + { + ESP_LOGE (TAG, "can't bind local IP"); + } + + // ipaddr_aton("192.168.1.54", &remote_ip); + rc2 = netconn_connect (lwipNetconn, &remote_ip, remotePort); + if (rc2 != ERR_OK) + { + ESP_LOGE (TAG, "can't connect to remote %s:%d, err %d", + inet_ntop (AF_INET, &(remote_ip.u_addr.ip4.addr), + serverAddr, sizeof (serverAddr)), + remotePort, rc2); + } + if (rc1 != ERR_OK || rc2 != ERR_OK) + { + netconn_close (lwipNetconn); + netconn_delete (lwipNetconn); + lwipNetconn = NULL; + + continue; + } + + ESP_LOGI (TAG, "netconn connected"); + + result = gettimeofday (&now, NULL); + if (result) + { + ESP_LOGE (TAG, "Failed to gettimeofday\r\n"); + return; + } + + received_header = false; + + // init base message + base_message_rx.type = SNAPCAST_MESSAGE_HELLO; + base_message_rx.id = 0x0000; + base_message_rx.refersTo = 0x0000; + base_message_rx.sent.sec = now.tv_sec; + base_message_rx.sent.usec = now.tv_usec; + base_message_rx.received.sec = 0; + base_message_rx.received.usec = 0; + base_message_rx.size = 0x00000000; + + // init hello message + hello_message.mac = mac_address; + hello_message.hostname = "ESP32-Caster"; + hello_message.version = (char *)VERSION_STRING; + hello_message.client_name = "libsnapcast"; + hello_message.os = "esp32"; + hello_message.arch = "xtensa"; + hello_message.instance = 1; + hello_message.id = mac_address; + hello_message.protocol_version = 2; + + if (hello_message_serialized == NULL) + { + hello_message_serialized = hello_message_serialize ( + &hello_message, (size_t *)&(base_message_rx.size)); + if (!hello_message_serialized) + { + ESP_LOGE (TAG, "Failed to serialize hello message"); + return; + } + } + + result = base_message_serialize ( + &base_message_rx, base_message_serialized, BASE_MESSAGE_SIZE); + if (result) + { + ESP_LOGE (TAG, "Failed to serialize base message"); + return; + } + + rc1 = netconn_write (lwipNetconn, base_message_serialized, + BASE_MESSAGE_SIZE, NETCONN_NOCOPY); + if (rc1 != ERR_OK) + { + ESP_LOGE (TAG, "netconn failed to send base message"); + + continue; + } + rc1 = netconn_write (lwipNetconn, hello_message_serialized, + base_message_rx.size, NETCONN_NOCOPY); + if (rc1 != ERR_OK) + { + ESP_LOGE (TAG, "netconn failed to send hello message"); + + continue; + } + + ESP_LOGI (TAG, "netconn sent hello message"); + + free (hello_message_serialized); + hello_message_serialized = NULL; + + // init default setting + scSet.buf_ms = 0; + scSet.codec = NONE; + scSet.bits = 0; + scSet.ch = 0; + scSet.sr = 0; + scSet.chkDur_ms = 0; + scSet.volume = 0; + scSet.muted = true; + + uint64_t startTime, endTime; + char *tmp; + size_t remainderSize = 0; + size_t currentPos = 0; + size_t typedMsgCurrentPos = 0; + uint32_t typedMsgLen = 0; + uint32_t offset = 0; + size = 0; + +#define BASE_MESSAGE_STATE 0 +#define TYPED_MESSAGE_STATE 1 + + uint32_t state + = BASE_MESSAGE_STATE; // 0 ... base message, 1 ... typed message + uint32_t internalState = 0; + uint32_t counter = 0; + + firstNetBuf = NULL; + + flacWriteSemaphore = xSemaphoreCreateMutex (); + // xSemaphoreGive(flacWriteSemaphore); + xSemaphoreTake (flacWriteSemaphore, portMAX_DELAY); + + flacReadSemaphore = xSemaphoreCreateMutex (); + xSemaphoreGive ( + flacReadSemaphore); // only flac read callback can give semaphore + + while (1) + { + rc2 = netconn_recv (lwipNetconn, &firstNetBuf); + if (rc2 != ERR_OK) + { + if (rc2 == ERR_CONN) + { + netconn_close (lwipNetconn); + + // restart and try to reconnect + break; + } + + if (firstNetBuf != NULL) + { + netbuf_delete (firstNetBuf); + + firstNetBuf = NULL; + } + continue; + } + + // now parse the data + netbuf_first (firstNetBuf); + do + { + currentPos = 0; + + rc1 = netbuf_data (firstNetBuf, (void **)&start, &len); + if (rc1 == ERR_OK) + { + // ESP_LOGI (TAG, "netconn rx, + // data len: %d, %d", len, netbuf_len(firstNetBuf) - + // currentPos); + } + else + { + ESP_LOGE (TAG, "netconn rx, couldn't get data"); + + continue; + } + + while (len > 0) + { + rc1 = ERR_OK; // probably not necessary + + switch (state) + { + // decode base message + case BASE_MESSAGE_STATE: + { + switch (internalState) + { + case 0: + result = gettimeofday (&now, NULL); + // ESP_LOGI(TAG, "time of day: %ld %ld", + // now.tv_sec, now.tv_usec); + if (result) + { + ESP_LOGW (TAG, "Failed to gettimeofday"); + } + + base_message_rx.type = *start & 0xFF; + internalState++; + break; + + case 1: + base_message_rx.type |= (*start & 0xFF) << 8; + internalState++; + break; + + case 2: + base_message_rx.id = *start & 0xFF; + internalState++; + break; + + case 3: + base_message_rx.id |= (*start & 0xFF) << 8; + internalState++; + break; + + case 4: + base_message_rx.refersTo = *start & 0xFF; + internalState++; + break; + + case 5: + base_message_rx.refersTo |= (*start & 0xFF) << 8; + internalState++; + break; + + case 6: + base_message_rx.sent.sec = *start & 0xFF; + internalState++; + break; + + case 7: + base_message_rx.sent.sec |= (*start & 0xFF) << 8; + internalState++; + break; + + case 8: + base_message_rx.sent.sec |= (*start & 0xFF) << 16; + internalState++; + break; + + case 9: + base_message_rx.sent.sec |= (*start & 0xFF) << 24; + internalState++; + break; + + case 10: + base_message_rx.sent.usec = *start & 0xFF; + internalState++; + break; + + case 11: + base_message_rx.sent.usec |= (*start & 0xFF) << 8; + internalState++; + break; + + case 12: + base_message_rx.sent.usec |= (*start & 0xFF) << 16; + internalState++; + break; + + case 13: + base_message_rx.sent.usec |= (*start & 0xFF) << 24; + internalState++; + break; + + case 14: + base_message_rx.received.sec = *start & 0xFF; + internalState++; + break; + + case 15: + base_message_rx.received.sec |= (*start & 0xFF) + << 8; + internalState++; + break; + + case 16: + base_message_rx.received.sec |= (*start & 0xFF) + << 16; + internalState++; + break; + + case 17: + base_message_rx.received.sec |= (*start & 0xFF) + << 24; + internalState++; + break; + + case 18: + base_message_rx.received.usec = *start & 0xFF; + internalState++; + break; + + case 19: + base_message_rx.received.usec |= (*start & 0xFF) + << 8; + internalState++; + break; + + case 20: + base_message_rx.received.usec |= (*start & 0xFF) + << 16; + internalState++; + break; + + case 21: + base_message_rx.received.usec |= (*start & 0xFF) + << 24; + internalState++; + break; + + case 22: + base_message_rx.size = *start & 0xFF; + internalState++; + break; + + case 23: + base_message_rx.size |= (*start & 0xFF) << 8; + internalState++; + break; + + case 24: + base_message_rx.size |= (*start & 0xFF) << 16; + internalState++; + break; + + case 25: + base_message_rx.size |= (*start & 0xFF) << 24; + internalState = 0; + + base_message_rx.received.sec = now.tv_sec; + base_message_rx.received.usec = now.tv_usec; + + typedMsgCurrentPos = 0; + + // ESP_LOGI(TAG,"BM type %d ts %d.%d", + // base_message_rx.type, + // base_message_rx.received.sec, + // base_message_rx.received.usec); + // ESP_LOGI(TAG,"%d + //%d.%d", base_message_rx.type, + // base_message_rx.received.sec, + // base_message_rx.received.usec); + + state = TYPED_MESSAGE_STATE; + break; + } + + currentPos++; + len--; + start++; + + break; + } + + // decode typed message + case TYPED_MESSAGE_STATE: + { + switch (base_message_rx.type) + { + case SNAPCAST_MESSAGE_WIRE_CHUNK: + { + switch (internalState) + { + case 0: + { + wire_chnk.timestamp.sec = *start & 0xFF; + + typedMsgCurrentPos++; + start++; + currentPos++; + len--; + + internalState++; + + break; + } + + case 1: + { + wire_chnk.timestamp.sec |= (*start & 0xFF) + << 8; + + typedMsgCurrentPos++; + start++; + currentPos++; + len--; + + internalState++; + + break; + } + + case 2: + { + wire_chnk.timestamp.sec |= (*start & 0xFF) + << 16; + + typedMsgCurrentPos++; + start++; + currentPos++; + len--; + + internalState++; + + break; + } + + case 3: + { + wire_chnk.timestamp.sec |= (*start & 0xFF) + << 24; + + // ESP_LOGI(TAG, + //"wire chunk time sec: %d", + // wire_chnk.timestamp.sec); + + typedMsgCurrentPos++; + start++; + currentPos++; + len--; + + internalState++; + + break; + } + + case 4: + { + wire_chnk.timestamp.usec = (*start & 0xFF); + + typedMsgCurrentPos++; + start++; + currentPos++; + len--; + + internalState++; + + break; + } + + case 5: + { + wire_chnk.timestamp.usec |= (*start & 0xFF) + << 8; + + typedMsgCurrentPos++; + start++; + currentPos++; + len--; + + internalState++; + + break; + } + + case 6: + { + wire_chnk.timestamp.usec |= (*start & 0xFF) + << 16; + + typedMsgCurrentPos++; + start++; + currentPos++; + len--; + + internalState++; + + break; + } + + case 7: + { + wire_chnk.timestamp.usec |= (*start & 0xFF) + << 24; + + // ESP_LOGI(TAG, + //"wire chunk time usec: %d", + // wire_chnk.timestamp.usec); + + typedMsgCurrentPos++; + start++; + currentPos++; + len--; + + internalState++; + + break; + } + + case 8: + { + wire_chnk.size = (*start & 0xFF); + + typedMsgCurrentPos++; + start++; + currentPos++; + len--; + + internalState++; + + break; + } + + case 9: + { + wire_chnk.size |= (*start & 0xFF) << 8; + + typedMsgCurrentPos++; + start++; + currentPos++; + len--; + + internalState++; + + break; + } + + case 10: + { + wire_chnk.size |= (*start & 0xFF) << 16; + + typedMsgCurrentPos++; + start++; + currentPos++; + len--; + + internalState++; + + break; + } + + case 11: + { + wire_chnk.size |= (*start & 0xFF) << 24; + + typedMsgCurrentPos++; + start++; + currentPos++; + len--; + + internalState++; + + // ESP_LOGI(TAG, + //"got wire chunk with size: %d, at time + //%d.%d", wire_chnk.size, + // wire_chnk.timestamp.sec, + // wire_chnk.timestamp.usec); + + break; + } + + case 12: + { + if (typedMsgCurrentPos + < base_message_rx.size) + { + size_t tmp; + + if ((base_message_rx.size + - typedMsgCurrentPos) + <= len) + { + tmp = base_message_rx.size + - typedMsgCurrentPos; + } + else + { + tmp = len; + } + + if (received_header == true) + { + switch (codec) + { + case FLAC: + { + flacData.bytes = tmp; + flacData.inData = start; + pFlacData = &flacData; + + xSemaphoreTake ( + flacReadSemaphore, + portMAX_DELAY); + + // send data to flac decoder + xQueueSend (flacReadQHdl, + &pFlacData, + portMAX_DELAY); + // and wait until data was + // processed + xSemaphoreTake ( + flacReadSemaphore, + portMAX_DELAY); + // need to release mutex + // afterwards for next round + xSemaphoreGive ( + flacReadSemaphore); + + break; + } + + default: + { + ESP_LOGE ( + TAG, + "Decoder not supported"); + + return; + + break; + } + } + } + + if (tmp <= len) + { + typedMsgCurrentPos += tmp; + start += tmp; + currentPos += tmp; + len -= tmp; + } + else + { + typedMsgCurrentPos += len; + start += len; + currentPos += len; + len -= len; + } + } + else + { + // ESP_LOGI(TAG, + //"data remaining %d %d", len, + // currentPos); + // ESP_LOGI(TAG, "got wire chunk with + // size: %d, at time %d.%d", + // wire_chnk.size, + // wire_chnk.timestamp.sec, + // wire_chnk.timestamp.usec); + + if (received_header == true) + { + xSemaphoreGive ( + flacWriteSemaphore); + // and wait until it is done + xQueueReceive (flacWriteQHdl, + &pFlacData, + portMAX_DELAY); + + // wire_chunk_message_t + // pcm_chunk_message; + // + // pcm_chunk_message.size + //= pFlacData->bytes; + // pcm_chunk_message.payload + //= pFlacData->outData; + // pcm_chunk_message.timestamp + //= wire_chnk.timestamp; + + // ESP_LOGI(TAG, + //"got pcm chunk with size: %d, at + // time %d.%d", + // pcm_chunk_message.size, + // pcm_chunk_message.timestamp.sec, + // pcm_chunk_message.timestamp.usec); + // + // scSet.chkDur_ms + // = + //(1000UL * pcm_chunk_message.size) + // / + //(uint32_t) (scSet.ch * + //(scSet.bits / 8)) + /// scSet.sr; + // if (player_send_snapcast_setting + //(&scSet) != pdPASS) + // { + // ESP_LOGE + //(TAG, + //"Failed to notify sync task about + // " + // "codec. Did you init player?"); + // + // return; + // } + + pcm_chunk_message_t + *pcm_chunk_message; + + if (pFlacData->outData != NULL) + { + pcm_chunk_message + = pFlacData->outData; + pcm_chunk_message->timestamp + = wire_chnk.timestamp; + } + + size_t decodedSize + = pFlacData->bytes; + scSet.chkDur_ms + = (1000UL * decodedSize) + / (uint32_t) ( + scSet.ch + * (scSet.bits / 8)) + / scSet.sr; + 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 + dsp_setup_flow (500, scSet.sr, + scSet.chkDur_ms); + dsp_processor ( + pcm_chunk_message.payload, + pcm_chunk_message.size, + dspFlow); +#endif + + if (pFlacData->outData != NULL) + { + insert_pcm_chunk ( + pcm_chunk_message); + } + + // insert_pcm_chunk + // (&pcm_chunk_message); + + // free(pFlacData->outData); + } + + state = BASE_MESSAGE_STATE; + internalState = 0; + + typedMsgCurrentPos = 0; + } + + break; + } + + default: + { + ESP_LOGE (TAG, "wire chunk decoder " + "shouldn't get here"); + + break; + } + } + + break; + } + + case SNAPCAST_MESSAGE_CODEC_HEADER: + { + switch (internalState) + { + case 0: + { + typedMsgLen = *start & 0xFF; + + typedMsgCurrentPos++; + start++; + currentPos++; + len--; + + internalState++; + } + + case 1: + { + typedMsgLen |= (*start & 0xFF) << 8; + + typedMsgCurrentPos++; + start++; + currentPos++; + len--; + + internalState++; + + break; + } + + case 2: + { + typedMsgLen |= (*start & 0xFF) << 16; + + typedMsgCurrentPos++; + start++; + currentPos++; + len--; + + internalState++; + + break; + } + + case 3: + { + typedMsgLen |= (*start & 0xFF) << 24; + + tmp = malloc (typedMsgLen + + 1); // allocate memory for + // codec string + if (tmp == NULL) + { + ESP_LOGE (TAG, "couldn't get memory " + "for codec string"); + + return; + } + + offset = 0; + // ESP_LOGI(TAG, + //"codec header string is %d long", + // typedMsgLen); + + typedMsgCurrentPos++; + start++; + currentPos++; + len--; + + internalState++; + + break; + } + + case 4: + { + if (len >= typedMsgLen) + { + memcpy (&tmp[offset], start, + typedMsgLen); + + offset += typedMsgLen; + + typedMsgCurrentPos += typedMsgLen; + start += typedMsgLen; + currentPos += typedMsgLen; + len -= typedMsgLen; + } + else + { + memcpy (&tmp[offset], start, + typedMsgLen); + + offset += len; + + typedMsgCurrentPos += len; + start += len; + currentPos += len; + len -= len; + } + + if (offset == typedMsgLen) + { + tmp[typedMsgLen] + = 0; // NULL terminate string + + // ESP_LOGI + //(TAG, "got codec string: %s", tmp); + + if (strcmp (tmp, "opus") == 0) + { + codec = OPUS; + } + else if (strcmp (tmp, "flac") == 0) + { + codec = FLAC; + } + else if (strcmp (tmp, "pcm") == 0) + { + codec = PCM; + } + else + { + codec = NONE; + + ESP_LOGI ( + TAG, + "Codec : %s not supported", + tmp); + ESP_LOGI ( + TAG, "Change encoder codec to " + "opus / flac / pcm in " + "/etc/snapserver.conf on " + "server"); + + return; + } + + free (tmp); + tmp = NULL; + + internalState++; + } + + break; + } + + case 5: + { + typedMsgLen = *start & 0xFF; + + typedMsgCurrentPos++; + start++; + currentPos++; + len--; + + internalState++; + } + + case 6: + { + typedMsgLen |= (*start & 0xFF) << 8; + + typedMsgCurrentPos++; + start++; + currentPos++; + len--; + + internalState++; + + break; + } + + case 7: + { + typedMsgLen |= (*start & 0xFF) << 16; + + typedMsgCurrentPos++; + start++; + currentPos++; + len--; + + internalState++; + + break; + } + + case 8: + { + typedMsgLen |= (*start & 0xFF) << 24; + + tmp = malloc ( + typedMsgLen); // allocate memory for + // codec string + if (tmp == NULL) + { + ESP_LOGE (TAG, "couldn't get memory " + "for codec string"); + + return; + } + + offset = 0; + + typedMsgCurrentPos++; + start++; + currentPos++; + len--; + + internalState++; + + break; + } + + case 9: + { + if (len >= typedMsgLen) + { + memcpy (&tmp[offset], start, + typedMsgLen); + + offset += typedMsgLen; + + typedMsgCurrentPos += typedMsgLen; + start += typedMsgLen; + currentPos += typedMsgLen; + len -= typedMsgLen; + } + else + { + memcpy (&tmp[offset], start, + typedMsgLen); + + offset += len; + + typedMsgCurrentPos += len; + start += len; + currentPos += len; + len -= len; + } + + if (offset == typedMsgLen) + { + // first ensure everything is set up + // correctly and resources are + // available + if (t_flac_decoder_task != NULL) + { + vTaskDelete (t_flac_decoder_task); + t_flac_decoder_task = NULL; + } + + if (flacDecoder != NULL) + { + FLAC__stream_decoder_finish ( + flacDecoder); + FLAC__stream_decoder_delete ( + flacDecoder); + flacDecoder = NULL; + } + + if (flacWriteQHdl != NULL) + { + vQueueDelete (flacWriteQHdl); + flacWriteQHdl = NULL; + } + + if (flacReadQHdl != NULL) + { + vQueueDelete (flacReadQHdl); + flacReadQHdl = NULL; + } + + if (codec == OPUS) + { + ESP_LOGI ( + TAG, + "OPUS not implemented yet"); + + return; + } + else if (codec == FLAC) + { + if (t_flac_decoder_task == NULL) + { + xTaskCreatePinnedToCore ( + &flac_decoder_task, + "flac_decoder_task", + 9 * 256, &scSet, + FLAC_TASK_PRIORITY, + &t_flac_decoder_task, + FLAC_TASK_CORE_ID); + } + + if (flacData.outData != NULL) + { + free (flacData.outData); + flacData.outData = NULL; + } + + flacData.bytes = typedMsgLen; + flacData.inData = tmp; + pFlacData = &flacData; + + // TODO: find a smarter way for + // this wait for task creation done + while (flacReadQHdl == NULL) + { + vTaskDelay (10); + } + + xSemaphoreTake (flacReadSemaphore, + portMAX_DELAY); + + // send data to flac decoder + xQueueSend (flacReadQHdl, + &pFlacData, + portMAX_DELAY); + // and wait until data was + // processed + xSemaphoreTake (flacReadSemaphore, + portMAX_DELAY); + // need to release mutex afterwards + // for next round + xSemaphoreGive (flacReadSemaphore); + // wait until it is done + xQueueReceive (flacWriteQHdl, + &pFlacData, + portMAX_DELAY); + + ESP_LOGI ( + TAG, + "fLaC sampleformat: %d:%d:%d", + scSet.sr, scSet.bits, + scSet.ch); + } + else if (codec == PCM) + { + ESP_LOGI ( + TAG, + "PCM not implemented yet"); + + return; + } + else + { + ESP_LOGE ( + TAG, + "codec header decoder " + "shouldn't get here after " + "codec string was detected"); + + return; + } + + free (tmp); + tmp = NULL; + + // ESP_LOGI(TAG, + //"done codec header msg"); + + trx.tv_sec = base_message_rx.sent.sec; + trx.tv_usec + = base_message_rx.sent.usec; + // we do this, so uint32_t timvals + // won't overflow if e.g. raspberry + // server is off to far + settimeofday (&trx, NULL); + ESP_LOGI (TAG, + "syncing clock to server " + "%ld.%06ld", + trx.tv_sec, trx.tv_usec); + + state = BASE_MESSAGE_STATE; + internalState = 0; + + received_header = true; + } + + break; + } + + default: + { + ESP_LOGE (TAG, "codec header decoder " + "shouldn't get here"); + + break; + } + } + + break; + } + + case SNAPCAST_MESSAGE_SERVER_SETTINGS: + { + switch (internalState) + { + case 0: + { + while ( + (netbuf_len (firstNetBuf) - currentPos) + < base_message_rx.size) + { + ESP_LOGI (TAG, "need more data"); + + // we need more data to process + rc1 = netconn_recv (lwipNetconn, + &newNetBuf); + if (rc1 != ERR_OK) + { + ESP_LOGE ( + TAG, + "rx error for need more data"); + + if (rc1 == ERR_CONN) + { + // netconn_close(lwipNetconn); + // // closing later, see first + // netconn_recv() in the loop + + break; + } + + if (newNetBuf != NULL) + { + netbuf_delete (newNetBuf); + + newNetBuf = NULL; + } + + continue; + } + + netbuf_chain (firstNetBuf, newNetBuf); + } + + if (rc1 == ERR_OK) + { + typedMsgLen = *start & 0xFF; + + typedMsgCurrentPos++; + start++; + currentPos++; + len--; + + internalState++; + } + else + { + ESP_LOGE (TAG, "some error"); + } + + break; + } + + case 1: + { + typedMsgLen |= (*start & 0xFF) << 8; + + typedMsgCurrentPos++; + start++; + currentPos++; + len--; + + internalState++; + + break; + } + + case 2: + { + typedMsgLen |= (*start & 0xFF) << 16; + + typedMsgCurrentPos++; + start++; + currentPos++; + len--; + + internalState++; + + break; + } + + case 3: + { + typedMsgLen |= (*start & 0xFF) << 24; + + // ESP_LOGI(TAG, + //"server settings string is %d long", + // typedMsgLen); + + typedMsgCurrentPos++; + start++; + currentPos++; + len--; + + internalState++; + + break; + } + + case 4: + { + // now get some memory for server settings + // string at this point there is still + // plenty of RAM available, so we use + // malloc and netbuf_copy() here + tmp = malloc (typedMsgLen + 1); + + if (tmp == NULL) + { + ESP_LOGE (TAG, + "couldn't get memory for " + "server settings string"); + } + else + { + netbuf_copy_partial (firstNetBuf, tmp, + typedMsgLen, + currentPos); + + tmp[typedMsgLen] + = 0; // NULL terminate string + + // ESP_LOGI + //(TAG, "got string: %s", tmp); + + result + = server_settings_message_deserialize ( + &server_settings_message, tmp); + if (result) + { + ESP_LOGE (TAG, + "Failed to read server " + "settings: %d", + result); + } + else + { + // log mute state, buffer, latency + ESP_LOGI (TAG, + "Buffer length: %d", + server_settings_message + .buffer_ms); + ESP_LOGI (TAG, + "Latency: %d", + server_settings_message + .latency); + ESP_LOGI ( + TAG, "Mute: %d", + server_settings_message.muted); + ESP_LOGI (TAG, + "Setting volume: %d", + server_settings_message + .volume); + } + + // Volume setting using ADF HAL + // abstraction + if (scSet.muted + != server_settings_message.muted) + { + audio_hal_set_mute ( + board_handle->audio_hal, + server_settings_message.muted); + } + if (scSet.volume + != server_settings_message.volume) + { + audio_hal_set_volume ( + board_handle->audio_hal, + server_settings_message + .volume); + } + + scSet.cDacLat_ms + = server_settings_message.latency; + scSet.buf_ms = server_settings_message + .buffer_ms; + scSet.muted + = server_settings_message.muted; + scSet.volume + = server_settings_message.volume; + + if (player_send_snapcast_setting ( + &scSet) + != pdPASS) + { + ESP_LOGE ( + TAG, + "Failed to notify sync task. " + "Did you init player?"); + + return; + } + + free (tmp); + tmp = NULL; + } + + internalState++; + + // currentPos++; + // len--; + // + // break; + + // intentional fall through + } + + case 5: + { + size_t tmpSize = base_message_rx.size + - typedMsgCurrentPos; + + if (len > 0) + { + if (tmpSize < len) + { + start += tmpSize; + currentPos + += tmpSize; // will be + // incremented by 1 + // later so -1 here + typedMsgCurrentPos += tmpSize; + len -= tmpSize; + } + else + { + start += len; + currentPos + += len; // will be incremented + // by 1 later so -1 + // here + typedMsgCurrentPos += len; + len = 0; + } + } + + if (typedMsgCurrentPos + >= base_message_rx.size) + { + // ESP_LOGI(TAG, + //"done server settings"); + + state = BASE_MESSAGE_STATE; + internalState = 0; + + typedMsgCurrentPos = 0; + } + + break; + } + + default: + { + ESP_LOGE (TAG, "server settings decoder " + "shouldn't get here"); + + break; + } + } + + break; + } + + case SNAPCAST_MESSAGE_STREAM_TAGS: + { + size_t tmpSize + = base_message_rx.size - typedMsgCurrentPos; + + if (tmpSize < len) + { + start += tmpSize; + currentPos + += tmpSize; // will be incremented by 1 + // later so -1 here + typedMsgCurrentPos += tmpSize; + len -= tmpSize; + } + else + { + start += len; + currentPos += len; // will be incremented by + // 1 later so -1 here + typedMsgCurrentPos += len; + len = 0; + } + + if (typedMsgCurrentPos >= base_message_rx.size) + { + // ESP_LOGI(TAG, + //"done stream tags with length %d %d %d", + // base_message_rx.size, currentPos, + // tmpSize); + + typedMsgCurrentPos = 0; + // currentPos = 0; + + state = BASE_MESSAGE_STATE; + internalState = 0; + } + + break; + } + + case SNAPCAST_MESSAGE_TIME: + { + switch (internalState) + { + case 0: + { + time_message_rx.latency.sec = *start; + + typedMsgCurrentPos++; + start++; + currentPos++; + len--; + + internalState++; + + // if + //(len + //>= 4) { time_message.latency.sec = + // *start; + // start++; time_message.latency.sec + //|= (int32_t)*start << 8; + // start++; + // time_message.latency.sec + //|= (int32_t)*start << 16; + // start++; + // time_message.latency.sec + //|= (int32_t)*start << 24; + // start++; + // + // typedMsgCurrentPos + //+= 4; + // currentPos += 4; + // len -= 4; + // + // internalState + //+= 3; + // } + // else + // if (len + //>= 3) { + // time_message.latency.sec = *start; + // start++; + // time_message.latency.sec + //|= (int32_t)*start << 8; + // start++; + // time_message.latency.sec + //|= (int32_t)*start << 16; + // start++; + // time_message.latency.sec + //|= (int32_t)*start << 24; + // start++; + // + // typedMsgCurrentPos + //+= 4; + // currentPos += 4; + // len -= 4; + // + // internalState + //+= 3; + // } + + break; + } + + case 1: + { + time_message_rx.latency.sec + |= (int32_t)*start << 8; + + typedMsgCurrentPos++; + start++; + currentPos++; + len--; + + internalState++; + + break; + } + + case 2: + { + time_message_rx.latency.sec + |= (int32_t)*start << 16; + + typedMsgCurrentPos++; + start++; + currentPos++; + len--; + + internalState++; + + break; + } + + case 3: + { + time_message_rx.latency.sec + |= (int32_t)*start << 24; + + typedMsgCurrentPos++; + start++; + currentPos++; + len--; + + internalState++; + + break; + } + + case 4: + { + time_message_rx.latency.usec = *start; + + typedMsgCurrentPos++; + start++; + currentPos++; + len--; + + internalState++; + + break; + } + + case 5: + { + time_message_rx.latency.usec + |= (int32_t)*start << 8; + + typedMsgCurrentPos++; + start++; + currentPos++; + len--; + + internalState++; + + break; + } + + case 6: + { + time_message_rx.latency.usec + |= (int32_t)*start << 16; + + typedMsgCurrentPos++; + start++; + currentPos++; + len--; + + internalState++; + + break; + } + + case 7: + { + time_message_rx.latency.usec + |= (int32_t)*start << 24; + + typedMsgCurrentPos++; + start++; + currentPos++; + len--; + + if (typedMsgCurrentPos + >= base_message_rx.size) + { + // ESP_LOGI(TAG, + //"done time message"); + + typedMsgCurrentPos = 0; + + state = BASE_MESSAGE_STATE; + internalState = 0; + + // ESP_LOGI(TAG, "BaseTX : + // %d %d ", + // base_message.sent.sec + //, + // base_message.sent.usec); + // ESP_LOGI(TAG, "BaseRX + //: %d %d ", + // base_message.received.sec , + // base_message.received.usec); + // ESP_LOGI(TAG, "baseTX->RX : %d s ", + // (base_message.received.sec + // - + // base_message.sent.sec)); + // ESP_LOGI(TAG, + // "baseTX->RX : %d ms ", + // (base_message.received.usec + //- + // base_message.sent.usec)/1000); + // ESP_LOGI(TAG, + // "Latency : %d.%d ", + // time_message.latency.sec, + // time_message_rx.latency.usec/1000); + + // tv == server to client latency (s2c) + // time_message_rx.latency == client to + // server latency(c2s) + // TODO the fact that I have to do this + // simple conversion means I should + // probably use the timeval struct + // instead of my own + trx.tv_sec + = base_message_rx.received.sec; + trx.tv_usec + = base_message_rx.received.usec; + ttx.tv_sec = base_message_rx.sent.sec; + ttx.tv_usec + = base_message_rx.sent.usec; + timersub (&trx, &ttx, &tdif); + + trx.tv_sec + = time_message_rx.latency.sec; + trx.tv_usec + = time_message_rx.latency.usec; + + // trx == c2s: client to server + // tdif == s2c: server to client + // ESP_LOGI(TAG, + // "c2s: %ld %ld", + // trx.tv_sec, + // trx.tv_usec); + // ESP_LOGI(TAG, + // "s2c: %ld %ld", + // tdif.tv_sec, + // tdif.tv_usec); + + timersub (&trx, &tdif, + &tmpDiffToServer); + if ((tmpDiffToServer.tv_sec / 2) == 0) + { + tmpDiffToServer.tv_sec = 0; + tmpDiffToServer.tv_usec + = (suseconds_t) ( + (int64_t)tmpDiffToServer + .tv_sec + * 1000000LL / 2) + + (int64_t)tmpDiffToServer + .tv_usec + / 2; + } + else + { + tmpDiffToServer.tv_sec /= 2; + tmpDiffToServer.tv_usec /= 2; + } + + // ESP_LOGI(TAG, + // "Current + // latency: %ld.%06ld", + // tmpDiffToServer.tv_sec, + // tmpDiffToServer.tv_usec); + + // TODO: Move the time message sending + // to an own thread maybe following + // code is storing / initializing / + // resetting diff to server algorithm + // we collect a number of latencies and + // apply a median filter. Based on + // these we can get server now + { + struct timeval diff; + int64_t newValue; + + // clear diffBuffer if last update is + // older than a minute + timersub (&now, &lastTimeSync, + &diff); + + if (diff.tv_sec > 60) + { + ESP_LOGW ( + TAG, "Last time sync older " + "than a minute. " + "Clearing time buffer"); + + reset_latency_buffer (); + } + + newValue + = ((int64_t) + tmpDiffToServer.tv_sec + * 1000000LL + + (int64_t)tmpDiffToServer + .tv_usec); + player_latency_insert (newValue); + + // ESP_LOGE(TAG, + // "latency %lld", + // newValue); + + // store current time + lastTimeSync.tv_sec = now.tv_sec; + lastTimeSync.tv_usec = now.tv_usec; + + if (xSemaphoreTake ( + timeSyncSemaphoreHandle, 0) + == pdTRUE) + { + ESP_LOGW ( + TAG, + "couldn't take " + "timeSyncSemaphoreHandle"); + } + + uint64_t timeout; + if (latency_buffer_full () > 0) + { + // we give + // timeSyncSemaphoreHandle after + // x µs through timer + // TODO: maybe start a periodic + // timer here, but we need to + // remember if it is already + // running then. also we need to + // stop it if + // reset_latency_buffer() was + // called + timeout = 1000000; + } + else + { + // Do a initial time sync with + // the server at boot we need to + // fill diffBuff fast so we get a + // good estimate of latency + timeout = 100000; + } + + esp_timer_start_once ( + timeSyncMessageTimer, timeout); + } + } + else + { + ESP_LOGE (TAG, + "error time message, this " + "shouldn't happen! %d %d", + typedMsgCurrentPos, + base_message_rx.size); + + typedMsgCurrentPos = 0; + + state = BASE_MESSAGE_STATE; + internalState = 0; + } + + break; + } + + default: + { + ESP_LOGE (TAG, + "time message decoder shouldn't " + "get here %d %d %d", + typedMsgCurrentPos, + base_message_rx.size, + internalState); + + break; + } + } + + break; + } + + default: + { + typedMsgCurrentPos++; + start++; + currentPos++; + len--; + + if (typedMsgCurrentPos >= base_message_rx.size) + { + ESP_LOGI (TAG, + "done unknown typed message %d", + base_message_rx.type); + + state = BASE_MESSAGE_STATE; + internalState = 0; + + typedMsgCurrentPos = 0; + } + + break; + } + } + + break; + } + + default: + { + break; + } + } + + if (rc1 != ERR_OK) + { + break; + } + } + } + while (netbuf_next (firstNetBuf) >= 0); + + netbuf_delete (firstNetBuf); + + if (rc1 != ERR_OK) + { + ESP_LOGE (TAG, "Data error, closing netconn"); + + netconn_close (lwipNetconn); + + break; + } + + if (received_header == true) + { + if (xSemaphoreTake (timeSyncSemaphoreHandle, 0) == pdTRUE) + { + result = gettimeofday (&now, NULL); + // ESP_LOGI(TAG, "time of day: %ld %ld", now.tv_sec, + // now.tv_usec); + if (result) + { + ESP_LOGI (TAG, "Failed to gettimeofday"); + continue; + } + + base_message_tx.type = SNAPCAST_MESSAGE_TIME; + base_message_tx.id = id_counter++; + base_message_tx.refersTo = 0; + base_message_tx.received.sec = 0; + base_message_tx.received.usec = 0; + base_message_tx.sent.sec = now.tv_sec; + base_message_tx.sent.usec = now.tv_usec; + base_message_tx.size = TIME_MESSAGE_SIZE; + + result = base_message_serialize (&base_message_tx, + base_message_serialized, + BASE_MESSAGE_SIZE); + if (result) + { + ESP_LOGE (TAG, + "Failed to serialize base message for time"); + continue; + } + + memset (&time_message_tx, 0, sizeof (time_message_tx)); + + result = time_message_serialize (&time_message_tx, + time_message_serialized, + TIME_MESSAGE_SIZE); + if (result) + { + ESP_LOGI (TAG, "Failed to serialize time message"); + continue; + } + + rc1 = netconn_write (lwipNetconn, base_message_serialized, + BASE_MESSAGE_SIZE, NETCONN_NOCOPY); + if (rc1 != ERR_OK) + { + ESP_LOGW (TAG, "error writing timesync base msg"); + + continue; + } + + rc1 = netconn_write (lwipNetconn, time_message_serialized, + TIME_MESSAGE_SIZE, NETCONN_NOCOPY); + if (rc1 != ERR_OK) + { + ESP_LOGW (TAG, "error writing timesync msg"); + + continue; + } + } + } + } + } +} + +/** + * + */ +static void +http_get_task_backup (void *pvParameters) +{ + struct sockaddr_in servaddr; + char *start; + int sock = -1; + base_message_t base_message; + hello_message_t hello_message; + char *hello_message_serialized = NULL; + int result, size, id_counter; + struct timeval now, trx, tdif, ttx; + time_message_t time_message; + struct timeval tmpDiffToServer; + struct timeval lastTimeSync = { 0, 0 }; + esp_timer_handle_t timeSyncMessageTimer = NULL; + int16_t frameSize = 960; // 960*2: 20ms, 960*1: 10ms + int16_t *audio = NULL; + int16_t pcm_size = 120; + uint16_t channels; + esp_err_t err = 0; + codec_header_message_t codec_header_message; + 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 = { NULL, NULL, 0 }; + flacData_t *pFlacData; + char *typedMsg = NULL; + uint32_t lastTypedMsgSize = 0; + + // create a timer to send time sync messages every x µs + esp_timer_create (&tSyncArgs, &timeSyncMessageTimer); + timeSyncSemaphoreHandle = xSemaphoreCreateMutex (); + xSemaphoreGive (timeSyncSemaphoreHandle); + + id_counter = 0; + + while (1) + { + if (reset_latency_buffer () < 0) + { + ESP_LOGE ( + TAG, + "reset_diff_buffer: couldn't reset median filter long. STOP"); + + return; + } + + esp_timer_stop (timeSyncMessageTimer); + xSemaphoreGive (timeSyncSemaphoreHandle); + + if (opusDecoder != NULL) + { + opus_decoder_destroy (opusDecoder); + opusDecoder = NULL; + } + + if (t_flac_decoder_task != NULL) + { + vTaskDelete (t_flac_decoder_task); + t_flac_decoder_task = NULL; + } + + if (flacDecoder != NULL) + { + FLAC__stream_decoder_finish (flacDecoder); + FLAC__stream_decoder_delete (flacDecoder); + flacDecoder = NULL; + } + + if (flacWriteQHdl != NULL) + { + vQueueDelete (flacWriteQHdl); + flacWriteQHdl = NULL; + } + + if (flacReadQHdl != NULL) + { + vQueueDelete (flacReadQHdl); + flacReadQHdl = NULL; + } + #if SNAPCAST_SERVER_USE_MDNS // Find snapcast server // Connect to first snapcast server found @@ -469,6 +2632,7 @@ http_get_task (void *pvParameters) #endif ESP_LOGI (TAG, "allocate socket"); sock = socket (AF_INET, SOCK_STREAM, 0); + if (sock < 0) { ESP_LOGE (TAG, "... Failed to allocate socket."); @@ -586,10 +2750,20 @@ http_get_task (void *pvParameters) scSet.volume = 0; scSet.muted = true; + lastTypedMsgSize = 0; + if (typedMsg) + { + free (typedMsg); + typedMsg = NULL; + } + uint64_t startTime, endTime; for (;;) { + // ESP_LOGW (TAG, "stack free: %d", + // uxTaskGetStackHighWaterMark(NULL)); + size = 0; result = 0; while (size < BASE_MESSAGE_SIZE) @@ -636,22 +2810,70 @@ http_get_task (void *pvParameters) } base_message.received.usec = now.tv_usec; - // ESP_LOGI(TAG,"%d %d : %d %d : %d %d",base_message.size, - // base_message.refersTo, - // base_message.sent.sec, - // base_message.sent.usec, - // base_message.received.sec, - // base_message.received.usec - //); + // ESP_LOGI(TAG,"%d %d : %d %d : %d + // %d",base_message.size, + // base_message.refersTo, + // base_message.sent.sec, + // base_message.sent.usec, + // base_message.received.sec, + // base_message.received.usec + // ); // TODO: ensure this buffer is freed before task gets deleted size = 0; - char *typedMsg = malloc (sizeof (char) * base_message.size); - if (typedMsg == NULL) + if (lastTypedMsgSize < base_message.size) { - ESP_LOGE (TAG, "Couldn't get memory for typed message"); + // typedMsg = (char *)heap_caps_realloc + // (typedMsg, base_message.size, MALLOC_CAP_8BIT); + // if (typedMsg == NULL) + { + // ESP_LOGI (TAG, "get memory + // for typed message %d, %d, %d", + // base_message.size, + // heap_caps_get_free_size(MALLOC_CAP_8BIT), + // heap_caps_get_largest_free_block(MALLOC_CAP_8BIT)); + typedMsg = (char *)heap_caps_realloc ( + typedMsg, base_message.size, MALLOC_CAP_8BIT); - return; + // typedMsg = (char + // *)heap_caps_malloc (base_message.size, + // MALLOC_CAP_8BIT); + if (typedMsg == NULL) + { + ESP_LOGE ( + TAG, + "Couldn't get memory for typed message %d, %d, %d", + base_message.size, + heap_caps_get_free_size (MALLOC_CAP_8BIT), + heap_caps_get_largest_free_block ( + MALLOC_CAP_8BIT)); + + // dummy read next data to a char variable without + // incrementing and drop it (base_message.size) + char dummy; + start = &dummy; + while (size < base_message.size) + { + result = recv (sock, start, 1, 0); + if (result < 0) + { + ESP_LOGW (TAG, + "Failed to read from server: %d", + result); + + break; + } + + size++; + } + + continue; + } + else + { + lastTypedMsgSize = base_message.size; + } + } } start = typedMsg; @@ -885,10 +3107,11 @@ http_get_task (void *pvParameters) { if (!received_header) { - if (typedMsg != NULL) - { - free (typedMsg); - } + // if (typedMsg != NULL) + // { + // free (typedMsg); + // typedMsg = NULL; + // } continue; } @@ -906,11 +3129,12 @@ http_get_task (void *pvParameters) break; } - // ESP_LOGI(TAG, "wire chnk with size: - // %d, timestamp %d.%d", - // wire_chunk_message.size, - // wire_chunk_message.timestamp.sec, - // wire_chunk_message.timestamp.usec); + // ESP_LOGI(TAG, "wire + // chnk with size:" + // "%d, timestamp %d.%d", + // wire_chunk_message.size, + // wire_chunk_message.timestamp.sec, + // wire_chunk_message.timestamp.usec); // store chunk's timestamp, decoder callback // will need it later @@ -1082,7 +3306,14 @@ http_get_task (void *pvParameters) pcm_chunk_message.size, dspFlow); #endif + // int ret; + // do { + // ret = insert_pcm_chunk (&pcm_chunk_message); + // if (ret < 0) { + // vTaskDelay(10); + // } + // } while(ret != 0); break; } @@ -1091,60 +3322,34 @@ http_get_task (void *pvParameters) { wire_chunk_message_t pcm_chunk_message; - if (audio == NULL) + size = wire_chunk_message.size; + start = wire_chunk_message.payload; + + pcm_chunk_message.size = size; + pcm_chunk_message.timestamp = timestamp; + pcm_chunk_message.payload + = wire_chunk_message.payload; + + scSet.chkDur_ms + = (1000UL * pcm_chunk_message.size) + / (uint32_t) (scSet.ch * (scSet.bits / 8)) + / scSet.sr; + if (player_send_snapcast_setting (&scSet) != pdPASS) { -#if CONFIG_USE_PSRAM - audio = (int16_t *)heap_caps_malloc ( - pcm_chunk_message.size * sizeof (char), - MALLOC_CAP_8BIT - | MALLOC_CAP_SPIRAM); // 960*2: 20ms, - // 960*1: 10ms -#else - audio = (int16_t *)malloc (pcm_chunk_message.size - * sizeof (char)); -#endif + ESP_LOGE (TAG, + "Failed to notify sync task about " + "codec. Did you init player?"); + + return; } - if (audio == NULL) - { - ESP_LOGE (TAG, "Failed to allocate memory for " - "opus audio decoder"); - } - else - { - size = wire_chunk_message.size; - start = wire_chunk_message.payload; - - pcm_chunk_message.size = size; - pcm_chunk_message.timestamp = timestamp; - pcm_chunk_message.payload = (char *)audio; - // TODO: if wire_chunk_message_free is done - // differently this copy can be avoided - memcpy (pcm_chunk_message.payload, start, - pcm_chunk_message.size); - - scSet.chkDur_ms - = (1000UL * pcm_chunk_message.size) - / (uint32_t) (scSet.ch * (scSet.bits / 8)) - / scSet.sr; - 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 - dsp_setup_flow (500, scSet.sr, scSet.chkDur_ms); - dsp_processor (pcm_chunk_message.payload, - pcm_chunk_message.size, dspFlow); + dsp_setup_flow (500, scSet.sr, scSet.chkDur_ms); + dsp_processor (pcm_chunk_message.payload, + pcm_chunk_message.size, dspFlow); #endif - insert_pcm_chunk (&pcm_chunk_message); - } + insert_pcm_chunk (&pcm_chunk_message); break; } @@ -1280,10 +3485,10 @@ http_get_task (void *pvParameters) tmpDiffToServer.tv_usec /= 2; } - // ESP_LOGI(TAG, - //"Current - // latency: %ld.%06ld", tmpDiffToServer.tv_sec, - // tmpDiffToServer.tv_usec); + // ESP_LOGI(TAG, + // "Current latency: %ld.%06ld", + // tmpDiffToServer.tv_sec, + // tmpDiffToServer.tv_usec); // TODO: Move the time message sending to an own thread maybe // following code is storing / initializing / resetting diff @@ -1309,7 +3514,8 @@ http_get_task (void *pvParameters) + (int64_t)tmpDiffToServer.tv_usec); player_latency_insert (newValue); - // ESP_LOGE(TAG, "latency %lld", newValue); + // ESP_LOGE(TAG, "latency %lld", + // newValue); // store current time lastTimeSync.tv_sec = now.tv_sec; @@ -1345,10 +3551,11 @@ http_get_task (void *pvParameters) break; } - if (typedMsg != NULL) - { - free (typedMsg); - } + // if (typedMsg != NULL) + // { + // free (typedMsg); + // typedMsg = NULL; + // } } if (received_header == true) @@ -1423,8 +3630,8 @@ http_get_task (void *pvParameters) break; // stop for(;;) will try to reconnect then } - // ESP_LOGI(TAG, "sent time sync message %ld.%06ld", - // now.tv_sec, now.tv_usec); + // ESP_LOGI(TAG, "sent time sync message + // %ld.%06ld", now.tv_sec, now.tv_usec); } } @@ -1460,6 +3667,8 @@ app_main (void) audio_hal_ctrl_codec (board_handle->audio_hal, AUDIO_HAL_CODEC_MODE_BOTH, AUDIO_HAL_CTRL_START); + audio_hal_set_mute (board_handle->audio_hal, + true); // ensure no noise is sent after firmware crash i2s_mclk_gpio_select (0, 0); // setup_ma120(); @@ -1483,13 +3692,61 @@ app_main (void) #ifdef CONFIG_SNAPCLIENT_SNTP_ENABLE set_time_from_sntp (); #endif - xTaskCreatePinnedToCore (&ota_server_task, "ota_server_task", 4096, NULL, + + xTaskCreatePinnedToCore (&ota_server_task, "ota", 14 * 256, NULL, OTA_TASK_PRIORITY, t_ota_task, OTA_TASK_CORE_ID); - xTaskCreatePinnedToCore (&http_get_task, "http_get_task", 4 * 4096, NULL, + // xTaskCreatePinnedToCore (&http_get_task, "http", 10 * 256, NULL, + // HTTP_TASK_PRIORITY, &t_http_get_task, + // HTTP_TASK_CORE_ID); + + /* + +// struct netconn *lwipNetconn; + struct ip_addr local_ip; + struct ip_addr remote_ip; + uint16_t remotePort = 1704; + int rc1, rc2; +// +// while(1) { + lwipNetconn = netconn_new(NETCONN_TCP); + if ( lwipNetconn == NULL ) { + ESP_LOGE (TAG, "can't create netconn"); + +// continue; + } +// + local_ip.u_addr.ip4.addr = get_current_ip4().addr; + rc1 = netconn_bind ( lwipNetconn, &local_ip, 0 ); + if (rc1 != ERR_OK) { + ESP_LOGE (TAG, "can't bind local IP"); + } + remote_ip.u_addr.ip4.addr = ipaddr_addr("192.168.1.54"); + rc2 = netconn_connect ( lwipNetconn, &remote_ip, remotePort ); + if (rc2 != ERR_OK) { + ESP_LOGE (TAG, "can't connect to remote"); + } + if ( rc1 != ERR_OK || rc2 != ERR_OK ) + { + netconn_delete ( lwipNetconn ); +// continue; + } + + ESP_LOGI (TAG, "netconn connected"); +// +// while (1) { +// vTaskDelay(10); +// } +// } + + */ + + xTaskCreatePinnedToCore (&http_get_task, "http", 3 * 1024, NULL, HTTP_TASK_PRIORITY, &t_http_get_task, HTTP_TASK_CORE_ID); + // start_wifi_logger(); // Start wifi logger + while (1) { // audio_event_iface_msg_t msg; diff --git a/sdkconfig b/sdkconfig index ef0078e..d92ae5e 100644 --- a/sdkconfig +++ b/sdkconfig @@ -152,11 +152,19 @@ CONFIG_SNTP_TIMEZONE="UTC" CONFIG_SNTP_SERVER="pool.ntp.org" # end of SNTP Configuration +# +# Example Connection Configuration +# +# CONFIG_EXAMPLE_CONNECT_WIFI is not set +# CONFIG_EXAMPLE_CONNECT_ETHERNET is not set +# CONFIG_EXAMPLE_CONNECT_IPV6 is not set +# end of Example Connection Configuration + # # Wifi Configuration # CONFIG_ENABLE_WIFI_PROVISIONING=y -CONFIG_WIFI_MAXIMUM_RETRY=5 +CONFIG_WIFI_MAXIMUM_RETRY=0 # end of Wifi Configuration # @@ -244,6 +252,7 @@ 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 # @@ -270,9 +279,9 @@ CONFIG_ADC_DISABLE_DAC=y # SPI configuration # # CONFIG_SPI_MASTER_IN_IRAM is not set -CONFIG_SPI_MASTER_ISR_IN_IRAM=y +# CONFIG_SPI_MASTER_ISR_IN_IRAM is not set # CONFIG_SPI_SLAVE_IN_IRAM is not set -CONFIG_SPI_SLAVE_ISR_IN_IRAM=y +# CONFIG_SPI_SLAVE_ISR_IN_IRAM is not set # end of SPI configuration # @@ -375,6 +384,7 @@ CONFIG_ESP32_XTAL_FREQ=40 # CONFIG_ESP32_DISABLE_BASIC_ROM_CONSOLE is not set # CONFIG_ESP32_NO_BLOBS is not set # CONFIG_ESP32_COMPATIBLE_PRE_V2_1_BOOTLOADERS is not set +# CONFIG_ESP32_COMPATIBLE_PRE_V3_1_BOOTLOADERS is not set # CONFIG_ESP32_USE_FIXED_STATIC_RAM_SIZE is not set CONFIG_ESP32_DPORT_DIS_INTERRUPT_LVL=5 # end of ESP32-specific @@ -525,23 +535,28 @@ CONFIG_ESP_TIMER_IMPL_TG0_LAC=y # # Wi-Fi # -CONFIG_ESP32_WIFI_STATIC_RX_BUFFER_NUM=6 -CONFIG_ESP32_WIFI_DYNAMIC_RX_BUFFER_NUM=24 +CONFIG_ESP32_WIFI_STATIC_RX_BUFFER_NUM=25 +CONFIG_ESP32_WIFI_DYNAMIC_RX_BUFFER_NUM=128 # CONFIG_ESP32_WIFI_STATIC_TX_BUFFER is not set CONFIG_ESP32_WIFI_DYNAMIC_TX_BUFFER=y CONFIG_ESP32_WIFI_TX_BUFFER_TYPE=1 -CONFIG_ESP32_WIFI_DYNAMIC_TX_BUFFER_NUM=18 +CONFIG_ESP32_WIFI_DYNAMIC_TX_BUFFER_NUM=16 # CONFIG_ESP32_WIFI_CSI_ENABLED is not set CONFIG_ESP32_WIFI_AMPDU_TX_ENABLED=y -CONFIG_ESP32_WIFI_TX_BA_WIN=12 +CONFIG_ESP32_WIFI_TX_BA_WIN=16 CONFIG_ESP32_WIFI_AMPDU_RX_ENABLED=y -CONFIG_ESP32_WIFI_RX_BA_WIN=6 +CONFIG_ESP32_WIFI_RX_BA_WIN=25 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 CONFIG_ESP32_WIFI_SOFTAP_BEACON_MAX_LEN=752 CONFIG_ESP32_WIFI_MGMT_SBUF_NUM=32 -# CONFIG_ESP32_WIFI_DEBUG_LOG_ENABLE is not set +# 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=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_ENABLE_WPA3_SAE=y @@ -662,7 +677,7 @@ CONFIG_FREERTOS_QUEUE_REGISTRY_SIZE=0 # CONFIG_FREERTOS_GENERATE_RUN_TIME_STATS is not set CONFIG_FREERTOS_CHECK_MUTEX_GIVEN_BY_OWNER=y # CONFIG_FREERTOS_CHECK_PORT_CRITICAL_COMPLIANCE is not set -# CONFIG_FREERTOS_PLACE_FUNCTIONS_INTO_FLASH is not set +CONFIG_FREERTOS_PLACE_FUNCTIONS_INTO_FLASH=y CONFIG_FREERTOS_DEBUG_OCDAWARE=y # CONFIG_FREERTOS_FPU_IN_ISR is not set # end of FreeRTOS @@ -702,8 +717,8 @@ CONFIG_LOG_DEFAULT_LEVEL_INFO=y # CONFIG_LOG_DEFAULT_LEVEL_VERBOSE is not set CONFIG_LOG_DEFAULT_LEVEL=3 CONFIG_LOG_COLORS=y -CONFIG_LOG_TIMESTAMP_SOURCE_RTOS=y -# CONFIG_LOG_TIMESTAMP_SOURCE_SYSTEM is not set +# CONFIG_LOG_TIMESTAMP_SOURCE_RTOS is not set +CONFIG_LOG_TIMESTAMP_SOURCE_SYSTEM=y # end of Log output # @@ -718,7 +733,7 @@ CONFIG_LWIP_MAX_SOCKETS=6 # CONFIG_LWIP_USE_ONLY_LWIP_SELECT is not set # CONFIG_LWIP_SO_LINGER is not set CONFIG_LWIP_SO_REUSE=y -CONFIG_LWIP_SO_REUSE_RXTOALL=y +# CONFIG_LWIP_SO_REUSE_RXTOALL is not set # CONFIG_LWIP_SO_RCVBUF is not set # CONFIG_LWIP_NETBUF_RECVINFO is not set CONFIG_LWIP_IP4_FRAG=y @@ -726,17 +741,19 @@ CONFIG_LWIP_IP6_FRAG=y # CONFIG_LWIP_IP4_REASSEMBLY is not set # CONFIG_LWIP_IP6_REASSEMBLY is not set # CONFIG_LWIP_IP_FORWARD is not set -CONFIG_LWIP_STATS=y +# CONFIG_LWIP_STATS is not set # CONFIG_LWIP_ETHARP_TRUST_IP_MAC is not set CONFIG_LWIP_ESP_GRATUITOUS_ARP=y CONFIG_LWIP_GARP_TMR_INTERVAL=60 -CONFIG_LWIP_TCPIP_RECVMBOX_SIZE=12 +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 # # DHCP server # +CONFIG_LWIP_DHCPS=y CONFIG_LWIP_DHCPS_LEASE_UNIT=60 CONFIG_LWIP_DHCPS_MAX_STATION_NUM=8 # end of DHCP server @@ -750,7 +767,7 @@ CONFIG_LWIP_LOOPBACK_MAX_PBUFS=8 # # TCP # -CONFIG_LWIP_MAX_ACTIVE_TCP=3 +CONFIG_LWIP_MAX_ACTIVE_TCP=6 CONFIG_LWIP_MAX_LISTENING_TCP=3 CONFIG_LWIP_TCP_HIGH_SPEED_RETRANSMISSION=y CONFIG_LWIP_TCP_MAXRTX=12 @@ -758,11 +775,11 @@ CONFIG_LWIP_TCP_SYNMAXRTX=12 CONFIG_LWIP_TCP_MSS=1460 CONFIG_LWIP_TCP_TMR_INTERVAL=250 CONFIG_LWIP_TCP_MSL=60000 -CONFIG_LWIP_TCP_SND_BUF_DEFAULT=5840 -CONFIG_LWIP_TCP_WND_DEFAULT=5840 -CONFIG_LWIP_TCP_RECVMBOX_SIZE=12 +CONFIG_LWIP_TCP_SND_BUF_DEFAULT=65534 +CONFIG_LWIP_TCP_WND_DEFAULT=65534 +CONFIG_LWIP_TCP_RECVMBOX_SIZE=6 CONFIG_LWIP_TCP_QUEUE_OOSEQ=y -# CONFIG_LWIP_TCP_SACK_OUT is not set +CONFIG_LWIP_TCP_SACK_OUT=y # CONFIG_LWIP_TCP_KEEP_CONNECTION_WHEN_IP_CHANGES is not set CONFIG_LWIP_TCP_OVERSIZE_MSS=y # CONFIG_LWIP_TCP_OVERSIZE_QUARTER_MSS is not set @@ -785,7 +802,7 @@ CONFIG_LWIP_UDP_RECVMBOX_SIZE=6 CONFIG_LWIP_CHECKSUM_CHECK_ICMP=y # end of Checksums -CONFIG_LWIP_TCPIP_TASK_STACK_SIZE=2048 +CONFIG_LWIP_TCPIP_TASK_STACK_SIZE=3072 CONFIG_LWIP_TCPIP_TASK_AFFINITY_NO_AFFINITY=y # CONFIG_LWIP_TCPIP_TASK_AFFINITY_CPU0 is not set # CONFIG_LWIP_TCPIP_TASK_AFFINITY_CPU1 is not set @@ -798,6 +815,7 @@ CONFIG_LWIP_IPV6_ND6_NUM_NEIGHBORS=5 # # ICMP # +CONFIG_LWIP_ICMP=y # CONFIG_LWIP_MULTICAST_PING is not set # CONFIG_LWIP_BROADCAST_PING is not set # end of ICMP @@ -849,11 +867,7 @@ CONFIG_MBEDTLS_SSL_OUT_CONTENT_LEN=4096 # # Certificate Bundle # -CONFIG_MBEDTLS_CERTIFICATE_BUNDLE=y -CONFIG_MBEDTLS_CERTIFICATE_BUNDLE_DEFAULT_FULL=y -# CONFIG_MBEDTLS_CERTIFICATE_BUNDLE_DEFAULT_CMN is not set -# CONFIG_MBEDTLS_CERTIFICATE_BUNDLE_DEFAULT_NONE is not set -# CONFIG_MBEDTLS_CUSTOM_CERTIFICATE_BUNDLE is not set +# CONFIG_MBEDTLS_CERTIFICATE_BUNDLE is not set # end of Certificate Bundle # CONFIG_MBEDTLS_ECP_RESTARTABLE is not set @@ -897,6 +911,8 @@ CONFIG_MBEDTLS_SSL_PROTO_TLS1_2=y # CONFIG_MBEDTLS_SSL_PROTO_DTLS is not set CONFIG_MBEDTLS_SSL_ALPN=y CONFIG_MBEDTLS_CLIENT_SSL_SESSION_TICKETS=y +CONFIG_MBEDTLS_X509_CHECK_KEY_USAGE=y +CONFIG_MBEDTLS_X509_CHECK_EXTENDED_KEY_USAGE=y CONFIG_MBEDTLS_SERVER_SSL_SESSION_TICKETS=y # @@ -912,6 +928,7 @@ CONFIG_MBEDTLS_RC4_DISABLED=y # CONFIG_MBEDTLS_XTEA_C is not set CONFIG_MBEDTLS_CCM_C=y CONFIG_MBEDTLS_GCM_C=y +# CONFIG_MBEDTLS_NIST_KW_C is not set # end of Symmetric Ciphers # CONFIG_MBEDTLS_RIPEMD160_C is not set @@ -955,7 +972,7 @@ CONFIG_MBEDTLS_ECP_NIST_OPTIM=y # CONFIG_MDNS_MAX_SERVICES=10 CONFIG_MDNS_TASK_PRIORITY=1 -CONFIG_MDNS_TASK_STACK_SIZE=2048 +CONFIG_MDNS_TASK_STACK_SIZE=2304 CONFIG_MDNS_TASK_AFFINITY_NO_AFFINITY=y # CONFIG_MDNS_TASK_AFFINITY_CPU0 is not set # CONFIG_MDNS_TASK_AFFINITY_CPU1 is not set @@ -1089,7 +1106,13 @@ CONFIG_SPIFFS_USE_MTIME=y # # TCP Transport # + +# +# Websocket +# +CONFIG_WS_TRANSPORT=y CONFIG_WS_BUFFER_SIZE=1024 +# end of Websocket # end of TCP Transport # @@ -1136,7 +1159,7 @@ CONFIG_WPA_MBEDTLS_CRYPTO=y # CONFIG_WPA_WAPI_PSK is not set # CONFIG_WPA_DEBUG_PRINT is not set # CONFIG_WPA_TESTING_OPTIONS is not set -# CONFIG_WPA_WPS_WARS is not set +# CONFIG_WPA_WPS_STRICT is not set # CONFIG_WPA_11KV_SUPPORT is not set # end of Supplicant @@ -1166,6 +1189,19 @@ CONFIG_WEBSOCKET_SERVER_TASK_STACK_DEPTH=3000 CONFIG_WEBSOCKET_SERVER_TASK_PRIORITY=5 # CONFIG_WEBSOCKET_SERVER_PINNED is not set # end of WebSocket Server + +# +# WiFi Logger configuration +# +CONFIG_TRANSPORT_PROTOCOL_UDP=y +# CONFIG_TRANSPORT_PROTOCOL_TCP is not set +# CONFIG_TRANSPORT_PROTOCOL_WEBSOCKET is not set +CONFIG_ROUTE_ESP_IDF_API_LOGS_TO_WIFI=y +CONFIG_SERVER_IP_ADDRESS="192.168.0.10" +CONFIG_SERVER_PORT=9999 +CONFIG_MESSAGE_QUEUE_SIZE=1000 +CONFIG_BUFFER_SIZE=512 +# end of WiFi Logger configuration # end of Component config # @@ -1296,21 +1332,21 @@ CONFIG_TIMER_QUEUE_LENGTH=5 # CONFIG_USE_ONLY_LWIP_SELECT is not set CONFIG_ESP_GRATUITOUS_ARP=y CONFIG_GARP_TMR_INTERVAL=60 -CONFIG_TCPIP_RECVMBOX_SIZE=12 +CONFIG_TCPIP_RECVMBOX_SIZE=32 CONFIG_TCP_MAXRTX=12 CONFIG_TCP_SYNMAXRTX=12 CONFIG_TCP_MSS=1460 CONFIG_TCP_MSL=60000 -CONFIG_TCP_SND_BUF_DEFAULT=5840 -CONFIG_TCP_WND_DEFAULT=5840 -CONFIG_TCP_RECVMBOX_SIZE=12 +CONFIG_TCP_SND_BUF_DEFAULT=65534 +CONFIG_TCP_WND_DEFAULT=65534 +CONFIG_TCP_RECVMBOX_SIZE=6 CONFIG_TCP_QUEUE_OOSEQ=y # CONFIG_ESP_TCP_KEEP_CONNECTION_WHEN_IP_CHANGES is not set CONFIG_TCP_OVERSIZE_MSS=y # CONFIG_TCP_OVERSIZE_QUARTER_MSS is not set # CONFIG_TCP_OVERSIZE_DISABLE is not set CONFIG_UDP_RECVMBOX_SIZE=6 -CONFIG_TCPIP_TASK_STACK_SIZE=2048 +CONFIG_TCPIP_TASK_STACK_SIZE=3072 CONFIG_TCPIP_TASK_AFFINITY_NO_AFFINITY=y # CONFIG_TCPIP_TASK_AFFINITY_CPU0 is not set # CONFIG_TCPIP_TASK_AFFINITY_CPU1 is not set diff --git a/sdkconfig.old b/sdkconfig.old index 58c27a6..d03b292 100644 --- a/sdkconfig.old +++ b/sdkconfig.old @@ -152,11 +152,19 @@ CONFIG_SNTP_TIMEZONE="UTC" CONFIG_SNTP_SERVER="pool.ntp.org" # end of SNTP Configuration +# +# Example Connection Configuration +# +# CONFIG_EXAMPLE_CONNECT_WIFI is not set +# CONFIG_EXAMPLE_CONNECT_ETHERNET is not set +# CONFIG_EXAMPLE_CONNECT_IPV6 is not set +# end of Example Connection Configuration + # # Wifi Configuration # CONFIG_ENABLE_WIFI_PROVISIONING=y -CONFIG_WIFI_MAXIMUM_RETRY=5 +CONFIG_WIFI_MAXIMUM_RETRY=0 # end of Wifi Configuration # @@ -244,6 +252,7 @@ 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 # @@ -270,9 +279,9 @@ CONFIG_ADC_DISABLE_DAC=y # SPI configuration # # CONFIG_SPI_MASTER_IN_IRAM is not set -CONFIG_SPI_MASTER_ISR_IN_IRAM=y +# CONFIG_SPI_MASTER_ISR_IN_IRAM is not set # CONFIG_SPI_SLAVE_IN_IRAM is not set -CONFIG_SPI_SLAVE_ISR_IN_IRAM=y +# CONFIG_SPI_SLAVE_ISR_IN_IRAM is not set # end of SPI configuration # @@ -375,6 +384,7 @@ CONFIG_ESP32_XTAL_FREQ=40 # CONFIG_ESP32_DISABLE_BASIC_ROM_CONSOLE is not set # CONFIG_ESP32_NO_BLOBS is not set # CONFIG_ESP32_COMPATIBLE_PRE_V2_1_BOOTLOADERS is not set +# CONFIG_ESP32_COMPATIBLE_PRE_V3_1_BOOTLOADERS is not set # CONFIG_ESP32_USE_FIXED_STATIC_RAM_SIZE is not set CONFIG_ESP32_DPORT_DIS_INTERRUPT_LVL=5 # end of ESP32-specific @@ -525,28 +535,33 @@ CONFIG_ESP_TIMER_IMPL_TG0_LAC=y # # Wi-Fi # -CONFIG_ESP32_WIFI_STATIC_RX_BUFFER_NUM=6 -CONFIG_ESP32_WIFI_DYNAMIC_RX_BUFFER_NUM=24 +CONFIG_ESP32_WIFI_STATIC_RX_BUFFER_NUM=25 +CONFIG_ESP32_WIFI_DYNAMIC_RX_BUFFER_NUM=128 # CONFIG_ESP32_WIFI_STATIC_TX_BUFFER is not set CONFIG_ESP32_WIFI_DYNAMIC_TX_BUFFER=y CONFIG_ESP32_WIFI_TX_BUFFER_TYPE=1 -CONFIG_ESP32_WIFI_DYNAMIC_TX_BUFFER_NUM=18 +CONFIG_ESP32_WIFI_DYNAMIC_TX_BUFFER_NUM=16 # CONFIG_ESP32_WIFI_CSI_ENABLED is not set CONFIG_ESP32_WIFI_AMPDU_TX_ENABLED=y -CONFIG_ESP32_WIFI_TX_BA_WIN=12 +CONFIG_ESP32_WIFI_TX_BA_WIN=16 CONFIG_ESP32_WIFI_AMPDU_RX_ENABLED=y -CONFIG_ESP32_WIFI_RX_BA_WIN=6 +CONFIG_ESP32_WIFI_RX_BA_WIN=25 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 CONFIG_ESP32_WIFI_SOFTAP_BEACON_MAX_LEN=752 CONFIG_ESP32_WIFI_MGMT_SBUF_NUM=32 -# CONFIG_ESP32_WIFI_DEBUG_LOG_ENABLE is not set -CONFIG_ESP32_WIFI_IRAM_OPT=y -CONFIG_ESP32_WIFI_RX_IRAM_OPT=y +# 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=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_ENABLE_WPA3_SAE=y # CONFIG_ESP_WIFI_SLP_IRAM_OPT is not set -CONFIG_ESP_WIFI_STA_DISCONNECTED_PM_ENABLE=y +# CONFIG_ESP_WIFI_STA_DISCONNECTED_PM_ENABLE is not set # end of Wi-Fi # @@ -662,7 +677,7 @@ CONFIG_FREERTOS_QUEUE_REGISTRY_SIZE=0 # CONFIG_FREERTOS_GENERATE_RUN_TIME_STATS is not set CONFIG_FREERTOS_CHECK_MUTEX_GIVEN_BY_OWNER=y # CONFIG_FREERTOS_CHECK_PORT_CRITICAL_COMPLIANCE is not set -# CONFIG_FREERTOS_PLACE_FUNCTIONS_INTO_FLASH is not set +CONFIG_FREERTOS_PLACE_FUNCTIONS_INTO_FLASH=y CONFIG_FREERTOS_DEBUG_OCDAWARE=y # CONFIG_FREERTOS_FPU_IN_ISR is not set # end of FreeRTOS @@ -702,8 +717,8 @@ CONFIG_LOG_DEFAULT_LEVEL_INFO=y # CONFIG_LOG_DEFAULT_LEVEL_VERBOSE is not set CONFIG_LOG_DEFAULT_LEVEL=3 CONFIG_LOG_COLORS=y -CONFIG_LOG_TIMESTAMP_SOURCE_RTOS=y -# CONFIG_LOG_TIMESTAMP_SOURCE_SYSTEM is not set +# CONFIG_LOG_TIMESTAMP_SOURCE_RTOS is not set +CONFIG_LOG_TIMESTAMP_SOURCE_SYSTEM=y # end of Log output # @@ -718,7 +733,7 @@ CONFIG_LWIP_MAX_SOCKETS=6 # CONFIG_LWIP_USE_ONLY_LWIP_SELECT is not set # CONFIG_LWIP_SO_LINGER is not set CONFIG_LWIP_SO_REUSE=y -CONFIG_LWIP_SO_REUSE_RXTOALL=y +# CONFIG_LWIP_SO_REUSE_RXTOALL is not set # CONFIG_LWIP_SO_RCVBUF is not set # CONFIG_LWIP_NETBUF_RECVINFO is not set CONFIG_LWIP_IP4_FRAG=y @@ -726,17 +741,19 @@ CONFIG_LWIP_IP6_FRAG=y # CONFIG_LWIP_IP4_REASSEMBLY is not set # CONFIG_LWIP_IP6_REASSEMBLY is not set # CONFIG_LWIP_IP_FORWARD is not set -CONFIG_LWIP_STATS=y +# CONFIG_LWIP_STATS is not set # CONFIG_LWIP_ETHARP_TRUST_IP_MAC is not set CONFIG_LWIP_ESP_GRATUITOUS_ARP=y CONFIG_LWIP_GARP_TMR_INTERVAL=60 -CONFIG_LWIP_TCPIP_RECVMBOX_SIZE=12 +CONFIG_LWIP_TCPIP_RECVMBOX_SIZE=64 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 # # DHCP server # +CONFIG_LWIP_DHCPS=y CONFIG_LWIP_DHCPS_LEASE_UNIT=60 CONFIG_LWIP_DHCPS_MAX_STATION_NUM=8 # end of DHCP server @@ -750,7 +767,7 @@ CONFIG_LWIP_LOOPBACK_MAX_PBUFS=8 # # TCP # -CONFIG_LWIP_MAX_ACTIVE_TCP=3 +CONFIG_LWIP_MAX_ACTIVE_TCP=6 CONFIG_LWIP_MAX_LISTENING_TCP=3 CONFIG_LWIP_TCP_HIGH_SPEED_RETRANSMISSION=y CONFIG_LWIP_TCP_MAXRTX=12 @@ -758,11 +775,11 @@ CONFIG_LWIP_TCP_SYNMAXRTX=12 CONFIG_LWIP_TCP_MSS=1460 CONFIG_LWIP_TCP_TMR_INTERVAL=250 CONFIG_LWIP_TCP_MSL=60000 -CONFIG_LWIP_TCP_SND_BUF_DEFAULT=5840 -CONFIG_LWIP_TCP_WND_DEFAULT=5840 -CONFIG_LWIP_TCP_RECVMBOX_SIZE=12 +CONFIG_LWIP_TCP_SND_BUF_DEFAULT=65534 +CONFIG_LWIP_TCP_WND_DEFAULT=65534 +CONFIG_LWIP_TCP_RECVMBOX_SIZE=64 CONFIG_LWIP_TCP_QUEUE_OOSEQ=y -# CONFIG_LWIP_TCP_SACK_OUT is not set +CONFIG_LWIP_TCP_SACK_OUT=y # CONFIG_LWIP_TCP_KEEP_CONNECTION_WHEN_IP_CHANGES is not set CONFIG_LWIP_TCP_OVERSIZE_MSS=y # CONFIG_LWIP_TCP_OVERSIZE_QUARTER_MSS is not set @@ -785,7 +802,7 @@ CONFIG_LWIP_UDP_RECVMBOX_SIZE=6 CONFIG_LWIP_CHECKSUM_CHECK_ICMP=y # end of Checksums -CONFIG_LWIP_TCPIP_TASK_STACK_SIZE=2048 +CONFIG_LWIP_TCPIP_TASK_STACK_SIZE=3072 CONFIG_LWIP_TCPIP_TASK_AFFINITY_NO_AFFINITY=y # CONFIG_LWIP_TCPIP_TASK_AFFINITY_CPU0 is not set # CONFIG_LWIP_TCPIP_TASK_AFFINITY_CPU1 is not set @@ -798,6 +815,7 @@ CONFIG_LWIP_IPV6_ND6_NUM_NEIGHBORS=5 # # ICMP # +CONFIG_LWIP_ICMP=y # CONFIG_LWIP_MULTICAST_PING is not set # CONFIG_LWIP_BROADCAST_PING is not set # end of ICMP @@ -849,11 +867,7 @@ CONFIG_MBEDTLS_SSL_OUT_CONTENT_LEN=4096 # # Certificate Bundle # -CONFIG_MBEDTLS_CERTIFICATE_BUNDLE=y -CONFIG_MBEDTLS_CERTIFICATE_BUNDLE_DEFAULT_FULL=y -# CONFIG_MBEDTLS_CERTIFICATE_BUNDLE_DEFAULT_CMN is not set -# CONFIG_MBEDTLS_CERTIFICATE_BUNDLE_DEFAULT_NONE is not set -# CONFIG_MBEDTLS_CUSTOM_CERTIFICATE_BUNDLE is not set +# CONFIG_MBEDTLS_CERTIFICATE_BUNDLE is not set # end of Certificate Bundle # CONFIG_MBEDTLS_ECP_RESTARTABLE is not set @@ -897,6 +911,8 @@ CONFIG_MBEDTLS_SSL_PROTO_TLS1_2=y # CONFIG_MBEDTLS_SSL_PROTO_DTLS is not set CONFIG_MBEDTLS_SSL_ALPN=y CONFIG_MBEDTLS_CLIENT_SSL_SESSION_TICKETS=y +CONFIG_MBEDTLS_X509_CHECK_KEY_USAGE=y +CONFIG_MBEDTLS_X509_CHECK_EXTENDED_KEY_USAGE=y CONFIG_MBEDTLS_SERVER_SSL_SESSION_TICKETS=y # @@ -912,6 +928,7 @@ CONFIG_MBEDTLS_RC4_DISABLED=y # CONFIG_MBEDTLS_XTEA_C is not set CONFIG_MBEDTLS_CCM_C=y CONFIG_MBEDTLS_GCM_C=y +# CONFIG_MBEDTLS_NIST_KW_C is not set # end of Symmetric Ciphers # CONFIG_MBEDTLS_RIPEMD160_C is not set @@ -955,7 +972,7 @@ CONFIG_MBEDTLS_ECP_NIST_OPTIM=y # CONFIG_MDNS_MAX_SERVICES=10 CONFIG_MDNS_TASK_PRIORITY=1 -CONFIG_MDNS_TASK_STACK_SIZE=2048 +CONFIG_MDNS_TASK_STACK_SIZE=2304 CONFIG_MDNS_TASK_AFFINITY_NO_AFFINITY=y # CONFIG_MDNS_TASK_AFFINITY_CPU0 is not set # CONFIG_MDNS_TASK_AFFINITY_CPU1 is not set @@ -1089,7 +1106,13 @@ CONFIG_SPIFFS_USE_MTIME=y # # TCP Transport # + +# +# Websocket +# +CONFIG_WS_TRANSPORT=y CONFIG_WS_BUFFER_SIZE=1024 +# end of Websocket # end of TCP Transport # @@ -1136,7 +1159,7 @@ CONFIG_WPA_MBEDTLS_CRYPTO=y # CONFIG_WPA_WAPI_PSK is not set # CONFIG_WPA_DEBUG_PRINT is not set # CONFIG_WPA_TESTING_OPTIONS is not set -# CONFIG_WPA_WPS_WARS is not set +# CONFIG_WPA_WPS_STRICT is not set # CONFIG_WPA_11KV_SUPPORT is not set # end of Supplicant @@ -1166,6 +1189,19 @@ CONFIG_WEBSOCKET_SERVER_TASK_STACK_DEPTH=3000 CONFIG_WEBSOCKET_SERVER_TASK_PRIORITY=5 # CONFIG_WEBSOCKET_SERVER_PINNED is not set # end of WebSocket Server + +# +# WiFi Logger configuration +# +CONFIG_TRANSPORT_PROTOCOL_UDP=y +# CONFIG_TRANSPORT_PROTOCOL_TCP is not set +# CONFIG_TRANSPORT_PROTOCOL_WEBSOCKET is not set +CONFIG_ROUTE_ESP_IDF_API_LOGS_TO_WIFI=y +CONFIG_SERVER_IP_ADDRESS="192.168.0.10" +CONFIG_SERVER_PORT=9999 +CONFIG_MESSAGE_QUEUE_SIZE=1000 +CONFIG_BUFFER_SIZE=512 +# end of WiFi Logger configuration # end of Component config # @@ -1296,21 +1332,21 @@ CONFIG_TIMER_QUEUE_LENGTH=5 # CONFIG_USE_ONLY_LWIP_SELECT is not set CONFIG_ESP_GRATUITOUS_ARP=y CONFIG_GARP_TMR_INTERVAL=60 -CONFIG_TCPIP_RECVMBOX_SIZE=12 +CONFIG_TCPIP_RECVMBOX_SIZE=64 CONFIG_TCP_MAXRTX=12 CONFIG_TCP_SYNMAXRTX=12 CONFIG_TCP_MSS=1460 CONFIG_TCP_MSL=60000 -CONFIG_TCP_SND_BUF_DEFAULT=5840 -CONFIG_TCP_WND_DEFAULT=5840 -CONFIG_TCP_RECVMBOX_SIZE=12 +CONFIG_TCP_SND_BUF_DEFAULT=65534 +CONFIG_TCP_WND_DEFAULT=65534 +CONFIG_TCP_RECVMBOX_SIZE=64 CONFIG_TCP_QUEUE_OOSEQ=y # CONFIG_ESP_TCP_KEEP_CONNECTION_WHEN_IP_CHANGES is not set CONFIG_TCP_OVERSIZE_MSS=y # CONFIG_TCP_OVERSIZE_QUARTER_MSS is not set # CONFIG_TCP_OVERSIZE_DISABLE is not set CONFIG_UDP_RECVMBOX_SIZE=6 -CONFIG_TCPIP_TASK_STACK_SIZE=2048 +CONFIG_TCPIP_TASK_STACK_SIZE=3072 CONFIG_TCPIP_TASK_AFFINITY_NO_AFFINITY=y # CONFIG_TCPIP_TASK_AFFINITY_CPU0 is not set # CONFIG_TCPIP_TASK_AFFINITY_CPU1 is not set diff --git a/sdkconfig_NO_SPI_RAM b/sdkconfig_NO_SPI_RAM deleted file mode 100644 index 7dbb1d9..0000000 --- a/sdkconfig_NO_SPI_RAM +++ /dev/null @@ -1,1330 +0,0 @@ -# -# Automatically generated file. DO NOT EDIT. -# Espressif IoT Development Framework (ESP-IDF) Project Configuration -# -CONFIG_IDF_CMAKE=y -CONFIG_IDF_TARGET_ARCH_XTENSA=y -CONFIG_IDF_TARGET="esp32" -CONFIG_IDF_TARGET_ESP32=y -CONFIG_IDF_FIRMWARE_CHIP_ID=0x0000 - -# -# SDK tool configuration -# -CONFIG_SDK_TOOLPREFIX="xtensa-esp32-elf-" -# CONFIG_SDK_TOOLCHAIN_SUPPORTS_TIME_WIDE_64_BITS is not set -# end of SDK tool configuration - -# -# Build type -# -CONFIG_APP_BUILD_TYPE_APP_2NDBOOT=y -# CONFIG_APP_BUILD_TYPE_ELF_RAM is not set -CONFIG_APP_BUILD_GENERATE_BINARIES=y -CONFIG_APP_BUILD_BOOTLOADER=y -CONFIG_APP_BUILD_USE_FLASH_SECTIONS=y -# end of Build type - -# -# Application manager -# -CONFIG_APP_COMPILE_TIME_DATE=y -# CONFIG_APP_EXCLUDE_PROJECT_VER_VAR is not set -# CONFIG_APP_EXCLUDE_PROJECT_NAME_VAR is not set -# CONFIG_APP_PROJECT_VER_FROM_CONFIG is not set -CONFIG_APP_RETRIEVE_LEN_ELF_SHA=16 -# end of Application manager - -# -# Bootloader config -# -CONFIG_BOOTLOADER_OFFSET_IN_FLASH=0x1000 -CONFIG_BOOTLOADER_COMPILER_OPTIMIZATION_SIZE=y -# CONFIG_BOOTLOADER_COMPILER_OPTIMIZATION_DEBUG is not set -# CONFIG_BOOTLOADER_COMPILER_OPTIMIZATION_PERF is not set -# CONFIG_BOOTLOADER_COMPILER_OPTIMIZATION_NONE is not set -# CONFIG_BOOTLOADER_LOG_LEVEL_NONE is not set -# CONFIG_BOOTLOADER_LOG_LEVEL_ERROR is not set -# CONFIG_BOOTLOADER_LOG_LEVEL_WARN is not set -CONFIG_BOOTLOADER_LOG_LEVEL_INFO=y -# CONFIG_BOOTLOADER_LOG_LEVEL_DEBUG is not set -# CONFIG_BOOTLOADER_LOG_LEVEL_VERBOSE is not set -CONFIG_BOOTLOADER_LOG_LEVEL=3 -CONFIG_BOOTLOADER_VDDSDIO_BOOST_1_9V=y -# CONFIG_BOOTLOADER_FACTORY_RESET is not set -# CONFIG_BOOTLOADER_APP_TEST is not set -CONFIG_BOOTLOADER_WDT_ENABLE=y -# CONFIG_BOOTLOADER_WDT_DISABLE_IN_USER_CODE is not set -CONFIG_BOOTLOADER_WDT_TIME_MS=9000 -CONFIG_BOOTLOADER_APP_ROLLBACK_ENABLE=y -# CONFIG_BOOTLOADER_APP_ANTI_ROLLBACK is not set -# CONFIG_BOOTLOADER_SKIP_VALIDATE_IN_DEEP_SLEEP is not set -# CONFIG_BOOTLOADER_SKIP_VALIDATE_ON_POWER_ON is not set -# CONFIG_BOOTLOADER_SKIP_VALIDATE_ALWAYS is not set -CONFIG_BOOTLOADER_RESERVE_RTC_SIZE=0 -# CONFIG_BOOTLOADER_CUSTOM_RESERVE_RTC is not set -# end of Bootloader config - -# -# Security features -# -# CONFIG_SECURE_SIGNED_APPS_NO_SECURE_BOOT is not set -# CONFIG_SECURE_BOOT is not set -# CONFIG_SECURE_FLASH_ENC_ENABLED is not set -# end of Security features - -# -# Serial flasher config -# -CONFIG_ESPTOOLPY_BAUD_OTHER_VAL=115200 -# CONFIG_ESPTOOLPY_NO_STUB is not set -# CONFIG_ESPTOOLPY_FLASHMODE_QIO is not set -# CONFIG_ESPTOOLPY_FLASHMODE_QOUT is not set -CONFIG_ESPTOOLPY_FLASHMODE_DIO=y -# CONFIG_ESPTOOLPY_FLASHMODE_DOUT is not set -CONFIG_ESPTOOLPY_FLASHMODE="dio" -CONFIG_ESPTOOLPY_FLASHFREQ_80M=y -# CONFIG_ESPTOOLPY_FLASHFREQ_40M is not set -# CONFIG_ESPTOOLPY_FLASHFREQ_26M is not set -# CONFIG_ESPTOOLPY_FLASHFREQ_20M is not set -CONFIG_ESPTOOLPY_FLASHFREQ="80m" -# CONFIG_ESPTOOLPY_FLASHSIZE_1MB is not set -# CONFIG_ESPTOOLPY_FLASHSIZE_2MB is not set -CONFIG_ESPTOOLPY_FLASHSIZE_4MB=y -# CONFIG_ESPTOOLPY_FLASHSIZE_8MB is not set -# CONFIG_ESPTOOLPY_FLASHSIZE_16MB is not set -CONFIG_ESPTOOLPY_FLASHSIZE="4MB" -CONFIG_ESPTOOLPY_FLASHSIZE_DETECT=y -CONFIG_ESPTOOLPY_BEFORE_RESET=y -# CONFIG_ESPTOOLPY_BEFORE_NORESET is not set -CONFIG_ESPTOOLPY_BEFORE="default_reset" -CONFIG_ESPTOOLPY_AFTER_RESET=y -# CONFIG_ESPTOOLPY_AFTER_NORESET is not set -CONFIG_ESPTOOLPY_AFTER="hard_reset" -# CONFIG_ESPTOOLPY_MONITOR_BAUD_CONSOLE is not set -# CONFIG_ESPTOOLPY_MONITOR_BAUD_9600B is not set -# CONFIG_ESPTOOLPY_MONITOR_BAUD_57600B is not set -CONFIG_ESPTOOLPY_MONITOR_BAUD_115200B=y -# CONFIG_ESPTOOLPY_MONITOR_BAUD_230400B is not set -# CONFIG_ESPTOOLPY_MONITOR_BAUD_921600B is not set -# CONFIG_ESPTOOLPY_MONITOR_BAUD_2MB is not set -# CONFIG_ESPTOOLPY_MONITOR_BAUD_OTHER is not set -CONFIG_ESPTOOLPY_MONITOR_BAUD_OTHER_VAL=115200 -CONFIG_ESPTOOLPY_MONITOR_BAUD=115200 -# end of Serial flasher config - -# -# Partition Table -# -# CONFIG_PARTITION_TABLE_SINGLE_APP is not set -# CONFIG_PARTITION_TABLE_TWO_OTA is not set -CONFIG_PARTITION_TABLE_CUSTOM=y -CONFIG_PARTITION_TABLE_CUSTOM_FILENAME="partitions.csv" -CONFIG_PARTITION_TABLE_FILENAME="partitions.csv" -CONFIG_PARTITION_TABLE_OFFSET=0x8000 -CONFIG_PARTITION_TABLE_MD5=y -# end of Partition Table - -# -# Audio HAL -# -# 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 -# CONFIG_ESP_LYRAT_MINI_V1_1_BOARD is not set -# CONFIG_ESP32_KORVO_DU1906_BOARD is not set -# CONFIG_ESP32_S2_KALUGA_1_V1_2_BOARD is not set -# end of Audio HAL - -# -# ESP32 audio buffer and I2S config -# -# CONFIG_USE_DSP_PROCESSOR is not set -CONFIG_USE_BIQUAD_ASM=y -# end of ESP32 audio buffer and I2S config - -# -# SNTP Configuration -# -CONFIG_SNTP_TIMEZONE="UTC" -CONFIG_SNTP_SERVER="pool.ntp.org" -# end of SNTP Configuration - -# -# Wifi Configuration -# -CONFIG_ENABLE_WIFI_PROVISIONING=y -CONFIG_WIFI_MAXIMUM_RETRY=5 -# end of Wifi Configuration - -# -# Snapcast Configuration -# -CONFIG_SNAPSERVER_USE_MDNS=y -CONFIG_SNAPCLIENT_BUFF_LEN=4000 -CONFIG_SNAPCLIENT_NAME="esp-snapclient" -# end of Snapcast Configuration - -# -# SNTP Configuration -# -# CONFIG_SNPACLIENT_SNTP_ENABLE is not set -# end of SNTP Configuration - -# -# Compiler options -# -# CONFIG_COMPILER_OPTIMIZATION_DEFAULT is not set -# CONFIG_COMPILER_OPTIMIZATION_SIZE is not set -CONFIG_COMPILER_OPTIMIZATION_PERF=y -# CONFIG_COMPILER_OPTIMIZATION_NONE is not set -CONFIG_COMPILER_OPTIMIZATION_ASSERTIONS_ENABLE=y -# CONFIG_COMPILER_OPTIMIZATION_ASSERTIONS_SILENT is not set -# CONFIG_COMPILER_OPTIMIZATION_ASSERTIONS_DISABLE is not set -# CONFIG_COMPILER_CXX_EXCEPTIONS is not set -# CONFIG_COMPILER_CXX_RTTI is not set -CONFIG_COMPILER_STACK_CHECK_MODE_NONE=y -# CONFIG_COMPILER_STACK_CHECK_MODE_NORM is not set -# CONFIG_COMPILER_STACK_CHECK_MODE_STRONG is not set -# CONFIG_COMPILER_STACK_CHECK_MODE_ALL is not set -# CONFIG_COMPILER_WARN_WRITE_STRINGS is not set -# CONFIG_COMPILER_DISABLE_GCC8_WARNINGS is not set -# CONFIG_COMPILER_DUMP_RTL_FILES is not set -# end of Compiler options - -# -# Component config -# - -# -# Application Level Tracing -# -# CONFIG_APPTRACE_DEST_TRAX is not set -CONFIG_APPTRACE_DEST_NONE=y -CONFIG_APPTRACE_LOCK_ENABLE=y -# end of Application Level Tracing - -# -# ESP-ASIO -# -# CONFIG_ASIO_SSL_SUPPORT is not set -# end of ESP-ASIO - -# -# 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 -# end of Bluetooth - -# -# CoAP Configuration -# -CONFIG_COAP_MBEDTLS_PSK=y -# CONFIG_COAP_MBEDTLS_PKI is not set -# CONFIG_COAP_MBEDTLS_DEBUG is not set -CONFIG_COAP_LOG_DEFAULT_LEVEL=0 -# end of CoAP Configuration - -# -# Driver configurations -# - -# -# ADC configuration -# -# CONFIG_ADC_FORCE_XPD_FSM is not set -CONFIG_ADC_DISABLE_DAC=y -# end of ADC configuration - -# -# SPI configuration -# -# CONFIG_SPI_MASTER_IN_IRAM is not set -CONFIG_SPI_MASTER_ISR_IN_IRAM=y -# CONFIG_SPI_SLAVE_IN_IRAM is not set -CONFIG_SPI_SLAVE_ISR_IN_IRAM=y -# end of SPI configuration - -# -# TWAI configuration -# -# CONFIG_TWAI_ISR_IN_IRAM is not set -# CONFIG_TWAI_ERRATA_FIX_BUS_OFF_REC is not set -# 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 -# end of TWAI configuration - -# -# UART configuration -# -# CONFIG_UART_ISR_IN_IRAM is not set -# end of UART configuration - -# -# RTCIO configuration -# -# CONFIG_RTCIO_SUPPORT_RTC_GPIO_DESC is not set -# end of RTCIO configuration - -# -# GPIO Configuration -# -# CONFIG_GPIO_ESP32_SUPPORT_SWITCH_SLP_PULL is not set -# end of GPIO Configuration -# end of Driver configurations - -# -# eFuse Bit Manager -# -# CONFIG_EFUSE_CUSTOM_TABLE is not set -# CONFIG_EFUSE_VIRTUAL is not set -# CONFIG_EFUSE_CODE_SCHEME_COMPAT_NONE is not set -CONFIG_EFUSE_CODE_SCHEME_COMPAT_3_4=y -# CONFIG_EFUSE_CODE_SCHEME_COMPAT_REPEAT is not set -CONFIG_EFUSE_MAX_BLK_LEN=192 -# end of eFuse Bit Manager - -# -# ESP-TLS -# -CONFIG_ESP_TLS_USING_MBEDTLS=y -# CONFIG_ESP_TLS_USE_SECURE_ELEMENT is not set -# CONFIG_ESP_TLS_SERVER is not set -# CONFIG_ESP_TLS_PSK_VERIFICATION is not set -# CONFIG_ESP_TLS_INSECURE is not set -# end of ESP-TLS - -# -# ESP32-specific -# -CONFIG_ESP32_REV_MIN_0=y -# CONFIG_ESP32_REV_MIN_1 is not set -# CONFIG_ESP32_REV_MIN_2 is not set -# CONFIG_ESP32_REV_MIN_3 is not set -CONFIG_ESP32_REV_MIN=0 -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_TRAX is not set -CONFIG_ESP32_TRACEMEM_RESERVE_DRAM=0x0 -# CONFIG_ESP32_UNIVERSAL_MAC_ADDRESSES_TWO is not set -CONFIG_ESP32_UNIVERSAL_MAC_ADDRESSES_FOUR=y -CONFIG_ESP32_UNIVERSAL_MAC_ADDRESSES=4 -# CONFIG_ESP32_ULP_COPROC_ENABLED is not set -CONFIG_ESP32_ULP_COPROC_RESERVE_MEM=0 -CONFIG_ESP32_DEBUG_OCDAWARE=y -CONFIG_ESP32_BROWNOUT_DET=y -# CONFIG_ESP32_BROWNOUT_DET_LVL_SEL_0 is not set -# CONFIG_ESP32_BROWNOUT_DET_LVL_SEL_1 is not set -# CONFIG_ESP32_BROWNOUT_DET_LVL_SEL_2 is not set -# CONFIG_ESP32_BROWNOUT_DET_LVL_SEL_3 is not set -CONFIG_ESP32_BROWNOUT_DET_LVL_SEL_4=y -# CONFIG_ESP32_BROWNOUT_DET_LVL_SEL_5 is not set -# CONFIG_ESP32_BROWNOUT_DET_LVL_SEL_6 is not set -# CONFIG_ESP32_BROWNOUT_DET_LVL_SEL_7 is not set -CONFIG_ESP32_BROWNOUT_DET_LVL=4 -CONFIG_ESP32_REDUCE_PHY_TX_POWER=y -CONFIG_ESP32_TIME_SYSCALL_USE_RTC_FRC1=y -# CONFIG_ESP32_TIME_SYSCALL_USE_RTC is not set -# CONFIG_ESP32_TIME_SYSCALL_USE_FRC1 is not set -# CONFIG_ESP32_TIME_SYSCALL_USE_NONE is not set -CONFIG_ESP32_RTC_CLK_SRC_INT_RC=y -# CONFIG_ESP32_RTC_CLK_SRC_EXT_CRYS is not set -# CONFIG_ESP32_RTC_CLK_SRC_EXT_OSC is not set -# CONFIG_ESP32_RTC_CLK_SRC_INT_8MD256 is not set -CONFIG_ESP32_RTC_CLK_CAL_CYCLES=1024 -CONFIG_ESP32_DEEP_SLEEP_WAKEUP_DELAY=2000 -CONFIG_ESP32_XTAL_FREQ_40=y -# CONFIG_ESP32_XTAL_FREQ_26 is not set -# CONFIG_ESP32_XTAL_FREQ_AUTO is not set -CONFIG_ESP32_XTAL_FREQ=40 -# CONFIG_ESP32_DISABLE_BASIC_ROM_CONSOLE is not set -# CONFIG_ESP32_NO_BLOBS is not set -# CONFIG_ESP32_COMPATIBLE_PRE_V2_1_BOOTLOADERS is not set -# CONFIG_ESP32_USE_FIXED_STATIC_RAM_SIZE is not set -CONFIG_ESP32_DPORT_DIS_INTERRUPT_LVL=5 -# end of ESP32-specific - -# -# ADC-Calibration -# -CONFIG_ADC_CAL_EFUSE_TP_ENABLE=y -CONFIG_ADC_CAL_EFUSE_VREF_ENABLE=y -CONFIG_ADC_CAL_LUT_ENABLE=y -# end of ADC-Calibration - -# -# Common ESP-related -# -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_IPC_TASK_STACK_SIZE=1024 -CONFIG_ESP_IPC_USES_CALLERS_PRIORITY=y -CONFIG_ESP_MINIMAL_SHARED_STACK_SIZE=2048 -CONFIG_ESP_CONSOLE_UART_DEFAULT=y -# CONFIG_ESP_CONSOLE_UART_CUSTOM is not set -# CONFIG_ESP_CONSOLE_NONE is not set -CONFIG_ESP_CONSOLE_UART=y -CONFIG_ESP_CONSOLE_MULTIPLE_UART=y -CONFIG_ESP_CONSOLE_UART_NUM=0 -CONFIG_ESP_CONSOLE_UART_BAUDRATE=115200 -CONFIG_ESP_INT_WDT=y -CONFIG_ESP_INT_WDT_TIMEOUT_MS=300 -CONFIG_ESP_INT_WDT_CHECK_CPU1=y -CONFIG_ESP_TASK_WDT=y -# CONFIG_ESP_TASK_WDT_PANIC is not set -CONFIG_ESP_TASK_WDT_TIMEOUT_S=5 -CONFIG_ESP_TASK_WDT_CHECK_IDLE_TASK_CPU0=y -CONFIG_ESP_TASK_WDT_CHECK_IDLE_TASK_CPU1=y -# CONFIG_ESP_PANIC_HANDLER_IRAM is not set -CONFIG_ESP_MAC_ADDR_UNIVERSE_WIFI_STA=y -CONFIG_ESP_MAC_ADDR_UNIVERSE_WIFI_AP=y -CONFIG_ESP_MAC_ADDR_UNIVERSE_BT=y -CONFIG_ESP_MAC_ADDR_UNIVERSE_ETH=y -# end of Common ESP-related - -# -# Ethernet -# -CONFIG_ETH_ENABLED=y -CONFIG_ETH_USE_ESP32_EMAC=y -CONFIG_ETH_PHY_INTERFACE_RMII=y -# CONFIG_ETH_PHY_INTERFACE_MII is not set -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_USE_SPI_ETHERNET=y -# CONFIG_ETH_SPI_ETHERNET_DM9051 is not set -# CONFIG_ETH_SPI_ETHERNET_W5500 is not set -# CONFIG_ETH_USE_OPENETH is not set -# end of Ethernet - -# -# Event Loop Library -# -# CONFIG_ESP_EVENT_LOOP_PROFILING is not set -CONFIG_ESP_EVENT_POST_FROM_ISR=y -# CONFIG_ESP_EVENT_POST_FROM_IRAM_ISR is not set -# end of Event Loop Library - -# -# GDB Stub -# -# end of GDB Stub - -# -# ESP HTTP client -# -CONFIG_ESP_HTTP_CLIENT_ENABLE_HTTPS=y -# CONFIG_ESP_HTTP_CLIENT_ENABLE_BASIC_AUTH is not set -# end of ESP HTTP client - -# -# HTTP Server -# -CONFIG_HTTPD_MAX_REQ_HDR_LEN=512 -CONFIG_HTTPD_MAX_URI_LEN=512 -CONFIG_HTTPD_ERR_RESP_NO_DELAY=y -CONFIG_HTTPD_PURGE_BUF_LEN=32 -# CONFIG_HTTPD_LOG_PURGE_DATA is not set -# CONFIG_HTTPD_WS_SUPPORT is not set -# end of HTTP Server - -# -# ESP HTTPS OTA -# -# CONFIG_OTA_ALLOW_HTTP is not set -# end of ESP HTTPS OTA - -# -# ESP HTTPS server -# -# CONFIG_ESP_HTTPS_SERVER_ENABLE is not set -# end of ESP HTTPS server - -# -# ESP NETIF Adapter -# -CONFIG_ESP_NETIF_IP_LOST_TIMER_INTERVAL=120 -CONFIG_ESP_NETIF_TCPIP_LWIP=y -# CONFIG_ESP_NETIF_LOOPBACK is not set -CONFIG_ESP_NETIF_TCPIP_ADAPTER_COMPATIBLE_LAYER=y -# end of ESP NETIF Adapter - -# -# Power Management -# -# CONFIG_PM_ENABLE is not set -# end of Power Management - -# -# ESP System Settings -# -# CONFIG_ESP_SYSTEM_PANIC_PRINT_HALT is not set -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 - -# -# Memory protection -# -# end of Memory protection -# end of ESP System Settings - -# -# High resolution timer (esp_timer) -# -# CONFIG_ESP_TIMER_PROFILING is not set -CONFIG_ESP_TIME_FUNCS_USE_RTC_TIMER=y -CONFIG_ESP_TIME_FUNCS_USE_ESP_TIMER=y -CONFIG_ESP_TIMER_TASK_STACK_SIZE=2048 -# CONFIG_ESP_TIMER_IMPL_FRC2 is not set -CONFIG_ESP_TIMER_IMPL_TG0_LAC=y -# end of High resolution timer (esp_timer) - -# -# Wi-Fi -# -CONFIG_ESP32_WIFI_STATIC_RX_BUFFER_NUM=6 -CONFIG_ESP32_WIFI_DYNAMIC_RX_BUFFER_NUM=24 -# CONFIG_ESP32_WIFI_STATIC_TX_BUFFER is not set -CONFIG_ESP32_WIFI_DYNAMIC_TX_BUFFER=y -CONFIG_ESP32_WIFI_TX_BUFFER_TYPE=1 -CONFIG_ESP32_WIFI_DYNAMIC_TX_BUFFER_NUM=18 -# CONFIG_ESP32_WIFI_CSI_ENABLED is not set -CONFIG_ESP32_WIFI_AMPDU_TX_ENABLED=y -CONFIG_ESP32_WIFI_TX_BA_WIN=12 -CONFIG_ESP32_WIFI_AMPDU_RX_ENABLED=y -CONFIG_ESP32_WIFI_RX_BA_WIN=6 -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 -CONFIG_ESP32_WIFI_SOFTAP_BEACON_MAX_LEN=752 -CONFIG_ESP32_WIFI_MGMT_SBUF_NUM=32 -# CONFIG_ESP32_WIFI_DEBUG_LOG_ENABLE is not set -# CONFIG_ESP32_WIFI_IRAM_OPT is not set -# CONFIG_ESP32_WIFI_RX_IRAM_OPT is not set -CONFIG_ESP32_WIFI_ENABLE_WPA3_SAE=y -# CONFIG_ESP_WIFI_SLP_IRAM_OPT is not set -CONFIG_ESP_WIFI_STA_DISCONNECTED_PM_ENABLE=y -# end of Wi-Fi - -# -# PHY -# -CONFIG_ESP32_PHY_CALIBRATION_AND_DATA_STORAGE=y -# CONFIG_ESP32_PHY_INIT_DATA_IN_PARTITION is not set -CONFIG_ESP32_PHY_MAX_WIFI_TX_POWER=20 -CONFIG_ESP32_PHY_MAX_TX_POWER=20 -# end of PHY - -# -# Core dump -# -# CONFIG_ESP_COREDUMP_ENABLE_TO_FLASH is not set -# CONFIG_ESP_COREDUMP_ENABLE_TO_UART is not set -CONFIG_ESP_COREDUMP_ENABLE_TO_NONE=y -# end of Core dump - -# -# FAT Filesystem support -# -# CONFIG_FATFS_CODEPAGE_DYNAMIC is not set -CONFIG_FATFS_CODEPAGE_437=y -# CONFIG_FATFS_CODEPAGE_720 is not set -# CONFIG_FATFS_CODEPAGE_737 is not set -# CONFIG_FATFS_CODEPAGE_771 is not set -# CONFIG_FATFS_CODEPAGE_775 is not set -# CONFIG_FATFS_CODEPAGE_850 is not set -# CONFIG_FATFS_CODEPAGE_852 is not set -# CONFIG_FATFS_CODEPAGE_855 is not set -# CONFIG_FATFS_CODEPAGE_857 is not set -# CONFIG_FATFS_CODEPAGE_860 is not set -# CONFIG_FATFS_CODEPAGE_861 is not set -# CONFIG_FATFS_CODEPAGE_862 is not set -# CONFIG_FATFS_CODEPAGE_863 is not set -# CONFIG_FATFS_CODEPAGE_864 is not set -# CONFIG_FATFS_CODEPAGE_865 is not set -# CONFIG_FATFS_CODEPAGE_866 is not set -# CONFIG_FATFS_CODEPAGE_869 is not set -# CONFIG_FATFS_CODEPAGE_932 is not set -# CONFIG_FATFS_CODEPAGE_936 is not set -# CONFIG_FATFS_CODEPAGE_949 is not set -# CONFIG_FATFS_CODEPAGE_950 is not set -CONFIG_FATFS_CODEPAGE=437 -CONFIG_FATFS_LFN_NONE=y -# CONFIG_FATFS_LFN_HEAP is not set -# CONFIG_FATFS_LFN_STACK is not set -CONFIG_FATFS_FS_LOCK=0 -CONFIG_FATFS_TIMEOUT_MS=10000 -CONFIG_FATFS_PER_FILE_CACHE=y -# CONFIG_FATFS_USE_FASTSEEK is not set -# end of FAT Filesystem support - -# -# Modbus configuration -# -CONFIG_FMB_COMM_MODE_TCP_EN=y -CONFIG_FMB_TCP_PORT_DEFAULT=502 -CONFIG_FMB_TCP_PORT_MAX_CONN=5 -CONFIG_FMB_TCP_CONNECTION_TOUT_SEC=20 -CONFIG_FMB_COMM_MODE_RTU_EN=y -CONFIG_FMB_COMM_MODE_ASCII_EN=y -CONFIG_FMB_MASTER_TIMEOUT_MS_RESPOND=150 -CONFIG_FMB_MASTER_DELAY_MS_CONVERT=200 -CONFIG_FMB_QUEUE_LENGTH=20 -CONFIG_FMB_PORT_TASK_STACK_SIZE=4096 -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_CONTROLLER_SLAVE_ID_SUPPORT=y -CONFIG_FMB_CONTROLLER_SLAVE_ID=0x00112233 -CONFIG_FMB_CONTROLLER_NOTIFY_TIMEOUT=20 -CONFIG_FMB_CONTROLLER_NOTIFY_QUEUE_SIZE=20 -CONFIG_FMB_CONTROLLER_STACK_SIZE=4096 -CONFIG_FMB_EVENT_QUEUE_TIMEOUT=20 -CONFIG_FMB_TIMER_PORT_ENABLED=y -CONFIG_FMB_TIMER_GROUP=0 -CONFIG_FMB_TIMER_INDEX=0 -# CONFIG_FMB_TIMER_ISR_IN_IRAM is not set -# end of Modbus configuration - -# -# FreeRTOS -# -# CONFIG_FREERTOS_UNICORE is not set -CONFIG_FREERTOS_NO_AFFINITY=0x7FFFFFFF -CONFIG_FREERTOS_CORETIMER_0=y -# CONFIG_FREERTOS_CORETIMER_1 is not set -CONFIG_FREERTOS_HZ=1000 -CONFIG_FREERTOS_ASSERT_ON_UNTESTED_FUNCTION=y -# CONFIG_FREERTOS_CHECK_STACKOVERFLOW_NONE is not set -# CONFIG_FREERTOS_CHECK_STACKOVERFLOW_PTRVAL is not set -CONFIG_FREERTOS_CHECK_STACKOVERFLOW_CANARY=y -# CONFIG_FREERTOS_WATCHPOINT_END_OF_STACK is not set -CONFIG_FREERTOS_INTERRUPT_BACKTRACE=y -CONFIG_FREERTOS_THREAD_LOCAL_STORAGE_POINTERS=1 -# CONFIG_FREERTOS_ASSERT_FAIL_ABORT is not set -# CONFIG_FREERTOS_ASSERT_FAIL_PRINT_CONTINUE is not set -CONFIG_FREERTOS_ASSERT_DISABLE=y -CONFIG_FREERTOS_IDLE_TASK_STACKSIZE=768 -CONFIG_FREERTOS_ISR_STACKSIZE=1536 -# CONFIG_FREERTOS_LEGACY_HOOKS is not set -CONFIG_FREERTOS_MAX_TASK_NAME_LEN=10 -CONFIG_FREERTOS_SUPPORT_STATIC_ALLOCATION=y -# CONFIG_FREERTOS_ENABLE_STATIC_TASK_CLEAN_UP is not set -CONFIG_FREERTOS_TIMER_TASK_PRIORITY=1 -CONFIG_FREERTOS_TIMER_TASK_STACK_DEPTH=1536 -CONFIG_FREERTOS_TIMER_QUEUE_LENGTH=5 -CONFIG_FREERTOS_QUEUE_REGISTRY_SIZE=0 -# CONFIG_FREERTOS_USE_TRACE_FACILITY is not set -# CONFIG_FREERTOS_GENERATE_RUN_TIME_STATS is not set -CONFIG_FREERTOS_CHECK_MUTEX_GIVEN_BY_OWNER=y -# CONFIG_FREERTOS_CHECK_PORT_CRITICAL_COMPLIANCE is not set -# CONFIG_FREERTOS_PLACE_FUNCTIONS_INTO_FLASH is not set -CONFIG_FREERTOS_DEBUG_OCDAWARE=y -# CONFIG_FREERTOS_FPU_IN_ISR is not set -# end of FreeRTOS - -# -# Heap memory debugging -# -CONFIG_HEAP_POISONING_DISABLED=y -# CONFIG_HEAP_POISONING_LIGHT is not set -# CONFIG_HEAP_POISONING_COMPREHENSIVE is not set -CONFIG_HEAP_TRACING_OFF=y -# CONFIG_HEAP_TRACING_STANDALONE is not set -# CONFIG_HEAP_TRACING_TOHOST is not set -# CONFIG_HEAP_ABORT_WHEN_ALLOCATION_FAILS is not set -# end of Heap memory debugging - -# -# jsmn -# -# CONFIG_JSMN_PARENT_LINKS is not set -# CONFIG_JSMN_STRICT is not set -# end of jsmn - -# -# libsodium -# -# end of libsodium - -# -# Log output -# -# CONFIG_LOG_DEFAULT_LEVEL_NONE is not set -# CONFIG_LOG_DEFAULT_LEVEL_ERROR is not set -# CONFIG_LOG_DEFAULT_LEVEL_WARN is not set -CONFIG_LOG_DEFAULT_LEVEL_INFO=y -# CONFIG_LOG_DEFAULT_LEVEL_DEBUG is not set -# CONFIG_LOG_DEFAULT_LEVEL_VERBOSE is not set -CONFIG_LOG_DEFAULT_LEVEL=3 -CONFIG_LOG_COLORS=y -CONFIG_LOG_TIMESTAMP_SOURCE_RTOS=y -# CONFIG_LOG_TIMESTAMP_SOURCE_SYSTEM is not set -# end of Log output - -# -# LWIP -# -CONFIG_LWIP_LOCAL_HOSTNAME="espressif" -CONFIG_LWIP_DNS_SUPPORT_MDNS_QUERIES=y -# CONFIG_LWIP_L2_TO_L3_COPY is not set -# CONFIG_LWIP_IRAM_OPTIMIZATION is not set -CONFIG_LWIP_TIMERS_ONDEMAND=y -CONFIG_LWIP_MAX_SOCKETS=6 -# CONFIG_LWIP_USE_ONLY_LWIP_SELECT is not set -# CONFIG_LWIP_SO_LINGER is not set -CONFIG_LWIP_SO_REUSE=y -CONFIG_LWIP_SO_REUSE_RXTOALL=y -# CONFIG_LWIP_SO_RCVBUF is not set -# CONFIG_LWIP_NETBUF_RECVINFO is not set -CONFIG_LWIP_IP4_FRAG=y -CONFIG_LWIP_IP6_FRAG=y -# CONFIG_LWIP_IP4_REASSEMBLY is not set -# CONFIG_LWIP_IP6_REASSEMBLY is not set -# CONFIG_LWIP_IP_FORWARD is not set -CONFIG_LWIP_STATS=y -# CONFIG_LWIP_ETHARP_TRUST_IP_MAC is not set -CONFIG_LWIP_ESP_GRATUITOUS_ARP=y -CONFIG_LWIP_GARP_TMR_INTERVAL=60 -CONFIG_LWIP_TCPIP_RECVMBOX_SIZE=12 -CONFIG_LWIP_DHCP_DOES_ARP_CHECK=y -# CONFIG_LWIP_DHCP_RESTORE_LAST_IP is not set - -# -# DHCP server -# -CONFIG_LWIP_DHCPS_LEASE_UNIT=60 -CONFIG_LWIP_DHCPS_MAX_STATION_NUM=8 -# end of DHCP server - -# CONFIG_LWIP_AUTOIP is not set -CONFIG_LWIP_IPV6=y -# CONFIG_LWIP_IPV6_AUTOCONFIG is not set -CONFIG_LWIP_NETIF_LOOPBACK=y -CONFIG_LWIP_LOOPBACK_MAX_PBUFS=8 - -# -# TCP -# -CONFIG_LWIP_MAX_ACTIVE_TCP=3 -CONFIG_LWIP_MAX_LISTENING_TCP=3 -CONFIG_LWIP_TCP_HIGH_SPEED_RETRANSMISSION=y -CONFIG_LWIP_TCP_MAXRTX=12 -CONFIG_LWIP_TCP_SYNMAXRTX=12 -CONFIG_LWIP_TCP_MSS=1460 -CONFIG_LWIP_TCP_TMR_INTERVAL=250 -CONFIG_LWIP_TCP_MSL=60000 -CONFIG_LWIP_TCP_SND_BUF_DEFAULT=5840 -CONFIG_LWIP_TCP_WND_DEFAULT=5840 -CONFIG_LWIP_TCP_RECVMBOX_SIZE=12 -CONFIG_LWIP_TCP_QUEUE_OOSEQ=y -# CONFIG_LWIP_TCP_SACK_OUT is not set -# CONFIG_LWIP_TCP_KEEP_CONNECTION_WHEN_IP_CHANGES is not set -CONFIG_LWIP_TCP_OVERSIZE_MSS=y -# CONFIG_LWIP_TCP_OVERSIZE_QUARTER_MSS is not set -# CONFIG_LWIP_TCP_OVERSIZE_DISABLE is not set -CONFIG_LWIP_TCP_RTO_TIME=1500 -# end of TCP - -# -# UDP -# -CONFIG_LWIP_MAX_UDP_PCBS=1 -CONFIG_LWIP_UDP_RECVMBOX_SIZE=6 -# end of UDP - -# -# Checksums -# -# CONFIG_LWIP_CHECKSUM_CHECK_IP is not set -# CONFIG_LWIP_CHECKSUM_CHECK_UDP is not set -CONFIG_LWIP_CHECKSUM_CHECK_ICMP=y -# end of Checksums - -CONFIG_LWIP_TCPIP_TASK_STACK_SIZE=2048 -CONFIG_LWIP_TCPIP_TASK_AFFINITY_NO_AFFINITY=y -# CONFIG_LWIP_TCPIP_TASK_AFFINITY_CPU0 is not set -# CONFIG_LWIP_TCPIP_TASK_AFFINITY_CPU1 is not set -CONFIG_LWIP_TCPIP_TASK_AFFINITY=0x7FFFFFFF -# CONFIG_LWIP_PPP_SUPPORT is not set -CONFIG_LWIP_IPV6_MEMP_NUM_ND6_QUEUE=3 -CONFIG_LWIP_IPV6_ND6_NUM_NEIGHBORS=5 -# CONFIG_LWIP_SLIP_SUPPORT is not set - -# -# ICMP -# -# CONFIG_LWIP_MULTICAST_PING is not set -# CONFIG_LWIP_BROADCAST_PING is not set -# end of ICMP - -# -# LWIP RAW API -# -CONFIG_LWIP_MAX_RAW_PCBS=16 -# end of LWIP RAW API - -# -# SNTP -# -CONFIG_LWIP_DHCP_MAX_NTP_SERVERS=1 -CONFIG_LWIP_SNTP_UPDATE_DELAY=3600000 -# end of SNTP - -CONFIG_LWIP_ESP_LWIP_ASSERT=y - -# -# Hooks -# -# CONFIG_LWIP_HOOK_TCP_ISN_NONE is not set -CONFIG_LWIP_HOOK_TCP_ISN_DEFAULT=y -# CONFIG_LWIP_HOOK_TCP_ISN_CUSTOM is not set -CONFIG_LWIP_HOOK_IP6_ROUTE_NONE=y -# CONFIG_LWIP_HOOK_IP6_ROUTE_DEFAULT is not set -# CONFIG_LWIP_HOOK_IP6_ROUTE_CUSTOM is not set -CONFIG_LWIP_HOOK_NETCONN_EXT_RESOLVE_NONE=y -# CONFIG_LWIP_HOOK_NETCONN_EXT_RESOLVE_DEFAULT is not set -# CONFIG_LWIP_HOOK_NETCONN_EXT_RESOLVE_CUSTOM is not set -# end of Hooks - -# CONFIG_LWIP_DEBUG is not set -# end of LWIP - -# -# mbedTLS -# -CONFIG_MBEDTLS_INTERNAL_MEM_ALLOC=y -# CONFIG_MBEDTLS_DEFAULT_MEM_ALLOC is not set -# CONFIG_MBEDTLS_CUSTOM_MEM_ALLOC is not set -CONFIG_MBEDTLS_ASYMMETRIC_CONTENT_LEN=y -CONFIG_MBEDTLS_SSL_IN_CONTENT_LEN=16384 -CONFIG_MBEDTLS_SSL_OUT_CONTENT_LEN=4096 -# CONFIG_MBEDTLS_DYNAMIC_BUFFER is not set -# CONFIG_MBEDTLS_DEBUG is not set - -# -# Certificate Bundle -# -CONFIG_MBEDTLS_CERTIFICATE_BUNDLE=y -CONFIG_MBEDTLS_CERTIFICATE_BUNDLE_DEFAULT_FULL=y -# CONFIG_MBEDTLS_CERTIFICATE_BUNDLE_DEFAULT_CMN is not set -# CONFIG_MBEDTLS_CERTIFICATE_BUNDLE_DEFAULT_NONE is not set -# CONFIG_MBEDTLS_CUSTOM_CERTIFICATE_BUNDLE is not set -# end of Certificate Bundle - -# CONFIG_MBEDTLS_ECP_RESTARTABLE is not set -# CONFIG_MBEDTLS_CMAC_C is not set -CONFIG_MBEDTLS_HARDWARE_AES=y -CONFIG_MBEDTLS_HARDWARE_MPI=y -CONFIG_MBEDTLS_HARDWARE_SHA=y -CONFIG_MBEDTLS_ROM_MD5=y -# CONFIG_MBEDTLS_ATCA_HW_ECDSA_SIGN is not set -# CONFIG_MBEDTLS_ATCA_HW_ECDSA_VERIFY is not set -CONFIG_MBEDTLS_HAVE_TIME=y -# CONFIG_MBEDTLS_HAVE_TIME_DATE is not set -CONFIG_MBEDTLS_ECDSA_DETERMINISTIC=y -CONFIG_MBEDTLS_SHA512_C=y -CONFIG_MBEDTLS_TLS_SERVER_AND_CLIENT=y -# CONFIG_MBEDTLS_TLS_SERVER_ONLY is not set -# CONFIG_MBEDTLS_TLS_CLIENT_ONLY is not set -# CONFIG_MBEDTLS_TLS_DISABLED is not set -CONFIG_MBEDTLS_TLS_SERVER=y -CONFIG_MBEDTLS_TLS_CLIENT=y -CONFIG_MBEDTLS_TLS_ENABLED=y - -# -# TLS Key Exchange Methods -# -# CONFIG_MBEDTLS_PSK_MODES is not set -CONFIG_MBEDTLS_KEY_EXCHANGE_RSA=y -CONFIG_MBEDTLS_KEY_EXCHANGE_DHE_RSA=y -CONFIG_MBEDTLS_KEY_EXCHANGE_ELLIPTIC_CURVE=y -CONFIG_MBEDTLS_KEY_EXCHANGE_ECDHE_RSA=y -CONFIG_MBEDTLS_KEY_EXCHANGE_ECDHE_ECDSA=y -CONFIG_MBEDTLS_KEY_EXCHANGE_ECDH_ECDSA=y -CONFIG_MBEDTLS_KEY_EXCHANGE_ECDH_RSA=y -# end of TLS Key Exchange Methods - -CONFIG_MBEDTLS_SSL_RENEGOTIATION=y -# CONFIG_MBEDTLS_SSL_PROTO_SSL3 is not set -CONFIG_MBEDTLS_SSL_PROTO_TLS1=y -CONFIG_MBEDTLS_SSL_PROTO_TLS1_1=y -CONFIG_MBEDTLS_SSL_PROTO_TLS1_2=y -# CONFIG_MBEDTLS_SSL_PROTO_DTLS is not set -CONFIG_MBEDTLS_SSL_ALPN=y -CONFIG_MBEDTLS_CLIENT_SSL_SESSION_TICKETS=y -CONFIG_MBEDTLS_SERVER_SSL_SESSION_TICKETS=y - -# -# Symmetric Ciphers -# -CONFIG_MBEDTLS_AES_C=y -# CONFIG_MBEDTLS_CAMELLIA_C is not set -# CONFIG_MBEDTLS_DES_C is not set -CONFIG_MBEDTLS_RC4_DISABLED=y -# CONFIG_MBEDTLS_RC4_ENABLED_NO_DEFAULT is not set -# CONFIG_MBEDTLS_RC4_ENABLED is not set -# CONFIG_MBEDTLS_BLOWFISH_C is not set -# CONFIG_MBEDTLS_XTEA_C is not set -CONFIG_MBEDTLS_CCM_C=y -CONFIG_MBEDTLS_GCM_C=y -# end of Symmetric Ciphers - -# CONFIG_MBEDTLS_RIPEMD160_C is not set - -# -# Certificates -# -CONFIG_MBEDTLS_PEM_PARSE_C=y -CONFIG_MBEDTLS_PEM_WRITE_C=y -CONFIG_MBEDTLS_X509_CRL_PARSE_C=y -CONFIG_MBEDTLS_X509_CSR_PARSE_C=y -# end of Certificates - -CONFIG_MBEDTLS_ECP_C=y -CONFIG_MBEDTLS_ECDH_C=y -CONFIG_MBEDTLS_ECDSA_C=y -# CONFIG_MBEDTLS_ECJPAKE_C is not set -CONFIG_MBEDTLS_ECP_DP_SECP192R1_ENABLED=y -CONFIG_MBEDTLS_ECP_DP_SECP224R1_ENABLED=y -CONFIG_MBEDTLS_ECP_DP_SECP256R1_ENABLED=y -CONFIG_MBEDTLS_ECP_DP_SECP384R1_ENABLED=y -CONFIG_MBEDTLS_ECP_DP_SECP521R1_ENABLED=y -CONFIG_MBEDTLS_ECP_DP_SECP192K1_ENABLED=y -CONFIG_MBEDTLS_ECP_DP_SECP224K1_ENABLED=y -CONFIG_MBEDTLS_ECP_DP_SECP256K1_ENABLED=y -CONFIG_MBEDTLS_ECP_DP_BP256R1_ENABLED=y -CONFIG_MBEDTLS_ECP_DP_BP384R1_ENABLED=y -CONFIG_MBEDTLS_ECP_DP_BP512R1_ENABLED=y -CONFIG_MBEDTLS_ECP_DP_CURVE25519_ENABLED=y -CONFIG_MBEDTLS_ECP_NIST_OPTIM=y -# CONFIG_MBEDTLS_POLY1305_C is not set -# CONFIG_MBEDTLS_CHACHA20_C is not set -# CONFIG_MBEDTLS_HKDF_C is not set -# CONFIG_MBEDTLS_THREADING_C is not set -# CONFIG_MBEDTLS_LARGE_KEY_SOFTWARE_MPI is not set -# CONFIG_MBEDTLS_SECURITY_RISKS is not set -# end of mbedTLS - -# -# mDNS -# -CONFIG_MDNS_MAX_SERVICES=10 -CONFIG_MDNS_TASK_PRIORITY=1 -CONFIG_MDNS_TASK_STACK_SIZE=2048 -CONFIG_MDNS_TASK_AFFINITY_NO_AFFINITY=y -# CONFIG_MDNS_TASK_AFFINITY_CPU0 is not set -# CONFIG_MDNS_TASK_AFFINITY_CPU1 is not set -CONFIG_MDNS_TASK_AFFINITY=0x7FFFFFFF -CONFIG_MDNS_SERVICE_ADD_TIMEOUT_MS=2000 -# CONFIG_MDNS_STRICT_MODE is not set -CONFIG_MDNS_TIMER_PERIOD_MS=100 -# end of mDNS - -# -# ESP-MQTT Configurations -# -CONFIG_MQTT_PROTOCOL_311=y -CONFIG_MQTT_TRANSPORT_SSL=y -CONFIG_MQTT_TRANSPORT_WEBSOCKET=y -CONFIG_MQTT_TRANSPORT_WEBSOCKET_SECURE=y -# CONFIG_MQTT_MSG_ID_INCREMENTAL is not set -# CONFIG_MQTT_SKIP_PUBLISH_IF_DISCONNECTED is not set -# CONFIG_MQTT_REPORT_DELETED_MESSAGES is not set -# CONFIG_MQTT_USE_CUSTOM_CONFIG is not set -# CONFIG_MQTT_TASK_CORE_SELECTION_ENABLED is not set -# CONFIG_MQTT_CUSTOM_OUTBOX is not set -# end of ESP-MQTT Configurations - -# -# Newlib -# -CONFIG_NEWLIB_STDOUT_LINE_ENDING_CRLF=y -# CONFIG_NEWLIB_STDOUT_LINE_ENDING_LF is not set -# CONFIG_NEWLIB_STDOUT_LINE_ENDING_CR is not set -# CONFIG_NEWLIB_STDIN_LINE_ENDING_CRLF is not set -# CONFIG_NEWLIB_STDIN_LINE_ENDING_LF is not set -CONFIG_NEWLIB_STDIN_LINE_ENDING_CR=y -# CONFIG_NEWLIB_NANO_FORMAT is not set -# end of Newlib - -# -# NVS -# -# end of NVS - -# -# OpenSSL -# -# CONFIG_OPENSSL_DEBUG is not set -CONFIG_OPENSSL_ERROR_STACK=y -# CONFIG_OPENSSL_ASSERT_DO_NOTHING is not set -CONFIG_OPENSSL_ASSERT_EXIT=y -# end of OpenSSL - -# -# PThreads -# -CONFIG_PTHREAD_TASK_PRIO_DEFAULT=5 -CONFIG_PTHREAD_TASK_STACK_SIZE_DEFAULT=3072 -CONFIG_PTHREAD_STACK_MIN=768 -CONFIG_PTHREAD_DEFAULT_CORE_NO_AFFINITY=y -# CONFIG_PTHREAD_DEFAULT_CORE_0 is not set -# CONFIG_PTHREAD_DEFAULT_CORE_1 is not set -CONFIG_PTHREAD_TASK_CORE_DEFAULT=-1 -CONFIG_PTHREAD_TASK_NAME_DEFAULT="pthread" -# end of PThreads - -# -# SPI Flash driver -# -# CONFIG_SPI_FLASH_VERIFY_WRITE is not set -# CONFIG_SPI_FLASH_ENABLE_COUNTERS is not set -CONFIG_SPI_FLASH_ROM_DRIVER_PATCH=y -CONFIG_SPI_FLASH_DANGEROUS_WRITE_ABORTS=y -# CONFIG_SPI_FLASH_DANGEROUS_WRITE_FAILS is not set -# CONFIG_SPI_FLASH_DANGEROUS_WRITE_ALLOWED is not set -# CONFIG_SPI_FLASH_USE_LEGACY_IMPL is not set -# CONFIG_SPI_FLASH_SHARE_SPI1_BUS is not set -# CONFIG_SPI_FLASH_BYPASS_BLOCK_ERASE is not set -CONFIG_SPI_FLASH_YIELD_DURING_ERASE=y -CONFIG_SPI_FLASH_ERASE_YIELD_DURATION_MS=20 -CONFIG_SPI_FLASH_ERASE_YIELD_TICKS=1 -CONFIG_SPI_FLASH_WRITE_CHUNK_SIZE=8192 -# CONFIG_SPI_FLASH_SIZE_OVERRIDE is not set -# CONFIG_SPI_FLASH_CHECK_ERASE_TIMEOUT_DISABLED is not set - -# -# Auto-detect flash chips -# -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 -# end of Auto-detect flash chips - -CONFIG_SPI_FLASH_ENABLE_ENCRYPTED_READ_WRITE=y -# end of SPI Flash driver - -# -# SPIFFS Configuration -# -CONFIG_SPIFFS_MAX_PARTITIONS=3 - -# -# SPIFFS Cache Configuration -# -CONFIG_SPIFFS_CACHE=y -CONFIG_SPIFFS_CACHE_WR=y -# CONFIG_SPIFFS_CACHE_STATS is not set -# end of SPIFFS Cache Configuration - -CONFIG_SPIFFS_PAGE_CHECK=y -CONFIG_SPIFFS_GC_MAX_RUNS=10 -# CONFIG_SPIFFS_GC_STATS is not set -CONFIG_SPIFFS_PAGE_SIZE=256 -CONFIG_SPIFFS_OBJ_NAME_LEN=32 -# CONFIG_SPIFFS_FOLLOW_SYMLINKS is not set -CONFIG_SPIFFS_USE_MAGIC=y -CONFIG_SPIFFS_USE_MAGIC_LENGTH=y -CONFIG_SPIFFS_META_LENGTH=4 -CONFIG_SPIFFS_USE_MTIME=y - -# -# Debug Configuration -# -# CONFIG_SPIFFS_DBG is not set -# CONFIG_SPIFFS_API_DBG is not set -# CONFIG_SPIFFS_GC_DBG is not set -# CONFIG_SPIFFS_CACHE_DBG is not set -# CONFIG_SPIFFS_CHECK_DBG is not set -# CONFIG_SPIFFS_TEST_VISUALISATION is not set -# end of Debug Configuration -# end of SPIFFS Configuration - -# -# TCP Transport -# -CONFIG_WS_BUFFER_SIZE=1024 -# end of TCP Transport - -# -# TinyUSB -# -# end of TinyUSB - -# -# Unity unit testing library -# -CONFIG_UNITY_ENABLE_FLOAT=y -CONFIG_UNITY_ENABLE_DOUBLE=y -# CONFIG_UNITY_ENABLE_COLOR is not set -CONFIG_UNITY_ENABLE_IDF_TEST_RUNNER=y -# CONFIG_UNITY_ENABLE_FIXTURE is not set -# CONFIG_UNITY_ENABLE_BACKTRACE_ON_FAIL is not set -# end of Unity unit testing library - -# -# Virtual file system -# -# CONFIG_VFS_SUPPORT_IO is not set -# end of Virtual file system - -# -# Wear Levelling -# -# CONFIG_WL_SECTOR_SIZE_512 is not set -CONFIG_WL_SECTOR_SIZE_4096=y -CONFIG_WL_SECTOR_SIZE=4096 -# end of Wear Levelling - -# -# Wi-Fi Provisioning Manager -# -CONFIG_WIFI_PROV_SCAN_MAX_ENTRIES=16 -CONFIG_WIFI_PROV_AUTOSTOP_TIMEOUT=30 -# end of Wi-Fi Provisioning Manager - -# -# Supplicant -# -CONFIG_WPA_MBEDTLS_CRYPTO=y -# CONFIG_WPA_WAPI_PSK is not set -# CONFIG_WPA_DEBUG_PRINT is not set -# CONFIG_WPA_TESTING_OPTIONS is not set -# CONFIG_WPA_WPS_WARS is not set -# CONFIG_WPA_11KV_SUPPORT is not set -# end of Supplicant - -# -# DSP Library -# -# CONFIG_DSP_ANSI is not set -CONFIG_DSP_OPTIMIZED=y -CONFIG_DSP_OPTIMIZATION=1 -# CONFIG_DSP_MAX_FFT_SIZE_512 is not set -# CONFIG_DSP_MAX_FFT_SIZE_1024 is not set -# CONFIG_DSP_MAX_FFT_SIZE_2048 is not set -CONFIG_DSP_MAX_FFT_SIZE_4096=y -# CONFIG_DSP_MAX_FFT_SIZE_8192 is not set -# CONFIG_DSP_MAX_FFT_SIZE_16384 is not set -# CONFIG_DSP_MAX_FFT_SIZE_32768 is not set -CONFIG_DSP_MAX_FFT_SIZE=4096 -# end of DSP Library - -# -# WebSocket Server -# -CONFIG_WEBSOCKET_SERVER_MAX_CLIENTS=1 -CONFIG_WEBSOCKET_SERVER_QUEUE_SIZE=2 -CONFIG_WEBSOCKET_SERVER_QUEUE_TIMEOUT=30 -CONFIG_WEBSOCKET_SERVER_TASK_STACK_DEPTH=3000 -CONFIG_WEBSOCKET_SERVER_TASK_PRIORITY=5 -# CONFIG_WEBSOCKET_SERVER_PINNED is not set -# end of WebSocket Server -# end of Component config - -# -# Compatibility options -# -# CONFIG_LEGACY_INCLUDE_COMMON_HEADERS is not set -# end of Compatibility options - -# Deprecated options for backward compatibility -CONFIG_TOOLPREFIX="xtensa-esp32-elf-" -# CONFIG_LOG_BOOTLOADER_LEVEL_NONE is not set -# CONFIG_LOG_BOOTLOADER_LEVEL_ERROR is not set -# CONFIG_LOG_BOOTLOADER_LEVEL_WARN is not set -CONFIG_LOG_BOOTLOADER_LEVEL_INFO=y -# CONFIG_LOG_BOOTLOADER_LEVEL_DEBUG is not set -# CONFIG_LOG_BOOTLOADER_LEVEL_VERBOSE is not set -CONFIG_LOG_BOOTLOADER_LEVEL=3 -CONFIG_APP_ROLLBACK_ENABLE=y -# CONFIG_APP_ANTI_ROLLBACK is not set -# CONFIG_FLASH_ENCRYPTION_ENABLED is not set -# CONFIG_FLASHMODE_QIO is not set -# CONFIG_FLASHMODE_QOUT is not set -CONFIG_FLASHMODE_DIO=y -# CONFIG_FLASHMODE_DOUT is not set -# CONFIG_MONITOR_BAUD_9600B is not set -# CONFIG_MONITOR_BAUD_57600B is not set -CONFIG_MONITOR_BAUD_115200B=y -# CONFIG_MONITOR_BAUD_230400B is not set -# CONFIG_MONITOR_BAUD_921600B is not set -# CONFIG_MONITOR_BAUD_2MB is not set -# CONFIG_MONITOR_BAUD_OTHER is not set -CONFIG_MONITOR_BAUD_OTHER_VAL=115200 -CONFIG_MONITOR_BAUD=115200 -# CONFIG_COMPILER_OPTIMIZATION_LEVEL_DEBUG is not set -# CONFIG_COMPILER_OPTIMIZATION_LEVEL_RELEASE is not set -CONFIG_OPTIMIZATION_ASSERTIONS_ENABLED=y -# CONFIG_OPTIMIZATION_ASSERTIONS_SILENT is not set -# CONFIG_OPTIMIZATION_ASSERTIONS_DISABLED is not set -# CONFIG_CXX_EXCEPTIONS is not set -CONFIG_STACK_CHECK_NONE=y -# CONFIG_STACK_CHECK_NORM is not set -# CONFIG_STACK_CHECK_STRONG is not set -# CONFIG_STACK_CHECK_ALL is not set -# CONFIG_WARN_WRITE_STRINGS is not set -# CONFIG_DISABLE_GCC8_WARNINGS is not set -# 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 -# CONFIG_TWO_UNIVERSAL_MAC_ADDRESS is not set -CONFIG_FOUR_UNIVERSAL_MAC_ADDRESS=y -CONFIG_NUMBER_OF_UNIVERSAL_MAC_ADDRESS=4 -# CONFIG_ULP_COPROC_ENABLED is not set -CONFIG_ULP_COPROC_RESERVE_MEM=0 -CONFIG_BROWNOUT_DET=y -# CONFIG_BROWNOUT_DET_LVL_SEL_0 is not set -# CONFIG_BROWNOUT_DET_LVL_SEL_1 is not set -# CONFIG_BROWNOUT_DET_LVL_SEL_2 is not set -# CONFIG_BROWNOUT_DET_LVL_SEL_3 is not set -CONFIG_BROWNOUT_DET_LVL_SEL_4=y -# CONFIG_BROWNOUT_DET_LVL_SEL_5 is not set -# CONFIG_BROWNOUT_DET_LVL_SEL_6 is not set -# CONFIG_BROWNOUT_DET_LVL_SEL_7 is not set -CONFIG_BROWNOUT_DET_LVL=4 -CONFIG_REDUCE_PHY_TX_POWER=y -CONFIG_ESP32_RTC_CLOCK_SOURCE_INTERNAL_RC=y -# CONFIG_ESP32_RTC_CLOCK_SOURCE_EXTERNAL_CRYSTAL is not set -# CONFIG_ESP32_RTC_CLOCK_SOURCE_EXTERNAL_OSC is not set -# CONFIG_ESP32_RTC_CLOCK_SOURCE_INTERNAL_8MD256 is not set -# CONFIG_DISABLE_BASIC_ROM_CONSOLE is not set -# CONFIG_NO_BLOBS is not set -# 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_IPC_TASK_STACK_SIZE=1024 -CONFIG_CONSOLE_UART_DEFAULT=y -# CONFIG_CONSOLE_UART_CUSTOM is not set -# CONFIG_ESP_CONSOLE_UART_NONE is not set -CONFIG_CONSOLE_UART=y -CONFIG_CONSOLE_UART_NUM=0 -CONFIG_CONSOLE_UART_BAUDRATE=115200 -CONFIG_INT_WDT=y -CONFIG_INT_WDT_TIMEOUT_MS=300 -CONFIG_INT_WDT_CHECK_CPU1=y -CONFIG_TASK_WDT=y -# CONFIG_TASK_WDT_PANIC is not set -CONFIG_TASK_WDT_TIMEOUT_S=5 -CONFIG_TASK_WDT_CHECK_IDLE_TASK_CPU0=y -CONFIG_TASK_WDT_CHECK_IDLE_TASK_CPU1=y -# CONFIG_EVENT_LOOP_PROFILING is not set -CONFIG_POST_EVENTS_FROM_ISR=y -# CONFIG_POST_EVENTS_FROM_IRAM_ISR is not set -# CONFIG_ESP32S2_PANIC_PRINT_HALT is not set -CONFIG_ESP32S2_PANIC_PRINT_REBOOT=y -# CONFIG_ESP32S2_PANIC_SILENT_REBOOT is not set -# CONFIG_ESP32S2_PANIC_GDBSTUB is not set -CONFIG_TIMER_TASK_STACK_SIZE=2048 -# CONFIG_ESP32_ENABLE_COREDUMP_TO_FLASH is not set -# CONFIG_ESP32_ENABLE_COREDUMP_TO_UART is not set -CONFIG_ESP32_ENABLE_COREDUMP_TO_NONE=y -CONFIG_MB_MASTER_TIMEOUT_MS_RESPOND=150 -CONFIG_MB_MASTER_DELAY_MS_CONVERT=200 -CONFIG_MB_QUEUE_LENGTH=20 -CONFIG_MB_SERIAL_TASK_STACK_SIZE=4096 -CONFIG_MB_SERIAL_BUF_SIZE=256 -CONFIG_MB_SERIAL_TASK_PRIO=10 -CONFIG_MB_CONTROLLER_SLAVE_ID_SUPPORT=y -CONFIG_MB_CONTROLLER_SLAVE_ID=0x00112233 -CONFIG_MB_CONTROLLER_NOTIFY_TIMEOUT=20 -CONFIG_MB_CONTROLLER_NOTIFY_QUEUE_SIZE=20 -CONFIG_MB_CONTROLLER_STACK_SIZE=4096 -CONFIG_MB_EVENT_QUEUE_TIMEOUT=20 -CONFIG_MB_TIMER_PORT_ENABLED=y -CONFIG_MB_TIMER_GROUP=0 -CONFIG_MB_TIMER_INDEX=0 -# CONFIG_ENABLE_STATIC_TASK_CLEAN_UP_HOOK is not set -CONFIG_TIMER_TASK_PRIORITY=1 -CONFIG_TIMER_TASK_STACK_DEPTH=1536 -CONFIG_TIMER_QUEUE_LENGTH=5 -# CONFIG_L2_TO_L3_COPY is not set -# CONFIG_USE_ONLY_LWIP_SELECT is not set -CONFIG_ESP_GRATUITOUS_ARP=y -CONFIG_GARP_TMR_INTERVAL=60 -CONFIG_TCPIP_RECVMBOX_SIZE=12 -CONFIG_TCP_MAXRTX=12 -CONFIG_TCP_SYNMAXRTX=12 -CONFIG_TCP_MSS=1460 -CONFIG_TCP_MSL=60000 -CONFIG_TCP_SND_BUF_DEFAULT=5840 -CONFIG_TCP_WND_DEFAULT=5840 -CONFIG_TCP_RECVMBOX_SIZE=12 -CONFIG_TCP_QUEUE_OOSEQ=y -# CONFIG_ESP_TCP_KEEP_CONNECTION_WHEN_IP_CHANGES is not set -CONFIG_TCP_OVERSIZE_MSS=y -# CONFIG_TCP_OVERSIZE_QUARTER_MSS is not set -# CONFIG_TCP_OVERSIZE_DISABLE is not set -CONFIG_UDP_RECVMBOX_SIZE=6 -CONFIG_TCPIP_TASK_STACK_SIZE=2048 -CONFIG_TCPIP_TASK_AFFINITY_NO_AFFINITY=y -# CONFIG_TCPIP_TASK_AFFINITY_CPU0 is not set -# CONFIG_TCPIP_TASK_AFFINITY_CPU1 is not set -CONFIG_TCPIP_TASK_AFFINITY=0x7FFFFFFF -# CONFIG_PPP_SUPPORT is not set -CONFIG_ESP32_PTHREAD_TASK_PRIO_DEFAULT=5 -CONFIG_ESP32_PTHREAD_TASK_STACK_SIZE_DEFAULT=3072 -CONFIG_ESP32_PTHREAD_STACK_MIN=768 -CONFIG_ESP32_DEFAULT_PTHREAD_CORE_NO_AFFINITY=y -# CONFIG_ESP32_DEFAULT_PTHREAD_CORE_0 is not set -# CONFIG_ESP32_DEFAULT_PTHREAD_CORE_1 is not set -CONFIG_ESP32_PTHREAD_TASK_CORE_DEFAULT=-1 -CONFIG_ESP32_PTHREAD_TASK_NAME_DEFAULT="pthread" -CONFIG_SPI_FLASH_WRITING_DANGEROUS_REGIONS_ABORTS=y -# CONFIG_SPI_FLASH_WRITING_DANGEROUS_REGIONS_FAILS is not set -# CONFIG_SPI_FLASH_WRITING_DANGEROUS_REGIONS_ALLOWED is not set -# End of deprecated options diff --git a/sdkconfig_SPI_RAM b/sdkconfig_SPI_RAM deleted file mode 100644 index c6a77f7..0000000 --- a/sdkconfig_SPI_RAM +++ /dev/null @@ -1,1544 +0,0 @@ -# -# Automatically generated file. DO NOT EDIT. -# Espressif IoT Development Framework (ESP-IDF) Project Configuration -# -CONFIG_IDF_CMAKE=y -CONFIG_IDF_TARGET_ARCH_XTENSA=y -CONFIG_IDF_TARGET="esp32" -CONFIG_IDF_TARGET_ESP32=y -CONFIG_IDF_FIRMWARE_CHIP_ID=0x0000 - -# -# SDK tool configuration -# -CONFIG_SDK_TOOLPREFIX="xtensa-esp32-elf-" -# CONFIG_SDK_TOOLCHAIN_SUPPORTS_TIME_WIDE_64_BITS is not set -# end of SDK tool configuration - -# -# Build type -# -CONFIG_APP_BUILD_TYPE_APP_2NDBOOT=y -# CONFIG_APP_BUILD_TYPE_ELF_RAM is not set -CONFIG_APP_BUILD_GENERATE_BINARIES=y -CONFIG_APP_BUILD_BOOTLOADER=y -CONFIG_APP_BUILD_USE_FLASH_SECTIONS=y -# end of Build type - -# -# Application manager -# -CONFIG_APP_COMPILE_TIME_DATE=y -# CONFIG_APP_EXCLUDE_PROJECT_VER_VAR is not set -# CONFIG_APP_EXCLUDE_PROJECT_NAME_VAR is not set -# CONFIG_APP_PROJECT_VER_FROM_CONFIG is not set -CONFIG_APP_RETRIEVE_LEN_ELF_SHA=16 -# end of Application manager - -# -# Bootloader config -# -CONFIG_BOOTLOADER_OFFSET_IN_FLASH=0x1000 -CONFIG_BOOTLOADER_COMPILER_OPTIMIZATION_SIZE=y -# CONFIG_BOOTLOADER_COMPILER_OPTIMIZATION_DEBUG is not set -# CONFIG_BOOTLOADER_COMPILER_OPTIMIZATION_PERF is not set -# CONFIG_BOOTLOADER_COMPILER_OPTIMIZATION_NONE is not set -# CONFIG_BOOTLOADER_LOG_LEVEL_NONE is not set -# CONFIG_BOOTLOADER_LOG_LEVEL_ERROR is not set -# CONFIG_BOOTLOADER_LOG_LEVEL_WARN is not set -CONFIG_BOOTLOADER_LOG_LEVEL_INFO=y -# CONFIG_BOOTLOADER_LOG_LEVEL_DEBUG is not set -# CONFIG_BOOTLOADER_LOG_LEVEL_VERBOSE is not set -CONFIG_BOOTLOADER_LOG_LEVEL=3 -CONFIG_BOOTLOADER_VDDSDIO_BOOST_1_9V=y -# CONFIG_BOOTLOADER_FACTORY_RESET is not set -# CONFIG_BOOTLOADER_APP_TEST is not set -CONFIG_BOOTLOADER_WDT_ENABLE=y -# CONFIG_BOOTLOADER_WDT_DISABLE_IN_USER_CODE is not set -CONFIG_BOOTLOADER_WDT_TIME_MS=9000 -CONFIG_BOOTLOADER_APP_ROLLBACK_ENABLE=y -# CONFIG_BOOTLOADER_APP_ANTI_ROLLBACK is not set -# CONFIG_BOOTLOADER_SKIP_VALIDATE_IN_DEEP_SLEEP is not set -# CONFIG_BOOTLOADER_SKIP_VALIDATE_ON_POWER_ON is not set -# CONFIG_BOOTLOADER_SKIP_VALIDATE_ALWAYS is not set -CONFIG_BOOTLOADER_RESERVE_RTC_SIZE=0 -# CONFIG_BOOTLOADER_CUSTOM_RESERVE_RTC is not set -# end of Bootloader config - -# -# Security features -# -# CONFIG_SECURE_SIGNED_APPS_NO_SECURE_BOOT is not set -# CONFIG_SECURE_BOOT is not set -# CONFIG_SECURE_FLASH_ENC_ENABLED is not set -# end of Security features - -# -# Serial flasher config -# -CONFIG_ESPTOOLPY_BAUD_OTHER_VAL=115200 -# CONFIG_ESPTOOLPY_NO_STUB is not set -# CONFIG_ESPTOOLPY_FLASHMODE_QIO is not set -# CONFIG_ESPTOOLPY_FLASHMODE_QOUT is not set -CONFIG_ESPTOOLPY_FLASHMODE_DIO=y -# CONFIG_ESPTOOLPY_FLASHMODE_DOUT is not set -CONFIG_ESPTOOLPY_FLASHMODE="dio" -CONFIG_ESPTOOLPY_FLASHFREQ_80M=y -# CONFIG_ESPTOOLPY_FLASHFREQ_40M is not set -# CONFIG_ESPTOOLPY_FLASHFREQ_26M is not set -# CONFIG_ESPTOOLPY_FLASHFREQ_20M is not set -CONFIG_ESPTOOLPY_FLASHFREQ="80m" -# CONFIG_ESPTOOLPY_FLASHSIZE_1MB is not set -# CONFIG_ESPTOOLPY_FLASHSIZE_2MB is not set -CONFIG_ESPTOOLPY_FLASHSIZE_4MB=y -# CONFIG_ESPTOOLPY_FLASHSIZE_8MB is not set -# CONFIG_ESPTOOLPY_FLASHSIZE_16MB is not set -CONFIG_ESPTOOLPY_FLASHSIZE="4MB" -CONFIG_ESPTOOLPY_FLASHSIZE_DETECT=y -CONFIG_ESPTOOLPY_BEFORE_RESET=y -# CONFIG_ESPTOOLPY_BEFORE_NORESET is not set -CONFIG_ESPTOOLPY_BEFORE="default_reset" -CONFIG_ESPTOOLPY_AFTER_RESET=y -# CONFIG_ESPTOOLPY_AFTER_NORESET is not set -CONFIG_ESPTOOLPY_AFTER="hard_reset" -# CONFIG_ESPTOOLPY_MONITOR_BAUD_CONSOLE is not set -# CONFIG_ESPTOOLPY_MONITOR_BAUD_9600B is not set -# CONFIG_ESPTOOLPY_MONITOR_BAUD_57600B is not set -CONFIG_ESPTOOLPY_MONITOR_BAUD_115200B=y -# CONFIG_ESPTOOLPY_MONITOR_BAUD_230400B is not set -# CONFIG_ESPTOOLPY_MONITOR_BAUD_921600B is not set -# CONFIG_ESPTOOLPY_MONITOR_BAUD_2MB is not set -# CONFIG_ESPTOOLPY_MONITOR_BAUD_OTHER is not set -CONFIG_ESPTOOLPY_MONITOR_BAUD_OTHER_VAL=115200 -CONFIG_ESPTOOLPY_MONITOR_BAUD=115200 -# end of Serial flasher config - -# -# Partition Table -# -# CONFIG_PARTITION_TABLE_SINGLE_APP is not set -# CONFIG_PARTITION_TABLE_TWO_OTA is not set -CONFIG_PARTITION_TABLE_CUSTOM=y -CONFIG_PARTITION_TABLE_CUSTOM_FILENAME="partitions.csv" -CONFIG_PARTITION_TABLE_FILENAME="partitions.csv" -CONFIG_PARTITION_TABLE_OFFSET=0x8000 -CONFIG_PARTITION_TABLE_MD5=y -# end of Partition Table - -# -# Audio HAL -# -# 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 -# CONFIG_ESP_LYRAT_MINI_V1_1_BOARD is not set -# CONFIG_ESP32_KORVO_DU1906_BOARD is not set -# CONFIG_ESP32_S2_KALUGA_1_V1_2_BOARD is not set -# end of Audio HAL - -# -# Recorder Engine Configuration -# -# CONFIG_REC_ENG_ENABLE_VAD_ONLY is not set -# CONFIG_REC_ENG_ENABLE_VAD_WWE is not set -CONFIG_REC_ENG_ENABLE_VAD_WWE_AMR=y -# end of Recorder Engine Configuration - -# -# ESP Speech Recognition -# -# CONFIG_SR_MODEL_WN3_QUANT is not set -# CONFIG_SR_MODEL_WN4_QUANT is not set -CONFIG_SR_MODEL_WN5_QUANT=y -# CONFIG_SR_MODEL_WN6_QUANT is not set -CONFIG_SR_WN5_HILEXIN=y -# CONFIG_SR_WN5X2_HILEXIN is not set -# CONFIG_SR_WN5X3_HILEXIN is not set -# CONFIG_SR_WN5_NIHAOXIAOZHI is not set -# CONFIG_SR_WN5X2_NIHAOXIAOZHI is not set -# CONFIG_SR_WN5X3_NIHAOXIAOZHI is not set -# CONFIG_SR_WN5X3_HIJESON is not set -# CONFIG_SR_WN5X3_NIHAOXIAOXIN is not set -# CONFIG_SR_WN5_CUSTOMIZED_WORD is not set -CONFIG_SINGLE_RECOGNITION=y -# CONFIG_CONTINUOUS_RECOGNITION is not set -# CONFIG_SR_CHINESE is not set -CONFIG_SR_ENGLISH=y -CONFIG_SPEECH_COMMANDS_NUM=20 - -# -# Add speech commands -# -CONFIG_EN_SPEECH_COMMAND_ID0="T ER N AA N DH AH L AY T" -CONFIG_EN_SPEECH_COMMAND_ID1="T ER N AO F DH AH L AY T" -CONFIG_EN_SPEECH_COMMAND_ID2="L AY T IH NG M OW D" -CONFIG_EN_SPEECH_COMMAND_ID3="R EH D IH NG M OW D" -CONFIG_EN_SPEECH_COMMAND_ID4="R EH D M OW D" -CONFIG_EN_SPEECH_COMMAND_ID5="B L UW M OW D" -CONFIG_EN_SPEECH_COMMAND_ID6="Y EH L OW M OW D" -CONFIG_EN_SPEECH_COMMAND_ID7="" -CONFIG_EN_SPEECH_COMMAND_ID8="" -CONFIG_EN_SPEECH_COMMAND_ID9="" -CONFIG_EN_SPEECH_COMMAND_ID10="" -CONFIG_EN_SPEECH_COMMAND_ID11="" -CONFIG_EN_SPEECH_COMMAND_ID12="" -CONFIG_EN_SPEECH_COMMAND_ID13="" -CONFIG_EN_SPEECH_COMMAND_ID14="" -CONFIG_EN_SPEECH_COMMAND_ID15="" -CONFIG_EN_SPEECH_COMMAND_ID16="" -CONFIG_EN_SPEECH_COMMAND_ID17="" -CONFIG_EN_SPEECH_COMMAND_ID18="" -CONFIG_EN_SPEECH_COMMAND_ID19="" -CONFIG_EN_SPEECH_COMMAND_ID20="" -CONFIG_EN_SPEECH_COMMAND_ID21="" -CONFIG_EN_SPEECH_COMMAND_ID22="" -CONFIG_EN_SPEECH_COMMAND_ID23="" -CONFIG_EN_SPEECH_COMMAND_ID24="" -CONFIG_EN_SPEECH_COMMAND_ID25="" -CONFIG_EN_SPEECH_COMMAND_ID26="" -CONFIG_EN_SPEECH_COMMAND_ID27="" -CONFIG_EN_SPEECH_COMMAND_ID28="" -CONFIG_EN_SPEECH_COMMAND_ID29="" -CONFIG_EN_SPEECH_COMMAND_ID30="" -CONFIG_EN_SPEECH_COMMAND_ID31="" -CONFIG_EN_SPEECH_COMMAND_ID32="" -CONFIG_EN_SPEECH_COMMAND_ID33="" -CONFIG_EN_SPEECH_COMMAND_ID34="" -CONFIG_EN_SPEECH_COMMAND_ID35="" -CONFIG_EN_SPEECH_COMMAND_ID36="" -CONFIG_EN_SPEECH_COMMAND_ID37="" -CONFIG_EN_SPEECH_COMMAND_ID38="" -CONFIG_EN_SPEECH_COMMAND_ID39="" -CONFIG_EN_SPEECH_COMMAND_ID40="" -CONFIG_EN_SPEECH_COMMAND_ID41="" -CONFIG_EN_SPEECH_COMMAND_ID42="" -CONFIG_EN_SPEECH_COMMAND_ID43="" -CONFIG_EN_SPEECH_COMMAND_ID44="" -CONFIG_EN_SPEECH_COMMAND_ID45="" -CONFIG_EN_SPEECH_COMMAND_ID46="" -CONFIG_EN_SPEECH_COMMAND_ID47="" -CONFIG_EN_SPEECH_COMMAND_ID48="" -CONFIG_EN_SPEECH_COMMAND_ID49="" -CONFIG_EN_SPEECH_COMMAND_ID50="" -CONFIG_EN_SPEECH_COMMAND_ID51="" -CONFIG_EN_SPEECH_COMMAND_ID52="" -CONFIG_EN_SPEECH_COMMAND_ID53="" -CONFIG_EN_SPEECH_COMMAND_ID54="" -CONFIG_EN_SPEECH_COMMAND_ID55="" -CONFIG_EN_SPEECH_COMMAND_ID56="" -CONFIG_EN_SPEECH_COMMAND_ID57="" -CONFIG_EN_SPEECH_COMMAND_ID58="" -CONFIG_EN_SPEECH_COMMAND_ID59="" -CONFIG_EN_SPEECH_COMMAND_ID60="" -CONFIG_EN_SPEECH_COMMAND_ID61="" -CONFIG_EN_SPEECH_COMMAND_ID62="" -CONFIG_EN_SPEECH_COMMAND_ID63="" -CONFIG_EN_SPEECH_COMMAND_ID64="" -CONFIG_EN_SPEECH_COMMAND_ID65="" -CONFIG_EN_SPEECH_COMMAND_ID66="" -CONFIG_EN_SPEECH_COMMAND_ID67="" -CONFIG_EN_SPEECH_COMMAND_ID68="" -CONFIG_EN_SPEECH_COMMAND_ID69="" -CONFIG_EN_SPEECH_COMMAND_ID70="" -CONFIG_EN_SPEECH_COMMAND_ID71="" -CONFIG_EN_SPEECH_COMMAND_ID72="" -CONFIG_EN_SPEECH_COMMAND_ID73="" -CONFIG_EN_SPEECH_COMMAND_ID74="" -CONFIG_EN_SPEECH_COMMAND_ID75="" -CONFIG_EN_SPEECH_COMMAND_ID76="" -CONFIG_EN_SPEECH_COMMAND_ID77="" -CONFIG_EN_SPEECH_COMMAND_ID78="" -CONFIG_EN_SPEECH_COMMAND_ID79="" -CONFIG_EN_SPEECH_COMMAND_ID80="" -CONFIG_EN_SPEECH_COMMAND_ID81="" -CONFIG_EN_SPEECH_COMMAND_ID82="" -CONFIG_EN_SPEECH_COMMAND_ID83="" -CONFIG_EN_SPEECH_COMMAND_ID84="" -CONFIG_EN_SPEECH_COMMAND_ID85="" -CONFIG_EN_SPEECH_COMMAND_ID86="" -CONFIG_EN_SPEECH_COMMAND_ID87="" -CONFIG_EN_SPEECH_COMMAND_ID88="" -CONFIG_EN_SPEECH_COMMAND_ID89="" -CONFIG_EN_SPEECH_COMMAND_ID90="" -CONFIG_EN_SPEECH_COMMAND_ID91="" -CONFIG_EN_SPEECH_COMMAND_ID92="" -CONFIG_EN_SPEECH_COMMAND_ID93="" -CONFIG_EN_SPEECH_COMMAND_ID94="" -CONFIG_EN_SPEECH_COMMAND_ID95="" -CONFIG_EN_SPEECH_COMMAND_ID96="" -CONFIG_EN_SPEECH_COMMAND_ID97="" -CONFIG_EN_SPEECH_COMMAND_ID98="" -CONFIG_EN_SPEECH_COMMAND_ID99="" -# end of Add speech commands -# end of ESP Speech Recognition - -# -# ADF Features -# -CONFIG_ESP_DISPATCHER_DELEGATE_TASK_CORE=0 -CONFIG_ESP_DISPATCHER_DELEGATE_TASK_PRIO=10 -CONFIG_ESP_DISPATCHER_DELEGATE_STACK_SIZE=4096 -# end of ADF Features - -# -# ESP32 audio buffer and I2S config -# -CONFIG_USE_PSRAM=y -CONFIG_USE_DSP_PROCESSOR=y -CONFIG_USE_BIQUAD_ASM=y -# end of ESP32 audio buffer and I2S config - -# -# SNTP Configuration -# -CONFIG_SNTP_TIMEZONE="UTC" -CONFIG_SNTP_SERVER="pool.ntp.org" -# end of SNTP Configuration - -# -# Wifi Configuration -# -CONFIG_ENABLE_WIFI_PROVISIONING=y -CONFIG_WIFI_MAXIMUM_RETRY=5 -# end of Wifi Configuration - -# -# Snapcast Configuration -# -CONFIG_SNAPSERVER_USE_MDNS=y -CONFIG_SNAPCLIENT_BUFF_LEN=4000 -CONFIG_SNAPCLIENT_NAME="esp-snapclient" -# end of Snapcast Configuration - -# -# SNTP Configuration -# -# CONFIG_SNPACLIENT_SNTP_ENABLE is not set -# end of SNTP Configuration - -# -# Compiler options -# -# CONFIG_COMPILER_OPTIMIZATION_DEFAULT is not set -CONFIG_COMPILER_OPTIMIZATION_SIZE=y -# CONFIG_COMPILER_OPTIMIZATION_PERF is not set -# CONFIG_COMPILER_OPTIMIZATION_NONE is not set -CONFIG_COMPILER_OPTIMIZATION_ASSERTIONS_ENABLE=y -# CONFIG_COMPILER_OPTIMIZATION_ASSERTIONS_SILENT is not set -# CONFIG_COMPILER_OPTIMIZATION_ASSERTIONS_DISABLE is not set -# CONFIG_COMPILER_CXX_EXCEPTIONS is not set -# CONFIG_COMPILER_CXX_RTTI is not set -CONFIG_COMPILER_STACK_CHECK_MODE_NONE=y -# CONFIG_COMPILER_STACK_CHECK_MODE_NORM is not set -# CONFIG_COMPILER_STACK_CHECK_MODE_STRONG is not set -# CONFIG_COMPILER_STACK_CHECK_MODE_ALL is not set -# CONFIG_COMPILER_WARN_WRITE_STRINGS is not set -# CONFIG_COMPILER_DISABLE_GCC8_WARNINGS is not set -# CONFIG_COMPILER_DUMP_RTL_FILES is not set -# end of Compiler options - -# -# Component config -# - -# -# Application Level Tracing -# -# CONFIG_APPTRACE_DEST_TRAX is not set -CONFIG_APPTRACE_DEST_NONE=y -CONFIG_APPTRACE_LOCK_ENABLE=y -# end of Application Level Tracing - -# -# ESP-ASIO -# -# CONFIG_ASIO_SSL_SUPPORT is not set -# end of ESP-ASIO - -# -# 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 -# end of Bluetooth - -# -# CoAP Configuration -# -CONFIG_COAP_MBEDTLS_PSK=y -# CONFIG_COAP_MBEDTLS_PKI is not set -# CONFIG_COAP_MBEDTLS_DEBUG is not set -CONFIG_COAP_LOG_DEFAULT_LEVEL=0 -# end of CoAP Configuration - -# -# Driver configurations -# - -# -# ADC configuration -# -# CONFIG_ADC_FORCE_XPD_FSM is not set -CONFIG_ADC_DISABLE_DAC=y -# end of ADC configuration - -# -# SPI configuration -# -# CONFIG_SPI_MASTER_IN_IRAM is not set -CONFIG_SPI_MASTER_ISR_IN_IRAM=y -# CONFIG_SPI_SLAVE_IN_IRAM is not set -CONFIG_SPI_SLAVE_ISR_IN_IRAM=y -# end of SPI configuration - -# -# TWAI configuration -# -# CONFIG_TWAI_ISR_IN_IRAM is not set -# CONFIG_TWAI_ERRATA_FIX_BUS_OFF_REC is not set -# 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 -# end of TWAI configuration - -# -# UART configuration -# -# CONFIG_UART_ISR_IN_IRAM is not set -# end of UART configuration - -# -# RTCIO configuration -# -# CONFIG_RTCIO_SUPPORT_RTC_GPIO_DESC is not set -# end of RTCIO configuration - -# -# GPIO Configuration -# -# CONFIG_GPIO_ESP32_SUPPORT_SWITCH_SLP_PULL is not set -# end of GPIO Configuration -# end of Driver configurations - -# -# eFuse Bit Manager -# -# CONFIG_EFUSE_CUSTOM_TABLE is not set -# CONFIG_EFUSE_VIRTUAL is not set -# CONFIG_EFUSE_CODE_SCHEME_COMPAT_NONE is not set -CONFIG_EFUSE_CODE_SCHEME_COMPAT_3_4=y -# CONFIG_EFUSE_CODE_SCHEME_COMPAT_REPEAT is not set -CONFIG_EFUSE_MAX_BLK_LEN=192 -# end of eFuse Bit Manager - -# -# ESP-TLS -# -CONFIG_ESP_TLS_USING_MBEDTLS=y -# CONFIG_ESP_TLS_USE_SECURE_ELEMENT is not set -# CONFIG_ESP_TLS_SERVER is not set -# CONFIG_ESP_TLS_PSK_VERIFICATION is not set -# CONFIG_ESP_TLS_INSECURE is not set -# end of ESP-TLS - -# -# 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_2 is not set -# CONFIG_ESP32_REV_MIN_3 is not set -CONFIG_ESP32_REV_MIN=0 -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=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=y -# CONFIG_SPIRAM_USE_MALLOC is not set -CONFIG_SPIRAM_MEMTEST=y -# CONFIG_SPIRAM_TRY_ALLOCATE_WIFI_LWIP is not set -# 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_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_CUSTOM_SPIWP_SD3_PIN is not set -CONFIG_SPIRAM_SPIWP_SD3_PIN=7 -# 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 -CONFIG_ESP32_UNIVERSAL_MAC_ADDRESSES_FOUR=y -CONFIG_ESP32_UNIVERSAL_MAC_ADDRESSES=4 -# CONFIG_ESP32_ULP_COPROC_ENABLED is not set -CONFIG_ESP32_ULP_COPROC_RESERVE_MEM=0 -CONFIG_ESP32_DEBUG_OCDAWARE=y -CONFIG_ESP32_BROWNOUT_DET=y -# CONFIG_ESP32_BROWNOUT_DET_LVL_SEL_0 is not set -# CONFIG_ESP32_BROWNOUT_DET_LVL_SEL_1 is not set -# CONFIG_ESP32_BROWNOUT_DET_LVL_SEL_2 is not set -# CONFIG_ESP32_BROWNOUT_DET_LVL_SEL_3 is not set -CONFIG_ESP32_BROWNOUT_DET_LVL_SEL_4=y -# CONFIG_ESP32_BROWNOUT_DET_LVL_SEL_5 is not set -# CONFIG_ESP32_BROWNOUT_DET_LVL_SEL_6 is not set -# CONFIG_ESP32_BROWNOUT_DET_LVL_SEL_7 is not set -CONFIG_ESP32_BROWNOUT_DET_LVL=4 -CONFIG_ESP32_REDUCE_PHY_TX_POWER=y -CONFIG_ESP32_TIME_SYSCALL_USE_RTC_FRC1=y -# CONFIG_ESP32_TIME_SYSCALL_USE_RTC is not set -# CONFIG_ESP32_TIME_SYSCALL_USE_FRC1 is not set -# CONFIG_ESP32_TIME_SYSCALL_USE_NONE is not set -CONFIG_ESP32_RTC_CLK_SRC_INT_RC=y -# CONFIG_ESP32_RTC_CLK_SRC_EXT_CRYS is not set -# CONFIG_ESP32_RTC_CLK_SRC_EXT_OSC is not set -# CONFIG_ESP32_RTC_CLK_SRC_INT_8MD256 is not set -CONFIG_ESP32_RTC_CLK_CAL_CYCLES=1024 -CONFIG_ESP32_DEEP_SLEEP_WAKEUP_DELAY=2000 -CONFIG_ESP32_XTAL_FREQ_40=y -# CONFIG_ESP32_XTAL_FREQ_26 is not set -# CONFIG_ESP32_XTAL_FREQ_AUTO is not set -CONFIG_ESP32_XTAL_FREQ=40 -# CONFIG_ESP32_DISABLE_BASIC_ROM_CONSOLE is not set -# CONFIG_ESP32_NO_BLOBS is not set -# CONFIG_ESP32_COMPATIBLE_PRE_V2_1_BOOTLOADERS is not set -# CONFIG_ESP32_USE_FIXED_STATIC_RAM_SIZE is not set -CONFIG_ESP32_DPORT_DIS_INTERRUPT_LVL=5 -# end of ESP32-specific - -# -# ADC-Calibration -# -CONFIG_ADC_CAL_EFUSE_TP_ENABLE=y -CONFIG_ADC_CAL_EFUSE_VREF_ENABLE=y -CONFIG_ADC_CAL_LUT_ENABLE=y -# end of ADC-Calibration - -# -# Common ESP-related -# -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_IPC_TASK_STACK_SIZE=1024 -CONFIG_ESP_IPC_USES_CALLERS_PRIORITY=y -CONFIG_ESP_MINIMAL_SHARED_STACK_SIZE=2048 -CONFIG_ESP_CONSOLE_UART_DEFAULT=y -# CONFIG_ESP_CONSOLE_UART_CUSTOM is not set -# CONFIG_ESP_CONSOLE_NONE is not set -CONFIG_ESP_CONSOLE_UART=y -CONFIG_ESP_CONSOLE_MULTIPLE_UART=y -CONFIG_ESP_CONSOLE_UART_NUM=0 -CONFIG_ESP_CONSOLE_UART_BAUDRATE=115200 -CONFIG_ESP_INT_WDT=y -CONFIG_ESP_INT_WDT_TIMEOUT_MS=300 -CONFIG_ESP_INT_WDT_CHECK_CPU1=y -CONFIG_ESP_TASK_WDT=y -# CONFIG_ESP_TASK_WDT_PANIC is not set -CONFIG_ESP_TASK_WDT_TIMEOUT_S=5 -CONFIG_ESP_TASK_WDT_CHECK_IDLE_TASK_CPU0=y -CONFIG_ESP_TASK_WDT_CHECK_IDLE_TASK_CPU1=y -# CONFIG_ESP_PANIC_HANDLER_IRAM is not set -CONFIG_ESP_MAC_ADDR_UNIVERSE_WIFI_STA=y -CONFIG_ESP_MAC_ADDR_UNIVERSE_WIFI_AP=y -CONFIG_ESP_MAC_ADDR_UNIVERSE_BT=y -CONFIG_ESP_MAC_ADDR_UNIVERSE_ETH=y -# end of Common ESP-related - -# -# Ethernet -# -CONFIG_ETH_ENABLED=y -CONFIG_ETH_USE_ESP32_EMAC=y -CONFIG_ETH_PHY_INTERFACE_RMII=y -# CONFIG_ETH_PHY_INTERFACE_MII is not set -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_USE_SPI_ETHERNET=y -# CONFIG_ETH_SPI_ETHERNET_DM9051 is not set -# CONFIG_ETH_SPI_ETHERNET_W5500 is not set -# CONFIG_ETH_USE_OPENETH is not set -# end of Ethernet - -# -# Event Loop Library -# -# CONFIG_ESP_EVENT_LOOP_PROFILING is not set -CONFIG_ESP_EVENT_POST_FROM_ISR=y -# CONFIG_ESP_EVENT_POST_FROM_IRAM_ISR is not set -# end of Event Loop Library - -# -# GDB Stub -# -# end of GDB Stub - -# -# ESP HTTP client -# -CONFIG_ESP_HTTP_CLIENT_ENABLE_HTTPS=y -# CONFIG_ESP_HTTP_CLIENT_ENABLE_BASIC_AUTH is not set -# end of ESP HTTP client - -# -# HTTP Server -# -CONFIG_HTTPD_MAX_REQ_HDR_LEN=512 -CONFIG_HTTPD_MAX_URI_LEN=512 -CONFIG_HTTPD_ERR_RESP_NO_DELAY=y -CONFIG_HTTPD_PURGE_BUF_LEN=32 -# CONFIG_HTTPD_LOG_PURGE_DATA is not set -# CONFIG_HTTPD_WS_SUPPORT is not set -# end of HTTP Server - -# -# ESP HTTPS OTA -# -# CONFIG_OTA_ALLOW_HTTP is not set -# end of ESP HTTPS OTA - -# -# ESP HTTPS server -# -# CONFIG_ESP_HTTPS_SERVER_ENABLE is not set -# end of ESP HTTPS server - -# -# ESP NETIF Adapter -# -CONFIG_ESP_NETIF_IP_LOST_TIMER_INTERVAL=120 -CONFIG_ESP_NETIF_TCPIP_LWIP=y -# CONFIG_ESP_NETIF_LOOPBACK is not set -CONFIG_ESP_NETIF_TCPIP_ADAPTER_COMPATIBLE_LAYER=y -# end of ESP NETIF Adapter - -# -# Power Management -# -# CONFIG_PM_ENABLE is not set -CONFIG_PM_SLP_DEFAULT_PARAMS_OPT=y -# end of Power Management - -# -# ESP System Settings -# -# CONFIG_ESP_SYSTEM_PANIC_PRINT_HALT is not set -CONFIG_ESP_SYSTEM_PANIC_PRINT_REBOOT=y -# CONFIG_ESP_SYSTEM_PANIC_SILENT_REBOOT is not set -# CONFIG_ESP_SYSTEM_PANIC_GDBSTUB is not set - -# -# Memory protection -# -# end of Memory protection -# end of ESP System Settings - -# -# High resolution timer (esp_timer) -# -# CONFIG_ESP_TIMER_PROFILING is not set -CONFIG_ESP_TIME_FUNCS_USE_RTC_TIMER=y -CONFIG_ESP_TIME_FUNCS_USE_ESP_TIMER=y -CONFIG_ESP_TIMER_TASK_STACK_SIZE=2048 -# CONFIG_ESP_TIMER_IMPL_FRC2 is not set -CONFIG_ESP_TIMER_IMPL_TG0_LAC=y -# end of High resolution timer (esp_timer) - -# -# Wi-Fi -# -CONFIG_ESP32_WIFI_STATIC_RX_BUFFER_NUM=8 -CONFIG_ESP32_WIFI_DYNAMIC_RX_BUFFER_NUM=32 -# CONFIG_ESP32_WIFI_STATIC_TX_BUFFER is not set -CONFIG_ESP32_WIFI_DYNAMIC_TX_BUFFER=y -CONFIG_ESP32_WIFI_TX_BUFFER_TYPE=1 -CONFIG_ESP32_WIFI_CACHE_TX_BUFFER_NUM=32 -CONFIG_ESP32_WIFI_DYNAMIC_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=4 -CONFIG_ESP32_WIFI_AMPDU_RX_ENABLED=y -CONFIG_ESP32_WIFI_RX_BA_WIN=4 -# CONFIG_ESP32_WIFI_AMSDU_TX_ENABLED is not set -CONFIG_ESP32_WIFI_NVS_ENABLED=y -# CONFIG_ESP32_WIFI_TASK_PINNED_TO_CORE_0 is not set -CONFIG_ESP32_WIFI_TASK_PINNED_TO_CORE_1=y -CONFIG_ESP32_WIFI_SOFTAP_BEACON_MAX_LEN=752 -CONFIG_ESP32_WIFI_MGMT_SBUF_NUM=32 -# CONFIG_ESP32_WIFI_DEBUG_LOG_ENABLE is not set -CONFIG_ESP32_WIFI_IRAM_OPT=y -CONFIG_ESP32_WIFI_RX_IRAM_OPT=y -CONFIG_ESP32_WIFI_ENABLE_WPA3_SAE=y -CONFIG_ESP_WIFI_SLP_IRAM_OPT=y -CONFIG_ESP_WIFI_SLP_DEFAULT_MIN_ACTIVE_TIME=50 -CONFIG_ESP_WIFI_SLP_DEFAULT_MAX_ACTIVE_TIME=10 -# CONFIG_ESP_WIFI_STA_DISCONNECTED_PM_ENABLE is not set -# end of Wi-Fi - -# -# PHY -# -CONFIG_ESP32_PHY_CALIBRATION_AND_DATA_STORAGE=y -# CONFIG_ESP32_PHY_INIT_DATA_IN_PARTITION is not set -CONFIG_ESP32_PHY_MAX_WIFI_TX_POWER=20 -CONFIG_ESP32_PHY_MAX_TX_POWER=20 -# end of PHY - -# -# Core dump -# -# CONFIG_ESP_COREDUMP_ENABLE_TO_FLASH is not set -# CONFIG_ESP_COREDUMP_ENABLE_TO_UART is not set -CONFIG_ESP_COREDUMP_ENABLE_TO_NONE=y -# end of Core dump - -# -# FAT Filesystem support -# -# CONFIG_FATFS_CODEPAGE_DYNAMIC is not set -CONFIG_FATFS_CODEPAGE_437=y -# CONFIG_FATFS_CODEPAGE_720 is not set -# CONFIG_FATFS_CODEPAGE_737 is not set -# CONFIG_FATFS_CODEPAGE_771 is not set -# CONFIG_FATFS_CODEPAGE_775 is not set -# CONFIG_FATFS_CODEPAGE_850 is not set -# CONFIG_FATFS_CODEPAGE_852 is not set -# CONFIG_FATFS_CODEPAGE_855 is not set -# CONFIG_FATFS_CODEPAGE_857 is not set -# CONFIG_FATFS_CODEPAGE_860 is not set -# CONFIG_FATFS_CODEPAGE_861 is not set -# CONFIG_FATFS_CODEPAGE_862 is not set -# CONFIG_FATFS_CODEPAGE_863 is not set -# CONFIG_FATFS_CODEPAGE_864 is not set -# CONFIG_FATFS_CODEPAGE_865 is not set -# CONFIG_FATFS_CODEPAGE_866 is not set -# CONFIG_FATFS_CODEPAGE_869 is not set -# CONFIG_FATFS_CODEPAGE_932 is not set -# CONFIG_FATFS_CODEPAGE_936 is not set -# CONFIG_FATFS_CODEPAGE_949 is not set -# CONFIG_FATFS_CODEPAGE_950 is not set -CONFIG_FATFS_CODEPAGE=437 -CONFIG_FATFS_LFN_NONE=y -# CONFIG_FATFS_LFN_HEAP is not set -# CONFIG_FATFS_LFN_STACK is not set -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 - -# -# Modbus configuration -# -CONFIG_FMB_COMM_MODE_TCP_EN=y -CONFIG_FMB_TCP_PORT_DEFAULT=502 -CONFIG_FMB_TCP_PORT_MAX_CONN=5 -CONFIG_FMB_TCP_CONNECTION_TOUT_SEC=20 -CONFIG_FMB_COMM_MODE_RTU_EN=y -CONFIG_FMB_COMM_MODE_ASCII_EN=y -CONFIG_FMB_MASTER_TIMEOUT_MS_RESPOND=150 -CONFIG_FMB_MASTER_DELAY_MS_CONVERT=200 -CONFIG_FMB_QUEUE_LENGTH=20 -CONFIG_FMB_PORT_TASK_STACK_SIZE=4096 -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_CONTROLLER_SLAVE_ID_SUPPORT=y -CONFIG_FMB_CONTROLLER_SLAVE_ID=0x00112233 -CONFIG_FMB_CONTROLLER_NOTIFY_TIMEOUT=20 -CONFIG_FMB_CONTROLLER_NOTIFY_QUEUE_SIZE=20 -CONFIG_FMB_CONTROLLER_STACK_SIZE=4096 -CONFIG_FMB_EVENT_QUEUE_TIMEOUT=20 -CONFIG_FMB_TIMER_PORT_ENABLED=y -CONFIG_FMB_TIMER_GROUP=0 -CONFIG_FMB_TIMER_INDEX=0 -# CONFIG_FMB_TIMER_ISR_IN_IRAM is not set -# end of Modbus configuration - -# -# FreeRTOS -# -# CONFIG_FREERTOS_UNICORE is not set -CONFIG_FREERTOS_NO_AFFINITY=0x7FFFFFFF -CONFIG_FREERTOS_CORETIMER_0=y -# CONFIG_FREERTOS_CORETIMER_1 is not set -CONFIG_FREERTOS_HZ=1000 -CONFIG_FREERTOS_ASSERT_ON_UNTESTED_FUNCTION=y -# CONFIG_FREERTOS_CHECK_STACKOVERFLOW_NONE is not set -# CONFIG_FREERTOS_CHECK_STACKOVERFLOW_PTRVAL is not set -CONFIG_FREERTOS_CHECK_STACKOVERFLOW_CANARY=y -# CONFIG_FREERTOS_WATCHPOINT_END_OF_STACK is not set -CONFIG_FREERTOS_INTERRUPT_BACKTRACE=y -CONFIG_FREERTOS_THREAD_LOCAL_STORAGE_POINTERS=1 -# CONFIG_FREERTOS_ASSERT_FAIL_ABORT is not set -# CONFIG_FREERTOS_ASSERT_FAIL_PRINT_CONTINUE is not set -CONFIG_FREERTOS_ASSERT_DISABLE=y -CONFIG_FREERTOS_IDLE_TASK_STACKSIZE=768 -CONFIG_FREERTOS_ISR_STACKSIZE=1536 -# CONFIG_FREERTOS_LEGACY_HOOKS is not set -CONFIG_FREERTOS_MAX_TASK_NAME_LEN=10 -CONFIG_FREERTOS_SUPPORT_STATIC_ALLOCATION=y -# CONFIG_FREERTOS_ENABLE_STATIC_TASK_CLEAN_UP is not set -CONFIG_FREERTOS_TIMER_TASK_PRIORITY=1 -CONFIG_FREERTOS_TIMER_TASK_STACK_DEPTH=1536 -CONFIG_FREERTOS_TIMER_QUEUE_LENGTH=5 -CONFIG_FREERTOS_QUEUE_REGISTRY_SIZE=0 -# CONFIG_FREERTOS_USE_TRACE_FACILITY is not set -# CONFIG_FREERTOS_GENERATE_RUN_TIME_STATS is not set -CONFIG_FREERTOS_CHECK_MUTEX_GIVEN_BY_OWNER=y -# CONFIG_FREERTOS_CHECK_PORT_CRITICAL_COMPLIANCE is not set -# CONFIG_FREERTOS_PLACE_FUNCTIONS_INTO_FLASH is not set -CONFIG_FREERTOS_DEBUG_OCDAWARE=y -# CONFIG_FREERTOS_FPU_IN_ISR is not set -# end of FreeRTOS - -# -# Heap memory debugging -# -CONFIG_HEAP_POISONING_DISABLED=y -# CONFIG_HEAP_POISONING_LIGHT is not set -# CONFIG_HEAP_POISONING_COMPREHENSIVE is not set -CONFIG_HEAP_TRACING_OFF=y -# CONFIG_HEAP_TRACING_STANDALONE is not set -# CONFIG_HEAP_TRACING_TOHOST is not set -# CONFIG_HEAP_ABORT_WHEN_ALLOCATION_FAILS is not set -# end of Heap memory debugging - -# -# jsmn -# -# CONFIG_JSMN_PARENT_LINKS is not set -# CONFIG_JSMN_STRICT is not set -# end of jsmn - -# -# libsodium -# -# end of libsodium - -# -# Log output -# -# CONFIG_LOG_DEFAULT_LEVEL_NONE is not set -# CONFIG_LOG_DEFAULT_LEVEL_ERROR is not set -# CONFIG_LOG_DEFAULT_LEVEL_WARN is not set -CONFIG_LOG_DEFAULT_LEVEL_INFO=y -# CONFIG_LOG_DEFAULT_LEVEL_DEBUG is not set -# CONFIG_LOG_DEFAULT_LEVEL_VERBOSE is not set -CONFIG_LOG_DEFAULT_LEVEL=3 -CONFIG_LOG_COLORS=y -CONFIG_LOG_TIMESTAMP_SOURCE_RTOS=y -# CONFIG_LOG_TIMESTAMP_SOURCE_SYSTEM is not set -# end of Log output - -# -# LWIP -# -CONFIG_LWIP_LOCAL_HOSTNAME="espressif" -CONFIG_LWIP_DNS_SUPPORT_MDNS_QUERIES=y -# CONFIG_LWIP_L2_TO_L3_COPY is not set -CONFIG_LWIP_IRAM_OPTIMIZATION=y -CONFIG_LWIP_TIMERS_ONDEMAND=y -CONFIG_LWIP_MAX_SOCKETS=6 -# CONFIG_LWIP_USE_ONLY_LWIP_SELECT is not set -# CONFIG_LWIP_SO_LINGER is not set -CONFIG_LWIP_SO_REUSE=y -CONFIG_LWIP_SO_REUSE_RXTOALL=y -# CONFIG_LWIP_SO_RCVBUF is not set -# CONFIG_LWIP_NETBUF_RECVINFO is not set -CONFIG_LWIP_IP4_FRAG=y -CONFIG_LWIP_IP6_FRAG=y -# CONFIG_LWIP_IP4_REASSEMBLY is not set -# CONFIG_LWIP_IP6_REASSEMBLY is not set -# CONFIG_LWIP_IP_FORWARD is not set -# CONFIG_LWIP_STATS is not set -# CONFIG_LWIP_ETHARP_TRUST_IP_MAC is not set -CONFIG_LWIP_ESP_GRATUITOUS_ARP=y -CONFIG_LWIP_GARP_TMR_INTERVAL=60 -CONFIG_LWIP_TCPIP_RECVMBOX_SIZE=6 -CONFIG_LWIP_DHCP_DOES_ARP_CHECK=y -# CONFIG_LWIP_DHCP_RESTORE_LAST_IP is not set - -# -# DHCP server -# -CONFIG_LWIP_DHCPS_LEASE_UNIT=60 -CONFIG_LWIP_DHCPS_MAX_STATION_NUM=8 -# end of DHCP server - -# CONFIG_LWIP_AUTOIP is not set -CONFIG_LWIP_IPV6=y -# CONFIG_LWIP_IPV6_AUTOCONFIG is not set -CONFIG_LWIP_NETIF_LOOPBACK=y -CONFIG_LWIP_LOOPBACK_MAX_PBUFS=8 - -# -# TCP -# -CONFIG_LWIP_MAX_ACTIVE_TCP=3 -CONFIG_LWIP_MAX_LISTENING_TCP=3 -CONFIG_LWIP_TCP_HIGH_SPEED_RETRANSMISSION=y -CONFIG_LWIP_TCP_MAXRTX=12 -CONFIG_LWIP_TCP_SYNMAXRTX=6 -CONFIG_LWIP_TCP_MSS=1440 -CONFIG_LWIP_TCP_TMR_INTERVAL=100 -CONFIG_LWIP_TCP_MSL=60000 -CONFIG_LWIP_TCP_SND_BUF_DEFAULT=2880 -CONFIG_LWIP_TCP_WND_DEFAULT=5760 -CONFIG_LWIP_TCP_RECVMBOX_SIZE=6 -CONFIG_LWIP_TCP_QUEUE_OOSEQ=y -# CONFIG_LWIP_TCP_SACK_OUT is not set -# CONFIG_LWIP_TCP_KEEP_CONNECTION_WHEN_IP_CHANGES is not set -CONFIG_LWIP_TCP_OVERSIZE_MSS=y -# CONFIG_LWIP_TCP_OVERSIZE_QUARTER_MSS is not set -# CONFIG_LWIP_TCP_OVERSIZE_DISABLE is not set -CONFIG_LWIP_TCP_RTO_TIME=1500 -# end of TCP - -# -# UDP -# -CONFIG_LWIP_MAX_UDP_PCBS=1 -CONFIG_LWIP_UDP_RECVMBOX_SIZE=6 -# end of UDP - -# -# Checksums -# -# CONFIG_LWIP_CHECKSUM_CHECK_IP is not set -# CONFIG_LWIP_CHECKSUM_CHECK_UDP is not set -CONFIG_LWIP_CHECKSUM_CHECK_ICMP=y -# end of Checksums - -CONFIG_LWIP_TCPIP_TASK_STACK_SIZE=2048 -CONFIG_LWIP_TCPIP_TASK_AFFINITY_NO_AFFINITY=y -# CONFIG_LWIP_TCPIP_TASK_AFFINITY_CPU0 is not set -# CONFIG_LWIP_TCPIP_TASK_AFFINITY_CPU1 is not set -CONFIG_LWIP_TCPIP_TASK_AFFINITY=0x7FFFFFFF -# CONFIG_LWIP_PPP_SUPPORT is not set -CONFIG_LWIP_IPV6_MEMP_NUM_ND6_QUEUE=3 -CONFIG_LWIP_IPV6_ND6_NUM_NEIGHBORS=5 -# CONFIG_LWIP_SLIP_SUPPORT is not set - -# -# ICMP -# -# CONFIG_LWIP_MULTICAST_PING is not set -# CONFIG_LWIP_BROADCAST_PING is not set -# end of ICMP - -# -# LWIP RAW API -# -CONFIG_LWIP_MAX_RAW_PCBS=16 -# end of LWIP RAW API - -# -# SNTP -# -CONFIG_LWIP_DHCP_MAX_NTP_SERVERS=1 -CONFIG_LWIP_SNTP_UPDATE_DELAY=3600000 -# end of SNTP - -CONFIG_LWIP_ESP_LWIP_ASSERT=y - -# -# Hooks -# -# CONFIG_LWIP_HOOK_TCP_ISN_NONE is not set -CONFIG_LWIP_HOOK_TCP_ISN_DEFAULT=y -# CONFIG_LWIP_HOOK_TCP_ISN_CUSTOM is not set -CONFIG_LWIP_HOOK_IP6_ROUTE_NONE=y -# CONFIG_LWIP_HOOK_IP6_ROUTE_DEFAULT is not set -# CONFIG_LWIP_HOOK_IP6_ROUTE_CUSTOM is not set -CONFIG_LWIP_HOOK_NETCONN_EXT_RESOLVE_NONE=y -# CONFIG_LWIP_HOOK_NETCONN_EXT_RESOLVE_DEFAULT is not set -# CONFIG_LWIP_HOOK_NETCONN_EXT_RESOLVE_CUSTOM is not set -# end of Hooks - -# CONFIG_LWIP_DEBUG is not set -# end of LWIP - -# -# 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 -CONFIG_MBEDTLS_SSL_IN_CONTENT_LEN=16384 -CONFIG_MBEDTLS_SSL_OUT_CONTENT_LEN=4096 -# CONFIG_MBEDTLS_DYNAMIC_BUFFER is not set -# CONFIG_MBEDTLS_DEBUG is not set - -# -# Certificate Bundle -# -CONFIG_MBEDTLS_CERTIFICATE_BUNDLE=y -CONFIG_MBEDTLS_CERTIFICATE_BUNDLE_DEFAULT_FULL=y -# CONFIG_MBEDTLS_CERTIFICATE_BUNDLE_DEFAULT_CMN is not set -# CONFIG_MBEDTLS_CERTIFICATE_BUNDLE_DEFAULT_NONE is not set -# CONFIG_MBEDTLS_CUSTOM_CERTIFICATE_BUNDLE is not set -# end of Certificate Bundle - -# CONFIG_MBEDTLS_ECP_RESTARTABLE is not set -# CONFIG_MBEDTLS_CMAC_C is not set -CONFIG_MBEDTLS_HARDWARE_AES=y -CONFIG_MBEDTLS_HARDWARE_MPI=y -CONFIG_MBEDTLS_HARDWARE_SHA=y -CONFIG_MBEDTLS_ROM_MD5=y -# CONFIG_MBEDTLS_ATCA_HW_ECDSA_SIGN is not set -# CONFIG_MBEDTLS_ATCA_HW_ECDSA_VERIFY is not set -CONFIG_MBEDTLS_HAVE_TIME=y -# CONFIG_MBEDTLS_HAVE_TIME_DATE is not set -CONFIG_MBEDTLS_ECDSA_DETERMINISTIC=y -CONFIG_MBEDTLS_SHA512_C=y -CONFIG_MBEDTLS_TLS_SERVER_AND_CLIENT=y -# CONFIG_MBEDTLS_TLS_SERVER_ONLY is not set -# CONFIG_MBEDTLS_TLS_CLIENT_ONLY is not set -# CONFIG_MBEDTLS_TLS_DISABLED is not set -CONFIG_MBEDTLS_TLS_SERVER=y -CONFIG_MBEDTLS_TLS_CLIENT=y -CONFIG_MBEDTLS_TLS_ENABLED=y - -# -# TLS Key Exchange Methods -# -# CONFIG_MBEDTLS_PSK_MODES is not set -CONFIG_MBEDTLS_KEY_EXCHANGE_RSA=y -CONFIG_MBEDTLS_KEY_EXCHANGE_DHE_RSA=y -CONFIG_MBEDTLS_KEY_EXCHANGE_ELLIPTIC_CURVE=y -CONFIG_MBEDTLS_KEY_EXCHANGE_ECDHE_RSA=y -CONFIG_MBEDTLS_KEY_EXCHANGE_ECDHE_ECDSA=y -CONFIG_MBEDTLS_KEY_EXCHANGE_ECDH_ECDSA=y -CONFIG_MBEDTLS_KEY_EXCHANGE_ECDH_RSA=y -# end of TLS Key Exchange Methods - -CONFIG_MBEDTLS_SSL_RENEGOTIATION=y -# CONFIG_MBEDTLS_SSL_PROTO_SSL3 is not set -CONFIG_MBEDTLS_SSL_PROTO_TLS1=y -CONFIG_MBEDTLS_SSL_PROTO_TLS1_1=y -CONFIG_MBEDTLS_SSL_PROTO_TLS1_2=y -# CONFIG_MBEDTLS_SSL_PROTO_DTLS is not set -CONFIG_MBEDTLS_SSL_ALPN=y -CONFIG_MBEDTLS_CLIENT_SSL_SESSION_TICKETS=y -CONFIG_MBEDTLS_SERVER_SSL_SESSION_TICKETS=y - -# -# Symmetric Ciphers -# -CONFIG_MBEDTLS_AES_C=y -# CONFIG_MBEDTLS_CAMELLIA_C is not set -# CONFIG_MBEDTLS_DES_C is not set -CONFIG_MBEDTLS_RC4_DISABLED=y -# CONFIG_MBEDTLS_RC4_ENABLED_NO_DEFAULT is not set -# CONFIG_MBEDTLS_RC4_ENABLED is not set -# CONFIG_MBEDTLS_BLOWFISH_C is not set -# CONFIG_MBEDTLS_XTEA_C is not set -CONFIG_MBEDTLS_CCM_C=y -CONFIG_MBEDTLS_GCM_C=y -# end of Symmetric Ciphers - -# CONFIG_MBEDTLS_RIPEMD160_C is not set - -# -# Certificates -# -CONFIG_MBEDTLS_PEM_PARSE_C=y -CONFIG_MBEDTLS_PEM_WRITE_C=y -CONFIG_MBEDTLS_X509_CRL_PARSE_C=y -CONFIG_MBEDTLS_X509_CSR_PARSE_C=y -# end of Certificates - -CONFIG_MBEDTLS_ECP_C=y -CONFIG_MBEDTLS_ECDH_C=y -CONFIG_MBEDTLS_ECDSA_C=y -# CONFIG_MBEDTLS_ECJPAKE_C is not set -CONFIG_MBEDTLS_ECP_DP_SECP192R1_ENABLED=y -CONFIG_MBEDTLS_ECP_DP_SECP224R1_ENABLED=y -CONFIG_MBEDTLS_ECP_DP_SECP256R1_ENABLED=y -CONFIG_MBEDTLS_ECP_DP_SECP384R1_ENABLED=y -CONFIG_MBEDTLS_ECP_DP_SECP521R1_ENABLED=y -CONFIG_MBEDTLS_ECP_DP_SECP192K1_ENABLED=y -CONFIG_MBEDTLS_ECP_DP_SECP224K1_ENABLED=y -CONFIG_MBEDTLS_ECP_DP_SECP256K1_ENABLED=y -CONFIG_MBEDTLS_ECP_DP_BP256R1_ENABLED=y -CONFIG_MBEDTLS_ECP_DP_BP384R1_ENABLED=y -CONFIG_MBEDTLS_ECP_DP_BP512R1_ENABLED=y -CONFIG_MBEDTLS_ECP_DP_CURVE25519_ENABLED=y -CONFIG_MBEDTLS_ECP_NIST_OPTIM=y -# CONFIG_MBEDTLS_POLY1305_C is not set -# CONFIG_MBEDTLS_CHACHA20_C is not set -# CONFIG_MBEDTLS_HKDF_C is not set -# CONFIG_MBEDTLS_THREADING_C is not set -# CONFIG_MBEDTLS_LARGE_KEY_SOFTWARE_MPI is not set -# CONFIG_MBEDTLS_SECURITY_RISKS is not set -# end of mbedTLS - -# -# mDNS -# -CONFIG_MDNS_MAX_SERVICES=10 -CONFIG_MDNS_TASK_PRIORITY=1 -CONFIG_MDNS_TASK_STACK_SIZE=2048 -CONFIG_MDNS_TASK_AFFINITY_NO_AFFINITY=y -# CONFIG_MDNS_TASK_AFFINITY_CPU0 is not set -# CONFIG_MDNS_TASK_AFFINITY_CPU1 is not set -CONFIG_MDNS_TASK_AFFINITY=0x7FFFFFFF -CONFIG_MDNS_SERVICE_ADD_TIMEOUT_MS=2000 -# CONFIG_MDNS_STRICT_MODE is not set -CONFIG_MDNS_TIMER_PERIOD_MS=100 -# end of mDNS - -# -# ESP-MQTT Configurations -# -CONFIG_MQTT_PROTOCOL_311=y -CONFIG_MQTT_TRANSPORT_SSL=y -CONFIG_MQTT_TRANSPORT_WEBSOCKET=y -CONFIG_MQTT_TRANSPORT_WEBSOCKET_SECURE=y -# CONFIG_MQTT_MSG_ID_INCREMENTAL is not set -# CONFIG_MQTT_SKIP_PUBLISH_IF_DISCONNECTED is not set -# CONFIG_MQTT_REPORT_DELETED_MESSAGES is not set -# CONFIG_MQTT_USE_CUSTOM_CONFIG is not set -# CONFIG_MQTT_TASK_CORE_SELECTION_ENABLED is not set -# CONFIG_MQTT_CUSTOM_OUTBOX is not set -# end of ESP-MQTT Configurations - -# -# Newlib -# -CONFIG_NEWLIB_STDOUT_LINE_ENDING_CRLF=y -# CONFIG_NEWLIB_STDOUT_LINE_ENDING_LF is not set -# CONFIG_NEWLIB_STDOUT_LINE_ENDING_CR is not set -# CONFIG_NEWLIB_STDIN_LINE_ENDING_CRLF is not set -# CONFIG_NEWLIB_STDIN_LINE_ENDING_LF is not set -CONFIG_NEWLIB_STDIN_LINE_ENDING_CR=y -# CONFIG_NEWLIB_NANO_FORMAT is not set -# end of Newlib - -# -# NVS -# -# end of NVS - -# -# OpenSSL -# -# CONFIG_OPENSSL_DEBUG is not set -CONFIG_OPENSSL_ERROR_STACK=y -# CONFIG_OPENSSL_ASSERT_DO_NOTHING is not set -CONFIG_OPENSSL_ASSERT_EXIT=y -# end of OpenSSL - -# -# PThreads -# -CONFIG_PTHREAD_TASK_PRIO_DEFAULT=5 -CONFIG_PTHREAD_TASK_STACK_SIZE_DEFAULT=3072 -CONFIG_PTHREAD_STACK_MIN=768 -CONFIG_PTHREAD_DEFAULT_CORE_NO_AFFINITY=y -# CONFIG_PTHREAD_DEFAULT_CORE_0 is not set -# CONFIG_PTHREAD_DEFAULT_CORE_1 is not set -CONFIG_PTHREAD_TASK_CORE_DEFAULT=-1 -CONFIG_PTHREAD_TASK_NAME_DEFAULT="pthread" -# end of PThreads - -# -# SPI Flash driver -# -# CONFIG_SPI_FLASH_VERIFY_WRITE is not set -# CONFIG_SPI_FLASH_ENABLE_COUNTERS is not set -CONFIG_SPI_FLASH_ROM_DRIVER_PATCH=y -CONFIG_SPI_FLASH_DANGEROUS_WRITE_ABORTS=y -# CONFIG_SPI_FLASH_DANGEROUS_WRITE_FAILS is not set -# CONFIG_SPI_FLASH_DANGEROUS_WRITE_ALLOWED is not set -# CONFIG_SPI_FLASH_USE_LEGACY_IMPL is not set -# CONFIG_SPI_FLASH_SHARE_SPI1_BUS is not set -# CONFIG_SPI_FLASH_BYPASS_BLOCK_ERASE is not set -CONFIG_SPI_FLASH_YIELD_DURING_ERASE=y -CONFIG_SPI_FLASH_ERASE_YIELD_DURATION_MS=20 -CONFIG_SPI_FLASH_ERASE_YIELD_TICKS=1 -CONFIG_SPI_FLASH_WRITE_CHUNK_SIZE=8192 -# CONFIG_SPI_FLASH_SIZE_OVERRIDE is not set -# CONFIG_SPI_FLASH_CHECK_ERASE_TIMEOUT_DISABLED is not set - -# -# Auto-detect flash chips -# -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 -# end of Auto-detect flash chips - -CONFIG_SPI_FLASH_ENABLE_ENCRYPTED_READ_WRITE=y -# end of SPI Flash driver - -# -# SPIFFS Configuration -# -CONFIG_SPIFFS_MAX_PARTITIONS=3 - -# -# SPIFFS Cache Configuration -# -CONFIG_SPIFFS_CACHE=y -CONFIG_SPIFFS_CACHE_WR=y -# CONFIG_SPIFFS_CACHE_STATS is not set -# end of SPIFFS Cache Configuration - -CONFIG_SPIFFS_PAGE_CHECK=y -CONFIG_SPIFFS_GC_MAX_RUNS=10 -# CONFIG_SPIFFS_GC_STATS is not set -CONFIG_SPIFFS_PAGE_SIZE=256 -CONFIG_SPIFFS_OBJ_NAME_LEN=32 -# CONFIG_SPIFFS_FOLLOW_SYMLINKS is not set -CONFIG_SPIFFS_USE_MAGIC=y -CONFIG_SPIFFS_USE_MAGIC_LENGTH=y -CONFIG_SPIFFS_META_LENGTH=4 -CONFIG_SPIFFS_USE_MTIME=y - -# -# Debug Configuration -# -# CONFIG_SPIFFS_DBG is not set -# CONFIG_SPIFFS_API_DBG is not set -# CONFIG_SPIFFS_GC_DBG is not set -# CONFIG_SPIFFS_CACHE_DBG is not set -# CONFIG_SPIFFS_CHECK_DBG is not set -# CONFIG_SPIFFS_TEST_VISUALISATION is not set -# end of Debug Configuration -# end of SPIFFS Configuration - -# -# TCP Transport -# -CONFIG_WS_BUFFER_SIZE=1024 -# end of TCP Transport - -# -# TinyUSB -# -# end of TinyUSB - -# -# Unity unit testing library -# -CONFIG_UNITY_ENABLE_FLOAT=y -CONFIG_UNITY_ENABLE_DOUBLE=y -# CONFIG_UNITY_ENABLE_COLOR is not set -CONFIG_UNITY_ENABLE_IDF_TEST_RUNNER=y -# CONFIG_UNITY_ENABLE_FIXTURE is not set -# CONFIG_UNITY_ENABLE_BACKTRACE_ON_FAIL is not set -# end of Unity unit testing library - -# -# Virtual file system -# -# CONFIG_VFS_SUPPORT_IO is not set -# end of Virtual file system - -# -# Wear Levelling -# -# CONFIG_WL_SECTOR_SIZE_512 is not set -CONFIG_WL_SECTOR_SIZE_4096=y -CONFIG_WL_SECTOR_SIZE=4096 -# end of Wear Levelling - -# -# Wi-Fi Provisioning Manager -# -CONFIG_WIFI_PROV_SCAN_MAX_ENTRIES=16 -CONFIG_WIFI_PROV_AUTOSTOP_TIMEOUT=30 -# end of Wi-Fi Provisioning Manager - -# -# Supplicant -# -CONFIG_WPA_MBEDTLS_CRYPTO=y -# CONFIG_WPA_WAPI_PSK is not set -# CONFIG_WPA_DEBUG_PRINT is not set -# CONFIG_WPA_TESTING_OPTIONS is not set -# CONFIG_WPA_WPS_WARS is not set -# CONFIG_WPA_11KV_SUPPORT is not set -# end of Supplicant - -# -# DSP Library -# -# CONFIG_DSP_ANSI is not set -CONFIG_DSP_OPTIMIZED=y -CONFIG_DSP_OPTIMIZATION=1 -# CONFIG_DSP_MAX_FFT_SIZE_512 is not set -# CONFIG_DSP_MAX_FFT_SIZE_1024 is not set -# CONFIG_DSP_MAX_FFT_SIZE_2048 is not set -CONFIG_DSP_MAX_FFT_SIZE_4096=y -# CONFIG_DSP_MAX_FFT_SIZE_8192 is not set -# CONFIG_DSP_MAX_FFT_SIZE_16384 is not set -# CONFIG_DSP_MAX_FFT_SIZE_32768 is not set -CONFIG_DSP_MAX_FFT_SIZE=4096 -# end of DSP Library - -# -# WebSocket Server -# -CONFIG_WEBSOCKET_SERVER_MAX_CLIENTS=1 -CONFIG_WEBSOCKET_SERVER_QUEUE_SIZE=2 -CONFIG_WEBSOCKET_SERVER_QUEUE_TIMEOUT=30 -CONFIG_WEBSOCKET_SERVER_TASK_STACK_DEPTH=3000 -CONFIG_WEBSOCKET_SERVER_TASK_PRIORITY=5 -# CONFIG_WEBSOCKET_SERVER_PINNED is not set -# end of WebSocket Server -# end of Component config - -# -# Compatibility options -# -# CONFIG_LEGACY_INCLUDE_COMMON_HEADERS is not set -# end of Compatibility options - -# Deprecated options for backward compatibility -CONFIG_TOOLPREFIX="xtensa-esp32-elf-" -# CONFIG_LOG_BOOTLOADER_LEVEL_NONE is not set -# CONFIG_LOG_BOOTLOADER_LEVEL_ERROR is not set -# CONFIG_LOG_BOOTLOADER_LEVEL_WARN is not set -CONFIG_LOG_BOOTLOADER_LEVEL_INFO=y -# CONFIG_LOG_BOOTLOADER_LEVEL_DEBUG is not set -# CONFIG_LOG_BOOTLOADER_LEVEL_VERBOSE is not set -CONFIG_LOG_BOOTLOADER_LEVEL=3 -CONFIG_APP_ROLLBACK_ENABLE=y -# CONFIG_APP_ANTI_ROLLBACK is not set -# CONFIG_FLASH_ENCRYPTION_ENABLED is not set -# CONFIG_FLASHMODE_QIO is not set -# CONFIG_FLASHMODE_QOUT is not set -CONFIG_FLASHMODE_DIO=y -# CONFIG_FLASHMODE_DOUT is not set -# CONFIG_MONITOR_BAUD_9600B is not set -# CONFIG_MONITOR_BAUD_57600B is not set -CONFIG_MONITOR_BAUD_115200B=y -# CONFIG_MONITOR_BAUD_230400B is not set -# CONFIG_MONITOR_BAUD_921600B is not set -# CONFIG_MONITOR_BAUD_2MB is not set -# CONFIG_MONITOR_BAUD_OTHER is not set -CONFIG_MONITOR_BAUD_OTHER_VAL=115200 -CONFIG_MONITOR_BAUD=115200 -# CONFIG_COMPILER_OPTIMIZATION_LEVEL_DEBUG is not set -CONFIG_COMPILER_OPTIMIZATION_LEVEL_RELEASE=y -CONFIG_OPTIMIZATION_ASSERTIONS_ENABLED=y -# CONFIG_OPTIMIZATION_ASSERTIONS_SILENT is not set -# CONFIG_OPTIMIZATION_ASSERTIONS_DISABLED is not set -# CONFIG_CXX_EXCEPTIONS is not set -CONFIG_STACK_CHECK_NONE=y -# CONFIG_STACK_CHECK_NORM is not set -# CONFIG_STACK_CHECK_STRONG is not set -# CONFIG_STACK_CHECK_ALL is not set -# CONFIG_WARN_WRITE_STRINGS is not set -# CONFIG_DISABLE_GCC8_WARNINGS is not set -# 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=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 -CONFIG_NUMBER_OF_UNIVERSAL_MAC_ADDRESS=4 -# CONFIG_ULP_COPROC_ENABLED is not set -CONFIG_ULP_COPROC_RESERVE_MEM=0 -CONFIG_BROWNOUT_DET=y -# CONFIG_BROWNOUT_DET_LVL_SEL_0 is not set -# CONFIG_BROWNOUT_DET_LVL_SEL_1 is not set -# CONFIG_BROWNOUT_DET_LVL_SEL_2 is not set -# CONFIG_BROWNOUT_DET_LVL_SEL_3 is not set -CONFIG_BROWNOUT_DET_LVL_SEL_4=y -# CONFIG_BROWNOUT_DET_LVL_SEL_5 is not set -# CONFIG_BROWNOUT_DET_LVL_SEL_6 is not set -# CONFIG_BROWNOUT_DET_LVL_SEL_7 is not set -CONFIG_BROWNOUT_DET_LVL=4 -CONFIG_REDUCE_PHY_TX_POWER=y -CONFIG_ESP32_RTC_CLOCK_SOURCE_INTERNAL_RC=y -# CONFIG_ESP32_RTC_CLOCK_SOURCE_EXTERNAL_CRYSTAL is not set -# CONFIG_ESP32_RTC_CLOCK_SOURCE_EXTERNAL_OSC is not set -# CONFIG_ESP32_RTC_CLOCK_SOURCE_INTERNAL_8MD256 is not set -# CONFIG_DISABLE_BASIC_ROM_CONSOLE is not set -# CONFIG_NO_BLOBS is not set -# 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_IPC_TASK_STACK_SIZE=1024 -CONFIG_CONSOLE_UART_DEFAULT=y -# CONFIG_CONSOLE_UART_CUSTOM is not set -# CONFIG_ESP_CONSOLE_UART_NONE is not set -CONFIG_CONSOLE_UART=y -CONFIG_CONSOLE_UART_NUM=0 -CONFIG_CONSOLE_UART_BAUDRATE=115200 -CONFIG_INT_WDT=y -CONFIG_INT_WDT_TIMEOUT_MS=300 -CONFIG_INT_WDT_CHECK_CPU1=y -CONFIG_TASK_WDT=y -# CONFIG_TASK_WDT_PANIC is not set -CONFIG_TASK_WDT_TIMEOUT_S=5 -CONFIG_TASK_WDT_CHECK_IDLE_TASK_CPU0=y -CONFIG_TASK_WDT_CHECK_IDLE_TASK_CPU1=y -# CONFIG_EVENT_LOOP_PROFILING is not set -CONFIG_POST_EVENTS_FROM_ISR=y -# CONFIG_POST_EVENTS_FROM_IRAM_ISR is not set -# CONFIG_ESP32S2_PANIC_PRINT_HALT is not set -CONFIG_ESP32S2_PANIC_PRINT_REBOOT=y -# CONFIG_ESP32S2_PANIC_SILENT_REBOOT is not set -# CONFIG_ESP32S2_PANIC_GDBSTUB is not set -CONFIG_TIMER_TASK_STACK_SIZE=2048 -# CONFIG_ESP32_ENABLE_COREDUMP_TO_FLASH is not set -# CONFIG_ESP32_ENABLE_COREDUMP_TO_UART is not set -CONFIG_ESP32_ENABLE_COREDUMP_TO_NONE=y -CONFIG_MB_MASTER_TIMEOUT_MS_RESPOND=150 -CONFIG_MB_MASTER_DELAY_MS_CONVERT=200 -CONFIG_MB_QUEUE_LENGTH=20 -CONFIG_MB_SERIAL_TASK_STACK_SIZE=4096 -CONFIG_MB_SERIAL_BUF_SIZE=256 -CONFIG_MB_SERIAL_TASK_PRIO=10 -CONFIG_MB_CONTROLLER_SLAVE_ID_SUPPORT=y -CONFIG_MB_CONTROLLER_SLAVE_ID=0x00112233 -CONFIG_MB_CONTROLLER_NOTIFY_TIMEOUT=20 -CONFIG_MB_CONTROLLER_NOTIFY_QUEUE_SIZE=20 -CONFIG_MB_CONTROLLER_STACK_SIZE=4096 -CONFIG_MB_EVENT_QUEUE_TIMEOUT=20 -CONFIG_MB_TIMER_PORT_ENABLED=y -CONFIG_MB_TIMER_GROUP=0 -CONFIG_MB_TIMER_INDEX=0 -# CONFIG_ENABLE_STATIC_TASK_CLEAN_UP_HOOK is not set -CONFIG_TIMER_TASK_PRIORITY=1 -CONFIG_TIMER_TASK_STACK_DEPTH=1536 -CONFIG_TIMER_QUEUE_LENGTH=5 -# CONFIG_L2_TO_L3_COPY is not set -# CONFIG_USE_ONLY_LWIP_SELECT is not set -CONFIG_ESP_GRATUITOUS_ARP=y -CONFIG_GARP_TMR_INTERVAL=60 -CONFIG_TCPIP_RECVMBOX_SIZE=6 -CONFIG_TCP_MAXRTX=12 -CONFIG_TCP_SYNMAXRTX=6 -CONFIG_TCP_MSS=1440 -CONFIG_TCP_MSL=60000 -CONFIG_TCP_SND_BUF_DEFAULT=2880 -CONFIG_TCP_WND_DEFAULT=5760 -CONFIG_TCP_RECVMBOX_SIZE=6 -CONFIG_TCP_QUEUE_OOSEQ=y -# CONFIG_ESP_TCP_KEEP_CONNECTION_WHEN_IP_CHANGES is not set -CONFIG_TCP_OVERSIZE_MSS=y -# CONFIG_TCP_OVERSIZE_QUARTER_MSS is not set -# CONFIG_TCP_OVERSIZE_DISABLE is not set -CONFIG_UDP_RECVMBOX_SIZE=6 -CONFIG_TCPIP_TASK_STACK_SIZE=2048 -CONFIG_TCPIP_TASK_AFFINITY_NO_AFFINITY=y -# CONFIG_TCPIP_TASK_AFFINITY_CPU0 is not set -# CONFIG_TCPIP_TASK_AFFINITY_CPU1 is not set -CONFIG_TCPIP_TASK_AFFINITY=0x7FFFFFFF -# CONFIG_PPP_SUPPORT is not set -CONFIG_ESP32_PTHREAD_TASK_PRIO_DEFAULT=5 -CONFIG_ESP32_PTHREAD_TASK_STACK_SIZE_DEFAULT=3072 -CONFIG_ESP32_PTHREAD_STACK_MIN=768 -CONFIG_ESP32_DEFAULT_PTHREAD_CORE_NO_AFFINITY=y -# CONFIG_ESP32_DEFAULT_PTHREAD_CORE_0 is not set -# CONFIG_ESP32_DEFAULT_PTHREAD_CORE_1 is not set -CONFIG_ESP32_PTHREAD_TASK_CORE_DEFAULT=-1 -CONFIG_ESP32_PTHREAD_TASK_NAME_DEFAULT="pthread" -CONFIG_SPI_FLASH_WRITING_DANGEROUS_REGIONS_ABORTS=y -# CONFIG_SPI_FLASH_WRITING_DANGEROUS_REGIONS_FAILS is not set -# CONFIG_SPI_FLASH_WRITING_DANGEROUS_REGIONS_ALLOWED is not set -# End of deprecated options