summaryrefslogtreecommitdiffstats
path: root/rsnix/src/ps2.rs
diff options
context:
space:
mode:
Diffstat (limited to '')
-rw-r--r--rsnix/src/ps2.rs10
1 files changed, 7 insertions, 3 deletions
diff --git a/rsnix/src/ps2.rs b/rsnix/src/ps2.rs
index 4747813..35848b6 100644
--- a/rsnix/src/ps2.rs
+++ b/rsnix/src/ps2.rs
@@ -263,8 +263,12 @@ pub fn try_poll_key() -> Option<KeyEvent> {
263 263
264/// Process a single scancode byte. Returns Some(KeyEvent) when a visible 264/// Process a single scancode byte. Returns Some(KeyEvent) when a visible
265/// event happens; returns None for modifier changes, releases, and prefixes. 265/// event happens; returns None for modifier changes, releases, and prefixes.
266fn kbd() -> &'static mut KbdState {
267 unsafe { &mut *core::ptr::addr_of_mut!(KBD) }
268}
269
266fn process_byte(byte: u8) -> Option<KeyEvent> { 270fn process_byte(byte: u8) -> Option<KeyEvent> {
267 let state = unsafe { &mut KBD }; 271 let state = kbd();
268 272
269 if byte == 0xE0 { 273 if byte == 0xE0 {
270 state.got_e0 = true; 274 state.got_e0 = true;
@@ -368,7 +372,7 @@ fn process_e0(byte: u8) -> Option<KeyEvent> {
368} 372}
369 373
370fn update_modifiers(scancode: u8, pressed: bool, e0: bool) { 374fn update_modifiers(scancode: u8, pressed: bool, e0: bool) {
371 let state = unsafe { &mut KBD }; 375 let state = kbd();
372 match (scancode, e0) { 376 match (scancode, e0) {
373 (0x2A, false) => set_mod(state, MOD_LSHIFT, pressed), 377 (0x2A, false) => set_mod(state, MOD_LSHIFT, pressed),
374 (0x36, false) => set_mod(state, MOD_RSHIFT, pressed), 378 (0x36, false) => set_mod(state, MOD_RSHIFT, pressed),
@@ -393,6 +397,6 @@ fn set_mod(state: &mut KbdState, bit: u8, pressed: bool) {
393 397
394/// Is either Ctrl key held? 398/// Is either Ctrl key held?
395fn ctrl_held() -> bool { 399fn ctrl_held() -> bool {
396 let state = unsafe { &mut KBD }; 400 let state = kbd();
397 state.modifiers & (MOD_LCTRL | MOD_RCTRL) != 0 401 state.modifiers & (MOD_LCTRL | MOD_RCTRL) != 0
398} 402}