Skip to content

Commit

Permalink
fix(HIDRaw): add get_capabilities for Steam and Lego controllers
Browse files Browse the repository at this point in the history
  • Loading branch information
ShadowApex committed Mar 26, 2024
1 parent 1ae015f commit 3a05272
Show file tree
Hide file tree
Showing 3 changed files with 91 additions and 3 deletions.
19 changes: 16 additions & 3 deletions src/input/source/hidraw.rs
Original file line number Diff line number Diff line change
Expand Up @@ -10,7 +10,7 @@ use zbus_macros::dbus_interface;

use crate::{
constants::BUS_PREFIX,
drivers,
drivers::{self},
input::{capability::Capability, composite_device::Command},
};

Expand Down Expand Up @@ -146,8 +146,21 @@ impl HIDRawDevice {

/// Returns capabilities of this input device
pub fn get_capabilities(&self) -> Result<Vec<Capability>, Box<dyn Error>> {
// TODO: This
Ok(vec![])
if self.info.vendor_id() == steam_deck::VID && self.info.product_id() == steam_deck::PID {
Ok(Vec::from(steam_deck::CAPABILITIES))
} else if self.info.vendor_id() == drivers::lego::driver::VID
&& (self.info.product_id() == drivers::lego::driver::PID
|| self.info.product_id() == drivers::lego::driver::PID2)
{
Ok(Vec::from(lego::CAPABILITIES))
} else {
Err(format!(
"No driver for hidraw interface found. VID: {}, PID: {}",
self.info.vendor_id(),
self.info.product_id()
)
.into())
}
}
}

Expand Down
37 changes: 37 additions & 0 deletions src/input/source/hidraw/lego.rs
Original file line number Diff line number Diff line change
Expand Up @@ -349,3 +349,40 @@ fn translate_event(event: lego::event::Event) -> NativeEvent {
_ => NativeEvent::new(Capability::NotImplemented, InputValue::Bool(false)),
}
}

/// List of all capabilities that the Legion Go driver implements
pub const CAPABILITIES: &[Capability] = &[
Capability::Gamepad(Gamepad::Button(GamepadButton::South)),
Capability::Gamepad(Gamepad::Button(GamepadButton::North)),
Capability::Gamepad(Gamepad::Button(GamepadButton::East)),
Capability::Gamepad(Gamepad::Button(GamepadButton::West)),
Capability::Gamepad(Gamepad::Button(GamepadButton::Start)),
Capability::Gamepad(Gamepad::Button(GamepadButton::Select)),
Capability::Gamepad(Gamepad::Button(GamepadButton::Guide)),
Capability::Gamepad(Gamepad::Button(GamepadButton::QuickAccess)),
Capability::Gamepad(Gamepad::Button(GamepadButton::DPadDown)),
Capability::Gamepad(Gamepad::Button(GamepadButton::DPadUp)),
Capability::Gamepad(Gamepad::Button(GamepadButton::DPadLeft)),
Capability::Gamepad(Gamepad::Button(GamepadButton::DPadRight)),
Capability::Gamepad(Gamepad::Button(GamepadButton::LeftBumper)),
Capability::Gamepad(Gamepad::Button(GamepadButton::LeftTrigger)),
Capability::Gamepad(Gamepad::Button(GamepadButton::LeftStick)),
Capability::Gamepad(Gamepad::Button(GamepadButton::LeftPaddle1)),
Capability::Gamepad(Gamepad::Button(GamepadButton::LeftPaddle2)),
Capability::Gamepad(Gamepad::Button(GamepadButton::RightBumper)),
Capability::Gamepad(Gamepad::Button(GamepadButton::RightTrigger)),
Capability::Gamepad(Gamepad::Button(GamepadButton::RightStick)),
Capability::Gamepad(Gamepad::Button(GamepadButton::RightPaddle1)),
Capability::Gamepad(Gamepad::Button(GamepadButton::RightPaddle2)),
Capability::Gamepad(Gamepad::Button(GamepadButton::RightPaddle3)),
Capability::Gamepad(Gamepad::Axis(GamepadAxis::LeftStick)),
Capability::Gamepad(Gamepad::Axis(GamepadAxis::RightStick)),
Capability::Gamepad(Gamepad::Trigger(GamepadTrigger::LeftTrigger)),
Capability::Gamepad(Gamepad::Trigger(GamepadTrigger::RightTrigger)),
Capability::Mouse(Mouse::Motion),
Capability::Mouse(Mouse::Button(MouseButton::Left)),
Capability::Mouse(Mouse::Button(MouseButton::Right)),
Capability::Mouse(Mouse::Button(MouseButton::Middle)),
Capability::Mouse(Mouse::Button(MouseButton::Extra1)),
Capability::Mouse(Mouse::Button(MouseButton::Extra2)),
];
38 changes: 38 additions & 0 deletions src/input/source/hidraw/steam_deck.rs
Original file line number Diff line number Diff line change
Expand Up @@ -380,3 +380,41 @@ fn translate_event(event: steam_deck::event::Event) -> NativeEvent {
},
}
}

