GPIO Services: Difference between revisions

No edit summary
TimmSkiller (talk | contribs)
 
(15 intermediate revisions by 6 users not shown)
Line 4: Line 4:
|-
|-
!  Service name
!  Service name
!  Permitted interrupts bitmasks
!  Permitted GPIO bitmasks
|-
|-
| gpio:CDC
| gpio:CDC
Line 28: Line 28:
|}
|}


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


The commands for these services are identical.
The commands for these services are identical.
The input bitmask for each command is masked with the above permission bitmask, if the result is non-zero an error is occurred.


= GPIO Services =
= GPIO Services =
Line 39: Line 41:
!  Uses [[GPIO_Registers|GPIO Regs]]
!  Uses [[GPIO_Registers|GPIO Regs]]
|-
|-
| 0x0001....
| 0x00010040
| ?(u32 unk1,u32* ret)
| u32 GetRegPart1(u32 mask)
| 0x10147010, 0x10147020
| 0x10147010, 0x10147020
|-
|-
| 0x00020080
| 0x00020080
| ?(u32 unk1,u32 unk2)
| void SetRegPart1(u32 value, u32 mask)
| 0x10147010, 0x10147020
| 0x10147010, 0x10147020
|-
|-
| 0x0003....
| 0x00030040
| ?(u32 unk1,u32* ret)
| u32 GetRegPart2(u32 mask)
| 0x10147010, 0x10147024
| 0x10147010, 0x10147024
|-
|-
| 0x00040080
| 0x00040080
| ?(u32 unk1,u32 unk2)
| u32 SetRegPart2(u32 value, u32 mask)
| 0x10147010, 0x10147024
| 0x10147010, 0x10147024
|-
|-
| 0x0005....
| 0x00050040
| ?(u32 unk1,u32* ret)
| u32 GetInterruptMask(u32 mask)
| 0x10147010, 0x10147024
| 0x10147010, 0x10147024
|-
|-
| 0x00060080
| 0x00060080
| ?(u32 unk1,u32 unk2)
| void SetInterruptMask(u32 value, u32 mask)
| 0x10147010, 0x10147024
| 0x10147010, 0x10147024
|-
|-
| 0x00070040
| 0x00070040
| GetIRGPIO(u32 bitmask) Output u32 is written to cmdreply[2].
| [[GPIO:GetGPIOData|GetGPIOData]]
| 0x10147000, 0x10147010, 0x10147014, 0x10147020, 0x10147028
| 0x10147000, 0x10147010, 0x10147014, 0x10147020, 0x10147028
|-
|-
| 0x00080080
| 0x00080080
| SetIRGPIO(u32 unk1,u32 unk2)
| [[GPIO:SetGPIOData|SetGPIOData]]
| 0x10147010, 0x10147014, 0x10147020, 0x10147028
| 0x10147010, 0x10147014, 0x10147020, 0x10147028
|-
|-
Line 81: Line 83:


=GPIO Bitmask=
=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.
The bitmask used by the service commands determines which bits in the GPIO registers to access. The output value from [[GPIO:GetGPIOData|GetGPIOData]] 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"
{| class="wikitable" border="1"
Line 88: Line 90:
!  Register
!  Register
!  Bits from register
!  Bits from register
!  Handled with [[GPIO:SetGPIOData]]
|-
|-
| 0-2 (0x7)
| 0-2 (0x7)
| 0x10147000
| 0x10147000
| 0-2
| 0-2
| No
|-
|-
| 3-4 (0x18)
| 3-4 (0x18)
| 0x10147010
| 0x10147010
| 0-1
| 0-1
| Yes
|-
|-
| 5 (0x20)
| 5 (0x20)
| 0x10147014
| 0x10147014
| 0
| 0
| Yes
|-
|-
| 6-17 (0x3FFC0)
| 6-17 (0x3FFC0)
| 0x10147020
| 0x10147020
| 0-11
| 0-11
| Yes
|-
|-
| 18 (0x40000)
| 18 (0x40000)
| 0x10147028
| 0x10147028
| 0
| 0
| Yes
|}
==GPIO Bits==
{| class="wikitable" border="1"
|-
!  Bit
!  Bitmask
!  Accessible via GPIO service
!  Used by
!  Description
|-
| 0
| 0x1
| gpio:HID
| HID-sysmodule
| Used with [[HID_Shared_Memory|HID]] PAD state.
|-
| 1
| 0x2
| None
|
| Not known to be used by ''anything'', with the latest system-version at least.
|-
| 2
| 0x4
| None
|
| Not known to be used by ''anything'', with the latest system-version at least.
|-
| 3
| 0x8
| gpio:CDC
| ?
| ?
|-
| 4
| 0x10
| None
|
| Not known to be used by ''anything'', with the latest system-version at least.
|-
| 5
| 0x20
| gpio:MCU, gpio:NWM
| NWM-sysmodule, MCU-sysmodule
| WiFi mode. 0 = CTR, 1 = "MP" (DS WiFi?)
|-
| 6
| 0x40
| gpio:CDC, gpio:IR
| ?
| ?
|-
| 7
| 0x80
| gpio:IR
| Boot11
| ?
|-
| 8
| 0x100
| gpio:HID
| HID sysmodule
| Used with gyroscope
|-
| 9
| 0x200
| gpio:HID, gpio:IR
| HID-sysmodule and IR-sysmodule
| Unknown, used with ir:rst.
|-
| 10
| 0x400
| gpio:IR
| IR-sysmodule, Boot11
| IR [[IRU:SetIRLEDState|send]]. 1 = IR LED enable, 0 = IR LED disable.
|-
| 11
| 0x800
| gpio:IR
| IR-sysmodule
| IR [[IRU:GetIRLEDRecvState|receive]]
|-
| 12
| 0x1000
| gpio:NFC
| ?
| ?
|-
| 13
| 0x2000
| gpio:NFC
| ?
| ?
|-
| 14
| 0x4000
| gpio:HID
| HID-sysmodule
| Used with [[HID_Shared_Memory|HID]]  PAD state.
|-
| 15
| 0x8000
| gpio:MCU
| MCU-sysmodule
| MCU Interrupt.
|-
| 16
| 0x10000
| gpio:NFC
| ?
| ?
|-
| 17
| 0x20000
| gpio:QTM
| ?
| ?
|-
| 18
| 0x40000
| gpio:MCU, gpio:NWM
| NWM-sysmodule, MCU-sysmodule
| Wifi enable. 1=Enabled, 0=Disabled.
|}
|}