IR Services: Difference between revisions

No edit summary
Wwylele (talk | contribs)
(10 intermediate revisions by 4 users not shown)
Line 4: Line 4:
|-
|-
!  Command Header
!  Command Header
!  Available since system version
!  Description
!  Description
|-
|-
| 0x00010000
| 0x00010000
| [[1.0.0-0]]
| [[IRU:Initialize|Initialize]]
| [[IRU:Initialize|Initialize]]
|-
|-
| 0x00020000
| 0x00020000
| [[1.0.0-0]]
| [[IRU:Shutdown|Shutdown]]
| [[IRU:Shutdown|Shutdown]]
|-
|-
| 0x00030042
| 0x00030042
| [[1.0.0-0]]
| [[IRU:StartSendTransfer|StartSendTransfer]]
| [[IRU:StartSendTransfer|StartSendTransfer]]
|-
|-
| 0x00040000
| 0x00040000
| [[1.0.0-0]]
| [[IRU:WaitSendTransfer|WaitSendTransfer]]
| [[IRU:WaitSendTransfer|WaitSendTransfer]]
|-
|-
| 0x000500C2
| 0x000500C2
| [[1.0.0-0]]
| [[IRU:StartRecvTransfer|StartRecvTransfer]]
| [[IRU:StartRecvTransfer|StartRecvTransfer]]
|-
|-
| 0x00060000
| 0x00060000
| [[1.0.0-0]]
| [[IRU:WaitRecvTransfer|WaitRecvTransfer]]
| [[IRU:WaitRecvTransfer|WaitRecvTransfer]]
|-
|-
| 0x00070000
| 0x00070000
| [[1.0.0-0]]
| [[IRU:GetRecvTransferCount|GetRecvTransferCount]]
| [[IRU:GetRecvTransferCount|GetRecvTransferCount]]
|-
|-
| 0x00080000
| 0x00080000
| [[1.0.0-0]]
| [[IRU:GetSendState|GetSendState]]
| [[IRU:GetSendState|GetSendState]]
|-
|-
| 0x00090040
| 0x00090040
| [[1.0.0-0]]
| [[IRU:SetBitRate|SetBitRate]]
| [[IRU:SetBitRate|SetBitRate]]
|-
|-
| 0x000A0000
| 0x000A0000
| [[1.0.0-0]]
| [[IRU:GetBitRate|GetBitRate]]
| [[IRU:GetBitRate|GetBitRate]]
|-
|-
| 0x000B0040
| 0x000B0040
| [[1.0.0-0]]
| [[IRU:SetIRLEDState|SetIRLEDState]]
| [[IRU:SetIRLEDState|SetIRLEDState]]
|-
|-
| 0x000C0000
| 0x000C0000
| [[1.0.0-0]]
| [[IRU:GetIRLEDRecvState|GetIRLEDRecvState]]
| [[IRU:GetIRLEDRecvState|GetIRLEDRecvState]]
|-
|-
| 0x000D0000
| 0x000D0000
| [[1.0.0-0]]
| [[IRU:GetSendFinishedEvent|GetSendFinishedEvent]]
| [[IRU:GetSendFinishedEvent|GetSendFinishedEvent]]
|-
|-
| 0x000E0000
| 0x000E0000
| [[1.0.0-0]]
| [[IRU:GetRecvFinishedEvent|GetRecvFinishedEvent]]
| [[IRU:GetRecvFinishedEvent|GetRecvFinishedEvent]]
|-
|-
| 0x000F0000
| 0x000F0000
| [[1.0.0-0]]
| [[IRU:GetTransferState|GetTransferState]]
| [[IRU:GetTransferState|GetTransferState]]
|-
|-
| 0x00100000
| 0x00100000
| [[1.0.0-0]]
| GetErrorStatus
| GetErrorStatus
|-
|-
| 0x00110040
| 0x00110040
| [[1.0.0-0]]
| [[IRU:SetSleepModeActive|SetSleepModeActive]]
| [[IRU:SetSleepModeActive|SetSleepModeActive]]
|-
|-
| 0x00120040
| 0x00120040
| [[1.0.0-0]]
| [[IRU:SetSleepModeState|SetSleepModeState]]
| [[IRU:SetSleepModeState|SetSleepModeState]]
|}
|}
Line 69: Line 88:
|-
|-
| 0x00010182
| 0x00010182
|  
| [[2.0.0-2]]
| InitializeIrnop
| [[IRUSER:InitializeIrnop|InitializeIrnop]]
|-
|-
| 0x00020000
| 0x00020000
|  
| [[2.0.0-2]]
| FinalizeIrnop
| FinalizeIrnop
|-
|-
| 0x00030000
| 0x00030000
|  
| [[2.0.0-2]]
| ClearReceiveBuffer
| ClearReceiveBuffer
|-
|-
| 0x00040000
| 0x00040000
|  
| [[2.0.0-2]]
| ClearSendBuffer
| ClearSendBuffer
|-
|-
| 0x0005....
| 0x000500C0
|
| [[2.0.0-2]]
| WaitConnection
| WaitConnection
|-
|-
| 0x00060040
| 0x00060040
|  
| [[2.0.0-2]]
| RequireConnection (u8 input)
| RequireConnection (u8 input)
|-
|-
| 0x0007....
| 0x000702C0
|
| [[2.0.0-2]]
| AutoConnection
| AutoConnection
|-
|-
| 0x0008....
| 0x00080000
|
| [[2.0.0-2]]
| AnyConnection
| AnyConnection
|-
|-
| 0x00090000
| 0x00090000
|  
| [[2.0.0-2]]
| Disconnect
| Disconnect
|-
|-
| 0x000A0000
| 0x000A0000
|  
| [[2.0.0-2]]
| GetReceiveEvent (writes event handle to cmdreply[3])
| GetReceiveEvent (writes event handle to cmdreply[3])
|-
|-
| 0x000B0000
| 0x000B0000
|  
| [[2.0.0-2]]
| GetSendEvent (writes event handle to cmdreply[3])
| GetSendEvent (writes event handle to cmdreply[3])
|-
|-
| 0x000C0000
| 0x000C0000
|  
| [[2.0.0-2]]
| GetConnectionStatusEvent (writes event handle to cmdreply[3])
| GetConnectionStatusEvent (writes event handle to cmdreply[3])
|-
|-
| 0x000D0042
| 0x000D0042
|  
| [[2.0.0-2]]
| SendIrnop (u32 size, ((Size<<14) <nowiki>|</nowiki> 2), inbufptr)
| SendIrnop (u32 size, ((Size<<14) <nowiki>|</nowiki> 2), inbufptr)
|-
|-
| 0x000E0042
| 0x000E0042
|  
| [[2.0.0-2]]
| SendIrnopLarge (u32 size, ((Size<<8) <nowiki>|</nowiki> 10), inbufptr)
| SendIrnopLarge (u32 size, ((Size<<8) <nowiki>|</nowiki> 10), inbufptr)
|-
|-
| 0x000F....
| 0x000F0040
|
| [[2.0.0-2]]
| ReceiveIrnop
| ReceiveIrnop
|-
|-
| 0x0010....
| 0x00100042
|
| [[2.0.0-2]]
| ReceiveIrnopLarge
| ReceiveIrnopLarge
|-
|-
| 0x0011....
| 0x0011....
|  
| [[2.0.0-2]]
| GetLatestReceiveErrorResult
| GetLatestReceiveErrorResult
|-
|-
| 0x0012....
| 0x0012....
|  
| [[2.0.0-2]]
| GetLatestSendErrorResult
| GetLatestSendErrorResult
|-
|-
| 0x0013....
| 0x0013....
|  
| [[2.0.0-2]]
| GetConnectionStatus
| GetConnectionStatus
|-
|-
| 0x0014....
| 0x0014....
|  
| [[2.0.0-2]]
| GetTryingToConnectStatus
| GetTryingToConnectStatus
|-
|-
| 0x0015....
| 0x0015....
|  
| [[2.0.0-2]]
| GetReceiveSizeFreeAndUsed
| GetReceiveSizeFreeAndUsed
|-
|-
| 0x0016....
| 0x0016....
|  
| [[2.0.0-2]]
| GetSendSizeFreeAndUsed
| GetSendSizeFreeAndUsed
|-
|-
| 0x0017....
| 0x0017....
| Unknown, >[[2.0.0-2]]
| [[2.2.0-X]]
| GetConnectionRole
| GetConnectionRole
|-
|-
| 0x00180182
| 0x00180182
| Unknown, >[[2.0.0-2]]
| [[2.2.0-X]]
| InitializeIrnopShared (u32, u32, u32, u32, u32, u8, 0, handle)
| [[IRUSER:InitializeIrnopShared|InitializeIrnopShared]]
|-
|-
| 0x00190040
| 0x00190040
| Unknown, >[[2.0.0-2]]
| [[2.2.0-X]]
| ReleaseReceivedData (32bit_value input)
| ReleaseReceivedData (32bit_value input)
|-
|-
| 0x001A....
| 0x001A0040
| Unknown, >[[2.0.0-2]]
| [[2.2.0-X]]
| SetOwnMachineId
| 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.
When sending data, SendIrnop is used when the size is <=0xFC, otherwise SendIrnopLarge is used.
Line 226: Line 247:
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).
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).
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.