I have been working on getting input from my g29 steering wheel in Rust using the sdl2 library, and have made it recognize the wheel, and register button events, but can't seem to get axis information
I have tried using example code from the rust-sdl2 github page with minor tweaks: rust-sdl2/joystick.rs at master 路 Rust-SDL2/rust-sdl2 路 GitHub
I am almost completely new to rust, so assume I don't have a clue how any of this stuff works, because that is probably acurate.
Thanks for any help in advance
Here is the code I am currently working with:
extern crate sdl2;
fn main() -> Result<(), String> {
let sdl_context = sdl2::init()?;
let joystick_subsystem = sdl_context.joystick()?;
let available = joystick_subsystem
.num_joysticks()
.map_err(|e| format!("can't enumerate joysticks: {}", e))?;
println!("{} joysticks available", available);
// Iterate over all available joysticks and stop once we manage to open one.
let mut joystick = (0..available)
.find_map(|id| match joystick_subsystem.open(id) {
Ok(c) => {
println!("Success: opened \"{}\"", c.name());
Some(c)
}
Err(e) => {
println!("failed: {:?}", e);
None
}
})
.expect("Couldn't open any joystick");
// Print the joystick's power level
println!(
"\"{}\" power level: {:?}",
joystick.name(),
joystick.power_level().map_err(|e| e.to_string())?
);
println!("Number of axes: {:?}", joystick.num_axes());
for event in sdl_context.event_pump()?.wait_iter() {
use sdl2::event::Event;
match event {
Event::JoyAxisMotion {
axis_idx,
value: val,
..
} => {
// Axis motion is an absolute value in the range
// [-32768, 32767]. Let's simulate a very rough dead
// zone to ignore spurious events.
let dead_zone = 10_000;
if val > dead_zone || val < -dead_zone {
println!("Axis {} moved to {}", axis_idx, val);
}
}
Event::JoyButtonDown { button_idx, .. } => {
println!("Button {} down", button_idx);
}
Event::JoyButtonUp { button_idx, .. } => {
println!("Button {} up", button_idx);
}
Event::JoyHatMotion { hat_idx, state, .. } => {
println!("Hat {} moved to {:?}", hat_idx, state)
}
Event::Quit { .. } => break,
_ => (),
}
}
Ok(())
}