Difference between revisions of "PTM services"

From Nintendo Switch Brew
Jump to navigation Jump to search
Line 45: Line 45:
 
! Cmd || Name
 
! Cmd || Name
 
|-
 
|-
| 0 || [[#GetBatteryChargePercentage]]
+
| 0 || [[#GetBatteryChargePercentage|GetBatteryChargePercentage]]
 
|-
 
|-
| 1 || [[#GetChargerType]]
+
| 1 || [[#GetChargerType|GetChargerType]]
 
|-
 
|-
| 2 || [[#EnableBatteryCharging]]
+
| 2 || [[#EnableBatteryCharging|EnableBatteryCharging]]
 
|-
 
|-
| 3 || [[#DisableBatteryCharging]]
+
| 3 || [[#DisableBatteryCharging|DisableBatteryCharging]]
 
|-
 
|-
| 4 || [[#IsBatteryChargingEnabled]]
+
| 4 || [[#IsBatteryChargingEnabled|IsBatteryChargingEnabled]]
 
|-
 
|-
| 5 || [[#AcquireControllerPowerSupply]]
+
| 5 || [[#AcquireControllerPowerSupply|AcquireControllerPowerSupply]]
 
|-
 
|-
| 6 || [[#ReleaseControllerPowerSupply]]
+
| 6 || [[#ReleaseControllerPowerSupply|ReleaseControllerPowerSupply]]
 
|-
 
|-
| 7 || [[#OpenSession]]
+
| 7 || [[#OpenSession_2|OpenSession]]
 
|-
 
|-
| 8 || [[#EnableEnoughPowerChargeEmulation]]
+
| 8 || [[#EnableEnoughPowerChargeEmulation|EnableEnoughPowerChargeEmulation]]
 
|-
 
|-
| 9 || [[#DisableEnoughPowerChargeEmulation]]
+
| 9 || [[#DisableEnoughPowerChargeEmulation|DisableEnoughPowerChargeEmulation]]
 
|-
 
|-
| 10 || [[#EnableFastBatteryCharging]]
+
| 10 || [[#EnableFastBatteryCharging|EnableFastBatteryCharging]]
 
|-
 
|-
| 11 || [[#DisableFastBatteryCharging]]
+
| 11 || [[#DisableFastBatteryCharging|DisableFastBatteryCharging]]
 
|-
 
|-
| 12 || [[#GetBatteryVoltageState]]
+
| 12 || [[#GetBatteryVoltageState|GetBatteryVoltageState]]
 
|-
 
|-
| 13 || [[#GetRawBatteryChargePercentage]]
+
| 13 || [[#GetRawBatteryChargePercentage|GetRawBatteryChargePercentage]]
 
|-
 
|-
| 14 || [[#IsEnoughPowerSupplied]]
+
| 14 || [[#IsEnoughPowerSupplied|IsEnoughPowerSupplied]]
 
|-
 
|-
| 15 || [[#GetBatteryAgePercentage]]
+
| 15 || [[#GetBatteryAgePercentage|GetBatteryAgePercentage]]
 
|-
 
|-
| 16 || [[#GetBatteryChargeInfoEvent]]
+
| 16 || [[#GetBatteryChargeInfoEvent|GetBatteryChargeInfoEvent]]
 
|-
 
|-
| 17 || [[#GetBatteryChargeInfoFields]]
+
| 17 || [[#GetBatteryChargeInfoFields|GetBatteryChargeInfoFields]]
 
|-
 
|-
| 18 || [3.0.0+] [[#GetBatteryChargeCalibratedEvent]]
+
| 18 || [3.0.0+] [[#GetBatteryChargeCalibratedEvent|GetBatteryChargeCalibratedEvent]]
 
|}
 
|}
  
Line 148: Line 148:
 
! Cmd || Name
 
! Cmd || Name
 
|-
 
|-
| 0 || [[#BindStateChangeEvent]]
+
| 0 || [[#BindStateChangeEvent|BindStateChangeEvent]]
 
|-
 
|-
| 1 || [[#UnbindStateChangeEvent]]
+
| 1 || [[#UnbindStateChangeEvent|UnbindStateChangeEvent]]
 
|-
 
|-
| 2 || [[#SetChargerTypeChangeEventEnabled]]
+
| 2 || [[#SetChargerTypeChangeEventEnabled|SetChargerTypeChangeEventEnabled]]
 
|-
 
|-
| 3 || [[#SetPowerSupplyChangeEventEnabled]]
+
| 3 || [[#SetPowerSupplyChangeEventEnabled|SetPowerSupplyChangeEventEnabled]]
 
|-
 
|-
| 4 || [[#SetBatteryVoltageStateChangeEventEnabled]]
+
| 4 || [[#SetBatteryVoltageStateChangeEventEnabled|SetBatteryVoltageStateChangeEventEnabled]]
 
|}
 
|}
  
Line 211: Line 211:
 
! Cmd || Name
 
! Cmd || Name
 
|-
 
|-
| 0 || [[#GetTemperatureRange]]
+
| 0 || [[#GetTemperatureRange|GetTemperatureRange]]
 
|-
 
|-
| 1 || [[#GetTemperature]]
+
| 1 || [[#GetTemperature|GetTemperature]]
 
|-
 
|-
| 2 || [[#SetMeasurementMode]]
+
| 2 || [1.0.0-13.2.1] [[#SetMeasurementMode|SetMeasurementMode]]
 
|-
 
|-
| 3 || [[#GetTemperatureMilliC]]
+
| 3 || [1.0.0-13.2.1] [[#GetTemperatureMilliC|GetTemperatureMilliC]]
 
|-
 
|-
| 4 || [8.0.0+] ? (Takes a total of 4-bytes of input, returns an [[#IUnknown0]])
+
| 4 || [8.0.0+] [[#OpenSession_3|OpenSession]]
 
|}
 
|}
  
Line 240: Line 240:
 
The output is the temperature in MilliC.
 
The output is the temperature in MilliC.
  
== IUnknown0 ==
+
== OpenSession ==
Added with [8.0.0+].
+
Takes a total of 4-bytes of input. Returns an [[#ISession]].
 +
 
 +
== ISession ==
 +
This is "nn::ts::server::ISession".
 +
 
 +
This was added with [8.0.0+].
  
 
{| class="wikitable" border="1"
 
{| class="wikitable" border="1"
Line 249: Line 254:
 
| 0 ||  
 
| 0 ||  
 
|-
 
|-
| 1 ||  
+
| 1 || [8.0.0-13.2.1]
 
|-
 
|-
 
| 2 ||  
 
| 2 ||  
 
|-
 
|-
| 3 ||  
+
| 3 || [8.0.0-13.2.1]
 
|-
 
|-
 
| 4 || [10.0.0+]
 
| 4 || [10.0.0+]

Revision as of 17:27, 22 March 2022

fan

This is "nn::fan::detail::IManager".

Cmd Name
0 #OpenController

OpenController

Takes an input u32. Returns an output #IController.

IController

This is "nn::fan::detail::IController".

Cmd Name
0 SetRotationSpeedLevel
1 SetRotationSpeedLevelByDiff
2 GetRotationSpeedLevel
3 SetRotationRate
4 GetRotationRate
5 [1.0.0-6.2.0] EnableFan
6 [1.0.0-6.2.0] DisableFan
7 [1.0.0-6.2.0] GetActualRotationSpeedLevel

[7.0.0+] SetRotationSpeedLevelByDiff/SetRotationRate no longer takes any input. GetRotationRate no longer returns output. These were presumably replaced with new cmds?

psm

This is "nn::psm::IPsmServer".

Cmd Name
0 GetBatteryChargePercentage
1 GetChargerType
2 EnableBatteryCharging
3 DisableBatteryCharging
4 IsBatteryChargingEnabled
5 AcquireControllerPowerSupply
6 ReleaseControllerPowerSupply
7 OpenSession
8 EnableEnoughPowerChargeEmulation
9 DisableEnoughPowerChargeEmulation
10 EnableFastBatteryCharging
11 DisableFastBatteryCharging
12 GetBatteryVoltageState
13 GetRawBatteryChargePercentage
14 IsEnoughPowerSupplied
15 GetBatteryAgePercentage
16 GetBatteryChargeInfoEvent
17 GetBatteryChargeInfoFields
18 [3.0.0+] GetBatteryChargeCalibratedEvent

GetBatteryChargePercentage

No input. Returns an output u32.

GetChargerType

No input. Returns an output ChargerType.

EnableBatteryCharging

No input/output.

DisableBatteryCharging

No input/output.

IsBatteryChargingEnabled

No input. Returns an output bool.

AcquireControllerPowerSupply

No input/output.

ReleaseControllerPowerSupply

No input/output.

OpenSession

No input. Returns an output #IPsmSession.

EnableEnoughPowerChargeEmulation

No input/output.

DisableEnoughPowerChargeEmulation

No input/output.

EnableFastBatteryCharging

No input/output.

DisableFastBatteryCharging

No input/output.

GetBatteryVoltageState

No input. Returns an output BatteryVoltageState.

GetRawBatteryChargePercentage

No input. Returns an output double.

IsEnoughPowerSupplied

No input. Returns an output bool.

GetBatteryAgePercentage

No input. returns an output double.

GetBatteryChargeInfoEvent

No input. returns an output Event handle.

GetBatteryChargeInfoFields

No input. Returns an output BatteryChargeInfoFields.

GetBatteryChargeCalibratedEvent

No input. returns an output Event handle.

IPsmSession

This is "nn::psm::IPsmSession".

Cmd Name
0 BindStateChangeEvent
1 UnbindStateChangeEvent
2 SetChargerTypeChangeEventEnabled
3 SetPowerSupplyChangeEventEnabled
4 SetBatteryVoltageStateChangeEventEnabled

BindStateChangeEvent

No input. Returns an output Event handle with EventClearMode=0.

UnbindStateChangeEvent

No input/output.

SetChargerTypeChangeEventEnabled

Takes an input bool. No output.

SetPowerSupplyChangeEventEnabled

Takes an input bool. No output.

SetBatteryVoltageStateChangeEventEnabled

Takes an input bool. No output.

tc

This is "nn::tc::IManager".

Cmd Name
0 SetOperatingMode
1 [1.0.0-10.2.0] GetThermalEvent
2 IsActionAllowed
3 EnableVirtualTemperature
4 DisableVirtualTemperature
5 SetVirtualTemperature
6 EnableFanControl
7 DisableFanControl
8 IsFanControlEnabled
9 [5.0.0+] GetSkinTemperatureMilliC
10 [11.0.0+] LoadAndApplySettings

ts

This is "nn::ts::server::IMeasurementServer".

Cmd Name
0 GetTemperatureRange
1 GetTemperature
2 [1.0.0-13.2.1] SetMeasurementMode
3 [1.0.0-13.2.1] GetTemperatureMilliC
4 [8.0.0+] OpenSession

GetTemperatureRange

Takes an u8 #Location and returns an s32 minimum temperature + s32 maximum temperature.

The returned temperature values are in Celsius.

GetTemperature

Takes an u8 #Location and returns an output s32.

The output is the temperature in Celsius.

SetMeasurementMode

Takes an u8 #Location and an u8 MeasurementMode, no output.

GetTemperatureMilliC

Takes an u8 #Location and returns an output s32.

The output is the temperature in MilliC.

OpenSession

Takes a total of 4-bytes of input. Returns an #ISession.

ISession

This is "nn::ts::server::ISession".

This was added with [8.0.0+].

Cmd Name
0
1 [8.0.0-13.2.1]
2
3 [8.0.0-13.2.1]
4 [10.0.0+]

pcm

This is "nn::pcm::IManager".

[4.0.0+] This service was moved to nvdbgsvc and is only available to SDEV units.

Cmd Name
0 IsSupported
1 ReadCurrentPower
2 [4.0.0+] IsServiceEnabled
3 [4.0.0+] ReadCurrentVoltage

apm:am

This is "nn::apm::IManager".

This was added with [8.0.0+] and replaces the old apm service.

Cmd Name
0 #OpenSession
1 #GetPerformanceMode
6 [7.0.0+] #IsCpuOverclockEnabled

OpenSession

No input. Returns an output #ISession.

GetPerformanceMode

No input. Returns an output #PerformanceMode.

IsCpuOverclockEnabled

No input. Returns an output bool.

apm:sys

This is "nn::apm::ISystemManager".

Cmd Name
0 #RequestPerformanceMode
1 #GetPerformanceEvent
2 #GetThrottlingState
3 #GetLastThrottlingState
4 #ClearLastThrottlingState
5 [5.0.0+] #LoadAndApplySettings
6 [7.0.0+] #SetCpuBoostMode
7 [7.0.0+] #GetCurrentPerformanceConfiguration

RequestPerformanceMode

Takes an input #PerformanceMode. No output.

GetPerformanceEvent

Takes an input #EventTarget. Returns an Event handle with EventClearMode 0.

GetThrottlingState

No input. Returns an output #ThrottlingState.

GetLastThrottlingState

No input. Returns an output #ThrottlingState.

ClearLastThrottlingState

No input/output.

LoadAndApplySettings

No input/output.

SetCpuBoostMode

Takes an input #CpuBoostMode. No output.

GetCurrentPerformanceConfiguration

No input. Returns an output #PerformanceConfiguration (default value is 0x00020003).

ISession

This is "nn::apm::ISession".

Cmd Name
0 #SetPerformanceConfiguration
1 #GetPerformanceConfiguration
2 [8.0.0+] #SetCpuOverclockEnabled

SetPerformanceConfiguration

Takes an input #PerformanceMode and an input #PerformanceConfiguration. No output.

GetPerformanceConfiguration

Takes an input #PerformanceMode. Returns an output #PerformanceConfiguration.

SetCpuOverclockEnabled

Takes an input bool. No output.

fgm, fgm:0, fgm:1, fgm:2, fgm:3, fgm:4, fgm:5, fgm:6, fgm:7, fgm:9

These are "nn::fgm::sf::ISession".

Each service represents a different priority from 0 (Highest/Thermal) to 9 (Lowest). The "fgm" service represents priority 8 (Default).

[2.0.0+] Only "fgm", "fgm:0" and "fgm:9" are now valid.

Cmd Name
0 #Initialize

Initialize

No input. Returns an output #IRequest.

IRequest

This is "nn::fgm::sf::IRequest".

Cmd Name
0 Initialize
1 Set
2 Get
3 Cancel

Initialize

Takes a PID-descriptor, a ModuleId and a reserved input u64. Returns an Event handle with EventClearMode 0.

Set

Takes 2 u32s ClockRateMin and ClockRateMax. No output.

Get

No input. Returns an u32 ClockRateActual.

Cancel

No input/output.

fgm:dbg

This is "nn::fgm::sf::IDebugger".

Cmd Name
0 Initialize
1 Read
2 Cancel

Initialize

Takes the current process handle (0xFFFF8001) and an input u64 MemorySize. Returns an Event handle with EventClearMode 0.

Read

Takes a type-0x6 output buffer of DebugEntry. Returns three output s32s NumberReadOut, NumberLostOut and NumberRemainingOut.

Cancel

No input/output.

lbl

This is "nn::lbl::detail::ILblController".

[10.0.0+] This was moved from lbl.

[11.0.0+] this was moved into vi.

Cmd Name
0 SaveCurrentSetting
1 LoadCurrentSetting
2 SetCurrentBrightnessSetting
3 GetCurrentBrightnessSetting
4 ApplyCurrentBrightnessSettingToBacklight
5 GetBrightnessSettingAppliedToBacklight
6 SwitchBacklightOn
7 SwitchBacklightOff
8 GetBacklightSwitchStatus
9 EnableDimming
10 DisableDimming
11 IsDimmingEnabled
12 EnableAutoBrightnessControl
13 DisableAutoBrightnessControl
14 IsAutoBrightnessControlEnabled
15 SetAmbientLightSensorValue
16 GetAmbientLightSensorValue
17 SetBrightnessReflectionDelayLevel
18 GetBrightnessReflectionDelayLevel
19 SetCurrentBrightnessMapping
20 GetCurrentBrightnessMapping
21 SetCurrentAmbientLightSensorMapping
22 GetCurrentAmbientLightSensorMapping
23 [3.0.0+] IsAmbientLightSensorAvailable
24 [3.0.0+] SetCurrentBrightnessSettingForVrMode
25 [3.0.0+] GetCurrentBrightnessSettingForVrMode
26 [3.0.0+] EnableVrMode
27 [3.0.0+] DisableVrMode
28 [3.0.0+] IsVrModeEnabled
29 [7.0.0+] IsAutoBrightnessControlSupported

ChargerType

This is "nn::psm::ChargerType".

Value Name
0 Unconnected
1 EnoughPower
2 LowPower
3 NotSupported

BatteryVoltageState

This is "nn::psm::BatteryVoltageState".

Value Name
0 ShutdownRequired
1 SleepRequired
2 BoostPerformanceModeProhibited
3 Good

BatteryChargeInfoFields

This is a 0x40-byte struct.

Offset Size Description
0x00 0x4 u32. Input (Sink) current limit in mA
0x04 0x4 u32. Output (Source/Vbus/OTG) current limit in mA
0x08 0x4 u32. Battery charging current limit in mA
0x0C 0x4 u32. Battery charging voltage limit in mV
0x10 0x4 enum, same as power-role? Always 1 except when OTG where it becomes 2
0x14 0x4 Bit field (bit8: Enable Battery Charging)
0x18 0x4 u32. Charging limits state based on battery temperature
0x1C 0x4 u32. Battery Temperature (milli C)
0x20 0x4 u32. Capacity now per cent-mille (i.e. 100% = 100000 pcm)
0x24 0x4 u32. Voltage avg in mV
0x28 0x4 u32. Battery age (capacity full / capacity design) per cent-mille (i.e. 100% = 100000 pcm)
0x2C 0x4 enum. Power role (0: Unknown, 1: Sink, 2: Source)
0x30 0x4 enum. #Charger_Type
0x34 0x4 u32. Charger voltage limit in mV
0x38 0x4 u32. Charger current limit in mA
0x3C 0x4 Bit field (bit0: potentially no hub, bit8: Joy-con charging, bit12: OTG)

Charger_Type

Value Name
0 Unknown
1 PD
2 Type-C 1.5A
3 Type-C 3.0A
4 DCP
5 CDP
6 SDP
7 Apple 500mA
8 Apple 1000mA
9 Apple 2000mA

Location

Value Name
0 Internal
1 External

CpuBoostMode

This is "nn::apm::CpuBoostMode".

Value Description
0 Disabled.
1 Boost CPU. Additionally, throttle GPU to minimum.

Use performance configurations 0x92220009 and 0x9222000A, or 0x9222000B and 0x9222000C.

2 Conserve power. Only throttle GPU to minimum.

Use performance configurations 0x9222000B and 0x9222000C.

PerformanceMode

This is "nn::apm::PerformanceMode".

Value Description
-1 Invalid
0 Normal
1 Boost

PerformanceConfiguration

This is "nn::apm::PerformanceConfiguration".

Value Description CPU clock (MHz) GPU clock (MHz) Memory clock (MHz)
0x00000000 Invalid 0 0 0
0x00010000 Cpu1020MhzGpu384Mhz 1020.0 384.0 1600.0
0x00010001 Cpu1020MhzGpu768Mhz 1020.0 768.0 1600.0
0x00010002 Cpu1224MhzGpu691Mhz 1224.0 691.2 1600.0
0x00020000 Cpu1020MhzGpu230Mhz 1020.0 230.4 1600.0
0x00020001 Cpu1020MhzGpu307Mhz 1020.0 307.2 1600.0
0x00020002 Cpu1224MhzGpu230Mhz 1224.0 230.4 1600.0
0x00020003 Cpu1020MhzGpu307MhzEmc1331Mhz 1020.0 307.2 1331.2
0x00020004 Cpu1020MhzGpu384MhzEmc1331Mhz 1020.0 384.0 1331.2
0x00020005 Cpu1020MhzGpu307MhzEmc1065Mhz 1020.0 307.2 1065.6
0x00020006 Cpu1020MhzGpu384MhzEmc1065Mhz 1020.0 384.0 1065.6
0x92220007 Cpu1020MhzGpu460MhzEmc1600Mhz 1020.0 460.8 1600.0
0x92220008 Cpu1020MhzGpu460MhzEmc1331Mhz 1020.0 460.8 1331.2
[7.0.0+] 0x92220009 Cpu1785MhzGpu76MhzEmc1600Mhz 1785.0 76.8 1600.0
[7.0.0+] 0x9222000A Cpu1785MhzGpu76MhzEmc1331Mhz 1785.0 76.8 1331.2
[7.0.0+] 0x9222000B Cpu1020MhzGpu76MhzEmc1600Mhz 1020.0 76.8 1600.0
[7.0.0+] 0x9222000C Cpu1020MhzGpu76MhzEmc1331Mhz 1020.0 76.8 1331.2

Configurations 0x10001 and 0x20000 are only available while docked. Configurations 0x10002 and 0x20002 are only available for SDEV units.

EventTarget

This is "nn::apm::EventTarget".

Value Description
0 PerformanceModeChanged
1 SleepRequiredByLowVoltage

ThrottlingState

This is "nn::apm::ThrottlingState".

Offset Size Description
0x0 0x8 DurationNanoSeconds
0x8 0x4 ThrottlingRateCpuDividend
0xC 0x4 ThrottlingRateCpuDivisor
0x10 0x4 ThrottlingRateGpuDividend
0x14 0x4 ThrottlingRateGpuDivisor
0x18 0x4 ThrottleStatus
0x1C 0x4 CpuPSkipStatus
0x20 0x4 GpuPSkipStatus
0x24 0x1 Enabled
0x25 0x1 Invoked
0x26 0x2 Reserved

Module

This is "nn::fgm::Module".

Name Block
0 Cpu
1 Gpu
2 Emc
3 SysBus
4 Mselect
5 Nvdec
6 Nvenc
7 Nvjpg
8 Test

EventId

This is "nn::fgm::EventId".

Name Block
0 Set
1 Unset
2 Completion

DebugEntry

This is "nn::fgm::DebugEntry".

Offset Size Description
0x0 0x4 EventId
0x4 0x4 ModuleId
0x8 0x8 Timestamp
0x10 0x40 RequestEntry (EventId = Set), empty (EventId = Unset) or CompletionEntry (EventId = Completion)

RequestEntry

This is "nn::fgm::RequestEntry".

Offset Size Description
0x0 0x8 ProcessId
0x8 0x4 Priority
0xC 0x4 ClockRateMin
0x10 0x4 ClockRateMax
0x14 0x2C Reserved

CompletionEntry

This is "nn::fgm::CompletionEntry".

Offset Size Description
0x0 0x4 ClockRateMin
0x4 0x4 ClockRateMax
0x8 0x4 ClockRateActual
0xC 0x34 Reserved

Settings

Key Size Notes
background_download_stress_testing_storage strlen "sdcard", "builtin", "system".
battery_draining_enabled 1 ?
fs_access_log_mode strlen "log", "sdcard", "log+sdcard", "off".
fs_speed_emulation_mode strlen "faster", "slower", "random", "off".
host_romfs_redirection_target strlen "builtin", "off".
idle_time_detect_mode strlen "on", "off".
initial_tick_value strlen "7days", "14days", "30days", "90days", "hex": ?.
memory_mode strlen "auto", "4GB", "6GB".
needs_update_vulnerability_policy strlen "default": ?, "force_true": ?, "force_false": ?.
operation_mode_policy strlen "auto": ?, "handheld", "console".
performance_mode_policy strlen "auto": use boost mode when docked. "normal": never use boost mode. "boost": always use boost mode (SDEV only).
screenshot_target strlen "screenshot": ?, "physical": ?.
sdev_cpu_overclock_enabled 1 SDEV only. Used to allow access to 1224MHz CPU mode.
sdev_throttling_additional_delay_us 4 SDEV only.
sdev_throttling_additional_delay_enabled 1 SDEV only.
sleep_mode strlen "default": ?, "pseudo": ?.
throttling_for_smpd_enabled 1 Not used as of 3.0.
throttling_for_undock_enabled 1 Not used as of 3.0.