Files
picocalc-os-rs/kernel/src/abi.rs

33 lines
891 B
Rust

use abi_sys::Syscall;
use defmt::info;
use embassy_futures::block_on;
use embedded_graphics::{
Drawable,
draw_target::DrawTarget,
pixelcolor::Rgb565,
prelude::{Point, RgbColor, Size},
primitives::{PrimitiveStyle, Rectangle, StyledDrawable},
};
use crate::display::FRAMEBUFFER;
#[allow(unused)]
pub extern "C" fn call_abi(call: *const Syscall) {
info!("called abi");
let call = unsafe { &*call };
match call {
Syscall::DrawIter { pixels, len } => {
// SAFETY: we're trusting the user program here
let slice = unsafe { core::slice::from_raw_parts(*pixels, *len) };
let framebuffer = block_on(FRAMEBUFFER.lock());
framebuffer
.borrow_mut()
.as_mut()
.unwrap()
.draw_iter(slice.iter().copied())
.unwrap();
}
}
}