I can haz Lua?
This commit is contained in:
@@ -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;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user