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
29
33
34
35
39
40
41
45
46
51
52
53
58
59
60
61
62
63
64
65
66
67
68
69
70
71
76
77
78
79
80
86
113
134
140
148
156
158
159
160
161
162
163
164
165
166
167
168
169
170
176
177
178
179
180
197
198
199
200
201
206
207
208
209
210
211
215
219
223
224
225
226
227
228
229
230
231
232
233
234
247
248
249
254
255
256
257
258
259
260
261
262
263
264
268
272
273
277
281
282
286
290
291
292
293
298
299
300
301
302
303
304
312
/* ... */
#include "main.h"
Includes
HID_DEMO_StateMachine hid_demo;
uint8_t prev_select = 0;
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-Init ",
(uint8_t *)" 2 - Return ",
...};
uint8_t *DEMO_HID_menu[] =
{
(uint8_t *)" 1 - Start HID ",
(uint8_t *)" 2 - Re-Enumerate ",
...};
Private variables
static void HID_DEMO_ProbeKey(JOYState_TypeDef state);
static void USBH_MouseDemo(USBH_HandleTypeDef *phost);
static void USBH_KeybdDemo(USBH_HandleTypeDef *phost);
Private function prototypes
/* ... */
void HID_MenuInit(void)
{
USBH_UsrLog("Starting HID Demo");
BSP_LCD_SetTextColor(LCD_COLOR_GREEN);
BSP_LCD_DisplayStringAtLine(14, (uint8_t *)"Joystick usage: ");
BSP_LCD_DisplayStringAtLine(15, (uint8_t *)" L/R scrolls messages");
BSP_LCD_DisplayStringAtLine(16, (uint8_t *)" U/D scrolls menu HID");
hid_demo.state = HID_DEMO_IDLE;
HID_MenuProcess();
}{ ... }
/* ... */
void HID_MenuProcess(void)
{
switch(hid_demo.state)
{
case HID_DEMO_IDLE:
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_READY)
{
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_READY) { ... }
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_READY)
{
HID_MouseMenuProcess();
USBH_MouseDemo(&hUSBHost);
}if (Appli_state == APPLICATION_READY) { ... }
break;
case HID_DEMO_MOUSE:
case HID_DEMO_KEYBOARD:
if(Appli_state == APPLICATION_READY)
{
HID_KeyboardMenuProcess();
USBH_KeybdDemo(&hUSBHost);
}if (Appli_state == APPLICATION_READY) { ... }
break;
case HID_DEMO_KEYBOARD:
default:
break;default
}switch (hid_demo.state) { ... }
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;
}if (Appli_state == APPLICATION_DISCONNECT) { ... }
}{ ... }
/* ... */
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(18, menu [0]);
BSP_LCD_SetBackColor(LCD_COLOR_BLUE);
BSP_LCD_DisplayStringAtLine(19, menu [1]);
break;
case 0:
case 1:
BSP_LCD_SetBackColor(LCD_COLOR_BLUE);
BSP_LCD_DisplayStringAtLine(18, menu [0]);
BSP_LCD_SetBackColor(LCD_COLOR_MAGENTA);
BSP_LCD_DisplayStringAtLine(19, menu [1]);
BSP_LCD_SetBackColor(LCD_COLOR_BLUE);
break; case 1:
}switch (item) { ... }
BSP_LCD_SetBackColor(LCD_COLOR_BLACK);
}{ ... }
/* ... */
static void HID_DEMO_ProbeKey(JOYState_TypeDef state)
{
hid_demo.select &= 0x7F;
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) { ... }
}{ ... }
void HID_Joysticky(void)
{
static JOYState_TypeDef JoyState = JOY_NONE;
JoyState = BSP_JOY_GetState();
HID_DEMO_ProbeKey(JoyState);
switch(JoyState)
{
case JOY_LEFT:
LCD_LOG_ScrollBack();
break;
case JOY_LEFT:
case JOY_RIGHT:
LCD_LOG_ScrollForward();
break;
case JOY_RIGHT:
default:
break; default
}switch (JoyState) { ... }
}{ ... }
/* ... */
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) { ... }
}{ ... }