Added msg command for http server
This commit is contained in:
58
src/main.rs
58
src/main.rs
@@ -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;
|
||||
|
||||
Reference in New Issue
Block a user