logitech_cve/
keyboard.rs

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}