set: Replaced SetSysFlag/setsysGetFlag/setsysSetFlag with dedicated funcs for each flag, which also handles checking sysver now when needed. Fixed cmd order. Improved docs.

This commit is contained in:
yellows8 2019-10-14 14:31:22 -04:00
parent a489a123c2
commit a14cd3a70c
No known key found for this signature in database
GPG Key ID: 0AF90DA3F1E60E43
2 changed files with 449 additions and 70 deletions

View File

@ -53,27 +53,6 @@ typedef enum {
SetRegion_TWN = 6, ///< Taiwan SetRegion_TWN = 6, ///< Taiwan
} SetRegion; } SetRegion;
/// Command IDs for setsysGetFlag/setsysSetFlag.
typedef enum {
SetSysFlag_LockScreen = 7,
SetSysFlag_ConsoleInformationUpload = 25,
SetSysFlag_AutomaticApplicationDownload = 27,
SetSysFlag_Quest = 47,
SetSysFlag_Usb30Enable = 65,
SetSysFlag_NfcEnable = 69,
SetSysFlag_WirelessLanEnable = 73,
SetSysFlag_BluetoothEnable = 88,
SetSysFlag_AutoUpdateEnable = 95, ///< [2.0.0+]
SetSysFlag_BatteryPercentage = 99, ///< [2.0.0+]
SetSysFlag_ExternalRtcReset = 101, ///< [2.0.0+]
SetSysFlag_UsbFullKeyEnable = 103, ///< [3.0.0+]
SetSysFlag_BluetoothAfhEnable = 111, ///< [3.0.0+]
SetSysFlag_BluetoothBoostEnable = 113, ///< [3.0.0+]
SetSysFlag_InRepairProcessEnable = 115, ///< [3.0.0+]
SetSysFlag_HeadphoneVolumeUpdate = 117, ///< [3.0.0+]
SetSysFlag_RequiresRunRepairTimeReviser = 141, ///< [5.0.0+]
} SetSysFlag;
/// Structure returned by \ref setsysGetFirmwareVersion /// Structure returned by \ref setsysGetFirmwareVersion
typedef struct { typedef struct {
u8 major; u8 major;
@ -90,8 +69,13 @@ typedef struct {
char display_title[0x80]; char display_title[0x80];
} SetSysFirmwareVersion; } SetSysFirmwareVersion;
/// Initialize set.
Result setInitialize(void); Result setInitialize(void);
/// Exit set.
void setExit(void); void setExit(void);
/// Gets the Service object for the actual set service session.
Service* setGetServiceSession(void); Service* setGetServiceSession(void);
/// Converts LanguageCode to \ref SetLanguage. /// Converts LanguageCode to \ref SetLanguage.
@ -119,16 +103,63 @@ Result setGetAvailableLanguageCodeCount(s32 *total);
/// Gets the RegionCode. /// Gets the RegionCode.
Result setGetRegionCode(SetRegion *out); Result setGetRegionCode(SetRegion *out);
/// Initialize setsys.
Result setsysInitialize(void); Result setsysInitialize(void);
/// Exit setsys.
void setsysExit(void); void setsysExit(void);
/// Gets the Service object for the actual setsys service session.
Service* setsysGetServiceSession(void); Service* setsysGetServiceSession(void);
/**
* @brief Gets the system firmware version.
* @param[out] out Firmware version to populate.
*/
Result setsysGetFirmwareVersion(SetSysFirmwareVersion *out);
/**
* @brief GetLockScreenFlag
* @param[out] out Output flag.
*/
Result setsysGetLockScreenFlag(bool *out);
/**
* @brief SetLockScreenFlag
* @param[in] flag Input flag.
*/
Result setsysSetLockScreenFlag(bool flag);
/// Gets the current system theme. /// Gets the current system theme.
Result setsysGetColorSetId(ColorSetId *out); Result setsysGetColorSetId(ColorSetId *out);
/// Sets the current system theme. /// Sets the current system theme.
Result setsysSetColorSetId(ColorSetId id); Result setsysSetColorSetId(ColorSetId id);
/**
* @brief GetConsoleInformationUploadFlag
* @param[out] out Output flag.
*/
Result setsysGetConsoleInformationUploadFlag(bool *out);
/**
* @brief SetConsoleInformationUploadFlag
* @param[in] flag Input flag.
*/
Result setsysSetConsoleInformationUploadFlag(bool flag);
/**
* @brief GetAutomaticApplicationDownloadFlag
* @param[out] out Output flag.
*/
Result setsysGetAutomaticApplicationDownloadFlag(bool *out);
/**
* @brief SetAutomaticApplicationDownloadFlag
* @param[in] flag Input flag.
*/
Result setsysSetAutomaticApplicationDownloadFlag(bool flag);
/** /**
* @brief Gets the size of a settings item value. * @brief Gets the size of a settings item value.
* @param name Name string. * @param name Name string.
@ -147,6 +178,30 @@ Result setsysGetSettingsItemValueSize(const char *name, const char *item_key, u6
*/ */
Result setsysGetSettingsItemValue(const char *name, const char *item_key, void *value_out, size_t value_out_size, u64 *size_out); Result setsysGetSettingsItemValue(const char *name, const char *item_key, void *value_out, size_t value_out_size, u64 *size_out);
/**
* @brief GetQuestFlag
* @param[out] out Output flag.
*/
Result setsysGetQuestFlag(bool *out);
/**
* @brief SetQuestFlag
* @param[in] flag Input flag.
*/
Result setsysSetQuestFlag(bool flag);
/**
* @brief GetUsb30EnableFlag
* @param[out] out Output flag.
*/
Result setsysGetUsb30EnableFlag(bool *out);
/**
* @brief SetUsb30EnableFlag
* @param[in] flag Input flag.
*/
Result setsysSetUsb30EnableFlag(bool flag);
/** /**
* @brief Gets the system's serial number. * @brief Gets the system's serial number.
* @param serial Pointer to output the serial to. (The buffer size needs to be at least 0x19 bytes) * @param serial Pointer to output the serial to. (The buffer size needs to be at least 0x19 bytes)
@ -154,24 +209,52 @@ Result setsysGetSettingsItemValue(const char *name, const char *item_key, void *
Result setsysGetSerialNumber(char *serial); Result setsysGetSerialNumber(char *serial);
/** /**
* @brief Gets the status of the specified settings flag. * @brief GetNfcEnableFlag
* @param flag The specified settings flag. * @param[out] out Output flag.
* @param out Output pointer for the status.
*/ */
Result setsysGetFlag(SetSysFlag flag, bool *out); Result setsysGetNfcEnableFlag(bool *out);
/** /**
* @brief Enables/disables the specified settings flag. * @brief SetNfcEnableFlag
* @param flag The specified settings flag. * @param[in] flag Input flag.
* @param enable To enable/disable the flag.
*/ */
Result setsysSetFlag(SetSysFlag flag, bool enable); Result setsysSetNfcEnableFlag(bool flag);
/** /**
* @brief Gets the system firmware version. * @brief GetWirelessLanEnableFlag
* @param out Firmware version to populate. * @param[out] out Output flag.
*/ */
Result setsysGetFirmwareVersion(SetSysFirmwareVersion *out); Result setsysGetWirelessLanEnableFlag(bool *out);
/**
* @brief SetWirelessLanEnableFlag
* @param[in] flag Input flag.
*/
Result setsysSetWirelessLanEnableFlag(bool flag);
/**
* @brief Gets the system's nickname.
* @param nickname Pointer to output the nickname to. (The buffer size needs to be at least 0x80 bytes)
*/
Result setsysGetDeviceNickname(char* nickname);
/**
* @brief Sets the system's nickname.
* @param nickname Pointer to read the nickname from.
*/
Result setsysSetDeviceNickname(const char* nickname);
/**
* @brief GetBluetoothEnableFlag
* @param[out] out Output flag.
*/
Result setsysGetBluetoothEnableFlag(bool *out);
/**
* @brief SetBluetoothEnableFlag
* @param[in] flag Input flag.
*/
Result setsysSetBluetoothEnableFlag(bool flag);
/** /**
* @brief Gets an event that settings will signal on flag change. * @brief Gets an event that settings will signal on flag change.
@ -187,13 +270,127 @@ Result setsysBindFatalDirtyFlagEvent(Event *out_event);
Result setsysGetFatalDirtyFlags(u64 *flags_0, u64 *flags_1); Result setsysGetFatalDirtyFlags(u64 *flags_0, u64 *flags_1);
/** /**
* @brief Gets the system's nickname. * @brief GetAutoUpdateEnableFlag
* @param nickname Pointer to output the nickname to. (The buffer size needs to be at least 0x80 bytes) * @note Only available on [2.0.0+].
* @param[out] out Output flag.
*/ */
Result setsysGetDeviceNickname(char* nickname); Result setsysGetAutoUpdateEnableFlag(bool *out);
/** /**
* @brief Sets the system's nickname. * @brief SetAutoUpdateEnableFlag
* @param nickname Pointer to read the nickname from. * @note Only available on [2.0.0+].
* @param[in] flag Input flag.
*/ */
Result setsysSetDeviceNickname(const char* nickname); Result setsysSetAutoUpdateEnableFlag(bool flag);
/**
* @brief GetBatteryPercentageFlag
* @note Only available on [2.0.0+].
* @param[out] out Output flag.
*/
Result setsysGetBatteryPercentageFlag(bool *out);
/**
* @brief SetBatteryPercentageFlag
* @note Only available on [2.0.0+].
* @param[in] flag Input flag.
*/
Result setsysSetBatteryPercentageFlag(bool flag);
/**
* @brief GetExternalRtcResetFlag
* @note Only available on [2.0.0+].
* @param[out] out Output flag.
*/
Result setsysGetExternalRtcResetFlag(bool *out);
/**
* @brief SetExternalRtcResetFlag
* @note Only available on [2.0.0+].
* @param[in] flag Input flag.
*/
Result setsysSetExternalRtcResetFlag(bool flag);
/**
* @brief GetUsbFullKeyEnableFlag
* @note Only available on [3.0.0+].
* @param[out] out Output flag.
*/
Result setsysGetUsbFullKeyEnableFlag(bool *out);
/**
* @brief SetUsbFullKeyEnableFlag
* @note Only available on [3.0.0+].
* @param[in] flag Input flag.
*/
Result setsysSetUsbFullKeyEnableFlag(bool flag);
/**
* @brief GetBluetoothAfhEnableFlag
* @note Only available on [3.0.0+].
* @param[out] out Output flag.
*/
Result setsysGetBluetoothAfhEnableFlag(bool *out);
/**
* @brief SetBluetoothAfhEnableFlag
* @note Only available on [3.0.0+].
* @param[in] flag Input flag.
*/
Result setsysSetBluetoothAfhEnableFlag(bool flag);
/**
* @brief GetBluetoothBoostEnableFlag
* @note Only available on [3.0.0+].
* @param[out] out Output flag.
*/
Result setsysGetBluetoothBoostEnableFlag(bool *out);
/**
* @brief SetBluetoothBoostEnableFlag
* @note Only available on [3.0.0+].
* @param[in] flag Input flag.
*/
Result setsysSetBluetoothBoostEnableFlag(bool flag);
/**
* @brief GetInRepairProcessEnableFlag
* @note Only available on [3.0.0+].
* @param[out] out Output flag.
*/
Result setsysGetInRepairProcessEnableFlag(bool *out);
/**
* @brief SetInRepairProcessEnableFlag
* @note Only available on [3.0.0+].
* @param[in] flag Input flag.
*/
Result setsysSetInRepairProcessEnableFlag(bool flag);
/**
* @brief GetHeadphoneVolumeUpdateFlag
* @note Only available on [3.0.0+].
* @param[out] out Output flag.
*/
Result setsysGetHeadphoneVolumeUpdateFlag(bool *out);
/**
* @brief SetHeadphoneVolumeUpdateFlag
* @note Only available on [3.0.0+].
* @param[in] flag Input flag.
*/
Result setsysSetHeadphoneVolumeUpdateFlag(bool flag);
/**
* @brief GetRequiresRunRepairTimeReviser
* @note Only available on [5.0.0+].
* @param[out] out Output flag.
*/
Result setsysGetRequiresRunRepairTimeReviser(bool *out);
/**
* @brief SetRequiresRunRepairTimeReviser
* @note Only available on [5.0.0+].
* @param[in] flag Input flag.
*/
Result setsysSetRequiresRunRepairTimeReviser(bool flag);

View File

@ -186,6 +186,30 @@ Result setGetRegionCode(SetRegion *out) {
return rc; return rc;
} }
static Result _setsysGetFirmwareVersionImpl(SetSysFirmwareVersion *out, u32 cmd_id) {
return serviceDispatch(&g_setsysSrv, cmd_id,
.buffer_attrs = { SfBufferAttr_FixedSize | SfBufferAttr_HipcPointer | SfBufferAttr_Out },
.buffers = { { out, sizeof(*out) } },
);
}
Result setsysGetFirmwareVersion(SetSysFirmwareVersion *out) {
/* GetFirmwareVersion2 does exactly what GetFirmwareVersion does, except it doesn't zero the revision field. */
if (hosversionAtLeast(3,0,0)) {
return _setsysGetFirmwareVersionImpl(out, 4);
} else {
return _setsysGetFirmwareVersionImpl(out, 3);
}
}
Result setsysGetLockScreenFlag(bool *out) {
return _setCmdNoInOutBool(&g_setsysSrv, out, 7);
}
Result setsysSetLockScreenFlag(bool flag) {
return _setCmdInBoolNoOut(&g_setsysSrv, flag, 8);
}
Result setsysGetColorSetId(ColorSetId *out) { Result setsysGetColorSetId(ColorSetId *out) {
u32 color_set=0; u32 color_set=0;
Result rc = _setCmdNoInOutU32(&g_setsysSrv, &color_set, 23); Result rc = _setCmdNoInOutU32(&g_setsysSrv, &color_set, 23);
@ -197,6 +221,22 @@ Result setsysSetColorSetId(ColorSetId id) {
return _setCmdInU32NoOut(&g_setsysSrv, id, 24); return _setCmdInU32NoOut(&g_setsysSrv, id, 24);
} }
Result setsysGetConsoleInformationUploadFlag(bool *out) {
return _setCmdNoInOutBool(&g_setsysSrv, out, 25);
}
Result setsysSetConsoleInformationUploadFlag(bool flag) {
return _setCmdInBoolNoOut(&g_setsysSrv, flag, 26);
}
Result setsysGetAutomaticApplicationDownloadFlag(bool *out) {
return _setCmdNoInOutBool(&g_setsysSrv, out, 27);
}
Result setsysSetAutomaticApplicationDownloadFlag(bool flag) {
return _setCmdInBoolNoOut(&g_setsysSrv, flag, 28);
}
Result setsysGetSettingsItemValueSize(const char *name, const char *item_key, u64 *size_out) { Result setsysGetSettingsItemValueSize(const char *name, const char *item_key, u64 *size_out) {
char send_name[SET_MAX_NAME_SIZE]; char send_name[SET_MAX_NAME_SIZE];
char send_item_key[SET_MAX_NAME_SIZE]; char send_item_key[SET_MAX_NAME_SIZE];
@ -241,6 +281,22 @@ Result setsysGetSettingsItemValue(const char *name, const char *item_key, void *
); );
} }
Result setsysGetQuestFlag(bool *out) {
return _setCmdNoInOutBool(&g_setsysSrv, out, 47);
}
Result setsysSetQuestFlag(bool flag) {
return _setCmdInBoolNoOut(&g_setsysSrv, flag, 48);
}
Result setsysGetUsb30EnableFlag(bool *out) {
return _setCmdNoInOutBool(&g_setsysSrv, out, 65);
}
Result setsysSetUsb30EnableFlag(bool flag) {
return _setCmdInBoolNoOut(&g_setsysSrv, flag, 66);
}
Result setsysGetSerialNumber(char *serial) { Result setsysGetSerialNumber(char *serial) {
char out[0x18]={0}; char out[0x18]={0};
@ -252,44 +308,20 @@ Result setsysGetSerialNumber(char *serial) {
return rc; return rc;
} }
Result setsysGetFlag(SetSysFlag flag, bool *out) { Result setsysGetNfcEnableFlag(bool *out) {
return _setCmdNoInOutBool(&g_setsysSrv, out, flag); return _setCmdNoInOutBool(&g_setsysSrv, out, 69);
} }
Result setsysSetFlag(SetSysFlag flag, bool enable) { Result setsysSetNfcEnableFlag(bool flag) {
return _setCmdInBoolNoOut(&g_setsysSrv, enable, flag + 1); return _setCmdInBoolNoOut(&g_setsysSrv, flag, 70);
} }
static Result _setsysGetFirmwareVersionImpl(SetSysFirmwareVersion *out, u32 cmd_id) { Result setsysGetWirelessLanEnableFlag(bool *out) {
return serviceDispatch(&g_setsysSrv, cmd_id, return _setCmdNoInOutBool(&g_setsysSrv, out, 73);
.buffer_attrs = { SfBufferAttr_FixedSize | SfBufferAttr_HipcPointer | SfBufferAttr_Out },
.buffers = { { out, sizeof(*out) } },
);
} }
Result setsysGetFirmwareVersion(SetSysFirmwareVersion *out) { Result setsysSetWirelessLanEnableFlag(bool flag) {
/* GetFirmwareVersion2 does exactly what GetFirmwareVersion does, except it doesn't zero the revision field. */ return _setCmdInBoolNoOut(&g_setsysSrv, flag, 74);
if (hosversionAtLeast(3,0,0)) {
return _setsysGetFirmwareVersionImpl(out, 4);
} else {
return _setsysGetFirmwareVersionImpl(out, 3);
}
}
Result setsysBindFatalDirtyFlagEvent(Event *out_event) {
return _setCmdGetEvent(&g_setsysSrv, out_event, false, 93);
}
Result setsysGetFatalDirtyFlags(u64 *flags_0, u64 *flags_1) {
struct {
u64 flags_0;
u64 flags_1;
} out;
Result rc = serviceDispatchOut(&g_setsysSrv, 94, out);
if (R_SUCCEEDED(rc) && flags_0) *flags_0 = out.flags_0;
if (R_SUCCEEDED(rc) && flags_1) *flags_1 = out.flags_1;
return rc;
} }
Result setsysGetDeviceNickname(char* nickname) { Result setsysGetDeviceNickname(char* nickname) {
@ -308,3 +340,153 @@ Result setsysSetDeviceNickname(const char* nickname) {
.buffers = { { send_nickname, SET_MAX_NICKNAME_SIZE } }, .buffers = { { send_nickname, SET_MAX_NICKNAME_SIZE } },
); );
} }
Result setsysGetBluetoothEnableFlag(bool *out) {
return _setCmdNoInOutBool(&g_setsysSrv, out, 88);
}
Result setsysSetBluetoothEnableFlag(bool flag) {
return _setCmdInBoolNoOut(&g_setsysSrv, flag, 89);
}
Result setsysBindFatalDirtyFlagEvent(Event *out_event) {
return _setCmdGetEvent(&g_setsysSrv, out_event, false, 93);
}
Result setsysGetFatalDirtyFlags(u64 *flags_0, u64 *flags_1) {
struct {
u64 flags_0;
u64 flags_1;
} out;
Result rc = serviceDispatchOut(&g_setsysSrv, 94, out);
if (R_SUCCEEDED(rc) && flags_0) *flags_0 = out.flags_0;
if (R_SUCCEEDED(rc) && flags_1) *flags_1 = out.flags_1;
return rc;
}
Result setsysGetAutoUpdateEnableFlag(bool *out) {
if (hosversionBefore(2,0,0))
return MAKERESULT(Module_Libnx, LibnxError_IncompatSysVer);
return _setCmdNoInOutBool(&g_setsysSrv, out, 95);
}
Result setsysSetAutoUpdateEnableFlag(bool flag) {
if (hosversionBefore(2,0,0))
return MAKERESULT(Module_Libnx, LibnxError_IncompatSysVer);
return _setCmdInBoolNoOut(&g_setsysSrv, flag, 96);
}
Result setsysGetBatteryPercentageFlag(bool *out) {
if (hosversionBefore(2,0,0))
return MAKERESULT(Module_Libnx, LibnxError_IncompatSysVer);
return _setCmdNoInOutBool(&g_setsysSrv, out, 99);
}
Result setsysSetBatteryPercentageFlag(bool flag) {
if (hosversionBefore(2,0,0))
return MAKERESULT(Module_Libnx, LibnxError_IncompatSysVer);
return _setCmdInBoolNoOut(&g_setsysSrv, flag, 100);
}
Result setsysGetExternalRtcResetFlag(bool *out) {
if (hosversionBefore(2,0,0))
return MAKERESULT(Module_Libnx, LibnxError_IncompatSysVer);
return _setCmdNoInOutBool(&g_setsysSrv, out, 101);
}
Result setsysSetExternalRtcResetFlag(bool flag) {
if (hosversionBefore(2,0,0))
return MAKERESULT(Module_Libnx, LibnxError_IncompatSysVer);
return _setCmdInBoolNoOut(&g_setsysSrv, flag, 102);
}
Result setsysGetUsbFullKeyEnableFlag(bool *out) {
if (hosversionBefore(3,0,0))
return MAKERESULT(Module_Libnx, LibnxError_IncompatSysVer);
return _setCmdNoInOutBool(&g_setsysSrv, out, 103);
}
Result setsysSetUsbFullKeyEnableFlag(bool flag) {
if (hosversionBefore(3,0,0))
return MAKERESULT(Module_Libnx, LibnxError_IncompatSysVer);
return _setCmdInBoolNoOut(&g_setsysSrv, flag, 104);
}
Result setsysGetBluetoothAfhEnableFlag(bool *out) {
if (hosversionBefore(3,0,0))
return MAKERESULT(Module_Libnx, LibnxError_IncompatSysVer);
return _setCmdNoInOutBool(&g_setsysSrv, out, 111);
}
Result setsysSetBluetoothAfhEnableFlag(bool flag) {
if (hosversionBefore(3,0,0))
return MAKERESULT(Module_Libnx, LibnxError_IncompatSysVer);
return _setCmdInBoolNoOut(&g_setsysSrv, flag, 112);
}
Result setsysGetBluetoothBoostEnableFlag(bool *out) {
if (hosversionBefore(3,0,0))
return MAKERESULT(Module_Libnx, LibnxError_IncompatSysVer);
return _setCmdNoInOutBool(&g_setsysSrv, out, 113);
}
Result setsysSetBluetoothBoostEnableFlag(bool flag) {
if (hosversionBefore(3,0,0))
return MAKERESULT(Module_Libnx, LibnxError_IncompatSysVer);
return _setCmdInBoolNoOut(&g_setsysSrv, flag, 114);
}
Result setsysGetInRepairProcessEnableFlag(bool *out) {
if (hosversionBefore(3,0,0))
return MAKERESULT(Module_Libnx, LibnxError_IncompatSysVer);
return _setCmdNoInOutBool(&g_setsysSrv, out, 115);
}
Result setsysSetInRepairProcessEnableFlag(bool flag) {
if (hosversionBefore(3,0,0))
return MAKERESULT(Module_Libnx, LibnxError_IncompatSysVer);
return _setCmdInBoolNoOut(&g_setsysSrv, flag, 116);
}
Result setsysGetHeadphoneVolumeUpdateFlag(bool *out) {
if (hosversionBefore(3,0,0))
return MAKERESULT(Module_Libnx, LibnxError_IncompatSysVer);
return _setCmdNoInOutBool(&g_setsysSrv, out, 117);
}
Result setsysSetHeadphoneVolumeUpdateFlag(bool flag) {
if (hosversionBefore(3,0,0))
return MAKERESULT(Module_Libnx, LibnxError_IncompatSysVer);
return _setCmdInBoolNoOut(&g_setsysSrv, flag, 118);
}
Result setsysGetRequiresRunRepairTimeReviser(bool *out) {
if (hosversionBefore(5,0,0))
return MAKERESULT(Module_Libnx, LibnxError_IncompatSysVer);
return _setCmdNoInOutBool(&g_setsysSrv, out, 141);
}
Result setsysSetRequiresRunRepairTimeReviser(bool flag) {
if (hosversionBefore(5,0,0))
return MAKERESULT(Module_Libnx, LibnxError_IncompatSysVer);
return _setCmdInBoolNoOut(&g_setsysSrv, flag, 142);
}