/** * @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 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 Manages HID Menu Process. * @param None * @retval None */ void HID_MenuProcess(void) { switch(hid_demo.state) { case HID_DEMO_IDLE: BSP_LCD_SetTextColor(LCD_COLOR_GREEN); BSP_LCD_DisplayStringAtLine(17, (uint8_t *)"Use [Buttons Left/Right] to scroll up/down "); BSP_LCD_DisplayStringAtLine(18, (uint8_t *)"Use [Joystick Up/Down] to scroll HID menu "); BSP_LCD_DisplayStringAtLine(19, (uint8_t *)" "); BSP_LCD_SetTextColor(LCD_COLOR_WHITE); HID_SelectItem(DEMO_HID_menu, 0); hid_demo.state = HID_DEMO_WAIT; hid_demo.select = 0; 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) { hid_demo.select &= 0x7F; switch(hid_demo.select) { case 0: hid_demo.state = HID_DEMO_START; break; case 1: hid_demo.state = HID_DEMO_REENUMERATE; break; default: break; } } } break; case HID_DEMO_START: if(Appli_state == APPLICATION_HID) { 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; } break; case HID_DEMO_REENUMERATE: /* Force HID Device to re-enumerate */ USBH_ReEnumerate(&hUSBHost); hid_demo.state = HID_DEMO_WAIT; break; case HID_DEMO_MOUSE: if( Appli_state == APPLICATION_HID) { HID_MouseMenuProcess(); USBH_MouseDemo(&hUSBHost); } break; case HID_DEMO_KEYBOARD: if( Appli_state == APPLICATION_HID) { HID_KeyboardMenuProcess(); USBH_KeybdDemo(&hUSBHost); } 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_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; } } }