Added AppletHookType_RequestToDisplay, AppletNotificationMessage_RequestToDisplay, and AlbumImageOrientation. Added appletSetControllerFirmwareUpdateSection, appletSetDesirableKeyboardLayout, appletSetHandlesRequestToDisplay, appletApproveToDisplay, appletOverrideAutoSleepTimeAndDimmingTime, appletSetIdleTimeDetectionExtension, appletGetIdleTimeDetectionExtension, appletSetInputDetectionSourceSet, appletReportUserIsActive, appletSetAutoSleepDisabled, appletIsAutoSleepDisabled, and appletSetWirelessPriorityMode. Improved docs.

This commit is contained in:
yellows8 2019-07-20 13:18:58 -04:00
parent c07a637e2c
commit 6942c8db75
No known key found for this signature in database
GPG Key ID: 0AF90DA3F1E60E43
3 changed files with 218 additions and 4 deletions

View File

@ -10,6 +10,7 @@
#include "../services/sm.h"
#include "../services/apm.h"
#include "../services/pdm.h"
#include "../services/caps.h"
#include "../kernel/tmem.h"
#include "../kernel/event.h"
@ -39,6 +40,7 @@ typedef enum {
AppletHookType_OnRestart, ///< ::AppletNotificationMessage_Restart
AppletHookType_OnCaptureButtonShortPressed, ///< ::AppletNotificationMessage_CaptureButtonShortPressed
AppletHookType_OnAlbumImageTaken, ///< ::AppletNotificationMessage_AlbumImageTaken
AppletHookType_RequestToDisplay, ///< ::AppletNotificationMessage_RequestToDisplay
AppletHookType_Max, ///< Number of applet hook types.
} AppletHookType;
@ -50,6 +52,7 @@ typedef enum {
AppletNotificationMessage_Restart = 0x10, ///< Current applet execution was resumed.
AppletNotificationMessage_OperationModeChanged = 0x1E, ///< OperationMode changed.
AppletNotificationMessage_PerformanceModeChanged = 0x1F, ///< PerformanceMode changed.
AppletNotificationMessage_RequestToDisplay = 0x33, ///< Display requested, see \ref appletApproveToDisplay.
AppletNotificationMessage_CaptureButtonShortPressed = 0x5A, ///< Capture button was short-pressed.
AppletNotificationMessage_AlbumImageTaken = 0x5C, ///< Screenshot was taken.
} AppletNotificationMessage;
@ -133,6 +136,19 @@ typedef enum {
AppletScreenShotPermission_Disable = 2, ///< Disable.
} AppletScreenShotPermission;
/// Extension values for \ref appletSetIdleTimeDetectionExtension / \ref appletGetIdleTimeDetectionExtension, for extending user inactivity detection.
typedef enum {
AppletIdleTimeDetectionExtension_None = 0, ///< No extension.
AppletIdleTimeDetectionExtension_Extended = 1, ///< Extended
AppletIdleTimeDetectionExtension_ExtendedUnsafe = 2, ///< ExtendedUnsafe
} AppletIdleTimeDetectionExtension;
/// Input mode values for \ref appletSetWirelessPriorityMode.
typedef enum {
AppletWirelessPriorityMode_Unknown1 = 1, ///< Unknown.
AppletWirelessPriorityMode_Unknown2 = 2, ///< Unknown.
} AppletWirelessPriorityMode;
/// applet hook function.
typedef void (*AppletHookFn)(AppletHookType hook, void* param);
@ -390,6 +406,14 @@ Result appletSetScreenShotPermission(AppletScreenShotPermission permission);
*/
Result appletSetRestartMessageEnabled(bool flag);
/**
* @brief Sets ControllerFirmwareUpdateSection.
* @note Only available with [3.0.0+].
* @note This throws error 0x40280 when the internal state flag already matches the input value.
* @param[in] flag Flag
*/
Result appletSetControllerFirmwareUpdateSection(bool flag);
/**
* @brief Sets whether ::AppletNotificationMessage_CaptureButtonShortPressed is enabled.
* @note Only available with [3.0.0+].
@ -400,12 +424,65 @@ Result appletSetRequiresCaptureButtonShortPressedMessage(bool flag);
/**
* @brief Sets the Album screenshot ImageOrientation.
* @param[in] val Input value.
* @note Only available with [3.0.0+].
* @param[in] orientation \ref AlbumImageOrientation
*/
Result appletSetAlbumImageOrientation(s32 val);
Result appletSetAlbumImageOrientation(AlbumImageOrientation orientation);
/**
* @brief Sets the DesirableKeyboardLayout.
* @note Only available with [4.0.0+].
* @param[in] layout Input layout.
*/
Result appletSetDesirableKeyboardLayout(u32 layout);
Result appletCreateManagedDisplayLayer(u64 *out);
/**
* @brief Sets whether ::AppletNotificationMessage_RequestToDisplay is enabled.
* @note Sets an internal state flag. When the input flag is 0, this will in additional run the same code as \ref appletApproveToDisplay.
* @param[in] flag Flag
*/
Result appletSetHandlesRequestToDisplay(bool flag);
/**
* @brief Approve the display requested by ::AppletNotificationMessage_RequestToDisplay, see also \ref appletSetHandlesRequestToDisplay.
*/
Result appletApproveToDisplay(void);
/**
* @brief OverrideAutoSleepTimeAndDimmingTime
* @param[in] inval0 Unknown input value.
* @param[in] inval1 Unknown input value.
* @param[in] inval2 Unknown input value.
* @param[in] inval3 Unknown input value.
*/
Result appletOverrideAutoSleepTimeAndDimmingTime(s32 inval0, s32 inval1, s32 inval2, s32 inval3);
/**
* @brief Sets the IdleTimeDetectionExtension.
* @param[in] ext \ref AppletIdleTimeDetectionExtension Must be 0-2: 0 = disabled, 1 = Extended, and 2 = ExtendedUnsafe.
*/
Result appletSetIdleTimeDetectionExtension(AppletIdleTimeDetectionExtension ext);
/**
* @brief Gets the value set by \ref appletSetIdleTimeDetectionExtension.
* @param[out] ext \ref AppletIdleTimeDetectionExtension
*/
Result appletGetIdleTimeDetectionExtension(AppletIdleTimeDetectionExtension *ext);
/**
* @brief Sets the InputDetectionSourceSet.
* @param[in] val Input value.
*/
Result appletSetInputDetectionSourceSet(u32 val);
/**
* @brief Reports that the user is active, for idle detection (screen dimming / auto-sleep). This is equivalent to when the user uses HID input.
* @note Only available with [2.0.0+].
*/
Result appletReportUserIsActive(void);
/**
* @brief Gets the current Illuminance from the light sensor.
* @note Only available with [3.0.0+].
@ -420,6 +497,20 @@ Result appletGetCurrentIlluminance(float *fLux);
*/
Result appletIsIlluminanceAvailable(bool *out);
/**
* @brief Sets AutoSleepDisabled.
* @note Only available with [5.0.0+].
* @param[in] flag Flag
*/
Result appletSetAutoSleepDisabled(bool flag);
/**
* @brief Gets AutoSleepDisabled.
* @note Only available with [5.0.0+].
* @param[out] out Output flag
*/
Result appletIsAutoSleepDisabled(bool *out);
/**
* @brief Gets the current Illuminance from the light sensor. Same as \ref appletGetCurrentIlluminance except for the additional param.
* @note Only available with [5.0.0+].
@ -428,6 +519,13 @@ Result appletIsIlluminanceAvailable(bool *out);
*/
Result appletGetCurrentIlluminanceEx(bool *bOverLimit, float *fLux);
/**
* @brief Sets the WirelessPriorityMode.
* @note Only available with [4.0.0+].
* @param[in] mode \ref AppletWirelessPriorityMode
*/
Result appletSetWirelessPriorityMode(AppletWirelessPriorityMode mode);
/**
* @brief Sets whether ::AppletNotificationMessage_AlbumImageTaken is enabled.
* @note Only available with [7.0.0+].

View File

@ -23,3 +23,11 @@ typedef struct {
u8 unk_x0[0x20];
} CapsApplicationAlbumEntry;
/// ImageOrientation
typedef enum {
AlbumImageOrientation_Unknown0 = 0, ///< Unknown.
AlbumImageOrientation_Unknown1 = 1, ///< Unknown.
AlbumImageOrientation_Unknown2 = 2, ///< Unknown.
AlbumImageOrientation_Unknown3 = 3, ///< Unknown.
} AlbumImageOrientation;

View File

@ -8,6 +8,7 @@
#include "services/fatal.h"
#include "services/applet.h"
#include "services/apm.h"
#include "services/caps.h"
#include "services/sm.h"
#include "runtime/env.h"
#include "runtime/hosversion.h"
@ -2163,6 +2164,13 @@ static Result _appletSetOutOfFocusSuspendingEnabled(bool flag) {
return _appletCmdInBool(&g_appletISelfController, flag, 16);
}
Result appletSetControllerFirmwareUpdateSection(bool flag) {
if (hosversionBefore(3,0,0))
return MAKERESULT(Module_Libnx, LibnxError_IncompatSysVer);
return _appletCmdInBool(&g_appletISelfController, flag, 17);
}
Result appletSetRequiresCaptureButtonShortPressedMessage(bool flag) {
if (hosversionBefore(3,0,0))
return MAKERESULT(Module_Libnx, LibnxError_IncompatSysVer);
@ -2170,16 +2178,91 @@ Result appletSetRequiresCaptureButtonShortPressedMessage(bool flag) {
return _appletCmdInBool(&g_appletISelfController, flag, 18);
}
Result appletSetAlbumImageOrientation(s32 val) {
Result appletSetAlbumImageOrientation(AlbumImageOrientation orientation) {
if (hosversionBefore(3,0,0))
return MAKERESULT(Module_Libnx, LibnxError_IncompatSysVer);
return _appletCmdInU32(&g_appletISelfController, val, 19);
return _appletCmdInU32(&g_appletISelfController, orientation, 19);
}
Result appletSetDesirableKeyboardLayout(u32 layout) {
if (hosversionBefore(4,0,0))
return MAKERESULT(Module_Libnx, LibnxError_IncompatSysVer);
return _appletCmdInU32(&g_appletISelfController, layout, 20);
}
Result appletCreateManagedDisplayLayer(u64 *out) {
return _appletCmdNoInOut64(&g_appletISelfController, out, 40);
}
Result appletSetHandlesRequestToDisplay(bool flag) {
return _appletCmdInBool(&g_appletISelfController, flag, 50);
}
Result appletApproveToDisplay(void) {
return _appletCmdNoIO(&g_appletISelfController, 51);
}
Result appletOverrideAutoSleepTimeAndDimmingTime(s32 inval0, s32 inval1, s32 inval2, s32 inval3) {
IpcCommand c;
ipcInitialize(&c);
struct {
u64 magic;
u64 cmd_id;
s32 inval0;
s32 inval1;
s32 inval2;
s32 inval3;
} *raw;
raw = serviceIpcPrepareHeader(&g_appletISelfController, &c, sizeof(*raw));
raw->magic = SFCI_MAGIC;
raw->cmd_id = 60;
raw->inval0 = inval0;
raw->inval1 = inval1;
raw->inval2 = inval2;
raw->inval3 = inval3;
Result rc = serviceIpcDispatch(&g_appletISelfController);
if (R_SUCCEEDED(rc)) {
IpcParsedCommand r;
struct {
u64 magic;
u64 result;
} *resp;
serviceIpcParse(&g_appletISelfController, &r, sizeof(*resp));
resp = r.Raw;
rc = resp->result;
}
return rc;
}
Result appletSetIdleTimeDetectionExtension(AppletIdleTimeDetectionExtension ext) {
return _appletCmdInU32(&g_appletISelfController, ext, 62);
}
Result appletGetIdleTimeDetectionExtension(AppletIdleTimeDetectionExtension *ext) {
return _appletCmdNoInOut32(&g_appletISelfController, ext, 63);
}
Result appletSetInputDetectionSourceSet(u32 val) {
return _appletCmdInU32(&g_appletISelfController, val, 64);
}
Result appletReportUserIsActive(void) {
if (hosversionBefore(2,0,0))
return MAKERESULT(Module_Libnx, LibnxError_IncompatSysVer);
return _appletCmdNoIO(&g_appletISelfController, 65);
}
Result appletGetCurrentIlluminance(float *fLux) {
if (hosversionBefore(3,0,0))
return MAKERESULT(Module_Libnx, LibnxError_IncompatSysVer);
@ -2225,6 +2308,20 @@ Result appletIsIlluminanceAvailable(bool *out) {
return _appletCmdNoInOutBool(&g_appletISelfController, out, 67);
}
Result appletSetAutoSleepDisabled(bool flag) {
if (hosversionBefore(5,0,0))
return MAKERESULT(Module_Libnx, LibnxError_IncompatSysVer);
return _appletCmdInBool(&g_appletISelfController, flag, 68);
}
Result appletIsAutoSleepDisabled(bool *out) {
if (hosversionBefore(5,0,0))
return MAKERESULT(Module_Libnx, LibnxError_IncompatSysVer);
return _appletCmdNoInOutBool(&g_appletISelfController, out, 69);
}
Result appletGetCurrentIlluminanceEx(bool *bOverLimit, float *fLux) {
if (hosversionBefore(5,0,0))
return MAKERESULT(Module_Libnx, LibnxError_IncompatSysVer);
@ -2265,6 +2362,13 @@ Result appletGetCurrentIlluminanceEx(bool *bOverLimit, float *fLux) {
return rc;
}
Result appletSetWirelessPriorityMode(AppletWirelessPriorityMode mode) {
if (hosversionBefore(4,0,0))
return MAKERESULT(Module_Libnx, LibnxError_IncompatSysVer);
return _appletCmdInU32(&g_appletISelfController, mode, 80);
}
Result appletSetAlbumImageTakenNotificationEnabled(bool flag) {
if (hosversionBefore(7,0,0))
return MAKERESULT(Module_Libnx, LibnxError_IncompatSysVer);
@ -2871,6 +2975,10 @@ bool appletProcessMessage(u32 msg) {
appletCallHook(AppletHookType_OnPerformanceMode);
break;
case AppletNotificationMessage_RequestToDisplay:
appletCallHook(AppletHookType_RequestToDisplay);
break;
case AppletNotificationMessage_CaptureButtonShortPressed:
appletCallHook(AppletHookType_OnCaptureButtonShortPressed);
break;