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::RSXNeg, "RS X-" },
{ DualSenseKeyCodes::RSXPos, "RS X+" }, { DualSenseKeyCodes::RSXPos, "RS X+" },
{ DualSenseKeyCodes::RSYPos, "RS Y+" }, { 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(); init_configs();
@ -252,6 +256,20 @@ void dualsense_pad_handler::check_add_device(hid_device* hidDevice, std::string_
device->has_calib_data = true; device->has_calib_data = true;
device->path = path; 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 // Activate
if (send_output_report(device) == -1) 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::TouchPad] = ((data & 0x02) != 0) ? 255 : 0;
keyBuffer[DualSenseKeyCodes::Mic] = ((data & 0x04) != 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; return keyBuffer;
} }

View File

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