MCPcopy Create free account
hub / github.com/bendudson/EuraliOS / main

Function main

keyboard/src/main.rs:11–68  ·  view source on GitHub ↗
()

Source from the content-addressed store, hash-verified

9
10#[no_mangle]
11fn 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}

Callers

nothing calls this directly

Calls 3

inportbFunction · 0.85
sendFunction · 0.85
await_interruptFunction · 0.50

Tested by

no test coverage detected