use std::sync::Arc;
use ddevmem::{register_map, DevMem};
use tokio::sync::Mutex;
register_map! {
pub unsafe map PwmRegs (u32) {
0x00 =>
rw cr: u32 {
ch_en: 0..=3,
psc: 4..=6
},
0x04 =>
rw period: u32,
0x08 =>
rw duty: u32,
0x0C =>
ro sr: u32 {
running: 0
}
}
}
#[tokio::main(flavor = "current_thread")]
async fn main() {
let devmem = unsafe { DevMem::new(0x0, Some(256)).unwrap() };
let mut regs = unsafe { PwmRegs::new(Arc::new(devmem)).unwrap() };
regs.set_cr_ch_en(0b0101);
regs.set_cr_psc(3);
regs.set_period(1000);
regs.set_duty(250);
let regs = Arc::new(Mutex::new(regs));
let app = axum::Router::new().nest("/", ddevmem::web::WebUi::new().add("pwm", regs).build());
let listener = tokio::net::TcpListener::bind("0.0.0.0:3000").await.unwrap();
println!("Register map web UI at http://localhost:3000/");
axum::serve(listener, app).await.unwrap();
}