Changes

Jump to navigation Jump to search
5,530 bytes added ,  Wednesday at 21:59
no edit summary
Line 1: Line 1: −
Migration is a sysmodule designed for handling the new Switch to Switch transfer system.
+
Migration is a sysmodule designed for handling the Switch-to-Switch transfer system introduced in firmware [[4.0.0]].
 +
 
 +
With newer system-versions this sysmodule is only running when [[qlaunch]] is using migration from the relevant transfer menus (see [[Applet_Manager_services#ActivateMigrationService|ActivateMigrationService]]/[[Applet_Manager_services#DeactivateMigrationService|DeactivateMigrationService]]).
    
= mig:usr =
 
= mig:usr =
Line 8: Line 10:  
! Cmd || Name
 
! Cmd || Name
 
|-
 
|-
| 10 || TryGetLastMigrationInfo
+
| 0 || [19.0.0+]
 +
|-
 +
| 10 || [7.0.0+] TryGetLastUserMigrationInfo ([4.0.0-6.2.0] TryGetLastMigrationInfo)
 +
|-
 +
| 100 || [7.0.0+] [[#CreateUserMigrationServer|CreateUserMigrationServer]] ([4.0.0-6.2.0] CreateServer)
 +
|-
 +
| 101 || [7.0.0+] [[#ResumeUserMigrationServer|ResumeUserMigrationServer]] ([4.0.0-6.2.0] ResumeServer)
 +
|-
 +
| 200 || [7.0.0+] [[#CreateUserMigrationClient|CreateUserMigrationClient]] ([4.0.0-6.2.0] CreateClient)
 +
|-
 +
| 201 || [7.0.0+] [[#ResumeUserMigrationClient|ResumeUserMigrationClient]] ([4.0.0-6.2.0] ResumeClient)
 +
|-
 +
| 1001 || [8.0.0+] [[#GetSaveDataMigrationPolicyInfoAsync|GetSaveDataMigrationPolicyInfoAsync]]
 +
|-
 +
| 1010 || [7.0.0+] TryGetLastSaveDataMigrationInfo
 
|-
 
|-
| 100 || CreateServer
+
| 1100 || [7.0.0+] [[#CreateSaveDataMigrationServer|CreateSaveDataMigrationServer]]
 
|-
 
|-
| 101 || ResumeServer
+
| 1101 || [7.0.0+] [[#ResumeSaveDataMigrationServer|ResumeSaveDataMigrationServer]]
 
|-
 
|-
| 200 || CreateClient
+
| 1110 || [17.0.0+]
 
|-
 
|-
| 201 || ResumeClient
+
| 1200 || [7.0.0+] [[#CreateSaveDataMigrationClient|CreateSaveDataMigrationClient]]
 
|-
 
|-
 +
| 1201 || [7.0.0+] [[#ResumeSaveDataMigrationClient|ResumeSaveDataMigrationClient]]
 
|}
 
|}
 +
 +
== CreateUserMigrationServer ==
 +
Takes a total of 0x18-bytes of input, a type-0x19 input buffer, a TransferMemory handle, returns an [[#IServer]].
 +
 +
== ResumeUserMigrationServer ==
 +
Takes an input u32, a TransferMemory handle, returns an [[#IServer]].
 +
 +
== CreateUserMigrationClient ==
 +
Takes an input u32, a type-0x19 input buffer, a TransferMemory handle, returns an [[#IClient]].
 +
 +
== ResumeUserMigrationClient ==
 +
Takes an input u32, a TransferMemory handle, returns an [[#IClient]].
 +
 +
== GetSaveDataMigrationPolicyInfoAsync ==
 +
Takes an [[NCM_services#ApplicationId|ApplicationId]], returns an [[#IAsyncSaveDataMigrationPolicyInfoContext]].
 +
 +
This is used by [[qlaunch]] before the actual savedata transfer is started.
 +
 +
This starts a network request for [[Network|save_data_migration_policy]].
 +
 +
== CreateSaveDataMigrationServer ==
 +
Takes a total of 0x20-bytes of input, a type-0x19 input buffer, a TransferMemory handle, returns an [[#IServer_2|IServer]].
 +
 +
== ResumeSaveDataMigrationServer ==
 +
Takes an input u32, a TransferMemory handle, returns an [[#IServer_2|IServer]].
 +
 +
== Cmd1110 ==
 +
Takes a total of 0x18-bytes of input, a type-0x19 input buffer, a type-0x5 input buffer containing an array of u64s, and a TransferMemory handle. Returns an [[#IServer_2|IServer]].
 +
 +
This is identical to [[#CreateSaveDataMigrationServer|CreateSaveDataMigrationServer]] except the u64-array is passed directly instead of from a single input u64.
 +
 +
== CreateSaveDataMigrationClient ==
 +
Takes an input u32, a type-0x19 input buffer, a TransferMemory handle, returns an [[#IClient_2|IClient]].
 +
 +
== ResumeSaveDataMigrationClient ==
 +
Takes an input u32, a TransferMemory handle, returns an [[#IClient_2|IClient]].
    
== IServer ==
 
== IServer ==
Line 48: Line 101:  
|-
 
|-
 
| 500 || Abort
 
| 500 || Abort
|-
   
|}
 
|}
   Line 97: Line 149:  
|-
 
|-
 
| 999 || DebugSynchronizeStateInFinalizationAsync
 
| 999 || DebugSynchronizeStateInFinalizationAsync
 +
|}
 +
 +
== IAsyncContext ==
 +
This is "nn::migration::detail::IAsyncContext".
 +
 +
{| class="wikitable" border="1"
 +
|-
 +
! Cmd || Name
 +
|-
 +
| 0 || GetSystemEvent
 +
|-
 +
| 1 || Cancel
 +
|-
 +
| 2 || HasDone
 
|-
 
|-
 +
| 3 || GetResult
 
|}
 
|}
   −
== IAsyncContext ==
+
== IAsyncSaveDataMigrationPolicyInfoContext ==
This is "nn::migration::user::IAsyncContext"
+
This is "nn::migration::detail::IAsyncSaveDataMigrationPolicyInfoContext".
    
{| class="wikitable" border="1"
 
{| class="wikitable" border="1"
Line 115: Line 182:  
| 3 || GetResult
 
| 3 || GetResult
 
|-
 
|-
 +
| 100 || GetSaveDataMigrationPolicyInfo
 +
|}
 +
 +
== IServer ==
 +
This is "nn::migration::savedata::IServer".
 +
 +
This was added with [7.0.0+].
 +
 +
{| class="wikitable" border="1"
 +
|-
 +
! Cmd || Name
 +
|-
 +
| 0 || GetUid
 +
|-
 +
| 1 || GetApplicationId
 +
|-
 +
| 2 || GetServerProfile
 +
|-
 +
| 3 || [17.0.0+] ListApplicationIds
 +
|-
 +
| 100 || [[#PrepareAsync|PrepareAsync]]
 +
|-
 +
| 101 || GetConnectionRequirement
 +
|-
 +
| 200 || WaitConnectionAsync
 +
|-
 +
| 201 || GetClientProfile
 +
|-
 +
| 210 || [8.0.0+] WaitAcceptanceAsync
 +
|-
 +
| 300 || ProcessTransferAsync
 +
|-
 +
| 400 || CompleteAsync
 +
|-
 +
| 500 || Abort
 +
|-
 +
| 510 || [19.0.0+]
 +
|-
 +
| 998 || [8.0.0+] DebugTryGetState
 +
|-
 +
| 999 || [8.0.0+] DebugWaitStateSynchronizationFinalizedAsync
 +
|}
 +
 +
=== PrepareAsync ===
 +
No input, returns an [[#IAsyncContext|IAsyncContext]].
 +
 +
Besides various other functionality, the async task also uses functionality similar to [[#GetSaveDataMigrationPolicyInfoAsync|GetSaveDataMigrationPolicyInfoAsync]], throwing an error if needed.
 +
 +
== IClient ==
 +
This is "nn::migration::savedata::IClient".
 +
 +
This was added with [7.0.0+].
 +
 +
{| class="wikitable" border="1"
 +
|-
 +
! Cmd || Name
 +
|-
 +
| 0 || GetClientProfile
 +
|-
 +
| 100 || GetConnectionRequirement
 +
|-
 +
| 200 || ScanServersAsync
 +
|-
 +
| 201 || ListServers
 +
|-
 +
| 210 || ConnectByServerIdAsync
 +
|-
 +
| 220 || [8.0.0+] AcceptAsync
 +
|-
 +
| 221 || [8.0.0+] DeclineAsync
 +
|-
 +
| 300 || GetStorageShortfall
 +
|-
 +
| 301 || GetTotalTransferInfo
 +
|-
 +
| 302 || GetImmigrantUid
 +
|-
 +
| 303 || GetApplicationId
 +
|-
 +
| 304 || [17.0.0+] ListApplicationIds
 +
|-
 +
| 310 || GetCurrentTransferInfo
 +
|-
 +
| 320 || TransferNextAsync
 +
|-
 +
| 350 || SuspendAsync
 +
|-
 +
| 400 || CompleteAsync
 +
|-
 +
| 500 || Abort
 +
|-
 +
| 510 || [19.0.0+]
 +
|-
 +
| 996 || [8.0.0+] DebugTryGetState
 +
|-
 +
| 997 || [8.0.0+] DebugSynchronizeStateInFinalization0Async
 +
|-
 +
| 998 || [8.0.0+] DebugSynchronizeStateInFinalization1Async
 +
|-
 +
| 999 || DebugSynchronizeStateFinalizedAsync
 
|}
 
|}
 +
 +
= Notes =
 +
Savedata transfer ("nn::migration::savedata::IServer"/"nn::migration::savedata::IClient") requires that accounts are linked to the same network-account. acc:su [[NS_services#IManagerForSystemService|IManagerForSystemService]] GetAccountId is used here. The server stores this Id into state, and also stores it in the [[LDN_services|ldn]] AdvertiseData. The client also verifies the Id in AdvertiseData against the Id from GetAccountId for the account(s) being used, during ScanServersAsync.
    
[[Category:Services]]
 
[[Category:Services]]

Navigation menu