1#include "Library/Application/ApplicationMessageReceiver.h"
2
3#include <nn/am.h>
4
5namespace al {
6ApplicationMessageReceiver::ApplicationMessageReceiver() {}
7
8nn::oe::OperationMode ApplicationMessageReceiver::getOperationMode() const {
9 nn::oe::OperationMode operationMode = nn::oe::GetOperationMode();
10
11 switch (operationMode) {
12 case nn::oe::OperationMode_Handheld:
13 return nn::oe::OperationMode_Handheld;
14 case nn::oe::OperationMode_Docked:
15 return nn::oe::OperationMode_Docked;
16 default:
17 return nn::oe::OperationMode_Handheld;
18 }
19}
20
21nn::oe::PerformanceMode ApplicationMessageReceiver::getPerformaceMode() const {
22 nn::oe::PerformanceMode performanceMode = nn::oe::GetPerformanceMode();
23
24 switch (performanceMode) {
25 case nn::oe::PerformanceMode_Normal:
26 return nn::oe::PerformanceMode_Normal;
27 case nn::oe::PerformanceMode_Boost:
28 return nn::oe::PerformanceMode_Boost;
29 default:
30 return nn::oe::PerformanceMode_Normal;
31 }
32}
33
34void ApplicationMessageReceiver::init() {
35 nn::oe::Initialize();
36
37 mOperationMode = getOperationMode();
38 mPerformanceMode = getPerformaceMode();
39
40 nn::oe::SetResumeNotificationEnabled(true);
41 nn::oe::SetOperationModeChangedNotificationEnabled(true);
42 nn::oe::SetPerformanceModeChangedNotificationEnabled(true);
43 nn::oe::SetFocusHandlingMode(nn::oe::FocusHandlingMode_AlwaysSuspend);
44}
45
46void ApplicationMessageReceiver::procMessage(u32 message) {
47 switch (message) {
48 case nn::am::AppletMessage_FocusStateChanged:
49 nn::oe::GetCurrentFocusState();
50 break;
51 case nn::am::AppletMessage_OperationModeChanged:
52 mIsUpdatedOperationMode = true;
53 mOperationMode = getOperationMode();
54 break;
55 case nn::am::AppletMessage_PerformanceModeChanged:
56 mIsUpdatedPerformanceMode = true;
57 mPerformanceMode = getPerformaceMode();
58 break;
59 }
60}
61
62void ApplicationMessageReceiver::update() {
63 mIsUpdatedOperationMode = false;
64 mIsUpdatedPerformanceMode = false;
65 u32 message;
66
67 if (nn::oe::TryPopNotificationMessage(&message))
68 procMessage(message);
69}
70} // namespace al
71