Changes

Jump to navigation Jump to search
3,533 bytes added ,  21:49, 11 August 2022
no edit summary
Line 6: Line 6:  
! Cmd || Name
 
! Cmd || Name
 
|-
 
|-
| 0 || OpenController
+
| 0 || [[#OpenController]]
 
|}
 
|}
 +
 +
== OpenController ==
 +
Takes an input u32. Returns an output [[#IController]].
    
== IController ==
 
== IController ==
Line 42: 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_1|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]]
 
|}
 
|}
    
== GetBatteryChargePercentage ==
 
== GetBatteryChargePercentage ==
No input, returns an output u32.
+
No input. Returns an output u32.
    
== GetChargerType ==
 
== GetChargerType ==
No input, returns an output u32.
+
No input. Returns an output [[#ChargerType|ChargerType]].
    
== EnableBatteryCharging ==
 
== EnableBatteryCharging ==
Line 94: Line 97:     
== IsBatteryChargingEnabled ==
 
== IsBatteryChargingEnabled ==
No input, returns an output u8.
+
No input. Returns an output bool.
    
== AcquireControllerPowerSupply ==
 
== AcquireControllerPowerSupply ==
Line 103: Line 106:     
== OpenSession ==
 
== OpenSession ==
No input, returns an output [[#IPsmSession]].
+
No input. Returns an output [[#IPsmSession]].
    
== EnableEnoughPowerChargeEmulation ==
 
== EnableEnoughPowerChargeEmulation ==
Line 118: Line 121:     
== GetBatteryVoltageState ==
 
== GetBatteryVoltageState ==
No input, returns an output u32.
+
No input. Returns an output [[#BatteryVoltageState|BatteryVoltageState]].
    
== GetRawBatteryChargePercentage ==
 
== GetRawBatteryChargePercentage ==
No input, returns an output double.
+
No input. Returns an output double.
    
== IsEnoughPowerSupplied ==
 
== IsEnoughPowerSupplied ==
No input, returns an output bool.
+
No input. Returns an output bool.
    
== GetBatteryAgePercentage ==
 
== GetBatteryAgePercentage ==
No input, returns an output double.
+
No input. returns an output double.
    
== GetBatteryChargeInfoEvent ==
 
== GetBatteryChargeInfoEvent ==
No input, returns an output Event handle.
+
No input. returns an output Event handle.
    
== GetBatteryChargeInfoFields ==
 
== GetBatteryChargeInfoFields ==
No input, returns an output 0x40-byte struct:
+
No input. Returns an output [[#BatteryChargeInfoFields|BatteryChargeInfoFields]].
 
  −
{| class="wikitable" border="1"
  −
|-
  −
! 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 || Possibly a bit field
  −
|-
  −
| 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 ===
+
== GetBatteryChargeCalibratedEvent ==
{| class="wikitable" border="1"
+
No input. returns an output Event handle.
|-
  −
! 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
  −
|}
      
== IPsmSession ==
 
== IPsmSession ==
Line 206: 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]]
 
|}
 
|}
    
=== BindStateChangeEvent ===
 
=== BindStateChangeEvent ===
No input, returns an output event with autoclear disabled.
+
No input. Returns an output Event handle with EventClearMode=0.
    
=== UnbindStateChangeEvent ===
 
=== UnbindStateChangeEvent ===
Line 224: Line 166:     
=== SetChargerTypeChangeEventEnabled ===
 
=== SetChargerTypeChangeEventEnabled ===
Takes an input u8 bool, no output.
+
Takes an input bool. No output.
    
=== SetPowerSupplyChangeEventEnabled ===
 
=== SetPowerSupplyChangeEventEnabled ===
Takes an input u8 bool, no output.
+
Takes an input bool. No output.
    
=== SetBatteryVoltageStateChangeEventEnabled ===
 
=== SetBatteryVoltageStateChangeEventEnabled ===
Takes an input u8 bool, no output.
+
Takes an input bool. No output.
 +
 
 +
= psm:manu =
 +
This is "nn::psm::IPsmManufactureServer".
 +
 
 +
This service is not present in retail units.
 +
 
 +
{| class="wikitable" border="1"
 +
|-
 +
! Cmd || Name
 +
|-
 +
| 0 || [[#EnableVdd50StateControl|EnableVdd50StateControl]]
 +
|-
 +
| 1 || [[#DisableVdd50StateControl|DisableVdd50StateControl]]
 +
|-
 +
| 2 || [[#SetVdd50State|SetVdd50State]]
 +
|}
 +
 
 +
== EnableVdd50StateControl ==
 +
Unofficial name.
 +
 
 +
No input/output.
 +
 
 +
== DisableVdd50StateControl ==
 +
Unofficial name.
 +
 
 +
No input/output.
 +
 
 +
== SetVdd50State ==
 +
Unofficial name.
 +
 
 +
Takes an input [[#Vdd50State]]. No output.
    
= tc =
 
= tc =
Line 269: Line 242:  
! Cmd || Name
 
! Cmd || Name
 
|-
 
|-
| 0 || [[#GetTemperatureRange]]
+
| 0 || [[#GetTemperatureRange|GetTemperatureRange]]
|-
  −
| 1 || [[#GetTemperature]]
  −
|-
  −
| 2 || [[#SetMeasurementMode]]
  −
|-
  −
| 3 || [[#GetTemperatureMilliC]]
  −
|-
  −
| 4 || [8.0.0+] ? (Takes a total of 4-bytes of input, returns an [[#IUnknown0]])
  −
|}
  −
 
  −
== IUnknown0 ==
  −
Added with [8.0.0+].
  −
 
  −
{| class="wikitable" border="1"
  −
|-
  −
! Cmd || Name
  −
|-
  −
| 0 ||
   
|-
 
|-
| 1 ||  
+
| 1 || [[#GetTemperature|GetTemperature]]
 
|-
 
|-
| 2 ||  
+
| 2 || [1.0.0-13.2.1] [[#SetMeasurementMode|SetMeasurementMode]]
 
|-
 
|-
| 3 ||  
+
| 3 || [1.0.0-13.2.1] [[#GetTemperatureMilliC|GetTemperatureMilliC]]
 
|-
 
|-
| 4 || [10.0.0+]
+
| 4 || [8.0.0+] [[#OpenSession_2|OpenSession]]
 
|}
 
|}
   Line 315: Line 270:     
The output is the temperature in MilliC.
 
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+].
 +
 +
{| class="wikitable" border="1"
 +
|-
 +
! Cmd || Name
 +
|-
 +
| 0 ||
 +
|-
 +
| 1 || [8.0.0-13.2.1]
 +
|-
 +
| 2 ||
 +
|-
 +
| 3 || [8.0.0-13.2.1]
 +
|-
 +
| 4 || [10.0.0+]
 +
|}
    
= pcm =
 
= pcm =
Line 345: Line 323:  
| 0 || [[#OpenSession]]
 
| 0 || [[#OpenSession]]
 
|-
 
|-
| 1 || GetPerformanceMode
+
| 1 || [[#GetPerformanceMode]]
 
|-
 
|-
 
| 6 || [7.0.0+] [[#IsCpuOverclockEnabled]]
 
| 6 || [7.0.0+] [[#IsCpuOverclockEnabled]]
Line 351: Line 329:     
== OpenSession ==
 
== OpenSession ==
Returns an [[#ISession]].
+
No input. Returns an output [[#ISession]].
 +
 
 +
== GetPerformanceMode ==
 +
No input. Returns an output [[#PerformanceMode]].
    
== IsCpuOverclockEnabled ==
 
== IsCpuOverclockEnabled ==
No input, returns an output u8 bool.
+
No input. Returns an output bool.
    
= apm:sys =
 
= apm:sys =
Line 363: Line 344:  
! Cmd || Name
 
! Cmd || Name
 
|-
 
|-
| 0 || RequestPerformanceMode
+
| 0 || [[#RequestPerformanceMode]]
 
|-
 
|-
| 1 || GetPerformanceEvent
+
| 1 || [[#GetPerformanceEvent]]
 
|-
 
|-
| 2 || GetThrottlingState
+
| 2 || [[#GetThrottlingState]]
 
|-
 
|-
| 3 || GetLastThrottlingState
+
| 3 || [[#GetLastThrottlingState]]
 
|-
 
|-
| 4 || ClearLastThrottlingState
+
| 4 || [[#ClearLastThrottlingState]]
 
|-
 
|-
| 5 || [5.0.0+] LoadAndApplySettings
+
| 5 || [5.0.0+] [[#LoadAndApplySettings]]
 
|-
 
|-
 
| 6 || [7.0.0+] [[#SetCpuBoostMode]]
 
| 6 || [7.0.0+] [[#SetCpuBoostMode]]
Line 379: Line 360:  
| 7 || [7.0.0+] [[#GetCurrentPerformanceConfiguration]]
 
| 7 || [7.0.0+] [[#GetCurrentPerformanceConfiguration]]
 
|}
 
|}
 +
 +
== RequestPerformanceMode ==
 +
Takes an input [[#PerformanceMode]]. No output.
    
== GetPerformanceEvent ==
 
== GetPerformanceEvent ==
Returns an [[#ISession]].
+
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 ==
 
== SetCpuBoostMode ==
Takes an u32 [[#CpuBoostMode]].
+
Takes an input [[#CpuBoostMode]]. No output.
    
== GetCurrentPerformanceConfiguration ==
 
== GetCurrentPerformanceConfiguration ==
Returns the currently active [[#PerformanceConfiguration]] (default value is 0x00020003).
+
No input. Returns an output [[#PerformanceConfiguration]] (default value is 0x00020003).
    
= ISession =
 
= ISession =
Line 396: Line 392:  
! Cmd || Name
 
! Cmd || Name
 
|-
 
|-
| 0 || SetPerformanceConfiguration
+
| 0 || [[#SetPerformanceConfiguration]]
 
|-
 
|-
| 1 || GetPerformanceConfiguration
+
| 1 || [[#GetPerformanceConfiguration]]
 
|-
 
|-
 
| 2 || [8.0.0+] [[#SetCpuOverclockEnabled]]
 
| 2 || [8.0.0+] [[#SetCpuOverclockEnabled]]
Line 404: Line 400:     
== SetPerformanceConfiguration ==
 
== SetPerformanceConfiguration ==
Takes an u32 [[#PerformanceMode]] and an u32 [[#PerformanceConfiguration]].
+
Takes an input [[#PerformanceMode]] and an input [[#PerformanceConfiguration]]. No output.
    
== GetPerformanceConfiguration ==
 
== GetPerformanceConfiguration ==
Takes an u32 [[#PerformanceMode]] and returns an output u32 [[#PerformanceConfiguration]].
+
Takes an input [[#PerformanceMode]]. Returns an output [[#PerformanceConfiguration]].
    
== SetCpuOverclockEnabled ==
 
== SetCpuOverclockEnabled ==
Takes an input u8 bool, no output.
+
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 =
 
= 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".
 
These are "nn::fgm::sf::ISession".
   −
Each service represents a different priority from 0 to 9. The "fgm" service represents priority 8 (default).
+
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.
 
[2.0.0+] Only "fgm", "fgm:0" and "fgm:9" are now valid.
Line 427: Line 423:     
== Initialize ==
 
== Initialize ==
No input. Returns an [[#IRequest]].
+
No input. Returns an output [[#IRequest]].
    
== IRequest ==
 
== IRequest ==
Line 446: Line 442:     
=== Initialize ===
 
=== Initialize ===
Takes a PID-descriptor, a [[#Module]] and an u64. Returns an Event handle with EventClearMode 0.
+
Takes a PID-descriptor, a [[#Module|ModuleId]] and a reserved input u64. Returns an Event handle with EventClearMode 0.
    
=== Set ===
 
=== Set ===
Takes 2 u32s '''ClockMinRate''' and '''ClockMaxRate'''. No output.
+
Takes 2 u32s '''ClockRateMin''' and '''ClockRateMax'''. No output.
    
=== Get ===
 
=== Get ===
No input. Returns an u32 '''ClockRate'''.
+
No input. Returns an u32 '''ClockRateActual'''.
    
=== Cancel ===
 
=== Cancel ===
Line 464: Line 460:  
! Cmd || Name
 
! Cmd || Name
 
|-
 
|-
| 0 || Initialize
+
| 0 || [[#Initialize_3|Initialize]]
 
|-
 
|-
| 1 || Read
+
| 1 || [[#Read|Read]]
 
|-
 
|-
| 2 || Cancel
+
| 2 || [[#Cancel_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|DebugEntry]]. Returns three output s32s '''NumberReadOut''', '''NumberLostOut''' and '''NumberRemainingOut'''.
 +
 +
== Cancel ==
 +
No input/output.
    
= lbl =
 
= lbl =
Line 514: Line 519:  
| 15 || SetAmbientLightSensorValue
 
| 15 || SetAmbientLightSensorValue
 
|-
 
|-
| 16 || [[#GetAmbientLightSensorValue]]
+
| 16 || GetAmbientLightSensorValue
 
|-
 
|-
 
| 17 || SetBrightnessReflectionDelayLevel
 
| 17 || SetBrightnessReflectionDelayLevel
Line 534: Line 539:  
| 25 || [3.0.0+] GetCurrentBrightnessSettingForVrMode
 
| 25 || [3.0.0+] GetCurrentBrightnessSettingForVrMode
 
|-
 
|-
| 26 || [3.0.0+] [[#EnableVrMode]]
+
| 26 || [3.0.0+] EnableVrMode
 
|-
 
|-
| 27 || [3.0.0+] [[#DisableVrMode]]
+
| 27 || [3.0.0+] DisableVrMode
 
|-
 
|-
| 28 || [3.0.0+] [[#IsVrModeEnabled]]
+
| 28 || [3.0.0+] IsVrModeEnabled
 
|-
 
|-
 
| 29 || [7.0.0+] IsAutoBrightnessControlSupported
 
| 29 || [7.0.0+] IsAutoBrightnessControlSupported
 
|}
 
|}
   −
== Ambient Light Sensor Notes ==
+
= ChargerType =
The BH1730 outputs 2 values. Visible light and IR light. This is then calculated through an algorithm that checks for Gain, Measurement time, filter qualities and ouputs lux (max correct measurement of 100K lux).
+
This is "nn::psm::ChargerType".
The default values are Gain 64x and ITIME of 38 (256 - 218). This allows for a max lux value of 17972 lux when visible light value is maximum and IR light is 0. When both of them are on their limit, the output is 1192 lux.
  −
The sensor is fully configurable.
     −
== GetAmbientLightSensorValue ==
  −
No input. Before 5.x, outputs lux in float. (5.0.0+) Returns an output struct:
   
{| class="wikitable" border="1"
 
{| class="wikitable" border="1"
 
|-
 
|-
! Offset || Size || Description
+
! Value || Name
 +
|-
 +
| 0 || Unconnected
 +
|-
 +
| 1 || EnoughPower
 
|-
 
|-
| 0x0 || 0x4 || bOverLimit. (u32) Equals to 1 if visible or IR light data is over 65534.
+
| 2 || LowPower
 
|-
 
|-
| 0x4 || 0x4 || fLux. (float) Value in lux from the ambient light sensor.
+
| 3 || NotSupported
 
|}
 
|}
Note: if bOverLimit=1 and the default ALS configuration is used, the measurement of fLux should not be considered and the actual max value depends on the type of light. Ranges from 12.5K - 17.5K.
     −
== GetCurrentBrightnessSetting ==
+
= Vdd50State =
No input. Returns an output u32 int of the current backlight level.
+
This is "nn::psm::Vdd50State".
   −
== GetBrightnessSettingAppliedToBacklight ==
+
{| class="wikitable" border="1"
No input. Returns an output u32 int of the backlight level computed from the ambient light sensor.
+
|-
 +
! Value || Name
 +
|-
 +
| 0 || Unknown
 +
|-
 +
| 1 || Vdd50AOffVdd50BOff
 +
|-
 +
| 2 || Vdd50AOnVdd50BOff
 +
|-
 +
| 3 || Vdd50AOffVdd50BOn
 +
|}
   −
== IsAutoBrightnessControlEnabled ==
+
= BatteryVoltageState =
No input. Returns an output u8 bool indicating whether auto brightness is enabled.  
+
This is "nn::psm::BatteryVoltageState".
   −
== EnableVrMode ==
+
{| class="wikitable" border="1"
No input/output. Used by [[AM_services#SetVrModeEnabled]].
+
|-
 +
! Value || Name
 +
|-
 +
| 0 || ShutdownRequired
 +
|-
 +
| 1 || SleepRequired
 +
|-
 +
| 2 || BoostPerformanceModeProhibited
 +
|-
 +
| 3 || Good
 +
|}
   −
Sets a global state field to 0x1.
+
= BatteryChargeInfoFields =
 +
This is a 0x40-byte struct.
   −
== DisableVrMode ==
+
{| class="wikitable" border="1"
No input/output. Used by [[AM_services#SetVrModeEnabled]].
+
|-
 +
! 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]]
 +
|-
 +
| 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)
 +
|}
   −
Sets the global state field used by [[#EnableVrMode]] to 0x0.
+
=== Charger ===
 
+
{| class="wikitable" border="1"
== IsVrModeEnabled ==
+
|-
No input. Returns an output u8 bool set by the above commands.
+
! 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 =
 
= Location =
Line 593: Line 673:     
= CpuBoostMode =
 
= CpuBoostMode =
 +
This is "nn::apm::CpuBoostMode".
 +
 
{| class="wikitable" border="1"
 
{| class="wikitable" border="1"
 
|-
 
|-
Line 607: Line 689:     
= PerformanceMode =
 
= PerformanceMode =
 +
This is "nn::apm::PerformanceMode".
 +
 
{| class="wikitable" border="1"
 
{| class="wikitable" border="1"
 
|-
 
|-
Line 619: Line 703:     
= PerformanceConfiguration =
 
= PerformanceConfiguration =
 +
This is "nn::apm::PerformanceConfiguration".
 +
 
{| class="wikitable" border="1"
 
{| class="wikitable" border="1"
 
|-
 
|-
Line 625: Line 711:  
| 0x00000000 || Invalid || 0 || 0 || 0
 
| 0x00000000 || Invalid || 0 || 0 || 0
 
|-
 
|-
| 0x00010000 || Cpu1020MhzGpu384MhzEmc1600Mhz || 1020.0 || 384.0 || 1600.0
+
| 0x00010000 || Cpu1020MhzGpu384Mhz || 1020.0 || 384.0 || 1600.0
 
|-
 
|-
| 0x00010001 || Cpu1020MhzGpu768MhzEmc1600Mhz || 1020.0 || 768.0 || 1600.0
+
| 0x00010001 || Cpu1020MhzGpu768Mhz || 1020.0 || 768.0 || 1600.0
 
|-
 
|-
| 0x00010002 || Cpu1224MhzGpu691MhzEmc1600Mhz || 1224.0 || 691.2 || 1600.0
+
| 0x00010002 || Cpu1224MhzGpu691Mhz || 1224.0 || 691.2 || 1600.0
 
|-
 
|-
| 0x00020000 || Cpu1020MhzGpu230MhzEmc1600Mhz || 1020.0 || 230.4 || 1600.0
+
| 0x00020000 || Cpu1020MhzGpu230Mhz|| 1020.0 || 230.4 || 1600.0
 
|-
 
|-
| 0x00020001 || Cpu1020MhzGpu307MhzEmc1600Mhz || 1020.0 || 307.2 || 1600.0
+
| 0x00020001 || Cpu1020MhzGpu307Mhz || 1020.0 || 307.2 || 1600.0
 
|-
 
|-
| 0x00020002 || Cpu1224MhzGpu230MhzEmc1600Mhz || 1224.0 || 230.4 || 1600.0
+
| 0x00020002 || Cpu1224MhzGpu230Mhz || 1224.0 || 230.4 || 1600.0
 
|-
 
|-
 
| 0x00020003 || Cpu1020MhzGpu307MhzEmc1331Mhz || 1020.0 || 307.2 || 1331.2
 
| 0x00020003 || Cpu1020MhzGpu307MhzEmc1331Mhz || 1020.0 || 307.2 || 1331.2
Line 649: Line 735:  
| 0x92220008 || Cpu1020MhzGpu460MhzEmc1331Mhz || 1020.0 || 460.8 || 1331.2
 
| 0x92220008 || Cpu1020MhzGpu460MhzEmc1331Mhz || 1020.0 || 460.8 || 1331.2
 
|-
 
|-
| [7.0.0+] 0x92220009 || || 1785.0 || 76.8 || 1600.0
+
| [7.0.0+] 0x92220009 || Cpu1785MhzGpu76MhzEmc1600Mhz || 1785.0 || 76.8 || 1600.0
 
|-
 
|-
| [7.0.0+] 0x9222000A || || 1785.0 || 76.8 || 1331.2
+
| [7.0.0+] 0x9222000A || Cpu1785MhzGpu76MhzEmc1331Mhz || 1785.0 || 76.8 || 1331.2
 
|-
 
|-
| [7.0.0+] 0x9222000B || || 1020.0 || 76.8 || 1600.0
+
| [7.0.0+] 0x9222000B || Cpu1020MhzGpu76MhzEmc1600Mhz || 1020.0 || 76.8 || 1600.0
 
|-
 
|-
| [7.0.0+] 0x9222000C || || 1020.0 || 76.8 || 1331.2
+
| [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.
 
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".
 +
 +
{| class="wikitable" border="1"
 +
|-
 +
! Value || Description
 +
|-
 +
| 0 || PerformanceModeChanged
 +
|-
 +
| 1 || SleepRequiredByLowVoltage
 +
|}
 +
 +
= ThrottlingState =
 +
This is "nn::apm::ThrottlingState".
 +
 +
{| class="wikitable" border="1"
 +
|-
 +
! 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 =
 
= Module =
Line 667: Line 795:  
! Name || Block
 
! Name || Block
 
|-
 
|-
| 0 || CPU
+
| 0 || Cpu
 
|-
 
|-
| 1 || GPU
+
| 1 || Gpu
 
|-
 
|-
| 2 || EMC
+
| 2 || Emc
 
|-
 
|-
| 3 || SCLK
+
| 3 || SysBus
 +
|-
 +
| 4 || Mselect
 +
|-
 +
| 5 || Nvdec
 +
|-
 +
| 6 || Nvenc
 +
|-
 +
| 7 || Nvjpg
 +
|-
 +
| 8 || Test
 +
|}
 +
 
 +
= EventId =
 +
This is "nn::fgm::EventId".
 +
 
 +
{| class="wikitable" border="1"
 +
|-
 +
! Name || Block
 +
|-
 +
| 0 || Set
 +
|-
 +
| 1 || Unset
 +
|-
 +
| 2 || Completion
 +
|}
 +
 
 +
= DebugEntry =
 +
This is "nn::fgm::DebugEntry".
 +
 
 +
{| class="wikitable" border="1"
 +
|-
 +
! Offset || Size || Description
 +
|-
 +
| 0x0 || 0x4 || [[#EventId|EventId]]
 +
|-
 +
| 0x4 || 0x4 || [[#Module|ModuleId]]
 +
|-
 +
| 0x8 || 0x8 || Timestamp
 +
|-
 +
| 0x10 || 0x40 || [[#RequestEntry|RequestEntry]] (EventId = Set), empty (EventId = Unset) or [[#CompletionEntry|CompletionEntry]] (EventId = Completion)
 +
|}
 +
 
 +
= RequestEntry =
 +
This is "nn::fgm::RequestEntry".
 +
 
 +
{| class="wikitable" border="1"
 +
|-
 +
! Offset || Size || Description
 +
|-
 +
| 0x0 || 0x8 || ProcessId
 +
|-
 +
| 0x8 || 0x4 || Priority
 +
|-
 +
| 0xC || 0x4 || ClockRateMin
 +
|-
 +
| 0x10 || 0x4 || ClockRateMax
 +
|-
 +
| 0x14 || 0x2C || Reserved
 +
|}
 +
 
 +
= CompletionEntry =
 +
This is "nn::fgm::CompletionEntry".
 +
 
 +
{| class="wikitable" border="1"
 +
|-
 +
! Offset || Size || Description
 
|-
 
|-
| 4 || MSELECT
+
| 0x0 || 0x4 || ClockRateMin
 
|-
 
|-
| 5 || NVDEC
+
| 0x4 || 0x4 || ClockRateMax
 
|-
 
|-
| 6 || NVENC
+
| 0x8 || 0x4 || ClockRateActual
 
|-
 
|-
| 7 || NVJPG
+
| 0xC || 0x34 || Reserved
 
|}
 
|}
  

Navigation menu