hollyhock
Loading...
Searching...
No Matches
input.h
Go to the documentation of this file.
9#pragma once
10
11#ifdef __cplusplus
12extern "C" {
13#endif
14
15#include <stdint.h>
16#include <stdbool.h>
17
18#define __UCONCAT(a, b) #a b
19#define _UCONCAT(a, b) __UCONCAT(a, b)
20#define UCONCAT(b) _UCONCAT(__USER_LABEL_PREFIX__, b)
21
22enum Input_EventType {
23 EVENT_KEY = 0x0017,
24 EVENT_ACTBAR_RESIZE = 0x1003,
25 EVENT_ACTBAR_SWAP = 0x1004,
26 EVENT_ACTBAR_ROTATE = 0x1005,
27 EVENT_ACTBAR_ESC = 0x3009,
28 EVENT_ACTBAR_SETTINGS = 0x300A,
29 EVENT_TOUCH = 0x4000,
30 EVENT_TIMER = 0x0005,
31 EVENT_NONE = 0x0FFF
32};
33
34enum Input_KeyEventType {
35 KEY_PRESSED = 1,
36 KEY_HELD = 0x100,
37 KEY_RELEASED = 0x40
38};
39
40enum Input_Keycode {
41 KEYCODE_KEYBOARD = 0x00B3,
42 KEYCODE_SHIFT = 0x00A0,
43 KEYCODE_BACKSPACE = 0x0097,
44 KEYCODE_POWER_CLEAR = 0x0080,
45 KEYCODE_UP = 0x0090,
46 KEYCODE_DOWN = 0x0091,
47 KEYCODE_LEFT = 0x0092,
48 KEYCODE_RIGHT = 0x0093,
49 KEYCODE_EQUALS = 0x003D,
50 KEYCODE_X = 0xEDB8,
51 KEYCODE_Y = 0xEDB9,
52 KEYCODE_Z = 0xEDBA,
53 KEYCODE_POWER = 0x005E,
54 KEYCODE_DIVIDE = 0x002F,
55 KEYCODE_OPEN_PARENTHESIS = 0x0028,
56 KEYCODE_7 = 0x0037,
57 KEYCODE_8 = 0x0038,
58 KEYCODE_9 = 0x0039,
59 KEYCODE_TIMES = 0xEE10,
60 KEYCODE_CLOSE_PARENTHESIS = 0x0029,
61 KEYCODE_4 = 0x0034,
62 KEYCODE_5 = 0x0035,
63 KEYCODE_6 = 0x0036,
64 KEYCODE_MINUS = 0x002D,
65 KEYCODE_COMMA = 0x002C,
66 KEYCODE_1 = 0x0031,
67 KEYCODE_2 = 0x0032,
68 KEYCODE_3 = 0x0033,
69 KEYCODE_PLUS = 0x002B,
70 KEYCODE_NEGATIVE = 0x001F,
71 KEYCODE_0 = 0x0030,
72 KEYCODE_DOT = 0x002E,
73 KEYCODE_EXP = 0x001D,
74 KEYCODE_EXE = 0x0094
75};
76
77enum Input_TouchEventType {
78 TOUCH_DOWN = 1,
79 TOUCH_HOLD_DRAG = 2,
80 TOUCH_ACT_BAR = 0x100,
81 TOUCH_UP = 0x40
82};
83
84enum Input_Scancode {
85 ScancodeKeyboard = (7 << 8) | 5,
86 ScancodeShift = (7 << 8) | 1,
87 ScancodeBackspace = (7 << 8) | 2,
88 ScancodeClear = (1 << 8) | 0,
89 ScancodeUp = (7 << 8) | 4,
90 ScancodeDown = (6 << 8) | 4,
91 ScancodeLeft = (6 << 8) | 3,
92 ScancodeRight = (7 << 8) | 3,
93 ScancodeEquals = (7 << 8) | 6,
94 ScancodeX = (6 << 8) | 6,
95 ScancodeY = (6 << 8) | 5,
96 ScancodeZ = (5 << 8) | 3,
97 ScancodePower = (6 << 8) | 2,
98 ScancodeDivide = (6 << 8) | 1,
99 ScancodeOpenParenthesis = (5 << 8) | 6,
100 Scancode7 = (5 << 8) | 5,
101 Scancode8 = (5 << 8) | 4,
102 Scancode9 = (5 << 8) | 2,
103 ScancodeTimes = (5 << 8) | 1,
104 ScancodeCloseParenthesis = (4 << 8) | 6,
105 Scancode4 = (4 << 8) | 5,
106 Scancode5 = (4 << 8) | 4,
107 Scancode6 = (4 << 8) | 2,
108 ScancodeMinus = (4 << 8) | 1,
109 ScancodeComma = (3 << 8) | 6,
110 Scancode1 = (3 << 8) | 5,
111 Scancode2 = (3 << 8) | 4,
112 Scancode3 = (3 << 8) | 2,
113 ScancodePlus = (3 << 8) | 1,
114 ScancodeNegative = (2 << 8) | 6,
115 Scancode0 = (2 << 8) | 5,
116 ScancodeDot = (2 << 8) | 4,
117 ScancodeEXP = (2 << 8) | 2,
118 ScancodeEXE = (2 << 8) | 1
119};
120
125struct __attribute__((packed)) Input_Event {
131 enum Input_EventType type : 16;
132 uint16_t zero;
133
147 union {
148 struct {
153 enum Input_KeyEventType direction : 32;
154
158 enum Input_Keycode keyCode : 16;
159 } key;
160
161 struct {
166 enum Input_TouchEventType direction : 32;
167
172 int32_t p1_x;
173
178 int32_t p1_y;
179
180 uint16_t adc_x1;
181 uint16_t adc_y1;
182 uint16_t adc_z1;
183 uint16_t adc_z2;
184 uint16_t adc_x2;
185 uint16_t adc_y2;
186
187 uint16_t adc_gh;
188 uint16_t adc_dm;
189 } touch_single;
190
191 struct {
192 enum Input_TouchEventType direction : 32;
193
194 int32_t p1_x;
195 int32_t p1_y;
196 int32_t p1_z;
197
198 int32_t p2_x;
199 int32_t p2_y;
200 int32_t p2_z;
201
202 uint32_t distance;
203
204 uint16_t adc_x1;
205 uint16_t adc_y1;
206 uint16_t adc_z1;
207 uint16_t adc_z2;
208 uint16_t adc_x2;
209 uint16_t adc_y2;
210
211 uint16_t adc_gh;
212 uint16_t adc_dm;
213 } touch_multi;
214 } data;
215};
216
227extern int (*GetInput)(struct Input_Event *event, uint32_t unknown1, uint32_t unknown2)
228#ifndef __clang__
229__attribute__((access(write_only, 1)))
230#endif
231;
232
233extern bool (*Input_GetKeyStateU)(uint16_t *scancode) __asm__ (UCONCAT("Input_GetKeyState"))
234#ifndef __clang__
235__attribute__((access(read_only, 1)))
236#endif
237;
238
245static inline __attribute__((always_inline)) bool Input_GetKeyState(enum Input_Scancode scanCode) {
246 return Input_GetKeyStateU((uint16_t *)&scanCode);
247}
248
254extern bool (*Input_IsAnyKeyDown)();
255
256#undef __UCONCAT
257#undef _UCONCAT
258#undef UCONCAT
259
260#ifdef __cplusplus
261}
262#endif
int(* GetInput)(struct Input_Event *event, uint32_t unknown1, uint32_t unknown2) __attribute__((access(write_only
bool(* Input_IsAnyKeyDown)()