use std::sync::Arc;
use ddevmem::{register_map, DevMem};
use tokio::sync::Mutex;
register_map! {
pub unsafe map GpioRegs (u32) {
0x00 =>
rw data: u32,
0x04 =>
rw dir: u32,
0x08 =>
rw ier: u32,
0x0C =>
rw isr: u32
}
}
#[tokio::main(flavor = "current_thread")]
async fn main() {
let devmem = unsafe { DevMem::new(0x0, Some(256)).unwrap() };
let regs = unsafe { GpioRegs::new(Arc::new(devmem)).unwrap() };
let regs = Arc::new(Mutex::new(regs));
let app = axum::Router::new().nest(
"/",
ddevmem::web::WebUi::new()
.add("gpio", regs)
.with_auth(|user, pass| async move {
ddevmem::web::ct_eq(&user, "admin") & ddevmem::web::ct_eq(&pass, "secret")
})
.build(),
);
let listener = tokio::net::TcpListener::bind("0.0.0.0:3000").await.unwrap();
println!("Register map web UI (with auth) at http://localhost:3000/");
println!("Credentials: admin / secret");
axum::serve(listener, app).await.unwrap();
}