mirror of
https://github.com/Djeeberjr/fw-anwesenheit.git
synced 2025-07-02 17:14:17 +00:00
merge
This commit is contained in:
commit
095887e13d
1463
Cargo.lock
generated
1463
Cargo.lock
generated
File diff suppressed because it is too large
Load Diff
@ -7,6 +7,11 @@ edition = "2024"
|
|||||||
chrono = { version = "0.4.40", features = ["serde"] }
|
chrono = { version = "0.4.40", features = ["serde"] }
|
||||||
gpio = "0.4.1"
|
gpio = "0.4.1"
|
||||||
regex = "1.11.1"
|
regex = "1.11.1"
|
||||||
|
<<<<<<< HEAD
|
||||||
rppal = "0.22.1"
|
rppal = "0.22.1"
|
||||||
serde = { version = "1.0.219", features = ["derive"] }
|
serde = { version = "1.0.219", features = ["derive"] }
|
||||||
serde_json = "1.0.140"
|
serde_json = "1.0.140"
|
||||||
|
=======
|
||||||
|
rocket = "0.5.1"
|
||||||
|
tokio = { version = "1.44.2", features = ["full"] }
|
||||||
|
>>>>>>> eb39b09632efb1568079352e3d639edc79df65fd
|
||||||
|
40
src/main.rs
40
src/main.rs
@ -1,3 +1,4 @@
|
|||||||
|
<<<<<<< HEAD
|
||||||
use pm3::run_pm3;
|
use pm3::run_pm3;
|
||||||
|
|
||||||
mod parser;
|
mod parser;
|
||||||
@ -8,3 +9,42 @@ mod buzzer;
|
|||||||
fn main() {
|
fn main() {
|
||||||
run_pm3().unwrap();
|
run_pm3().unwrap();
|
||||||
}
|
}
|
||||||
|
=======
|
||||||
|
use pm3::{pm3_mock, run_pm3};
|
||||||
|
use tokio::sync::mpsc;
|
||||||
|
use webserver::start_webserver;
|
||||||
|
|
||||||
|
mod id_store;
|
||||||
|
mod parser;
|
||||||
|
mod pm3;
|
||||||
|
mod webserver;
|
||||||
|
|
||||||
|
#[tokio::main]
|
||||||
|
async fn main() {
|
||||||
|
let (tx, mut rx) = mpsc::channel::<String>(32);
|
||||||
|
|
||||||
|
tokio::spawn(async move {
|
||||||
|
match pm3_mock(tx).await {
|
||||||
|
Ok(()) => {
|
||||||
|
println!("PM3 exited with an zero error code");
|
||||||
|
}
|
||||||
|
Err(e) => {
|
||||||
|
println!("PM3 failed to run: {}", e);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
|
tokio::spawn(async move {
|
||||||
|
while let Some(line) = rx.recv().await {
|
||||||
|
println!("Got from channel: {}", line);
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
|
match start_webserver().await {
|
||||||
|
Ok(()) => {}
|
||||||
|
Err(e) => {
|
||||||
|
eprintln!("Failed to start webserver: {}", e);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
>>>>>>> eb39b09632efb1568079352e3d639edc79df65fd
|
||||||
|
65
src/pm3.rs
65
src/pm3.rs
@ -1,3 +1,4 @@
|
|||||||
|
<<<<<<< HEAD
|
||||||
use std::error::Error;
|
use std::error::Error;
|
||||||
use std::process::{Command, Stdio};
|
use std::process::{Command, Stdio};
|
||||||
use std::io::{self, BufRead};
|
use std::io::{self, BufRead};
|
||||||
@ -36,3 +37,67 @@ pub fn run_pm3() -> Result<(), Box<dyn Error>> {
|
|||||||
Err("pm3 had non zero exit code".into())
|
Err("pm3 had non zero exit code".into())
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
=======
|
||||||
|
use std::error::Error;
|
||||||
|
use std::io::{self, BufRead};
|
||||||
|
use std::process::{Command, Stdio};
|
||||||
|
use tokio::time::{Duration, sleep};
|
||||||
|
|
||||||
|
use tokio::sync::mpsc;
|
||||||
|
|
||||||
|
pub async fn run_pm3(tx: mpsc::Sender<String>) -> Result<(), Box<dyn Error>> {
|
||||||
|
let mut cmd = Command::new("stdbuf")
|
||||||
|
.arg("-oL")
|
||||||
|
.arg("pm3")
|
||||||
|
.arg("-c")
|
||||||
|
.arg("lf hitag reader -@")
|
||||||
|
.stdout(Stdio::piped())
|
||||||
|
.spawn()?;
|
||||||
|
|
||||||
|
let stdout = cmd.stdout.take().ok_or("Failed to get stdout")?;
|
||||||
|
let reader = io::BufReader::new(stdout);
|
||||||
|
|
||||||
|
for line_result in reader.lines() {
|
||||||
|
match line_result {
|
||||||
|
Ok(line) => {
|
||||||
|
let parse_result = super::parser::parse_line(&line);
|
||||||
|
if let Some(uid) = parse_result {
|
||||||
|
match tx.send(uid).await {
|
||||||
|
Ok(()) => {}
|
||||||
|
Err(e) => {
|
||||||
|
eprintln!("Failed to send to channel: {}", e);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
Err(e) => {
|
||||||
|
eprintln!("{}", e);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
let status = cmd.wait().expect("Failed to wait on child");
|
||||||
|
|
||||||
|
if status.success() {
|
||||||
|
Ok(())
|
||||||
|
} else {
|
||||||
|
Err("pm3 had non zero exit code".into())
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
pub async fn pm3_mock(tx: mpsc::Sender<String>) -> Result<(), Box<dyn Error>> {
|
||||||
|
#![allow(while_true)]
|
||||||
|
while true {
|
||||||
|
match tx.send("F1409618".to_owned()).await {
|
||||||
|
Ok(()) => {}
|
||||||
|
Err(e) => {
|
||||||
|
eprintln!("Failed to send to channel: {}", e);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
sleep(Duration::from_millis(1000)).await;
|
||||||
|
}
|
||||||
|
|
||||||
|
Ok(())
|
||||||
|
}
|
||||||
|
>>>>>>> eb39b09632efb1568079352e3d639edc79df65fd
|
||||||
|
11
src/webserver.rs
Normal file
11
src/webserver.rs
Normal file
@ -0,0 +1,11 @@
|
|||||||
|
use rocket::{get, routes};
|
||||||
|
|
||||||
|
pub async fn start_webserver() -> Result<(), rocket::Error> {
|
||||||
|
rocket::build().mount("/", routes![index]).launch().await?;
|
||||||
|
Ok(())
|
||||||
|
}
|
||||||
|
|
||||||
|
#[get("/")]
|
||||||
|
fn index() -> &'static str {
|
||||||
|
"Hello, world!"
|
||||||
|
}
|
Loading…
x
Reference in New Issue
Block a user