Fix input reading bug, module subdivision

This commit is contained in:
Marc Riera 2023-03-02 00:20:31 +01:00
parent 52a4d6eb62
commit 4c18e70ce8
6 changed files with 59 additions and 34 deletions

View file

@ -1,5 +1,4 @@
mod physical_controller;
mod virtual_controller;
mod controller;
mod state;
use std::io::Result;
@ -7,17 +6,18 @@ use std::process::Command;
use std::time::Duration;
use std::thread::sleep;
use virtual_controller::ControllerModel;
use controller::emulated::ControllerModel;
use controller::physical::{set_lamp,set_rumble};
fn main() -> Result<()> {
match physical_controller::init() {
match controller::physical::init() {
Ok(dev) => {
// Wait 3 seconds and get current state of the controller
println!("Press a button to select the controller model...");
sleep(Duration::from_secs(3));
let mut controller_state = Default::default();
physical_controller::get_state(&mut controller_state, &dev);
let controller_model = virtual_controller::set_model(&controller_state);
controller::physical::get_state(&mut controller_state, &dev);
let controller_model = controller::emulated::set_model(&controller_state);
// If no model selected, quit
if controller_model == ControllerModel::NONE {
@ -28,14 +28,23 @@ fn main() -> Result<()> {
stop_game();
// Vibrate to end selection mode
physical_controller::set_rumble(true);
set_rumble(true);
sleep(Duration::from_millis(500));
physical_controller::set_rumble(false);
set_rumble(false);
loop {
// Fetch events from input devices
physical_controller::get_state(&mut controller_state, &dev);
sleep(Duration::from_millis(100));
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(20));
}
},
Err(_e) => println!("ERROR: Could not read input devices! Exiting."),