dvorak support for freaks

This commit is contained in:
husky 2025-09-12 13:08:57 -07:00
parent 0ee0cd2ddd
commit c64f8d4de2
4 changed files with 62 additions and 5 deletions

View file

@ -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 = []

View file

@ -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

View file

@ -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;

View file

@ -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' '),
];