/// List of all capabilities that the Steam Deck driver implements
pub const CAPABILITIES: &[Capability] = &[
Capability::Gamepad(Gamepad::Button(GamepadButton::South)),
Capability::Gamepad(Gamepad::Button(GamepadButton::North)),
Capability::Gamepad(Gamepad::Button(GamepadButton::East)),
Capability::Gamepad(Gamepad::Button(GamepadButton::West)),
Capability::Gamepad(Gamepad::Button(GamepadButton::Start)),
Capability::Gamepad(Gamepad::Button(GamepadButton::Select)),
Capability::Gamepad(Gamepad::Button(GamepadButton::Guide)),
Capability::Gamepad(Gamepad::Button(GamepadButton::QuickAccess)),
Capability::Gamepad(Gamepad::Button(GamepadButton::DPadDown)),
Capability::Gamepad(Gamepad::Button(GamepadButton::DPadUp)),
Capability::Gamepad(Gamepad::Button(GamepadButton::DPadLeft)),
Capability::Gamepad(Gamepad::Button(GamepadButton::DPadRight)),
Capability::Gamepad(Gamepad::Button(GamepadButton::LeftBumper)),
Capability::Gamepad(Gamepad::Button(GamepadButton::LeftTrigger)),
Capability::Gamepad(Gamepad::Button(GamepadButton::LeftStick)),
Capability::Gamepad(Gamepad::Button(GamepadButton::LeftPaddle1)),
Capability::Gamepad(Gamepad::Button(GamepadButton::LeftPaddle2)),
Capability::Gamepad(Gamepad::Button(GamepadButton::RightBumper)),
Capability::Gamepad(Gamepad::Button(GamepadButton::RightTrigger)),
Capability::Gamepad(Gamepad::Button(GamepadButton::RightStick)),
Capability::Gamepad(Gamepad::Button(GamepadButton::RightPaddle1)),
Capability::Gamepad(Gamepad::Button(GamepadButton::RightPaddle2)),
Capability::Gamepad(Gamepad::Button(GamepadButton::RightTouchpadTouch)),
Capability::Gamepad(Gamepad::Button(GamepadButton::LeftTouchpadTouch)),
Capability::Gamepad(Gamepad::Button(GamepadButton::RightTouchpadPress)),
Capability::Gamepad(Gamepad::Button(GamepadButton::LeftTouchpadPress)),
Capability::Gamepad(Gamepad::Button(GamepadButton::RightStickTouch)),
Capability::Gamepad(Gamepad::Button(GamepadButton::LeftStickTouch)),
Capability::Gamepad(Gamepad::Axis(GamepadAxis::LeftStick)),
Capability::Gamepad(Gamepad::Axis(GamepadAxis::RightStick)),
Capability::Gamepad(Gamepad::Trigger(GamepadTrigger::LeftTrigger)),
Capability::Gamepad(Gamepad::Trigger(GamepadTrigger::RightTrigger)),
Capability::Gamepad(Gamepad::Accelerometer),
Capability::Gamepad(Gamepad::Gyro),
];

0 comments on commit 3a05272

Please sign in to comment.