OMM services

Revision as of 22:21, 12 October 2023 by Hexkyz (talk | contribs)

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
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
501
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
721
722
800
810
900 [17.0.0+]

Cmd500

Takes a total of 0x10-bytes of input and a handle, no output.

This is used by InitializeApplicationCopyrightFrameBuffer.

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+]
13 [17.0.0+]
14 [17.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.