I can haz Lua?

This commit is contained in:
2026-02-12 14:34:21 +01:00
parent dcb205394d
commit 4a56e7d1dd
7 changed files with 288 additions and 13 deletions

View File

@@ -24,7 +24,7 @@ pub const G13_LCD_BUF_SIZE: i32 = (G13_LCD_ROWS + 5) * G13_LCD_BYTES_PER_ROW;
#[derive(Clone)]
pub struct G13 {
interface: Interface,
img_buffer: [u8; G13_LCD_BUF_SIZE as usize + 8],
img_buffer: Arc<RwLock<[u8; G13_LCD_BUF_SIZE as usize + 8]>>,
state: Arc<RwLock<State>>,
}
@@ -107,7 +107,7 @@ impl G13 {
Ok(Self {
interface,
img_buffer,
img_buffer: Arc::new(RwLock::new(img_buffer)),
state: Arc::new(RwLock::new(Default::default())),
})
}
@@ -191,9 +191,11 @@ impl G13 {
}
pub fn render(&mut self) -> Result<(), Box<dyn std::error::Error>> {
let img_buffer = self.img_buffer.read().expect("Poisoned");
let mut buffer = [0u8; G13_LCD_BUF_SIZE as usize + 32 + 8];
buffer[0] = 0x03;
buffer[32..G13_LCD_BUF_SIZE as usize + 32 + 8].copy_from_slice(&self.img_buffer);
buffer[32..G13_LCD_BUF_SIZE as usize + 32 + 8].copy_from_slice(&(*img_buffer));
let mut w = self.interface.endpoint::<Interrupt, Out>(0x02)?.writer(64);
w.write_all(&buffer)?;
@@ -219,6 +221,7 @@ impl DrawTarget for G13 {
where
I: IntoIterator<Item = embedded_graphics_core::Pixel<Self::Color>>,
{
let mut img_buffer = self.img_buffer.write().expect("Poisoned");
for p in pixels {
if p.0.x < 0 || p.0.x > G13_LCD_COLUMNS - 1 || p.0.y < 0 || p.0.y > G13_LCD_ROWS - 1 {
continue;
@@ -228,9 +231,9 @@ impl DrawTarget for G13 {
let mask = 1 << (p.0.y.rem_euclid(8));
if p.1.is_on() {
self.img_buffer[offset as usize] |= mask;
img_buffer[offset as usize] |= mask;
} else {
self.img_buffer[offset as usize] &= !mask;
img_buffer[offset as usize] &= !mask;
}
}