mirror of
https://git.alemi.dev/pc-monitor.git
synced 2024-11-14 03:29:21 +01:00
fix: floating point is like 6k!!! added cmd for display
adding a proper floating point operation added something like 6 kb to the resulting bin size, which is not acceptable, I'm pretty tight with the graphics library! Also added a separate packet/command for refreshing the display directly, and stopped redrawing the display for each led update. This allows for a mixed experience, with smooth leds with "hiccups" and a slow updating display.
This commit is contained in:
parent
2dfc051ef9
commit
ed96292606
2 changed files with 18 additions and 20 deletions
33
src/main.rs
33
src/main.rs
|
@ -63,6 +63,7 @@ fn main() -> ! {
|
|||
.build(),
|
||||
text_style: MonoTextStyle::new(&FONT_4X6, BinaryColor::On),
|
||||
bar_style: PrimitiveStyleBuilder::new()
|
||||
.stroke_width(1)
|
||||
.stroke_color(BinaryColor::On)
|
||||
.fill_color(BinaryColor::On)
|
||||
.build(),
|
||||
|
@ -94,12 +95,6 @@ fn main() -> ! {
|
|||
let mut pkt_builder = PacketBuilder::new();
|
||||
|
||||
// TODO put these in a struct
|
||||
let mut cpu1 : u8 = 0;
|
||||
let mut cpu2 : u8 = 0;
|
||||
let mut cpu3 : u8 = 0;
|
||||
let mut cpu4 : u8 = 0;
|
||||
let mut tx : u8 = 0;
|
||||
let mut rx : u8 = 0;
|
||||
|
||||
arduino_hal::delay_ms(25);
|
||||
cpu_leds.set_all(0);
|
||||
|
@ -121,21 +116,22 @@ fn main() -> ! {
|
|||
PacketId::SetLedsPacket => {
|
||||
if let Some(payload) = pkt.payload && payload.len() == 4 {
|
||||
cpu_leds.set_many(payload[0], payload[1], payload[2], payload[3]);
|
||||
if payload[0] != cpu1 { draw_cpu_bar(&mut display, 1, payload[0], &style); }
|
||||
if payload[1] != cpu2 { draw_cpu_bar(&mut display, 2, payload[1], &style); }
|
||||
if payload[2] != cpu3 { draw_cpu_bar(&mut display, 3, payload[2], &style); }
|
||||
if payload[3] != cpu4 { draw_cpu_bar(&mut display, 4, payload[3], &style); }
|
||||
cpu1 = payload[0]; cpu2 = payload[1]; cpu3 = payload[2]; cpu4 = payload[3];
|
||||
display.flush().unwrap();
|
||||
}
|
||||
},
|
||||
PacketId::NetStatePacket => {
|
||||
if let Some(payload) = pkt.payload && payload.len() == 2 {
|
||||
if payload[0] == 0 { led_tx.set_low() } else { led_tx.set_high() };
|
||||
if payload[1] == 0 { led_rx.set_low() } else { led_rx.set_high() };
|
||||
if payload[0] != tx { draw_network_bar(&mut display, NetDirection::TX, payload[0], &style) }
|
||||
if payload[1] != rx { draw_network_bar(&mut display, NetDirection::RX, payload[1], &style) }
|
||||
tx = payload[0]; rx = payload[1];
|
||||
}
|
||||
},
|
||||
PacketId::ScreenDrawPacket => {
|
||||
if let Some(payload) = pkt.payload && payload.len() == 6 {
|
||||
draw_cpu_bar(&mut display, 1, payload[0], &style);
|
||||
draw_cpu_bar(&mut display, 2, payload[1], &style);
|
||||
draw_cpu_bar(&mut display, 3, payload[2], &style);
|
||||
draw_cpu_bar(&mut display, 4, payload[3], &style);
|
||||
draw_network_bar(&mut display, NetDirection::TX, payload[4], &style);
|
||||
draw_network_bar(&mut display, NetDirection::RX, payload[5], &style);
|
||||
display.flush().unwrap();
|
||||
}
|
||||
},
|
||||
|
@ -151,9 +147,9 @@ fn main() -> ! {
|
|||
}
|
||||
|
||||
fn byte_to_height(val: u8, max: u8) -> u32 {
|
||||
// let t = (val >> 2) as u32; // TODO this is a cheap ass solution with awful precision!!!
|
||||
// return if t > max as u32 { max as u32 } else { t };
|
||||
return ((val as f32 / 255.0) * max as f32) as u32; // TODO get rid of floating point operations!
|
||||
let t = (val >> 2) as u32; // TODO this is a cheap ass solution with awful precision!!!
|
||||
return if t > max as u32 { max as u32 } else { t };
|
||||
// return ((val as f32 / 255.0) * max as f32) as u32; // TODO get rid of floating point operations!
|
||||
}
|
||||
|
||||
fn draw_ui(display: &mut Display, style: &DisplayStyle) {
|
||||
|
@ -168,7 +164,6 @@ fn draw_ui(display: &mut Display, style: &DisplayStyle) {
|
|||
Text::new("CPU4", Point::new(62, 6), style.text_style).draw(display).unwrap();
|
||||
Text::new("TX", Point::new(104, 6), style.text_style).draw(display).unwrap();
|
||||
Text::new("RX", Point::new(116, 6), style.text_style).draw(display).unwrap();
|
||||
|
||||
}
|
||||
|
||||
fn draw_cpu_bar(display: &mut Display, index: u8, value: u8, style: &DisplayStyle) {
|
||||
|
|
|
@ -6,6 +6,7 @@ pub enum PacketId {
|
|||
Reset = 0x00,
|
||||
SetLedsPacket = 0x01,
|
||||
NetStatePacket = 0x02,
|
||||
ScreenDrawPacket = 0x03,
|
||||
}
|
||||
|
||||
impl From<u8> for PacketId {
|
||||
|
@ -14,6 +15,7 @@ impl From<u8> for PacketId {
|
|||
0 => PacketId::Reset,
|
||||
1 => PacketId::SetLedsPacket,
|
||||
2 => PacketId::NetStatePacket,
|
||||
3 => PacketId::ScreenDrawPacket,
|
||||
_ => PacketId::Invalid,
|
||||
}
|
||||
}
|
||||
|
@ -55,7 +57,8 @@ impl PacketBuilder {
|
|||
PacketBuilderStep::ID => {
|
||||
let id = PacketId::from(byte);
|
||||
match id {
|
||||
PacketId::SetLedsPacket | PacketId::Reset | PacketId::NetStatePacket => {
|
||||
PacketId::SetLedsPacket | PacketId::Reset
|
||||
| PacketId::NetStatePacket | PacketId::ScreenDrawPacket => {
|
||||
self.id = id;
|
||||
self.step = PacketBuilderStep::SIZE;
|
||||
},
|
||||
|
|
Loading…
Reference in a new issue