mirror of
https://github.com/dolphin-emu/dolphin.git
synced 2025-04-02 04:20:22 +00:00
ControllerInterface: Exposse DSU client battery level as an input.
This commit is contained in:
parent
48fd27cdab
commit
f0534cabc6
@ -22,11 +22,18 @@ namespace ciface
|
|||||||
// range, used for periodic haptic effects though often ignored by devices
|
// range, used for periodic haptic effects though often ignored by devices
|
||||||
// TODO: Make this configurable.
|
// TODO: Make this configurable.
|
||||||
constexpr int RUMBLE_PERIOD_MS = 10;
|
constexpr int RUMBLE_PERIOD_MS = 10;
|
||||||
|
|
||||||
// This needs to be at least as long as the longest rumble that might ever be played.
|
// This needs to be at least as long as the longest rumble that might ever be played.
|
||||||
// Too short and it's going to stop in the middle of a long effect.
|
// Too short and it's going to stop in the middle of a long effect.
|
||||||
// Infinite values are invalid for ramp effects and probably not sensible.
|
// Infinite values are invalid for ramp effects and probably not sensible.
|
||||||
constexpr int RUMBLE_LENGTH_MS = 1000 * 10;
|
constexpr int RUMBLE_LENGTH_MS = 1000 * 10;
|
||||||
|
|
||||||
|
// All inputs (other than accel/gyro) return 1.0 as their maximum value.
|
||||||
|
// Battery inputs will almost always be mapped to the "Battery" setting which is a percentage.
|
||||||
|
// If someone actually wants to map a battery input to a regular control they can divide by 100.
|
||||||
|
// I think this is better than requiring multiplication by 100 for the most common usage.
|
||||||
|
constexpr ControlState BATTERY_INPUT_MAX_VALUE = 100.0;
|
||||||
|
|
||||||
namespace Core
|
namespace Core
|
||||||
{
|
{
|
||||||
class Device
|
class Device
|
||||||
|
@ -102,6 +102,33 @@ private:
|
|||||||
|
|
||||||
using GyroInput = AccelerometerInput;
|
using GyroInput = AccelerometerInput;
|
||||||
|
|
||||||
|
class BatteryInput final : public Input
|
||||||
|
{
|
||||||
|
using BatteryState = Proto::DsBattery;
|
||||||
|
|
||||||
|
public:
|
||||||
|
BatteryInput(const BatteryState& battery) : m_battery(battery) {}
|
||||||
|
|
||||||
|
std::string GetName() const override { return "Battery"; }
|
||||||
|
|
||||||
|
ControlState GetState() const override
|
||||||
|
{
|
||||||
|
switch (m_battery)
|
||||||
|
{
|
||||||
|
case BatteryState::Charging:
|
||||||
|
case BatteryState::Charged:
|
||||||
|
return BATTERY_INPUT_MAX_VALUE;
|
||||||
|
default:
|
||||||
|
return ControlState(m_battery) / ControlState(BatteryState::Full) * BATTERY_INPUT_MAX_VALUE;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
bool IsDetectable() override { return false; }
|
||||||
|
|
||||||
|
private:
|
||||||
|
const BatteryState& m_battery;
|
||||||
|
};
|
||||||
|
|
||||||
public:
|
public:
|
||||||
void UpdateInput() override;
|
void UpdateInput() override;
|
||||||
|
|
||||||
@ -355,6 +382,8 @@ Device::Device(Proto::DsModel model, int index) : m_model{model}, m_index{index}
|
|||||||
AddInput(new GyroInput("Gyro Roll Left", m_gyro.y, 1));
|
AddInput(new GyroInput("Gyro Roll Left", m_gyro.y, 1));
|
||||||
AddInput(new GyroInput("Gyro Yaw Right", m_gyro.z, -1));
|
AddInput(new GyroInput("Gyro Yaw Right", m_gyro.z, -1));
|
||||||
AddInput(new GyroInput("Gyro Yaw Left", m_gyro.z, 1));
|
AddInput(new GyroInput("Gyro Yaw Left", m_gyro.z, 1));
|
||||||
|
|
||||||
|
AddInput(new BatteryInput(m_pad_data.battery_status));
|
||||||
}
|
}
|
||||||
|
|
||||||
std::string Device::GetName() const
|
std::string Device::GetName() const
|
||||||
|
Loading…
x
Reference in New Issue
Block a user