set: Updated for [10.1.0+], added more cmds, use struct for nickname.

This commit is contained in:
yellows8 2020-08-20 23:20:10 -04:00
parent 797cdffb14
commit ac8ac4919e
No known key found for this signature in database
GPG Key ID: 0AF90DA3F1E60E43
2 changed files with 89 additions and 59 deletions

View File

@ -16,7 +16,6 @@
#include "../sf/service.h"
#define SET_MAX_NAME_SIZE 0x48
#define SET_MAX_NICKNAME_SIZE 0x80
typedef enum {
ColorSetId_Light = 0,
@ -43,6 +42,7 @@ typedef enum
SetLanguage_ES419 = 14, ///< "LatinAmericanSpanish"
SetLanguage_ZHHANS = 15, ///< [4.0.0+] ChineseSimplified
SetLanguage_ZHHANT = 16, ///< [4.0.0+] ChineseTraditional
SetLanguage_PTBR = 17, ///< [10.1.0+] "BrazilianPortuguese"
SetLanguage_Total, ///< Total languages supported by this enum.
} SetLanguage;
@ -346,6 +346,11 @@ typedef struct {
char number[0x18];
} SetSysSerialNumber;
/// DeviceNickName
typedef struct {
char nickname[0x80];
} SetSysDeviceNickName;
/// UserSelectorSettings
typedef struct {
u32 flags; ///< Bitmask with \ref SetSysUserSelectorFlag.
@ -891,6 +896,20 @@ Result setGetAvailableLanguageCodeCount(s32 *total);
/// Gets the RegionCode.
Result setGetRegionCode(SetRegion *out);
/**
* @brief GetQuestFlag
* @note Only available on [5.0.0+].
* @param[out] out Output flag.
*/
Result setGetQuestFlag(bool *out);
/**
* @brief Gets the system's nickname.
* @note Only available on [10.1.0+].
* @param[out] nickname \ref SetSysDeviceNickName
*/
Result setGetDeviceNickname(SetSysDeviceNickName *nickname);
/// Initialize setsys.
Result setsysInitialize(void);
@ -1358,15 +1377,16 @@ Result setsysSetInitialLaunchSettings(const SetSysInitialLaunchSettings *setting
/**
* @brief Gets the system's nickname.
* @param nickname Pointer to output the nickname to. (The buffer size needs to be at least 0x80 bytes)
* @note Same as \ref setGetDeviceNickname, which official sw uses instead on [10.1.0+].
* @param[out] nickname \ref SetSysDeviceNickName
*/
Result setsysGetDeviceNickname(char* nickname);
Result setsysGetDeviceNickname(SetSysDeviceNickName *nickname);
/**
* @brief Sets the system's nickname.
* @param nickname Pointer to read the nickname from.
* @param[in] nickname \ref SetSysDeviceNickName
*/
Result setsysSetDeviceNickname(const char* nickname);
Result setsysSetDeviceNickname(const SetSysDeviceNickName *nickname);
/**
* @brief GetProductModel
@ -2238,6 +2258,20 @@ Result setsysGetButtonConfigRegisteredSettings(s32 *total_out, SetSysButtonConfi
*/
Result setsysSetButtonConfigRegisteredSettings(const SetSysButtonConfigRegisteredSettings *settings, s32 count);
/**
* @brief GetFieldTestingFlag
* @note Only available on [10.1.0+].
* @param[out] out Output flag.
*/
Result setsysGetFieldTestingFlag(bool *out);
/**
* @brief SetFieldTestingFlag
* @note Only available on [10.1.0+].
* @param[in] flag Input flag.
*/
Result setsysSetFieldTestingFlag(bool flag);
/// Initialize setcal.
Result setcalInitialize(void);

View File

@ -118,6 +118,13 @@ static Result _setCmdInUuidNoOut(Service* srv, const Uuid *inval, u32 cmd_id) {
return serviceDispatchIn(srv, cmd_id, *inval);
}
static Result _setCmdOutBufAliasFixed(Service* srv, void* buffer, size_t size, u32 cmd_id) {
return serviceDispatch(srv, cmd_id,
.buffer_attrs = { SfBufferAttr_HipcMapAlias | SfBufferAttr_Out | SfBufferAttr_FixedSize },
.buffers = { { buffer, size } },
);
}
static Result setInitializeLanguageCodesCache(void) {
if (g_setLanguageCodesInitialized) return 0;
Result rc = 0;
@ -213,6 +220,20 @@ Result setGetRegionCode(SetRegion *out) {
return rc;
}
Result setGetQuestFlag(bool *out) {
if (hosversionBefore(5,0,0))
return MAKERESULT(Module_Libnx, LibnxError_IncompatSysVer);
return _setCmdNoInOutBool(&g_setSrv, out, 8);
}
Result setGetDeviceNickname(SetSysDeviceNickName *nickname) {
if (hosversionBefore(10,1,0))
return MAKERESULT(Module_Libnx, LibnxError_IncompatSysVer);
return _setCmdOutBufAliasFixed(&g_setSrv, nickname, sizeof(*nickname), 11);
}
Result setsysSetLanguageCode(u64 LanguageCode) {
return _setCmdInU64NoOut(&g_setsysSrv, LanguageCode, 0);
}
@ -605,20 +626,14 @@ Result setsysSetInitialLaunchSettings(const SetSysInitialLaunchSettings *setting
return serviceDispatchIn(&g_setsysSrv, 76, *settings);
}
Result setsysGetDeviceNickname(char* nickname) {
return serviceDispatch(&g_setsysSrv, 77,
.buffer_attrs = { SfBufferAttr_HipcMapAlias | SfBufferAttr_Out },
.buffers = { { nickname, SET_MAX_NICKNAME_SIZE } },
);
Result setsysGetDeviceNickname(SetSysDeviceNickName *nickname) {
return _setCmdOutBufAliasFixed(&g_setsysSrv, nickname, sizeof(*nickname), 77);
}
Result setsysSetDeviceNickname(const char* nickname) {
char send_nickname[SET_MAX_NICKNAME_SIZE] = {0};
strncpy(send_nickname, nickname, SET_MAX_NICKNAME_SIZE-1);
Result setsysSetDeviceNickname(const SetSysDeviceNickName *nickname) {
return serviceDispatch(&g_setsysSrv, 78,
.buffer_attrs = { SfBufferAttr_HipcMapAlias | SfBufferAttr_In },
.buffers = { { send_nickname, SET_MAX_NICKNAME_SIZE } },
.buffers = { { nickname, sizeof(*nickname) } },
);
}
@ -1049,10 +1064,7 @@ Result setsysGetHostFsMountPoint(SetSysHostFsMountPoint *out) {
if (hosversionBefore(4,0,0))
return MAKERESULT(Module_Libnx, LibnxError_IncompatSysVer);
return serviceDispatch(&g_setsysSrv, 140,
.buffer_attrs = { SfBufferAttr_FixedSize | SfBufferAttr_HipcMapAlias | SfBufferAttr_Out },
.buffers = { { out, sizeof(SetSysHostFsMountPoint) } },
);
return _setCmdOutBufAliasFixed(&g_setsysSrv, out, sizeof(*out), 140);
}
Result setsysGetRequiresRunRepairTimeReviser(bool *out) {
@ -1504,10 +1516,7 @@ Result setsysGetButtonConfigRegisteredSettingsEmbedded(SetSysButtonConfigRegiste
if (hosversionBefore(10,0,0))
return MAKERESULT(Module_Libnx, LibnxError_IncompatSysVer);
return serviceDispatch(&g_setsysSrv, 197,
.buffer_attrs = { SfBufferAttr_FixedSize | SfBufferAttr_HipcMapAlias | SfBufferAttr_Out },
.buffers = { { settings, sizeof(SetSysButtonConfigRegisteredSettings) } },
);
return _setCmdOutBufAliasFixed(&g_setsysSrv, settings, sizeof(*settings), 197);
}
Result setsysSetButtonConfigRegisteredSettingsEmbedded(const SetSysButtonConfigRegisteredSettings *settings) {
@ -1540,6 +1549,20 @@ Result setsysSetButtonConfigRegisteredSettings(const SetSysButtonConfigRegistere
);
}
Result setsysGetFieldTestingFlag(bool *out) {
if (hosversionBefore(10,1,0))
return MAKERESULT(Module_Libnx, LibnxError_IncompatSysVer);
return _setCmdNoInOutBool(&g_setsysSrv, out, 201);
}
Result setsysSetFieldTestingFlag(bool flag) {
if (hosversionBefore(10,1,0))
return MAKERESULT(Module_Libnx, LibnxError_IncompatSysVer);
return _setCmdInBoolNoOut(&g_setsysSrv, flag, 202);
}
Result setcalGetBdAddress(SetCalBdAddress *out) {
return serviceDispatchOut(&g_setcalSrv, 0, *out);
}
@ -1596,45 +1619,27 @@ Result setcalGetBatteryLot(SetBatteryLot *out) {
}
Result setcalGetEciDeviceCertificate(SetCalEccB233DeviceCertificate *out) {
return serviceDispatch(&g_setcalSrv, 14,
.buffer_attrs = { SfBufferAttr_HipcMapAlias | SfBufferAttr_Out },
.buffers = { { out, sizeof(SetCalEccB233DeviceCertificate) } },
);
return _setCmdOutBufAliasFixed(&g_setcalSrv, out, sizeof(*out), 14);
}
Result setcalGetEticketDeviceCertificate(SetCalRsa2048DeviceCertificate *out) {
return serviceDispatch(&g_setcalSrv, 15,
.buffer_attrs = { SfBufferAttr_HipcMapAlias | SfBufferAttr_Out },
.buffers = { { out, sizeof(SetCalRsa2048DeviceCertificate) } },
);
return _setCmdOutBufAliasFixed(&g_setcalSrv, out, sizeof(*out), 15);
}
Result setcalGetSslKey(SetCalSslKey *out) {
return serviceDispatch(&g_setcalSrv, 16,
.buffer_attrs = { SfBufferAttr_HipcMapAlias | SfBufferAttr_Out },
.buffers = { { out, sizeof(SetCalSslKey) } },
);
return _setCmdOutBufAliasFixed(&g_setcalSrv, out, sizeof(*out), 16);
}
Result setcalGetSslCertificate(SetCalSslCertificate *out) {
return serviceDispatch(&g_setcalSrv, 17,
.buffer_attrs = { SfBufferAttr_HipcMapAlias | SfBufferAttr_Out },
.buffers = { { out, sizeof(SetCalSslCertificate) } },
);
return _setCmdOutBufAliasFixed(&g_setcalSrv, out, sizeof(*out), 17);
}
Result setcalGetGameCardKey(SetCalGameCardKey *out) {
return serviceDispatch(&g_setcalSrv, 18,
.buffer_attrs = { SfBufferAttr_HipcMapAlias | SfBufferAttr_Out },
.buffers = { { out, sizeof(SetCalGameCardKey) } },
);
return _setCmdOutBufAliasFixed(&g_setcalSrv, out, sizeof(*out), 18);
}
Result setcalGetGameCardCertificate(SetCalGameCardCertificate *out) {
return serviceDispatch(&g_setcalSrv, 19,
.buffer_attrs = { SfBufferAttr_HipcMapAlias | SfBufferAttr_Out },
.buffers = { { out, sizeof(SetCalGameCardCertificate) } },
);
return _setCmdOutBufAliasFixed(&g_setcalSrv, out, sizeof(*out), 19);
}
Result setcalGetEciDeviceKey(SetCalEccB233DeviceKey *out) {
@ -1642,10 +1647,7 @@ Result setcalGetEciDeviceKey(SetCalEccB233DeviceKey *out) {
}
Result setcalGetEticketDeviceKey(SetCalRsa2048DeviceKey *out) {
return serviceDispatch(&g_setcalSrv, 21,
.buffer_attrs = { SfBufferAttr_HipcMapAlias | SfBufferAttr_Out },
.buffers = { { out, sizeof(SetCalRsa2048DeviceKey) } },
);
return _setCmdOutBufAliasFixed(&g_setcalSrv, out, sizeof(*out), 21);
}
Result setcalGetSpeakerParameter(SetCalSpeakerParameter *out) {
@ -1663,20 +1665,14 @@ Result setcalGetEciDeviceCertificate2(SetCalRsa2048DeviceCertificate *out) {
if (hosversionBefore(5,0,0))
return MAKERESULT(Module_Libnx, LibnxError_IncompatSysVer);
return serviceDispatch(&g_setcalSrv, 24,
.buffer_attrs = { SfBufferAttr_HipcMapAlias | SfBufferAttr_Out },
.buffers = { { out, sizeof(SetCalRsa2048DeviceCertificate) } },
);
return _setCmdOutBufAliasFixed(&g_setcalSrv, out, sizeof(*out), 24);
}
Result setcalGetEciDeviceKey2(SetCalRsa2048DeviceKey *out) {
if (hosversionBefore(5,0,0))
return MAKERESULT(Module_Libnx, LibnxError_IncompatSysVer);
return serviceDispatch(&g_setcalSrv, 25,
.buffer_attrs = { SfBufferAttr_HipcMapAlias | SfBufferAttr_Out },
.buffers = { { out, sizeof(SetCalRsa2048DeviceKey) } },
);
return _setCmdOutBufAliasFixed(&g_setcalSrv, out, sizeof(*out), 25);
}
Result setcalGetAmiiboKey(SetCalAmiiboKey *out) {