diff --git a/device-state/src/lib.rs b/device-state/src/lib.rs index a50d739..2ad276d 100644 --- a/device-state/src/lib.rs +++ b/device-state/src/lib.rs @@ -227,8 +227,10 @@ impl DeviceState { let question = self.question.as_ref()?; let title_line = if question.text.len() > 16 { - self.title_offset %= question.text.len() - 16; - OwnedStr::from_str(&question.text[self.title_offset..self.title_offset + 16]).unwrap() + // overscroll, should show spaces after the end + self.title_offset %= question.text.len() - 31; + let end = usize::min(self.title_offset + 16, question.text.len()); + OwnedStr::from_str(&question.text[self.title_offset..end]).unwrap() } else { OwnedStr::from_str(&question.text).unwrap() }; diff --git a/esp32/src/main.rs b/esp32/src/main.rs index 85682ef..21f60a8 100644 --- a/esp32/src/main.rs +++ b/esp32/src/main.rs @@ -3,6 +3,8 @@ extern crate alloc; +use alloc::borrow::ToOwned; +use alloc::string::String; use device_state::DeviceState; use embassy_executor::Spawner; use embassy_futures::select::{Either, select}; @@ -133,8 +135,9 @@ pub async fn tcp_write_loop( #[embassy_executor::task] pub async fn main_loop() { println!("Main loop started"); + let mut last = (String::new(), String::new()); loop { - embassy_time::Timer::after_millis(50).await; + embassy_time::Timer::after_millis(100).await; let mut state = STATE.lock().await; state.tick(); let lines = state.render_lines(); @@ -143,7 +146,15 @@ pub async fn main_loop() { let Some((title_line, second_line)) = lines else { continue; }; - println!("lcd: {} {}", title_line, second_line); + let rendered = ( + title_line.as_str().to_owned(), + second_line.as_str().to_owned(), + ); + if rendered == last { + continue; + } + last = rendered; + println!("lcd1: {}\nlcd2: {}", title_line, second_line); screen::overwrite_lcd(&title_line, &second_line).await; } } diff --git a/esp32/src/net.rs b/esp32/src/net.rs index 1f938f3..f506841 100644 --- a/esp32/src/net.rs +++ b/esp32/src/net.rs @@ -14,7 +14,7 @@ use esp_radio::wifi::sta::StationConfig; use esp_radio::wifi::{Config, ControllerConfig, scan::ScanConfig}; use crate::screen::overwrite_lcd; -use crate::{WIFI_NETWORK, WIFI_PASSWORD}; +use crate::{WIFI_NETWORK, WIFI_PASSWORD, main_loop}; use crate::{buffer::wait_for_config, tcp_read_loop, tcp_write_loop}; use crate::{reconnecting_state, reset_state}; @@ -68,6 +68,7 @@ pub async fn network_setup_task( seed, ); spawner.spawn(net_task(runner).expect("spawn net task")); + spawner.spawn(main_loop().expect("spawn main loop")); loop { loop { diff --git a/esp32/src/screen.rs b/esp32/src/screen.rs index 78e8714..27c548a 100644 --- a/esp32/src/screen.rs +++ b/esp32/src/screen.rs @@ -89,7 +89,9 @@ pub async fn lcd_display_task(config: LcdConfig) { for byte in &buffer.line1 { lcd.write(*byte); } + Timer::after_micros(500).await; lcd.set_position(0, 1); + Timer::after_micros(500).await; for byte in &buffer.line2 { lcd.write(*byte); }