ddgo-pnp-controller/src/main.rs
2025-03-23 21:21:45 +01:00

56 lines
1.8 KiB
Rust

mod controller;
use std::io::Result;
use std::process::Command;
use std::thread::sleep;
use std::time::Duration;
use controller::physical::{set_lamp, set_rumble};
fn main() -> Result<()> {
match controller::physical::init() {
Ok(dev) => {
// Wait 3 seconds and get current state of the controller
println!("ddgo-pnp-controller: Press a button to select the controller model...");
sleep(Duration::from_secs(3));
let mut controller_state = Default::default();
controller::physical::get_state(&mut controller_state, &dev);
// Check selected controller model
if let Some(controller_model) = controller::emulated::set_model(&controller_state) {
// Stop main game
stop_game();
// Vibrate to end selection mode
set_rumble(true);
sleep(Duration::from_millis(500));
set_rumble(false);
loop {
// Fetch events from input devices
controller::physical::get_state(&mut controller_state, &dev);
// Send input to virtual controller
controller::emulated::set_state(&mut controller_state, &controller_model);
// Update lamp and rumble
set_lamp(controller_state.lamp);
set_rumble(controller_state.rumble);
// Wait between cycles
sleep(Duration::from_millis(5));
}
}
return Result::Ok(());
}
Err(_e) => println!("ddgo-pnp-controller: ERROR: Could not read input devices! Exiting."),
}
Ok(())
}
fn stop_game() {
Command::new("/etc/init.d/S99dgtype3")
.arg("stop")
.output()
.ok();
}