/** * @brief Manages Audio process. * @param None * @retval Audio error */ AUDIO_ErrorTypeDef AUDIO_Process(void) { uint32_t bytesread, elapsed_time; AUDIO_ErrorTypeDef audio_error = AUDIO_ERROR_NONE; static uint32_t prev_elapsed_time = 0xFFFFFFFF; uint8_t str[10]; switch(AudioState) { case AUDIO_STATE_PLAY: if(BufferCtl.fptr >= WaveFormat.FileSize) { BSP_AUDIO_OUT_Stop(CODEC_PDWN_SW); AudioState = AUDIO_STATE_NEXT; } if(BufferCtl.offset == BUFFER_OFFSET_HALF) { if(f_read(&WavFile, &BufferCtl.buff[0], AUDIO_BUFFER_SIZE/2, (void *)&bytesread) != FR_OK) { BSP_AUDIO_OUT_Stop(CODEC_PDWN_SW); return AUDIO_ERROR_IO; } BufferCtl.offset = BUFFER_OFFSET_NONE; BufferCtl.fptr += bytesread; } if(BufferCtl.offset == BUFFER_OFFSET_FULL) { if(f_read(&WavFile, &BufferCtl.buff[AUDIO_BUFFER_SIZE /2], AUDIO_BUFFER_SIZE/2, (void *)&bytesread) != FR_OK) { BSP_AUDIO_OUT_Stop(CODEC_PDWN_SW); return AUDIO_ERROR_IO; } BufferCtl.offset = BUFFER_OFFSET_NONE; BufferCtl.fptr += bytesread; } /* Display elapsed time */ elapsed_time = BufferCtl.fptr / WaveFormat.ByteRate; if(prev_elapsed_time != elapsed_time) { prev_elapsed_time = elapsed_time; sprintf((char *)str, "[%02d:%02d]", (int)(elapsed_time /60), (int)(elapsed_time%60)); BSP_LCD_SetTextColor(LCD_COLOR_CYAN); BSP_LCD_DisplayStringAt(263, LINE(8), str, LEFT_MODE); BSP_LCD_SetTextColor(LCD_COLOR_WHITE); } break; case AUDIO_STATE_STOP: BSP_AUDIO_OUT_Stop(CODEC_PDWN_SW); AudioState = AUDIO_STATE_IDLE; audio_error = AUDIO_ERROR_IO; break; case AUDIO_STATE_NEXT: if(++FilePos >= AUDIO_GetWavObjectNumber()) { FilePos = 0; } BSP_AUDIO_OUT_Stop(CODEC_PDWN_SW); AUDIO_Start(FilePos); break; case AUDIO_STATE_PREVIOUS: if(--FilePos < 0) { FilePos = AUDIO_GetWavObjectNumber() - 1; } BSP_AUDIO_OUT_Stop(CODEC_PDWN_SW); AUDIO_Start(FilePos); break; case AUDIO_STATE_PAUSE: BSP_LCD_DisplayStringAt(250, LINE(14), (uint8_t *)" [PAUSE]", LEFT_MODE); BSP_AUDIO_OUT_Pause(); AudioState = AUDIO_STATE_WAIT; break; case AUDIO_STATE_RESUME: BSP_LCD_DisplayStringAt(250, LINE(14), (uint8_t *)" [PLAY ]", LEFT_MODE); BSP_AUDIO_OUT_Resume(); AudioState = AUDIO_STATE_PLAY; break; case AUDIO_STATE_VOLUME_UP: if( uwVolume <= 90) { uwVolume += 10; } BSP_AUDIO_OUT_SetVolume(uwVolume); AudioState = AUDIO_STATE_PLAY; break; case AUDIO_STATE_VOLUME_DOWN: if( uwVolume >= 10) { uwVolume -= 10; } BSP_AUDIO_OUT_SetVolume(uwVolume); AudioState = AUDIO_STATE_PLAY; break; case AUDIO_STATE_WAIT: case AUDIO_STATE_CONFIG: case AUDIO_STATE_IDLE: case AUDIO_STATE_INIT: default: /* Do Nothing */ break; } return audio_error; }
/** * @brief Manages Audio process. * @param None * @retval Audio error */ AUDIO_ErrorTypeDef AUDIO_Process(void) { uint32_t bytesread, elapsed_time; static uint32_t prev_elapsed_time = 0xFFFFFFFF; uint8_t str[10]; AUDIO_ErrorTypeDef error_state = AUDIO_ERROR_NONE; switch(audio_state) { case AUDIO_STATE_PLAY: if(buffer_ctl.fptr >= wav_info.FileSize) { error_state = AUDIO_ERROR_EOF; } if(buffer_ctl.offset == BUFFER_OFFSET_HALF) { if(MTP_GetData(file_pos, buffer_ctl.fptr, AUDIO_BUFFER_SIZE /2, &buffer_ctl.buff[0], &bytesread)> 0) { error_state = AUDIO_ERROR_IO; } buffer_ctl.offset = BUFFER_OFFSET_NONE; buffer_ctl.fptr += bytesread; } if(buffer_ctl.offset == BUFFER_OFFSET_FULL) { if(MTP_GetData(file_pos, buffer_ctl.fptr, AUDIO_BUFFER_SIZE /2, &buffer_ctl.buff[AUDIO_BUFFER_SIZE /2], &bytesread)> 0) { error_state = AUDIO_ERROR_IO; } buffer_ctl.offset = BUFFER_OFFSET_NONE; buffer_ctl.fptr += bytesread; } /* Display elapsed time */ elapsed_time = buffer_ctl.fptr / wav_info.ByteRate; if(prev_elapsed_time != elapsed_time) { prev_elapsed_time = elapsed_time; sprintf((char *)str, "[%02lu:%02lu]", elapsed_time /60, elapsed_time%60); BSP_LCD_SetTextColor(LCD_COLOR_CYAN); BSP_LCD_DisplayStringAt(263, LINE(8), str, LEFT_MODE); BSP_LCD_SetTextColor(LCD_COLOR_WHITE); } break; case AUDIO_STATE_STOP: BSP_AUDIO_OUT_Stop(CODEC_PDWN_SW); audio_state = AUDIO_STATE_IDLE; error_state = AUDIO_ERROR_IO; break; case AUDIO_STATE_NEXT: if(++file_pos >= MTP_GetWavObjectNumber()) { file_pos = 0; } BSP_AUDIO_OUT_Stop(CODEC_PDWN_SW); AUDIO_Start(file_pos); break; case AUDIO_STATE_PREVIOUS: if(--file_pos < 0) { file_pos = MTP_GetWavObjectNumber() - 1; } BSP_AUDIO_OUT_Stop(CODEC_PDWN_SW); AUDIO_Start(file_pos); break; case AUDIO_STATE_PAUSE: BSP_LCD_DisplayStringAt(250, LINE(14), (uint8_t *)" [PAUSE]", LEFT_MODE); BSP_AUDIO_OUT_Pause(); audio_state = AUDIO_STATE_WAIT; break; case AUDIO_STATE_RESUME: BSP_LCD_DisplayStringAt(250, LINE(14), (uint8_t *)" [PLAY ]", LEFT_MODE); BSP_AUDIO_OUT_Resume(); audio_state = AUDIO_STATE_PLAY; break; case AUDIO_STATE_VOLUME_UP: if(uwVolume <= 90) { uwVolume += 10; } BSP_AUDIO_OUT_SetVolume(uwVolume); audio_state = AUDIO_STATE_PLAY; break; case AUDIO_STATE_VOLUME_DOWN: if(uwVolume >= 10) { uwVolume -= 10; } BSP_AUDIO_OUT_SetVolume(uwVolume); audio_state = AUDIO_STATE_PLAY; break; case AUDIO_STATE_WAIT: case AUDIO_STATE_CONFIG: case AUDIO_STATE_IDLE: case AUDIO_STATE_INIT: default: /* Do Nothing */ break; } return error_state; }
/** * @brief Audio Play demo * @param None * @retval None */ void AudioRec_demo (void) { uint16_t NbRecord_done = 0; uint8_t FreqStr[256] = {0}; AudioRec_State = REC_NONE_STATE; buffer_ctl.rec_length = 0; /* Initialize AudioRecFullBuff at the address of the audio_play reader */ AudioRecFullBuff_addr = AUDIO_REC_START_ADDR; AudioRec_SetHint(); #ifdef JOYSTICK /* Initialize Joystick */ if (BSP_JOY_Init(JOY_MODE_GPIO) != IO_OK) { BSP_LCD_SetBackColor(LCD_COLOR_WHITE); BSP_LCD_SetTextColor(LCD_COLOR_RED); BSP_LCD_DisplayStringAt(0, BSP_LCD_GetYSize() - 95, (uint8_t *)"ERROR", CENTER_MODE); BSP_LCD_DisplayStringAt(0, BSP_LCD_GetYSize() - 80, (uint8_t *)"Joystick cannot be initialized", CENTER_MODE); } #endif /* Initialize Audio Recorder */ if (BSP_AUDIO_IN_Init(DEFAULT_AUDIO_IN_FREQ, DEFAULT_AUDIO_IN_BIT_RESOLUTION, DEFAULT_AUDIO_IN_CHANNEL_NBR) == AUDIO_OK) { AudioRec_State = REC_RESET_STATE; BSP_LCD_SetBackColor(LCD_COLOR_WHITE); BSP_LCD_SetTextColor(LCD_COLOR_GREEN); BSP_LCD_DisplayStringAt(0, BSP_LCD_GetYSize() - 95, (uint8_t *)" AUDIO RECORD INIT OK ", CENTER_MODE); } else { AudioRec_State = REC_ERROR_STATE; BSP_LCD_SetBackColor(LCD_COLOR_WHITE); BSP_LCD_SetTextColor(LCD_COLOR_RED); BSP_LCD_DisplayStringAt(0, BSP_LCD_GetYSize() - 95, (uint8_t *)" AUDIO RECORD INIT FAIL", CENTER_MODE); BSP_LCD_DisplayStringAt(0, BSP_LCD_GetYSize() - 80, (uint8_t *)" Try to reset board ", CENTER_MODE); } /* Infinite loop */ while (buffer_ctl.rec_length < AUDIO_REC_TOTAL_SIZE) { BSP_LCD_SetBackColor(LCD_COLOR_WHITE); BSP_LCD_SetTextColor(LCD_COLOR_BLUE); if (buffer_ctl.it_state == TRANSFER_HALF) { /* PDM to PCM data convert */ BSP_AUDIO_IN_PDMToPCM((uint16_t*)&buffer_ctl.pdm_buff[0], &buffer_ctl.pcm_buff[buffer_ctl.pcm_ptr]); buffer_ctl.pcm_ptr+= AUDIO_IN_PDM_BUFFER_SIZE/4/2; if(buffer_ctl.pcm_ptr == AUDIO_IN_PCM_BUFFER_SIZE/2) { buffer_ctl.wr_state = BUFFER_FULL; buffer_ctl.offset = 0; } if(buffer_ctl.pcm_ptr >= AUDIO_IN_PCM_BUFFER_SIZE) { buffer_ctl.wr_state = BUFFER_FULL; buffer_ctl.offset = AUDIO_IN_PCM_BUFFER_SIZE/2; buffer_ctl.pcm_ptr = 0; } buffer_ctl.it_state = TRANSFER_NONE; } if (buffer_ctl.it_state == TRANSFER_FULL) { /* PDM to PCM data convert */ if (BSP_AUDIO_IN_PDMToPCM((uint16_t*)&buffer_ctl.pdm_buff[INTERNAL_BUFF_SIZE/2], &buffer_ctl.pcm_buff[buffer_ctl.pcm_ptr]) == 0) { buffer_ctl.pcm_ptr+= AUDIO_IN_PDM_BUFFER_SIZE/4/2; if(buffer_ctl.pcm_ptr == AUDIO_IN_PCM_BUFFER_SIZE/2) { buffer_ctl.wr_state = BUFFER_FULL; buffer_ctl.offset = 0; } if(buffer_ctl.pcm_ptr >= AUDIO_IN_PCM_BUFFER_SIZE) { buffer_ctl.wr_state = BUFFER_FULL; buffer_ctl.offset = AUDIO_IN_PCM_BUFFER_SIZE/2; buffer_ctl.pcm_ptr = 0; } } buffer_ctl.it_state = TRANSFER_NONE; NbRecord_done++; } /* PCM buffer is full, copy it into the record_file */ if (buffer_ctl.wr_state == BUFFER_FULL) { memcpy((uint32_t *)AudioRecFullBuff_addr, (uint8_t*)(buffer_ctl.pcm_buff + buffer_ctl.offset), AUDIO_IN_PCM_BUFFER_SIZE); AudioRecFullBuff_addr += AUDIO_IN_PCM_BUFFER_SIZE; buffer_ctl.rec_length += AUDIO_IN_PCM_BUFFER_SIZE; buffer_ctl.wr_state = BUFFER_EMPTY; } #ifdef JOYSTICK /* Get the Joystick State */ JoyState = BSP_JOY_GetState(); switch (JoyState) { case JOY_SEL: #endif if (AudioRec_State == REC_RESET_STATE) { /* Display the state on the screen */ BSP_LCD_SetBackColor(LCD_COLOR_WHITE); BSP_LCD_SetTextColor(LCD_COLOR_BLUE); BSP_LCD_DisplayStringAt(0, BSP_LCD_GetYSize() - 80, (uint8_t *)" RECORDING... ", CENTER_MODE); /* Start Recording */ buffer_ctl.rec_length = 0; buffer_ctl.wr_state = BUFFER_EMPTY; buffer_ctl.it_state = TRANSFER_NONE; BSP_AUDIO_IN_Record((uint16_t*)&buffer_ctl.pdm_buff[0], INTERNAL_BUFF_SIZE); AudioRec_State = RECORD_ONGOING; } #ifdef JOYSTICK break; default: break; } #endif if (CheckForUserInput() > 0) { /* Stop recorder and exit the test (go to next test) */ BSP_AUDIO_IN_Stop(); return; } } /* Stop recorder once buffer_ctl.rec_length < AUDIO_REC_TOTAL_SIZE*/ BSP_AUDIO_IN_Stop(); BSP_LCD_SetBackColor(LCD_COLOR_WHITE); BSP_LCD_SetTextColor(LCD_COLOR_BLUE); sprintf((char*)FreqStr, "RECORDING DONE, %d frames, START PLAYBACK", NbRecord_done); BSP_LCD_DisplayStringAt(0, BSP_LCD_GetYSize() - 65, (uint8_t *)FreqStr, CENTER_MODE); NbRecord_done = buffer_ctl.rec_length / (DEFAULT_AUDIO_IN_FREQ * DEFAULT_AUDIO_IN_CHANNEL_NBR * 2); sprintf((char*)FreqStr, "Elapsed_time: %d frames", NbRecord_done); BSP_LCD_DisplayStringAt(0, BSP_LCD_GetYSize() - 45, (uint8_t *)FreqStr, CENTER_MODE); /* -----------Start Playback -------------- */ /* Initialize audio IN at REC_FREQ*/ if(BSP_AUDIO_OUT_Init(OUTPUT_DEVICE_HEADPHONE, 95, DEFAULT_AUDIO_IN_FREQ/2) == 0) { BSP_LCD_SetBackColor(LCD_COLOR_WHITE); BSP_LCD_SetTextColor(LCD_COLOR_GREEN); BSP_LCD_DisplayStringAt(0, BSP_LCD_GetYSize() - 95, (uint8_t *)" AUDIO CODEC OK ", CENTER_MODE); } else { BSP_LCD_SetBackColor(LCD_COLOR_WHITE); BSP_LCD_SetTextColor(LCD_COLOR_RED); BSP_LCD_DisplayStringAt(0, BSP_LCD_GetYSize() - 95, (uint8_t *)" AUDIO CODEC FAIL ", CENTER_MODE); BSP_LCD_DisplayStringAt(0, BSP_LCD_GetYSize() - 80, (uint8_t *)" Try to reset board ", CENTER_MODE); } /* Play the recorded buffer*/ if(AUDIO_Play_Start((uint32_t *)AUDIO_REC_START_ADDR, (uint32_t)AUDIO_REC_TOTAL_SIZE) == 0) { BSP_LCD_SetBackColor(LCD_COLOR_WHITE); BSP_LCD_SetTextColor(LCD_COLOR_GREEN); BSP_LCD_DisplayStringAt(0, BSP_LCD_GetYSize() - 95, (uint8_t *)" AUDIO PLAYBACK OK ", CENTER_MODE); } else { BSP_LCD_SetBackColor(LCD_COLOR_WHITE); BSP_LCD_SetTextColor(LCD_COLOR_RED); BSP_LCD_DisplayStringAt(0, BSP_LCD_GetYSize() - 95, (uint8_t *)" AUDIO PLAYBACK FAIL ", CENTER_MODE); } BSP_LCD_DisplayStringAt(0, BSP_LCD_GetYSize() - 25, (uint8_t *)"PLAYBACK DONE", CENTER_MODE); while (1) { /* Toggle LED4 */ BSP_LED_Toggle(LED4); /* Insert 100 ms delay */ HAL_Delay(100); if (CheckForUserInput() > 0) { /* Set LED4 */ BSP_LED_On(LED4); /* Stop recorder */ BSP_AUDIO_IN_Stop(); /* Stop Player before close Test */ BSP_AUDIO_OUT_Stop(CODEC_PDWN_SW); return; } } }
/** * @brief Starts Wave player. * @param None * @retval None */ void WavePlayerStart(WAVE_FormatTypeDef waveformat, WavePlayer_getDataCB_type getDataCB, uint8_t volume) { int32_t bytesread = 0; int32_t length; int16_t *pBuf = NULL; uint32_t AudioRemSize = 0; uint32_t WaveDataLength = 0; /* Set WaveDataLenght to the Speech Wave length */ WaveDataLength = waveformat.FileSize; AudioRemSize = WaveDataLength - sizeof(WAVE_FormatTypeDef); /* Initialize Wave player (Codec, DMA, I2C) */ if (BSP_AUDIO_OUT_Init(OUTPUT_DEVICE_AUTO, volume, waveformat.SampleRate) != 0) { Error_Handler(); } /* Start playing Wave */ BSP_AUDIO_OUT_Play((uint16_t*)&Audio_BufferStereo[0], sizeof(Audio_BufferStereo)); // LEDsState = LED6_TOGGLE; /* Toggling LED6 to signal Play */ // LEDsState = LED6_TOGGLE; /* Resume playing Wave */ BSP_AUDIO_OUT_Resume(); if (CHANNEL_MONO == waveformat.NbrChannels) { length = AUDIO_BUFFER_STEREO_LENGTH/4; } else { length = AUDIO_BUFFER_STEREO_LENGTH/2; } while (AudioRemSize > 0) { if (BUFFER_OFFSET_HALF == BufferOffset) { pBuf = &Audio_BufferStereo[0]; } if (BUFFER_OFFSET_FULL == BufferOffset) { pBuf = &Audio_BufferStereo[AUDIO_BUFFER_STEREO_LENGTH/2]; } if (NULL != pBuf) { bytesread = getDataCB(pBuf, length); if (CHANNEL_MONO == waveformat.NbrChannels) { convertToStereo(pBuf, pBuf, length); } BufferOffset = BUFFER_OFFSET_NONE; pBuf = NULL; if (bytesread <= 0) { AudioRemSize = 0; } else { AudioRemSize -= bytesread; if (AudioRemSize < (length*2)) { AudioRemSize = 0; } } } } LEDsState = LEDS_OFF; BSP_AUDIO_OUT_Stop(CODEC_PDWN_HW); }
/** * @brief Stops playing Wave. * @param None * @retval None */ void WavePlayerStop(void) { BSP_AUDIO_OUT_Stop(CODEC_PDWN_HW); }
/** * @brief Audio Play demo * @param None * @retval None */ void AudioPlay_demo (void) { uint32_t *AudioFreq_ptr; uint8_t status = 0; uint8_t FreqStr[256] = {0}; AudioFreq_ptr = AudioFreq+6; /*AF_48K*/ uwPauseEnabledStatus = 1; /* 0 when audio is running, 1 when Pause is on */ uwVolume = 50; Audio_SetHint(); status = BSP_JOY_Init(JOY_MODE_GPIO); if (status != IO_OK) { BSP_LCD_SetBackColor(LCD_COLOR_WHITE); BSP_LCD_SetTextColor(LCD_COLOR_RED); BSP_LCD_DisplayStringAt(0, BSP_LCD_GetYSize()- 100, (uint8_t *)"ERROR", CENTER_MODE); BSP_LCD_DisplayStringAt(0, BSP_LCD_GetYSize()- 85, (uint8_t *)"Joystick cannot be initialized", CENTER_MODE); } if(BSP_AUDIO_OUT_Init(OUTPUT_DEVICE_BOTH, uwVolume, *AudioFreq_ptr) == 0) { BSP_LCD_SetBackColor(LCD_COLOR_WHITE); BSP_LCD_SetTextColor(LCD_COLOR_GREEN); BSP_LCD_DisplayStringAt(0, BSP_LCD_GetYSize()- 100, (uint8_t *)" AUDIO CODEC OK ", CENTER_MODE); } else { BSP_LCD_SetBackColor(LCD_COLOR_WHITE); BSP_LCD_SetTextColor(LCD_COLOR_RED); BSP_LCD_DisplayStringAt(0, BSP_LCD_GetYSize()- 100, (uint8_t *)" AUDIO CODEC FAIL ", CENTER_MODE); BSP_LCD_DisplayStringAt(0, BSP_LCD_GetYSize()- 85, (uint8_t *)" Try to reset board ", CENTER_MODE); } /* Start playing the file from a circular buffer, once the DMA is enabled, it is always in running state. Application has to fill the buffer with the audio data using Transfer complete and/or half transfer complete interrupts callbacks (EVAL_AUDIO_TransferComplete_CallBack() or EVAL_AUDIO_HalfTransfer_CallBack()... */ AUDIO_Start(); /* Display the state on the screen */ BSP_LCD_SetBackColor(LCD_COLOR_WHITE); BSP_LCD_SetTextColor(LCD_COLOR_BLUE); BSP_LCD_DisplayStringAt(0, BSP_LCD_GetYSize()- 85, (uint8_t *)" PLAYING... ", CENTER_MODE); sprintf((char*)FreqStr," VOL: %lu ",uwVolume); BSP_LCD_DisplayStringAt(0, BSP_LCD_GetYSize()- 55, (uint8_t *)FreqStr, CENTER_MODE); sprintf((char*)FreqStr," FREQ: %lu ",*AudioFreq_ptr); BSP_LCD_DisplayStringAt(0, BSP_LCD_GetYSize()- 40, (uint8_t *)FreqStr, CENTER_MODE); /* IMPORTANT: AUDIO_Process() is called by the SysTick Handler, as it should be called within a periodic process */ /* Infinite loop */ while(1) { BSP_LCD_SetBackColor(LCD_COLOR_WHITE); BSP_LCD_SetTextColor(LCD_COLOR_BLUE); /* Get the Joystick State */ JoyState = BSP_JOY_GetState(); switch(JoyState) { case JOY_UP: /* Increase volume by 5% */ if (uwVolume < 95) uwVolume += 5; else uwVolume = 100; sprintf((char*)FreqStr," VOL: %lu ",uwVolume); BSP_AUDIO_OUT_SetVolume(uwVolume); BSP_LCD_DisplayStringAt(0, BSP_LCD_GetYSize()- 55, (uint8_t *)FreqStr, CENTER_MODE); BSP_LCD_DisplayStringAt(0, LINE(14), (uint8_t *)" ", CENTER_MODE); break; case JOY_DOWN: /* Decrease volume by 5% */ if (uwVolume > 5) uwVolume -= 5; else uwVolume = 0; sprintf((char*)FreqStr," VOL: %lu ",uwVolume); BSP_AUDIO_OUT_SetVolume(uwVolume); BSP_LCD_DisplayStringAt(0, BSP_LCD_GetYSize()- 55, (uint8_t *)FreqStr, CENTER_MODE); BSP_LCD_DisplayStringAt(0, LINE(14), (uint8_t *)" ", CENTER_MODE); break; case JOY_LEFT: /*Decrease Frequency */ if (*AudioFreq_ptr != 8000) { AudioFreq_ptr--; sprintf((char*)FreqStr," FREQ: %lu ", *AudioFreq_ptr); BSP_AUDIO_OUT_Pause(); BSP_AUDIO_OUT_SetFrequency(*AudioFreq_ptr); BSP_AUDIO_OUT_Resume(); } BSP_LCD_DisplayStringAt(0, BSP_LCD_GetYSize()- 40, (uint8_t *)FreqStr, CENTER_MODE); BSP_LCD_DisplayStringAt(0, LINE(14), (uint8_t *)" ", CENTER_MODE); break; case JOY_RIGHT: /* Increase Frequency */ if (*AudioFreq_ptr != 96000) { AudioFreq_ptr++; sprintf((char*)FreqStr," FREQ: %lu ",*AudioFreq_ptr); BSP_AUDIO_OUT_Pause(); BSP_AUDIO_OUT_SetFrequency(*AudioFreq_ptr); BSP_AUDIO_OUT_Resume(); } BSP_LCD_DisplayStringAt(0, BSP_LCD_GetYSize()- 40, (uint8_t *)FreqStr, CENTER_MODE); BSP_LCD_DisplayStringAt(0, LINE(14), (uint8_t *)" ", CENTER_MODE); break; case JOY_SEL: /* Set Pause / Resume */ if (uwPauseEnabledStatus == 1) { /* Pause is enabled, call Resume */ BSP_AUDIO_OUT_Resume(); uwPauseEnabledStatus = 0; BSP_LCD_DisplayStringAt(0, BSP_LCD_GetYSize()- 85, (uint8_t *)" PLAYING... ", CENTER_MODE); } else { /* Pause the playback */ BSP_AUDIO_OUT_Pause(); uwPauseEnabledStatus = 1; BSP_LCD_DisplayStringAt(0, BSP_LCD_GetYSize()- 85, (uint8_t *)" PAUSE ... ", CENTER_MODE); } BSP_LCD_DisplayStringAt(0, LINE(14), (uint8_t *)" ", CENTER_MODE); HAL_Delay(200); break; default: break; } /* Toggle LED3 */ BSP_LED_Toggle(LED3); /* Insert 100 ms delay */ HAL_Delay(100); /* Toggle LED2 */ BSP_LED_Toggle(LED2); /* Insert 100 ms delay */ HAL_Delay(100); if(CheckForUserInput() > 0) { BSP_AUDIO_OUT_Stop(CODEC_PDWN_SW); BSP_AUDIO_OUT_DeInit(); return; } } }