1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
21
22
23
24
25
26
27
28
34
35
41
42
48
49
53
54
55
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
108
130
136
144
152
154
155
156
157
163
164
165
166
167
184
185
186
187
188
193
209
210
215
216
217
218
219
220
221
222
223
224
225
229
233
234
238
242
243
247
251
252
253
254
259
260
261
262
263
264
265
273
/* ... */
#include "main.h"
Includes
HID_DEMO_StateMachine hid_demo;
extern uint8_t prev_select;
uint8_t *DEMO_KEYBOARD_menu[] = {
(uint8_t *)
" 1 - Start Keyboard / Clear ",
(uint8_t *)
" 2 - Return ",
...};
uint8_t *DEMO_MOUSE_menu[] = {
(uint8_t *)
" 1 - Start Mouse / Re-Initialize ",
(uint8_t *)
" 2 - Return ",
...};
uint8_t *DEMO_HID_menu[] = {
(uint8_t *)
" 1 - Start HID ",
(uint8_t *)
" 2 - Re-Enumerate ",
...};
Private variables
static void USBH_MouseDemo(USBH_HandleTypeDef * phost);
static void USBH_KeybdDemo(USBH_HandleTypeDef * phost);
Private function prototypes
/* ... */
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_IDLE:
case HID_DEMO_WAIT:
if (hid_demo.select != prev_select)
{
prev_select = hid_demo.select;
HID_SelectItem(DEMO_HID_menu, hid_demo.select & 0x7F);
if (hid_demo.select & 0x80)
{
hid_demo.select &= 0x7F;
switch (hid_demo.select)
{
case 0:
hid_demo.state = HID_DEMO_START;
break;
case 0:
case 1:
hid_demo.state = HID_DEMO_REENUMERATE;
break;
case 1:
default:
break;default
}switch (hid_demo.select) { ... }
}if (hid_demo.select & 0x80) { ... }
}if (hid_demo.select != prev_select) { ... }
break;
case HID_DEMO_WAIT:
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;
}if (USBH_HID_GetDeviceType(&hUSBHost) == HID_KEYBOARD) { ... }
else if (USBH_HID_GetDeviceType(&hUSBHost) == HID_MOUSE)
{
hid_demo.mouse_state = HID_MOUSE_IDLE;
hid_demo.state = HID_DEMO_MOUSE;
}else if (USBH_HID_GetDeviceType(&hUSBHost) == HID_MOUSE) { ... }
}if (Appli_state == APPLICATION_HID) { ... }
else
{
LCD_ErrLog("No supported HID device!\n");
hid_demo.state = HID_DEMO_WAIT;
}else { ... }
break;
case HID_DEMO_START:
case HID_DEMO_REENUMERATE:
USBH_ReEnumerate(&hUSBHost);
hid_demo.state = HID_DEMO_WAIT;
break;
case HID_DEMO_REENUMERATE:
case HID_DEMO_MOUSE:
if (Appli_state == APPLICATION_HID)
{
HID_MouseMenuProcess();
USBH_MouseDemo(&hUSBHost);
}if (Appli_state == APPLICATION_HID) { ... }
break;
case HID_DEMO_MOUSE:
case HID_DEMO_KEYBOARD:
if (Appli_state == APPLICATION_HID)
{
HID_KeyboardMenuProcess();
USBH_KeybdDemo(&hUSBHost);
}if (Appli_state == APPLICATION_HID) { ... }
break;
case HID_DEMO_KEYBOARD:
default:
break;default
}switch (hid_demo.state) { ... }
}{ ... }
/* ... */
void HID_SelectItem(uint8_t ** menu, uint8_t item)
{
BSP_LCD_SetTextColor(LCD_COLOR_WHITE);
switch (item)
{
case 0:
BSP_LCD_SetBackColor(LCD_COLOR_MAGENTA);
BSP_LCD_DisplayStringAtLine(20, menu[0]);
BSP_LCD_SetBackColor(LCD_COLOR_BLUE);
BSP_LCD_DisplayStringAtLine(21, menu[1]);
break;
case 0:
case 1:
BSP_LCD_SetBackColor(LCD_COLOR_BLUE);
BSP_LCD_DisplayStringAtLine(20, menu[0]);
BSP_LCD_SetBackColor(LCD_COLOR_MAGENTA);
BSP_LCD_DisplayStringAtLine(21, menu[1]);
BSP_LCD_SetBackColor(LCD_COLOR_BLUE);
break;case 1:
}switch (item) { ... }
BSP_LCD_SetBackColor(LCD_COLOR_BLACK);
}{ ... }
/* ... */
void HID_DEMO_ProbeKey(JOYState_TypeDef state)
{
if ((state == JOY_UP) && (hid_demo.select > 0))
{
hid_demo.select--;
}if ((state == JOY_UP) && (hid_demo.select > 0)) { ... }
else if ((state == JOY_DOWN) && (hid_demo.select < 1))
{
hid_demo.select++;
}else if ((state == JOY_DOWN) && (hid_demo.select < 1)) { ... }
else if (state == JOY_SEL)
{
hid_demo.select |= 0x80;
}else if (state == JOY_SEL) { ... }
}{ ... }
/* ... */
static void USBH_MouseDemo(USBH_HandleTypeDef * phost)
{
HID_MOUSE_Info_TypeDef *m_pinfo;
m_pinfo = USBH_HID_GetMouseInfo(phost);
if (m_pinfo != NULL)
{
USR_MOUSE_ProcessData(&mouse_info);
if (m_pinfo->buttons[0])
{
HID_MOUSE_ButtonPressed(0);
}if (m_pinfo->buttons[0]) { ... }
else
{
HID_MOUSE_ButtonReleased(0);
}else { ... }
if (m_pinfo->buttons[1])
{
HID_MOUSE_ButtonPressed(2);
}if (m_pinfo->buttons[1]) { ... }
else
{
HID_MOUSE_ButtonReleased(2);
}else { ... }
if (m_pinfo->buttons[2])
{
HID_MOUSE_ButtonPressed(1);
}if (m_pinfo->buttons[2]) { ... }
else
{
HID_MOUSE_ButtonReleased(1);
}else { ... }
}if (m_pinfo != NULL) { ... }
}{ ... }
/* ... */
static void USBH_KeybdDemo(USBH_HandleTypeDef * phost)
{
HID_KEYBD_Info_TypeDef *k_pinfo;
char c;
k_pinfo = USBH_HID_GetKeybdInfo(phost);
if (k_pinfo != NULL)
{
c = USBH_HID_GetASCIICode(k_pinfo);
if (c != 0)
{
USR_KEYBRD_ProcessData(c);
}if (c != 0) { ... }
}if (k_pinfo != NULL) { ... }
}{ ... }