diff --git a/prj.conf b/prj.conf index eaa5121..9785fbb 100644 --- a/prj.conf +++ b/prj.conf @@ -130,8 +130,8 @@ CONFIG_FILE_SYSTEM_LITTLEFS=y CONFIG_LOG_BACKEND_RTT=y # SD Card -# CONFIG_NRF5340_AUDIO_SD_CARD_MODULE=y -# CONFIG_SD_CARD_PLAYBACK=y +CONFIG_NRF5340_AUDIO_SD_CARD_MODULE=y +CONFIG_SD_CARD_PLAYBACK=y CONFIG_THREAD_ANALYZER=y CONFIG_THREAD_ANALYZER_AUTO=y diff --git a/src/modules/sd_card.c b/src/modules/sd_card.c index b033708..5a2a6b4 100644 --- a/src/modules/sd_card.c +++ b/src/modules/sd_card.c @@ -20,13 +20,10 @@ #include LOG_MODULE_REGISTER(sd_card, CONFIG_LOG_DEFAULT_LEVEL); -#define SD_ROOT_PATH "/SD:/" -char *wav_file = "Arattai - Coco 2 - 96kbps.wav"; - +#define SD_ROOT_PATH "/SD:/" /* Round down to closest 4-byte boundary */ #define PATH_MAX_LEN ROUND_DOWN(CONFIG_FS_FATFS_MAX_LFN, 4) -// #define SD_CARD_LEVELS_MAX 8 -#define SD_CARD_LEVELS_MAX 4 +#define SD_CARD_LEVELS_MAX 8 #define SD_CARD_BUF_SIZE 700 #define MAX_FILES 20 @@ -494,55 +491,47 @@ int sd_card_detect_files(void) { int ret; + char *filename = "beep.wav"; + // 1. SD card init ret = sd_card_init(); if (ret) { LOG_INF("SD card init failed: %d\n", ret); - return ret; + return; } LOG_INF("SD card initialized"); - // 2. Prepare result buffer - // char result[MAX_FILES][MAX_PATH_LEN]; - char (*result)[MAX_PATH_LEN] = k_malloc(MAX_FILES * MAX_PATH_LEN); - if (result == NULL) { - LOG_ERR("Failed to allocate memory for result buffer"); - return -ENOMEM; + if (IS_ENABLED(CONFIG_SD_CARD_PLAYBACK)) { + ret = sd_card_playback_init(); + if (ret) { + LOG_ERR("Failed to initialize SD card playback"); + return ret; + } else { + LOG_INF("SD card playback initialized (sd_card_detect_files)"); + } } + // 2. Prepare result buffer + char result[MAX_FILES][MAX_PATH_LEN]; + // 3. List files matching pattern sd_card_list_files_match(MAX_FILES, MAX_PATH_LEN, result, NULL, ".wav"); - // play_from_sd_card(wav_file); - ret = sd_card_playback_wav(wav_file); - if (ret) { - LOG_ERR("Playback failed: %d", ret); - } else { - LOG_INF("Started playing: %s", wav_file); - } - - k_free(result); - - LOG_INF("SD card playback thread finished"); + // play_from_sd_card("beep.wav"); + sd_card_playback_wav(filename); } +#if 0 int play_from_sd_card(const char *filename) { int ret; - // Initialize SD card playback - // ret = sd_card_playback_init(); - // if (ret) { - // LOG_ERR("Playback init failed: %d", ret); - // return; - // } - // LOG_INF("SD card playback initialized"); - // Playing a file from SD card - ret = sd_card_playback_wav(wav_file); + ret = sd_card_playback_wav("beep.wav"); if (ret) { LOG_ERR("Playback failed: %d", ret); } else { LOG_INF("Started playing: %s", filename); } } +#endif diff --git a/src/modules/sd_card_playback.c b/src/modules/sd_card_playback.c index 80b75cd..fe52489 100644 --- a/src/modules/sd_card_playback.c +++ b/src/modules/sd_card_playback.c @@ -22,7 +22,7 @@ LOG_MODULE_REGISTER(sd_card_playback, CONFIG_LOG_DEFAULT_LEVEL); #define CONFIG_SD_CARD_PLAYBACK_RING_BUF_SIZE 1920 #define CONFIG_SD_CARD_PLAYBACK_STACK_SIZE 4096 -#define CONFIG_SD_CARD_PLAYBACK_THREAD_PRIO 7 +#define CONFIG_SD_CARD_PLAYBACK_THREAD_PRIO 5 #define MAX_PATH_LEN (CONFIG_FS_FATFS_MAX_LFN) #define LIST_FILES_BUF_SIZE 512 @@ -466,6 +466,8 @@ static void sd_card_playback_thread(void *arg1, void *arg2, void *arg3) ret = sd_card_playback_play_wav(); if (ret) { LOG_ERR("Wav playback err (sd_card_playback_thread): %d", ret); + } else { + sd_card_playback_wav(playback_file_name); } break; @@ -492,12 +494,12 @@ bool sd_card_playback_is_active(void) int sd_card_playback_wav(char *filename) { LOG_INF("sd_card_playback_wav called with file: %s", filename); - - // if (!sw_codec_is_initialized()) { - // LOG_ERR("Sw codec not initialized"); - // return -EACCES; - // } - +#if 1 + if (!sw_codec_is_initialized()) { + LOG_ERR("Sw codec not initialized"); + return -EACCES; + } +#endif playback_file_format = SD_CARD_PLAYBACK_WAV; playback_file_name = filename; k_sem_give(&m_sem_playback); diff --git a/src/utils/nrf5340_audio_dk.c b/src/utils/nrf5340_audio_dk.c index 911b46d..dc1f274 100644 --- a/src/utils/nrf5340_audio_dk.c +++ b/src/utils/nrf5340_audio_dk.c @@ -131,7 +131,7 @@ Board version checks specifically for nrf5340 audio DK return ret; } -#ifdef SD_CARD +#if 0 if (IS_ENABLED(CONFIG_SD_CARD_PLAYBACK)) { ret = sd_card_playback_init(); if (ret) { diff --git a/unicast_server/main.c b/unicast_server/main.c index 582d028..eadc241 100644 --- a/unicast_server/main.c +++ b/unicast_server/main.c @@ -38,7 +38,7 @@ #define CONFIG_TEMP_MEM_PLAYBACK_START_THREAD_PRIO 7 #define CONFIG_SD_CARD_PLAYBACK_START_STACK_SIZE 8192 -#define CONFIG_SD_CARD_PLAYBACK_START_THREAD_PRIO 7 +#define CONFIG_SD_CARD_PLAYBACK_START_THREAD_PRIO 5 #include @@ -770,15 +770,6 @@ int main(void) ret = nrf5340_audio_dk_init(); // SD card initialization ERR_CHK(ret); -#if 0 - ret = sd_card_init(); - if (ret != 0) { - LOG_ERR("Failed to initialize SD card"); - return ret; - } else { - LOG_INF("SD CARD INITIALIZED"); - } -#endif ret = fw_info_app_print(); ERR_CHK(ret); @@ -789,17 +780,23 @@ int main(void) ret = audio_system_init(); // navigates to --> audio_datapath_init() ERR_CHK(ret); - // audio_system_start(); + audio_system_start(); + + LOG_INF("Wait for the audio to stabilize..."); + k_sleep(K_SECONDS(2)); + LOG_INF("Audio system started and stabilized."); // ret = temp_playback_start_thread_create(); // ERR_CHK(ret); - // #ifdef SD_CARD - // ret = sd_card_detect_files(); // SD card file listing and hard-coded selecting of - // audio file if (ret) { LOG_ERR("Failed to list files"); } else { - // LOG_INF("File listing done"); - // } - // #endif +#if 1 + ret = sd_card_detect_files(); // SD card file listing and hard-coded selecting of audio file + if (ret) { + LOG_ERR("Failed to list files"); + } else { + LOG_INF("File listing done"); + } +#endif ret = zbus_subscribers_create(); // navigates to --> le_audio_msg_sub_thread() // navigates to --> audio_system_start() // navigates to --> hw_codec_default_conf_enable() @@ -834,13 +831,7 @@ int main(void) ret = bt_mgmt_adv_start(0, ext_adv_buf, ext_adv_buf_cnt, NULL, 0, true); ERR_CHK(ret); - audio_system_start(); - - LOG_INF("Wait for the audio to stabilize..."); - k_sleep(K_SECONDS(2)); - LOG_INF("Audio system started and stabilized."); - -#ifdef SD_CARD +#if 0 ret = sd_card_playback_thread_create(); // SD card file listing and hard-coded selecting of // audio file if (ret) {