blob: 11730e978c2cd04dc80868545c3d421569bdc7de (
plain)
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
|
#include "std.c"
#define BUS_HID_SK_START 0x6033
#define BUS_HID_MS_INDEX 0x602F
#define BUS_HID_MS_STATE 0x602F + 2
#define SK_MAX 256
#define SK_NEWLINE 13
#define SK_BACKSPACE 8
#define SK_SHIFT 160
#define SK_A 65
#define SK_B 66
#define SK_C 67
#define SK_D 68
#define SK_E 69
#define SK_F 70
#define SK_G 71
#define SK_H 72
#define SK_I 73
#define SK_J 74
#define SK_K 75
#define SK_L 76
#define SK_M 77
#define SK_N 78
#define SK_O 79
#define SK_P 80
#define SK_Q 81
#define SK_R 82
#define SK_S 83
#define SK_T 84
#define SK_U 85
#define SK_V 86
#define SK_W 87
#define SK_X 88
#define SK_Y 89
#define SK_Z 90
#define MS_LEFT 1
#define MS_RIGHT 2
#define MS_MIDDLE 4
int hid_getKeyState(int scanCode)
{
char* sk_table = BUS_HID_SK_START;
int index = scanCode / 8;
int bit = scanCode % 8;
int val = sk_table[index - 1];
return (val & (1 << bit)) != 0;
}
int hid_getPressedKey()
{
for (int sk = 0; sk < SK_MAX; sk++)
{
if (hid_getKeyState(sk) && sk != SK_SHIFT)
return sk;
}
return 0;
}
int hid_waitForPressedKey()
{
while (true)
{
int sk = hid_getPressedKey();
if (sk != 0)
return sk;
}
}
int hid_getMouseIndex()
{
return *(BUS_HID_MS_INDEX);
}
int hid_getMouseState()
{
return *(BUS_HID_MS_STATE);
}
|