forked from zhuhuijia0001/ch559-usb-host
-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathUsbHid.c
90 lines (75 loc) · 1.79 KB
/
UsbHid.c
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
#include "Type.h"
#include "Protocol.h"
#include "Uart.h"
#include "UsbDef.h"
#include "UsbHost.h"
#include "UsbHid.h"
#include "ParseHidData.h"
#include "Packet.h"
#include "Trace.h"
void ProcessHIDData(INTERFACE *pInterface, const UINT8 *pData, UINT16 len)
{
UINT8 buffer[KEYBOARD_LEN + 2];
UINT8 pktLen;
UINT8 interfaceClass = pInterface->InterfaceClass;
UINT8 interfaceProtocol = pInterface->InterfaceProtocol;
#ifdef DEBUG
UINT16 i;
TRACE("hid data:\r\n");
for (i = 0; i < len; i++)
{
TRACE1("0x%02X ", (UINT16)pData[i]);
}
TRACE("\r\n");
#endif
len = len;
if (interfaceClass == USB_DEV_CLASS_HID)
{
if (pInterface->HidSegStruct.HIDSeg[HID_SEG_KEYBOARD_MODIFIER_INDEX].size != 0)
{
//keyboard
UINT8 keyboardData[KEYBOARD_LEN];
if (!UsbKeyboardParse(pData, keyboardData, &pInterface->HidSegStruct, &pInterface->KeyboardParseStruct))
{
return;
}
if (BuildUsbKeyboardPacket(buffer, sizeof(buffer), &pktLen, keyboardData))
{
#ifdef DEBUG
for (i = 0; i < pktLen; i++)
{
TRACE1("0x%02X ", (UINT16)buffer[i]);
}
TRACE("\r\n");
#else
if (pktLen == KEYBOARD_LEN + 2)
{
CH559UART0SendData(buffer, pktLen);
}
#endif
}
}
else if (pInterface->HidSegStruct.HIDSeg[HID_SEG_BUTTON_INDEX].size != 0)
{
//mouse
UINT8 mouseData[MOUSE_LEN];
UsbMouseParse(pData, mouseData, &pInterface->HidSegStruct);
if (BuildUsbMousePacket(buffer, sizeof(buffer), &pktLen, mouseData))
{
#ifdef DEBUG
TRACE("after process:\r\n");
for (i = 0; i < pktLen; i++)
{
TRACE1("0x%02X ", (UINT16)buffer[i]);
}
TRACE("\r\n");
#else
if (pktLen == MOUSE_LEN + 2)
{
CH559UART0SendData(buffer, pktLen);
}
#endif
}
}
}
}