Changes

no edit summary
Line 456: Line 456:  
|-
 
|-
 
| 18 || [17.0.0+] ReleaseAudioOutputDeviceNotification
 
| 18 || [17.0.0+] ReleaseAudioOutputDeviceNotification
 +
|-
 +
| 19 || [18.0.0+] SetAudioDeviceOutputVolumeAutoTuneEnabled
 +
|-
 +
| 20 || [18.0.0+] IsAudioDeviceOutputVolumeAutoTuneEnabled
 
|}
 
|}
   Line 607: Line 611:  
| 5 || SetTargetMute
 
| 5 || SetTargetMute
 
|-
 
|-
| 6 || IsTargetConnected
+
| 6 || [1.0.0-17.0.1] IsTargetConnected
 
|-
 
|-
 
| 7 || SetDefaultTarget
 
| 7 || SetDefaultTarget
Line 711: Line 715:  
== UpdateHeadphoneSettings ==
 
== UpdateHeadphoneSettings ==
 
Takes one input bool. No output.
 
Takes one input bool. No output.
NS calls this with the result of IParentalControlService::IsRestrictionEnabled[https://switchbrew.org/wiki/Parental_Control_services#IParentalControlService].
+
NS calls this with the result of [[Parental_Control_services#IParentalControlService|IParentalControlService::IsRestrictionEnabled]].
    
== GetSystemInformationForDebug ==
 
== GetSystemInformationForDebug ==
Line 717: Line 721:     
[15.0.0+] Now takes a type-0x16 output buffer.
 
[15.0.0+] Now takes a type-0x16 output buffer.
 +
 +
[18.0.0+] Originally the output buffer was a binary structure, now it's just a string.
    
= codecctl =
 
= codecctl =
Line 971: Line 977:  
|-
 
|-
 
| 9 || SetAudioOutputProcessRecordVolume
 
| 9 || SetAudioOutputProcessRecordVolume
 +
|-
 +
| 10 || [18.0.0+] GetAppletStateSummaries
 
|}
 
|}
   Line 1,412: Line 1,420:  
| u8 array of channel mappings
 
| u8 array of channel mappings
 
|}
 
|}
 +
 +
= Notes =
 +
Once nnMain finishes running, it calls a func which handles ADSP Aborts. This waits on an event, calls a func, then Aborts with Result 0xC0899.
 +
 +
That func just calls another func, which:
 +
* Calls various AGIC funcs for this IRQ, etc.
 +
* Copies data from devicemem+0x608C (the 0x7000-byte devicemem "shared memory segment") to a stack struct.
 +
* A funcptr is called if set with the above struct, then this returns.
 +
 +
That funcptr, besides other func-calls, will log an [[Error_Report_services|erpt]] using the input struct when set with the "AdspException*" fields.
 +
 +
This is triggered by AGIC IRQ adsp_wdresetreq, "ADSP Watchdog Timer Reset Request". The ADSP updates the watchdog from a thread, so normally the watchdog only expires when the ADSP configures it to trigger immediately.
 +
 +
When handling an assert/exception, the ADSP:
 +
* Logs exception info in text form into devicemem.
 +
* Logs the binary form of the exception into devicemem (offset above).
 +
* Eventually configures the watchdog to trigger immediately, prints "HALT: spinning forever...\n", then enters a loop using instruction "wfe".
    
[[Category:Services]]
 
[[Category:Services]]