input: add some sanity checks

This commit is contained in:
Megamouse 2021-02-28 04:32:08 +01:00
parent 10a55f16cc
commit 22b8cfd0ba
4 changed files with 14 additions and 10 deletions

View File

@ -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;

View File

@ -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>

View File

@ -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)
{

View File

@ -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>