📄 waveplayer.c
字号:
DisplayMenu();
/* Enable the JoyStick interrupts */
IntExtOnOffConfig(ENABLE);
return;
}
/* If "KEY" pushbutton is pressed */
if(MyKey == KEY)
{
/* Mask All Interrupts */
NVIC_SETPRIMASK();
/* If the Codec is Playing => PAUSE */
if (GetVar_AudioPlayStatus() == AudioPlayStatus_PLAYING)
{
/* Update the display information */
LCD_Update(PAUSE);
/* Command the Pause of the current stream */
SetVar_AudioPlayStatus(AudioPlayStatus_PAUSED);
}
/* If the Codec is PAUSED => Resume PLAYING */
else if (GetVar_AudioPlayStatus() == AudioPlayStatus_PAUSED)
{
/* Update the LCD display */
LCD_Update(PLAY);
#if STM3210E
/* Start playing from the last saved position */
I2S_CODEC_Play(GetVar_AudioDataIndex());
#else
DAC_CODEC_Play(GetVar_AudioDataIndex());
#endif
}
/* If the Codec is STOPPED => PLAY from the file start address */
else if (GetVar_AudioPlayStatus() == AudioPlayStatus_STOPPED)
{
/* Update the display information */
LCD_Update(PLAY);
#if STM3210E
/* Initialize all devices w/choosen parameters */
err = I2S_CODEC_Init(GetVar_CurrentOutputDevice(), AUDIO_FILE_ADDRESS);
#else
err = DAC_CODEC_Init(AUDIO_FILE_ADDRESS);
#endif
/* Error message display if failure */
if (err != 0)
{
LCD_DisplayError(err);
/* Enable the FSMC that share a pin w/ I2C1 (LBAR) */
RCC_AHBPeriphClockCmd(RCC_AHBPeriph_FSMC, ENABLE);
/* Clear the LCD */
LCD_Clear(White);
/* Display the previous menu */
DisplayMenu();
/* Disable mask of all interrupts */
NVIC_RESETPRIMASK();
/* Enable the JoyStick interrupts */
IntExtOnOffConfig(ENABLE);
return;
}
#if STM3210E
/* Enable Playing the audio file */
I2S_CODEC_Play(GetVar_DataStartAddr());
#else
DAC_CODEC_Play(GetVar_DataStartAddr());
#endif
}
/* Disable mask of all interrupts */
NVIC_RESETPRIMASK();
}
}
}
/*******************************************************************************
* Function Name : LCD_Update
* Description : Controls the wave player application LCD display messages.
* Input : None
* Output : None
* Return : None
*******************************************************************************/
void LCD_Update(u32 Status)
{
u8 tmp = 0;
u32 counter = 0;
/* Enable the FSMC that share a pin w/ I2C1 (LBAR) */
RCC_AHBPeriphClockCmd(RCC_AHBPeriph_FSMC, ENABLE);
switch (Status)
{
case PROGRESS:
tmp = (u8) ((u32)((GetVar_AudioDataIndex()) * 100) / GetVar_AudioDataLength());
if (tmp == 0)
{
LCD_SetTextColor(Magenta);
LCD_ClearLine(Line8);
LCD_DrawRect(Line8, 310, 16, 300);
}
else
{
LCD_SetTextColor(Magenta);
LCD_DrawLine(Line8, 310 - (tmp * 3), 16, Vertical);
}
break;
case FRWD:
tmp = (u8) ((u32)((GetVar_AudioDataIndex()) * 100) / GetVar_AudioDataLength());
LCD_SetTextColor(Magenta);
LCD_ClearLine(Line8);
LCD_DrawRect(Line8, 310, 16, 300);
LCD_SetTextColor(Magenta);
for (counter = 0; counter <= tmp; counter++)
{
LCD_DrawLine(Line8, 310 - (counter * 3), 16, Vertical);
}
break;
case STOP:
/* Display the stopped status menu */
LCD_SetTextColor(White);
LCD_DisplayStringLine(Line3, CmdTitle1Stopped);
LCD_DisplayStringLine(Line4, CmdTitle2Stopped);
LCD_SetTextColor(Red);
LCD_DisplayStringLine(Line6, StatusTitleStopped);
LCD_ClearLine(Line9);
LCD_SetTextColor(Black);
LCD_DisplayChar(Line9, 250, 'v');
LCD_DisplayChar(Line9, 235, 'o');
LCD_DisplayChar(Line9, 220, 'l');
LCD_DisplayChar(Line9, 200, '-');
LCD_DisplayChar(Line9, 85, '+');
LCD_DrawRect(Line9 + 8, 185, 10, 100);
break;
case PAUSE:
/* Display the paused status menu */
LCD_SetTextColor(White);
LCD_DisplayStringLine(Line3, CmdTitle1Paused);
LCD_DisplayStringLine(Line4, CmdTitle2Paused);
LCD_SetTextColor(Red);
LCD_DisplayStringLine(Line6, StatusTitlePaused);
break;
case PLAY:
/* Display the Titles */
LCD_SetTextColor(Black);
LCD_DisplayStringLine(Line0, DemoTitle);
LCD_DisplayStringLine(Line2, CmdTitle0);
/* Display the Playing status menu */
LCD_SetTextColor(White);
LCD_DisplayStringLine(Line3, CmdTitle1Playing);
LCD_DisplayStringLine(Line4, CmdTitle2Playing);
LCD_SetTextColor(Red);
LCD_DisplayStringLine(Line6, StatusTitlePlaying);
LCD_ClearLine(Line9);
LCD_SetTextColor(Black);
LCD_DisplayChar(Line9, 250, 'v');
LCD_DisplayChar(Line9, 235, 'o');
LCD_DisplayChar(Line9, 220, 'l');
LCD_DisplayChar(Line9, 200, '-');
LCD_DisplayChar(Line9, 85, '+');
LCD_DrawRect(Line9 + 8, 185, 10, 100);
break;
case ALL:
I2S_CODEC_LCDConfig();
/* Display the stopped status menu */
LCD_SetTextColor(White);
LCD_DisplayStringLine(Line3, CmdTitle1Stopped);
LCD_DisplayStringLine(Line4, CmdTitle2Stopped);
LCD_SetTextColor(Red);
LCD_DisplayStringLine(Line6, StatusTitleStopped);
LCD_ClearLine(Line9);
LCD_SetTextColor(Black);
LCD_DisplayChar(Line9, 250, 'v');
LCD_DisplayChar(Line9, 235, 'o');
LCD_DisplayChar(Line9, 220, 'l');
LCD_DisplayChar(Line9, 200, '-');
LCD_DisplayChar(Line9, 85, '+');
LCD_DrawRect(Line9 + 8, 185, 10, 100);
break;
}
/* Update the volume bar in all cases except when progress bar is to be apdated */
if (Status != PROGRESS)
{
/* Compute the current volume percentage */
tmp = (u8) ((u16)((0xFF - GetVar_CurrentVolume()) * 100) / 0xFF) ;
/* Clear the previuos volume bar */
LCD_SetTextColor(Blue);
LCD_DrawLine(Line9 + 10, 185 - previoustmp , 8, Vertical);
LCD_DrawLine(Line9 + 10, 185 - previoustmp + 1 , 8, Vertical);
/* Draw the new volume bar */
LCD_SetTextColor(Red);
LCD_DrawLine(Line9 + 10, 185 - tmp , 8, Vertical);
LCD_DrawLine(Line9 + 10, 185 - tmp + 1 , 8, Vertical);
/* save the current position */
previoustmp = tmp;
}
/* Disable the FSMC that share a pin w/ I2C1 (LBAR) */
RCC_AHBPeriphClockCmd(RCC_AHBPeriph_FSMC, DISABLE);
}
/*******************************************************************************
* Function Name : LCD_DisplayError
* Description : Displays error message on the LCD screen and prompt user to
* reset the application.
* Input : err: Error code.
* Output : None
* Return : None
*******************************************************************************/
void LCD_DisplayError(u32 err)
{
I2S_CODEC_LCDConfig();
/* Enable the FSMC that share a pin w/ I2C1 (LBAR) */
RCC_AHBPeriphClockCmd(RCC_AHBPeriph_FSMC, ENABLE);
LCD_SetTextColor(Red);
/* Clear the LCD */
LCD_Clear(White);
/* The memory initialazation failed */
if (err == 1)
{
LCD_DisplayStringLine(Line7, memerr);
}
/* The audio file initialization failed (wrong audio format or wrong file) */
if (err == 2)
{
LCD_DisplayStringLine(Line7, fileerr);
}
/* I2C communication failure occured */
if (err == 3)
{
LCD_DisplayStringLine(Line7, i2cerr);
}
LCD_DisplayStringLine(Line8, "Push JoyStick to ");
LCD_DisplayStringLine(Line9, "exit. ");
/* Disable the FSMC that share a pin w/ I2C1 (LBAR) */
RCC_AHBPeriphClockCmd(RCC_AHBPeriph_FSMC, DISABLE);
while(ReadKey() == NOKEY)
{
}
}
/*******************************************************************************
* Function Name : I2S_CODEC_LCDConfig
* Description : Initialize the LCD device and display the welcome screen.
* Input : None
* Output : None
* Return : None
*******************************************************************************/
void I2S_CODEC_LCDConfig(void)
{
/* Set the text and the background color */
LCD_SetBackColor(Blue);
LCD_SetTextColor(Black);
LCD_Clear(White);
/* Display the Titles */
LCD_DisplayStringLine(Line0, DemoTitle);
LCD_DisplayStringLine(Line2, CmdTitle0);
}
/******************* (C) COPYRIGHT 2008 STMicroelectronics *****END OF FILE****/
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -