mirror of
https://github.com/RPCS3/rpcs3.git
synced 2025-07-05 06:21:26 +12:00
input: add some sanity checks
This commit is contained in:
parent
10a55f16cc
commit
22b8cfd0ba
4 changed files with 14 additions and 10 deletions
|
@ -196,7 +196,7 @@ u32 ds4_pad_handler::get_battery_level(const std::string& padId)
|
||||||
void ds4_pad_handler::SetPadData(const std::string& padId, u32 largeMotor, u32 smallMotor, s32 r, s32 g, s32 b, bool battery_led, u32 battery_led_brightness)
|
void ds4_pad_handler::SetPadData(const std::string& padId, u32 largeMotor, u32 smallMotor, s32 r, s32 g, s32 b, bool battery_led, u32 battery_led_brightness)
|
||||||
{
|
{
|
||||||
std::shared_ptr<DS4Device> device = get_hid_device(padId);
|
std::shared_ptr<DS4Device> device = get_hid_device(padId);
|
||||||
if (device == nullptr || device->hidDevice == nullptr)
|
if (!device || !device->hidDevice || !device->config)
|
||||||
return;
|
return;
|
||||||
|
|
||||||
// Set the device's motor speeds to our requested values 0-255
|
// Set the device's motor speeds to our requested values 0-255
|
||||||
|
@ -218,6 +218,8 @@ void ds4_pad_handler::SetPadData(const std::string& padId, u32 largeMotor, u32 s
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
ensure(device->config);
|
||||||
|
|
||||||
// Set new LED color
|
// Set new LED color
|
||||||
if (battery_led)
|
if (battery_led)
|
||||||
{
|
{
|
||||||
|
@ -709,7 +711,7 @@ ds4_pad_handler::DataStatus ds4_pad_handler::get_data(DS4Device* device)
|
||||||
|
|
||||||
const int battery_offset = offset + DS4_INPUT_REPORT_BATTERY_OFFSET;
|
const int battery_offset = offset + DS4_INPUT_REPORT_BATTERY_OFFSET;
|
||||||
device->cable_state = (buf[battery_offset] >> 4) & 0x01;
|
device->cable_state = (buf[battery_offset] >> 4) & 0x01;
|
||||||
device->battery_level = buf[battery_offset] & 0x0F;
|
device->battery_level = buf[battery_offset] & 0x0F; // 0 - 9 while unplugged, 0 - 10 while plugged in, 11 charge complete
|
||||||
|
|
||||||
if (device->has_calib_data)
|
if (device->has_calib_data)
|
||||||
{
|
{
|
||||||
|
@ -871,22 +873,22 @@ void ds4_pad_handler::apply_pad_data(const std::shared_ptr<PadDevice>& device, c
|
||||||
const int speed_large = config->enable_vibration_motor_large ? pad->m_vibrateMotors[idx_l].m_value : vibration_min;
|
const int speed_large = config->enable_vibration_motor_large ? pad->m_vibrateMotors[idx_l].m_value : vibration_min;
|
||||||
const int speed_small = config->enable_vibration_motor_small ? pad->m_vibrateMotors[idx_s].m_value : vibration_min;
|
const int speed_small = config->enable_vibration_motor_small ? pad->m_vibrateMotors[idx_s].m_value : vibration_min;
|
||||||
|
|
||||||
const bool wireless = ds4_dev->cable_state < 1;
|
const bool wireless = ds4_dev->cable_state == 0;
|
||||||
const bool lowBattery = ds4_dev->battery_level < 2;
|
const bool low_battery = ds4_dev->battery_level < 2;
|
||||||
const bool isBlinking = ds4_dev->led_delay_on > 0 || ds4_dev->led_delay_off > 0;
|
const bool is_blinking = ds4_dev->led_delay_on > 0 || ds4_dev->led_delay_off > 0;
|
||||||
|
|
||||||
// Blink LED when battery is low
|
// Blink LED when battery is low
|
||||||
if (config->led_low_battery_blink)
|
if (config->led_low_battery_blink)
|
||||||
{
|
{
|
||||||
// we are now wired or have okay battery level -> stop blinking
|
// we are now wired or have okay battery level -> stop blinking
|
||||||
if (isBlinking && !(wireless && lowBattery))
|
if (is_blinking && !(wireless && low_battery))
|
||||||
{
|
{
|
||||||
ds4_dev->led_delay_on = 0;
|
ds4_dev->led_delay_on = 0;
|
||||||
ds4_dev->led_delay_off = 0;
|
ds4_dev->led_delay_off = 0;
|
||||||
ds4_dev->new_output_data = true;
|
ds4_dev->new_output_data = true;
|
||||||
}
|
}
|
||||||
// we are now wireless and low on battery -> blink
|
// we are now wireless and low on battery -> blink
|
||||||
else if (!isBlinking && wireless && lowBattery)
|
else if (!is_blinking && wireless && low_battery)
|
||||||
{
|
{
|
||||||
ds4_dev->led_delay_on = 100;
|
ds4_dev->led_delay_on = 100;
|
||||||
ds4_dev->led_delay_off = 100;
|
ds4_dev->led_delay_off = 100;
|
||||||
|
|
|
@ -11,9 +11,6 @@ public:
|
||||||
bool bt_controller{false};
|
bool bt_controller{false};
|
||||||
bool has_calib_data{false};
|
bool has_calib_data{false};
|
||||||
std::array<CalibData, CalibIndex::COUNT> calib_data{};
|
std::array<CalibData, CalibIndex::COUNT> calib_data{};
|
||||||
u8 battery_level{0};
|
|
||||||
u8 last_battery_level{0};
|
|
||||||
u8 cable_state{0};
|
|
||||||
};
|
};
|
||||||
|
|
||||||
class ds4_pad_handler final : public hid_pad_handler<DS4Device>
|
class ds4_pad_handler final : public hid_pad_handler<DS4Device>
|
||||||
|
|
|
@ -990,6 +990,8 @@ void dualsense_pad_handler::SetPadData(const std::string& padId, u32 largeMotor,
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
ensure(device->config);
|
||||||
|
|
||||||
// Set new LED color (see ds4_pad_handler)
|
// Set new LED color (see ds4_pad_handler)
|
||||||
if (r >= 0 && g >= 0 && b >= 0 && r <= 255 && g <= 255 && b <= 255)
|
if (r >= 0 && g >= 0 && b >= 0 && r <= 255 && g <= 255 && b <= 255)
|
||||||
{
|
{
|
||||||
|
|
|
@ -39,6 +39,9 @@ public:
|
||||||
u8 small_motor{0};
|
u8 small_motor{0};
|
||||||
u8 led_delay_on{0};
|
u8 led_delay_on{0};
|
||||||
u8 led_delay_off{0};
|
u8 led_delay_off{0};
|
||||||
|
u8 battery_level{0};
|
||||||
|
u8 last_battery_level{0};
|
||||||
|
u8 cable_state{0};
|
||||||
};
|
};
|
||||||
|
|
||||||
template <class Device>
|
template <class Device>
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue