void USBH_HID_EventCallback(USBH_HandleTypeDef *phost) { if (USBH_HID_GetDeviceType(&hUSBHost) == HID_MOUSE) { HID_MOUSE_Info_TypeDef *m_pinfo_mouse; m_pinfo_mouse = USBH_HID_GetMouseInfo(phost); if (m_pinfo_mouse) { // USBH_DbgLog("btns:%u%u%u", m_pinfo_mouse->buttons[0],m_pinfo_mouse->buttons[1],m_pinfo_mouse->buttons[2]); hid_buttons[0] = m_pinfo_mouse->buttons[0]; hid_buttons[1] = m_pinfo_mouse->buttons[1]; hid_buttons[2] = m_pinfo_mouse->buttons[2]; hid_mouse_x += m_pinfo_mouse->x; hid_mouse_y += m_pinfo_mouse->y; } else { hid_buttons[0] = 0; hid_buttons[1] = 0; hid_buttons[2] = 0; } USBH_DbgLog("btns:%u%u%u", hid_buttons[0],hid_buttons[1],hid_buttons[2]); } else if (USBH_HID_GetDeviceType(&hUSBHost) == HID_KEYBOARD) { HID_KEYBD_Info_TypeDef *m_pinfo_keyb; m_pinfo_keyb = USBH_HID_GetKeybdInfo(phost); if (m_pinfo_keyb) { if (m_pinfo_keyb->lshift) { USBH_DbgLog("ls"); } if (m_pinfo_keyb->rshift) { USBH_DbgLog("rs"); } } } }
TM_USBH_HID_t TM_USBH_HID_GetConnected(TM_USB_t USB_Mode) { HID_TypeTypeDef type; USBH_HandleTypeDef* USBHandle = TM_USBH_GetUSBPointer(USB_Mode); static TM_USBH_HID_t curr; /* Check if current class is HID */ if (USBH_GetActiveClass(USBHandle) != USB_HID_CLASS) { /* HID is not active */ return TM_USBH_HID_None; } /* Get keyboard type */ type = USBH_HID_GetDeviceType(USBHandle); /* Check for keyboard */ if (type == HID_KEYBOARD) { curr = TM_USBH_HID_Keyboard; } else if (type == HID_MOUSE) { curr = TM_USBH_HID_Mouse; } else { curr = TM_USBH_HID_None; } /* No device detected */ return curr; }
/** * @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; } } }
/** * @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_HID) { 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_HID) { USBH_MouseDemo(&hUSBHost); } break; case HID_DEMO_KEYBOARD: if( Appli_state == APPLICATION_HID) { USBH_KeybdDemo(&hUSBHost); } 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; } }
/** * @brief Manages HID Menu Process. * @param None * @retval None */ void HID_MenuProcess(void) { switch(demo.hid_state) { 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; BSP_LCD_ClearStringLine(19); BSP_LCD_ClearStringLine(20); BSP_LCD_SetTextColor(LCD_COLOR_GREEN); BSP_LCD_DisplayStringAtLine(20, (uint8_t *)"Press User button to exit"); HID_KeyboardMenuProcess(); } else if(USBH_HID_GetDeviceType(&hUSBHost_FS) == HID_MOUSE) { demo.mouse_state = HID_MOUSE_IDLE; demo.hid_state = APPLI_HID_MOUSE; BSP_LCD_ClearStringLine(19); BSP_LCD_ClearStringLine(20); BSP_LCD_SetTextColor(LCD_COLOR_GREEN); BSP_LCD_DisplayStringAtLine(20, (uint8_t *)"Press User button to exit"); HID_MouseMenuProcess(); } } else { LCD_ErrLog("No supported HID device!\n"); demo.hid_state = APPLI_HID_START; } break; case APPLI_HID_MOUSE: if(Appli_FS_state == APPLICATION_FS_READY) { USBH_MouseDemo(&hUSBHost_FS); if(BSP_PB_GetState(BUTTON_TAMPER) == GPIO_PIN_SET) { demo.hid_state = APPLI_HID_START; demo.state = DEMO_IDLE; } } break; case APPLI_HID_KEYBOARD: if(Appli_FS_state == APPLICATION_FS_READY) { USBH_KeybdDemo(&hUSBHost_FS); if(BSP_PB_GetState(BUTTON_TAMPER) == GPIO_PIN_SET) { demo.hid_state = APPLI_HID_START; demo.state = DEMO_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; } } } }