libnx  v4.2.0
psm.h
Go to the documentation of this file.
1 /**
2  * @file psm.h
3  * @brief PSM service IPC wrapper.
4  * @author XorTroll, endrift, and yellows8
5  * @copyright libnx Authors
6  */
7 #pragma once
8 #include "../types.h"
9 #include "../sf/service.h"
10 #include "../kernel/event.h"
11 
12 typedef enum {
13  PsmChargerType_Unconnected = 0, ///< No charger
14  PsmChargerType_EnoughPower = 1, ///< Full supported power
15  PsmChargerType_LowPower = 2, ///< Lower power supported USB-PD mode
16  PsmChargerType_NotSupported = 3, ///< No common supported USB-PD modes
18 
19 typedef enum {
20  PsmBatteryVoltageState_NeedsShutdown = 0, ///< Power state should transition to shutdown
21  PsmBatteryVoltageState_NeedsSleep = 1, ///< Power state should transition to sleep
22  PsmBatteryVoltageState_NoPerformanceBoost = 2, ///< Performance boost modes cannot be entered
23  PsmBatteryVoltageState_Normal = 3, ///< Everything is normal
25 
26 /// IPsmSession
27 typedef struct {
28  Service s;
29  Event StateChangeEvent; ///< autoclear=false
30 } PsmSession;
31 
32 /// Initialize psm.
33 Result psmInitialize(void);
34 
35 /// Exit psm.
36 void psmExit(void);
37 
38 /// Gets the Service object for the actual psm service session.
40 
41 Result psmGetBatteryChargePercentage(u32 *out);
42 Result psmGetChargerType(PsmChargerType *out);
43 Result psmGetBatteryVoltageState(PsmBatteryVoltageState *out);
44 Result psmGetRawBatteryChargePercentage(double *out);
45 Result psmIsEnoughPowerSupplied(bool *out);
46 Result psmGetBatteryAgePercentage(double *out);
47 
48 /**
49  * @brief Wrapper func which opens a PsmSession and handles event setup.
50  * @note Uses the actual BindStateChangeEvent cmd internally.
51  * @note The event is not signalled on BatteryChargePercentage changes.
52  * @param[out] s PsmSession object.
53  * @param[in] ChargerType Passed to SetChargerTypeChangeEventEnabled.
54  * @param[in] PowerSupply Passed to SetPowerSupplyChangeEventEnabled.
55  * @param[in] BatteryVoltage Passed to SetBatteryVoltageStateChangeEventEnabled.
56  */
57 Result psmBindStateChangeEvent(PsmSession* s, bool ChargerType, bool PowerSupply, bool BatteryVoltage);
58 
59 /// Wait on the Event setup by \ref psmBindStateChangeEvent.
61 
62 /// Cleanup version of \ref psmBindStateChangeEvent. Must be called by the user once the PsmSession is done being used.
PsmSession::StateChangeEvent
Event StateChangeEvent
autoclear=false
Definition: psm.h:29
psmBindStateChangeEvent
Result psmBindStateChangeEvent(PsmSession *s, bool ChargerType, bool PowerSupply, bool BatteryVoltage)
Wrapper func which opens a PsmSession and handles event setup.
Event
Kernel-mode event structure.
Definition: event.h:13
psmExit
void psmExit(void)
Exit psm.
PsmBatteryVoltageState_NeedsSleep
@ PsmBatteryVoltageState_NeedsSleep
Power state should transition to sleep.
Definition: psm.h:21
PsmChargerType_EnoughPower
@ PsmChargerType_EnoughPower
Full supported power.
Definition: psm.h:14
PsmBatteryVoltageState
PsmBatteryVoltageState
Definition: psm.h:19
u32
uint32_t u32
32-bit unsigned integer.
Definition: types.h:21
PsmChargerType
PsmChargerType
Definition: psm.h:12
u64
uint64_t u64
64-bit unsigned integer.
Definition: types.h:22
PsmBatteryVoltageState_Normal
@ PsmBatteryVoltageState_Normal
Everything is normal.
Definition: psm.h:23
Result
u32 Result
Function error code result type.
Definition: types.h:44
PsmSession
IPsmSession.
Definition: psm.h:27
psmGetServiceSession
Service * psmGetServiceSession(void)
Gets the Service object for the actual psm service session.
psmUnbindStateChangeEvent
Result psmUnbindStateChangeEvent(PsmSession *s)
Cleanup version of psmBindStateChangeEvent. Must be called by the user once the PsmSession is done be...
psmInitialize
Result psmInitialize(void)
Initialize psm.
PsmBatteryVoltageState_NoPerformanceBoost
@ PsmBatteryVoltageState_NoPerformanceBoost
Performance boost modes cannot be entered.
Definition: psm.h:22
Service
Service object structure.
Definition: service.h:13
psmWaitStateChangeEvent
Result psmWaitStateChangeEvent(PsmSession *s, u64 timeout)
Wait on the Event setup by psmBindStateChangeEvent.
PsmBatteryVoltageState_NeedsShutdown
@ PsmBatteryVoltageState_NeedsShutdown
Power state should transition to shutdown.
Definition: psm.h:20
PsmChargerType_LowPower
@ PsmChargerType_LowPower
Lower power supported USB-PD mode.
Definition: psm.h:15
PsmChargerType_NotSupported
@ PsmChargerType_NotSupported
No common supported USB-PD modes.
Definition: psm.h:16
PsmChargerType_Unconnected
@ PsmChargerType_Unconnected
No charger.
Definition: psm.h:13