/** * @brief Display interface touch screen buttons * @param None * @retval None */ static void AUDIO_PlaybackDisplayButtons(void) { BSP_LCD_SetFont(&LCD_LOG_HEADER_FONT); BSP_LCD_ClearStringLine(13); /* Clear dedicated zone */ BSP_LCD_ClearStringLine(14); BSP_LCD_ClearStringLine(15); BSP_LCD_SetTextColor(LCD_COLOR_CYAN); BSP_LCD_FillPolygon(PreviousPoints, 3); /* Previous track icon */ BSP_LCD_FillRect(TOUCH_PREVIOUS_XMIN, TOUCH_PREVIOUS_YMIN , 10, TOUCH_PREVIOUS_YMAX - TOUCH_PREVIOUS_YMIN); BSP_LCD_FillPolygon(NextPoints, 3); /* Next track icon */ BSP_LCD_FillRect(TOUCH_NEXT_XMAX-9, TOUCH_NEXT_YMIN , 10, TOUCH_NEXT_YMAX - TOUCH_NEXT_YMIN); BSP_LCD_FillRect(TOUCH_PAUSE_XMIN, TOUCH_PAUSE_YMIN , 15, TOUCH_PAUSE_YMAX - TOUCH_PAUSE_YMIN); /* Pause rectangles */ BSP_LCD_FillRect(TOUCH_PAUSE_XMIN + 20, TOUCH_PAUSE_YMIN, 15, TOUCH_PAUSE_YMAX - TOUCH_PAUSE_YMIN); BSP_LCD_FillRect(TOUCH_STOP_XMIN, TOUCH_STOP_YMIN , /* Stop rectangle */ TOUCH_STOP_XMAX - TOUCH_STOP_XMIN, TOUCH_STOP_YMAX - TOUCH_STOP_YMIN); BSP_LCD_DrawRect(TOUCH_VOL_MINUS_XMIN, TOUCH_VOL_MINUS_YMIN , /* VOl- rectangle */ TOUCH_VOL_MINUS_XMAX - TOUCH_VOL_MINUS_XMIN, TOUCH_VOL_MINUS_YMAX - TOUCH_VOL_MINUS_YMIN); BSP_LCD_DisplayStringAt(24, LINE(14), (uint8_t *)"VOl-", LEFT_MODE); BSP_LCD_DrawRect(TOUCH_VOL_PLUS_XMIN, TOUCH_VOL_PLUS_YMIN , /* VOl+ rectangle */ TOUCH_VOL_PLUS_XMAX - TOUCH_VOL_PLUS_XMIN, TOUCH_VOL_PLUS_YMAX - TOUCH_VOL_PLUS_YMIN); BSP_LCD_DisplayStringAt(24, LINE(14), (uint8_t *)"VOl+", RIGHT_MODE); BSP_LCD_SetTextColor(LCD_COLOR_GREEN); BSP_LCD_SetFont(&LCD_LOG_TEXT_FONT); BSP_LCD_ClearStringLine(15); BSP_LCD_DisplayStringAtLine(15, (uint8_t *)"Use stop button to exit"); BSP_LCD_SetTextColor(LCD_COLOR_CYAN); }
/** * @brief LCD demo Simple Shapes * @param None * @retval None */ static void LCD_Show_FeatureSimpleShapes(void) { Point Points[] = {{20, 150}, {80, 150}, {80, 200}}; Point Points2[] = {{100, 150}, {160, 150}, {160, 200}}; /* Draw misc Shapes inside rectangle area below */ BSP_LCD_SetTextColor(LCD_COLOR_BLACK); BSP_LCD_DrawRect(20, 100, 60 , 40); /* Clear internal of rectangle area before display */ BSP_LCD_FillRect(100, 100, 60 , 40); BSP_LCD_SetTextColor(LCD_COLOR_GRAY); BSP_LCD_DrawCircle(BSP_LCD_GetXSize() - 120, 120, 20); BSP_LCD_FillCircle(BSP_LCD_GetXSize() - 40, 120, 20); BSP_LCD_SetTextColor(LCD_COLOR_GREEN); BSP_LCD_DrawPolygon(Points, 3); BSP_LCD_FillPolygon(Points2, 3); BSP_LCD_SetTextColor(LCD_COLOR_RED); BSP_LCD_DrawEllipse(BSP_LCD_GetXSize() - 120, 170, 30, 20); BSP_LCD_FillEllipse(BSP_LCD_GetXSize() - 50, 170, 30, 20); BSP_LCD_SetTextColor(LCD_COLOR_BLACK); BSP_LCD_DrawHLine(20, BSP_LCD_GetYSize() - 30, BSP_LCD_GetXSize() / 5); BSP_LCD_DrawLine (BSP_LCD_GetXSize() - 150, BSP_LCD_GetYSize() - 20, BSP_LCD_GetXSize() - 20, BSP_LCD_GetYSize() - 50); BSP_LCD_DrawLine (BSP_LCD_GetXSize() - 150, BSP_LCD_GetYSize() - 50, BSP_LCD_GetXSize() - 20, BSP_LCD_GetYSize() - 20); }
/** * @brief Show LCD Features * @param feature : feature index * @retval None */ static void LCD_Show_Feature(uint8_t feature) { Point Points[]= {{20, 70}, {60, 70}, {60, 100}}; Point Points2[]= {{80, 70}, {120, 70}, {120, 100}}; BSP_LCD_SetBackColor(LCD_COLOR_WHITE); BSP_LCD_SetTextColor(LCD_COLOR_WHITE); BSP_LCD_FillRect(0, 60, BSP_LCD_GetXSize(), BSP_LCD_GetYSize()- 40); BSP_LCD_SetTextColor(LCD_COLOR_BLACK); switch (feature) { case 0: /* Text Feature */ BSP_LCD_SetFont(&Font24); BSP_LCD_DisplayStringAt(14, 80, (uint8_t *)"Font24", LEFT_MODE); BSP_LCD_SetFont(&Font20); BSP_LCD_DisplayStringAt(0, 105, (uint8_t *)"Font20", CENTER_MODE); BSP_LCD_SetFont(&Font16); BSP_LCD_DisplayStringAt(14, 130, (uint8_t *)"Font16", RIGHT_MODE); break; case 1: /* Draw misc. Shapes part 1*/ BSP_LCD_SetTextColor(LCD_COLOR_BLACK); BSP_LCD_DrawRect(20, 70, 40 , 20); BSP_LCD_FillRect(70, 70, 40 , 20); BSP_LCD_SetTextColor(LCD_COLOR_BLUE); BSP_LCD_DrawCircle(40, 120, 20); BSP_LCD_FillCircle(90, 120, 20); BSP_LCD_SetTextColor(LCD_COLOR_RED); BSP_LCD_DrawLine (20, 70, 20+40 , 70+20); BSP_LCD_DrawLine (20, 70+20, 20+40 , 70); BSP_LCD_DrawHLine(20, 120, 40); BSP_LCD_DrawVLine(40, 100, 40); break; case 2: /* Draw misc. Shapes part 2*/ BSP_LCD_SetTextColor(LCD_COLOR_GREEN); BSP_LCD_DrawPolygon(Points, 3); BSP_LCD_FillPolygon(Points2, 3); BSP_LCD_SetTextColor(LCD_COLOR_RED); BSP_LCD_DrawEllipse(BSP_LCD_GetXSize() - 100, 110, 20, 30); BSP_LCD_FillEllipse(BSP_LCD_GetXSize() - 40, 110, 20, 30); break; case 3: /* Draw Bitmap */ BSP_LCD_DrawBitmap(20, 70, (uint8_t *)stlogo); HAL_Delay(200); break; } }
/** * @brief Show LCD Features * @param feature : feature index * @retval None */ static void LCD_Show_Feature(uint8_t feature) { Point Points[] = {{20, 150}, {80, 150}, {80, 200}}; Point Points2[] = {{100, 150}, {160, 150}, {160, 200}}; BSP_LCD_SetBackColor(LCD_COLOR_WHITE); BSP_LCD_SetTextColor(LCD_COLOR_WHITE); BSP_LCD_FillRect(12, 92, BSP_LCD_GetXSize() - 24, BSP_LCD_GetYSize() - 104); BSP_LCD_SetTextColor(LCD_COLOR_BLACK); switch (feature) { case 0: /* Text Feature */ BSP_LCD_DisplayStringAt(14, 100, (uint8_t *)"Left aligned Text", LEFT_MODE); BSP_LCD_DisplayStringAt(0, 115, (uint8_t *)"Center aligned Text", CENTER_MODE); BSP_LCD_DisplayStringAt(14, 130, (uint8_t *)"Right aligned Text", RIGHT_MODE); BSP_LCD_SetFont(&Font24); BSP_LCD_DisplayStringAt(14, 180, (uint8_t *)"Font24", LEFT_MODE); BSP_LCD_SetFont(&Font20); BSP_LCD_DisplayStringAt(BSP_LCD_GetXSize() / 2 - 20, 180, (uint8_t *)"Font20", LEFT_MODE); BSP_LCD_SetFont(&Font16); BSP_LCD_DisplayStringAt(BSP_LCD_GetXSize() - 80, 184, (uint8_t *)"Font16", LEFT_MODE); break; case 1: /* Draw misc. Shapes */ BSP_LCD_SetTextColor(LCD_COLOR_BLACK); BSP_LCD_DrawRect(20, 100, 60 , 40); BSP_LCD_FillRect(100, 100, 60 , 40); BSP_LCD_SetTextColor(LCD_COLOR_GRAY); BSP_LCD_DrawCircle(BSP_LCD_GetXSize() - 120, 120, 20); BSP_LCD_FillCircle(BSP_LCD_GetXSize() - 40, 120, 20); BSP_LCD_SetTextColor(LCD_COLOR_GREEN); BSP_LCD_DrawPolygon(Points, 3); BSP_LCD_FillPolygon(Points2, 3); BSP_LCD_SetTextColor(LCD_COLOR_RED); BSP_LCD_DrawEllipse(BSP_LCD_GetXSize() - 120, 170, 30, 20); BSP_LCD_FillEllipse(BSP_LCD_GetXSize() - 50, 170, 30, 20); BSP_LCD_SetTextColor(LCD_COLOR_BLACK); BSP_LCD_DrawHLine(20, BSP_LCD_GetYSize() - 30, BSP_LCD_GetXSize() / 5); BSP_LCD_DrawLine (BSP_LCD_GetXSize() - 150, BSP_LCD_GetYSize() - 20, BSP_LCD_GetXSize() - 20, BSP_LCD_GetYSize() - 50); BSP_LCD_DrawLine (BSP_LCD_GetXSize() - 150, BSP_LCD_GetYSize() - 50, BSP_LCD_GetXSize() - 20, BSP_LCD_GetYSize() - 20); break; case 2: /* Draw Bitmap */ BSP_LCD_DrawBitmap(20, 100, (uint8_t *)stlogo); HAL_Delay(100); BSP_LCD_DrawBitmap(BSP_LCD_GetXSize() / 2 - 40, 100, (uint8_t *)stlogo); HAL_Delay(100); BSP_LCD_DrawBitmap(BSP_LCD_GetXSize() - 100, 100, (uint8_t *)stlogo); HAL_Delay(100); BSP_LCD_DrawBitmap(20, BSP_LCD_GetYSize() - 80, (uint8_t *)stlogo); HAL_Delay(100); BSP_LCD_DrawBitmap(BSP_LCD_GetXSize() / 2 - 40, BSP_LCD_GetYSize() - 80, (uint8_t *)stlogo); HAL_Delay(100); BSP_LCD_DrawBitmap(BSP_LCD_GetXSize() - 100, BSP_LCD_GetYSize() - 80, (uint8_t *)stlogo); HAL_Delay(100); break; default : break; } }
/** * @brief Show LCD Features * @param feature : feature index * @retval None */ static void LCD_Show_Feature(uint8_t feature) { Point Points[]= {{5, 108}, {29, 108}, {29, 132}}; Point Points2[]= {{36, 108}, {60, 108}, {60, 132}}; BSP_LCD_SetBackColor(LCD_COLOR_WHITE); BSP_LCD_SetTextColor(LCD_COLOR_BLACK); switch (feature) { case 0: /* Text alignement Feature */ BSP_LCD_SetFont(&Font12); BSP_LCD_DisplayStringAt(4, BSP_LCD_GetYSize()- 70, (uint8_t *)"Left Text", LEFT_MODE); BSP_LCD_DisplayStringAt(4, BSP_LCD_GetYSize()- 45, (uint8_t *)"Center Text", CENTER_MODE); BSP_LCD_DisplayStringAt(4, BSP_LCD_GetYSize()- 20, (uint8_t *)"Right Text", RIGHT_MODE); break; case 1: /* Text Font Feature */ BSP_LCD_SetTextColor(LCD_COLOR_WHITE); BSP_LCD_FillRect(4, 84, BSP_LCD_GetXSize() - 8, BSP_LCD_GetYSize()- 88); BSP_LCD_SetTextColor(LCD_COLOR_BLACK); BSP_LCD_SetFont(&Font24); BSP_LCD_DisplayStringAt(4, BSP_LCD_GetYSize()- 75, (uint8_t *)"Font24", CENTER_MODE); BSP_LCD_SetFont(&Font20); BSP_LCD_DisplayStringAt(4, BSP_LCD_GetYSize()- 57, (uint8_t *)"Font20", CENTER_MODE); BSP_LCD_SetFont(&Font16); BSP_LCD_DisplayStringAt(4, BSP_LCD_GetYSize()- 41, (uint8_t *)"Font16", CENTER_MODE); BSP_LCD_SetFont(&Font12); BSP_LCD_DisplayStringAt(4, BSP_LCD_GetYSize()- 26, (uint8_t *)"Font12", CENTER_MODE); BSP_LCD_SetFont(&Font8); BSP_LCD_DisplayStringAt(4, BSP_LCD_GetYSize()- 13, (uint8_t *)"Font8", CENTER_MODE); break; case 2: /* Draw misc. Shapes Feature */ BSP_LCD_SetTextColor(LCD_COLOR_WHITE); BSP_LCD_FillRect(4, 84, BSP_LCD_GetXSize() - 8, BSP_LCD_GetYSize()- 88); BSP_LCD_SetTextColor(LCD_COLOR_BLACK); BSP_LCD_DrawRect(5, 88, 25, 13); BSP_LCD_FillRect(36, 88, 25, 13); BSP_LCD_SetTextColor(LCD_COLOR_GREEN); BSP_LCD_DrawPolygon(Points, 3); BSP_LCD_FillPolygon(Points2, 3); BSP_LCD_SetTextColor(LCD_COLOR_MAGENTA); BSP_LCD_DrawCircle(80, 97, 12); BSP_LCD_FillCircle(110, 97, 12); BSP_LCD_SetTextColor(LCD_COLOR_RED); BSP_LCD_DrawEllipse(80, 130, 8, 16); BSP_LCD_FillEllipse(110, 130, 8, 16); BSP_LCD_SetTextColor(LCD_COLOR_BLACK); BSP_LCD_DrawHLine(75, BSP_LCD_GetYSize() - 9, BSP_LCD_GetXSize() / 3); BSP_LCD_DrawLine(5, 154, 60, 136); BSP_LCD_DrawLine(5, 136, 60, 154); break; // case 3: // /* Draw Bitmap */ // BSP_LCD_DrawBitmap(20, 100, (uint8_t *)stlogo); // HAL_Delay(500); // // BSP_LCD_DrawBitmap(BSP_LCD_GetXSize()/2 - 40, 100, (uint8_t *)stlogo); // HAL_Delay(500); // // BSP_LCD_DrawBitmap(BSP_LCD_GetXSize()-100, 100, (uint8_t *)stlogo); // HAL_Delay(500); // // BSP_LCD_DrawBitmap(20, BSP_LCD_GetYSize()- 80, (uint8_t *)stlogo); // HAL_Delay(500); // // BSP_LCD_DrawBitmap(BSP_LCD_GetXSize()/2 - 40, BSP_LCD_GetYSize()- 80, (uint8_t *)stlogo); // HAL_Delay(500); // // BSP_LCD_DrawBitmap(BSP_LCD_GetXSize()-100, BSP_LCD_GetYSize()- 80, (uint8_t *)stlogo); // HAL_Delay(500); // break; default: break; } }
/** * @brief Manages AUDIO Menu Process. * @param None * @retval None */ void AUDIO_MenuProcess(void) { AUDIO_ErrorTypeDef status; TS_StateTypeDef TS_State; Point PlaybackLogoPoints[] = {{TOUCH_PLAYBACK_XMIN, TOUCH_PLAYBACK_YMIN}, {TOUCH_PLAYBACK_XMAX, (TOUCH_PLAYBACK_YMIN+TOUCH_PLAYBACK_YMAX)/2}, {TOUCH_PLAYBACK_XMIN, TOUCH_PLAYBACK_YMAX}}; if(appli_state == APPLICATION_READY) { switch(AudioDemo.state) { case AUDIO_DEMO_IDLE: if(AUDIO_ShowWavFiles() > 0) { LCD_ErrLog("There is no WAV file on the USB Key.\n"); AUDIO_ChangeSelectMode(AUDIO_SELECT_MENU); AudioDemo.state = AUDIO_DEMO_IDLE; } else { AudioDemo.state = AUDIO_DEMO_WAIT; } BSP_LCD_SetFont(&LCD_LOG_HEADER_FONT); BSP_LCD_ClearStringLine(13); /* Clear touch screen buttons dedicated zone */ BSP_LCD_ClearStringLine(14); BSP_LCD_ClearStringLine(15); BSP_LCD_SetTextColor(LCD_COLOR_CYAN); BSP_LCD_FillPolygon(PlaybackLogoPoints, 3); /* Playback sign */ BSP_LCD_FillCircle((TOUCH_RECORD_XMAX+TOUCH_RECORD_XMIN)/2, /* Record circle */ (TOUCH_RECORD_YMAX+TOUCH_RECORD_YMIN)/2, (TOUCH_RECORD_XMAX-TOUCH_RECORD_XMIN)/2); BSP_LCD_SetTextColor(LCD_COLOR_GREEN); BSP_LCD_SetFont(&LCD_LOG_TEXT_FONT); BSP_LCD_DisplayStringAtLine(15, (uint8_t *)"Use touch screen to enter playback or record menu"); break; case AUDIO_DEMO_WAIT: BSP_TS_GetState(&TS_State); if(TS_State.touchDetected == 1) { if ((TS_State.touchX[0] > TOUCH_RECORD_XMIN) && (TS_State.touchX[0] < TOUCH_RECORD_XMAX) && (TS_State.touchY[0] > TOUCH_RECORD_YMIN) && (TS_State.touchY[0] < TOUCH_RECORD_YMAX)) { AudioDemo.state = AUDIO_DEMO_IN; } else if ((TS_State.touchX[0] > TOUCH_PLAYBACK_XMIN) && (TS_State.touchX[0] < TOUCH_PLAYBACK_XMAX) && (TS_State.touchY[0] > TOUCH_PLAYBACK_YMIN) && (TS_State.touchY[0] < TOUCH_PLAYBACK_YMAX)) { AudioDemo.state = AUDIO_DEMO_PLAYBACK; } else { AudioDemo.state = AUDIO_DEMO_EXPLORE; } /* Wait for touch released */ do { BSP_TS_GetState(&TS_State); }while(TS_State.touchDetected > 0); } break; case AUDIO_DEMO_EXPLORE: if(appli_state == APPLICATION_READY) { if(AUDIO_ShowWavFiles() > 0) { LCD_ErrLog("There is no WAV file on the USB Key.\n"); AUDIO_ChangeSelectMode(AUDIO_SELECT_MENU); AudioDemo.state = AUDIO_DEMO_IDLE; } else { AudioDemo.state = AUDIO_DEMO_WAIT; } } else { AudioDemo.state = AUDIO_DEMO_WAIT; } break; case AUDIO_DEMO_PLAYBACK: if(appli_state == APPLICATION_READY) { if(AudioState == AUDIO_STATE_IDLE) { /* Start Playing */ AudioState = AUDIO_STATE_INIT; /* Clear the LCD */ LCD_ClearTextZone(); if(AUDIO_PLAYER_Start(0) == AUDIO_ERROR_IO) { AUDIO_ChangeSelectMode(AUDIO_SELECT_MENU); AudioDemo.state = AUDIO_DEMO_IDLE; } } else /* Not idle */ { if(AUDIO_PLAYER_Process() == AUDIO_ERROR_IO) { /* Clear the LCD */ LCD_ClearTextZone(); AUDIO_ChangeSelectMode(AUDIO_SELECT_MENU); AudioDemo.state = AUDIO_DEMO_IDLE; } } } else { AudioDemo.state = AUDIO_DEMO_WAIT; } break; case AUDIO_DEMO_IN: if(appli_state == APPLICATION_READY) { if(AudioState == AUDIO_STATE_IDLE) { /* Start Playing */ AudioState = AUDIO_STATE_INIT; /* Clear the LCD */ LCD_ClearTextZone(); /* Configure the audio recorder: sampling frequency, bits-depth, number of channels */ if(AUDIO_REC_Start() == AUDIO_ERROR_IO) { AUDIO_ChangeSelectMode(AUDIO_SELECT_MENU); AudioDemo.state = AUDIO_DEMO_IDLE; } } else /* Not idle */ { status = AUDIO_REC_Process(); if((status == AUDIO_ERROR_IO) || (status == AUDIO_ERROR_EOF)) { /* Clear the LCD */ LCD_ClearTextZone(); AUDIO_ChangeSelectMode(AUDIO_SELECT_MENU); AudioDemo.state = AUDIO_DEMO_IDLE; } } } else { AudioDemo.state = AUDIO_DEMO_WAIT; } break; default: break; } } if(appli_state == APPLICATION_DISCONNECT) { appli_state = APPLICATION_IDLE; AUDIO_ChangeSelectMode(AUDIO_SELECT_MENU); BSP_AUDIO_OUT_Stop(CODEC_PDWN_SW); } }
/** * @brief Audio Play demo * @param None * @retval None */ void AudioPlay_demo (void) { uint8_t ts_status = TS_OK; uint32_t *AudioFreq_ptr; AudioFreq_ptr = AudioFreq+6; /*AF_48K*/ uint8_t FreqStr[256] = {0}; Point Points2[] = {{100, 140}, {160, 180}, {100, 220}}; uwPauseEnabledStatus = 1; /* 0 when audio is running, 1 when Pause is on */ uwVolume = AUDIO_DEFAULT_VOLUME; if (TouchScreen_IsCalibrationDone() == 0) { ts_status = Touchscreen_Calibration(); if(ts_status == TS_OK) { BSP_LCD_DisplayStringAt(0, BSP_LCD_GetYSize() - 65, (uint8_t *)"Touchscreen calibration success.", CENTER_MODE); } else { BSP_LCD_DisplayStringAt(0, BSP_LCD_GetYSize() - 65, (uint8_t *)"ERROR : touchscreen not yet calibrated.", CENTER_MODE); ts_status = TS_ERROR; } } /* of if (TouchScreen_IsCalibrationDone() == 0) */ AudioPlay_SetHint(); BSP_LCD_SetFont(&Font20); /* if(BSP_AUDIO_OUT_Init(OUTPUT_DEVICE_SPEAKER, uwVolume, *AudioFreq_ptr) == 0) if(BSP_AUDIO_OUT_Init(OUTPUT_DEVICE_BOTH, uwVolume, *AudioFreq_ptr) == 0)*/ 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, LINE(6), (uint8_t *)" AUDIO CODEC OK ", CENTER_MODE); } else { BSP_LCD_SetBackColor(LCD_COLOR_WHITE); BSP_LCD_SetTextColor(LCD_COLOR_RED); BSP_LCD_DisplayStringAt(0, LINE(6), (uint8_t *)" AUDIO CODEC FAIL ", CENTER_MODE); BSP_LCD_DisplayStringAt(0, LINE(7), (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 (DISCOVERY_AUDIO_TransferComplete_CallBack() or DISCOVERY_AUDIO_HalfTransfer_CallBack()... */ AUDIO_Play_Start((uint32_t *)AUDIO_SRC_FILE_ADDRESS, (uint32_t)AUDIO_FILE_SIZE); /* Display the state on the screen */ BSP_LCD_SetBackColor(LCD_COLOR_WHITE); BSP_LCD_SetTextColor(LCD_COLOR_BLUE); BSP_LCD_DisplayStringAt(0, LINE(8), (uint8_t *)" PLAYING... ", CENTER_MODE); sprintf((char*)FreqStr, " VOL: %3lu ", uwVolume); BSP_LCD_DisplayStringAt(0, LINE(9), (uint8_t *)FreqStr, CENTER_MODE); sprintf((char*)FreqStr, " FREQ: %6lu ", *AudioFreq_ptr); BSP_LCD_DisplayStringAt(0, LINE(10), (uint8_t *)FreqStr, CENTER_MODE); BSP_LCD_SetFont(&Font16); BSP_LCD_DisplayStringAt(0, BSP_LCD_GetYSize() - 40, (uint8_t *)"Hear nothing ? Have you copied the audio file with STM-LINK UTILITY ?", CENTER_MODE); if(ts_status == TS_OK) { /* Set touchscreen in Interrupt mode and program EXTI accordingly on falling edge of TS_INT pin */ ts_status = BSP_TS_ITConfig(); BSP_TEST_APPLI_ASSERT(ts_status != TS_OK); Touchscreen_DrawBackground_Circle_Buttons(16); } BSP_LCD_SetFont(&Font20); /* draw play triangle */ BSP_LCD_SetTextColor(LCD_COLOR_GREEN); BSP_LCD_FillPolygon(Points2, 3); /* IMPORTANT: AUDIO_Play_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 TouchScreen State */ ts_action = (TS_ActionTypeDef) TouchScreen_GetTouchPosition(); switch (ts_action) { case TS_ACT_VOLUME_UP: /* Increase volume by 5% */ if (uwVolume < 95) uwVolume += 5; else uwVolume = 100; sprintf((char*)FreqStr, " VOL: %3lu ", uwVolume); BSP_AUDIO_OUT_SetVolume(uwVolume); BSP_LCD_DisplayStringAt(0, LINE(9), (uint8_t *)FreqStr, CENTER_MODE); break; case TS_ACT_VOLUME_DOWN: /* Decrease volume by 5% */ if (uwVolume > 5) uwVolume -= 5; else uwVolume = 0; sprintf((char*)FreqStr, " VOL: %3lu ", uwVolume); BSP_AUDIO_OUT_SetVolume(uwVolume); BSP_LCD_DisplayStringAt(0, LINE(9), (uint8_t *)FreqStr, CENTER_MODE); break; case TS_ACT_FREQ_DOWN: /*Decrease Frequency */ if (*AudioFreq_ptr != 8000) { AudioFreq_ptr--; sprintf((char*)FreqStr, " FREQ: %6lu ", *AudioFreq_ptr); BSP_AUDIO_OUT_Pause(); BSP_AUDIO_OUT_SetFrequency(*AudioFreq_ptr); BSP_AUDIO_OUT_Resume(); BSP_AUDIO_OUT_SetVolume(uwVolume); } BSP_LCD_DisplayStringAt(0, LINE(10), (uint8_t *)FreqStr, CENTER_MODE); break; case TS_ACT_FREQ_UP: /* Increase Frequency */ if (*AudioFreq_ptr != 96000) { AudioFreq_ptr++; sprintf((char*)FreqStr, " FREQ: %6lu ", *AudioFreq_ptr); BSP_AUDIO_OUT_Pause(); BSP_AUDIO_OUT_SetFrequency(*AudioFreq_ptr); BSP_AUDIO_OUT_Resume(); BSP_AUDIO_OUT_SetVolume(uwVolume); } BSP_LCD_DisplayStringAt(0, LINE(10), (uint8_t *)FreqStr, CENTER_MODE); break; case TS_ACT_PAUSE: /* Set Pause / Resume */ if (uwPauseEnabledStatus == 1) { /* Pause is enabled, call Resume */ BSP_AUDIO_OUT_Resume(); uwPauseEnabledStatus = 0; BSP_LCD_DisplayStringAt(0, LINE(8), (uint8_t *)" PLAYING... ", CENTER_MODE); BSP_LCD_SetTextColor(LCD_COLOR_WHITE); BSP_LCD_FillPolygon(Points2, 3); BSP_LCD_SetTextColor(LCD_COLOR_BLACK); BSP_LCD_FillRect(100, 140, 25 , 80); BSP_LCD_FillRect(140, 140, 25 , 80); } else { /* Pause the playback */ BSP_AUDIO_OUT_Pause(); uwPauseEnabledStatus = 1; BSP_LCD_DisplayStringAt(0, LINE(8), (uint8_t *)" PAUSE ... ", CENTER_MODE); BSP_LCD_SetTextColor(LCD_COLOR_WHITE); BSP_LCD_FillRect(100, 140, 80 , 80); BSP_LCD_SetTextColor(LCD_COLOR_GREEN); BSP_LCD_FillPolygon(Points2, 3); } HAL_Delay(200); break; default: break; } /* Toggle LED4 */ BSP_LED_Toggle(LED4); /* Insert 100 ms delay */ HAL_Delay(100); if (CheckForUserInput() > 0) { /* Set LED4 */ BSP_LED_On(LED4); BSP_AUDIO_OUT_Stop(CODEC_PDWN_SW); return; } } }
void LCD_DISCO_F469NI::FillPolygon(pPoint Points, uint16_t PointCount) { BSP_LCD_FillPolygon(Points, PointCount); }