make all syscalls ffi compat

This commit is contained in:
2025-10-05 18:24:44 -06:00
parent af238b2847
commit ddcdd5942a
4 changed files with 73 additions and 14 deletions

View File

@@ -1,6 +1,6 @@
use abi_sys::{
DrawIterAbi, FileLen, GenRand, ListDir, LockDisplay, PrintAbi, ReadFile, RngRequest, SleepAbi,
keyboard::*,
CPixel, DrawIterAbi, FileLen, GenRand, ListDir, LockDisplay, PrintAbi, ReadFile, RngRequest,
SleepAbi, keyboard::*,
};
use alloc::{string::ToString, vec::Vec};
use core::sync::atomic::Ordering;
@@ -43,10 +43,12 @@ pub extern "C" fn lock_display(lock: bool) {
const _: DrawIterAbi = draw_iter;
// TODO: maybe return result
pub extern "C" fn draw_iter(pixels: *const Pixel<Rgb565>, len: usize) {
pub extern "C" fn draw_iter(cpixels: *const CPixel, len: usize) {
// SAFETY: caller guarantees `ptr` is valid for `len` bytes
let pixels = unsafe { core::slice::from_raw_parts(pixels, len) };
unsafe { FRAMEBUFFER.draw_iter(pixels.iter().copied()).unwrap() }
let cpixels = unsafe { core::slice::from_raw_parts(cpixels, len) };
let iter = cpixels.iter().copied().map(|c: CPixel| c.into());
unsafe { FRAMEBUFFER.draw_iter(iter).unwrap() }
}
pub static mut KEY_CACHE: Queue<KeyEvent, 32> = Queue::new();