OMM services: Difference between revisions
|  Yellows8 moved page OMM services to AM services | |||
| (13 intermediate revisions by 2 users not shown) | |||
| Line 1: | Line 1: | ||
| # | Operation Mode Manager (OMM) is a sysmodule responsible for arbitrating the operation changes between docked and handheld modes. | ||
| = omm = | |||
| This is "nn::omm::detail::IOperationModeManager". | |||
| Besides [[PTM_services|PTM]], this is the only service that interacts with the [[Dock]] through [[USB_services|usb:pd*]]. | |||
| {| class="wikitable" border="1" | |||
| |- | |||
| ! Cmd || Name | |||
| |- | |||
| | 0 || GetOperationMode | |||
| |- | |||
| | 1 || GetOperationModeChangeEvent | |||
| |- | |||
| | 2 || EnableAudioVisual | |||
| |- | |||
| | 3 || DisableAudioVisual | |||
| |- | |||
| | 4 || [[#EnterSleepAndWait]] | |||
| |- | |||
| | 5 || GetCradleStatus | |||
| |- | |||
| | 6 || FadeInDisplay | |||
| |- | |||
| | 7 || FadeOutDisplay | |||
| |- | |||
| | 8 || [2.0.0+] GetCradleFwVersion | |||
| |- | |||
| | 9 || [2.0.0+] NotifyCecSettingsChanged | |||
| |- | |||
| | 10 || [3.0.0+] SetOperationModePolicy | |||
| |- | |||
| | 11 || [3.0.0+] GetDefaultDisplayResolution | |||
| |- | |||
| | 12 || [3.0.0+] GetDefaultDisplayResolutionChangeEvent | |||
| |- | |||
| | 13 || [3.0.0+] UpdateDefaultDisplayResolution | |||
| |- | |||
| | 14 || [3.0.0+] ShouldSleepOnBoot | |||
| |- | |||
| | 15 || [4.0.0+] NotifyHdcpApplicationExecutionStarted | |||
| |- | |||
| | 16 || [4.0.0+] NotifyHdcpApplicationExecutionFinished | |||
| |- | |||
| | 17 || [4.0.0+] NotifyHdcpApplicationDrawingStarted | |||
| |- | |||
| | 18 || [4.0.0+] NotifyHdcpApplicationDrawingFinished | |||
| |- | |||
| | 19 || [4.0.0+] GetHdcpAuthenticationFailedEvent | |||
| |- | |||
| | 20 || [4.0.0+] GetHdcpAuthenticationFailedEmulationEnabled | |||
| |- | |||
| | 21 || [4.0.0+] SetHdcpAuthenticationFailedEmulation | |||
| |- | |||
| | 22 || [4.0.0+] GetHdcpStateChangeEvent | |||
| |- | |||
| | 23 || [4.0.0+] GetHdcpState | |||
| |- | |||
| | 24 || [5.0.0+] ShowCardUpdateProcessing | |||
| |- | |||
| | 25 || [5.0.0+] SetApplicationCecSettingsAndNotifyChanged | |||
| |- | |||
| | 26 || [7.0.0+] [[#GetOperationModeSystemInfo]] | |||
| |- | |||
| | 27 || [9.0.0+] GetAppletFullAwakingSystemEvent | |||
| |- | |||
| | 28 || [12.0.0+] [[#CreateCradleFirmwareUpdater]] | |||
| |- | |||
| | 29 || [19.0.0+] GetCradleStatusChangeEvent | |||
| |- | |||
| | 40 || [20.0.0+] | |||
| |- | |||
| | 41 || [20.0.0+] | |||
| |- | |||
| | 50 || [20.1.0+] | |||
| |- | |||
| | 500 || [14.0.0+] LblSwitchBacklightOnForAm | |||
| |- | |||
| | 501 || [14.0.0+] LblSwitchBacklightOffForAm | |||
| |- | |||
| | 900 || [14.0.0+] HideStartupLogo | |||
| |} | |||
| == EnterSleepAndWait == | |||
| Takes an input Event handle, no output. | |||
| == GetOperationModeSystemInfo == | |||
| No input, returns an output u32. | |||
| This is used by [[#GetOperationModeSystemInfo|ICommonStateGetter GetOperationModeSystemInfo]]. | |||
| == CreateCradleFirmwareUpdater == | |||
| No input. Returns an [[#ICradleFirmwareUpdater]]. | |||
| == ICradleFirmwareUpdater == | |||
| This is "nn::omm::detail::ICradleFirmwareUpdater". | |||
| This was added with [12.0.0+]. | |||
| {| class="wikitable" border="1" | |||
| |- | |||
| ! Cmd || Name | |||
| |- | |||
| | 0 || Start | |||
| |- | |||
| | 1 || Finish | |||
| |- | |||
| | 2 || GetUpdateDeviceStatus | |||
| |- | |||
| | 3 || GetUpdateProgress | |||
| |- | |||
| | 4 || GetUpdateDeviceStatusChangeEvent | |||
| |- | |||
| | 5 || GetUpdateProgress2 | |||
| |} | |||
| = ommdisp = | |||
| This is "nn::omm::srv::IDisplayLayerControl". | |||
| This was added with [14.0.0+]. | |||
| {| class="wikitable" border="1" | |||
| |- | |||
| ! Cmd || Name | |||
| |- | |||
| | 100 || | |||
| |- | |||
| | 101 || | |||
| |- | |||
| | 110 || | |||
| |- | |||
| | 111 || | |||
| |- | |||
| | 200 || | |||
| |- | |||
| | 210 || | |||
| |- | |||
| | 300 || | |||
| |- | |||
| | 301 || | |||
| |- | |||
| | 302 || | |||
| |- | |||
| | 303 || | |||
| |- | |||
| | 304 || | |||
| |- | |||
| | 305 || | |||
| |- | |||
| | 306 || | |||
| |- | |||
| | 307 || | |||
| |- | |||
| | 308 || | |||
| |- | |||
| | 309 || | |||
| |- | |||
| | 310 || | |||
| |- | |||
| | 311 || | |||
| |- | |||
| | 312 || | |||
| |- | |||
| | 313 || | |||
| |- | |||
| | 314 || | |||
| |- | |||
| | 315 || | |||
| |- | |||
| | 316 || | |||
| |- | |||
| | 330 || | |||
| |- | |||
| | 340 || | |||
| |- | |||
| | 341 || | |||
| |- | |||
| | 342 || | |||
| |- | |||
| | 343 || | |||
| |- | |||
| | 344 || | |||
| |- | |||
| | 345 || | |||
| |- | |||
| | 346 || | |||
| |- | |||
| | 350 || | |||
| |- | |||
| | 351 || | |||
| |- | |||
| | 360 || | |||
| |- | |||
| | 361 || | |||
| |- | |||
| | 370 || | |||
| |- | |||
| | 371 || | |||
| |- | |||
| | 400 || | |||
| |- | |||
| | 410 || | |||
| |- | |||
| | 500 || [[#InitializeApplicationCopyrightSharedBuffer]] | |||
| |- | |||
| | 501 || FinalizeApplicationCopyrightSharedBuffer | |||
| |- | |||
| | 510 || | |||
| |- | |||
| | 520 || | |||
| |- | |||
| | 540 || | |||
| |- | |||
| | 600 || [14.0.0-16.1.0] | |||
| |- | |||
| | 610 || [17.0.0+] | |||
| |- | |||
| | 611 || [17.0.0+] | |||
| |- | |||
| | 612 || [17.0.0+] | |||
| |- | |||
| | 700 || | |||
| |- | |||
| | 701 || | |||
| |- | |||
| | 710 || | |||
| |- | |||
| | 711 || | |||
| |- | |||
| | 720 || CopyImageFromCaptureBuffer | |||
| |- | |||
| | 721 || | |||
| |- | |||
| | 722 || | |||
| |- | |||
| | 800 || | |||
| |- | |||
| | 810 || | |||
| |- | |||
| | 900 || [17.0.0+] | |||
| |} | |||
| == InitializeApplicationCopyrightSharedBuffer == | |||
| Takes a total of 0x10-bytes of input and a handle, no output. | |||
| This is used by [[Applet_Manager_services#InitializeApplicationCopyrightFrameBuffer|InitializeApplicationCopyrightFrameBuffer]]. | |||
| == Cmd610 == | |||
| Takes a type-0x15 input buffer containing a 0x4C8-byte struct. No output. | |||
| [19.0.0+] The struct size is now 0x4D0-bytes. | |||
| == Cmd611 == | |||
| Takes a type-0x15 input buffer containing a 0x4C8-byte struct. No output. | |||
| [19.0.0+] The struct size is now 0x4D0-bytes. | |||
| == Cmd612 == | |||
| Takes a type-0x15 input buffer containing a 0x4C8-byte struct. No output. | |||
| [19.0.0+] The struct size is now 0x4D0-bytes. | |||
| = idle:sys = | |||
| This is "nn::idle::detail::IPolicyManagerSystem" | |||
| {| class="wikitable" border="1" | |||
| |- | |||
| ! Cmd || Name | |||
| |- | |||
| | 0 || GetAutoPowerDownEvent | |||
| |- | |||
| | 1 || [7.0.0+] IsAutoPowerDownRequested ([1.0.0-3.0.2]) | |||
| |- | |||
| | 2 || [1.0.0-3.0.2] | |||
| |- | |||
| | 3 || [[#SetHandlingContext]] | |||
| |- | |||
| | 4 || LoadAndApplySettings | |||
| |- | |||
| | 5 || ReportUserIsActive | |||
| |} | |||
| == SetHandlingContext == | |||
| [3.0.0+] Now takes an additional 0x10-bytes of input. | |||
| [13.0.0+] Total input size is now 0x30 instead of 0x38. | |||
| = spsm = | |||
| This is "nn::spsm::detail::IPowerStateInterface". | |||
| {| class="wikitable" border="1" | |||
| |- | |||
| ! Cmd || Name | |||
| |- | |||
| | 0 || GetCurrentState | |||
| |- | |||
| | 1 || EnterSleep | |||
| |- | |||
| | 2 || GetLastWakeReason | |||
| |- | |||
| | 3 || Shutdown | |||
| |- | |||
| | 4 || GetNotificationMessageEventHandle | |||
| |- | |||
| | 5 || ReceiveNotificationMessage | |||
| |- | |||
| | 6 || AnalyzeLogForLastSleepWakeSequence | |||
| |- | |||
| | 7 || ResetEventLog | |||
| |- | |||
| | 8 || AnalyzePerformanceLogForLastSleepWakeSequence | |||
| |- | |||
| | 9 || ChangeHomeButtonLongPressingTime | |||
| |- | |||
| | 10 || PutErrorState | |||
| |- | |||
| | 11 || [1.0.0-3.0.2] InvalidateCurrentHomeButtonPressing | |||
| |- | |||
| | 12 || [17.0.0+] EmulatePowerButtonPressedBriefly | |||
| |- | |||
| | 13 || [17.0.0+] EmulatePowerButtonPressedFor7Sec | |||
| |- | |||
| | 14 || [17.0.0+] SetAlwaysRebootFlag | |||
| |- | |||
| | 15 || [18.0.0+] | |||
| |- | |||
| | 16 || [18.0.0+] | |||
| |} | |||
| [3.0.0+] Cmd11 now takes a total of 8-bytes of input. | |||
| = Notes = | |||
| A [[System_Settings|system-setting]] (<code>"systemstartup!skip_psc_wait"</code>) and the output from [[Process_Manager_services|pm:bm]] GetBootMode is used to determine a value passed to a func. When the setting is set to non-zero, the passed value is 2, otherwise the passed value is <code>BootMode == Maintenance</code>. This value is eventually written into global state. | |||
| The funcs which create threads "nn.notification.PresenterStateManagement" and "nn.notification.PresenterMain" will only create the threads when [[Process_Manager_services|pm:bm]] GetBootMode output is Normal, otherwise these funcs just return. | |||
| [[BCAT_services|prepro]] SetOperationMode is only used when [[Process_Manager_services|pm:bm]] GetBootMode output is not Maintenance. | |||
Latest revision as of 05:01, 28 May 2025
Operation Mode Manager (OMM) is a sysmodule responsible for arbitrating the operation changes between docked and handheld modes.
omm
This is "nn::omm::detail::IOperationModeManager".
Besides PTM, this is the only service that interacts with the Dock through usb:pd*.
| Cmd | Name | 
|---|---|
| 0 | GetOperationMode | 
| 1 | GetOperationModeChangeEvent | 
| 2 | EnableAudioVisual | 
| 3 | DisableAudioVisual | 
| 4 | #EnterSleepAndWait | 
| 5 | GetCradleStatus | 
| 6 | FadeInDisplay | 
| 7 | FadeOutDisplay | 
| 8 | [2.0.0+] GetCradleFwVersion | 
| 9 | [2.0.0+] NotifyCecSettingsChanged | 
| 10 | [3.0.0+] SetOperationModePolicy | 
| 11 | [3.0.0+] GetDefaultDisplayResolution | 
| 12 | [3.0.0+] GetDefaultDisplayResolutionChangeEvent | 
| 13 | [3.0.0+] UpdateDefaultDisplayResolution | 
| 14 | [3.0.0+] ShouldSleepOnBoot | 
| 15 | [4.0.0+] NotifyHdcpApplicationExecutionStarted | 
| 16 | [4.0.0+] NotifyHdcpApplicationExecutionFinished | 
| 17 | [4.0.0+] NotifyHdcpApplicationDrawingStarted | 
| 18 | [4.0.0+] NotifyHdcpApplicationDrawingFinished | 
| 19 | [4.0.0+] GetHdcpAuthenticationFailedEvent | 
| 20 | [4.0.0+] GetHdcpAuthenticationFailedEmulationEnabled | 
| 21 | [4.0.0+] SetHdcpAuthenticationFailedEmulation | 
| 22 | [4.0.0+] GetHdcpStateChangeEvent | 
| 23 | [4.0.0+] GetHdcpState | 
| 24 | [5.0.0+] ShowCardUpdateProcessing | 
| 25 | [5.0.0+] SetApplicationCecSettingsAndNotifyChanged | 
| 26 | [7.0.0+] #GetOperationModeSystemInfo | 
| 27 | [9.0.0+] GetAppletFullAwakingSystemEvent | 
| 28 | [12.0.0+] #CreateCradleFirmwareUpdater | 
| 29 | [19.0.0+] GetCradleStatusChangeEvent | 
| 40 | [20.0.0+] | 
| 41 | [20.0.0+] | 
| 50 | [20.1.0+] | 
| 500 | [14.0.0+] LblSwitchBacklightOnForAm | 
| 501 | [14.0.0+] LblSwitchBacklightOffForAm | 
| 900 | [14.0.0+] HideStartupLogo | 
EnterSleepAndWait
Takes an input Event handle, no output.
GetOperationModeSystemInfo
No input, returns an output u32.
This is used by ICommonStateGetter GetOperationModeSystemInfo.
CreateCradleFirmwareUpdater
No input. Returns an #ICradleFirmwareUpdater.
ICradleFirmwareUpdater
This is "nn::omm::detail::ICradleFirmwareUpdater".
This was added with [12.0.0+].
| Cmd | Name | 
|---|---|
| 0 | Start | 
| 1 | Finish | 
| 2 | GetUpdateDeviceStatus | 
| 3 | GetUpdateProgress | 
| 4 | GetUpdateDeviceStatusChangeEvent | 
| 5 | GetUpdateProgress2 | 
ommdisp
This is "nn::omm::srv::IDisplayLayerControl".
This was added with [14.0.0+].
| Cmd | Name | 
|---|---|
| 100 | |
| 101 | |
| 110 | |
| 111 | |
| 200 | |
| 210 | |
| 300 | |
| 301 | |
| 302 | |
| 303 | |
| 304 | |
| 305 | |
| 306 | |
| 307 | |
| 308 | |
| 309 | |
| 310 | |
| 311 | |
| 312 | |
| 313 | |
| 314 | |
| 315 | |
| 316 | |
| 330 | |
| 340 | |
| 341 | |
| 342 | |
| 343 | |
| 344 | |
| 345 | |
| 346 | |
| 350 | |
| 351 | |
| 360 | |
| 361 | |
| 370 | |
| 371 | |
| 400 | |
| 410 | |
| 500 | #InitializeApplicationCopyrightSharedBuffer | 
| 501 | FinalizeApplicationCopyrightSharedBuffer | 
| 510 | |
| 520 | |
| 540 | |
| 600 | [14.0.0-16.1.0] | 
| 610 | [17.0.0+] | 
| 611 | [17.0.0+] | 
| 612 | [17.0.0+] | 
| 700 | |
| 701 | |
| 710 | |
| 711 | |
| 720 | CopyImageFromCaptureBuffer | 
| 721 | |
| 722 | |
| 800 | |
| 810 | |
| 900 | [17.0.0+] | 
Takes a total of 0x10-bytes of input and a handle, no output.
This is used by InitializeApplicationCopyrightFrameBuffer.
Cmd610
Takes a type-0x15 input buffer containing a 0x4C8-byte struct. No output.
[19.0.0+] The struct size is now 0x4D0-bytes.
Cmd611
Takes a type-0x15 input buffer containing a 0x4C8-byte struct. No output.
[19.0.0+] The struct size is now 0x4D0-bytes.
Cmd612
Takes a type-0x15 input buffer containing a 0x4C8-byte struct. No output.
[19.0.0+] The struct size is now 0x4D0-bytes.
idle:sys
This is "nn::idle::detail::IPolicyManagerSystem"
| Cmd | Name | 
|---|---|
| 0 | GetAutoPowerDownEvent | 
| 1 | [7.0.0+] IsAutoPowerDownRequested ([1.0.0-3.0.2]) | 
| 2 | [1.0.0-3.0.2] | 
| 3 | #SetHandlingContext | 
| 4 | LoadAndApplySettings | 
| 5 | ReportUserIsActive | 
SetHandlingContext
[3.0.0+] Now takes an additional 0x10-bytes of input.
[13.0.0+] Total input size is now 0x30 instead of 0x38.
spsm
This is "nn::spsm::detail::IPowerStateInterface".
| Cmd | Name | 
|---|---|
| 0 | GetCurrentState | 
| 1 | EnterSleep | 
| 2 | GetLastWakeReason | 
| 3 | Shutdown | 
| 4 | GetNotificationMessageEventHandle | 
| 5 | ReceiveNotificationMessage | 
| 6 | AnalyzeLogForLastSleepWakeSequence | 
| 7 | ResetEventLog | 
| 8 | AnalyzePerformanceLogForLastSleepWakeSequence | 
| 9 | ChangeHomeButtonLongPressingTime | 
| 10 | PutErrorState | 
| 11 | [1.0.0-3.0.2] InvalidateCurrentHomeButtonPressing | 
| 12 | [17.0.0+] EmulatePowerButtonPressedBriefly | 
| 13 | [17.0.0+] EmulatePowerButtonPressedFor7Sec | 
| 14 | [17.0.0+] SetAlwaysRebootFlag | 
| 15 | [18.0.0+] | 
| 16 | [18.0.0+] | 
[3.0.0+] Cmd11 now takes a total of 8-bytes of input.
Notes
A system-setting ("systemstartup!skip_psc_wait") and the output from pm:bm GetBootMode is used to determine a value passed to a func. When the setting is set to non-zero, the passed value is 2, otherwise the passed value is BootMode == Maintenance. This value is eventually written into global state.
The funcs which create threads "nn.notification.PresenterStateManagement" and "nn.notification.PresenterMain" will only create the threads when pm:bm GetBootMode output is Normal, otherwise these funcs just return.
prepro SetOperationMode is only used when pm:bm GetBootMode output is not Maintenance.