()
| 9 | |
| 10 | #[no_mangle] |
| 11 | fn main() { |
| 12 | let mut keyboard: Keyboard<layouts::Us104Key, ScancodeSet1> = Keyboard::new(HandleControl::MapLettersToUnicode); |
| 13 | |
| 14 | loop { |
| 15 | // Wait for an interrupt to occur |
| 16 | syscalls::await_interrupt(); |
| 17 | |
| 18 | let scancode: u8 = ports::inportb(0x60); |
| 19 | if let Ok(Some(key_event)) = keyboard.add_byte(scancode) { |
| 20 | if let Some(key) = keyboard.process_keyevent(key_event) { |
| 21 | let chars_be: u64 = match key { |
| 22 | DecodedKey::Unicode(character) => { |
| 23 | character as u64 // A single character |
| 24 | }, |
| 25 | DecodedKey::RawKey(key) => { |
| 26 | match key { |
| 27 | // These escape sequences follow the VT convention |
| 28 | KeyCode::F1 => sequences::F1, |
| 29 | KeyCode::F2 => sequences::F2, |
| 30 | KeyCode::F3 => sequences::F3, |
| 31 | KeyCode::F4 => sequences::F4, |
| 32 | KeyCode::F5 => sequences::F5, |
| 33 | KeyCode::F6 => sequences::F6, |
| 34 | KeyCode::F7 => sequences::F7, |
| 35 | KeyCode::F8 => sequences::F8, |
| 36 | KeyCode::F9 => sequences::F9, |
| 37 | KeyCode::F10 => sequences::F10, |
| 38 | KeyCode::F11 => sequences::F11, |
| 39 | KeyCode::F12 => sequences::F12, |
| 40 | |
| 41 | KeyCode::PageUp => sequences::PageUp, |
| 42 | KeyCode::PageDown => sequences::PageDown, |
| 43 | KeyCode::Home => sequences::Home, |
| 44 | KeyCode::End => sequences::End, |
| 45 | |
| 46 | KeyCode::ArrowUp => sequences::ArrowUp, |
| 47 | KeyCode::ArrowDown => sequences::ArrowDown, |
| 48 | KeyCode::ArrowRight => sequences::ArrowRight, |
| 49 | KeyCode::ArrowLeft => sequences::ArrowLeft, |
| 50 | _ => { |
| 51 | debug_print!("{:?}", key); |
| 52 | continue; |
| 53 | } |
| 54 | } |
| 55 | } |
| 56 | }; |
| 57 | // Send the character(s) in a short message |
| 58 | if let Err((err, _msg)) = syscalls::send(&STDOUT, |
| 59 | message::Message::Short( |
| 60 | message::CHAR, |
| 61 | chars_be, 0)) { |
| 62 | // Failed to send. Probably not much to be done except panic. |
| 63 | panic!("[keyboard] Send: {}", err); |
| 64 | } |
| 65 | } |
| 66 | } |
| 67 | } |
| 68 | } |
nothing calls this directly
no test coverage detected