- correct faulty pcm chunk allocation if SPIRAM is enabled
Signed-off-by: Karl Osterseher <karli_o@gmx.at>
This commit is contained in:
@@ -253,7 +253,7 @@ int init_player(void) {
|
|||||||
currentSnapcastSetting.buf_ms = 1000;
|
currentSnapcastSetting.buf_ms = 1000;
|
||||||
currentSnapcastSetting.chkDur_ms = 20;
|
currentSnapcastSetting.chkDur_ms = 20;
|
||||||
currentSnapcastSetting.codec = NONE;
|
currentSnapcastSetting.codec = NONE;
|
||||||
currentSnapcastSetting.sr = 44100;
|
currentSnapcastSetting.sr = 48000;
|
||||||
currentSnapcastSetting.ch = 2;
|
currentSnapcastSetting.ch = 2;
|
||||||
currentSnapcastSetting.bits = 16;
|
currentSnapcastSetting.bits = 16;
|
||||||
currentSnapcastSetting.muted = false;
|
currentSnapcastSetting.muted = false;
|
||||||
@@ -712,14 +712,35 @@ int32_t allocate_pcm_chunk_memory_caps(pcm_chunk_message_t *pcmChunk,
|
|||||||
// first we try to allocated 32 bit aligned memory for payload
|
// 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
|
// check available memory first so we can decide if we need to fragment the
|
||||||
// data
|
// data
|
||||||
freeMem = heap_caps_get_free_size(caps);
|
if (caps != 0) {
|
||||||
largestFreeBlock = heap_caps_get_largest_free_block(caps);
|
freeMem = heap_caps_get_free_size(caps);
|
||||||
if ((freeMem >= bytes) && (largestFreeBlock >= bytes)) {
|
largestFreeBlock = heap_caps_get_largest_free_block(caps);
|
||||||
// ESP_LOGI(TAG, "32b f %d b %d", freeMem, largestFreeBlock);
|
if ((freeMem >= bytes) && (largestFreeBlock >= bytes)) {
|
||||||
|
// ESP_LOGI(TAG, "32b f %d b %d", freeMem, largestFreeBlock);
|
||||||
|
|
||||||
pcmChunk->fragment->payload = (char *)heap_caps_malloc(bytes, caps);
|
pcmChunk->fragment->payload = (char *)heap_caps_malloc(bytes, caps);
|
||||||
|
if (pcmChunk->fragment->payload == NULL) {
|
||||||
|
ESP_LOGE(
|
||||||
|
TAG,
|
||||||
|
"Failed to heap_caps_malloc(%d, %d) memory for pcm chunk payload",
|
||||||
|
bytes, caps);
|
||||||
|
|
||||||
|
ret = -2;
|
||||||
|
} else {
|
||||||
|
pcmChunk->totalSize = bytes;
|
||||||
|
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", bytes, freeMem, largestFreeBlock);
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
pcmChunk->fragment->payload = (char *)malloc(bytes);
|
||||||
if (pcmChunk->fragment->payload == NULL) {
|
if (pcmChunk->fragment->payload == NULL) {
|
||||||
ESP_LOGE(TAG, "Failed to allocate IRAM memory for pcm chunk payload");
|
ESP_LOGE(TAG, "Failed to malloc memory for pcm chunk payload");
|
||||||
|
|
||||||
ret = -2;
|
ret = -2;
|
||||||
} else {
|
} else {
|
||||||
@@ -729,9 +750,6 @@ int32_t allocate_pcm_chunk_memory_caps(pcm_chunk_message_t *pcmChunk,
|
|||||||
|
|
||||||
ret = 0;
|
ret = 0;
|
||||||
}
|
}
|
||||||
} else {
|
|
||||||
// ESP_LOGE (TAG, "couldn't get memory to insert chunk of size %d, IRAM
|
|
||||||
// freemem: %d blocksize %d", bytes, freeMem, largestFreeBlock);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
return ret;
|
return ret;
|
||||||
@@ -850,44 +868,52 @@ int32_t allocate_pcm_chunk_memory(pcm_chunk_message_t **pcmChunk,
|
|||||||
return -2;
|
return -2;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
//#if CONFIG_SPIRAM && CONFIG_SPIRAM_BOOT_INIT
|
||||||
|
// (*pcmChunk)->fragment->payload =
|
||||||
|
// (char *)heap_caps_malloc(bytes, MALLOC_CAP_8BIT | MALLOC_CAP_SPIRAM);
|
||||||
|
// if ((*pcmChunk)->fragment->payload == NULL) {
|
||||||
|
// // size_t largestFreeBlock, freeMem;
|
||||||
|
// // 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;
|
||||||
|
// }
|
||||||
|
//#elif CONFIG_SPIRAM
|
||||||
|
// (*pcmChunk)->fragment->payload = (char *)malloc(bytes);
|
||||||
|
// if ((*pcmChunk)->fragment->payload == NULL) {
|
||||||
|
// // size_t largestFreeBlock, freeMem;
|
||||||
|
// // 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
|
||||||
#if CONFIG_SPIRAM && CONFIG_SPIRAM_BOOT_INIT
|
#if CONFIG_SPIRAM && CONFIG_SPIRAM_BOOT_INIT
|
||||||
(*pcmChunk)->fragment->payload =
|
ret = allocate_pcm_chunk_memory_caps(*pcmChunk, bytes,
|
||||||
(char *)heap_caps_malloc(bytes, MALLOC_CAP_8BIT | MALLOC_CAP_SPIRAM);
|
MALLOC_CAP_8BIT | MALLOC_CAP_SPIRAM);
|
||||||
if ((*pcmChunk)->fragment->payload == NULL) {
|
|
||||||
// size_t largestFreeBlock, freeMem;
|
|
||||||
// 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;
|
|
||||||
}
|
|
||||||
#elif CONFIG_SPIRAM
|
#elif CONFIG_SPIRAM
|
||||||
(*pcmChunk)->fragment->payload = (char *)malloc(bytes);
|
ret = allocate_pcm_chunk_memory_caps(*pcmChunk, bytes, 0);
|
||||||
if ((*pcmChunk)->fragment->payload == NULL) {
|
|
||||||
// size_t largestFreeBlock, freeMem;
|
|
||||||
// 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
|
#else
|
||||||
ret = allocate_pcm_chunk_memory_caps(*pcmChunk, bytes,
|
ret = allocate_pcm_chunk_memory_caps(*pcmChunk, bytes,
|
||||||
MALLOC_CAP_32BIT | MALLOC_CAP_EXEC);
|
MALLOC_CAP_32BIT | MALLOC_CAP_EXEC);
|
||||||
if (ret < 0) {
|
if (ret < 0) {
|
||||||
ret = allocate_pcm_chunk_memory_caps(*pcmChunk, bytes, MALLOC_CAP_8BIT);
|
ret = allocate_pcm_chunk_memory_caps(*pcmChunk, bytes, MALLOC_CAP_8BIT);
|
||||||
if (ret < 0) {
|
if (ret < 0) {
|
||||||
// ret = allocate_pcm_chunk_memory_caps_fragmented
|
// ret = allocate_pcm_chunk_memory_caps_fragmented
|
||||||
//(*pcmChunk, bytes, MALLOC_CAP_32BIT | MALLOC_CAP_EXEC);
|
//(*pcmChunk, bytes, MALLOC_CAP_32BIT | MALLOC_CAP_EXEC);
|
||||||
if (ret < 0) {
|
if (ret < 0) {
|
||||||
// allocate_pcm_chunk_memory_caps_fragmented (*pcmChunk, bytes,
|
// allocate_pcm_chunk_memory_caps_fragmented (*pcmChunk, bytes,
|
||||||
@@ -897,6 +923,8 @@ int32_t allocate_pcm_chunk_memory(pcm_chunk_message_t **pcmChunk,
|
|||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
//#endif
|
||||||
|
|
||||||
if (ret < 0) {
|
if (ret < 0) {
|
||||||
ESP_LOGE(TAG, "couldn't get memory to insert chunk");
|
ESP_LOGE(TAG, "couldn't get memory to insert chunk");
|
||||||
|
|
||||||
@@ -1020,26 +1048,26 @@ static void player_task(void *pvParameters) {
|
|||||||
// so next chunk we get from queue will be -20ms
|
// so next chunk we get from queue will be -20ms
|
||||||
outputBufferDacTime = chkDur_us * CHNK_CTRL_CNT;
|
outputBufferDacTime = chkDur_us * CHNK_CTRL_CNT;
|
||||||
|
|
||||||
if ((scSet.sr != __scSet.sr) || (scSet.bits != __scSet.bits) ||
|
if ((__scSet.buf_ms > 0) && (__scSet.chkDur_ms > 0)) {
|
||||||
(scSet.ch != __scSet.ch)) {
|
if ((scSet.sr != __scSet.sr) || (scSet.bits != __scSet.bits) ||
|
||||||
i2s_custom_stop(I2S_NUM_0);
|
(scSet.ch != __scSet.ch)) {
|
||||||
|
i2s_custom_stop(I2S_NUM_0);
|
||||||
|
|
||||||
ret = player_setup_i2s(I2S_NUM_0, ¤tSnapcastSetting);
|
ret = player_setup_i2s(I2S_NUM_0, ¤tSnapcastSetting);
|
||||||
if (ret < 0) {
|
if (ret < 0) {
|
||||||
ESP_LOGE(TAG, "player_setup_i2s failed: %d", ret);
|
ESP_LOGE(TAG, "player_setup_i2s failed: %d", ret);
|
||||||
|
|
||||||
return;
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
// force adjust_apll() to set playback speed
|
||||||
|
currentDir = 1;
|
||||||
|
adjust_apll(0);
|
||||||
|
|
||||||
|
i2s_custom_set_clk(I2S_NUM_0, __scSet.sr, __scSet.bits, __scSet.ch);
|
||||||
|
initialSync = 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
// force adjust_apll() to set playback speed
|
|
||||||
currentDir = 1;
|
|
||||||
adjust_apll(0);
|
|
||||||
|
|
||||||
i2s_custom_set_clk(I2S_NUM_0, __scSet.sr, __scSet.bits, __scSet.ch);
|
|
||||||
initialSync = 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
if ((__scSet.buf_ms > 0) && (__scSet.chkDur_ms > 0)) {
|
|
||||||
if ((__scSet.buf_ms != scSet.buf_ms) ||
|
if ((__scSet.buf_ms != scSet.buf_ms) ||
|
||||||
(__scSet.chkDur_ms != scSet.chkDur_ms)) {
|
(__scSet.chkDur_ms != scSet.chkDur_ms)) {
|
||||||
if (pcmChkQHdl != NULL) {
|
if (pcmChkQHdl != NULL) {
|
||||||
|
|||||||
71
main/main.c
71
main/main.c
@@ -309,8 +309,8 @@ static FLAC__StreamDecoderWriteStatus write_callback(
|
|||||||
// flacData->outData = (char *)malloc (flacData->bytes);
|
// flacData->outData = (char *)malloc (flacData->bytes);
|
||||||
ret = allocate_pcm_chunk_memory(&(flacData->outData), flacData->bytes);
|
ret = allocate_pcm_chunk_memory(&(flacData->outData), flacData->bytes);
|
||||||
|
|
||||||
// ESP_LOGI (TAG, "mem %p %p %d", flacData->outData,
|
// ESP_LOGI (TAG, "mem %p %p %d", flacData->outData,
|
||||||
// flacData->outData->fragment->payload, flacData->bytes);
|
// flacData->outData->fragment->payload, flacData->bytes);
|
||||||
|
|
||||||
if (ret == 0) {
|
if (ret == 0) {
|
||||||
pcm_chunk_fragment_t *fragment = flacData->outData->fragment;
|
pcm_chunk_fragment_t *fragment = flacData->outData->fragment;
|
||||||
@@ -1394,6 +1394,12 @@ static void http_get_task(void *pvParameters) {
|
|||||||
|
|
||||||
size_t decodedSize =
|
size_t decodedSize =
|
||||||
pcmData->totalSize; // pFlacData->bytes;
|
pcmData->totalSize; // pFlacData->bytes;
|
||||||
|
|
||||||
|
// ESP_LOGE(TAG,
|
||||||
|
// "decoded size:
|
||||||
|
// %d",
|
||||||
|
// decodedSize);
|
||||||
|
|
||||||
scSet.chkDur_ms =
|
scSet.chkDur_ms =
|
||||||
(1000UL * decodedSize) /
|
(1000UL * decodedSize) /
|
||||||
(uint32_t)(scSet.ch * (scSet.bits / 8)) /
|
(uint32_t)(scSet.ch * (scSet.bits / 8)) /
|
||||||
@@ -1415,18 +1421,21 @@ static void http_get_task(void *pvParameters) {
|
|||||||
|
|
||||||
#if CONFIG_USE_DSP_PROCESSOR
|
#if CONFIG_USE_DSP_PROCESSOR
|
||||||
if (flow_drain_counter > 0) {
|
if (flow_drain_counter > 0) {
|
||||||
flow_drain_counter--;
|
flow_drain_counter--;
|
||||||
double dynamic_vol = ((double)scSet.volume/100 / (20 - flow_drain_counter));
|
double dynamic_vol =
|
||||||
if (flow_drain_counter == 0) {
|
((double)scSet.volume / 100 /
|
||||||
|
(20 - flow_drain_counter));
|
||||||
|
if (flow_drain_counter == 0) {
|
||||||
#if SNAPCAST_USE_SOFT_VOL
|
#if SNAPCAST_USE_SOFT_VOL
|
||||||
dynamic_vol = 0;
|
dynamic_vol = 0;
|
||||||
#else
|
#else
|
||||||
dynamic_vol = 1;
|
dynamic_vol = 1;
|
||||||
#endif
|
#endif
|
||||||
audio_hal_set_mute(board_handle->audio_hal,
|
audio_hal_set_mute(
|
||||||
server_settings_message.muted);
|
board_handle->audio_hal,
|
||||||
}
|
server_settings_message.muted);
|
||||||
dsp_set_vol(dynamic_vol);
|
}
|
||||||
|
dsp_set_vol(dynamic_vol);
|
||||||
}
|
}
|
||||||
dsp_setup_flow(500, scSet.sr, scSet.chkDur_ms);
|
dsp_setup_flow(500, scSet.sr, scSet.chkDur_ms);
|
||||||
dsp_processor(pcmData->fragment->payload,
|
dsp_processor(pcmData->fragment->payload,
|
||||||
@@ -1466,20 +1475,23 @@ static void http_get_task(void *pvParameters) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
#if CONFIG_USE_DSP_PROCESSOR
|
#if CONFIG_USE_DSP_PROCESSOR
|
||||||
if (flow_drain_counter > 0) {
|
if (flow_drain_counter > 0) {
|
||||||
flow_drain_counter--;
|
flow_drain_counter--;
|
||||||
double dynamic_vol = ((double)scSet.volume/100 / (20 - flow_drain_counter));
|
double dynamic_vol =
|
||||||
if (flow_drain_counter == 0) {
|
((double)scSet.volume / 100 /
|
||||||
|
(20 - flow_drain_counter));
|
||||||
|
if (flow_drain_counter == 0) {
|
||||||
#if SNAPCAST_USE_SOFT_VOL
|
#if SNAPCAST_USE_SOFT_VOL
|
||||||
dynamic_vol = 0;
|
dynamic_vol = 0;
|
||||||
#else
|
#else
|
||||||
dynamic_vol = 1;
|
dynamic_vol = 1;
|
||||||
#endif
|
#endif
|
||||||
audio_hal_set_mute(board_handle->audio_hal,
|
audio_hal_set_mute(
|
||||||
server_settings_message.muted);
|
board_handle->audio_hal,
|
||||||
}
|
server_settings_message.muted);
|
||||||
dsp_set_vol(dynamic_vol);
|
|
||||||
}
|
}
|
||||||
|
dsp_set_vol(dynamic_vol);
|
||||||
|
}
|
||||||
dsp_setup_flow(500, scSet.sr, scSet.chkDur_ms);
|
dsp_setup_flow(500, scSet.sr, scSet.chkDur_ms);
|
||||||
dsp_processor(pcmData->fragment->payload,
|
dsp_processor(pcmData->fragment->payload,
|
||||||
pcmData->fragment->size, dspFlow);
|
pcmData->fragment->size, dspFlow);
|
||||||
@@ -2022,15 +2034,15 @@ static void http_get_task(void *pvParameters) {
|
|||||||
#if CONFIG_USE_DSP_PROCESSOR
|
#if CONFIG_USE_DSP_PROCESSOR
|
||||||
if (server_settings_message.muted) {
|
if (server_settings_message.muted) {
|
||||||
flow_drain_counter = 20;
|
flow_drain_counter = 20;
|
||||||
}
|
} else {
|
||||||
else {
|
flow_drain_counter = 0;
|
||||||
flow_drain_counter = 0;
|
audio_hal_set_mute(board_handle->audio_hal,
|
||||||
audio_hal_set_mute(board_handle->audio_hal,
|
server_settings_message.muted);
|
||||||
server_settings_message.muted);
|
|
||||||
#if SNAPCAST_USE_SOFT_VOL
|
#if SNAPCAST_USE_SOFT_VOL
|
||||||
dsp_set_vol((double)server_settings_message.volume/100);
|
dsp_set_vol((double)server_settings_message.volume /
|
||||||
|
100);
|
||||||
#else
|
#else
|
||||||
dsp_set_vol(1.0);
|
dsp_set_vol(1.0);
|
||||||
#endif
|
#endif
|
||||||
}
|
}
|
||||||
#else
|
#else
|
||||||
@@ -2040,7 +2052,8 @@ static void http_get_task(void *pvParameters) {
|
|||||||
}
|
}
|
||||||
if (scSet.volume != server_settings_message.volume) {
|
if (scSet.volume != server_settings_message.volume) {
|
||||||
#if SNAPCAST_USE_SOFT_VOL
|
#if SNAPCAST_USE_SOFT_VOL
|
||||||
dsp_set_vol((double)server_settings_message.volume/100);
|
dsp_set_vol((double)server_settings_message.volume /
|
||||||
|
100);
|
||||||
#else
|
#else
|
||||||
audio_hal_set_volume(board_handle->audio_hal,
|
audio_hal_set_volume(board_handle->audio_hal,
|
||||||
server_settings_message.volume);
|
server_settings_message.volume);
|
||||||
|
|||||||
78
sdkconfig
78
sdkconfig
@@ -143,6 +143,7 @@ CONFIG_ESP_LYRAT_V4_3_BOARD=y
|
|||||||
#
|
#
|
||||||
# ESP32 audio buffer and I2S config
|
# ESP32 audio buffer and I2S config
|
||||||
#
|
#
|
||||||
|
CONFIG_USE_PSRAM=y
|
||||||
# CONFIG_USE_DSP_PROCESSOR is not set
|
# CONFIG_USE_DSP_PROCESSOR is not set
|
||||||
CONFIG_USE_BIQUAD_ASM=y
|
CONFIG_USE_BIQUAD_ASM=y
|
||||||
# end of ESP32 audio buffer and I2S config
|
# end of ESP32 audio buffer and I2S config
|
||||||
@@ -333,6 +334,7 @@ CONFIG_ESP_TLS_USING_MBEDTLS=y
|
|||||||
#
|
#
|
||||||
# ESP32-specific
|
# ESP32-specific
|
||||||
#
|
#
|
||||||
|
CONFIG_ESP32_ECO3_CACHE_LOCK_FIX=y
|
||||||
CONFIG_ESP32_REV_MIN_0=y
|
CONFIG_ESP32_REV_MIN_0=y
|
||||||
# CONFIG_ESP32_REV_MIN_1 is not set
|
# CONFIG_ESP32_REV_MIN_1 is not set
|
||||||
# CONFIG_ESP32_REV_MIN_2 is not set
|
# CONFIG_ESP32_REV_MIN_2 is not set
|
||||||
@@ -343,7 +345,66 @@ CONFIG_ESP32_DPORT_WORKAROUND=y
|
|||||||
# CONFIG_ESP32_DEFAULT_CPU_FREQ_160 is not set
|
# CONFIG_ESP32_DEFAULT_CPU_FREQ_160 is not set
|
||||||
CONFIG_ESP32_DEFAULT_CPU_FREQ_240=y
|
CONFIG_ESP32_DEFAULT_CPU_FREQ_240=y
|
||||||
CONFIG_ESP32_DEFAULT_CPU_FREQ_MHZ=240
|
CONFIG_ESP32_DEFAULT_CPU_FREQ_MHZ=240
|
||||||
# CONFIG_ESP32_SPIRAM_SUPPORT is not set
|
CONFIG_ESP32_SPIRAM_SUPPORT=y
|
||||||
|
|
||||||
|
#
|
||||||
|
# SPI RAM config
|
||||||
|
#
|
||||||
|
CONFIG_SPIRAM_TYPE_AUTO=y
|
||||||
|
# CONFIG_SPIRAM_TYPE_ESPPSRAM16 is not set
|
||||||
|
# CONFIG_SPIRAM_TYPE_ESPPSRAM32 is not set
|
||||||
|
# CONFIG_SPIRAM_TYPE_ESPPSRAM64 is not set
|
||||||
|
CONFIG_SPIRAM_SIZE=-1
|
||||||
|
CONFIG_SPIRAM_SPEED_40M=y
|
||||||
|
# CONFIG_SPIRAM_SPEED_80M is not set
|
||||||
|
CONFIG_SPIRAM=y
|
||||||
|
CONFIG_SPIRAM_BOOT_INIT=y
|
||||||
|
# CONFIG_SPIRAM_IGNORE_NOTFOUND is not set
|
||||||
|
# CONFIG_SPIRAM_USE_MEMMAP is not set
|
||||||
|
# CONFIG_SPIRAM_USE_CAPS_ALLOC is not set
|
||||||
|
CONFIG_SPIRAM_USE_MALLOC=y
|
||||||
|
CONFIG_SPIRAM_MEMTEST=y
|
||||||
|
CONFIG_SPIRAM_MALLOC_ALWAYSINTERNAL=16384
|
||||||
|
# CONFIG_SPIRAM_TRY_ALLOCATE_WIFI_LWIP is not set
|
||||||
|
CONFIG_SPIRAM_MALLOC_RESERVE_INTERNAL=32768
|
||||||
|
# CONFIG_SPIRAM_ALLOW_BSS_SEG_EXTERNAL_MEMORY is not set
|
||||||
|
CONFIG_SPIRAM_CACHE_WORKAROUND=y
|
||||||
|
|
||||||
|
#
|
||||||
|
# SPIRAM cache workaround debugging
|
||||||
|
#
|
||||||
|
CONFIG_SPIRAM_CACHE_WORKAROUND_STRATEGY_MEMW=y
|
||||||
|
# CONFIG_SPIRAM_CACHE_WORKAROUND_STRATEGY_DUPLDST is not set
|
||||||
|
# CONFIG_SPIRAM_CACHE_WORKAROUND_STRATEGY_NOPS is not set
|
||||||
|
# end of SPIRAM cache workaround debugging
|
||||||
|
|
||||||
|
CONFIG_SPIRAM_BANKSWITCH_ENABLE=y
|
||||||
|
CONFIG_SPIRAM_BANKSWITCH_RESERVE=8
|
||||||
|
# CONFIG_SPIRAM_ALLOW_STACK_EXTERNAL_MEMORY is not set
|
||||||
|
|
||||||
|
#
|
||||||
|
# PSRAM clock and cs IO for ESP32-DOWD
|
||||||
|
#
|
||||||
|
CONFIG_D0WD_PSRAM_CLK_IO=17
|
||||||
|
CONFIG_D0WD_PSRAM_CS_IO=16
|
||||||
|
# end of PSRAM clock and cs IO for ESP32-DOWD
|
||||||
|
|
||||||
|
#
|
||||||
|
# PSRAM clock and cs IO for ESP32-D2WD
|
||||||
|
#
|
||||||
|
CONFIG_D2WD_PSRAM_CLK_IO=9
|
||||||
|
CONFIG_D2WD_PSRAM_CS_IO=10
|
||||||
|
# end of PSRAM clock and cs IO for ESP32-D2WD
|
||||||
|
|
||||||
|
#
|
||||||
|
# PSRAM clock and cs IO for ESP32-PICO
|
||||||
|
#
|
||||||
|
CONFIG_PICO_PSRAM_CS_IO=10
|
||||||
|
# end of PSRAM clock and cs IO for ESP32-PICO
|
||||||
|
|
||||||
|
# CONFIG_SPIRAM_2T_MODE is not set
|
||||||
|
# end of SPI RAM config
|
||||||
|
|
||||||
# CONFIG_ESP32_TRAX is not set
|
# CONFIG_ESP32_TRAX is not set
|
||||||
CONFIG_ESP32_TRACEMEM_RESERVE_DRAM=0x0
|
CONFIG_ESP32_TRACEMEM_RESERVE_DRAM=0x0
|
||||||
# CONFIG_ESP32_UNIVERSAL_MAC_ADDRESSES_TWO is not set
|
# CONFIG_ESP32_UNIVERSAL_MAC_ADDRESSES_TWO is not set
|
||||||
@@ -509,7 +570,6 @@ CONFIG_ESP_NETIF_TCPIP_ADAPTER_COMPATIBLE_LAYER=y
|
|||||||
CONFIG_ESP_SYSTEM_PANIC_PRINT_REBOOT=y
|
CONFIG_ESP_SYSTEM_PANIC_PRINT_REBOOT=y
|
||||||
# CONFIG_ESP_SYSTEM_PANIC_SILENT_REBOOT is not set
|
# CONFIG_ESP_SYSTEM_PANIC_SILENT_REBOOT is not set
|
||||||
# CONFIG_ESP_SYSTEM_PANIC_GDBSTUB is not set
|
# CONFIG_ESP_SYSTEM_PANIC_GDBSTUB is not set
|
||||||
CONFIG_ESP_SYSTEM_PD_FLASH=y
|
|
||||||
|
|
||||||
#
|
#
|
||||||
# Memory protection
|
# Memory protection
|
||||||
@@ -533,15 +593,16 @@ CONFIG_ESP_TIMER_IMPL_TG0_LAC=y
|
|||||||
#
|
#
|
||||||
CONFIG_ESP32_WIFI_STATIC_RX_BUFFER_NUM=8
|
CONFIG_ESP32_WIFI_STATIC_RX_BUFFER_NUM=8
|
||||||
CONFIG_ESP32_WIFI_DYNAMIC_RX_BUFFER_NUM=16
|
CONFIG_ESP32_WIFI_DYNAMIC_RX_BUFFER_NUM=16
|
||||||
# CONFIG_ESP32_WIFI_STATIC_TX_BUFFER is not set
|
CONFIG_ESP32_WIFI_STATIC_TX_BUFFER=y
|
||||||
CONFIG_ESP32_WIFI_DYNAMIC_TX_BUFFER=y
|
CONFIG_ESP32_WIFI_TX_BUFFER_TYPE=0
|
||||||
CONFIG_ESP32_WIFI_TX_BUFFER_TYPE=1
|
CONFIG_ESP32_WIFI_STATIC_TX_BUFFER_NUM=16
|
||||||
CONFIG_ESP32_WIFI_DYNAMIC_TX_BUFFER_NUM=32
|
CONFIG_ESP32_WIFI_CACHE_TX_BUFFER_NUM=32
|
||||||
# CONFIG_ESP32_WIFI_CSI_ENABLED is not set
|
# CONFIG_ESP32_WIFI_CSI_ENABLED is not set
|
||||||
CONFIG_ESP32_WIFI_AMPDU_TX_ENABLED=y
|
CONFIG_ESP32_WIFI_AMPDU_TX_ENABLED=y
|
||||||
CONFIG_ESP32_WIFI_TX_BA_WIN=32
|
CONFIG_ESP32_WIFI_TX_BA_WIN=32
|
||||||
CONFIG_ESP32_WIFI_AMPDU_RX_ENABLED=y
|
CONFIG_ESP32_WIFI_AMPDU_RX_ENABLED=y
|
||||||
CONFIG_ESP32_WIFI_RX_BA_WIN=16
|
CONFIG_ESP32_WIFI_RX_BA_WIN=16
|
||||||
|
# CONFIG_ESP32_WIFI_AMSDU_TX_ENABLED is not set
|
||||||
CONFIG_ESP32_WIFI_NVS_ENABLED=y
|
CONFIG_ESP32_WIFI_NVS_ENABLED=y
|
||||||
CONFIG_ESP32_WIFI_TASK_PINNED_TO_CORE_0=y
|
CONFIG_ESP32_WIFI_TASK_PINNED_TO_CORE_0=y
|
||||||
# CONFIG_ESP32_WIFI_TASK_PINNED_TO_CORE_1 is not set
|
# CONFIG_ESP32_WIFI_TASK_PINNED_TO_CORE_1 is not set
|
||||||
@@ -609,6 +670,7 @@ CONFIG_FATFS_LFN_NONE=y
|
|||||||
CONFIG_FATFS_FS_LOCK=0
|
CONFIG_FATFS_FS_LOCK=0
|
||||||
CONFIG_FATFS_TIMEOUT_MS=10000
|
CONFIG_FATFS_TIMEOUT_MS=10000
|
||||||
CONFIG_FATFS_PER_FILE_CACHE=y
|
CONFIG_FATFS_PER_FILE_CACHE=y
|
||||||
|
CONFIG_FATFS_ALLOC_PREFER_EXTRAM=y
|
||||||
# CONFIG_FATFS_USE_FASTSEEK is not set
|
# CONFIG_FATFS_USE_FASTSEEK is not set
|
||||||
# end of FAT Filesystem support
|
# end of FAT Filesystem support
|
||||||
|
|
||||||
@@ -852,6 +914,7 @@ CONFIG_LWIP_HOOK_NETCONN_EXT_RESOLVE_NONE=y
|
|||||||
# mbedTLS
|
# mbedTLS
|
||||||
#
|
#
|
||||||
CONFIG_MBEDTLS_INTERNAL_MEM_ALLOC=y
|
CONFIG_MBEDTLS_INTERNAL_MEM_ALLOC=y
|
||||||
|
# CONFIG_MBEDTLS_EXTERNAL_MEM_ALLOC is not set
|
||||||
# CONFIG_MBEDTLS_DEFAULT_MEM_ALLOC is not set
|
# CONFIG_MBEDTLS_DEFAULT_MEM_ALLOC is not set
|
||||||
# CONFIG_MBEDTLS_CUSTOM_MEM_ALLOC is not set
|
# CONFIG_MBEDTLS_CUSTOM_MEM_ALLOC is not set
|
||||||
CONFIG_MBEDTLS_ASYMMETRIC_CONTENT_LEN=y
|
CONFIG_MBEDTLS_ASYMMETRIC_CONTENT_LEN=y
|
||||||
@@ -1238,7 +1301,8 @@ CONFIG_BTDM_CONTROLLER_BR_EDR_MAX_ACL_CONN_EFF=0
|
|||||||
CONFIG_BTDM_CONTROLLER_BR_EDR_MAX_SYNC_CONN_EFF=0
|
CONFIG_BTDM_CONTROLLER_BR_EDR_MAX_SYNC_CONN_EFF=0
|
||||||
CONFIG_BTDM_CONTROLLER_PINNED_TO_CORE=0
|
CONFIG_BTDM_CONTROLLER_PINNED_TO_CORE=0
|
||||||
CONFIG_ADC2_DISABLE_DAC=y
|
CONFIG_ADC2_DISABLE_DAC=y
|
||||||
# CONFIG_SPIRAM_SUPPORT is not set
|
CONFIG_SPIRAM_SUPPORT=y
|
||||||
|
# CONFIG_WIFI_LWIP_ALLOCATION_FROM_SPIRAM_FIRST is not set
|
||||||
CONFIG_TRACEMEM_RESERVE_DRAM=0x0
|
CONFIG_TRACEMEM_RESERVE_DRAM=0x0
|
||||||
# CONFIG_TWO_UNIVERSAL_MAC_ADDRESS is not set
|
# CONFIG_TWO_UNIVERSAL_MAC_ADDRESS is not set
|
||||||
CONFIG_FOUR_UNIVERSAL_MAC_ADDRESS=y
|
CONFIG_FOUR_UNIVERSAL_MAC_ADDRESS=y
|
||||||
|
|||||||
@@ -143,7 +143,6 @@ CONFIG_ESP_LYRAT_V4_3_BOARD=y
|
|||||||
#
|
#
|
||||||
# ESP32 audio buffer and I2S config
|
# ESP32 audio buffer and I2S config
|
||||||
#
|
#
|
||||||
CONFIG_USE_PSRAM=y
|
|
||||||
# CONFIG_USE_DSP_PROCESSOR is not set
|
# CONFIG_USE_DSP_PROCESSOR is not set
|
||||||
CONFIG_USE_BIQUAD_ASM=y
|
CONFIG_USE_BIQUAD_ASM=y
|
||||||
# end of ESP32 audio buffer and I2S config
|
# end of ESP32 audio buffer and I2S config
|
||||||
@@ -334,7 +333,6 @@ CONFIG_ESP_TLS_USING_MBEDTLS=y
|
|||||||
#
|
#
|
||||||
# ESP32-specific
|
# ESP32-specific
|
||||||
#
|
#
|
||||||
CONFIG_ESP32_ECO3_CACHE_LOCK_FIX=y
|
|
||||||
CONFIG_ESP32_REV_MIN_0=y
|
CONFIG_ESP32_REV_MIN_0=y
|
||||||
# CONFIG_ESP32_REV_MIN_1 is not set
|
# CONFIG_ESP32_REV_MIN_1 is not set
|
||||||
# CONFIG_ESP32_REV_MIN_2 is not set
|
# CONFIG_ESP32_REV_MIN_2 is not set
|
||||||
@@ -345,66 +343,7 @@ CONFIG_ESP32_DPORT_WORKAROUND=y
|
|||||||
# CONFIG_ESP32_DEFAULT_CPU_FREQ_160 is not set
|
# CONFIG_ESP32_DEFAULT_CPU_FREQ_160 is not set
|
||||||
CONFIG_ESP32_DEFAULT_CPU_FREQ_240=y
|
CONFIG_ESP32_DEFAULT_CPU_FREQ_240=y
|
||||||
CONFIG_ESP32_DEFAULT_CPU_FREQ_MHZ=240
|
CONFIG_ESP32_DEFAULT_CPU_FREQ_MHZ=240
|
||||||
CONFIG_ESP32_SPIRAM_SUPPORT=y
|
# CONFIG_ESP32_SPIRAM_SUPPORT is not set
|
||||||
|
|
||||||
#
|
|
||||||
# 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=y
|
|
||||||
# CONFIG_SPIRAM_SPEED_80M is not set
|
|
||||||
CONFIG_SPIRAM=y
|
|
||||||
CONFIG_SPIRAM_BOOT_INIT=y
|
|
||||||
# CONFIG_SPIRAM_IGNORE_NOTFOUND is not set
|
|
||||||
# CONFIG_SPIRAM_USE_MEMMAP is not set
|
|
||||||
# CONFIG_SPIRAM_USE_CAPS_ALLOC is not set
|
|
||||||
CONFIG_SPIRAM_USE_MALLOC=y
|
|
||||||
CONFIG_SPIRAM_MEMTEST=y
|
|
||||||
CONFIG_SPIRAM_MALLOC_ALWAYSINTERNAL=16384
|
|
||||||
# CONFIG_SPIRAM_TRY_ALLOCATE_WIFI_LWIP is not set
|
|
||||||
CONFIG_SPIRAM_MALLOC_RESERVE_INTERNAL=32768
|
|
||||||
# CONFIG_SPIRAM_ALLOW_BSS_SEG_EXTERNAL_MEMORY is not set
|
|
||||||
CONFIG_SPIRAM_CACHE_WORKAROUND=y
|
|
||||||
|
|
||||||
#
|
|
||||||
# SPIRAM cache workaround debugging
|
|
||||||
#
|
|
||||||
CONFIG_SPIRAM_CACHE_WORKAROUND_STRATEGY_MEMW=y
|
|
||||||
# CONFIG_SPIRAM_CACHE_WORKAROUND_STRATEGY_DUPLDST is not set
|
|
||||||
# CONFIG_SPIRAM_CACHE_WORKAROUND_STRATEGY_NOPS is not set
|
|
||||||
# end of SPIRAM cache workaround debugging
|
|
||||||
|
|
||||||
CONFIG_SPIRAM_BANKSWITCH_ENABLE=y
|
|
||||||
CONFIG_SPIRAM_BANKSWITCH_RESERVE=8
|
|
||||||
# CONFIG_SPIRAM_ALLOW_STACK_EXTERNAL_MEMORY is not set
|
|
||||||
|
|
||||||
#
|
|
||||||
# PSRAM clock and cs IO for ESP32-DOWD
|
|
||||||
#
|
|
||||||
CONFIG_D0WD_PSRAM_CLK_IO=17
|
|
||||||
CONFIG_D0WD_PSRAM_CS_IO=16
|
|
||||||
# end of PSRAM clock and cs IO for ESP32-DOWD
|
|
||||||
|
|
||||||
#
|
|
||||||
# PSRAM clock and cs IO for ESP32-D2WD
|
|
||||||
#
|
|
||||||
CONFIG_D2WD_PSRAM_CLK_IO=9
|
|
||||||
CONFIG_D2WD_PSRAM_CS_IO=10
|
|
||||||
# end of PSRAM clock and cs IO for ESP32-D2WD
|
|
||||||
|
|
||||||
#
|
|
||||||
# PSRAM clock and cs IO for ESP32-PICO
|
|
||||||
#
|
|
||||||
CONFIG_PICO_PSRAM_CS_IO=10
|
|
||||||
# end of PSRAM clock and cs IO for ESP32-PICO
|
|
||||||
|
|
||||||
# CONFIG_SPIRAM_2T_MODE is not set
|
|
||||||
# end of SPI RAM config
|
|
||||||
|
|
||||||
# CONFIG_ESP32_TRAX is not set
|
# CONFIG_ESP32_TRAX is not set
|
||||||
CONFIG_ESP32_TRACEMEM_RESERVE_DRAM=0x0
|
CONFIG_ESP32_TRACEMEM_RESERVE_DRAM=0x0
|
||||||
# CONFIG_ESP32_UNIVERSAL_MAC_ADDRESSES_TWO is not set
|
# CONFIG_ESP32_UNIVERSAL_MAC_ADDRESSES_TWO is not set
|
||||||
@@ -570,6 +509,7 @@ CONFIG_ESP_NETIF_TCPIP_ADAPTER_COMPATIBLE_LAYER=y
|
|||||||
CONFIG_ESP_SYSTEM_PANIC_PRINT_REBOOT=y
|
CONFIG_ESP_SYSTEM_PANIC_PRINT_REBOOT=y
|
||||||
# CONFIG_ESP_SYSTEM_PANIC_SILENT_REBOOT is not set
|
# CONFIG_ESP_SYSTEM_PANIC_SILENT_REBOOT is not set
|
||||||
# CONFIG_ESP_SYSTEM_PANIC_GDBSTUB is not set
|
# CONFIG_ESP_SYSTEM_PANIC_GDBSTUB is not set
|
||||||
|
CONFIG_ESP_SYSTEM_PD_FLASH=y
|
||||||
|
|
||||||
#
|
#
|
||||||
# Memory protection
|
# Memory protection
|
||||||
@@ -593,16 +533,15 @@ CONFIG_ESP_TIMER_IMPL_TG0_LAC=y
|
|||||||
#
|
#
|
||||||
CONFIG_ESP32_WIFI_STATIC_RX_BUFFER_NUM=8
|
CONFIG_ESP32_WIFI_STATIC_RX_BUFFER_NUM=8
|
||||||
CONFIG_ESP32_WIFI_DYNAMIC_RX_BUFFER_NUM=16
|
CONFIG_ESP32_WIFI_DYNAMIC_RX_BUFFER_NUM=16
|
||||||
CONFIG_ESP32_WIFI_STATIC_TX_BUFFER=y
|
# CONFIG_ESP32_WIFI_STATIC_TX_BUFFER is not set
|
||||||
CONFIG_ESP32_WIFI_TX_BUFFER_TYPE=0
|
CONFIG_ESP32_WIFI_DYNAMIC_TX_BUFFER=y
|
||||||
CONFIG_ESP32_WIFI_STATIC_TX_BUFFER_NUM=16
|
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_CSI_ENABLED is not set
|
||||||
CONFIG_ESP32_WIFI_AMPDU_TX_ENABLED=y
|
CONFIG_ESP32_WIFI_AMPDU_TX_ENABLED=y
|
||||||
CONFIG_ESP32_WIFI_TX_BA_WIN=32
|
CONFIG_ESP32_WIFI_TX_BA_WIN=32
|
||||||
CONFIG_ESP32_WIFI_AMPDU_RX_ENABLED=y
|
CONFIG_ESP32_WIFI_AMPDU_RX_ENABLED=y
|
||||||
CONFIG_ESP32_WIFI_RX_BA_WIN=16
|
CONFIG_ESP32_WIFI_RX_BA_WIN=16
|
||||||
# CONFIG_ESP32_WIFI_AMSDU_TX_ENABLED is not set
|
|
||||||
CONFIG_ESP32_WIFI_NVS_ENABLED=y
|
CONFIG_ESP32_WIFI_NVS_ENABLED=y
|
||||||
CONFIG_ESP32_WIFI_TASK_PINNED_TO_CORE_0=y
|
CONFIG_ESP32_WIFI_TASK_PINNED_TO_CORE_0=y
|
||||||
# CONFIG_ESP32_WIFI_TASK_PINNED_TO_CORE_1 is not set
|
# CONFIG_ESP32_WIFI_TASK_PINNED_TO_CORE_1 is not set
|
||||||
@@ -670,7 +609,6 @@ CONFIG_FATFS_LFN_NONE=y
|
|||||||
CONFIG_FATFS_FS_LOCK=0
|
CONFIG_FATFS_FS_LOCK=0
|
||||||
CONFIG_FATFS_TIMEOUT_MS=10000
|
CONFIG_FATFS_TIMEOUT_MS=10000
|
||||||
CONFIG_FATFS_PER_FILE_CACHE=y
|
CONFIG_FATFS_PER_FILE_CACHE=y
|
||||||
CONFIG_FATFS_ALLOC_PREFER_EXTRAM=y
|
|
||||||
# CONFIG_FATFS_USE_FASTSEEK is not set
|
# CONFIG_FATFS_USE_FASTSEEK is not set
|
||||||
# end of FAT Filesystem support
|
# end of FAT Filesystem support
|
||||||
|
|
||||||
@@ -914,7 +852,6 @@ CONFIG_LWIP_HOOK_NETCONN_EXT_RESOLVE_NONE=y
|
|||||||
# mbedTLS
|
# mbedTLS
|
||||||
#
|
#
|
||||||
CONFIG_MBEDTLS_INTERNAL_MEM_ALLOC=y
|
CONFIG_MBEDTLS_INTERNAL_MEM_ALLOC=y
|
||||||
# CONFIG_MBEDTLS_EXTERNAL_MEM_ALLOC is not set
|
|
||||||
# CONFIG_MBEDTLS_DEFAULT_MEM_ALLOC is not set
|
# CONFIG_MBEDTLS_DEFAULT_MEM_ALLOC is not set
|
||||||
# CONFIG_MBEDTLS_CUSTOM_MEM_ALLOC is not set
|
# CONFIG_MBEDTLS_CUSTOM_MEM_ALLOC is not set
|
||||||
CONFIG_MBEDTLS_ASYMMETRIC_CONTENT_LEN=y
|
CONFIG_MBEDTLS_ASYMMETRIC_CONTENT_LEN=y
|
||||||
@@ -1301,8 +1238,7 @@ CONFIG_BTDM_CONTROLLER_BR_EDR_MAX_ACL_CONN_EFF=0
|
|||||||
CONFIG_BTDM_CONTROLLER_BR_EDR_MAX_SYNC_CONN_EFF=0
|
CONFIG_BTDM_CONTROLLER_BR_EDR_MAX_SYNC_CONN_EFF=0
|
||||||
CONFIG_BTDM_CONTROLLER_PINNED_TO_CORE=0
|
CONFIG_BTDM_CONTROLLER_PINNED_TO_CORE=0
|
||||||
CONFIG_ADC2_DISABLE_DAC=y
|
CONFIG_ADC2_DISABLE_DAC=y
|
||||||
CONFIG_SPIRAM_SUPPORT=y
|
# CONFIG_SPIRAM_SUPPORT is not set
|
||||||
# CONFIG_WIFI_LWIP_ALLOCATION_FROM_SPIRAM_FIRST is not set
|
|
||||||
CONFIG_TRACEMEM_RESERVE_DRAM=0x0
|
CONFIG_TRACEMEM_RESERVE_DRAM=0x0
|
||||||
# CONFIG_TWO_UNIVERSAL_MAC_ADDRESS is not set
|
# CONFIG_TWO_UNIVERSAL_MAC_ADDRESS is not set
|
||||||
CONFIG_FOUR_UNIVERSAL_MAC_ADDRESS=y
|
CONFIG_FOUR_UNIVERSAL_MAC_ADDRESS=y
|
||||||
|
|||||||
Reference in New Issue
Block a user