feat(input/linux): DualSense adaptive trigger support (#3738)

This commit is contained in:
ABeltramo
2025-03-27 00:16:20 +01:00
committed by GitHub
parent c4d991c8f7
commit f65bb842ff
4 changed files with 56 additions and 1 deletions

View File

@@ -106,6 +106,7 @@ namespace platf {
rumble_triggers, ///< Rumble triggers
set_motion_event_state, ///< Set motion event state
set_rgb_led, ///< Set RGB LED
set_adaptive_triggers, ///< Set adaptive triggers
};
struct gamepad_feedback_msg_t {
@@ -142,6 +143,14 @@ namespace platf {
return msg;
}
static gamepad_feedback_msg_t make_adaptive_triggers(std::uint16_t id, uint8_t event_flags, uint8_t type_left, uint8_t type_right, const std::array<uint8_t, 10> &left, const std::array<uint8_t, 10> &right) {
gamepad_feedback_msg_t msg;
msg.type = gamepad_feedback_e::set_adaptive_triggers;
msg.id = id;
msg.data.adaptive_triggers = {.event_flags = event_flags, .type_left = type_left, .type_right = type_right, .left = left, .right = right};
return msg;
}
gamepad_feedback_e type;
std::uint16_t id;
@@ -166,6 +175,15 @@ namespace platf {
std::uint8_t g;
std::uint8_t b;
} rgb_led;
struct {
uint16_t controllerNumber;
uint8_t event_flags;
uint8_t type_left;
uint8_t type_right;
std::array<uint8_t, 10> left;
std::array<uint8_t, 10> right;
} adaptive_triggers;
} data;
};

View File

@@ -152,6 +152,10 @@ namespace platf::gamepad {
gamepad->last_rgb_led = msg;
});
(*ds5).set_on_trigger_effect([feedback_queue, idx = id.clientRelativeIndex](const inputtino::PS5Joypad::TriggerEffect &trigger_effect) {
feedback_queue->raise(gamepad_feedback_msg_t::make_adaptive_triggers(idx, trigger_effect.event_flags, trigger_effect.type_left, trigger_effect.type_right, trigger_effect.left, trigger_effect.right));
});
// Activate the motion sensors
feedback_queue->raise(gamepad_feedback_msg_t::make_motion_event_state(id.clientRelativeIndex, LI_MOTION_TYPE_ACCEL, 100));
feedback_queue->raise(gamepad_feedback_msg_t::make_motion_event_state(id.clientRelativeIndex, LI_MOTION_TYPE_GYRO, 100));