Changes

Jump to: navigation, search

IR Services

1,626 bytes added, 07:33, 4 July 2017
IR Service "ir:USER"
|-
! Command Header
! Available since system version
! Description
|-
| 0x00010000
| [[1.0.0-0]]
| [[IRU:Initialize|Initialize]]
|-
| 0x00020000
| [[1.0.0-0]]
| [[IRU:Shutdown|Shutdown]]
|-
| 0x00030042
| [[1.0.0-0]]
| [[IRU:StartSendTransfer|StartSendTransfer]]
|-
| 0x00040000
| [[1.0.0-0]]
| [[IRU:WaitSendTransfer|WaitSendTransfer]]
|-
| 0x000500C2
| [[1.0.0-0]]
| [[IRU:StartRecvTransfer|StartRecvTransfer]]
|-
| 0x00060000
| [[1.0.0-0]]
| [[IRU:WaitRecvTransfer|WaitRecvTransfer]]
|-
| 0x00070000
| [[1.0.0-0]]
| [[IRU:GetRecvTransferCount|GetRecvTransferCount]]
|-
| 0x00080000
| [[1.0.0-0]]
| [[IRU:GetSendState|GetSendState]]
|-
| 0x00090040
| [[1.0.0-0]]
| [[IRU:SetBitRate|SetBitRate]]
|-
| 0x000A0000
| [[1.0.0-0]]
| [[IRU:GetBitRate|GetBitRate]]
|-
| 0x000B0040
| [[1.0.0-0]]
| [[IRU:SetIRLEDState|SetIRLEDState]]
|-
| 0x000C0000
| [[1.0.0-0]]
| [[IRU:GetIRLEDRecvState|GetIRLEDRecvState]]
|-
| 0x000D0000
| [[1.0.0-0]]
| [[IRU:GetSendFinishedEvent|GetSendFinishedEvent]]
|-
| 0x000E0000
| [[1.0.0-0]]
| [[IRU:GetRecvFinishedEvent|GetRecvFinishedEvent]]
|-
| 0x000F0000
| [[1.0.0-0]]
| [[IRU:GetTransferState|GetTransferState]]
|-
| 0x00100000
| [[1.0.0-0]]
| GetErrorStatus
|-
| 0x00110040
| [[1.0.0-0]]
| [[IRU:SetSleepModeActive|SetSleepModeActive]]
|-
| 0x00120040
| [[1.0.0-0]]
| [[IRU:SetSleepModeState|SetSleepModeState]]
|}
|-
| 0x00010182
| [[2.0.0-2]]| [[IRUSER:InitializeIrnop|InitializeIrnop]]
|-
| 0x00020000
| [[2.0.0-2]]
| FinalizeIrnop
|-
| 0x00030000
| [[2.0.0-2]]
| ClearReceiveBuffer
|-
| 0x00040000
| [[2.0.0-2]]
| ClearSendBuffer
|-
| 0x000500000x000500C0| [[2.0.0-2]]
| WaitConnection
|-
| 0x000600000x00060040| [[2.0.0-2]]| RequireConnection(u8 input)
|-
| 0x000700000x000702C0| [[2.0.0-2]]
| AutoConnection
|-
| 0x00080000
| [[2.0.0-2]]
| AnyConnection
|-
| 0x00090000
| [[2.0.0-2]]
| Disconnect
|-
| 0x000A0000
| [[2.0.0-2]]| GetReceiveEvent(writes event handle to cmdreply[3])
|-
| 0x000B0000
| [[2.0.0-2]]| GetSendEvent(writes event handle to cmdreply[3])
|-
| 0x000C0000
| [[2.0.0-2]]| GetConnectionStatusEvent(writes event handle to cmdreply[3])
|-
| 0x000D00000x000D0042| [[2.0.0-2]]| SendIrnop(u32 size, ((Size<<14) <nowiki>|</nowiki> 2), inbufptr)
|-
| 0x000E00000x000E0042| [[2.0.0-2]]| SendIrnopLarge(u32 size, ((Size<<8) <nowiki>|</nowiki> 10), inbufptr)
|-
| 0x000F00000x000F0040| [[2.0.0-2]]
| ReceiveIrnop
|-
| 0x001000000x00100042| [[2.0.0-2]]
| ReceiveIrnopLarge
|-
| 0x001100000x0011....| [[2.0.0-2]]
| GetLatestReceiveErrorResult
|-
| 0x001200000x0012....| [[2.0.0-2]]
| GetLatestSendErrorResult
|-
| 0x001300000x0013....| [[2.0.0-2]]
| GetConnectionStatus
|-
| 0x001400000x0014....| [[2.0.0-2]]
| GetTryingToConnectStatus
|-
| 0x001500000x0015....| [[2.0.0-2]]
| GetReceiveSizeFreeAndUsed
|-
| 0x001600000x0016....| [[2.0.0-2]]
| GetSendSizeFreeAndUsed
|-
| 0x001700000x0017....| Unknown, >[[2.02.0-2X]]
| GetConnectionRole
|-
| 0x001800000x00180182| Unknown, >[[2.02.0-2X]]| [[IRUSER:InitializeIrnopShared|InitializeIrnopShared]]
|-
| 0x001900000x00190040| Unknown, >[[2.02.0-2X]]| ReleaseReceivedData(32bit_value input)
|-
| 0x001A00000x001A0040| Unknown, >[[2.02.0-2X]]| SetOwnMachineId(u8 input)
|}
 
