1use crate::interface::G29Interface;
7use std::{
8 sync::{Arc, Mutex},
9 thread::{self, JoinHandle},
10};
11
12#[derive(Debug)]
15pub struct Controller {
16 pub g29: Arc<Mutex<G29Interface>>,
17 reading_thread: Option<JoinHandle<()>>,
18}
19
20impl Controller {
21 pub fn new() -> Self {
23 Self {
24 g29: Arc::new(Mutex::new(G29Interface::new())),
25 reading_thread: None,
26 }
27 }
28 pub fn start_pumping(&mut self) {
30 let local_g29 = self.g29.clone();
31 self.reading_thread = Some(thread::spawn(move || {
32 local_g29.lock().unwrap().read_loop();
33 }));
34 println!("thread_start_spawn");
35 }
36
37 pub fn stop_pumping(&mut self) {
39 if let Some(handle) = self.reading_thread.take() {
40 handle.join().unwrap();
41 } else {
42 println!("No Thread spawned");
43 }
44 }
45}