mirror of
https://github.com/RPCS3/rpcs3.git
synced 2025-02-24 00:40:06 +00:00
input: add some sanity checks
This commit is contained in:
parent
10a55f16cc
commit
22b8cfd0ba
@ -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)
|
||||
{
|
||||
std::shared_ptr<DS4Device> device = get_hid_device(padId);
|
||||
if (device == nullptr || device->hidDevice == nullptr)
|
||||
if (!device || !device->hidDevice || !device->config)
|
||||
return;
|
||||
|
||||
// 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
|
||||
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;
|
||||
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)
|
||||
{
|
||||
@ -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_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 lowBattery = ds4_dev->battery_level < 2;
|
||||
const bool isBlinking = ds4_dev->led_delay_on > 0 || ds4_dev->led_delay_off > 0;
|
||||
const bool wireless = ds4_dev->cable_state == 0;
|
||||
const bool low_battery = ds4_dev->battery_level < 2;
|
||||
const bool is_blinking = ds4_dev->led_delay_on > 0 || ds4_dev->led_delay_off > 0;
|
||||
|
||||
// Blink LED when battery is low
|
||||
if (config->led_low_battery_blink)
|
||||
{
|
||||
// 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_off = 0;
|
||||
ds4_dev->new_output_data = true;
|
||||
}
|
||||
// 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_off = 100;
|
||||
|
@ -11,9 +11,6 @@ public:
|
||||
bool bt_controller{false};
|
||||
bool has_calib_data{false};
|
||||
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>
|
||||
|
@ -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)
|
||||
if (r >= 0 && g >= 0 && b >= 0 && r <= 255 && g <= 255 && b <= 255)
|
||||
{
|
||||
|
@ -39,6 +39,9 @@ public:
|
||||
u8 small_motor{0};
|
||||
u8 led_delay_on{0};
|
||||
u8 led_delay_off{0};
|
||||
u8 battery_level{0};
|
||||
u8 last_battery_level{0};
|
||||
u8 cable_state{0};
|
||||
};
|
||||
|
||||
template <class Device>
|
||||
|
Loading…
x
Reference in New Issue
Block a user