IR Services: Difference between revisions
(19 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 | ||
|- | |- | ||
| | | 0x000500C0 | ||
| | | [[2.0.0-2]] | ||
| WaitConnection | | WaitConnection | ||
|- | |- | ||
| | | 0x00060040 | ||
| | | [[2.0.0-2]] | ||
| RequireConnection | | RequireConnection (u8 input) | ||
|- | |- | ||
| | | 0x000702C0 | ||
| | | [[2.0.0-2]] | ||
| AutoConnection | | AutoConnection | ||
|- | |- | ||
| 0x00080000 | | 0x00080000 | ||
| | | [[2.0.0-2]] | ||
| AnyConnection | | AnyConnection | ||
|- | |- | ||
| 0x00090000 | | 0x00090000 | ||
| | | [[2.0.0-2]] | ||
| Disconnect | | Disconnect | ||
|- | |- | ||
| 0x000A0000 | | 0x000A0000 | ||
| | | [[2.0.0-2]] | ||
| GetReceiveEvent | | GetReceiveEvent (writes event handle to cmdreply[3]) | ||
|- | |- | ||
| 0x000B0000 | | 0x000B0000 | ||
| | | [[2.0.0-2]] | ||
| GetSendEvent | | GetSendEvent (writes event handle to cmdreply[3]) | ||
|- | |- | ||
| 0x000C0000 | | 0x000C0000 | ||
| | | [[2.0.0-2]] | ||
| GetConnectionStatusEvent | | GetConnectionStatusEvent (writes event handle to cmdreply[3]) | ||
|- | |- | ||
| | | 0x000D0042 | ||
| | | [[2.0.0-2]] | ||
| SendIrnop | | SendIrnop (u32 size, ((Size<<14) <nowiki>|</nowiki> 2), inbufptr) | ||
|- | |- | ||
| | | 0x000E0042 | ||
| | | [[2.0.0-2]] | ||
| SendIrnopLarge | | SendIrnopLarge (u32 size, ((Size<<8) <nowiki>|</nowiki> 10), inbufptr) | ||
|- | |- | ||
| | | 0x000F0040 | ||
| | | [[2.0.0-2]] | ||
| ReceiveIrnop | | ReceiveIrnop | ||
|- | |- | ||
| | | 0x00100042 | ||
| | | [[2.0.0-2]] | ||
| ReceiveIrnopLarge | | ReceiveIrnopLarge | ||
|- | |- | ||
| | | 0x0011.... | ||
| | | [[2.0.0-2]] | ||
| GetLatestReceiveErrorResult | | GetLatestReceiveErrorResult | ||
|- | |- | ||
| | | 0x0012.... | ||
| | | [[2.0.0-2]] | ||
| GetLatestSendErrorResult | | GetLatestSendErrorResult | ||
|- | |- | ||
| | | 0x0013.... | ||
| | | [[2.0.0-2]] | ||
| GetConnectionStatus | | GetConnectionStatus | ||
|- | |- | ||
| | | 0x0014.... | ||
| | | [[2.0.0-2]] | ||
| GetTryingToConnectStatus | | GetTryingToConnectStatus | ||
|- | |- | ||
| | | 0x0015.... | ||
| | | [[2.0.0-2]] | ||
| GetReceiveSizeFreeAndUsed | | GetReceiveSizeFreeAndUsed | ||
|- | |- | ||
| | | 0x0016.... | ||
| | | [[2.0.0-2]] | ||
| GetSendSizeFreeAndUsed | | GetSendSizeFreeAndUsed | ||
|- | |- | ||
| | | 0x0017.... | ||
| | | [[2.2.0-X]] | ||
| GetConnectionRole | | GetConnectionRole | ||
|- | |- | ||
| | | 0x00180182 | ||
| | | [[2.2.0-X]] | ||
| InitializeIrnopShared | | [[IRUSER:InitializeIrnopShared|InitializeIrnopShared]] | ||
|- | |- | ||
| | | 0x00190040 | ||
| | | [[2.2.0-X]] | ||
| ReleaseReceivedData | | ReleaseReceivedData (32bit_value input) | ||
|- | |- | ||
| | | 0x001A0040 | ||
| | | [[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. | |||
= IR Service "ir:rst" = | = IR Service "ir:rst" = | ||
Line 177: | Line 200: | ||
|- | |- | ||
! Command Header | ! Command Header | ||
! Available since system-version | |||
! Description | ! Description | ||
|- | |- | ||
| 0x00010000 | | 0x00010000 | ||
| [[8.0.0-18]] | |||
| [[IRRST:GetHandles|GetHandles]] | | [[IRRST:GetHandles|GetHandles]] | ||
|- | |- | ||
| 0x00020080 | | 0x00020080 | ||
| [[8.0.0-18]] | |||
| [[IRRST:Initialize|Initialize]] | | [[IRRST:Initialize|Initialize]] | ||
|- | |- | ||
| 0x00030000 | | 0x00030000 | ||
| [[8.0.0-18]] | |||
| [[IRRST:Shutdown|Shutdown]] | | [[IRRST:Shutdown|Shutdown]] | ||
|- | |- | ||
| 0x00040000 | | 0x00040000 | ||
| [[8.0.0-18]] | |||
| This writes an unknown u8 to index-word cmdreply[2], from data loaded from an I2C device register. | | This writes an unknown u8 to index-word cmdreply[2], from data loaded from an I2C device register. | ||
|- | |- | ||
| 0x00050000 | | 0x00050000 | ||
| [[8.0.0-18]] | |||
| This writes an unknown u8 from IR-module state to index-word cmdreply[2]. | | This writes an unknown u8 from IR-module state to index-word cmdreply[2]. | ||
|- | |- | ||
| 0x00060000 | | 0x00060000 | ||
| [[8.0.0-18]] | |||
| This writes two unknown u8 fields from IR-module state to index-word cmdreply[2] and cmdreply[3]. | | 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 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= | =IR Services= | ||
Line 205: | 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]]. | 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. |