/** * @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 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 Menu Init * @param None * @retval None */ void DUAL_MenuInit(void) { /* Start HID Interface */ LCD_UsrLogY("USB Host Full speed initialized.\n"); /* Start MSC Interface */ LCD_UsrLogY("USB Host High speed initialized.\n"); BSP_LCD_SetTextColor(LCD_COLOR_GREEN); BSP_LCD_DisplayStringAtLine(17, (uint8_t *)"Use [Joystick Left/Right] to scroll up/down"); BSP_LCD_DisplayStringAtLine(18, (uint8_t *)"Use [Joystick Up/Down] to scroll DUAL menu"); Demo_SelectItem(DEMO_main_menu, 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; } }
/** * @brief Manages MSC Menu Process. * @param None * @retval None */ void MSC_MenuProcess(void) { switch(demo.msc_state) { case APPLI_MSC_IDLE: Demo_SelectItem(MSC_main_menu, 0); demo.msc_state = APPLI_MSC_WAIT; demo.select = 0; break; case APPLI_MSC_WAIT: if(demo.select != prev_select) { prev_select = demo.select; Demo_SelectItem(MSC_main_menu, demo.select & 0x7F); /* Handle select item */ if(demo.select & 0x80) { demo.select &= 0x7F; switch(demo.select) { case 0: demo.msc_state = APPLI_MSC_FILE_OPERATIONS; break; case 1: demo.msc_state = APPLI_MSC_EXPLORER; break; case 2: /* Return */ demo.state = DEMO_IDLE; demo.select = 0; LCD_UsrLogY("> MSC application closed.\n"); f_mount(0,0,0); break; default: break; } } } break; case APPLI_MSC_FILE_OPERATIONS: /* Read and Write File Here */ if(Appli_HS_state == APPLICATION_HS_READY) { MSC_File_Operations(); } demo.msc_state = APPLI_MSC_WAIT; break; case APPLI_MSC_EXPLORER: /* Display disk content */ if(Appli_HS_state == APPLICATION_HS_READY) { Explore_Disk("0:/", 1); } demo.msc_state = APPLI_MSC_WAIT; break; default: break; } }
/** * @brief Manages HID Menu Process. * @param None * @retval None */ void HID_MenuProcess(void) { switch(demo.hid_state) { case APPLI_HID_IDLE: Demo_SelectItem(DEMO_HID_menu, 0); demo.hid_state = APPLI_HID_WAIT; demo.select = 0; break; case APPLI_HID_WAIT: if(demo.select != prev_select) { prev_select = demo.select; Demo_SelectItem(DEMO_HID_menu, demo.select & 0x7F); /* Handle select item */ if(demo.select & 0x80) { demo.select &= 0x7F; switch(demo.select) { case 0: demo.hid_state = APPLI_HID_START; break; case 1: demo.state = DEMO_IDLE; demo.select = 0; LCD_UsrLogY("> HID application closed.\n"); break; default: break; } } } break; case APPLI_HID_START: if(Appli_FS_state == APPLICATION_FS_READY) { if(USBH_HID_GetDeviceType(&hUSBHost_FS) == HID_KEYBOARD) { demo.keyboard_state = HID_KEYBOARD_IDLE; demo.hid_state = APPLI_HID_KEYBOARD; } else if(USBH_HID_GetDeviceType(&hUSBHost_FS) == HID_MOUSE) { demo.mouse_state = HID_MOUSE_IDLE; demo.hid_state = APPLI_HID_MOUSE; } } else { LCD_ErrLog("No supported HID device!\n"); demo.hid_state = APPLI_HID_WAIT; } break; case APPLI_HID_MOUSE: if(Appli_FS_state == APPLICATION_FS_READY) { HID_MouseMenuProcess(); USBH_MouseDemo(&hUSBHost_FS); } break; case APPLI_HID_KEYBOARD: if(Appli_FS_state == APPLICATION_FS_READY) { HID_KeyboardMenuProcess(); USBH_KeybdDemo(&hUSBHost_FS); } break; default: break; } }