/** * @brief Changes the selection mode. * @param select_mode: Selection mode * @retval None */ void CDC_ChangeSelectMode(CDC_DEMO_SelectMode select_mode) { if(select_mode == CDC_SELECT_CONFIG) { LCD_ClearTextZone(); CDC_SelectItem(DEMO_CONFIGURATION_menu, 0xFF); CdcSettingsState.select = 0; CDC_SelectSettingsItem(0); } else if(select_mode == CDC_SELECT_FILE) { CDC_SelectItem(DEMO_SEND_menu, 0xFF); CdcSettingsState.select = 0; } else if(select_mode == CDC_SELECT_MENU) { if(CdcDemo.state == CDC_DEMO_CONFIGURATION) { CDC_SelectSettingsItem(0xFF); CDC_SelectItem(DEMO_CONFIGURATION_menu, 0); } if(CdcDemo.state == CDC_DEMO_SEND) { CDC_SelectItem(DEMO_SEND_menu, 1); } } CdcSelectMode = select_mode; CdcDemo.select = 0; }
/** * @brief Changes the selection mode. * @param select_mode: Selection mode * @retval None */ static void MTP_ChangeSelectMode(MTP_DEMO_SelectMode select_mode) { if(select_mode == MTP_SELECT_MENU) { MTP_SelectItem(MTP_main_menu, 0x00); LCD_ClearTextZone(); LCD_LOG_UpdateDisplay(); } else if(select_mode == MTP_PLAYBACK_CONTROL) { LCD_ClearTextZone(); MTP_SelectItem(MTP_main_menu, 0xFF); } mtp_select_mode = select_mode; mtp_demo.select = 0; }
/** * @brief Changes the selection mode. * @param select_mode: Selection mode * @retval None */ void Audio_ChangeSelectMode(AUDIO_DEMO_SelectMode select_mode) { if(select_mode == AUDIO_SELECT_MENU) { AUDIO_MenuSelectItem(AUDIO_main_menu, 0x00); LCD_ClearTextZone(); LCD_LOG_UpdateDisplay(); audio_demo.state = AUDIO_DEMO_IDLE; AUDIO_Stop(); } else if(select_mode == AUDIO_PLAYBACK_CONTROL) { LCD_ClearTextZone(); AUDIO_MenuSelectItem(AUDIO_main_menu, 0xFF); } audio_select_mode = select_mode; audio_demo.select = 0; }
/** * @brief Returns from Send Menu * @param None * @retval None */ static void ReturnFromSendMenu(void) { CdcDemo.state = CDC_DEMO_IDLE; CdcDemo.select = 0; /* Restore main menu */ LCD_ClearTextZone(); LCD_LOG_UpdateDisplay(); Menu_Init(); }
/** * @brief Handles CDC Receive Menu. * @param None * @retval None */ void CDC_Handle_Receive_Menu(void) { switch(CdcDemo.Receive_state) { case CDC_RECEIVE_IDLE: CdcDemo.Receive_state = CDC_RECEIVE_WAIT; CDC_SelectItem(DEMO_RECEIVE_menu, 0); CdcDemo.select = 0; USBH_CDC_Stop(&hUSBHost); BSP_LCD_SetTextColor(LCD_COLOR_GREEN); BSP_LCD_DisplayStringAtLine(14, (uint8_t *)" "); BSP_LCD_DisplayStringAtLine(15, (uint8_t *)"Use [Buttons Left/Right] to scroll up/down"); break; case CDC_RECEIVE_WAIT: if(CdcDemo.select != PrevSelect) { PrevSelect = CdcDemo.select; CDC_SelectItem(DEMO_RECEIVE_menu, CdcDemo.select & 0x7F); /* Handle select item */ if(CdcDemo.select & 0x80) { switch(CdcDemo.select & 0x7F) { case 0: BSP_LCD_SetTextColor(LCD_COLOR_WHITE); /* Start Reception */ LCD_ClearTextZone(); BSP_LCD_DisplayStringAtLine(3, (uint8_t *)"Receiving data ..."); xPos = 0; yLinePos = 4; memset(CDC_RX_Buffer, 0, RX_BUFF_SIZE); USBH_CDC_Receive(&hUSBHost, CDC_RX_Buffer, RX_BUFF_SIZE); CdcDemo.Receive_state = CDC_RECEIVE_WAIT; break; case 1: BSP_LCD_SetTextColor(LCD_COLOR_WHITE); USBH_CDC_Stop(&hUSBHost); ReturnFromReceiveMenu(); break; default: break; } } } break; default: break; } CdcDemo.select &= 0x7F; }
/** * @brief Displays recieved data * @param data: Keyboard data to be displayed * @retval None */ static void DumpReceivedData(void) { uint16_t size; uint8_t *ptr = CDC_RX_Buffer; size = USBH_CDC_GetLastReceivedDataSize(&hUSBHost); BSP_LCD_SetTextColor(LCD_COLOR_YELLOW); while(size--) { if((*ptr != '\n') && (*ptr != '\r')) { if(*ptr == '\t') { BSP_LCD_DisplayChar(xPos, LINE(yLinePos), ' '); } else { BSP_LCD_DisplayChar(xPos, LINE(yLinePos), *ptr); } xPos += 7; } else if(*ptr == '\n') { yLinePos++; xPos = 0; } ptr++; if(xPos > (BSP_LCD_GetXSize() - 7)) { xPos = 0; yLinePos++; } if(yLinePos > 13) { BSP_LCD_SetTextColor(LCD_COLOR_GREEN); BSP_LCD_DisplayStringAtLine(15, (uint8_t *)"Use [User Key] to see more data"); /* Key Button in polling */ while(BSP_PB_GetState(BUTTON_KEY) != RESET) { /* Wait for User Input */ } LCD_ClearTextZone(); BSP_LCD_SetTextColor(LCD_COLOR_WHITE); BSP_LCD_DisplayStringAtLine(3, (uint8_t *)"Receiving data ..."); BSP_LCD_SetTextColor(LCD_COLOR_YELLOW); xPos = 0; yLinePos = 4; } } }
/** * @brief Changes the selection mode. * @param select_mode: Selection mode * @retval None */ static void AUDIO_ChangeSelectMode(AUDIO_DEMO_SelectMode select_mode) { if(select_mode == AUDIO_SELECT_MENU) { LCD_LOG_UpdateDisplay(); AudioDemo.state = AUDIO_DEMO_IDLE; } else if(select_mode == AUDIO_PLAYBACK_CONTROL) { LCD_ClearTextZone(); } }
/** * @brief EXTI line detection callbacks. * @param GPIO_Pin: Specifies the pins connected EXTI line * @retval None */ void HAL_GPIO_EXTI_Callback(uint16_t GPIO_Pin) { static JOYState_TypeDef JoyState = JOY_NONE; static uint32_t debounce_time = 0; if(GPIO_Pin == GPIO_PIN_8) { /* Get the Joystick State */ JoyState = BSP_JOY_GetState(); CDC_DEMO_ProbeKey(JoyState); /* Clear joystick interrupt pending bits */ BSP_IO_ITClear(); if((CdcSelectMode == CDC_SELECT_MENU) && (CdcDemo.state != CDC_DEMO_RECEIVE)) { switch(JoyState) { case JOY_LEFT: LCD_LOG_ScrollBack(); break; case JOY_RIGHT: LCD_LOG_ScrollForward(); break; default: break; } } } if(CdcDemo.state == CDC_DEMO_CONFIGURATION) { if(GPIO_Pin == KEY_BUTTON_PIN) { /* Prevent debounce effect for user key */ if((HAL_GetTick() - debounce_time) > 50) { debounce_time = HAL_GetTick(); } else { return; } BSP_LCD_SetBackColor(LCD_COLOR_BLACK); /* Change the selection type */ if(CdcSelectMode == CDC_SELECT_MENU) { CDC_ChangeSelectMode(CDC_SELECT_CONFIG); } else if(CdcSelectMode == CDC_SELECT_CONFIG) { CDC_ChangeSelectMode(CDC_SELECT_MENU); } else if(CdcSelectMode == CDC_SELECT_FILE) { CDC_ChangeSelectMode(CDC_SELECT_FILE); } } } if(CdcDemo.state == CDC_DEMO_SEND) { if(GPIO_Pin == KEY_BUTTON_PIN) { /* Prevent debounce effect for user key */ if((HAL_GetTick() - debounce_time) > 50) { debounce_time = HAL_GetTick(); } else { return; } if(CdcDemo.Send_state == CDC_SEND_SELECT_FILE) { BSP_LCD_SetBackColor(LCD_COLOR_BLACK); /* Change the selection type */ if(CdcSelectMode == CDC_SELECT_MENU) { CDC_ChangeSelectMode(CDC_SELECT_FILE); } else if(CdcSelectMode == CDC_SELECT_FILE) { LCD_ClearTextZone(); LCD_LOG_UpdateDisplay(); CDC_ChangeSelectMode(CDC_SELECT_MENU); CdcDemo.Send_state = CDC_SEND_WAIT; } } } } }
/** * @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); } }