Map keyboard to bépo

This commit is contained in:
2026-03-16 10:33:21 +01:00
parent baeea20aa7
commit 404a681254
9 changed files with 347 additions and 121 deletions

View File

@@ -7,7 +7,7 @@ use crate::{
virtio::{DeviceStatus, QUEUE_SIZE, VirtioPciCommonCfg, Virtqueue},
};
pub struct VirtioPciDriver<F: Fn(&VirtioInputEvent) = fn(&VirtioInputEvent)> {
pub struct VirtioPciDriver<S, F: Fn(&mut S, &VirtioInputEvent) = fn(&mut S, &VirtioInputEvent)> {
common_cfg: *mut VirtioPciCommonCfg,
notify_cfg: *mut u16,
isr_cfg: *mut u8,
@@ -18,6 +18,7 @@ pub struct VirtioPciDriver<F: Fn(&VirtioInputEvent) = fn(&VirtioInputEvent)> {
notify_off: u32, // Multiplier from PCI notify capability (used to compute notify address)
handle_event: F,
state: S,
}
#[repr(u16)]
@@ -84,8 +85,8 @@ impl VirtioInputEvent {
}
}
impl<F: Fn(&VirtioInputEvent)> VirtioPciDriver<F> {
pub const unsafe fn new(handle_event: F, queue_mem: &'static mut Virtqueue) -> Self {
impl<S, F: Fn(&mut S, &VirtioInputEvent)> VirtioPciDriver<S, F> {
pub const unsafe fn new(handle_event: F, state: S, queue_mem: &'static mut Virtqueue) -> Self {
Self {
common_cfg: core::ptr::null_mut(),
notify_cfg: core::ptr::null_mut(),
@@ -99,6 +100,7 @@ impl<F: Fn(&VirtioInputEvent)> VirtioPciDriver<F> {
last_used_idx: 0,
notify_off: 0,
handle_event,
state,
}
}
@@ -203,7 +205,7 @@ impl<F: Fn(&VirtioInputEvent)> VirtioPciDriver<F> {
let used_elem = &self.queue.used.ring[ring_slot];
let event = &self.event_pool[used_elem.id as usize];
(self.handle_event)(event);
(self.handle_event)(&mut self.state, event);
// Recyclage
let avail_head = self.queue.available.idx.load(Ordering::Relaxed) as usize % QUEUE_SIZE;