/** * @brief Handles CDC Receive Menu. * @param None * @retval None */ void CDC_Handle_Receive_Menu(void) { switch(CdcDemo.Receive_state) { case CDC_RECEIVE_IDLE: /* Start Reception */ LCD_LOG_ClearTextZone(); CdcDemo.Receive_state = CDC_RECEIVE_WAIT; USBH_CDC_Stop(&hUSBHost); LCD_DbgLog("Receiving data ...\n"); xPos = 0; yLinePos = 5; memset(CDC_RX_Buffer, 0, RX_BUFF_SIZE); USBH_CDC_Receive(&hUSBHost, CDC_RX_Buffer, RX_BUFF_SIZE); BSP_LCD_ClearStringLine(19); BSP_LCD_SetTextColor(LCD_COLOR_GREEN); BSP_LCD_DisplayStringAtLine(19, (uint8_t *)"Press User button to start sending data "); break; case CDC_RECEIVE_WAIT: if((BSP_PB_GetState(BUTTON_KEY) == SET) && (Appli_state != APPLICATION_DISCONNECT)) { CdcDemo.state = CDC_DEMO_WAIT; CdcDemo.Receive_state = CDC_RECEIVE_IDLE; } break; default: break; } }
/** * @brief LCD Log demo * @param None * @retval None */ void Log_demo(void) { JOYState_TypeDef JoyState = JOY_NONE; uint8_t i = 0; /* Wait For User inputs */ while(CheckForUserInput() == 0); BSP_JOY_Init(JOY_MODE_GPIO); /* Initialize LCD Log module */ LCD_LOG_Init(); /* Show Header and Footer texts */ LCD_LOG_SetHeader((uint8_t *)"Log Example"); LCD_LOG_SetFooter((uint8_t *)"Use Joystick to scroll up/down"); /* Output User logs */ for (i = 0; i < 10; i++) { LCD_UsrLog ("This is Line %d \n", i); } HAL_Delay(2000); /* Clear Old logs */ LCD_LOG_ClearTextZone(); /* Output new user logs */ for (i = 0; i < 30; i++) { LCD_UsrLog ("This is Line %d \n", i); } /* Check for joystick user input for scroll (back and forward) */ while (1) { JoyState = BSP_JOY_GetState(); switch(JoyState) { case JOY_UP: LCD_LOG_ScrollBack(); break; case JOY_DOWN: LCD_LOG_ScrollForward(); break; default: break; } if(CheckForUserInput() > 0) { return; } HAL_Delay (10); } }
/** * @brief Handles Keyboard Menu. * @param None * @retval None */ void HID_KeyboardMenuProcess(void) { if(hid_demo.keyboard_state == HID_KEYBOARD_START) { LCD_LOG_ClearTextZone(); BSP_LCD_ClearStringLine(19); USBH_HID_KeybdInit(&hUSBHost); USR_KEYBRD_Init(); } }
/** * @brief USBH_DisconnectEvent * Device disconnect event * @param None * @retval Staus */ void USBH_USR_DeviceDisconnected (void) { LCD_LOG_ClearTextZone(); LCD_DisplayStringLine( LCD_PIXEL_HEIGHT - 42, " "); LCD_DisplayStringLine( LCD_PIXEL_HEIGHT - 30, " "); /* Set default screen color*/ LCD_ErrLog((void *)MSG_DEV_DISCONNECTED); }
/** * @brief Manages Mouse Menu Process. * @param None * @retval None */ void HID_MouseMenuProcess(void) { if(hid_demo.mouse_state == HID_MOUSE_START) { LCD_LOG_ClearTextZone(); BSP_LCD_ClearStringLine(19); USBH_HID_MouseInit(&hUSBHost); USR_MOUSE_Init(); HID_MOUSE_UpdatePosition(0,0); } }
/** * @brief Init Keyboard window. * @param None * @retval None */ static void USR_KEYBRD_Init(void) { LCD_LOG_ClearTextZone(); BSP_LCD_SetTextColor(LCD_COLOR_YELLOW); BSP_LCD_DisplayStringAtLine(4, (uint8_t *)"Use Keyboard to tape characters: "); BSP_LCD_SetTextColor(LCD_COLOR_WHITE); KeybrdCharXpos = KYBRD_FIRST_LINE; KeybrdCharYpos = KYBRD_FIRST_COLUMN; }
/** * @brief Manages CDC Menu Process. * @param None * @retval None */ void CDC_MenuProcess(void) { switch(CdcDemo.state) { case CDC_DEMO_WAIT: if(Appli_state == APPLICATION_READY) { BSP_LCD_SetTextColor(LCD_COLOR_GREEN); BSP_LCD_DisplayStringAtLine(19, (uint8_t *)"Press User button to start sending data "); /* Wait for User Input */ while((BSP_PB_GetState(BUTTON_TAMPER) != SET) && (Appli_state != APPLICATION_DISCONNECT)) { } CdcDemo.state = CDC_DEMO_SEND; /* Prevent debounce effect for user key */ HAL_Delay(400); BSP_LCD_ClearStringLine(19); } break; case CDC_DEMO_SEND: /* Read and Write File Here */ if(Appli_state == APPLICATION_READY) { CDC_Handle_Send_Menu(); } break; case CDC_DEMO_RECEIVE: if(Appli_state == APPLICATION_READY) { CDC_Handle_Receive_Menu(); } break; default: break; } if(Appli_state == APPLICATION_DISCONNECT) { Appli_state = APPLICATION_IDLE; LCD_LOG_ClearTextZone(); LCD_ErrLog("CDC device disconnected!\n"); CdcDemo.state = CDC_DEMO_WAIT; CdcDemo.Receive_state = CDC_RECEIVE_IDLE; CdcDemo.Send_state = CDC_SEND_IDLE; CdcDemo.select = 0; } }
/** * @brief Manages Mouse Menu Process. * @param None * @retval None */ void HID_MouseMenuProcess(void) { switch(hid_demo.mouse_state) { case HID_MOUSE_IDLE: hid_demo.mouse_state = HID_MOUSE_START; HID_SelectItem(DEMO_MOUSE_menu, 0); hid_demo.select = 0; prev_select = 0; break; case HID_MOUSE_WAIT: if(hid_demo.select != prev_select) { prev_select = hid_demo.select ; HID_SelectItem(DEMO_MOUSE_menu, hid_demo.select & 0x7F); /* Handle select item */ if(hid_demo.select & 0x80) { switch(hid_demo.select & 0x7F) { case 0: hid_demo.mouse_state = HID_MOUSE_START; break; case 1: /* Return */ LCD_LOG_ClearTextZone(); hid_demo.state = HID_DEMO_REENUMERATE; hid_demo.select = 0; break; default: break; } } } break; case HID_MOUSE_START: USBH_HID_MouseInit(&hUSBHost); USR_MOUSE_Init(); hid_demo.mouse_state = HID_MOUSE_WAIT; HID_MOUSE_UpdatePosition(0,0); break; default: break; } hid_demo.select &= 0x7F; }
/** * @brief Manages Mouse Menu Process. * @param None * @retval None */ void HID_MouseMenuProcess(void) { switch(demo.mouse_state) { case HID_MOUSE_IDLE: demo.mouse_state = HID_MOUSE_START; Demo_SelectItem(DEMO_MOUSE_menu, 0); demo.select = 0; break; case HID_MOUSE_WAIT: if(demo.select != prev_select) { prev_select = demo.select; Demo_SelectItem(DEMO_MOUSE_menu, demo.select & 0x7F); /* Handle select item */ if(demo.select & 0x80) { demo.select &= 0x7F; switch(demo.select) { case 0: demo.mouse_state = HID_MOUSE_START; break; case 1: /* Return */ LCD_LOG_ClearTextZone(); demo.state = DEMO_IDLE; LCD_UsrLogY("> HID application closed.\n"); demo.select = 0; break; default: break; } } } break; case HID_MOUSE_START: USR_MOUSE_Init(); demo.mouse_state = HID_MOUSE_WAIT; HID_MOUSE_UpdatePosition(0,0); break; default: break; } }
/** * @brief Handles Keyboard Menu. * @param None * @retval None */ void HID_KeyboardMenuProcess(void) { switch(hid_demo.keyboard_state) { case HID_KEYBOARD_IDLE: hid_demo.keyboard_state = HID_KEYBOARD_START; HID_SelectItem(DEMO_KEYBOARD_menu, 0); hid_demo.select = 0; prev_select = 0; break; case HID_KEYBOARD_WAIT: if(hid_demo.select != prev_select) { prev_select = hid_demo.select; HID_SelectItem(DEMO_KEYBOARD_menu, hid_demo.select & 0x7F); /* Handle select item */ if(hid_demo.select & 0x80) { switch(hid_demo.select& 0x7F) { case 0: hid_demo.keyboard_state = HID_KEYBOARD_START; break; case 1: /* Return */ LCD_LOG_ClearTextZone(); hid_demo.state = HID_DEMO_REENUMERATE; hid_demo.select = 0; break; default: break; } } } break; case HID_KEYBOARD_START: USBH_HID_KeybdInit(&hUSBHost); USR_KEYBRD_Init(); hid_demo.keyboard_state = HID_KEYBOARD_WAIT; break; default: break; } hid_demo.select &= 0x7F; }
/** * @brief Handle Keyboard * @param None * @retval None */ void HID_KeyboardMenuProcess(void) { switch(demo.keyboard_state) { case HID_KEYBOARD_IDLE: demo.keyboard_state = HID_KEYBOARD_START; Demo_SelectItem(DEMO_KEYBOARD_menu, 0); demo.select = 0; break; case HID_KEYBOARD_WAIT: if(demo.select != prev_select) { prev_select = demo.select; Demo_SelectItem(DEMO_KEYBOARD_menu, demo.select & 0x7F); /* Handle select item */ if(demo.select & 0x80) { demo.select &= 0x7F; switch(demo.select) { case 0: demo.keyboard_state = HID_KEYBOARD_START; break; case 1: /* return */ LCD_LOG_ClearTextZone(); demo.state = DEMO_IDLE; LCD_UsrLogY("> HID application closed.\n"); demo.select = 0; break; default: break; } } } break; case HID_KEYBOARD_START: USR_KEYBRD_Init(); demo.keyboard_state = HID_KEYBOARD_WAIT; break; default: break; } }
/** * @brief USBH_DisconnectEvent * Device disconnect event * @param None * @retval None */ void USBH_USR_DeviceDisconnected (void) { LCD_SetBackColor(Black); LCD_SetTextColor(Black); LCD_LOG_ClearTextZone(); LCD_DrawRect(MOUSE_WINDOW_X, MOUSE_WINDOW_Y, MOUSE_WINDOW_HEIGHT, MOUSE_WINDOW_WIDTH); LCD_SetTextColor(White); LCD_DisplayStringLine( LCD_PIXEL_HEIGHT - 42, " "); LCD_DisplayStringLine( LCD_PIXEL_HEIGHT - 30, " "); LCD_ErrLog((void *)MSG_DEV_DISCONNECTED); }
/** * @brief Init Mouse window. * @param None * @retval None */ static void USR_MOUSE_Init(void) { LCD_LOG_ClearTextZone(); BSP_LCD_SetTextColor(LCD_COLOR_YELLOW); BSP_LCD_DisplayStringAtLine(4, (uint8_t *)"USB HID Host Mouse Demo... "); BSP_LCD_SetTextColor(LCD_LOG_DEFAULT_COLOR); /* Display Mouse Window */ BSP_LCD_DrawRect(MOUSE_WINDOW_X, MOUSE_WINDOW_Y, MOUSE_WINDOW_WIDTH, MOUSE_WINDOW_HEIGHT); HID_MOUSE_ButtonReleased(0); HID_MOUSE_ButtonReleased(1); HID_MOUSE_ButtonReleased(2); BSP_LCD_SetTextColor(LCD_COLOR_GREEN); BSP_LCD_SetBackColor(LCD_COLOR_BLACK); HID_MOUSE_UpdatePosition(0,0); }
/** * @brief LCD Log demo * @param None * @retval None */ void Log_demo(void) { uint8_t i = 0; /* Initialize LCD Log module */ LCD_LOG_Init(); /* Show Header and Footer texts */ LCD_LOG_SetHeader((uint8_t*)"This is the header"); LCD_LOG_SetFooter((uint8_t*)"This is the footer"); /* Wait For User inputs */ while(CheckForUserInput() == 0); /* Output User logs */ for (i = 0; i < 10; i++) { LCD_UsrLog ("This is Line %d \n", i); HAL_Delay(100); } HAL_Delay(1500); /* Clear Old logs */ LCD_LOG_ClearTextZone(); /* Output new user logs */ for (i = 0; i < 30; i++) { LCD_UsrLog ("This is Line %d \n", i); HAL_Delay(100); } /* Check for joystick user input for scroll (back and forward) */ while (1) { if(CheckForUserInput() > 0) { return; } HAL_Delay (10); } }
/** * @brief LCD Log demo * @param None * @retval None */ void Log_demo(void) { uint8_t i = 0; /* Wait For User inputs */ while(CheckForUserInput() == 0); BSP_JOY_Init(JOY_MODE_GPIO); /* Initialize LCD Log module */ LCD_LOG_Init(); /* Show Header and Footer texts */ LCD_LOG_SetHeader((uint8_t *)"Log Example"); /* Output User logs */ for (i = 0; i < 10; i++) { LCD_UsrLog ("This is Line %d \n", i); } HAL_Delay(2000); /* Clear Old logs */ LCD_LOG_ClearTextZone(); /* Output new user logs */ for (i = 0; i < 30; i++) { LCD_UsrLog ("This is Line %d \n", i); } while (1) { if(CheckForUserInput() > 0) { return; } HAL_Delay (10); } }
/** * @brief Handles CDC Send Menu. * @param None * @retval None */ void CDC_Handle_Send_Menu(void) { switch(CdcDemo.Send_state) { case CDC_SEND_IDLE: CdcDemo.Send_state = CDC_SEND_WAIT; CDC_SendState = 0; USBH_CDC_Stop(&hUSBHost); memset(CDC_TX_Buffer, 0x5A, TX_BUFF_SIZE); LCD_LOG_ClearTextZone(); LCD_DbgLog("Sending data ...\n"); USBH_CDC_Transmit(&hUSBHost, CDC_TX_Buffer, TX_BUFF_SIZE); break; case CDC_SEND_WAIT: if(CDC_SendState == 1) /* Data sent */ { BSP_LCD_ClearStringLine(19); BSP_LCD_SetTextColor(LCD_COLOR_GREEN); BSP_LCD_DisplayStringAtLine(19, (uint8_t *)"Press User button to start receiving data "); /* Wait for User Input */ while((BSP_PB_GetState(BUTTON_KEY) != SET) && (Appli_state != APPLICATION_DISCONNECT)) { } HAL_Delay(400); CdcDemo.state = CDC_DEMO_RECEIVE; CdcDemo.Send_state = CDC_SEND_IDLE; } break; default: break; } }
/** * @brief User task * @param pvParameters not used * @retval None */ void HID_MenuThread(void const *argument) { for(;;) { if(osSemaphoreWait(MenuEvent , osWaitForever) == osOK) { switch(hid_demo.state) { case HID_DEMO_IDLE: hid_demo.state = HID_DEMO_START; osSemaphoreRelease(MenuEvent); break; case HID_DEMO_START: if(Appli_state == APPLICATION_READY) { /* Wait for User Input */ if(ButtonPressed == 1) { ButtonPressed = 0; if(USBH_HID_GetDeviceType(&hUSBHost) == HID_KEYBOARD) { hid_demo.keyboard_state = HID_KEYBOARD_START; hid_demo.state = HID_DEMO_KEYBOARD; HID_KeyboardMenuProcess(); } else if(USBH_HID_GetDeviceType(&hUSBHost) == HID_MOUSE) { hid_demo.mouse_state = HID_MOUSE_START; hid_demo.state = HID_DEMO_MOUSE; HID_MouseMenuProcess(); } else { LCD_ErrLog("No supported HID device!\n"); hid_demo.state = HID_DEMO_IDLE; } } osSemaphoreRelease(MenuEvent); } break; case HID_DEMO_MOUSE: if(Appli_state == APPLICATION_READY) { USBH_MouseDemo(&hUSBHost); } break; case HID_DEMO_KEYBOARD: if(Appli_state == APPLICATION_READY) { USBH_KeybdDemo(&hUSBHost); } break; default: break; } if(Appli_state == APPLICATION_DISCONNECT) { Appli_state = APPLICATION_IDLE; LCD_LOG_ClearTextZone(); BSP_LCD_ClearStringLine(19); LCD_ErrLog("HID device disconnected!\n"); hid_demo.state = HID_DEMO_IDLE; } } } }
/** * @brief Processes Keyboard data. * @param data: Keyboard data to be displayed * @retval None */ void USR_KEYBRD_ProcessData(uint8_t data) { if(data == '\n') { KeybrdCharYpos = KYBRD_FIRST_COLUMN; /* Increment char X position */ KeybrdCharXpos += SMALL_FONT_LINE_WIDTH; if(KeybrdCharXpos > KYBRD_LAST_LINE) { LCD_LOG_ClearTextZone(); KeybrdCharXpos = KYBRD_FIRST_LINE; KeybrdCharYpos = KYBRD_FIRST_COLUMN; } } else if(data == '\r') { /* Manage deletion of character and upadte cursor location */ if(KeybrdCharYpos == KYBRD_FIRST_COLUMN) { /* First character of first line to be deleted */ if(KeybrdCharXpos == KYBRD_FIRST_LINE) { KeybrdCharYpos = KYBRD_FIRST_COLUMN; } else { KeybrdCharXpos += SMALL_FONT_LINE_WIDTH; KeybrdCharYpos = (KYBRD_LAST_COLUMN + SMALL_FONT_COLUMN_WIDTH); } } else { KeybrdCharYpos += SMALL_FONT_COLUMN_WIDTH; } BSP_LCD_DisplayChar(KeybrdCharYpos, KeybrdCharXpos, ' '); } else { /* Update the cursor position on LCD */ BSP_LCD_DisplayChar(KeybrdCharYpos, KeybrdCharXpos, data); /* Increment char Y position */ KeybrdCharYpos += SMALL_FONT_COLUMN_WIDTH; /* Check if the Y position has reached the last column */ if(KeybrdCharYpos == KYBRD_LAST_COLUMN) { KeybrdCharYpos = KYBRD_FIRST_COLUMN; /* Increment char X position */ KeybrdCharXpos += SMALL_FONT_LINE_WIDTH; } if(KeybrdCharXpos > KYBRD_LAST_LINE) { LCD_LOG_ClearTextZone(); KeybrdCharXpos = KYBRD_FIRST_LINE; /* Start New Display of the cursor position on LCD */ BSP_LCD_DisplayChar(KeybrdCharYpos,KeybrdCharXpos, data); } } }
/** * @brief Manages HID Menu Process. * @param None * @retval None */ void HID_MenuProcess(void) { switch(hid_demo.state) { case HID_DEMO_START: if(Appli_state == APPLICATION_READY) { if(USBH_HID_GetDeviceType(&hUSBHost) == HID_KEYBOARD) { hid_demo.keyboard_state = HID_KEYBOARD_IDLE; hid_demo.state = HID_DEMO_KEYBOARD; BSP_LCD_SetTextColor(LCD_COLOR_GREEN); BSP_LCD_DisplayStringAtLine(19, (uint8_t *)"Press User button to start"); /* Wait for User Input */ while((BSP_PB_GetState(BUTTON_WAKEUP) != SET) && (Appli_state != APPLICATION_DISCONNECT)) { } BSP_LCD_ClearStringLine(19); HID_KeyboardMenuProcess(); } else if(USBH_HID_GetDeviceType(&hUSBHost) == HID_MOUSE) { hid_demo.mouse_state = HID_MOUSE_IDLE; hid_demo.state = HID_DEMO_MOUSE; BSP_LCD_SetTextColor(LCD_COLOR_GREEN); BSP_LCD_DisplayStringAtLine(19, (uint8_t *)"Press User button to start"); /* Wait for User Input */ while((BSP_PB_GetState(BUTTON_WAKEUP) != SET) && (Appli_state != APPLICATION_DISCONNECT)) { } BSP_LCD_ClearStringLine(19); HID_MouseMenuProcess(); } else { LCD_ErrLog("No supported HID device!\n"); hid_demo.state = HID_DEMO_START; } } break; case HID_DEMO_MOUSE: if(Appli_state == APPLICATION_READY) { USBH_MouseDemo(&hUSBHost); } break; case HID_DEMO_KEYBOARD: if(Appli_state == APPLICATION_READY) { USBH_KeybdDemo(&hUSBHost); } break; default: break; } if(Appli_state == APPLICATION_DISCONNECT) { Appli_state = APPLICATION_IDLE; LCD_LOG_ClearTextZone(); LCD_ErrLog("HID device disconnected!\n"); hid_demo.state = HID_DEMO_START; hid_demo.select = 0; } }
/** * @brief User task * @param pvParameters not used * @retval None */ void HID_MenuThread(void const *argument) { for(;;) { if(osSemaphoreWait(MenuEvent , osWaitForever) == osOK) { switch(hid_demo.state) { case HID_DEMO_IDLE: HID_SelectItem(DEMO_HID_menu, 0); hid_demo.state = HID_DEMO_WAIT; hid_demo.select = 0; osSemaphoreRelease(MenuEvent); break; case HID_DEMO_WAIT: if(hid_demo.select != prev_select) { prev_select = hid_demo.select; HID_SelectItem(DEMO_HID_menu, hid_demo.select & 0x7F); /* Handle select item */ if(hid_demo.select & 0x80) { switch(hid_demo.select & 0x7F) { case 0: hid_demo.state = HID_DEMO_START; osSemaphoreRelease(MenuEvent); break; case 1: hid_demo.state = HID_DEMO_REENUMERATE; osSemaphoreRelease(MenuEvent); break; default: break; } } } break; case HID_DEMO_START: if(Appli_state == APPLICATION_READY) { if(USBH_HID_GetDeviceType(&hUSBHost) == HID_KEYBOARD) { hid_demo.keyboard_state = HID_KEYBOARD_IDLE; hid_demo.state = HID_DEMO_KEYBOARD; } else if(USBH_HID_GetDeviceType(&hUSBHost) == HID_MOUSE) { hid_demo.mouse_state = HID_MOUSE_IDLE; hid_demo.state = HID_DEMO_MOUSE; } } else { LCD_ErrLog("No supported HID device!\n"); hid_demo.state = HID_DEMO_WAIT; } osSemaphoreRelease(MenuEvent); break; case HID_DEMO_REENUMERATE: /* Force MSC Device to re-enumerate */ USBH_ReEnumerate(&hUSBHost); hid_demo.state = HID_DEMO_WAIT; osSemaphoreRelease(MenuEvent); break; case HID_DEMO_MOUSE: if(Appli_state == APPLICATION_READY) { HID_MouseMenuProcess(); USBH_MouseDemo(&hUSBHost); } break; case HID_DEMO_KEYBOARD: if(Appli_state == APPLICATION_READY) { HID_KeyboardMenuProcess(); USBH_KeybdDemo(&hUSBHost); } break; default: break; } if(Appli_state == APPLICATION_DISCONNECT) { Appli_state = APPLICATION_IDLE; LCD_LOG_ClearTextZone(); LCD_ErrLog("HID device disconnected!\n"); hid_demo.state = HID_DEMO_IDLE; hid_demo.select = 0; } hid_demo.select &= 0x7F; } } }
/** * @brief LCD Log demo * @param None * @retval None */ void Log_demo(void) { TS_ActionTypeDef ts_action = TS_ACT_NONE; uint8_t ts_status = TS_OK; uint8_t i = 0; /* Wait For User inputs */ while (CheckForUserInput() == 0); 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) */ /* Initialize LCD Log module */ LCD_LOG_Init(); /* Show Header and Footer texts */ LCD_LOG_SetHeader((uint8_t *)"Log Example"); LCD_LOG_SetFooter((uint8_t *)"Use touch up/down to scroll"); /* Output User logs */ for (i = 0; i < 10; i++) { LCD_UsrLog ("This is Line %d \n", i); } HAL_Delay(1000); /* Clear Old logs */ LCD_LOG_ClearTextZone(); /* Output new user logs */ for (i = 0; i < 30; i++) { LCD_UsrLog ("This is Line %d \n", i); } 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(32); BSP_LCD_SetFont(&Font12); } /* Check for joystick user input for scroll (back and forward) */ while (1) { ts_action = (TS_ActionTypeDef) TouchScreen_GetTouchPosition(); switch (ts_action) { case TS_ACT_SCROLL_UP: LCD_LOG_ScrollBack(); break; case TS_ACT_SCROLL_DOWN: LCD_LOG_ScrollForward(); break; default: break; } if (CheckForUserInput() > 0) { return; } HAL_Delay (10); } }
/** * @brief Manages MSC Menu Process. * @param None * @retval None */ void MSC_MenuProcess(void) { switch(msc_demo.state) { case MSC_DEMO_START: if(Appli_state == APPLICATION_READY) { BSP_LCD_SetTextColor(LCD_COLOR_GREEN); BSP_LCD_DisplayStringAtLine(19, (uint8_t *)"Press User button to start read and write operations"); /* Wait for User Input */ while((BSP_PB_GetState(BUTTON_WAKEUP) != SET) && (Appli_state != APPLICATION_DISCONNECT)) { } msc_demo.state = MSC_DEMO_FILE_OPERATIONS; /* Prevent debounce effect for user key */ HAL_Delay(400); BSP_LCD_ClearStringLine(19); } break; case MSC_DEMO_FILE_OPERATIONS: /* Read and Write File Here */ if(Appli_state == APPLICATION_READY) { MSC_File_Operations(); BSP_LCD_SetTextColor(LCD_COLOR_GREEN); BSP_LCD_DisplayStringAtLine(19, (uint8_t *)"Press User button to display disk content"); /* Wait for User Input */ while((BSP_PB_GetState(BUTTON_WAKEUP) != SET) && (Appli_state != APPLICATION_DISCONNECT)) { } msc_demo.state = MSC_DEMO_EXPLORER; /* Prevent debounce effect for user key */ HAL_Delay(400); BSP_LCD_ClearStringLine(19); } break; case MSC_DEMO_EXPLORER: /* Display disk content */ if(Appli_state == APPLICATION_READY) { Explore_Disk("0:/", 1); msc_demo.state = MSC_DEMO_START; /* Prevent debounce effect for user key */ HAL_Delay(400); } break; default: break; } if(Appli_state == APPLICATION_DISCONNECT) { Appli_state = APPLICATION_IDLE; LCD_LOG_ClearTextZone(); LCD_ErrLog("MSC device disconnected!\n"); msc_demo.state = MSC_DEMO_START; msc_demo.select = 0; } }
/** * @brief Manages CDC Menu Process. * @param None * @retval None */ void CDC_MenuProcess(void) { switch(CdcDemo.state) { case CDC_DEMO_IDLE: CDC_SelectItem(CDC_main_menu, 0); CdcDemo.state = CDC_DEMO_WAIT; CdcDemo.select = 0; break; case CDC_DEMO_WAIT: if(CdcDemo.select != PrevSelect) { PrevSelect = CdcDemo.select; CDC_SelectItem(CDC_main_menu, CdcDemo.select & 0x7F); /* Handle select item */ if(CdcDemo.select & 0x80) { switch(CdcDemo.select & 0x7F) { case 0: CdcDemo.state = CDC_DEMO_SEND; CdcDemo.Send_state = CDC_SEND_IDLE; break; case 1: CdcDemo.state = CDC_DEMO_RECEIVE; CdcDemo.Receive_state = CDC_RECEIVE_IDLE; break; case 2: CdcDemo.state = CDC_DEMO_CONFIGURATION; CdcDemo.Configuration_state = CDC_CONFIGURATION_IDLE; break; case 3: CdcDemo.state = CDC_DEMO_REENUMERATE; break; default: break; } } } break; case CDC_DEMO_SEND: if(Appli_state == APPLICATION_READY) { CDC_Handle_Send_Menu(); } else { CdcDemo.state = CDC_DEMO_WAIT; } break; case CDC_DEMO_RECEIVE: if(Appli_state == APPLICATION_READY) { CDC_Handle_Receive_Menu(); } else { CdcDemo.state = CDC_DEMO_WAIT; } break; case CDC_DEMO_CONFIGURATION: if(Appli_state == APPLICATION_READY) { CDC_Handle_Configuration_Menu(); } else { CdcDemo.state = CDC_DEMO_WAIT; } break; case CDC_DEMO_REENUMERATE: /* Force MSC Device to re-enumerate */ USBH_ReEnumerate(&hUSBHost); CdcDemo.state = CDC_DEMO_WAIT; break; default: break; } CdcDemo.select &= 0x7F; if(Appli_state == APPLICATION_DISCONNECT) { Appli_state = APPLICATION_IDLE; LCD_LOG_ClearTextZone(); LCD_ErrLog("CDC device disconnected!\n"); CDC_ChangeSelectMode(CDC_SELECT_MENU); CdcDemo.state = CDC_DEMO_IDLE; CdcDemo.select = 0; } }
/** * @brief Manages DUAL Menu Process. * @param None * @retval None */ void DUAL_MenuProcess(void) { switch(demo.state) { case DEMO_IDLE: Demo_SelectItem(DEMO_main_menu, 0); LCD_UsrLog("Select an operation to continue.\n"); demo.state = DEMO_WAIT; demo.select = 0; break; case DEMO_WAIT: if(demo.select != prev_select) { prev_select = demo.select; Demo_SelectItem(DEMO_main_menu, demo.select & 0x7F); /* Handle select item */ if(demo.select & 0x80) { demo.select &= 0x7F; switch(demo.select) { case 0: demo.state = DEMO_MSC_START; break; case 1: demo.state = DEMO_HID_START; break; case 2: demo.state = DEMO_MSC_REENUMERATE; break; case 3: demo.state = DEMO_HID_REENUMERATE; break; default: break; } } } break; case DEMO_MSC_START: if(Appli_HS_state == APPLICATION_HS_READY) { /* If HS device connected*/ demo.state = DEMO_MSC; demo.msc_state = APPLI_MSC_IDLE; } else { LCD_ErrLog("No Mass storage device connected.\n"); demo.state = DEMO_WAIT; } break; case DEMO_HID_START: if(Appli_FS_state == APPLICATION_FS_READY) { /*if FS device connected*/ demo.state = DEMO_HID; demo.hid_state = APPLI_HID_IDLE; } else { LCD_ErrLog("No HID device connected.\n"); demo.state = DEMO_WAIT; } break; case DEMO_MSC: MSC_MenuProcess(); break; case DEMO_HID: HID_MenuProcess(); break; case DEMO_MSC_REENUMERATE: /* Re-Enumeration MSC */ LCD_DbgLog("Starting Enumeration MSC...."); LCD_DbgLog("\n"); USBH_ReEnumerate(&hUSBHost_HS); demo.state = DEMO_WAIT; break; case DEMO_HID_REENUMERATE: /* Re-Enumeration HID */ LCD_DbgLog("Starting Enumeration HID...."); LCD_DbgLog("\n"); USBH_ReEnumerate(&hUSBHost_FS); demo.state = DEMO_WAIT; break; default: break; } if(Appli_FS_state == APPLICATION_FS_DISCONNECT) { Appli_FS_state = APPLICATION_IDLE; LCD_LOG_ClearTextZone(); LCD_ErrLog("device FS disconnected!\n"); demo.state = DEMO_IDLE; demo.select = 0; } if(Appli_HS_state == APPLICATION_HS_DISCONNECT) { Appli_HS_state = APPLICATION_IDLE; LCD_LOG_ClearTextZone(); LCD_ErrLog("device HS disconnected!\n"); demo.state = DEMO_IDLE; demo.select = 0; } }