Added msg command for http server
This commit is contained in:
80
src/main.rs
80
src/main.rs
@@ -15,8 +15,6 @@ use embedded_graphics::{
|
|||||||
};
|
};
|
||||||
use embedded_hal::delay::DelayNs;
|
use embedded_hal::delay::DelayNs;
|
||||||
use epd_waveshare::{color::Color, epd7in5_v2::Epd7in5, prelude::WaveshareDisplay};
|
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::{
|
use esp_idf_hal::{
|
||||||
delay::{Ets},
|
delay::{Ets},
|
||||||
gpio::{Gpio19, PinDriver},
|
gpio::{Gpio19, PinDriver},
|
||||||
@@ -193,11 +191,11 @@ fn main() -> anyhow::Result<()> {
|
|||||||
..Default::default()
|
..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();
|
let writer = do_update.clone();
|
||||||
httpserver.fn_handler("/", Method::Get, move |request| -> anyhow::Result<()> {
|
httpserver.fn_handler("/", Method::Get, move |request| -> anyhow::Result<()> {
|
||||||
|
|
||||||
*writer.write().unwrap() = true;
|
*writer.write().unwrap() = Some(Command::Timetable);
|
||||||
|
|
||||||
|
|
||||||
// Retrieve html String
|
// Retrieve html String
|
||||||
@@ -209,25 +207,49 @@ fn main() -> anyhow::Result<()> {
|
|||||||
Ok(())
|
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 {
|
loop {
|
||||||
delay.delay_ns(100);
|
delay.delay_ns(100);
|
||||||
|
|
||||||
if *do_update.read().unwrap(){
|
match &*do_update.read().unwrap(){
|
||||||
update_display_buffer(&mut display);
|
Some(Command::Timetable) => {
|
||||||
println!("Rendered to buffer");
|
update_display_buffer(&mut display);
|
||||||
epd7in5.wake_up(&mut spi, &mut delay)?;
|
println!("Rendered to buffer");
|
||||||
epd7in5.update_and_display_frame(&mut spi, &*display.buffer(), &mut delay)?;
|
epd7in5.wake_up(&mut spi, &mut delay)?;
|
||||||
println!("Updated frame");
|
epd7in5.update_and_display_frame(&mut spi, &*display.buffer(), &mut delay)?;
|
||||||
epd7in5.sleep(&mut spi, &mut delay)?;
|
println!("Updated frame");
|
||||||
println!("Sleep");
|
epd7in5.sleep(&mut spi, &mut delay)?;
|
||||||
unsafe {
|
println!("Sleep");
|
||||||
WAKEUP_COUNTER += 1;
|
unsafe {
|
||||||
}
|
WAKEUP_COUNTER += 1;
|
||||||
|
}
|
||||||
|
},
|
||||||
|
Some(Command::Message(msg)) => {
|
||||||
|
display_custom_message(&mut display, &msg);
|
||||||
|
|
||||||
if let Ok(mut writer) = do_update.try_write(){
|
epd7in5.wake_up(&mut spi, &mut delay)?;
|
||||||
*writer = false;
|
epd7in5.update_and_display_frame(&mut spi, &*display.buffer(), &mut delay)?;
|
||||||
println!("Successfully reset rw lock")
|
epd7in5.sleep(&mut spi, &mut delay)?;
|
||||||
}
|
}
|
||||||
|
None => continue
|
||||||
|
}
|
||||||
|
|
||||||
|
if let Ok(mut writer) = do_update.try_write(){
|
||||||
|
*writer = Option::<Command>::None;
|
||||||
|
println!("Successfully reset rw lock")
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -249,6 +271,13 @@ fn main() -> anyhow::Result<()> {
|
|||||||
Ok(())
|
Ok(())
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
#[derive(Clone)]
|
||||||
|
enum Command{
|
||||||
|
Timetable,
|
||||||
|
Message(String)
|
||||||
|
}
|
||||||
|
|
||||||
fn update_display_buffer(display: &mut epd_waveshare::epd7in5_v2::Display7in5){
|
fn update_display_buffer(display: &mut epd_waveshare::epd7in5_v2::Display7in5){
|
||||||
let (tt, now) = match fetch_data(){
|
let (tt, now) = match fetch_data(){
|
||||||
Ok(d) => d,
|
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>{
|
fn get_full_subject_name(shortname: &str) -> Option<&'static str>{
|
||||||
if shortname.len() < 2{
|
if shortname.len() < 2{
|
||||||
return None;
|
return None;
|
||||||
|
|||||||
Reference in New Issue
Block a user