input: add new buttons for Dualsense Edge

This commit is contained in:
Megamouse 2023-06-12 05:28:49 +02:00
parent 1bd9549e45
commit 84d2ad70e6
2 changed files with 40 additions and 2 deletions

View File

@ -129,7 +129,11 @@ dualsense_pad_handler::dualsense_pad_handler()
{ DualSenseKeyCodes::RSXNeg, "RS X-" },
{ DualSenseKeyCodes::RSXPos, "RS X+" },
{ DualSenseKeyCodes::RSYPos, "RS Y+" },
{ DualSenseKeyCodes::RSYNeg, "RS Y-" }
{ DualSenseKeyCodes::RSYNeg, "RS Y-" },
{ DualSenseKeyCodes::EdgeFnL, "FN L" },
{ DualSenseKeyCodes::EdgeFnR, "FN R" },
{ DualSenseKeyCodes::EdgeLB, "LB" },
{ DualSenseKeyCodes::EdgeRB, "RB" },
};
init_configs();
@ -252,6 +256,20 @@ void dualsense_pad_handler::check_add_device(hid_device* hidDevice, std::string_
device->has_calib_data = true;
device->path = path;
// Get feature set
if (const hid_device_info* info = hid_get_device_info(device->hidDevice))
{
if (info->product_id == SONY_DUALSENSE_ID_1.m_pid)
{
device->feature_set = DualSenseDevice::DualSenseFeatureSet::Edge;
dualsense_log.notice("check_add_device: device is DualSense Edge: vid=0x%x, pid=0x%x, path='%s'", info->vendor_id, info->product_id, path);
}
}
else
{
dualsense_log.warning("check_add_device: hid_get_device_info failed for determining feature set! Reason: %s", hid_error(hidDevice));
}
// Activate
if (send_output_report(device) == -1)
{
@ -789,6 +807,14 @@ std::unordered_map<u64, u16> dualsense_pad_handler::get_button_values(const std:
keyBuffer[DualSenseKeyCodes::TouchPad] = ((data & 0x02) != 0) ? 255 : 0;
keyBuffer[DualSenseKeyCodes::Mic] = ((data & 0x04) != 0) ? 255 : 0;
if (dualsense_dev->feature_set == DualSenseDevice::DualSenseFeatureSet::Edge)
{
keyBuffer[DualSenseKeyCodes::EdgeFnL] = ((data & 0x10) != 0) ? 255 : 0;
keyBuffer[DualSenseKeyCodes::EdgeFnR] = ((data & 0x20) != 0) ? 255 : 0;
keyBuffer[DualSenseKeyCodes::EdgeLB] = ((data & 0x40) != 0) ? 255 : 0;
keyBuffer[DualSenseKeyCodes::EdgeRB] = ((data & 0x80) != 0) ? 255 : 0;
}
return keyBuffer;
}

View File

@ -13,11 +13,18 @@ public:
Enhanced
};
enum class DualSenseFeatureSet
{
Normal,
Edge
};
bool bt_controller{false};
u8 bt_sequence{0};
bool has_calib_data{false};
std::array<CalibData, CalibIndex::COUNT> calib_data{};
DualSenseDataMode data_mode{DualSenseDataMode::Simple};
DualSenseFeatureSet feature_set{DualSenseFeatureSet::Normal};
bool init_lightbar{true};
bool update_lightbar{true};
bool update_player_leds{true};
@ -63,7 +70,12 @@ class dualsense_pad_handler final : public hid_pad_handler<DualSenseDevice>
RSXNeg,
RSXPos,
RSYNeg,
RSYPos
RSYPos,
EdgeFnL,
EdgeFnR,
EdgeLB,
EdgeRB,
};
public: