Added msg command for http server

This commit is contained in:
zenonet
2026-02-20 00:40:48 +01:00
parent 9cec79191c
commit b11b91c77d

View File

@@ -15,8 +15,6 @@ use embedded_graphics::{
};
use embedded_hal::delay::DelayNs;
use epd_waveshare::{color::Color, epd7in5_v2::Epd7in5, prelude::WaveshareDisplay};
use esp_idf_hal::delay::Delay;
use esp_idf_hal::modem::Modem;
use esp_idf_hal::{
delay::{Ets},
gpio::{Gpio19, PinDriver},
@@ -193,11 +191,11 @@ fn main() -> anyhow::Result<()> {
..Default::default()
})?;
let do_update = Arc::new(RwLock::new(false));
let do_update = Arc::new(RwLock::new(Option::<Command>::None));
let writer = do_update.clone();
httpserver.fn_handler("/", Method::Get, move |request| -> anyhow::Result<()> {
*writer.write().unwrap() = true;
*writer.write().unwrap() = Some(Command::Timetable);
// Retrieve html String
@@ -209,10 +207,25 @@ fn main() -> anyhow::Result<()> {
Ok(())
})?;
let writer = do_update.clone();
httpserver.fn_handler("/msg", Method::Get, move |request| -> anyhow::Result<()> {
*writer.write().unwrap() = Some(Command::Message(request.header("msg").unwrap().to_string()));
// Retrieve html String
let html = String::from("OK");
// Respond with OK status
let mut response = request.into_ok_response()?;
// Return Requested Object (Index Page)
response.write(html.as_bytes())?;
Ok(())
})?;
loop {
delay.delay_ns(100);
if *do_update.read().unwrap(){
match &*do_update.read().unwrap(){
Some(Command::Timetable) => {
update_display_buffer(&mut display);
println!("Rendered to buffer");
epd7in5.wake_up(&mut spi, &mut delay)?;
@@ -223,13 +236,22 @@ fn main() -> anyhow::Result<()> {
unsafe {
WAKEUP_COUNTER += 1;
}
},
Some(Command::Message(msg)) => {
display_custom_message(&mut display, &msg);
epd7in5.wake_up(&mut spi, &mut delay)?;
epd7in5.update_and_display_frame(&mut spi, &*display.buffer(), &mut delay)?;
epd7in5.sleep(&mut spi, &mut delay)?;
}
None => continue
}
if let Ok(mut writer) = do_update.try_write(){
*writer = false;
*writer = Option::<Command>::None;
println!("Successfully reset rw lock")
}
}
}
@@ -249,6 +271,13 @@ fn main() -> anyhow::Result<()> {
Ok(())
}
#[derive(Clone)]
enum Command{
Timetable,
Message(String)
}
fn update_display_buffer(display: &mut epd_waveshare::epd7in5_v2::Display7in5){
let (tt, now) = match fetch_data(){
Ok(d) => d,
@@ -289,6 +318,21 @@ fn update_display_buffer(display: &mut epd_waveshare::epd7in5_v2::Display7in5){
}
fn display_custom_message(display: &mut epd_waveshare::epd7in5_v2::Display7in5, msg: &str){
display.clear(Color::Black).unwrap();
let text_style = U8g2TextStyle::new(u8g2_fonts::fonts::u8g2_font_profont22_mr, Color::White);
let display_area = display.bounding_box();
let text = Text::new(msg, Point::zero(), &text_style);
LinearLayout::vertical(Chain::new(text))
.with_alignment(horizontal::Center)
.arrange()
.align_to(&display_area, horizontal::Center, vertical::Center)
.draw(display)
.unwrap();
}
fn get_full_subject_name(shortname: &str) -> Option<&'static str>{
if shortname.len() < 2{
return None;