Difference between revisions of "Bus services"

From Nintendo Switch Brew
Jump to navigation Jump to search
 
(118 intermediate revisions by 7 users not shown)
Line 6: Line 6:
 
! Cmd || Name
 
! Cmd || Name
 
|-
 
|-
| 0 || [[#OpenSessionForDev]]
+
| 0 || [5.0.0+] [[#OpenSessionForDevDeprecated|OpenSessionForDevDeprecated]] ([1.0.0-4.1.0] OpenSessionForDev)
 
|-
 
|-
| 1 || [[#OpenSession]]
+
| 1 || [5.0.0+] [[#OpenSessionDeprecated|OpenSessionDeprecated]] ([1.0.0-4.1.0] OpenSession)
 
|-
 
|-
| 2 || [[#OpenSessionForTest]]
+
| 2 || [5.0.0+] [[#OpenSessionForTestDeprecated|OpenSessionForTestDeprecated]] ([1.0.0-4.1.0] OpenSessionForTest)
 
|-
 
|-
| 3 || [1.0.0-6.2.0] IsWakeEventActive  
+
| 3 || [5.0.0-6.2.0] [[#IsWakeEventActiveDeprecated|IsWakeEventActiveDeprecated]] ([1.0.0-4.1.0] IsWakeEventActive)
 
|-
 
|-
| 4 || [1.0.0-6.2.0] GetWakeEventActiveFlagSet
+
| 4 || [5.0.0-6.2.0] [[#GetWakeEventActiveFlagSetDeprecated|GetWakeEventActiveFlagSetDeprecated]] ([1.0.0-4.1.0] GetWakeEventActiveFlagSet)
 
|-
 
|-
| 5 || [1.0.0-6.2.0] SetWakeEventActiveFlagSetForDebug
+
| 5 || [5.0.0-6.2.0] [[#SetWakeEventActiveFlagSetForDebugDeprecated|SetWakeEventActiveFlagSetForDebugDeprecated]] ([1.0.0-4.1.0] SetWakeEventActiveFlagSetForDebug)
 
|-
 
|-
| 6 || SetWakePinDebugMode
+
| 6 || [[#SetWakePinDebugMode|SetWakePinDebugMode]]
 
|-
 
|-
| 7 || [5.0.0+] [[#OpenSession2]]
+
| 7 || [5.0.0+] [[#OpenSession|OpenSession]]
 
|-
 
|-
| 8 || [5.0.0+] IsWakeEventActive2
+
| 8 || [5.0.0+] [[#IsWakeEventActive|IsWakeEventActive]]
 
|-
 
|-
| 9 || [5.0.0+] SetWakeEventActiveFlagSetForDebug2
+
| 9 || [5.0.0+] [[#SetWakeEventActiveFlagSetForDebug|SetWakeEventActiveFlagSetForDebug]]
 
|-
 
|-
| 10 || [6.0.0+]
+
| 10 || [6.0.0+] [[#DumpStateForDebug|DumpStateForDebug]]
 
|}
 
|}
  
== Known Devices ==
+
== OpenSessionForDevDeprecated ==
{| class="wikitable sortable" border="1"
+
Takes an input [[#GpioPadDescriptor]]. Returns an [[#IPadSession]].
 +
 
 +
== OpenSessionDeprecated ==
 +
Same as [[#OpenSessionForDevDeprecated]] except it takes a [[#GpioPadName]] which is then converted to a [[#GpioPadDescriptor]]. Returns an [[#IPadSession]].
 +
 
 +
== OpenSessionForTestDeprecated ==
 +
Same as [[#OpenSessionDeprecated]] but panics on failure.
 +
 
 +
== IsWakeEventActiveDeprecated ==
 +
Takes an input [[#GpioPadName]]. Returns a bool '''IsActive'''.
 +
 
 +
== GetWakeEventActiveFlagSetDeprecated ==
 +
No input. Returns an output u128 [[#WakeBitFlag]].
 +
 
 +
== SetWakeEventActiveFlagSetForDebugDeprecated ==
 +
Takes an input [[#GpioPadName]] and an input bool '''IsEnabled'''. No output.
 +
 
 +
== SetWakePinDebugMode ==
 +
Takes an input u32 '''WakePinDebugMode'''. No output.
 +
 
 +
== OpenSession ==
 +
Same as [[#OpenSessionDeprecated]] but takes a [[#GpioPadName|DeviceCode]] and an input [[#OpenMode]].
 +
 
 +
== IsWakeEventActive ==
 +
Same as [[#IsWakeEventActiveDeprecated]] but takes a [[#GpioPadName|DeviceCode]].
 +
 
 +
== SetWakeEventActiveFlagSetForDebug ==
 +
Same as [[#SetWakeEventActiveFlagSetForDebugDeprecated]] but takes a [[#GpioPadName|DeviceCode]].
 +
 
 +
== DumpStateForDebug ==
 +
Stubbed. Returns 0.
 +
 
 +
== IPadSession ==
 +
This is "nn::gpio::IPadSession".
 +
 
 +
{| class="wikitable" border="1"
 
|-
 
|-
! GpioPadName || GpioPadDescriptor || DeviceCode || Tegra (port, pin) || Usage || Direction || Used by
+
! Cmd || Name
 
|-
 
|-
| 0x01 || 0xCC || 0x33000002 || Z, 4 || Audio Codec (ALC5639) Power (CODEC_LDO_EN_TEMP) || Out || [[Audio services]], [[Fatal services]]
+
| 0 || [12.0.0+] [[#SetDirectionDeprecated|SetDirectionDeprecated]] ([1.0.0-11.0.1] SetDirection)
 
|-
 
|-
| 0x02 || 0x24 || 0x3C000001 || E, 4 || SDCard Power (POW_SD_EN) || Out || [[PCV services]]
+
| 1 || [[#GetDirection|GetDirection]]
 
|-
 
|-
| 0x03 || 0x3C || 0x37000002 || H, 4 || Bluetooth Reset (BT_RST_PH4) || Out || [[Bluetooth Driver services]]
+
| 2 || [[#SetInterruptMode|SetInterruptMode]]
 
|-
 
|-
| 0x04 || 0xDA || 0xC9000402 || BB, 2 || Secondary Boot Device Configration (RAM_CODE3) || In ||  
+
| 3 || [[#GetInterruptMode|GetInterruptMode]]
 
|-
 
|-
| 0x05 || 0xDB || 0x3C000402 || BB, 3 || GcAsic Reset (GC_RST) || Out || [[Filesystem services]]
+
| 4 || [[#SetInterruptEnable|SetInterruptEnable]]
 
|-
 
|-
| 0x06 || 0xDC || 0x33000003 || BB, 4 || Audio Codec (ALC5639) Alert (CODEC_ALERT) || In || [[Audio services]]
+
| 5 || [[#GetInterruptEnable|GetInterruptEnable]]
 
|-
 
|-
| 0x07 || 0x25 || 0x3C000401 || E, 5 || GcAsic Power (POW_GC) || Out ||
+
| 6 || [1.0.0-16.1.0] [[#GetInterruptStatus|GetInterruptStatus]]
 
|-
 
|-
| 0x08 || 0x90 || 0x350000CA || S, 0 || Debug Pad Detect (DEBUG_CONTROLLER_DET) || In || [[HID services]]
+
| 7 || [1.0.0-16.1.0] [[#ClearInterruptStatus|ClearInterruptStatus]]
 
|-
 
|-
| 0x09 || 0x91 || 0x39000407 || S, 1 || Battery Charge Status (BATT_CHG_STATUS) || In ||
+
| 8 || [[#SetValue|SetValue]]
 
|-
 
|-
| 0x0A || 0x96 || 0x39000003 || S, 6 || Charger IC (BQ24193) Charge Enable (BATT_CHG_ENABLE_N) || Out || [[PTM services]]
+
| 9 || [[#GetValue|GetValue]]
 
|-
 
|-
| 0x0B || 0x97 || 0x3D000002 || S, 7 || Fan Tachometer (FAN_TACH) || In ||
+
| 10 || [[#BindInterrupt|BindInterrupt]]
 
|-
 
|-
| 0x0C || 0x26 || 0x3500040B || E, 6 || Joy-Con(L) IsAttached (insertion, Joy-Con pin 5/console TX, pulled low on insert?) (EXTCON_DET_S) || In || [[HID services]]
+
| 11 || [[#UnbindInterrupt|UnbindInterrupt]]
 
|-
 
|-
| 0x0D || 0x05 || 0x39000401 || A, 5 || Fan Power (battery) (VDD50A_EN) || Out || [[PTM services]]
+
| 12 || [[#SetDebounceEnabled|SetDebounceEnabled]]
 
|-
 
|-
| 0x0E || 0x78 || 0xCA000402 || P, 0 || SDEV Coax Select (SDEV_COAX_SEL_1) || In ||
+
| 13 || [[#GetDebounceEnabled|GetDebounceEnabled]]
 
|-
 
|-
| 0x0F || 0x93 || 0x3C000403 || S, 3 || GcAsic Card Detect (GC_CD) || In || [[Filesystem services]]
+
| 14 || [[#SetDebounceTime|SetDebounceTime]]
 
|-
 
|-
| 0x10 || 0x7D || 0xC900040B || P, 5 || PROD_TYPE_0 || In ||
+
| 15 || [[#GetDebounceTime|GetDebounceTime]]
 
|-
 
|-
| 0x11 || 0x7C || 0xC900040C || P, 4 || PROD_TYPE_1 || In ||
+
| 16 || [4.0.0+] [[#SetValueForSleepState|SetValueForSleepState]]
 
|-
 
|-
| 0x12 || 0x7B || 0xC900040D || P, 3 || PROD_TYPE_2 || In ||
+
| 17 || [6.0.0+] [[#GetMaxDebounceTime|GetMaxDebounceTime]]
 
|-
 
|-
| 0x13 || 0x7A || 0xC900040E || P, 2 || PROD_TYPE_3 || In ||
+
| 18 || [12.0.0+] [[#SetDirectionInput|SetDirectionInput]]
 
|-
 
|-
| 0x14 || 0xBC || 0x3E000002 || X, 4 || Temperature Sensor (TEMP_ALERT) || In ||
+
| 19 || [12.0.0+] [[#SetDirectionOutput|SetDirectionOutput]]
 +
|}
 +
 
 +
=== SetDirectionDeprecated ===
 +
Takes an input u32 [[#Direction]]. No output.
 +
 
 +
=== GetDirection ===
 +
No input. Returns an output u32 [[#Direction]].
 +
 
 +
=== SetInterruptMode ===
 +
Takes an input u32 [[#InterruptMode]]. No output.
 +
 
 +
=== GetInterruptMode ===
 +
No input. Returns an output u32 [[#InterruptMode]].
 +
 
 +
=== SetInterruptEnable ===
 +
Takes an input bool '''IsEnable'''. No output.
 +
 
 +
=== GetInterruptEnable ===
 +
No input. Returns an output bool '''IsEnable'''.
 +
 
 +
=== GetInterruptStatus ===
 +
No input. Returns an output u32 [[#InterruptStatus]].
 +
 
 +
=== ClearInterruptStatus ===
 +
No input/output.
 +
 
 +
=== SetValue ===
 +
Takes an input u32 [[#GpioValue]]. No output.
 +
 
 +
=== GetValue ===
 +
No input. Returns an output u32 [[#GpioValue]].
 +
 
 +
=== BindInterrupt ===
 +
No input. Returns an output Event handle.
 +
 
 +
=== UnbindInterrupt ===
 +
No input/output.
 +
 
 +
=== SetDebounceEnabled ===
 +
Takes an input bool '''IsEnable'''. No output.
 +
 
 +
=== GetDebounceEnabled ===
 +
No input. Returns an output bool '''IsEnable'''.
 +
 
 +
=== SetDebounceTime ===
 +
Takes an input s32 '''MsecTime'''. No output.
 +
 
 +
=== GetDebounceTime ===
 +
No input. Returns an output s32 '''MsecTime'''.
 +
 
 +
=== SetValueForSleepState ===
 +
Takes an input u32 '''ValueForSleepState'''. No output.
 +
 
 +
=== GetMaxDebounceTime ===
 +
No input. Returns an output u32 '''MaxDebounceTime'''.
 +
 
 +
=== SetDirectionInput ===
 +
No input/output.
 +
 
 +
=== SetDirectionOutput ===
 +
Takes an input u32 [[#GpioValue]]. No output.
 +
 
 +
= i2c, i2c:pcv =
 +
This is "nn::i2c::IManager".
 +
 
 +
{| class="wikitable" border="1"
 
|-
 
|-
| 0x15 || 0xAE || 0x33000004 || V, 6 || Audio Codec (ALC5639) Headphone Detect (CODEC_HP_DET_IRQ) || In || [[Audio services]]
+
! Cmd || Name
 
|-
 
|-
| 0x16 || 0xBA || 0x35000041 || X, 2 || MOTION_INT_PX2 || In ||
+
| 0 || [[#OpenSessionForDev_2|OpenSessionForDev]]
 
|-
 
|-
| 0x17 || 0xB9 || 0x35000036 || X, 1 || TouchPanel IRQ (TP_IRQ) (unused - polled instead) || In || [[HID services]]
+
| 1 || [[#OpenSession_2|OpenSession]]
 
|-
 
|-
| 0x18 || 0xBD || 0x35000001 || X, 5 || Power Button (BUTTON_POWER_ON_PX5) || In ||
+
| 2 || [1.0.0-5.1.0] [[#HasDevice|HasDevice]]
 
|-
 
|-
| 0x19 || 0xBE || 0x35000002 || X, 6 || Volume Up (BUTTON_VOL_UP_PX6) || In || [[Boot2]], [[Audio services]]
+
| 3 || [1.0.0-5.1.0] [[#HasDeviceForDev|HasDeviceForDev]]
 
|-
 
|-
| 0x1A || 0xBF || 0x35000003 || X, 7 || Volume Down (BUTTON_VOL_DOWN_PX7) || In || [[Boot2]], [[Audio services]]
+
| 4 || [6.0.0+] [[#OpenSession2_2|OpenSession2]]
 +
|}
 +
 
 +
== OpenSessionForDev ==
 +
Takes an input u16 '''SlaveAddress''' (padded to u32) and 3 input u32s '''BusIdx''', [[#AddressingMode]] and [[#SpeedMode]]. Returns an [[#II2cSession]].
 +
 
 +
== OpenSession ==
 +
Takes an input [[#I2cDevice]]. Returns an output [[#II2cSession]].
 +
 
 +
== HasDevice ==
 +
Takes an input [[#I2cDevice]]. Returns an output boolean success value.
 +
 
 +
== HasDeviceForDev ==
 +
Takes an input u16 '''SlaveAddress''' (padded to u32) and 3 input u32s '''BusIdx''', [[#AddressingMode]] and [[#SpeedMode]]. Returns an output boolean success value.
 +
 
 +
== OpenSession2 ==
 +
Same as [[#OpenSession_2|OpenSession]], but takes an input u32 [[#I2cDevice|DeviceCode]].
 +
 
 +
== II2cSession ==
 +
This is "nn::i2c::ISession".
 +
 
 +
{| class="wikitable" border="1"
 
|-
 
|-
| 0x1B || 0xC0 || 0x39000034 || Y, 0 || Fuel Gauge IC (MAX17050) IRQ (BATT_MGIC_IRQ) || In || [[PTM services]]
+
! Cmd || Name
 
|-
 
|-
| 0x1C || 0xC1 || 0x35000004 || Y, 1 || Recovery Mode Key (BUTTON_HOME_PY1) || In ||
+
| 0 || [1.0.0-5.1.0] SendOld
 
|-
 
|-
| 0x1D || 0xA9 || 0x3400003E || V, 1 || Backlight Enable (LCD_BL_EN_PV1) || Out || [[NV services]], [[Backlight services]]
+
| 1 || [1.0.0-5.1.0] ReceiveOld
 
|-
 
|-
| 0x1E || 0xAA || 0x34000033 || V, 2 || Backlight Reset (LCD_RST_PV2) || Out || [[NV services]]
+
| 2 || [1.0.0-5.1.0] ExecuteCommandListOld
 
|-
 
|-
| 0x1F || 0x55 || 0x040000CC || K, 5 || USB-PD Controller (RHOM BM92T30MWV) VCONN Power (PD_VCONN_EN) || Out || [[PTM services]], [[USB services]]
+
| 10 || [[#Send|Send]]
 
|-
 
|-
| 0x20 || 0xAD || 0x040000CA || V, 5 || USB-PD Controller (RHOM BM92T30MWV) Reset (PD_RST) || Out || [[USB services]]
+
| 11 || [[#Receive|Receive]]
 
|-
 
|-
| 0x21 || 0xC8 || 0x39000002 || Z, 0 || Charger IC (BQ24193) IRQ (BQ24193_IRQ) || In || [[PTM services]]
+
| 12 || [[#ExecuteCommandList|ExecuteCommandList]]
 
|-
 
|-
| 0x22 || 0xCA || 0xCA000401 || Z, 2 || SDEV Coax Select (SDEV_COAX_SEL_0) || In ||
+
| 13 || [6.0.0+] [[#SetRetryPolicy_2|SetRetryPolicy]]
 +
|}
 +
 
 +
== Send ==
 +
Takes a type-0x21 input buffer '''InData''' and an input u32 [[#TransactionOption]]. No output.
 +
 
 +
== Receive ==
 +
Takes a type-0x22 output buffer '''OutData''' and an input u32 [[#TransactionOption]]. No output.
 +
 
 +
== ExecuteCommandList ==
 +
Takes a type-0x22 output buffer '''ReceiveBuffer''' and a type-0x9 input buffer '''CommandList'''. No output.
 +
 
 +
=== Commands ===
 +
This is "nn::i2c::I2cCommand".
 +
 
 +
{| class=wikitable
 +
! Bits || Name
 
|-
 
|-
| 0x23 || 0xCB || 0x3C000003 || Z, 3 || SDCard Write Protect (SD_WP) || In ||
+
| 0-5 || [[#CommandId]]
 
|-
 
|-
| 0x24 || 0x4F || 0x35000035 || J, 7 || TouchPanel Reset (TP_RST) || Out || [[HID services]]
+
| 6-7 || [[#TransactionOption]]
 +
|}
 +
 
 +
A send command will write bytes to the device using the format: [u8 cmd_send] [u8 len] <bytes>
 +
 
 +
A receive command will read bytes from the device using the format: [u8 cmd_receive] [u8 len]
 +
 
 +
An extension sleep command will stall the device using the format: [u8 cmd_extension] [u8 ms]
 +
 
 +
== SetRetryPolicy ==
 +
Takes 2 input u32s '''MaxRetries''' and '''RetryIntervalMicroSeconds'''. No output.
 +
 
 +
= uart =
 +
This is "nn::uart::IManager".
 +
 
 +
{| class="wikitable" border="1"
 
|-
 
|-
| 0x25 || 0x50 || 0x37000401 || K, 0 || BT_GPIO_2 || In ||
+
! Cmd || Name
 
|-
 
|-
| 0x26 || 0x51 || 0x37000402 || K, 1 || BT_GPIO_3 || In ||
+
| 0 || [1.0.0-16.1.0] [[#HasPort|HasPort]]
 
|-
 
|-
| 0x27 || 0x52 || 0x37000403 || K, 2 || BT_GPIO_4 || In ||
+
| 1 || [1.0.0-16.1.0] [[#HasPortForDev|HasPortForDev]]
 
|-
 
|-
| 0x28 || 0x54 || 0x040000CB || K, 4 || USB-PD Controller (RHOM BM92T30MWV) IRQ (PD_IRQ) || In || [[USB services]]
+
| 2 || [1.0.0-16.1.0] [[#IsSupportedBaudRate|IsSupportedBaudRate]]
 
|-
 
|-
| 0x29 || 0x56 || 0x3E000003 || K, 6 || POW_VCPU_INT || In ||
+
| 3 || [1.0.0-16.1.0] [[#IsSupportedBaudRateForDev|IsSupportedBaudRateForDev]]
 
|-
 
|-
| 0x2A || 0x57 || 0x3E000004 || K, 7 || MAX77621_GPU_INT || In ||
+
| 4 || [1.0.0-16.1.0] [[#IsSupportedFlowControlMode|IsSupportedFlowControlMode]]
 
|-
 
|-
| 0x2B || 0x53 || 0x35000402 || K, 3 || Joy-Con(R) Charge Detect (EXTCON_CHG_U) || Out || [[HID services]]
+
| 5 || [1.0.0-16.1.0] [[#IsSupportedFlowControlModeForDev|IsSupportedFlowControlModeForDev]]
 
|-
 
|-
| 0x2C || 0xE3 || 0x3500040C || CC, 3 || Joy-Con(L) Charge Detect (EXTCON_CHG_S) || Out || [[HID services]]
+
| 6 || [[#CreatePortSession|CreatePortSession]]
 
|-
 
|-
| 0x2D || 0x38 || 0x38000003 || H, 0 || WIFI_RF_DISABLE || Out ||
+
| 7 || [1.0.0-16.1.0] [[#IsSupportedPortEvent|IsSupportedPortEvent]]
 
|-
 
|-
| 0x2E || 0x39 || 0x38000002 || H, 1 || WiFi Reset (WIFI_RST_PH1) || Out || [[WLAN services]], [[PCIe services]]
+
| 8 || [1.0.0-16.1.0] [[#IsSupportedPortEventForDev|IsSupportedPortEventForDev]]
 
|-
 
|-
| 0x2F || 0x3B || 0x37000003 || H, 3 || AP_WAKE_BT_PH3 || Out || [[Bluetooth Driver services]]
+
| 9 || [7.0.0-16.1.0] [[#IsSupportedDeviceVariation|IsSupportedDeviceVariation]]
 
|-
 
|-
| 0x30 || 0x3D || 0x37000004 || H, 5 || BT_WAKE_AP || In ||
+
| 10 || [7.0.0-16.1.0] [[#IsSupportedDeviceVariationForDev|IsSupportedDeviceVariationForDev]]
 +
|}
 +
 
 +
== HasPort ==
 +
Takes an input [[#UartPort]]. Returns an output boolean success value.
 +
 
 +
== HasPortForDev ==
 +
Takes an input [[#UartPortForDev]]. Returns an output boolean success value.
 +
 
 +
== IsSupportedBaudRate ==
 +
Takes 2 input u32s [[#UartPort]] and '''BaudRate'''. Returns an output boolean success value.
 +
 
 +
Supported baud rates are 57600, 115200, 1000000 and 3000000.
 +
 
 +
== IsSupportedBaudRateForDev ==
 +
Takes 2 input u32s [[#UartPortForDev]] and '''BaudRate'''. Returns an output boolean success value.
 +
 
 +
Supported baud rates are 57600, 115200, 1000000 and 3000000.
 +
 
 +
== IsSupportedFlowControlMode ==
 +
Takes 2 input u32s [[#UartPort]] and [[#FlowControlMode]]. Returns an output boolean success value.
 +
 
 +
== IsSupportedFlowControlModeForDev ==
 +
Takes 2 input u32s [[#UartPortForDev]] and [[#FlowControlMode]]. Returns an output boolean success value.
 +
 
 +
== CreatePortSession ==
 +
No input. Returns an output [[#IPortSession]].
 +
 
 +
== IsSupportedPortEvent ==
 +
Takes 2 input u32s [[#UartPort]] and [[#PortEventType]]. Returns an output boolean success value.
 +
 
 +
== IsSupportedPortEventForDev ==
 +
Takes 2 input u32s [[#UartPortForDev]] and [[#PortEventType]]. Returns an output boolean success value.
 +
 
 +
== IsSupportedDeviceVariation ==
 +
Takes 2 input u32s [[#UartPort]] and '''DeviceVariation'''. Returns an output boolean success value.
 +
 
 +
Supported device variations are 0 (Bluetooth) for UART-D, 0 (Joy-Con(R)) for UART-B, 0 (Joy-Con(L)) and 1 (SioMcu) for UART-C.
 +
 
 +
== IsSupportedDeviceVariationForDev ==
 +
Takes 2 input u32s [[#UartPortForDev]] and '''DeviceVariation'''. Returns an output boolean success value.
 +
 
 +
Supported device variations are 0 (Bluetooth) for UART-D, 0 (Joy-Con(R)) for UART-B, 0 (Joy-Con(L)) and 1 (SioMcu) for UART-C.
 +
 
 +
== IPortSession ==
 +
This is "nn::uart::IPortSession".
 +
 
 +
{| class="wikitable" border="1"
 
|-
 
|-
| 0x31 || 0x3F || 0x37000404 || H, 7 || BT_GPIO_5 || Out ||
+
! Cmd || Name
 
|-
 
|-
| 0x32 || 0x40 || 0x34000034 || I, 0 || Backlight +5V (LCD_VDD_P_EN) || Out || [[NV services]]
+
| 0 || [[#OpenPort|OpenPort]]
 
|-
 
|-
| 0x33 || 0x41 || 0x34000035 || I, 1 || Backlight -5V (LCD_VDD_N_EN) || Out || [[NV services]]
+
| 1 || [[#OpenPortForDev|OpenPortForDev]]
 
|-
 
|-
| 0x34 || 0x3E || 0x35000401 || H, 6 || Joy-Con(R) IsAttached (insertion, Joy-Con pin 5/console TX, pulled low on insert?) (EXTCON_DET_U) || In || [[HID services]]
+
| 2 || [[#GetWritableLength|GetWritableLength]]
 
|-
 
|-
| 0x35 || 0xE2 || 0xC9000401 || CC, 2 || Secondary Boot Device Configration (RAM_CODE2) || In ||
+
| 3 || [[#Send_2|Send]]
 
|-
 
|-
| 0x36 || 0xE4 || 0x39000402 || CC, 4 || Fan Power (USB) (VDD50B_EN) || Out || [[PTM services]]
+
| 4 || [[#GetReadableLength|GetReadableLength]]
 
|-
 
|-
| 0x37 || 0x3A || 0x38000004 || H, 2 || WIFI_WAKE_HOST || In ||
+
| 5 || [[#Receive_2|Receive]]
 
|-
 
|-
| 0x38 || 0xC9 || 0x3C000002 || Z, 1 || SDCard Card Detect (SD_CD) || In || [[Filesystem services]]
+
| 6 || [[#BindPortEvent|BindPortEvent]]
 
|-
 
|-
| 0x39 || 0x4D || 0x39000404 || J, 5 || Charger IC (BQ24193) OTG Charge Select (OTG_FET_1) || Out || [[PTM services]], [[USB services]]
+
| 7 || [[#UnbindPortEvent|UnbindPortEvent]]
 
|-
 
|-
| 0x3A || 0x58 || 0x39000405 || L, 0 || Charger IC (BQ24193) OTG Charge Select (OTG_FET_2) || Out || [[PTM services]], [[USB services]]
+
| 8 || [14.0.0+] [[#OpenPort2|OpenPort2]]
 +
|}
 +
 
 +
=== OpenPort ===
 +
Takes 3 input u32s [[#UartPort]], '''BaudRate''' and [[#FlowControlMode]], 2 input u64s '''SendBufferLength''' and '''ReceiveBufferLength''' and 2 input TransferMemory handles '''SendHandle''' and '''ReceiveHandle'''. Returns an output boolean success value.
 +
 
 +
[6.0.0+] Takes 4 input u8s (padded as u32) '''IsInvertTx''', '''IsInvertRx''', '''IsInvertRts''' and '''IsInvertCts''', 3 input u32s [[#UartPort]], '''BaudRate''' and [[#FlowControlMode]], 2 input u64s '''SendBufferLength''' and '''ReceiveBufferLength''' and 2 input TransferMemory handles '''SendHandle''' and '''ReceiveHandle'''. Returns an output boolean success value.
 +
 
 +
[7.0.0+] Takes 4 input u8s (padded as u32) '''IsInvertTx''', '''IsInvertRx''', '''IsInvertRts''' and '''IsInvertCts''', 4 input u32s [[#UartPort]], '''BaudRate''', [[#FlowControlMode]] and '''DeviceVariation''', 2 input u64s '''SendBufferLength''' and '''ReceiveBufferLength''' and 2 input TransferMemory handles '''SendHandle''' and '''ReceiveHandle'''. Returns an output boolean success value.
 +
 
 +
This will Abort when the specified [[#UartPort]] is already being used, due to a [[SVC]] failing.
 +
 
 +
=== OpenPortForDev ===
 +
Same as [[#OpenPort]], but takes an input [[#UartPortForDev]] instead.
 +
 
 +
=== GetWritableLength ===
 +
No input. Returns an output u64 '''WritableLength'''.
 +
 
 +
=== Send ===
 +
Takes a type-0x21 input buffer '''InData'''. Returns an output u64 size.
 +
 
 +
=== GetReadableLength ===
 +
No input. Returns an output u64 '''ReadableLength'''.
 +
 
 +
=== Receive ===
 +
Takes a type-0x22 output buffer '''OutData'''. Returns an output u64 size.
 +
 
 +
=== BindPortEvent ===
 +
Takes an input u32 [[#PortEventType]] and an input s64 '''Threshold'''. Returns an output boolean success value and an Event handle with EventClearMode=0.
 +
 
 +
=== UnbindPortEvent ===
 +
Takes an input u32 [[#PortEventType]]. Returns an output boolean success value.
 +
 
 +
=== OpenPort2 ===
 +
Same as [[#OpenPort]], but takes an input u32 [[#UartPort|DeviceCode]] instead of an [[#UartPort]] and no longer returns an output boolean success value.
 +
 
 +
= pwm =
 +
This is "nn::pwm::IManager".
 +
 
 +
{| class="wikitable" border="1"
 
|-
 
|-
| 0x3B || 0x3E || 0x35000403 || H, 6 || Joy-Con(R) Wake Detect (EXTCON_DET_U) || In ||
+
! Cmd || Name
 
|-
 
|-
| 0x3C || 0x26 || 0x3500040D || E, 6 || Joy-Con(L) Wake Detect (EXTCON_DET_S) || In ||
+
| 0 || OpenSessionForDev
 
|-
 
|-
| 0x3D || -1 || 0x39000406 || || || ||
+
| 1 || OpenSession
 
|-
 
|-
| 0x3E || 0x33 || 0x35000404 || G, 3 || Joy-Con(R) CTS (checked low) (EXT_UART2_CTS) || In || [[HID services]]
+
| 2 || [6.0.0+] [[#OpenSession2_3|OpenSession2]]
 +
|}
 +
 
 +
== OpenSession2 ==
 +
Takes a [[#ChannelName|DeviceCode]] and returns an [[#IChannelSession]].
 +
 
 +
== IChannelSession ==
 +
This is "nn::pwm::IChannelSession".
 +
 
 +
{| class="wikitable" border="1"
 
|-
 
|-
| 0x3F || 0x1C || 0x3500040E || D, 4 || Joy-Con(L) CTS (checked low) (EXT_UART3_CTS) || In || [[HID services]]
+
! Cmd || Name
 
|-
 
|-
| 0x40 || 0xD9 || 0x39000408 || BB, 1 || 5V Step-Down Regulator Power (5V_STEPDOWN_EN) || Out || (SDEV only)
+
| 0 || SetPeriod
 
|-
 
|-
| 0x41 || 0x0C || 0x04000401 || B, 4 || USB Root Port 2 Over Current (USB_B2_OC) || In || [[USB services]] (SDEV only)
+
| 1 || GetPeriod
 
|-
 
|-
| 0x42 || 0x0D || 0x39000409 || B, 5 || 5V Step-Down Regulator Power Good Flag (5V_STEPDOWN_PG) || In || (SDEV only)
+
| 2 || [1.0.0-13.2.1] SetDuty
 
|-
 
|-
| 0x43 || 0x21 || 0x04000402 || E, 1 || USB Power (USB_A_EN) || Out || [[USB services]] (SDEV only)
+
| 3 || [1.0.0-13.2.1] GetDuty
 
|-
 
|-
| 0x44 || 0x27 || 0x04000403 || E, 7 || USB Power Flag (USB_A_FLAG) || In || [[USB services]] (SDEV only)
+
| 4 || SetEnabled
 
|-
 
|-
| 0x45 || 0x92 || 0x04000404 || S, 2 || USB Root Port 3 Over Current (USB_B3_OC) || In || [[USB services]] (SDEV only)
+
| 5 || GetEnabled
 
|-
 
|-
| 0x46 || 0x95 || 0x04000405 || S, 5 || USB Root Port 3 Power (USB_B3_EN) || Out || [[USB services]] (SDEV only)
+
| 6 || [6.0.0+] [[#SetDutyCycle|SetDutyCycle]]
 
|-
 
|-
| 0x47 || 0x98 || 0x04000406 || T, 0 || USB Root Port 2 Power (USB_B2_EN) || Out || [[USB services]] (SDEV only)
+
| 7 || [6.0.0+] [[#GetDutyCycle|GetDutyCycle]]
 +
|}
 +
 
 +
=== SetDutyCycle ===
 +
Takes an input double '''DutyCycle'''. No output.
 +
 
 +
=== GetDutyCycle ===
 +
No input. Returns an output double '''DutyCycle'''.
 +
 
 +
= pinmux =
 +
This is "nn::pinmux::IManager".
 +
 
 +
{| class="wikitable" border="1"
 
|-
 
|-
| 0x48 || 0x10 || 0x34000004 || C, 0 || HDMI 5V (HDMI_5V_EN) || Out || [2.0.0+] [[NV services]]
+
! Cmd || Name
 
|-
 
|-
| 0x49 || 0x11 || 0x04000407 || C, 1 || USB Root Port 1 Power (USB_B1_EN) || Out || [[USB services]]
+
| 0 || [[#OpenSession_3|OpenSession]]
 +
|}
 +
 
 +
== OpenSession ==
 +
Takes an [[#AssignablePinGroupName]] or an [[#AssignablePinGroupNameForHardwareTest]] and returns an [[#ISession|ISession]].
 +
 
 +
== ISession ==
 +
This is "nn::pinmux::ISession".
 +
 
 +
{| class="wikitable" border="1"
 
|-
 
|-
| 0x4A || 0x12 || 0x34000005 || C, 2 || HDMI/Power Delivery Switch (HDMI_PD_TR_EN) || Out || [[NV services]]
+
! Cmd || Name
 
|-
 
|-
| 0x4B || 0x42 || 0x3D000003 || I, 2 || Fan Enable (FAN_EN) || Out || [[PTM services]]
+
| 0 || [[#SetPinAssignment|SetPinAssignment]]
 
|-
 
|-
| 0x4C || 0xE6 || 0x04000408 || CC, 6 || USB Root Port 1 Over Current (USB_B1_OC) || In || [[USB services]] (SDEV only)
+
| 1 || [[#GetPinAssignment|GetPinAssignment]]
 
|-
 
|-
| [2.0.0+] 0x4D || 0xAC || 0x3D000001 || V, 4 || Fan Pulse-Width Modulation Control (PWM_FAN) || Out || [[PTM services]]
+
| 2 || [[#SetPinAssignmentForHardwareTest|SetPinAssignmentForHardwareTest]]
 
|-
 
|-
| [2.0.0+] 0x4E || 0xE1 || 0x34000006 || CC, 1 || HDMI Hot Plug Detect (HDMI_INT_DP_HPD_PCC1) || In || [[NV services]]
+
| 3 || [17.0.0+] SetSfioConfiguration
 
|-
 
|-
| [5.0.0+] 0x4F || 0x56 || 0x3E000003 || K, 6 || MAX77812_IRQ || ||
+
| 4 || [17.0.0+] GetSfioConfiguration
 
|-
 
|-
| [6.0.0+] 0x50 || 0x20 || 0xCA000001 || E, 0 || || ||
+
| 5 || [17.0.0+] SetInputEnableConfiguration
 
|-
 
|-
| [6.0.0+] 0x51 || 0x21 || 0xCA000002 || E, 1 || || ||
+
| 6 || [17.0.0+] GetInputEnableConfiguration
 
|-
 
|-
| [6.0.0+] 0x52 || 0x22 || 0xCA000003 || E, 2 || || ||
+
| 7 || [17.0.0+] SetPullConfiguration
 
|-
 
|-
| [6.0.0+] 0x53 || 0x23 || 0xCA000004 || E, 3 || || ||
+
| 8 || [17.0.0+] GetPullConfiguration
 
|-
 
|-
| [6.0.0+] 0x54 || 0x4C || 0x36000004 || J, 4 || NFC_IRQ || ||
+
| 9 || [17.0.0+] SetPmConfiguration
 
|-
 
|-
| [6.0.0+] 0x55 || 0x57 || 0x36000003 || K, 7 || NFC_RST || ||
+
| 10 || [17.0.0+] GetPmConfiguration
 +
|}
 +
 
 +
=== SetPinAssignment ===
 +
Takes a [[#PinAssignment]]. No output.
 +
 
 +
=== GetPinAssignment ===
 +
No input. Returns a [[#PinAssignment]].
 +
 
 +
=== SetPinAssignmentForHardwareTest ===
 +
Takes a [[#PinAssignmentForHardwareTest]]. No output.
 +
 
 +
= sasbus =
 +
This is "nn::sasbus::IManager".
 +
 
 +
This was added with [3.0.0+].
 +
 
 +
{| class="wikitable" border="1"
 
|-
 
|-
| [6.0.0+] 0x56 || 0x94 || 0x35000415 || S, 4 || MCU_IRQ || ||
+
! Cmd || Name
 
|-
 
|-
| [6.0.0+] 0x57 || 0x98 || 0x35000416 || T, 0 || MCU_BOOT || ||
+
| 0 || [[#OpenSession_4|OpenSession]]
 +
|}
 +
 
 +
== OpenSession ==
 +
Takes a [[#SasbusPort]] and returns an [[#ISession_2|ISession]].
 +
 
 +
== ISession ==
 +
This is "nn::sasbus::ISession".
 +
 
 +
{| class="wikitable" border="1"
 
|-
 
|-
| [6.0.0+] 0x58 || 0x99 || 0x35000417 || T, 1 || MCU_RST || ||
+
! Cmd || Name
|-
 
| [6.0.0+] 0x59 || 0xBB || 0x39000403 || X, 3 || Fan Power (5V3) (VDD5V3_EN) || || [[PTM services]]
 
|-
 
| [6.0.0+] 0x5A || 0xE5 || 0x35000418 || CC, 5 || MCU_POR || ||
 
|-
 
| [6.0.0+] 0x5B || 0xAB || 0x35000005 || V, 3 || || ||
 
|-
 
| [6.0.0+] 0x5C || 0x4E || 0x36000002 || J, 6 || || ||
 
|-
 
| [7.0.0+] - || 0x32 || 0x35000406 || G, 2 || Joy-Con(R) RTS || ||
 
 
|-
 
|-
| [7.0.0+] - || 0x1B || 0x35000410 || D, 3 || Joy-Con(L) RTS || ||
+
| 0 || [[#Send_3|Send]]
 
|-
 
|-
| [7.0.0+] - || 0x17 || 0x3500041B || C, 7 || || ||
+
| 1 || [[#Receive_3|Receive]]
 
|-
 
|-
| [7.0.0+] - || 0x18 || 0x3500041C || D, 0 || || ||
+
| 2 || [[#StartPeriodicReceiveMode|StartPeriodicReceiveMode]]
 
|-
 
|-
| [7.0.0+] - || 0x15 || 0x3500041D || C, 5 || || ||
+
| 3 || [[#StopPeriodicReceiveMode|StopPeriodicReceiveMode]]
 
|-
 
|-
| [7.0.0+] - || 0x16 || 0x3500041E || C, 6 || || ||
+
| 4 || [19.0.0+]
 
|-
 
|-
| [8.0.0+] - || 0x27 || 0x35000415 || S, 4 || MCU_IRQ (duplicate) || ||
+
| 5 || [19.0.0+]
 
|}
 
|}
  
== GpioPadDescriptor ==
+
=== Send ===
 +
Takes a type-0x21 input buffer and an u8 '''SpiCommand'''. No output.
 +
 
 +
=== Receive ===
 +
Takes a type-0x22 output buffer and an u8 '''SpiCommand'''. No output.
 +
 
 +
=== StartPeriodicReceiveMode ===
 +
Takes an u8 '''SpiCommand''' (padded to u32), an u32, two u64s and a copy handle. No output.
 +
 
 +
=== StopPeriodicReceiveMode ===
 +
No input/output.
 +
 
 +
=== Cmd4 ===
 +
Takes a total of 0x10-bytes of input and an input handle. No output.
 +
 
 +
This is similar to [[#StartPeriodicReceiveMode|StartPeriodicReceiveMode]]. This eventually calls an impl func which just writes some input fields into state, then (on NX) Aborts.
 +
 
 +
=== Cmd5 ===
 +
No input/output.
 +
 
 +
This is identical to [[#StopPeriodicReceiveMode|StopPeriodicReceiveMode]].
 +
 
 +
= led =
 +
This is "nn::led::detail::IManager".
 +
 
 +
This was added with [8.1.1+].
 +
 
 
{| class="wikitable" border="1"
 
{| class="wikitable" border="1"
 
|-
 
|-
! Bits || Description
+
! Cmd || Name
 
|-
 
|-
| 7-5 || Controller index
+
| 0 || [[#OpenController|OpenController]]
|-
 
| 4-3 || Port index
 
|-
 
| 2-0 || Pin number
 
 
|}
 
|}
  
== OpenSessionForDev ==
+
== OpenController ==
Takes a raw [[#GpioPadDescriptor]] and returns a [[#IPadSession]] session for it.
+
Takes a '''DeviceCode''' (which must be 0x35000065) and returns an [[#IController]] session for it.
 
 
== OpenSession ==
 
Same thing as [[#OpenSessionForDev]] except it takes a '''GpioPadName''' which is then converted to a [[#GpioPadDescriptor]]. Returns an [[#IPadSession]] session.
 
 
 
== OpenSessionForTest ==
 
Same as [[#OpenSession]] but panics on failure.
 
  
== OpenSession2 ==
+
== IController ==
Same as [[#OpenSession]] but takes a '''DeviceCode''' instead of a '''GpioPadName''' and an u32 '''DeviceUnk'''.
+
This is "nn::led::detail::IController".
  
== IPadSession ==
+
This was added with [8.1.1+].
This is "nn::gpio::IPadSession".
 
  
 
{| class="wikitable" border="1"
 
{| class="wikitable" border="1"
Line 264: Line 564:
 
! Cmd || Name
 
! Cmd || Name
 
|-
 
|-
| 0 || SetDirection
+
| 0 || StartLighting
 
|-
 
|-
| 1 || GetDirection
+
| 1 || StopLighting
 
|-
 
|-
| 2 || SetInterruptMode
+
| 2 || SetLightingMode
 
|-
 
|-
| 3 || GetInterruptMode
+
| 3 || GetLightingMode
 
|-
 
|-
| 4 || SetInterruptEnable
+
| 4 || IsLighting
 
|-
 
|-
| 5 || GetInterruptEnable
+
| 5 || SetRisingTime
 
|-
 
|-
| 6 || GetInterruptStatus
+
| 6 || GetRisingTime
 
|-
 
|-
| 7 || ClearInterruptStatus
+
| 7 || SetFallingTime
 
|-
 
|-
| 8 || SetValue
+
| 8 || GetFallingTime
 
|-
 
|-
| 9 || GetValue
+
| 9 || SetPeakTime
 
|-
 
|-
| 10 || BindInterrupt
+
| 10 || GetPeakTime
 
|-
 
|-
| 11 || UnbindInterrupt
+
| 11 || SetPulseInterval
 
|-
 
|-
| 12 || SetDebounceEnabled
+
| 12 || GetPulseInterval
 
|-
 
|-
| 13 || GetDebounceEnabled
+
| 13 || SetPulseCount
 
|-
 
|-
| 14 || SetDebounceTime
+
| 14 || GetPulseCount
 
|-
 
|-
| 15 || GetDebounceTime
+
| 15 || GetMaxPulseCount
 
|-
 
|-
| 16 || [4.0.0+] SetValueForSleepState
+
| 16 || SetBreathInterval
 
|-
 
|-
| 17 || [6.0.0+] GetValueForSleepState
+
| 17 || GetBreathInterval
 +
|-
 +
| 18 || SetConstantBrightness
 +
|-
 +
| 19 || GetConstantBrightness
 +
|-
 +
| 20 || [10.0.0+] GetBreathingStatus ([8.1.1-9.2.0] RegisterPwmChannel)
 +
|-
 +
| 21 || [8.1.1-9.2.0] UnregisterPwmChannel
 
|}
 
|}
  
= i2c, i2c:pcv =
+
= GpioPadName =
This is "nn::i2c::IManager".
+
This is "nn::gpio::GpioPadName".
  
{| class="wikitable" border="1"
+
{| class="wikitable sortable" border="1"
 +
|-
 +
! Value || Name || [[#GpioPadDescriptor|GpioPadDescriptor]] || DeviceCode || Tegra (port, pin) || Description || Direction || Used by (services) || Used by (hardware)
 +
|-
 +
| 0x01 || CodecLdoEnTemp || 0xCC || 0x33000002 || Z, 4 || Audio Codec (ALC5639) Power || Out || [[Audio services]], [[Fatal services]] || Icosa, Hoag, Iowa, Aula
 +
|-
 +
| 0x02 || PowSdEn || 0x24 || 0x3C000001 || E, 4 || SdCard Power || Out || [[PCV services]] || Icosa, Copper, Hoag, Iowa, Calcio, Aula
 +
|-
 +
| 0x03 || BtRst || 0x3C || 0x37000002 || H, 4 || Bluetooth Reset || Out || [[Bluetooth Driver services]] || Icosa, Copper, Hoag, Iowa, Calcio, Aula
 +
|-
 +
| 0x04 || RamCode3 || 0xDA || 0xC9000402 || BB, 2 || Secondary Boot Device Configration || In || || Icosa, Iowa
 +
|-
 +
| 0x05 || GameCardReset || 0xDB || 0x3C000402 || BB, 3 || Gamecard Reset || Out || [[Filesystem services]] || Icosa, Copper, Hoag, Iowa, Aula
 +
|-
 +
| 0x06 || CodecAlert || 0xDC || 0x33000003 || BB, 4 || Audio Codec (ALC5639) Alert || In || [[Audio services]] || Icosa, Hoag, Iowa, Aula
 +
|-
 +
| 0x07 || PowGc || 0x25 || 0x3C000401 || E, 5 || Gamecard Power || Out || || Icosa, Copper
 +
|-
 +
| 0x08 || DebugControllerDet || 0x90 || 0x350000CA || S, 0 || Debug Pad Detect || In || [[HID services]] || Icosa, Iowa
 +
|-
 +
| 0x09 || BattChgStatus || 0x91 || 0x39000407 || S, 1 || Battery Charge Status || In || || Icosa, Hoag, Iowa, Aula
 +
|-
 +
| 0x0A || BattChgEnableN || 0x96 || 0x39000003 || S, 6 || Charger IC (BQ24193) Charge Enable || Out || [[PTM services]] || Icosa, Hoag, Iowa, Aula
 +
|-
 +
| 0x0B || FanTach || 0x97 || 0x3D000002 || S, 7 || Fan Tachometer || In || || Icosa, Hoag, Iowa, Calcio, Aula
 +
|-
 +
| 0x0C || ExtconDetS || 0x26 || 0x3500040B || E, 6 || Joy-Con(L) IsAttached (insertion, Joy-Con pin 5/console TX, pulled low on insert)  || In || [[HID services]], [[AM services]] || Icosa, Iowa, Aula
 +
|-
 +
| 0x0D || Vdd50AEn || 0x05 || 0x39000401 || A, 5 || Fan and Joy-Con 5V Power (Battery) || Out || [[PTM services]] || Icosa, Hoag, Iowa, Aula
 +
|-
 +
| 0x0E || SdevCoaxSel1 || 0x78 || 0xCA000406 ([1.0.0-10.0.0] 0xCA000402) || P, 0 || SDEV Coax Select || In || || Icosa, Iowa
 +
|-
 +
| 0x0F || GameCardCd || 0x93 || 0x3C000403 || S, 3 || Gamecard Card Detect || In || [[Filesystem services]], [[AM services]] || Icosa, Copper, Hoag, Iowa, Aula
 +
|-
 +
| 0x10 || ProdType0 || 0x7D || 0xC900040B || P, 5 || || In || || Icosa, Copper, Iowa
 +
|-
 +
| 0x11 || ProdType1 || 0x7C || 0xC900040C || P, 4 || || In || || Icosa, Copper, Iowa
 +
|-
 +
| 0x12 || ProdType2 || 0x7B || 0xC900040D || P, 3 || || In || || Icosa, Copper, Iowa
 +
|-
 +
| 0x13 || ProdType3 || 0x7A || 0xC900040E || P, 2 || || In || || Icosa, Copper, Iowa
 +
|-
 +
| 0x14 || TempAlert || 0xBC || 0x3E000002 || X, 4 || Temperature Sensor || In || || Icosa, Copper, Hoag, Iowa, Calcio, Aula
 +
|-
 +
| 0x15 || CodecHpDetIrq || 0xAE || 0x33000004 || V, 6 || Audio Codec (ALC5639) Headphone Detect || In || [[Audio services]] || Icosa, Hoag, Iowa, Aula
 +
|-
 +
| 0x16 || MotionInt || 0xBA || 0x35000041 || X, 2 || Built-in IMU IRQ || In || || Icosa, Hoag, Iowa, Aula
 +
|-
 +
| 0x17 || TpIrq || 0xB9 || 0x35000036 || X, 1 || TouchPanel IRQ || In || [[HID services]] || Icosa, Hoag, Iowa, Aula
 +
|-
 +
| 0x18 || ButtonSleep2 || 0xBD || 0x35000001 || X, 5 || Power Button (Connected only on Hoag) || In || || Icosa, Copper, Hoag, Iowa, Calcio, Aula
 +
|-
 +
| 0x19 || ButtonVolUp || 0xBE || 0x35000002 || X, 6 || Volume Up || In || [[Boot2]], [[Audio services]], [[Fatal services]] || Icosa, Copper, Hoag, Iowa, Calcio, Aula
 +
|-
 +
| 0x1A || ButtonVolDn || 0xBF || 0x35000003 || X, 7 || Volume Down || In || [[Boot2]], [[Audio services]] || Icosa, Copper, Hoag, Iowa, Calcio , Aula
 +
|-
 +
| 0x1B || BattMgicIrq || 0xC0 || 0x39000034 || Y, 0 || Fuel Gauge IC (MAX17050) IRQ || In || [[PTM services]], [[AM services]] || Icosa, Hoag, Iowa, Aula
 +
|-
 +
| 0x1C || RecoveryKey || 0xC1 || 0x35000004 || Y, 1 || Recovery Mode Key (HOME Button) || In || || Icosa, Copper, Hoag, Iowa, Calcio, Aula
 +
|-
 +
| 0x1D || PowLcdBlEn || 0xA9 || 0x3400003E || V, 1 || LCD Backlight Power || Out || [[NV services]], [[Backlight services]] || Icosa, Hoag, Iowa
 +
|-
 +
| 0x1E || LcdReset || 0xAA || 0x34000033 || V, 2 || LCD Reset || Out || [[NV services]] || Icosa, Hoag, Iowa, Aula
 +
|-
 +
| 0x1F || PdVconnEn || 0x55 || 0x040000CC || K, 5 || USB-PD Controller (RHOM BM92T30MWV) VCONN Power || Out || [[PTM services]], [[USB services]] || Icosa, Hoag, Iowa, Aula
 +
|-
 +
| 0x20 || PdRstN || 0xAD || 0x040000CA || V, 5 || USB-PD Controller (RHOM BM92T30MWV) ResetN || Out || [[USB services]] || Icosa, Copper, Hoag, Iowa, Calcio, Aula
 +
|-
 +
| 0x21 || Bq24190Irq || 0xC8 || 0x39000002 || Z, 0 || Charger IC (BQ24193) IRQ || In || [[PTM services]], [[AM services]] || Icosa, Hoag, Iowa, Aula
 +
|-
 +
| 0x22 || SdevCoaxSel0 || 0xCA || 0xCA000405 ([1.0.0-10.0.0] 0xCA000401) || Z, 2 || SDEV Coax Select || In || || Icosa, Iowa
 +
|-
 +
| 0x23 || SdWp || 0xCB || 0x3C000003 || Z, 3 || SdCard Write Protect || In || || Icosa, Copper, Hoag, Iowa, Calcio, Aula
 +
|-
 +
| 0x24 || TpReset || 0x4F || 0x35000035 || J, 7 || TouchPanel Reset || Out || [[HID services]] || Icosa, Hoag, Iowa, Aula
 +
|-
 +
| 0x25 || BtGpio2 || 0x50 || 0x37000401 || K, 0 || || In || || Icosa, Copper, Hoag, Iowa, Calcio, Aula
 +
|-
 +
| 0x26 || BtGpio3 || 0x51 || 0x37000402 || K, 1 || || In || || Icosa, Copper, Hoag, Iowa, Calcio, Aula
 +
|-
 +
| 0x27 || BtGpio4 || 0x52 || 0x37000403 || K, 2 || || In || || Icosa, Copper, Hoag, Iowa, Calcio, Aula
 +
|-
 +
| 0x28 || CradleIrq || 0x54 || 0x040000CB || K, 4 || USB-PD Controller (RHOM BM92T30MWV) IRQ || In || [[USB services]], [[AM services]] || Icosa, Copper, Hoag, Iowa, Calcio, Aula
 +
|-
 +
| 0x29 || PowVcpuInt || 0x56 || 0x3E000003 || K, 6 || Sub-PMIC for CPU (MAX77621) IRQ || In || ||  Icosa, Copper, Aula
 +
|-
 +
| 0x2A || Max77621GpuInt || 0x57 || 0x3E000004 || K, 7 || Sub-PMIC for GPU (MAX77621) IRQ || In || || Icosa, Copper
 +
|-
 +
| 0x2B || ExtconChgU || 0x53 || 0x35000402 || K, 3 || Joy-Con(R) Charge || Out || [[HID services]] || Icosa, Iowa, Aula
 +
|-
 +
| 0x2C || ExtconChgS || 0xE3 || 0x3500040C || CC, 3 || Joy-Con(L) Charge || Out || [[HID services]] || Icosa, Iowa, Aula
 +
|-
 +
| 0x2D || WifiRfDisable || 0x38 || 0x38000003 || H, 0 || || Out || || Icosa, Copper, Hoag, Iowa, Calcio
 +
|-
 +
| 0x2E || WifiReset || 0x39 || 0x38000002 || H, 1 || WiFi Reset || Out || [[WLAN services]], [[PCIe services]] || Icosa, Copper, Hoag, Iowa, Calcio, Aula
 +
|-
 +
| 0x2F || ApWakeBt || 0x3B || 0x37000003 || H, 3 || Wake Bluetooth from Host || Out || [[Bluetooth Driver services]] || Icosa, Copper, Hoag, Iowa, Calcio, Aula
 +
|-
 +
| 0x30 || BtWakeAp || 0x3D || 0x37000004 || H, 5 || Wake Host from Bluetooth || In || [[AM services]] || Icosa, Copper, Hoag, Iowa, Calcio, Aula
 +
|-
 +
| 0x31 || BtGpio5 || 0x3F || 0x37000404 || H, 7 || || Out || || Icosa, Copper, Hoag, Iowa, Calcio, Aula
 +
|-
 +
| 0x32 || PowLcdVddPEn || 0x40 || 0x34000034 || I, 0 || LCD Backlight PAVDD +5V || Out || [[NV services]] || Icosa, Hoag, Iowa
 +
|-
 +
| 0x33 || PowLcdVddNEn || 0x41 || 0x34000035 || I, 1 || LCD Backlight NAVDD -5V || Out || [[NV services]] || Icosa, Hoag, Iowa
 +
|-
 +
| 0x34 || ExtconDetU || 0x3E || 0x35000401 || H, 6 || Joy-Con(R) IsAttached (insertion, Joy-Con pin 5/console TX, pulled low on insert)  || In || [[HID services]], [[AM services]] || Icosa, Iowa, Aula
 +
|-
 +
| 0x35 || RamCode2 || 0xE2 || 0xC9000401 || CC, 2 || Secondary Boot Device Configration || In || || Icosa, Iowa
 +
|-
 +
| 0x36 || Vdd50BEn || 0xE4 || 0x39000402 || CC, 4 || Fan and Joy-Con 5V Power (USB) || Out || [[PTM services]] || Icosa, Iowa
 +
|-
 +
| 0x37 || WifiWakeHost || 0x3A || 0x38000004 || H, 2 || Wake Host from Wifi || In || [[AM services]] || Icosa, Copper, Hoag, Iowa, Calcio, Aula
 +
|-
 +
| 0x38 || SdCd || 0xC9 || 0x3C000002 || Z, 1 || SdCard Card Detect || In || [[Filesystem services]], [[AM services]] || Icosa, Copper, Hoag, Iowa, Calcio, Aula
 +
|-
 +
| 0x39 || OtgFet1ForSdev || 0x4D || 0x39000404 || J, 5 || Charger IC (BQ24193) OTG Charge Select || Out || [[PTM services]], [[USB services]] || Icosa, Iowa
 +
|-
 +
| 0x3A || OtgFet2ForSdev || 0x58 || 0x39000405 || L, 0 || Charger IC (BQ24193) OTG Charge Select || Out || [[PTM services]], [[USB services]] || Icosa, Iowa
 +
|-
 +
| 0x3B || ExtConWakeU || 0x3E || 0x35000403 || H, 6 || Joy-Con(R) Wake Detect || In || || Icosa, Hoag, Iowa, Aula
 +
|-
 +
| 0x3C || ExtConWakeS || 0x26 || 0x3500040D || E, 6 || Joy-Con(L) Wake Detect || In || || Icosa, Hoag, Iowa, Aula
 +
|-
 +
| 0x3D || PmuIrq || -1 || 0x39000406 || GIC 86 || Main PMIC IRQ (PMU_EXT IRQ) || || ||
 +
|-
 +
| 0x3E || ExtUart2Cts || 0x33 || 0x35000404 || G, 3 || Joy-Con(R) CTS (checked low) || In || [[HID services]], [[AM services]] ||
 +
|-
 +
| 0x3F || ExtUart3Cts || 0x1C || 0x3500040E || D, 4 || Joy-Con(L) CTS (checked low) || In || [[HID services]], [[AM services]] ||
 
|-
 
|-
! Cmd || Name
+
| 0x40 || 5VStepDownEn || 0xD9 || 0x39000408 || BB, 1 || 5V Step-Down Regulator Power || Out || || Copper
 
|-
 
|-
| 0 || [[#OpenSessionForDev_2|OpenSessionForDev]]
+
| 0x41 || UsbSwitchB2Oc || 0x0C || 0x04000401 || B, 4 || USB Root Port 2 Over Current || In || [[USB services]] || Copper
 
|-
 
|-
| 1 || [[#OpenSession_2|OpenSession]]
+
| 0x42 || 5VStepDownPg || 0x0D || 0x39000409 || B, 5 || 5V Step-Down Regulator Power Good Flag || In || || Copper
 
|-
 
|-
| [1.0.0-5.1.0] 2 || [[#HasDevice|HasDevice]]
+
| 0x43 || UsbSwitchAEn || 0x21 || 0x04000402 || E, 1 || USB Power || Out || [[USB services]] || Copper
 
|-
 
|-
| [1.0.0-5.1.0] 3 || [[#HasDeviceForDev|HasDeviceForDev]]
+
| 0x44 || UsbSwitchAFlag || 0x27 || 0x04000403 || E, 7 || USB Power Flag || In || [[USB services]] || Copper
 
|-
 
|-
| 4 || [6.0.0+] [[#OpenSession2_2|OpenSession2]]
+
| 0x45 || UsbSwitchB3Oc || 0x92 || 0x04000404 || S, 2 || USB Root Port 3 Over Current || In || [[USB services]] || Copper
|}
 
 
 
== Known Devices ==
 
{| class="wikitable sortable" border="1"
 
 
|-
 
|-
! Name || DeviceCode || Port:Addr || Is10bit || Speed || Max Retries || Retry Delay || Usage || Used by
+
| 0x46 || UsbSwitchB3En || 0x95 || 0x04000405 || S, 5 || USB Root Port 3 Power || Out || [[USB services]] || Copper
 
|-
 
|-
| 0 || 0x350000C9 || 0:52 || N || 100000 || 0 ||       0 || DebugPadDriver || [[HID services]]
+
| 0x47 || UsbSwitchB2En || 0x98 || 0x04000406 || T, 0 || USB Root Port 2 Power || Out || [[USB services]] || Copper
 
|-
 
|-
| 1 || 0x35000033 || 2:49 || N || 400000 || 0 ||       0 || TouchPanel || [[HID services]]
+
| 0x48 || Hdmi5VEn || 0x10 || 0x34000004 || C, 0 || HDMI 5V Power || Out || [[NV services]] || Copper, Calcio
 
|-
 
|-
| 2 || 0x3E000001 || 0:4c || N || 100000 || 0 ||       0 || Temperature Sensor (TMP451 or NCT72) || [[PTM services]]
+
| 0x49 || UsbSwitchB1En || 0x11 || 0x04000407 || C, 1 || USB Root Port 1 Power || Out || [[USB services]] || Copper, Calcio
 
|-
 
|-
| 3 || 0x3E000001 || 0:4c || N || 100000 || 0 ||       0 || Temperature Sensor (TMP451 or NCT72) (duplicate) || [[PTM services]]
+
| 0x4A || HdmiPdTrEn || 0x12 || 0x34000005 || C, 2 || HDMI/Power Delivery Switch || Out || [[NV services]] || Copper, Calcio
 
|-
 
|-
| 4 || 0x33000001 || 0:1c || N || 100000 || 0 ||       0 || Audio Codec (ALC5639) || [[Audio services]], [[Fatal services]]
+
| 0x4B || FanEn || 0x42 || 0x3D000003 || I, 2 || Fan Power || Out || [[PTM services]] || Copper
 
|-
 
|-
| 5 || 0x3B000001 || 4:68 || N || 400000 || 3 || 5000000 || PMIC RTC (max77620_rtc0), max77620_irq0 || [[PCV services]]
+
| 0x4C || UsbSwitchB1Oc || 0xE6 || 0x04000408 || CC, 6 || USB Root Port 1 Over Current || In || [[USB services]] || Copper, Calcio
 
|-
 
|-
| 6 || 0x3A000001 || 4:3c || N || 400000 || 3 || 5000000 || PMIC (MAX77620), max77620_irq0 || [[PCV services]]
+
| [2.0.0+] 0x4D || PwmFan || 0xAC || 0x3D000001 || V, 4 || Pulse-Width Modulation Fan Control || Out || [[PTM services]] || Copper
 
|-
 
|-
| 7 || 0x3A000003 || 4:1b || N || 400000 || 3 || 5000000 || Sub-PMIC for CPU (max77621_cpu) || [[PCV services]]
+
| [2.0.0+] 0x4E || HdmiHpd || 0xE1 || 0x34000006 || CC, 1 || HDMI Hot Plug Detect || In || [[NV services]] || Copper, Calcio
 
|-
 
|-
| 8 || 0x3A000004 || 4:1c || N || 400000 || 3 || 5000000 || Sub-PMIC for GPU (max77621_gpu) || [[PCV services]]
+
| [5.0.0+] 0x4F || Max77812Irq || 0x56 || 0x3E000003 || K, 6 || Sub-PMIC (CPU/GPU/RAM) IRQ || In || || Hoag, Iowa, Calcio
 
|-
 
|-
| 9 || 0x39000001 || 0:6b || N || 100000 || 3 || 5000000 || Charger IC (BQ24193) || [[PTM services]]
+
| [6.0.0+] 0x50 || Debug0 || 0x20 || 0xCA000001 || E, 0 || || Out || || Hoag, Calcio, Aula
 
|-
 
|-
| 10 || 0x39000033 || 0:36 || N || 100000 || 3 || 5000000 || Fuel Gauge IC (MAX17050) || [[PTM services]], [[PCV services]]
+
| [6.0.0+] 0x51 || Debug1 || 0x21 || 0xCA000002 || E, 1 || || Out || || Hoag, Calcio, Aula
 
|-
 
|-
| 11 || 0x040000C9 || 0:18 || N || 100000 || 3 || 5000000 || USB-PD controller (RHOM BM92T30MWV) || [[USB services]]
+
| [6.0.0+] 0x52 || Debug2 || 0x22 || 0xCA000003 || E, 2 || || Out || || Hoag, Calcio, Aula
 
|-
 
|-
| 12 || 0x3F000401 || 1:40 || N || 400000 || 3 || 5000000 || Power Monitor (ina226_V_VDD15V0-HB) || Factory testing
+
| [6.0.0+] 0x53 || Debug3 || 0x23 || 0xCA000004 || E, 3 || || Out || || Hoag, Calcio, Aula
 
|-
 
|-
| 13 || 0x3F000001 || 1:41 || N || 400000 || 3 || 5000000 || Power Monitor (ina226_V_VSYS-CPU-DS) || Factory testing
+
| [6.0.0+] 0x54 || NfcIrq || 0x4C || 0x36000004 || J, 4 || NFC Controller IRQ || In || [[NFC services]] || Hoag
 
|-
 
|-
| 14 || 0x3F000002 || 1:44 || N || 400000 || 3 || 5000000 || Power Monitor (ina226_V_VSYS-GPU-DS) || Factory testing
+
| [6.0.0+] 0x55 || NfcRst || 0x57 || 0x36000003 || K, 7 || NFC Controller Reset || Out || [[NFC services]] || Hoag
 
|-
 
|-
| 15 || 0x3F000003 || 1:45 || N || 400000 || 3 || 5000000 || Power Monitor (ina226_V_VSYS-DDR-DS) || Factory testing
+
| [6.0.0+] 0x56 || McuIrq || 0x27 ([6.0.0-8.0.0] 0x94) || 0x35000415 || E, 7 || Sio MCU IRQ || In || || Hoag
 
|-
 
|-
| 16 || 0x3F000402 || 1:46 || N || 400000 || 3 || 5000000 || Power Monitor (ina226_V_VSYS-AP) || Factory testing
+
| [6.0.0+] 0x57 || McuBoot || 0x98 || 0x35000416 || T, 0 || Sio MCU BOOT0 Select (0: Flash, 1: SRAM) || Out || [[HID services]] || Hoag
 
|-
 
|-
| 17 || 0x3F000403 || 1:47 || N || 400000 || 3 || 5000000 || Power Monitor (ina226_V_VSYS-BL-DS) || Factory testing
+
| [6.0.0+] 0x58 || McuRst || 0x99 || 0x35000417 || T, 1 || Sio MCU ResetN (Output LOW -> Input) || In || [[HID services]] || Hoag
 
|-
 
|-
| 18 || 0x35000047 || 1:29 || N || 400000 || 3 || 5000000 || Ambient Light Sensor (BH1730) || [[Backlight services]]
+
| [6.0.0+] 0x59 || Vdd5V3En || 0xBB || 0x39000403 || X, 3 || OTG VBUS Power || Out || [[PTM services]] || Hoag, Iowa, Aula
 
|-
 
|-
| 19 || 0x3F000404 || 1:48 || N || 400000 || 3 || 5000000 || Power Monitor (ina226_CORE) || Factory testing
+
| [6.0.0+] 0x5A || McuPor || 0xE5 || 0x35000418 || CC, 5 || Sio MCU NPOR || Out || [[HID services]] || Hoag
 
|-
 
|-
| 20 || 0x3F000405 || 1:49 || N || 400000 || 3 || 5000000 || Power Monitor (ina226_Soc-1V8) || Factory testing
+
| [6.0.0+] 0x5B || (McuHome) || 0xAB || 0x35000005 || V, 3 || Sio MCU Home Button || In || [[HID services]], [[AM services]] || Hoag
 
|-
 
|-
| 21 || 0x3F000406 || 1:4a || N || 400000 || 3 || 5000000 || Power Monitor (ina226_LPDDR4-1V8) || Factory testing
+
| [6.0.0+] 0x5C || NfcEn || 0x4E || 0x36000002 || J, 6 || NFC Controller Power || Out || [[NFC services]] || Hoag
 
|-
 
|-
| 22 || 0x3F000407 || 1:4b || N || 400000 || 3 || 5000000 || Power Monitor (ina226_REG1V32) || Factory testing
+
| [7.0.0+] - || ExtUart2Rts || 0x32 || 0x35000406 || G, 2 || Joy-Con(R) RTS || In || ||  
 
|-
 
|-
| 23 || 0x3F000408 || 1:4d || N || 400000 || 3 || 5000000 || Power Monitor (ina226_VDD3V3-SYS) || Factory testing
+
| [7.0.0+] - || ExtUart3Rts || 0x1B || 0x35000410 || D, 3 || Joy-Con(L) RTS || In || ||  
 
|-
 
|-
| [2.0.0+] 24 || 0x34000001 || 3:50 || N || 100000 || 0 ||       0 || HDMI DDC || [[NV services]]
+
| [7.0.0+] - || || 0x17 || 0x3500041B || C, 7 || SPI4 MOSI (Built-in IMU, set as gpio-input so Sio can use IMU) || In || || Hoag
 
|-
 
|-
| [2.0.0+] 25 || 0x34000002 || 3:54 || N || 100000 || 0 ||       0 || HDMI SCDC || [[NV services]]
+
| [7.0.0+] - || || 0x18 || 0x3500041C || D, 0 || SPI4 MISO (Built-in IMU, set as gpio-input so Sio can use IMU) || In || || Hoag
 
|-
 
|-
| [2.0.0+] 26 || 0x34000003 || 3:3a || N || 100000 || 0 ||       0 || HDMI HDCP || [[NV services]]
+
| [7.0.0+] - || || 0x15 || 0x3500041D || C, 5 || SPI4 SCLK (Built-in IMU, set as gpio-input so Sio can use IMU) || In || || Hoag
 
|-
 
|-
| [4.0.0+] 27 || 0x3A000005 || 4:a4 || N || 400000 || 0 ||       0 || Buck Regulator (FAN53528) ||
+
| [7.0.0+] - || || 0x16 || 0x3500041E || C, 6 || SPI4 CS0 (Built-in IMU, set as gpio-input so Sio can use IMU) || In || || Hoag
 
|-
 
|-
| [4.0.0+] 28 || 0x3A000002 || 4:31 || N || 400000 || 0 ||       0 || PMIC (MAX77812) || [[PCV services]]
+
| [10.0.0+] - || || 0xC5 || 0x35000065 || Y, 5 || Notification LED PWM (CLK 32K OUT) || Out || || Hoag
 
|-
 
|-
| [4.0.0+] 29 || 0x3A000002 || 4:33 || N || 400000 || 0 ||       0 || PMIC (MAX77812) || [[PCV services]]
+
| [10.0.0+] - || || 0x29 || 0x04000409 || F, 1 || || Out || || Calcio
 
|-
 
|-
| [4.0.0+] 30 || 0x3F000409 || 1:4e || N || 400000 || 3 || 5000000 || Power Monitor (ina226_V_VDD-DDR-0V6) || Factory testing
+
| [10.0.0+] - || || 0x38 || 0x34000401 || H, 0 || OLED Panel IRQ || In || [[Display services]] || Aula
 
|-
 
|-
| [8.0.0+] 31 || 0x36000001 || 1:08 || N || 400000 || 3 || 5000000 || ||
+
| [13.0.0+] - || (BtGpio6) || 0x46 || 0x37000405 || I, 6 || UART-D RTS (Bluetooth) || In || ||  
 
|}
 
|}
  
== OpenSessionForDev ==
+
= GpioPadDescriptor =
Takes an u32 '''port''', an u16 '''addr''', an '''AddressingMode''' (1 for 10-bit, 0 otherwise) and a '''SpeedMode''' (400000 or 100000). Returns a [[#II2cSession]] session.
+
{| class="wikitable" border="1"
 +
|-
 +
! Bits || Description
 +
|-
 +
| 7-5 || Controller index
 +
|-
 +
| 4-3 || Port index
 +
|-
 +
| 2-0 || Pin number
 +
|}
  
== OpenSession ==
+
= Direction =
Takes an '''I2cDevice''' and returns a [[#II2cSession]] session for it.
+
This is "nn::gpio::Direction".
  
== HasDevice ==
+
{| class="wikitable sortable" border="1"
Takes an '''I2cDevice''' and returns true if the device exists or false otherwise.
+
|-
 +
! Value || Name
 +
|-
 +
| 0 || Input
 +
|-
 +
| 1 || Output
 +
|}
  
== HasDeviceForDev ==
+
= GpioValue =
Takes an u32 '''port''', an u16 '''addr''', an '''AddressingMode''' (1 for 10-bit, 0 otherwise) and a '''SpeedMode''' (400000 or 100000). Returns true if the device exists or false otherwise.
+
This is "nn::gpio::GpioValue".
  
== OpenSession2 ==
+
{| class="wikitable sortable" border="1"
Same as [[#OpenSession_2|OpenSession]] but takes a '''DeviceCode''' instead of a '''I2cDevice'''.
+
|-
 +
! Value || Name
 +
|-
 +
| 0 || Low
 +
|-
 +
| 1 || High
 +
|}
  
== II2cSession ==
+
= InterruptMode =
This is "nn::i2c::ISession".
+
This is "nn::gpio::InterruptMode".
  
{| class="wikitable" border="1"
+
{| class="wikitable sortable" border="1"
 +
|-
 +
! Value || Name
 
|-
 
|-
! Cmd || Name
+
| 0 || LowLevel
 
|-
 
|-
| [1.0.0-5.1.0] 0 || Send
+
| 1 || HighLevel
 
|-
 
|-
| [1.0.0-5.1.0] 1 || Receive
+
| 2 || RisingEdge
 
|-
 
|-
| [1.0.0-5.1.0] 2 || ExecuteCommandList
+
| 3 || FallingEdge
 
|-
 
|-
| 10 || [[#SendAuto]]
+
| 4 || AnyEdge
 +
|}
 +
 
 +
= InterruptStatus =
 +
This is "nn::gpio::InterruptStatus".
 +
 
 +
{| class="wikitable sortable" border="1"
 
|-
 
|-
| 11 || ReceiveAuto
+
! Value || Name
 
|-
 
|-
| 12 || [[#ExecuteCommandListAuto]]
+
| 0 || Inactive
 
|-
 
|-
| 13 || [6.0.0+]
+
| 1 || Active
 
|}
 
|}
  
== SendAuto ==
+
= WakeBitFlag =
Takes bytes to write in either a static buffer or a receive buffer, returns an error code for success
+
This is "nn::gpio::WakeBitFlag". This is a 128-bit flag.
  
== ExecuteCommandListAuto ==
+
= OpenMode =
Takes a command list from either a static buffer or a receive buffer, returns data in either a static (or recieve?) buffer.
+
This is "nn::gpio::OpenMode".
  
=== Commands ===
+
{| class="wikitable sortable" border="1"
* 0x40 [u8 len] <bytes> - Write bytes to device
+
|-
* 0xC1 [u8 len] - Receive bytes from device
+
! Value || Name
 +
|-
 +
| 0 || None
 +
|-
 +
| 1 || Read
 +
|-
 +
| 2 || Write
 +
|-
 +
| 3 || ReadWrite
 +
|}
  
= uart =
+
= I2cDevice =
This is "nn::uart::IManager".
+
This is "nn::i2c::I2cDevice".
  
{| class="wikitable" border="1"
+
{| class="wikitable sortable" border="1"
 +
|-
 +
! Value || Name || DeviceCode || Port:Addr || Is10bit || Speed || Max Retries || Retry Delay || Description || Used by (services) || Used by (hardware)
 +
|-
 +
|  0 || ClassicController || 0x350000C9 || 0:52 || N || 100000 || 0 ||      0 || DebugPad Driver || [[HID services]] || Icosa, Iowa, Aula
 +
|-
 +
|  1 || Ftm3bd56 || 0x35000033 || 2:49 || N || 400000 || 0 ||      0 || TouchPanel || [[HID services]] || Icosa, Hoag, Iowa, Aula
 +
|-
 +
|  2 || Tmp451 || 0x3E000001 || 0:4C || N || 100000 || 0 ||      0 || Temperature Sensor || [[PTM services]] || Icosa, Copper, Hoag, Iowa, Calcio, Aula
 +
|-
 +
|  3 || Nct72 || 0x3E000001 || 0:4C || N || 100000 || 0 ||      0 || Temperature Sensor || [[PTM services]] || Icosa, Copper, Hoag, Iowa, Calcio, Aula
 +
|-
 +
|  4 || Alc5639 || 0x33000001 || 0:1C || N || 100000 || 0 ||      0 || Audio Codec || [[Audio services]], [[Fatal services]] || Icosa, Hoag, Iowa, Aula
 +
|-
 +
|  5 || Max77620Rtc || 0x3B000001 || 4:68 || N || 400000 || 3 || 5000000 || PMIC RTC || [[PCV services]] || Icosa, Copper
 +
|-
 +
|  6 || Max77620Pmic || 0x3A000001 || 4:3C || N || 400000 || 3 || 5000000 || PMIC || [[PCV services]] || Icosa, Copper
 +
|-
 +
|  7 || Max77621Cpu || 0x3A000003 || 4:1B || N || 400000 || 3 || 5000000 || Sub-PMIC for CPU || [[PCV services]] || Icosa, Copper
 +
|-
 +
|  8 || Max77621Gpu || 0x3A000004 || 4:1C || N || 400000 || 3 || 5000000 || Sub-PMIC for GPU || [[PCV services]] || Icosa, Copper
 +
|-
 +
|  9 || Bq24193 || 0x39000001 || 0:6B || N || 100000 || 3 || 5000000 || Charger IC || [[PTM services]] || Icosa, Hoag, Iowa, Aula
 +
|-
 +
| 10 || Max17050 || 0x39000033 || 0:36 || N || 100000 || 3 || 5000000 || Fuel Gauge IC || [[PTM services]], [[PCV services]] || Icosa, Hoag, Iowa, Aula
 +
|-
 +
| 11 || Bm92t30mwv || 0x040000C9 || 0:18 || N || 100000 || 3 || 5000000 || USB-PD controller || [[USB services]] || Icosa, Copper, Hoag, Iowa, Calcio, Aula
 +
|-
 +
| 12 || Ina226Vdd15v0Hb || 0x3F000401 || 1:40 || N || 400000 || 3 || 5000000 || Power Monitor || nvdbgsvc || Factory
 +
|-
 +
| 13 || Ina226VsysCpuDs or Ina226VddCpuAp (SdevMariko) || 0x3F000001 || 1:41 || N || 400000 || 3 || 5000000 || Power Monitor || nvdbgsvc || Factory
 +
|-
 +
| 14 || Ina226VsysGpuDs or Ina226VddGpuAp (SdevMariko) || 0x3F000002 || 1:44 || N || 400000 || 3 || 5000000 || Power Monitor || nvdbgsvc || Factory
 +
|-
 +
| 15 || Ina226VsysDdrDs or Ina226VddDdr1V1Pmic (SdevMariko) || 0x3F000003 || 1:45 || N || 400000 || 3 || 5000000 || Power Monitor || nvdbgsvc || Factory
 +
|-
 +
| 16 || Ina226VsysAp || 0x3F000402 || 1:46 || N || 400000 || 3 || 5000000 || Power Monitor || nvdbgsvc || Factory
 +
|-
 +
| 17 || Ina226VsysBlDs || 0x3F000403 || 1:47 || N || 400000 || 3 || 5000000 || Power Monitor || nvdbgsvc || Factory
 +
|-
 +
| 18 || Bh1730 || 0x35000047 || 1:29 || N || 400000 || 3 || 5000000 || Ambient Light Sensor || [[Backlight services]] || Icosa, Hoag, Iowa, Aula
 +
|-
 +
| 19 || Ina226VsysCore or Ina226VddCoreAp (SdevMariko) || 0x3F000404 || 1:48 || N || 400000 || 3 || 5000000 || Power Monitor || nvdbgsvc || Factory
 +
|-
 +
| 20 || Ina226Soc1V8 or Ina226VddSoc1V8 (SdevMariko) || 0x3F000405 || 1:49 || N || 400000 || 3 || 5000000 || Power Monitor || nvdbgsvc || Factory
 
|-
 
|-
! Cmd || Name
+
| 21 || Ina226Lpddr1V8 or Ina226Vdd1V8 (SdevMariko) || 0x3F000406 || 1:4A || N || 400000 || 3 || 5000000 || Power Monitor || nvdbgsvc || Factory
 
|-
 
|-
| 0 || [[#DoesUartExist]]
+
| 22 || Ina226Reg1V32 || 0x3F000407 || 1:4B || N || 400000 || 3 || 5000000 || Power Monitor || nvdbgsvc || Factory
 
|-
 
|-
| 1 || DoesUartExistForTest
+
| 23 || Ina226Vdd3V3Sys || 0x3F000408 || 1:4D || N || 400000 || 3 || 5000000 || Power Monitor || nvdbgsvc || Factory
 
|-
 
|-
| 2 || [[#IsUartBaudrateValid]]
+
| [2.0.0+] 24 || HdmiDdc || 0x34000001 || 3:50 || N || 100000 || 0 ||      0 || HDMI DDC || [[NV services]] || Copper, Calcio
 
|-
 
|-
| 3 || IsUartBaudrateValidForTest
+
| [2.0.0+] 25 || HdmiScdc || 0x34000002 || 3:54 || N || 100000 || 0 ||      0 || HDMI SCDC || [[NV services]] || Copper, Calcio
 
|-
 
|-
| 4 || [[#IsSomethingUartValid]]
+
| [2.0.0+] 26 || HdmiHdcp || 0x34000003 || 3:3A || N || 100000 || 0 ||      0 || HDMI HDCP || [[NV services]] || Copper, Calcio
 
|-
 
|-
| 5 || IsSomethingUartValidForTest
+
| [4.0.0+] 27 || Fan53528 || 0x3A000005 || 4:52 ([4.0.0-8.0.0] 4:A4) || N || 400000 || 0 ||      0 || RAM Regulator (tied to Max77812Pmic) || || Hoag, Iowa, Calcio, Aula
 
|-
 
|-
| 6 || [[#GetSession]]
+
| [4.0.0+] 28 || Max77812Pmic || 0x3A000002 || 4:31 ([8.0.0-9.2.0] 4:33, [4.0.0-8.0.0] 4:31) || N || 400000 || 0 ||      0 || Sub-PMIC for CPU and GPU (tied to Fan53528) (Phase 31) || [[PCV services]] || Hoag, Iowa, Calcio, Aula
 
|-
 
|-
| 7 || IsSomethingUartValid2
+
| [4.0.0+] 29 || Max77812Pmic || 0x3A000006 ([4.0.0-9.2.0] 0x3A000002) || 4:33 ([4.0.0-8.0.0] 4:31) || N || 400000 || 0 ||      0 || Sub-PMIC for GPU, CPU and RAM (Phase 211) || [[PCV services]] || Hoag, Iowa, Calcio, Aula
 
|-
 
|-
| 8 || IsSomethingUartValid2ForTest
+
| [4.0.0+] 30 || Ina226VddDdr0V6 (SdevMariko) || 0x3F000409 || 1:4E || N || 400000 || 3 || 5000000 || Power Monitor || nvdbgsvc || Factory
 
|-
 
|-
| 9 || [7.0.0+] IsSomethingUartValid3
+
| [8.0.0+] 31 || (MillauNfc) || 0x36000001 || 1:08 || N || 400000 || 3 || 5000000 || NFC Controller || [[NFC services]] || Hoag
 
|-
 
|-
| 10 || [7.0.0+] IsSomethingUartValid3ForTest
+
| [12.0.0+] - || (Max77801) || 0x3A000007 || 4:18 || N || 400000 || 0 ||      0 || Audio Codec (ALC5639) Regulator || [[PCV services]] || Aula
 
|}
 
|}
  
== DoesUartExist ==
+
= AddressingMode =
Takes a u32 [[#UartPort]] and returns boolean success value
+
This is "nn::i2c::AddressingMode".
  
== IsUartBaudrateValid ==
+
{| class="wikitable sortable" border="1"
Takes a u32 [[#UartPort]] and a u32 baudrate and returns boolean success value
+
|-
 +
! Value || Name
 +
|-
 +
| 0 || BitWidth7
 +
|-
 +
| 1 || BitWidth10
 +
|}
  
== IsSomethingUartValid ==
+
= TransactionOption =
Takes a u32 [[#UartPort]] and returns boolean success value
+
This is "nn::i2c::TransactionOption".
  
== GetSession ==
 
Takes a u32 [[#UartPort]] and returns an [[#IPortSession]]
 
 
== UartPort ==
 
 
{| class="wikitable sortable" border="1"
 
{| class="wikitable sortable" border="1"
 
|-
 
|-
! Name || Port || Usage
+
! Value || Name
 
|-
 
|-
| 1 || UART-D || Bluetooth
+
| 1 || StartCondition
 
|-
 
|-
| 2 || UART-B || Joy-Con(R)
+
| 2 || StopCondition
|-
 
| 3 || UART-C || Joy-Con(L)
 
 
|}
 
|}
  
== IPortSession ==
+
= SpeedMode =
This is "nn::uart::IPortSession".
+
This is "nn::i2c::SpeedMode".
  
{| class="wikitable" border="1"
+
{| class="wikitable sortable" border="1"
 
|-
 
|-
! Cmd || Name
+
! Value || Name
 
|-
 
|-
| 0 || OpenSession
+
| 0x186A0 || Standard
 
|-
 
|-
| 1 || OpenSessionForTest
+
| 0x61A80 || Fast
 
|-
 
|-
| 2 ||
+
| 0xF4240 || FastPlus
 
|-
 
|-
| 3 ||
+
| 0x33E140 || HighSpeed
 +
|}
 +
 
 +
= CommandId =
 +
This is "nn::i2c::detail::CommandId".
 +
 
 +
{| class="wikitable sortable" border="1"
 
|-
 
|-
| 4 ||
+
! Value || Name
 
|-
 
|-
| 5 ||
+
| 0 || Send
 
|-
 
|-
| 6 ||
+
| 1 || Receive
 
|-
 
|-
| 7 ||
+
| 2 || Extension
 
|}
 
|}
  
[7.0.0+] OpenSession/OpenSessionForTest now takes an additional 0x8-bytes of input.
+
= SubCommandId =
 +
This is "nn::i2c::detail::SubCommandId".
  
=== Port Mapping ===
+
{| class="wikitable sortable" border="1"
OpenSession translates user IDs to to the [[#UartPort]] index.
+
|-
 +
! Value || Name
 +
|-
 +
| 0 || Sleep
 +
|}
  
OpenSessionForTest takes the port index verbatim.
+
= UartPort =
 +
This is "nn::uart::UartPort".
 +
 
 +
{| class="wikitable sortable" border="1"
 +
|-
 +
! Value || Name || DeviceCode (internal) || DeviceCode (mapped) || Description
 +
|-
 +
| 0 || UART-A || 0x03000001 || || Invalid
 +
|-
 +
| 1 || UART-D || 0x03000004 || 0x37000001 || Bluetooth
 +
|-
 +
| 2 || UART-B || 0x03000002 || 0x35000405 || Joy-Con(R)
 +
|-
 +
| 3 || UART-C || 0x03000003 || 0x3500040F || Joy-Con(L)
 +
|-
 +
| 4 || UART-C || 0x03000003 || 0x35000419 || SioMcu
 +
|}
  
= pwm =
+
= UartPortForDev =
This is "nn::pwm::IManager".
+
This is "nn::uart::UartPortForDev".
  
{| class="wikitable" border="1"
+
{| class="wikitable sortable" border="1"
 +
|-
 +
! Value || Name || DeviceCode (internal) || DeviceCode (mapped) || Description
 
|-
 
|-
! Cmd || Name
+
| 0 || UART-A || 0x03000001 || || Invalid
 
|-
 
|-
| 0 || OpenSessionForDev
+
| 1 || UART-B || 0x03000002 || 0x35000405 || Joy-Con(R)
 
|-
 
|-
| 1 || OpenSession
+
| 2 || UART-C || 0x03000003 || 0x3500040F || Joy-Con(L)
 
|-
 
|-
| 2 || [6.0.0+]
+
| 3 || UART-D || 0x03000004 || 0x37000001 || Bluetooth
 
|}
 
|}
  
== Known Channels ==
+
= FlowControlMode =
 +
This is "nn::uart::FlowControlMode".
 +
 
 
{| class="wikitable sortable" border="1"
 
{| class="wikitable sortable" border="1"
 
|-
 
|-
! Name || Interface || Usage || Used by
+
! Value || Name
|-
 
| 1 || PWM Channel 1 || Fan || [[PTM services]]
 
 
|-
 
|-
| 2 || PWM Channel 0 || Backlight || [[Backlight services]], [[NV services]]
+
| 0 || None
 
|-
 
|-
| 3 || PMC Blinker || ||
+
| 1 || Hardware
 
|}
 
|}
  
== IChannelSession ==
+
= PortEventType =
This is "nn::pwm::IChannelSession".
+
This is "nn::uart::PortEventType".
  
{| class="wikitable" border="1"
+
{| class="wikitable sortable" border="1"
 +
|-
 +
! Value || Name
 
|-
 
|-
! Cmd || Name
+
| 0 || SendBufferEmpty
 
|-
 
|-
| 0 || SetPeriod
+
| 1 || SendBufferReady
 
|-
 
|-
| 1 || GetPeriod
+
| 2 || ReceiveBufferReady
 
|-
 
|-
| 2 || SetDuty
+
| 3 || ReceiveEnd
 +
|}
 +
 
 +
= ChannelName =
 +
This is "nn::pwm::ChannelName".
 +
 
 +
{| class="wikitable sortable" border="1"
 
|-
 
|-
| 3 || GetDuty
+
! Value || Name || DeviceCode || Description || Used by
 
|-
 
|-
| 4 || SetEnabled
+
| 0 || Invalid || || ||
 
|-
 
|-
| 5 || GetEnabled
+
| 1 || CpuFan || 0x3D000001 || PWM Channel 1 || [[PTM_services#fan|PTM services]]
 
|-
 
|-
| 6 || [6.0.0+]
+
| 2 || LcdBacklight || 0x3400003D || PWM Channel 0 || [[Backlight services]], [[NV services]]
 
|-
 
|-
| 7 || [6.0.0+]
+
| 3 || Led || 0x35000065 || PMC LED Soft Blink || [[Bus services#led|Bus services]]
 
|}
 
|}
  
= pinmux =
+
= AssignablePinGroupName =
This is "nn::pinmux::IManager".
+
This is "nn::pinmux::AssignablePinGroupName".
  
{| class="wikitable" border="1"
+
{| class="wikitable sortable" border="1"
 +
|-
 +
! Value || Description
 +
|-
 +
| 0 || ExtConUartB
 +
|-
 +
| 1 || ExtConUartC
 +
|-
 +
| 2 || Sdmmc1
 
|-
 
|-
! Cmd || Name
+
| 3 || PwmFan
 
|-
 
|-
| 0 || OpenSession
+
| 100 || Invalid
 
|}
 
|}
  
== ISession ==
+
= AssignablePinGroupNameForHardwareTest =
This is "nn::pinmux::ISession".
+
This is "nn::pinmux::AssignablePinGroupNameForHardwareTest".
  
{| class="wikitable" border="1"
+
{| class="wikitable sortable" border="1"
 +
|-
 +
! Value || Description
 +
|-
 +
| 0 || Invalid
 
|-
 
|-
! Cmd || Name
+
| 1 || Invalid
 
|-
 
|-
| 0 || SetPinAssignment
+
| 2 || Invalid
 
|-
 
|-
| 1 || GetPinAssignment
+
| 3 || Invalid
 
|-
 
|-
| 2 || SetPinAssignmentForHardwareTest
+
| 100 || UartD
 
|}
 
|}
  
= sasbus =
+
= PinAssignment =
This is "nn::sasbus::IManager".
+
This is "nn::pinmux::PinAssignment".
  
{| class="wikitable" border="1"
+
{| class="wikitable sortable" border="1"
 +
|-
 +
! Value || Name
 +
|-
 +
| 0 || ExtConUartOutputEnable
 +
|-
 +
| 1 || ExtConUartOutputHiZ
 +
|-
 +
| 2 || Sdmmc1OutputHigh
 +
|-
 +
| 3 || Sdmmc1ResetState
 +
|-
 +
| 4 || Sdmmc1SchmtEnable
 +
|-
 +
| 5 || Sdmmc1SchmtDisable
 
|-
 
|-
! Cmd || Name
+
| 6 || PwmFanEnable
 
|-
 
|-
| 0 || OpenSession
+
| 7 || PwmFanHiZ
 
|}
 
|}
  
== ISession ==
+
= PinAssignmentForHardwareTest =
This is "nn::sasbus::ISession".
+
This is "nn::pinmux::PinAssignmentForHardwareTest".
  
{| class="wikitable" border="1"
+
{| class="wikitable sortable" border="1"
 +
|-
 +
! Value || Name
 +
|-
 +
| 100 || UartDHiZ
 
|-
 
|-
! Cmd || Name
+
| 101 || UartDEnable
 +
|}
 +
 
 +
= SasbusPort =
 +
{| class="wikitable sortable" border="1"
 
|-
 
|-
| 0 ||  
+
! Value || Name || DeviceCode || Description
 
|-
 
|-
| 1 ||  
+
| 0 || SPI4 || 0x3500003D || Lsm6ds3 (WHOAMI 0x69, 0x6A and 0x6C)
 
|-
 
|-
| 2 ||  
+
| [10.0.0+] 1 || SPI4 || 0x3500003D || Icm40607 (WHOAMI 0x38)
 
|-
 
|-
| 3 ||  
+
| [13.0.0+] 2 || SPI4 || 0x3500003D || Icm42607p (WHOAMI 0x60)
 
|}
 
|}
  
 
[[Category:Services]]
 
[[Category:Services]]

Latest revision as of 04:50, 9 October 2024

gpio

This is "nn::gpio::IManager".

Cmd Name
0 [5.0.0+] OpenSessionForDevDeprecated ([1.0.0-4.1.0] OpenSessionForDev)
1 [5.0.0+] OpenSessionDeprecated ([1.0.0-4.1.0] OpenSession)
2 [5.0.0+] OpenSessionForTestDeprecated ([1.0.0-4.1.0] OpenSessionForTest)
3 [5.0.0-6.2.0] IsWakeEventActiveDeprecated ([1.0.0-4.1.0] IsWakeEventActive)
4 [5.0.0-6.2.0] GetWakeEventActiveFlagSetDeprecated ([1.0.0-4.1.0] GetWakeEventActiveFlagSet)
5 [5.0.0-6.2.0] SetWakeEventActiveFlagSetForDebugDeprecated ([1.0.0-4.1.0] SetWakeEventActiveFlagSetForDebug)
6 SetWakePinDebugMode
7 [5.0.0+] OpenSession
8 [5.0.0+] IsWakeEventActive
9 [5.0.0+] SetWakeEventActiveFlagSetForDebug
10 [6.0.0+] DumpStateForDebug

OpenSessionForDevDeprecated

Takes an input #GpioPadDescriptor. Returns an #IPadSession.

OpenSessionDeprecated

Same as #OpenSessionForDevDeprecated except it takes a #GpioPadName which is then converted to a #GpioPadDescriptor. Returns an #IPadSession.

OpenSessionForTestDeprecated

Same as #OpenSessionDeprecated but panics on failure.

IsWakeEventActiveDeprecated

Takes an input #GpioPadName. Returns a bool IsActive.

GetWakeEventActiveFlagSetDeprecated

No input. Returns an output u128 #WakeBitFlag.

SetWakeEventActiveFlagSetForDebugDeprecated

Takes an input #GpioPadName and an input bool IsEnabled. No output.

SetWakePinDebugMode

Takes an input u32 WakePinDebugMode. No output.

OpenSession

Same as #OpenSessionDeprecated but takes a DeviceCode and an input #OpenMode.

IsWakeEventActive

Same as #IsWakeEventActiveDeprecated but takes a DeviceCode.

SetWakeEventActiveFlagSetForDebug

Same as #SetWakeEventActiveFlagSetForDebugDeprecated but takes a DeviceCode.

DumpStateForDebug

Stubbed. Returns 0.

IPadSession

This is "nn::gpio::IPadSession".

Cmd Name
0 [12.0.0+] SetDirectionDeprecated ([1.0.0-11.0.1] SetDirection)
1 GetDirection
2 SetInterruptMode
3 GetInterruptMode
4 SetInterruptEnable
5 GetInterruptEnable
6 [1.0.0-16.1.0] GetInterruptStatus
7 [1.0.0-16.1.0] ClearInterruptStatus
8 SetValue
9 GetValue
10 BindInterrupt
11 UnbindInterrupt
12 SetDebounceEnabled
13 GetDebounceEnabled
14 SetDebounceTime
15 GetDebounceTime
16 [4.0.0+] SetValueForSleepState
17 [6.0.0+] GetMaxDebounceTime
18 [12.0.0+] SetDirectionInput
19 [12.0.0+] SetDirectionOutput

SetDirectionDeprecated

Takes an input u32 #Direction. No output.

GetDirection

No input. Returns an output u32 #Direction.

SetInterruptMode

Takes an input u32 #InterruptMode. No output.

GetInterruptMode

No input. Returns an output u32 #InterruptMode.

SetInterruptEnable

Takes an input bool IsEnable. No output.

GetInterruptEnable

No input. Returns an output bool IsEnable.

GetInterruptStatus

No input. Returns an output u32 #InterruptStatus.

ClearInterruptStatus

No input/output.

SetValue

Takes an input u32 #GpioValue. No output.

GetValue

No input. Returns an output u32 #GpioValue.

BindInterrupt

No input. Returns an output Event handle.

UnbindInterrupt

No input/output.

SetDebounceEnabled

Takes an input bool IsEnable. No output.

GetDebounceEnabled

No input. Returns an output bool IsEnable.

SetDebounceTime

Takes an input s32 MsecTime. No output.

GetDebounceTime

No input. Returns an output s32 MsecTime.

SetValueForSleepState

Takes an input u32 ValueForSleepState. No output.

GetMaxDebounceTime

No input. Returns an output u32 MaxDebounceTime.

SetDirectionInput

No input/output.

SetDirectionOutput

Takes an input u32 #GpioValue. No output.

i2c, i2c:pcv

This is "nn::i2c::IManager".

Cmd Name
0 OpenSessionForDev
1 OpenSession
2 [1.0.0-5.1.0] HasDevice
3 [1.0.0-5.1.0] HasDeviceForDev
4 [6.0.0+] OpenSession2

OpenSessionForDev

Takes an input u16 SlaveAddress (padded to u32) and 3 input u32s BusIdx, #AddressingMode and #SpeedMode. Returns an #II2cSession.

OpenSession

Takes an input #I2cDevice. Returns an output #II2cSession.

HasDevice

Takes an input #I2cDevice. Returns an output boolean success value.

HasDeviceForDev

Takes an input u16 SlaveAddress (padded to u32) and 3 input u32s BusIdx, #AddressingMode and #SpeedMode. Returns an output boolean success value.

OpenSession2

Same as OpenSession, but takes an input u32 DeviceCode.

II2cSession

This is "nn::i2c::ISession".

Cmd Name
0 [1.0.0-5.1.0] SendOld
1 [1.0.0-5.1.0] ReceiveOld
2 [1.0.0-5.1.0] ExecuteCommandListOld
10 Send
11 Receive
12 ExecuteCommandList
13 [6.0.0+] SetRetryPolicy

Send

Takes a type-0x21 input buffer InData and an input u32 #TransactionOption. No output.

Receive

Takes a type-0x22 output buffer OutData and an input u32 #TransactionOption. No output.

ExecuteCommandList

Takes a type-0x22 output buffer ReceiveBuffer and a type-0x9 input buffer CommandList. No output.

Commands

This is "nn::i2c::I2cCommand".

Bits Name
0-5 #CommandId
6-7 #TransactionOption

A send command will write bytes to the device using the format: [u8 cmd_send] [u8 len] <bytes>

A receive command will read bytes from the device using the format: [u8 cmd_receive] [u8 len]

An extension sleep command will stall the device using the format: [u8 cmd_extension] [u8 ms]

SetRetryPolicy

Takes 2 input u32s MaxRetries and RetryIntervalMicroSeconds. No output.

uart

This is "nn::uart::IManager".

Cmd Name
0 [1.0.0-16.1.0] HasPort
1 [1.0.0-16.1.0] HasPortForDev
2 [1.0.0-16.1.0] IsSupportedBaudRate
3 [1.0.0-16.1.0] IsSupportedBaudRateForDev
4 [1.0.0-16.1.0] IsSupportedFlowControlMode
5 [1.0.0-16.1.0] IsSupportedFlowControlModeForDev
6 CreatePortSession
7 [1.0.0-16.1.0] IsSupportedPortEvent
8 [1.0.0-16.1.0] IsSupportedPortEventForDev
9 [7.0.0-16.1.0] IsSupportedDeviceVariation
10 [7.0.0-16.1.0] IsSupportedDeviceVariationForDev

HasPort

Takes an input #UartPort. Returns an output boolean success value.

HasPortForDev

Takes an input #UartPortForDev. Returns an output boolean success value.

IsSupportedBaudRate

Takes 2 input u32s #UartPort and BaudRate. Returns an output boolean success value.

Supported baud rates are 57600, 115200, 1000000 and 3000000.

IsSupportedBaudRateForDev

Takes 2 input u32s #UartPortForDev and BaudRate. Returns an output boolean success value.

Supported baud rates are 57600, 115200, 1000000 and 3000000.

IsSupportedFlowControlMode

Takes 2 input u32s #UartPort and #FlowControlMode. Returns an output boolean success value.

IsSupportedFlowControlModeForDev

Takes 2 input u32s #UartPortForDev and #FlowControlMode. Returns an output boolean success value.

CreatePortSession

No input. Returns an output #IPortSession.

IsSupportedPortEvent

Takes 2 input u32s #UartPort and #PortEventType. Returns an output boolean success value.

IsSupportedPortEventForDev

Takes 2 input u32s #UartPortForDev and #PortEventType. Returns an output boolean success value.

IsSupportedDeviceVariation

Takes 2 input u32s #UartPort and DeviceVariation. Returns an output boolean success value.

Supported device variations are 0 (Bluetooth) for UART-D, 0 (Joy-Con(R)) for UART-B, 0 (Joy-Con(L)) and 1 (SioMcu) for UART-C.

IsSupportedDeviceVariationForDev

Takes 2 input u32s #UartPortForDev and DeviceVariation. Returns an output boolean success value.

Supported device variations are 0 (Bluetooth) for UART-D, 0 (Joy-Con(R)) for UART-B, 0 (Joy-Con(L)) and 1 (SioMcu) for UART-C.

IPortSession

This is "nn::uart::IPortSession".

Cmd Name
0 OpenPort
1 OpenPortForDev
2 GetWritableLength
3 Send
4 GetReadableLength
5 Receive
6 BindPortEvent
7 UnbindPortEvent
8 [14.0.0+] OpenPort2

OpenPort

Takes 3 input u32s #UartPort, BaudRate and #FlowControlMode, 2 input u64s SendBufferLength and ReceiveBufferLength and 2 input TransferMemory handles SendHandle and ReceiveHandle. Returns an output boolean success value.

[6.0.0+] Takes 4 input u8s (padded as u32) IsInvertTx, IsInvertRx, IsInvertRts and IsInvertCts, 3 input u32s #UartPort, BaudRate and #FlowControlMode, 2 input u64s SendBufferLength and ReceiveBufferLength and 2 input TransferMemory handles SendHandle and ReceiveHandle. Returns an output boolean success value.

[7.0.0+] Takes 4 input u8s (padded as u32) IsInvertTx, IsInvertRx, IsInvertRts and IsInvertCts, 4 input u32s #UartPort, BaudRate, #FlowControlMode and DeviceVariation, 2 input u64s SendBufferLength and ReceiveBufferLength and 2 input TransferMemory handles SendHandle and ReceiveHandle. Returns an output boolean success value.

This will Abort when the specified #UartPort is already being used, due to a SVC failing.

OpenPortForDev

Same as #OpenPort, but takes an input #UartPortForDev instead.

GetWritableLength

No input. Returns an output u64 WritableLength.

Send

Takes a type-0x21 input buffer InData. Returns an output u64 size.

GetReadableLength

No input. Returns an output u64 ReadableLength.

Receive

Takes a type-0x22 output buffer OutData. Returns an output u64 size.

BindPortEvent

Takes an input u32 #PortEventType and an input s64 Threshold. Returns an output boolean success value and an Event handle with EventClearMode=0.

UnbindPortEvent

Takes an input u32 #PortEventType. Returns an output boolean success value.

OpenPort2

Same as #OpenPort, but takes an input u32 DeviceCode instead of an #UartPort and no longer returns an output boolean success value.

pwm

This is "nn::pwm::IManager".

Cmd Name
0 OpenSessionForDev
1 OpenSession
2 [6.0.0+] OpenSession2

OpenSession2

Takes a DeviceCode and returns an #IChannelSession.

IChannelSession

This is "nn::pwm::IChannelSession".

Cmd Name
0 SetPeriod
1 GetPeriod
2 [1.0.0-13.2.1] SetDuty
3 [1.0.0-13.2.1] GetDuty
4 SetEnabled
5 GetEnabled
6 [6.0.0+] SetDutyCycle
7 [6.0.0+] GetDutyCycle

SetDutyCycle

Takes an input double DutyCycle. No output.

GetDutyCycle

No input. Returns an output double DutyCycle.

pinmux

This is "nn::pinmux::IManager".

Cmd Name
0 OpenSession

OpenSession

Takes an #AssignablePinGroupName or an #AssignablePinGroupNameForHardwareTest and returns an ISession.

ISession

This is "nn::pinmux::ISession".

Cmd Name
0 SetPinAssignment
1 GetPinAssignment
2 SetPinAssignmentForHardwareTest
3 [17.0.0+] SetSfioConfiguration
4 [17.0.0+] GetSfioConfiguration
5 [17.0.0+] SetInputEnableConfiguration
6 [17.0.0+] GetInputEnableConfiguration
7 [17.0.0+] SetPullConfiguration
8 [17.0.0+] GetPullConfiguration
9 [17.0.0+] SetPmConfiguration
10 [17.0.0+] GetPmConfiguration

SetPinAssignment

Takes a #PinAssignment. No output.

GetPinAssignment

No input. Returns a #PinAssignment.

SetPinAssignmentForHardwareTest

Takes a #PinAssignmentForHardwareTest. No output.

sasbus

This is "nn::sasbus::IManager".

This was added with [3.0.0+].

Cmd Name
0 OpenSession

OpenSession

Takes a #SasbusPort and returns an ISession.

ISession

This is "nn::sasbus::ISession".

Cmd Name
0 Send
1 Receive
2 StartPeriodicReceiveMode
3 StopPeriodicReceiveMode
4 [19.0.0+]
5 [19.0.0+]

Send

Takes a type-0x21 input buffer and an u8 SpiCommand. No output.

Receive

Takes a type-0x22 output buffer and an u8 SpiCommand. No output.

StartPeriodicReceiveMode

Takes an u8 SpiCommand (padded to u32), an u32, two u64s and a copy handle. No output.

StopPeriodicReceiveMode

No input/output.

Cmd4

Takes a total of 0x10-bytes of input and an input handle. No output.

This is similar to StartPeriodicReceiveMode. This eventually calls an impl func which just writes some input fields into state, then (on NX) Aborts.

Cmd5

No input/output.

This is identical to StopPeriodicReceiveMode.

led

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

This was added with [8.1.1+].

Cmd Name
0 OpenController

OpenController

Takes a DeviceCode (which must be 0x35000065) and returns an #IController session for it.

IController

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

This was added with [8.1.1+].

Cmd Name
0 StartLighting
1 StopLighting
2 SetLightingMode
3 GetLightingMode
4 IsLighting
5 SetRisingTime
6 GetRisingTime
7 SetFallingTime
8 GetFallingTime
9 SetPeakTime
10 GetPeakTime
11 SetPulseInterval
12 GetPulseInterval
13 SetPulseCount
14 GetPulseCount
15 GetMaxPulseCount
16 SetBreathInterval
17 GetBreathInterval
18 SetConstantBrightness
19 GetConstantBrightness
20 [10.0.0+] GetBreathingStatus ([8.1.1-9.2.0] RegisterPwmChannel)
21 [8.1.1-9.2.0] UnregisterPwmChannel

GpioPadName

This is "nn::gpio::GpioPadName".

Value Name GpioPadDescriptor DeviceCode Tegra (port, pin) Description Direction Used by (services) Used by (hardware)
0x01 CodecLdoEnTemp 0xCC 0x33000002 Z, 4 Audio Codec (ALC5639) Power Out Audio services, Fatal services Icosa, Hoag, Iowa, Aula
0x02 PowSdEn 0x24 0x3C000001 E, 4 SdCard Power Out PCV services Icosa, Copper, Hoag, Iowa, Calcio, Aula
0x03 BtRst 0x3C 0x37000002 H, 4 Bluetooth Reset Out Bluetooth Driver services Icosa, Copper, Hoag, Iowa, Calcio, Aula
0x04 RamCode3 0xDA 0xC9000402 BB, 2 Secondary Boot Device Configration In Icosa, Iowa
0x05 GameCardReset 0xDB 0x3C000402 BB, 3 Gamecard Reset Out Filesystem services Icosa, Copper, Hoag, Iowa, Aula
0x06 CodecAlert 0xDC 0x33000003 BB, 4 Audio Codec (ALC5639) Alert In Audio services Icosa, Hoag, Iowa, Aula
0x07 PowGc 0x25 0x3C000401 E, 5 Gamecard Power Out Icosa, Copper
0x08 DebugControllerDet 0x90 0x350000CA S, 0 Debug Pad Detect In HID services Icosa, Iowa
0x09 BattChgStatus 0x91 0x39000407 S, 1 Battery Charge Status In Icosa, Hoag, Iowa, Aula
0x0A BattChgEnableN 0x96 0x39000003 S, 6 Charger IC (BQ24193) Charge Enable Out PTM services Icosa, Hoag, Iowa, Aula
0x0B FanTach 0x97 0x3D000002 S, 7 Fan Tachometer In Icosa, Hoag, Iowa, Calcio, Aula
0x0C ExtconDetS 0x26 0x3500040B E, 6 Joy-Con(L) IsAttached (insertion, Joy-Con pin 5/console TX, pulled low on insert) In HID services, AM services Icosa, Iowa, Aula
0x0D Vdd50AEn 0x05 0x39000401 A, 5 Fan and Joy-Con 5V Power (Battery) Out PTM services Icosa, Hoag, Iowa, Aula
0x0E SdevCoaxSel1 0x78 0xCA000406 ([1.0.0-10.0.0] 0xCA000402) P, 0 SDEV Coax Select In Icosa, Iowa
0x0F GameCardCd 0x93 0x3C000403 S, 3 Gamecard Card Detect In Filesystem services, AM services Icosa, Copper, Hoag, Iowa, Aula
0x10 ProdType0 0x7D 0xC900040B P, 5 In Icosa, Copper, Iowa
0x11 ProdType1 0x7C 0xC900040C P, 4 In Icosa, Copper, Iowa
0x12 ProdType2 0x7B 0xC900040D P, 3 In Icosa, Copper, Iowa
0x13 ProdType3 0x7A 0xC900040E P, 2 In Icosa, Copper, Iowa
0x14 TempAlert 0xBC 0x3E000002 X, 4 Temperature Sensor In Icosa, Copper, Hoag, Iowa, Calcio, Aula
0x15 CodecHpDetIrq 0xAE 0x33000004 V, 6 Audio Codec (ALC5639) Headphone Detect In Audio services Icosa, Hoag, Iowa, Aula
0x16 MotionInt 0xBA 0x35000041 X, 2 Built-in IMU IRQ In Icosa, Hoag, Iowa, Aula
0x17 TpIrq 0xB9 0x35000036 X, 1 TouchPanel IRQ In HID services Icosa, Hoag, Iowa, Aula
0x18 ButtonSleep2 0xBD 0x35000001 X, 5 Power Button (Connected only on Hoag) In Icosa, Copper, Hoag, Iowa, Calcio, Aula
0x19 ButtonVolUp 0xBE 0x35000002 X, 6 Volume Up In Boot2, Audio services, Fatal services Icosa, Copper, Hoag, Iowa, Calcio, Aula
0x1A ButtonVolDn 0xBF 0x35000003 X, 7 Volume Down In Boot2, Audio services Icosa, Copper, Hoag, Iowa, Calcio , Aula
0x1B BattMgicIrq 0xC0 0x39000034 Y, 0 Fuel Gauge IC (MAX17050) IRQ In PTM services, AM services Icosa, Hoag, Iowa, Aula
0x1C RecoveryKey 0xC1 0x35000004 Y, 1 Recovery Mode Key (HOME Button) In Icosa, Copper, Hoag, Iowa, Calcio, Aula
0x1D PowLcdBlEn 0xA9 0x3400003E V, 1 LCD Backlight Power Out NV services, Backlight services Icosa, Hoag, Iowa
0x1E LcdReset 0xAA 0x34000033 V, 2 LCD Reset Out NV services Icosa, Hoag, Iowa, Aula
0x1F PdVconnEn 0x55 0x040000CC K, 5 USB-PD Controller (RHOM BM92T30MWV) VCONN Power Out PTM services, USB services Icosa, Hoag, Iowa, Aula
0x20 PdRstN 0xAD 0x040000CA V, 5 USB-PD Controller (RHOM BM92T30MWV) ResetN Out USB services Icosa, Copper, Hoag, Iowa, Calcio, Aula
0x21 Bq24190Irq 0xC8 0x39000002 Z, 0 Charger IC (BQ24193) IRQ In PTM services, AM services Icosa, Hoag, Iowa, Aula
0x22 SdevCoaxSel0 0xCA 0xCA000405 ([1.0.0-10.0.0] 0xCA000401) Z, 2 SDEV Coax Select In Icosa, Iowa
0x23 SdWp 0xCB 0x3C000003 Z, 3 SdCard Write Protect In Icosa, Copper, Hoag, Iowa, Calcio, Aula
0x24 TpReset 0x4F 0x35000035 J, 7 TouchPanel Reset Out HID services Icosa, Hoag, Iowa, Aula
0x25 BtGpio2 0x50 0x37000401 K, 0 In Icosa, Copper, Hoag, Iowa, Calcio, Aula
0x26 BtGpio3 0x51 0x37000402 K, 1 In Icosa, Copper, Hoag, Iowa, Calcio, Aula
0x27 BtGpio4 0x52 0x37000403 K, 2 In Icosa, Copper, Hoag, Iowa, Calcio, Aula
0x28 CradleIrq 0x54 0x040000CB K, 4 USB-PD Controller (RHOM BM92T30MWV) IRQ In USB services, AM services Icosa, Copper, Hoag, Iowa, Calcio, Aula
0x29 PowVcpuInt 0x56 0x3E000003 K, 6 Sub-PMIC for CPU (MAX77621) IRQ In Icosa, Copper, Aula
0x2A Max77621GpuInt 0x57 0x3E000004 K, 7 Sub-PMIC for GPU (MAX77621) IRQ In Icosa, Copper
0x2B ExtconChgU 0x53 0x35000402 K, 3 Joy-Con(R) Charge Out HID services Icosa, Iowa, Aula
0x2C ExtconChgS 0xE3 0x3500040C CC, 3 Joy-Con(L) Charge Out HID services Icosa, Iowa, Aula
0x2D WifiRfDisable 0x38 0x38000003 H, 0 Out Icosa, Copper, Hoag, Iowa, Calcio
0x2E WifiReset 0x39 0x38000002 H, 1 WiFi Reset Out WLAN services, PCIe services Icosa, Copper, Hoag, Iowa, Calcio, Aula
0x2F ApWakeBt 0x3B 0x37000003 H, 3 Wake Bluetooth from Host Out Bluetooth Driver services Icosa, Copper, Hoag, Iowa, Calcio, Aula
0x30 BtWakeAp 0x3D 0x37000004 H, 5 Wake Host from Bluetooth In AM services Icosa, Copper, Hoag, Iowa, Calcio, Aula
0x31 BtGpio5 0x3F 0x37000404 H, 7 Out Icosa, Copper, Hoag, Iowa, Calcio, Aula
0x32 PowLcdVddPEn 0x40 0x34000034 I, 0 LCD Backlight PAVDD +5V Out NV services Icosa, Hoag, Iowa
0x33 PowLcdVddNEn 0x41 0x34000035 I, 1 LCD Backlight NAVDD -5V Out NV services Icosa, Hoag, Iowa
0x34 ExtconDetU 0x3E 0x35000401 H, 6 Joy-Con(R) IsAttached (insertion, Joy-Con pin 5/console TX, pulled low on insert) In HID services, AM services Icosa, Iowa, Aula
0x35 RamCode2 0xE2 0xC9000401 CC, 2 Secondary Boot Device Configration In Icosa, Iowa
0x36 Vdd50BEn 0xE4 0x39000402 CC, 4 Fan and Joy-Con 5V Power (USB) Out PTM services Icosa, Iowa
0x37 WifiWakeHost 0x3A 0x38000004 H, 2 Wake Host from Wifi In AM services Icosa, Copper, Hoag, Iowa, Calcio, Aula
0x38 SdCd 0xC9 0x3C000002 Z, 1 SdCard Card Detect In Filesystem services, AM services Icosa, Copper, Hoag, Iowa, Calcio, Aula
0x39 OtgFet1ForSdev 0x4D 0x39000404 J, 5 Charger IC (BQ24193) OTG Charge Select Out PTM services, USB services Icosa, Iowa
0x3A OtgFet2ForSdev 0x58 0x39000405 L, 0 Charger IC (BQ24193) OTG Charge Select Out PTM services, USB services Icosa, Iowa
0x3B ExtConWakeU 0x3E 0x35000403 H, 6 Joy-Con(R) Wake Detect In Icosa, Hoag, Iowa, Aula
0x3C ExtConWakeS 0x26 0x3500040D E, 6 Joy-Con(L) Wake Detect In Icosa, Hoag, Iowa, Aula
0x3D PmuIrq -1 0x39000406 GIC 86 Main PMIC IRQ (PMU_EXT IRQ)
0x3E ExtUart2Cts 0x33 0x35000404 G, 3 Joy-Con(R) CTS (checked low) In HID services, AM services
0x3F ExtUart3Cts 0x1C 0x3500040E D, 4 Joy-Con(L) CTS (checked low) In HID services, AM services
0x40 5VStepDownEn 0xD9 0x39000408 BB, 1 5V Step-Down Regulator Power Out Copper
0x41 UsbSwitchB2Oc 0x0C 0x04000401 B, 4 USB Root Port 2 Over Current In USB services Copper
0x42 5VStepDownPg 0x0D 0x39000409 B, 5 5V Step-Down Regulator Power Good Flag In Copper
0x43 UsbSwitchAEn 0x21 0x04000402 E, 1 USB Power Out USB services Copper
0x44 UsbSwitchAFlag 0x27 0x04000403 E, 7 USB Power Flag In USB services Copper
0x45 UsbSwitchB3Oc 0x92 0x04000404 S, 2 USB Root Port 3 Over Current In USB services Copper
0x46 UsbSwitchB3En 0x95 0x04000405 S, 5 USB Root Port 3 Power Out USB services Copper
0x47 UsbSwitchB2En 0x98 0x04000406 T, 0 USB Root Port 2 Power Out USB services Copper
0x48 Hdmi5VEn 0x10 0x34000004 C, 0 HDMI 5V Power Out NV services Copper, Calcio
0x49 UsbSwitchB1En 0x11 0x04000407 C, 1 USB Root Port 1 Power Out USB services Copper, Calcio
0x4A HdmiPdTrEn 0x12 0x34000005 C, 2 HDMI/Power Delivery Switch Out NV services Copper, Calcio
0x4B FanEn 0x42 0x3D000003 I, 2 Fan Power Out PTM services Copper
0x4C UsbSwitchB1Oc 0xE6 0x04000408 CC, 6 USB Root Port 1 Over Current In USB services Copper, Calcio
[2.0.0+] 0x4D PwmFan 0xAC 0x3D000001 V, 4 Pulse-Width Modulation Fan Control Out PTM services Copper
[2.0.0+] 0x4E HdmiHpd 0xE1 0x34000006 CC, 1 HDMI Hot Plug Detect In NV services Copper, Calcio
[5.0.0+] 0x4F Max77812Irq 0x56 0x3E000003 K, 6 Sub-PMIC (CPU/GPU/RAM) IRQ In Hoag, Iowa, Calcio
[6.0.0+] 0x50 Debug0 0x20 0xCA000001 E, 0 Out Hoag, Calcio, Aula
[6.0.0+] 0x51 Debug1 0x21 0xCA000002 E, 1 Out Hoag, Calcio, Aula
[6.0.0+] 0x52 Debug2 0x22 0xCA000003 E, 2 Out Hoag, Calcio, Aula
[6.0.0+] 0x53 Debug3 0x23 0xCA000004 E, 3 Out Hoag, Calcio, Aula
[6.0.0+] 0x54 NfcIrq 0x4C 0x36000004 J, 4 NFC Controller IRQ In NFC services Hoag
[6.0.0+] 0x55 NfcRst 0x57 0x36000003 K, 7 NFC Controller Reset Out NFC services Hoag
[6.0.0+] 0x56 McuIrq 0x27 ([6.0.0-8.0.0] 0x94) 0x35000415 E, 7 Sio MCU IRQ In Hoag
[6.0.0+] 0x57 McuBoot 0x98 0x35000416 T, 0 Sio MCU BOOT0 Select (0: Flash, 1: SRAM) Out HID services Hoag
[6.0.0+] 0x58 McuRst 0x99 0x35000417 T, 1 Sio MCU ResetN (Output LOW -> Input) In HID services Hoag
[6.0.0+] 0x59 Vdd5V3En 0xBB 0x39000403 X, 3 OTG VBUS Power Out PTM services Hoag, Iowa, Aula
[6.0.0+] 0x5A McuPor 0xE5 0x35000418 CC, 5 Sio MCU NPOR Out HID services Hoag
[6.0.0+] 0x5B (McuHome) 0xAB 0x35000005 V, 3 Sio MCU Home Button In HID services, AM services Hoag
[6.0.0+] 0x5C NfcEn 0x4E 0x36000002 J, 6 NFC Controller Power Out NFC services Hoag
[7.0.0+] - ExtUart2Rts 0x32 0x35000406 G, 2 Joy-Con(R) RTS In
[7.0.0+] - ExtUart3Rts 0x1B 0x35000410 D, 3 Joy-Con(L) RTS In
[7.0.0+] - 0x17 0x3500041B C, 7 SPI4 MOSI (Built-in IMU, set as gpio-input so Sio can use IMU) In Hoag
[7.0.0+] - 0x18 0x3500041C D, 0 SPI4 MISO (Built-in IMU, set as gpio-input so Sio can use IMU) In Hoag
[7.0.0+] - 0x15 0x3500041D C, 5 SPI4 SCLK (Built-in IMU, set as gpio-input so Sio can use IMU) In Hoag
[7.0.0+] - 0x16 0x3500041E C, 6 SPI4 CS0 (Built-in IMU, set as gpio-input so Sio can use IMU) In Hoag
[10.0.0+] - 0xC5 0x35000065 Y, 5 Notification LED PWM (CLK 32K OUT) Out Hoag
[10.0.0+] - 0x29 0x04000409 F, 1 Out Calcio
[10.0.0+] - 0x38 0x34000401 H, 0 OLED Panel IRQ In Display services Aula
[13.0.0+] - (BtGpio6) 0x46 0x37000405 I, 6 UART-D RTS (Bluetooth) In

GpioPadDescriptor

Bits Description
7-5 Controller index
4-3 Port index
2-0 Pin number

Direction

This is "nn::gpio::Direction".

Value Name
0 Input
1 Output

GpioValue

This is "nn::gpio::GpioValue".

Value Name
0 Low
1 High

InterruptMode

This is "nn::gpio::InterruptMode".

Value Name
0 LowLevel
1 HighLevel
2 RisingEdge
3 FallingEdge
4 AnyEdge

InterruptStatus

This is "nn::gpio::InterruptStatus".

Value Name
0 Inactive
1 Active

WakeBitFlag

This is "nn::gpio::WakeBitFlag". This is a 128-bit flag.

OpenMode

This is "nn::gpio::OpenMode".

Value Name
0 None
1 Read
2 Write
3 ReadWrite

I2cDevice

This is "nn::i2c::I2cDevice".

Value Name DeviceCode Port:Addr Is10bit Speed Max Retries Retry Delay Description Used by (services) Used by (hardware)
0 ClassicController 0x350000C9 0:52 N 100000 0 0 DebugPad Driver HID services Icosa, Iowa, Aula
1 Ftm3bd56 0x35000033 2:49 N 400000 0 0 TouchPanel HID services Icosa, Hoag, Iowa, Aula
2 Tmp451 0x3E000001 0:4C N 100000 0 0 Temperature Sensor PTM services Icosa, Copper, Hoag, Iowa, Calcio, Aula
3 Nct72 0x3E000001 0:4C N 100000 0 0 Temperature Sensor PTM services Icosa, Copper, Hoag, Iowa, Calcio, Aula
4 Alc5639 0x33000001 0:1C N 100000 0 0 Audio Codec Audio services, Fatal services Icosa, Hoag, Iowa, Aula
5 Max77620Rtc 0x3B000001 4:68 N 400000 3 5000000 PMIC RTC PCV services Icosa, Copper
6 Max77620Pmic 0x3A000001 4:3C N 400000 3 5000000 PMIC PCV services Icosa, Copper
7 Max77621Cpu 0x3A000003 4:1B N 400000 3 5000000 Sub-PMIC for CPU PCV services Icosa, Copper
8 Max77621Gpu 0x3A000004 4:1C N 400000 3 5000000 Sub-PMIC for GPU PCV services Icosa, Copper
9 Bq24193 0x39000001 0:6B N 100000 3 5000000 Charger IC PTM services Icosa, Hoag, Iowa, Aula
10 Max17050 0x39000033 0:36 N 100000 3 5000000 Fuel Gauge IC PTM services, PCV services Icosa, Hoag, Iowa, Aula
11 Bm92t30mwv 0x040000C9 0:18 N 100000 3 5000000 USB-PD controller USB services Icosa, Copper, Hoag, Iowa, Calcio, Aula
12 Ina226Vdd15v0Hb 0x3F000401 1:40 N 400000 3 5000000 Power Monitor nvdbgsvc Factory
13 Ina226VsysCpuDs or Ina226VddCpuAp (SdevMariko) 0x3F000001 1:41 N 400000 3 5000000 Power Monitor nvdbgsvc Factory
14 Ina226VsysGpuDs or Ina226VddGpuAp (SdevMariko) 0x3F000002 1:44 N 400000 3 5000000 Power Monitor nvdbgsvc Factory
15 Ina226VsysDdrDs or Ina226VddDdr1V1Pmic (SdevMariko) 0x3F000003 1:45 N 400000 3 5000000 Power Monitor nvdbgsvc Factory
16 Ina226VsysAp 0x3F000402 1:46 N 400000 3 5000000 Power Monitor nvdbgsvc Factory
17 Ina226VsysBlDs 0x3F000403 1:47 N 400000 3 5000000 Power Monitor nvdbgsvc Factory
18 Bh1730 0x35000047 1:29 N 400000 3 5000000 Ambient Light Sensor Backlight services Icosa, Hoag, Iowa, Aula
19 Ina226VsysCore or Ina226VddCoreAp (SdevMariko) 0x3F000404 1:48 N 400000 3 5000000 Power Monitor nvdbgsvc Factory
20 Ina226Soc1V8 or Ina226VddSoc1V8 (SdevMariko) 0x3F000405 1:49 N 400000 3 5000000 Power Monitor nvdbgsvc Factory
21 Ina226Lpddr1V8 or Ina226Vdd1V8 (SdevMariko) 0x3F000406 1:4A N 400000 3 5000000 Power Monitor nvdbgsvc Factory
22 Ina226Reg1V32 0x3F000407 1:4B N 400000 3 5000000 Power Monitor nvdbgsvc Factory
23 Ina226Vdd3V3Sys 0x3F000408 1:4D N 400000 3 5000000 Power Monitor nvdbgsvc Factory
[2.0.0+] 24 HdmiDdc 0x34000001 3:50 N 100000 0 0 HDMI DDC NV services Copper, Calcio
[2.0.0+] 25 HdmiScdc 0x34000002 3:54 N 100000 0 0 HDMI SCDC NV services Copper, Calcio
[2.0.0+] 26 HdmiHdcp 0x34000003 3:3A N 100000 0 0 HDMI HDCP NV services Copper, Calcio
[4.0.0+] 27 Fan53528 0x3A000005 4:52 ([4.0.0-8.0.0] 4:A4) N 400000 0 0 RAM Regulator (tied to Max77812Pmic) Hoag, Iowa, Calcio, Aula
[4.0.0+] 28 Max77812Pmic 0x3A000002 4:31 ([8.0.0-9.2.0] 4:33, [4.0.0-8.0.0] 4:31) N 400000 0 0 Sub-PMIC for CPU and GPU (tied to Fan53528) (Phase 31) PCV services Hoag, Iowa, Calcio, Aula
[4.0.0+] 29 Max77812Pmic 0x3A000006 ([4.0.0-9.2.0] 0x3A000002) 4:33 ([4.0.0-8.0.0] 4:31) N 400000 0 0 Sub-PMIC for GPU, CPU and RAM (Phase 211) PCV services Hoag, Iowa, Calcio, Aula
[4.0.0+] 30 Ina226VddDdr0V6 (SdevMariko) 0x3F000409 1:4E N 400000 3 5000000 Power Monitor nvdbgsvc Factory
[8.0.0+] 31 (MillauNfc) 0x36000001 1:08 N 400000 3 5000000 NFC Controller NFC services Hoag
[12.0.0+] - (Max77801) 0x3A000007 4:18 N 400000 0 0 Audio Codec (ALC5639) Regulator PCV services Aula

AddressingMode

This is "nn::i2c::AddressingMode".

Value Name
0 BitWidth7
1 BitWidth10

TransactionOption

This is "nn::i2c::TransactionOption".

Value Name
1 StartCondition
2 StopCondition

SpeedMode

This is "nn::i2c::SpeedMode".

Value Name
0x186A0 Standard
0x61A80 Fast
0xF4240 FastPlus
0x33E140 HighSpeed

CommandId

This is "nn::i2c::detail::CommandId".

Value Name
0 Send
1 Receive
2 Extension

SubCommandId

This is "nn::i2c::detail::SubCommandId".

Value Name
0 Sleep

UartPort

This is "nn::uart::UartPort".

Value Name DeviceCode (internal) DeviceCode (mapped) Description
0 UART-A 0x03000001 Invalid
1 UART-D 0x03000004 0x37000001 Bluetooth
2 UART-B 0x03000002 0x35000405 Joy-Con(R)
3 UART-C 0x03000003 0x3500040F Joy-Con(L)
4 UART-C 0x03000003 0x35000419 SioMcu

UartPortForDev

This is "nn::uart::UartPortForDev".

Value Name DeviceCode (internal) DeviceCode (mapped) Description
0 UART-A 0x03000001 Invalid
1 UART-B 0x03000002 0x35000405 Joy-Con(R)
2 UART-C 0x03000003 0x3500040F Joy-Con(L)
3 UART-D 0x03000004 0x37000001 Bluetooth

FlowControlMode

This is "nn::uart::FlowControlMode".

Value Name
0 None
1 Hardware

PortEventType

This is "nn::uart::PortEventType".

Value Name
0 SendBufferEmpty
1 SendBufferReady
2 ReceiveBufferReady
3 ReceiveEnd

ChannelName

This is "nn::pwm::ChannelName".

Value Name DeviceCode Description Used by
0 Invalid
1 CpuFan 0x3D000001 PWM Channel 1 PTM services
2 LcdBacklight 0x3400003D PWM Channel 0 Backlight services, NV services
3 Led 0x35000065 PMC LED Soft Blink Bus services

AssignablePinGroupName

This is "nn::pinmux::AssignablePinGroupName".

Value Description
0 ExtConUartB
1 ExtConUartC
2 Sdmmc1
3 PwmFan
100 Invalid

AssignablePinGroupNameForHardwareTest

This is "nn::pinmux::AssignablePinGroupNameForHardwareTest".

Value Description
0 Invalid
1 Invalid
2 Invalid
3 Invalid
100 UartD

PinAssignment

This is "nn::pinmux::PinAssignment".

Value Name
0 ExtConUartOutputEnable
1 ExtConUartOutputHiZ
2 Sdmmc1OutputHigh
3 Sdmmc1ResetState
4 Sdmmc1SchmtEnable
5 Sdmmc1SchmtDisable
6 PwmFanEnable
7 PwmFanHiZ

PinAssignmentForHardwareTest

This is "nn::pinmux::PinAssignmentForHardwareTest".

Value Name
100 UartDHiZ
101 UartDEnable

SasbusPort

Value Name DeviceCode Description
0 SPI4 0x3500003D Lsm6ds3 (WHOAMI 0x69, 0x6A and 0x6C)
[10.0.0+] 1 SPI4 0x3500003D Icm40607 (WHOAMI 0x38)
[13.0.0+] 2 SPI4 0x3500003D Icm42607p (WHOAMI 0x60)