/* * Copyright (c) KazushiMe * * This program is free software; you can redistribute it and/or modify it * under the terms and conditions of the GNU General Public License, * version 2, as published by the Free Software Foundation. * * This program is distributed in the hope it will be useful, but WITHOUT * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for * more details. * * You should have received a copy of the GNU General Public License * along with this program. If not, see . * */ #pragma once #include typedef enum { PsmPDC_NewPDO = 1, // Received new Power Data Object PsmPDC_NoPD = 2, // No Power Delivery source is detected PsmPDC_AcceptedRDO = 3 // Received and accepted Request Data Object } PsmChargeInfoPDC; // BM92T series typedef enum { PsmPowerRole_Sink = 1, PsmPowerRole_Source = 2 } PsmPowerRole; const char *PsmPowerRoleToStr(PsmPowerRole role); typedef enum { PsmInfoChargerType_None = 0, PsmInfoChargerType_PD = 1, PsmInfoChargerType_TypeC_1500mA = 2, PsmInfoChargerType_TypeC_3000mA = 3, PsmInfoChargerType_DCP = 4, PsmInfoChargerType_CDP = 5, PsmInfoChargerType_SDP = 6, PsmInfoChargerType_Apple_500mA = 7, PsmInfoChargerType_Apple_1000mA = 8, PsmInfoChargerType_Apple_2000mA = 9 } PsmInfoChargerType; const char *PsmInfoChargerTypeToStr(PsmInfoChargerType type); typedef enum { PsmFlags_NoHub = BIT(0), // If hub is disconnected PsmFlags_Rail = BIT(8), // At least one Joy-con is charging from rail PsmFlags_SPDSRC = BIT(12), // OTG PsmFlags_ACC = BIT(16) // Accessory } PsmChargeInfoFlags; typedef struct { int32_t InputCurrentLimit; // Input (Sink) current limit in mA int32_t VBUSCurrentLimit; // Output (Source/VBUS/OTG) current limit in mA int32_t ChargeCurrentLimit; // Battery charging current limit in mA (512mA when Docked, 768mA when BatteryTemperature < 17.0 C) int32_t ChargeVoltageLimit; // Battery charging voltage limit in mV (3952mV when BatteryTemperature >= 51.0 C) int32_t unk_x10; // Possibly an emum, getting the same value as PowerRole in all tested cases int32_t unk_x14; // Possibly flags PsmChargeInfoPDC PDCState; // Power Delivery Controller State int32_t BatteryTemperature; // Battery temperature in milli C int32_t RawBatteryCharge; // Raw battery charged capacity per cent-mille (i.e. 100% = 100000 pcm) int32_t VoltageAvg; // Voltage avg in mV (more in Notes) int32_t BatteryAge; // Battery age (capacity full / capacity design) per cent-mille (i.e. 100% = 100000 pcm) PsmPowerRole PowerRole; PsmInfoChargerType ChargerType; int32_t ChargerVoltageLimit; // Charger and external device voltage limit in mV int32_t ChargerCurrentLimit; // Charger and external device current limit in mA PsmChargeInfoFlags Flags; // Unknown flags } PsmChargeInfo; typedef enum { Psm_EnableBatteryCharging = 2, Psm_DisableBatteryCharging = 3, Psm_EnableFastBatteryCharging = 10, Psm_DisableFastBatteryCharging = 11, Psm_GetBatteryChargeInfoFields = 17, } IPsmServerCmd; bool PsmIsChargerConnected(const PsmChargeInfo *info); bool PsmIsCharging(const PsmChargeInfo *info); typedef enum { PsmBatteryState_Discharging, PsmBatteryState_ChargingPaused, PsmBatteryState_FastCharging } PsmBatteryState; PsmBatteryState PsmGetBatteryState(const PsmChargeInfo *info); const char *PsmGetBatteryStateIcon(const PsmChargeInfo *info);