Difference between revisions of "GPIO Services"

From 3dbrew
Jump to navigation Jump to search
Line 64: Line 64:
 
|-
 
|-
 
| 0x00070040
 
| 0x00070040
| GetIRGPIO(u32 unk1,u32* ret)
+
| GetIRGPIO(u32 bitmask) Output u32 is written to cmdreply[2].
 
| 0x10147000, 0x10147010, 0x10147014, 0x10147020, 0x10147028
 
| 0x10147000, 0x10147010, 0x10147014, 0x10147020, 0x10147028
 
|-
 
|-
Line 78: Line 78:
 
| [[GPIO:UnbindInterrupt|UnbindInterrupt]]
 
| [[GPIO:UnbindInterrupt|UnbindInterrupt]]
 
| None
 
| None
 +
|}
 +
 +
=GPIO Bitmask=
 +
The bitmask used by GetIRGPIO(and likely others) determines which bits in the GPIO registers to access. The output value from GetIRGPIO uses the same format as the bitmask: the values of bits in the output field are set to the value of GPIO data when those bits are set in the input bitmask.
 +
 +
{| class="wikitable" border="1"
 +
|-
 +
!  Bits in the bitmask
 +
!  Register
 +
!  Bits from register
 +
|-
 +
| 0-2 (0x7)
 +
| 0x10147000
 +
| 0-2
 +
|-
 +
| 3-4 (0x18)
 +
| 0x10147010
 +
| 0-1
 +
|-
 +
| 5 (0x20)
 +
| 0x10147014
 +
| 0
 +
|-
 +
| 6-17 (0x3FFC0)
 +
| 0x10147020
 +
| 0-11
 +
|-
 +
| 18 (0x40000)
 +
| 0x10147028
 +
| 0
 
|}
 
|}

Revision as of 21:14, 19 January 2017

GPIO Service Names

Service name Permitted interrupts bitmasks
gpio:CDC 0x48
gpio:MCU 0x48020
gpio:HID 0x4301
gpio:NWM 0x40020
gpio:IR 0xEC0
gpio:NFC 0x13000
gpio:QTM 0x20000

For the mapping between interrupts bitmasks and IRQs see: GPIO:BindInterrupt#Supported_values.

The commands for these services are identical.

GPIO Services

Command Header Description Uses GPIO Regs
0x0001.... ?(u32 unk1,u32* ret) 0x10147010, 0x10147020
0x00020080 ?(u32 unk1,u32 unk2) 0x10147010, 0x10147020
0x0003.... ?(u32 unk1,u32* ret) 0x10147010, 0x10147024
0x00040080 ?(u32 unk1,u32 unk2) 0x10147010, 0x10147024
0x0005.... ?(u32 unk1,u32* ret) 0x10147010, 0x10147024
0x00060080 ?(u32 unk1,u32 unk2) 0x10147010, 0x10147024
0x00070040 GetIRGPIO(u32 bitmask) Output u32 is written to cmdreply[2]. 0x10147000, 0x10147010, 0x10147014, 0x10147020, 0x10147028
0x00080080 SetIRGPIO(u32 unk1,u32 unk2) 0x10147010, 0x10147014, 0x10147020, 0x10147028
0x00090082 BindInterrupt None
0x000A0042 UnbindInterrupt None

GPIO Bitmask

The bitmask used by GetIRGPIO(and likely others) determines which bits in the GPIO registers to access. The output value from GetIRGPIO uses the same format as the bitmask: the values of bits in the output field are set to the value of GPIO data when those bits are set in the input bitmask.

Bits in the bitmask Register Bits from register
0-2 (0x7) 0x10147000 0-2
3-4 (0x18) 0x10147010 0-1
5 (0x20) 0x10147014 0
6-17 (0x3FFC0) 0x10147020 0-11
18 (0x40000) 0x10147028 0