This service was added with [[2.0.0-2]].
 
When sending data, SendIrnop is used when the size is <=0xFC, otherwise SendIrnopLarge is used.
= IR Service "ir:rst" =
|-
! Command Header
! Available since system-version
! Description
|-
| 0x00010000
| [[8.0.0-18]]
| [[IRRST:GetHandles|GetHandles]]
|-
| 0x00020080
| [[8.0.0-18]]
| [[IRRST:Initialize|Initialize]]
|-
| 0x00030000
| [[8.0.0-18]]
| [[IRRST:Shutdown|Shutdown]]
|-
| 0x00040000
| [[8.0.0-18]]
| This writes an unknown u8 to index-word cmdreply[2], from data loaded from an I2C device register.
|-
| 0x00050000
| [[8.0.0-18]]
| This writes an unknown u8 from IR-module state to index-word cmdreply[2].
|-
| 0x00060000
| [[8.0.0-18]]
| This writes two unknown u8 fields from IR-module state to index-word cmdreply[2] and cmdreply[3].
|-
| 0x00070080
| [[9.0.0-20]]
| (u8 unk0, u8 unk1) ?
|-
| 0x00080000
| [[9.0.0-20]]
| (u8 unk0, u8 unk1) ?
|-
| 0x00090000
| [[9.0.0-20]]
| This writes two unknown u8 fields to index-word cmdreply[2] and cmdreply[3].
|}
This service was added with [[8.0.0-18]]. Unlike the other IR services, this uses [[I2C]] deviceid 17(this deviceid isn't actually handled by the [[8.0.0-18]] I2C module). This is for the additional [[New 3DS]] HID hardware, this HID data is stored in [[IRRST_Shared_Memory|shared-memory]]. Even with [[9.0.0-20]] IR module still registers+handles this service on both Old3DS+New3DS.
=IR Services=
IRU is for regular IR comms. IRUSER uses a custom IR protocol(above the physical layer). Both of these services use IrDA-SIR. The IR hardware seems to only support IrDA-SIR, other physical protocols such as the one for TV-remotes are not supported(going by the datasheet linked [[Hardware|here]] for a different IC at least).
The protocol used with IRUSER involves encryption (?) implemented in software. IRUSER is used for the [[Circle Pad Pro]]. This same IRUSER service uses the New3DS HID hardware when running on New3DS. Note that the main service for New3DS HID is ir:rst, and these two service are mutually exclusive: when one is initialized and reading data from New3DS HID, the other cannot access it.
232
edits

Navigation menu