diff options
Diffstat (limited to 'rsnix/src/ps2.rs')
| -rw-r--r-- | rsnix/src/ps2.rs | 10 |
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. |
| 266 | fn kbd() -> &'static mut KbdState { | ||
| 267 | unsafe { &mut *core::ptr::addr_of_mut!(KBD) } | ||
| 268 | } | ||
| 269 | |||
| 266 | fn process_byte(byte: u8) -> Option<KeyEvent> { | 270 | fn 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 | ||
| 370 | fn update_modifiers(scancode: u8, pressed: bool, e0: bool) { | 374 | fn 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? |
| 395 | fn ctrl_held() -> bool { | 399 | fn 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 | } |
