mirror of
https://github.com/libsdl-org/SDL.git
synced 2025-10-26 12:27:44 +00:00
Fixed power state reporting for the Nintendo Joy-Con Charging Grip
This commit is contained in:
@@ -315,6 +315,8 @@ typedef struct
|
||||
Uint64 m_ulIMUUpdateIntervalNS;
|
||||
Uint64 m_ulTimestampNS;
|
||||
bool m_bVerticalMode;
|
||||
SDL_PowerState m_ePowerState;
|
||||
int m_nPowerPercent;
|
||||
|
||||
SwitchInputOnlyControllerStatePacket_t m_lastInputOnlyState;
|
||||
SwitchSimpleStatePacket_t m_lastSimpleState;
|
||||
@@ -2583,21 +2585,29 @@ static void HandleFullControllerState(SDL_Joystick *joystick, SDL_DriverSwitch_C
|
||||
* LSB of the battery nibble is used to report charging.
|
||||
* The battery level is reported from 0(empty)-8(full)
|
||||
*/
|
||||
SDL_PowerState state;
|
||||
int charging = (packet->controllerState.ucBatteryAndConnection & 0x10);
|
||||
int level = (packet->controllerState.ucBatteryAndConnection & 0xE0) >> 4;
|
||||
int percent = (int)SDL_roundf((level / 8.0f) * 100.0f);
|
||||
|
||||
if (charging) {
|
||||
if (level == 8) {
|
||||
state = SDL_POWERSTATE_CHARGED;
|
||||
ctx->m_ePowerState = SDL_POWERSTATE_CHARGED;
|
||||
} else {
|
||||
state = SDL_POWERSTATE_CHARGING;
|
||||
ctx->m_ePowerState = SDL_POWERSTATE_CHARGING;
|
||||
}
|
||||
} else {
|
||||
state = SDL_POWERSTATE_ON_BATTERY;
|
||||
ctx->m_ePowerState = SDL_POWERSTATE_ON_BATTERY;
|
||||
}
|
||||
ctx->m_nPowerPercent = (int)SDL_roundf((level / 8.0f) * 100.0f);
|
||||
|
||||
if (!ctx->device->parent) {
|
||||
SDL_PowerState state = ctx->m_ePowerState;
|
||||
int percent = ctx->m_nPowerPercent;
|
||||
SDL_SendJoystickPowerInfo(joystick, state, percent);
|
||||
} else if (ctx->m_eControllerType == k_eSwitchDeviceInfoControllerType_JoyConRight) {
|
||||
SDL_DriverSwitch_Context *other = (SDL_DriverSwitch_Context *)ctx->device->parent->children[0]->context;
|
||||
SDL_PowerState state = (SDL_PowerState)SDL_min(ctx->m_ePowerState, other->m_ePowerState);
|
||||
int percent = SDL_min(ctx->m_nPowerPercent, other->m_nPowerPercent);
|
||||
SDL_SendJoystickPowerInfo(joystick, state, percent);
|
||||
}
|
||||
SDL_SendJoystickPowerInfo(joystick, state, percent);
|
||||
|
||||
if (ctx->m_bReportSensors) {
|
||||
bool bHasSensorData = (packet->imuState[0].sAccelZ != 0 ||
|
||||
|
||||
Reference in New Issue
Block a user