From c64f8d4de241ca91ffa896a5e0fc8c7b353fc2ab Mon Sep 17 00:00:00 2001 From: husky Date: Fri, 12 Sep 2025 13:08:57 -0700 Subject: [PATCH] dvorak support for freaks --- Cargo.toml | 4 ++- src/dev/mod.rs | 3 --- src/dev/virtio/gpu.rs | 2 +- src/dev/virtio/input.rs | 58 +++++++++++++++++++++++++++++++++++++++++ 4 files changed, 62 insertions(+), 5 deletions(-) diff --git a/Cargo.toml b/Cargo.toml index 6b0cff5..46bd48f 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -32,11 +32,13 @@ codegen-units = 1 cc = "1.0" [features] -default = [] +default = ["keyboard_en_us"] debug_messages = [] arch_virt = ["dev_virtio", "dev_framebuffer", "fs_fat32", "liblbos/arch_riscv32", "ddi/arch_riscv32"] arch_ofw = [] arch_ppc32 = ["compiler_builtins", "arch_ofw", "fs_fat32"] dev_virtio = [] dev_framebuffer = [] +keyboard_en_us = [] +keyboard_dvorak = [] fs_fat32 = [] \ No newline at end of file diff --git a/src/dev/mod.rs b/src/dev/mod.rs index 1f84f0d..cab2a03 100644 --- a/src/dev/mod.rs +++ b/src/dev/mod.rs @@ -4,9 +4,6 @@ use crate::trafficcontrol::TrafficControl; pub const FRAMEBUFFER_WIDTH: usize = 320; pub const FRAMEBUFFER_HEIGHT: usize = 240; -pub const LINEBUFFER_BLOCKS: usize = 3; -pub const LINEBUFFER_HEIGHT: usize = 1; - // NOTE: // FRAMEBUFFER_ADDR should always be 0 if no framebuffer exists // if FRAMEBUFFER_ADDR is NOT 0, then FRAMEBUFFER_BPP should also be NOT 0 diff --git a/src/dev/virtio/gpu.rs b/src/dev/virtio/gpu.rs index 80f41cc..bb3360d 100644 --- a/src/dev/virtio/gpu.rs +++ b/src/dev/virtio/gpu.rs @@ -1,5 +1,5 @@ use crate::arch::serial_port; -use crate::dev::{FRAMEBUFFER_HEIGHT, FRAMEBUFFER_WIDTH, LINEBUFFER_BLOCKS}; +use crate::dev::{FRAMEBUFFER_HEIGHT, FRAMEBUFFER_WIDTH}; use crate::dev::virtio::{heap_allocate_type, Descriptor, VirtQueue, VIRTIO_DESC_F_NEXT, VIRTIO_DESC_F_WRITE, VIRTIO_MMIO_GUEST_FEATURES, VIRTIO_MMIO_GUEST_PAGE_SIZE, VIRTIO_MMIO_HOST_FEATURES, VIRTIO_MMIO_QUEUE_NOTIFY, VIRTIO_MMIO_QUEUE_NUM, VIRTIO_MMIO_QUEUE_NUM_MAX, VIRTIO_MMIO_QUEUE_PFN, VIRTIO_MMIO_QUEUE_SEL, VIRTIO_MMIO_STATUS, VIRTIO_MMIO_STATUS_ACKNOWLEDGE, VIRTIO_MMIO_STATUS_DRIVER, VIRTIO_MMIO_STATUS_DRIVER_OK, VIRTIO_MMIO_STATUS_FAILED, VIRTIO_MMIO_STATUS_FEATURES_OK, VIRTIO_QUEUE_SIZE}; use crate::strprint::u32_hex; use crate::trafficcontrol::TrafficControl; diff --git a/src/dev/virtio/input.rs b/src/dev/virtio/input.rs index 1036262..7b788f1 100644 --- a/src/dev/virtio/input.rs +++ b/src/dev/virtio/input.rs @@ -322,6 +322,7 @@ pub enum LinuxKeycode { } // keys that do not map directly are handled outside of this +#[cfg(feature = "keyboard_en_us")] const KEYMAP_ASCII: &[(LinuxKeycode, u8)] = &[ (LinuxKeycode::ESC, 0x1B), (LinuxKeycode::Key1, b'1'), @@ -377,3 +378,60 @@ const KEYMAP_ASCII: &[(LinuxKeycode, u8)] = &[ (LinuxKeycode::KPAsterisk, b'*'), (LinuxKeycode::Space, b' '), ]; + +#[cfg(feature = "keyboard_dvorak")] +const KEYMAP_ASCII: &[(LinuxKeycode, u8)] = &[ + (LinuxKeycode::ESC, 0x1B), + (LinuxKeycode::Key1, b'1'), + (LinuxKeycode::Key2, b'2'), + (LinuxKeycode::Key3, b'3'), + (LinuxKeycode::Key4, b'4'), + (LinuxKeycode::Key5, b'5'), + (LinuxKeycode::Key6, b'6'), + (LinuxKeycode::Key7, b'7'), + (LinuxKeycode::Key8, b'8'), + (LinuxKeycode::Key9, b'9'), + (LinuxKeycode::Key0, b'0'), + (LinuxKeycode::Minus, b'-'), + (LinuxKeycode::Equal, b'='), + (LinuxKeycode::Backspace, 0x7F), + (LinuxKeycode::Tab, 0x9), + (LinuxKeycode::Q, b'\''), + (LinuxKeycode::W, b','), + (LinuxKeycode::E, b'.'), + (LinuxKeycode::R, b'p'), + (LinuxKeycode::T, b'y'), + (LinuxKeycode::Y, b'f'), + (LinuxKeycode::U, b'g'), + (LinuxKeycode::I, b'c'), + (LinuxKeycode::O, b'r'), + (LinuxKeycode::P, b'l'), + (LinuxKeycode::LeftBracket, b'/'), + (LinuxKeycode::RightBracket, b'='), + (LinuxKeycode::Enter, b'\r'), + (LinuxKeycode::A, b'a'), + (LinuxKeycode::S, b'o'), + (LinuxKeycode::D, b'e'), + (LinuxKeycode::F, b'u'), + (LinuxKeycode::G, b'i'), + (LinuxKeycode::H, b'd'), + (LinuxKeycode::J, b'h'), + (LinuxKeycode::K, b't'), + (LinuxKeycode::L, b'n'), + (LinuxKeycode::Semicolon, b's'), + (LinuxKeycode::Apostrophe, b'-'), + (LinuxKeycode::Grave, b'`'), + (LinuxKeycode::Backslash, b'\\'), + (LinuxKeycode::Z, b';'), + (LinuxKeycode::X, b'q'), + (LinuxKeycode::C, b'j'), + (LinuxKeycode::V, b'k'), + (LinuxKeycode::B, b'x'), + (LinuxKeycode::N, b'b'), + (LinuxKeycode::M, b'm'), + (LinuxKeycode::Comma, b'w'), + (LinuxKeycode::Dot, b'v'), + (LinuxKeycode::Slash, b'z'), + (LinuxKeycode::KPAsterisk, b'*'), + (LinuxKeycode::Space, b' '), +];