/** * @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) { AUDIO_SelectItem(AUDIO_main_menu, 0x00); LCD_LOG_UpdateDisplay(); AudioDemo.state = AUDIO_DEMO_IDLE; AUDIO_PLAYER_Stop(); } else if(select_mode == AUDIO_PLAYBACK_CONTROL) { LCD_ClearTextZone(); AUDIO_SelectItem(AUDIO_main_menu, 0xFF); } AudioSelectMode = select_mode; AudioDemo.select = 0; }
/** * @brief Handles CDC Send Menu. * @param None * @retval None */ void CDC_Handle_Send_Menu(void) { if(CdcSelectMode == CDC_SELECT_MENU) { switch(CdcDemo.Send_state) { case CDC_SEND_IDLE: CdcDemo.Send_state = CDC_SEND_WAIT; CDC_SelectItem (DEMO_SEND_menu, 0); CdcDemo.select = 0; PrevPos = 0; USBH_CDC_Stop(&hUSBHost); break; case CDC_SEND_WAIT: if(CdcDemo.select != PrevSelect) { PrevSelect = CdcDemo.select; CDC_SelectItem (DEMO_SEND_menu, CdcDemo.select & 0x7F); /* Handle select item */ if(CdcDemo.select & 0x80) { switch(CdcDemo.select & 0x7F) { case 0: memset(CDC_TX_Buffer, 0x5A, TX_BUFF_SIZE); LCD_DbgLog("Sending data ...\n"); USBH_CDC_Transmit(&hUSBHost, CDC_TX_Buffer, TX_BUFF_SIZE); use_file = 0; break; case 1: if(FileList.ptr > 0) { SendFileMenu_Init(); if(FilePos >= 9) { CDC_ShowFiles(FileOffset, 9); } else { CDC_ShowFiles(FileOffset, FilePos); } CdcDemo.Send_state = CDC_SEND_SELECT_FILE; } else { LCD_ErrLog("No file on the microSD\n"); } break; case 2: /* Return */ ReturnFromSendMenu(); break; default: break; } } } break; default: break; } } else if(CdcSelectMode == CDC_SELECT_FILE) { switch(CdcDemo.Send_state) { case CDC_SEND_SELECT_FILE: if(CdcDemo.select & 0x80) { CdcDemo.select &= 0x7F; CdcDemo.Send_state = CDC_SEND_TRANSMIT_FILE; } break; case CDC_SEND_TRANSMIT_FILE: LCD_DbgLog("Sending file ...\n"); use_file = 1; CDC_SendFile(FilePos); CDC_ChangeSelectMode(CDC_SELECT_MENU); LCD_LOG_UpdateDisplay(); CdcDemo.Send_state = CDC_SEND_WAIT; break; default: break; } if(FilePos != PrevPos) { if(((FilePos > 9)&&(FilePos > PrevPos)) || ((FilePos >= 9)&&(FilePos < PrevPos))) { if(FilePos > PrevPos) { FileOffset++; } else { FileOffset--; } CDC_ShowFiles(FileOffset, 9); } else { CDC_ShowFiles(0, FilePos); } PrevPos = FilePos; } } CdcDemo.select &= 0x7F; }
/** * @brief Display previous text frame * @param None * @retval Status */ ErrorStatus LCD_LOG_ScrollBack(void) { if(LCD_ScrollActive == DISABLE) { LCD_CacheBuffer_yptr_bottom_bak = LCD_CacheBuffer_yptr_bottom; LCD_CacheBuffer_yptr_top_bak = LCD_CacheBuffer_yptr_top; if(LCD_CacheBuffer_yptr_bottom > LCD_CacheBuffer_yptr_top) { if ((LCD_CacheBuffer_yptr_bottom - LCD_CacheBuffer_yptr_top) <= YWINDOW_SIZE) { LCD_Lock = DISABLE; return ERROR; } } LCD_ScrollActive = ENABLE; if((LCD_CacheBuffer_yptr_bottom > LCD_CacheBuffer_yptr_top)&& (LCD_Scrolled == DISABLE )) { LCD_CacheBuffer_yptr_bottom--; LCD_Scrolled = ENABLE; } } if(LCD_ScrollActive == ENABLE) { LCD_Lock = ENABLE; if(LCD_CacheBuffer_yptr_bottom > LCD_CacheBuffer_yptr_top) { if((LCD_CacheBuffer_yptr_bottom - LCD_CacheBuffer_yptr_top) < YWINDOW_SIZE ) { LCD_Lock = DISABLE; return ERROR; } LCD_CacheBuffer_yptr_bottom --; } else if(LCD_CacheBuffer_yptr_bottom <= LCD_CacheBuffer_yptr_top) { if((LCD_CACHE_DEPTH - LCD_CacheBuffer_yptr_top + LCD_CacheBuffer_yptr_bottom) < YWINDOW_SIZE) { LCD_Lock = DISABLE; return ERROR; } LCD_CacheBuffer_yptr_bottom --; if(LCD_CacheBuffer_yptr_bottom == 0xFFFF) { LCD_CacheBuffer_yptr_bottom = LCD_CACHE_DEPTH - 2; } } LCD_ScrollBackStep++; LCD_LOG_UpdateDisplay(); LCD_Lock = DISABLE; } return SUCCESS; }
/** * @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; } } } } }