1use crate::device::Device;
2
3#[repr(u8)]
4pub enum KeyboardButton {
5 A = 0x4,
6 B = 0x5,
7 C = 0x6,
8 D = 0x7,
9 E = 0x8,
10 F = 0x9,
11 G = 0xA,
12 H = 0xB,
13 I = 0xC,
14 J = 0xD,
15 K = 0xE,
16 L = 0xF,
17 M = 0x10,
18 N = 0x11,
19 O = 0x12,
20 P = 0x13,
21 Q = 0x14,
22 R = 0x15,
23 S = 0x16,
24 T = 0x17,
25 U = 0x18,
26 V = 0x19,
27 W = 0x1A,
28 X = 0x1B,
29 Y = 0x1C,
30 Z = 0x1D,
31 N1 = 0x1E,
32 N2 = 0x1F,
33 N3 = 0x20,
34 N4 = 0x21,
35 N5 = 0x22,
36 N6 = 0x23,
37 N7 = 0x24,
38 N8 = 0x25,
39 N9 = 0x26,
40 N0 = 0x27,
41 Enter = 0x28,
42 Esc = 0x29,
43 BackSpace = 0x2A,
44 Tab = 0x2B,
45 Space = 0x2C,
46 Minus = 0x2D,
47 Equal = 0x2E,
48 SquareBracketLeft = 0x2F,
49 SquareBracketRight = 0x30,
50 BackSlash = 0x31,
51 BackSlash_ = 0x32,
52 Column = 0x33,
53 Quote = 0x34,
54 BackTick = 0x35,
55 Comma = 0x36,
56 Period = 0x37,
57 Slash = 0x38,
58 Cap = 0x39,
59 F1 = 0x3A,
60 F2 = 0x3B,
61 F3 = 0x3C,
62 F4 = 0x3D,
63 F5 = 0x3E,
64 F6 = 0x3F,
65 F7 = 0x40,
66 F8 = 0x41,
67 F9 = 0x42,
68 F10 = 0x43,
69 F11 = 0x44,
70 F12 = 0x45,
71 Snapshot = 0x46,
72 ScrollLock = 0x47,
73 Pause = 0x48,
74 Insert = 0x49,
75 Home = 0x4A,
76 PageUp = 0x4B,
77 Del = 0x4C,
78 End = 0x4D,
79 PageDown = 0x4E,
80 Right = 0x4F,
81 Left = 0x50,
82 Down = 0x51,
83 Up = 0x52,
84 Numlock = 0x53,
85 NumpadDiv = 0x54,
86 NumpadMul = 0x55,
87 NumpadMinus = 0x56,
88 NumpadPlus = 0x57,
89 NumpadEnter = 0x58,
90 Numpad1 = 0x59,
91 Numpad2 = 0x5A,
92 Numpad3 = 0x5B,
93 Numpad4 = 0x5C,
94 Numpad5 = 0x5D,
95 Numpad6 = 0x5E,
96 Numpad7 = 0x5F,
97 Numpad8 = 0x60,
98 Numpad9 = 0x61,
99 Numpad0 = 0x62,
100 NumpadDec = 0x63,
101 Apps = 0x65,
102 F13 = 0x68,
103 F14 = 0x69,
104 F15 = 0x6A,
105 F16 = 0x6B,
106 F17 = 0x6C,
107 F18 = 0x6D,
108 F19 = 0x6E,
109 F20 = 0x6F,
110 F21 = 0x70,
111 F22 = 0x71,
112 F23 = 0x72,
113 F24 = 0x73,
114 Rwin = 0x8C,
115 F24_ = 0x94,
116 Lctrl = 0xE0,
117 Lshift = 0xE1,
118 Lalt = 0xE2,
119 Lwin = 0xE3,
120 Rctrl = 0xE4,
121 Rshift = 0xE5,
122 Ralt = 0xE6,
123 Rwin_ = 0xE7,
124 NONE = 0x0,
125}
126
127impl From<KeyboardButton> for u8 {
128 fn from(button: KeyboardButton) -> Self {
129 button as Self
130 }
131}
132
133pub struct Keyboard<'a> {
134 device: &'a mut Device,
135}
136
137impl Keyboard<'_> {
138 pub fn press(&mut self, button: KeyboardButton) {
139 self.device.send_keyboard(
140 button,
141 KeyboardButton::NONE,
142 KeyboardButton::NONE,
143 KeyboardButton::NONE,
144 KeyboardButton::NONE,
145 KeyboardButton::NONE,
146 );
147 }
148
149 pub fn release(&mut self) {
150 self.device.send_keyboard(
151 KeyboardButton::NONE,
152 KeyboardButton::NONE,
153 KeyboardButton::NONE,
154 KeyboardButton::NONE,
155 KeyboardButton::NONE,
156 KeyboardButton::NONE,
157 );
158 }
159
160 pub fn multi_press(
161 &mut self,
162 button1: KeyboardButton,
163 button2: KeyboardButton,
164 button3: KeyboardButton,
165 button4: KeyboardButton,
166 button5: KeyboardButton,
167 button6: KeyboardButton,
168 ) {
169 self.device
170 .send_keyboard(button1, button2, button3, button4, button5, button6);
171 }
172}