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" #include "../sf/service.h"
#define SET_MAX_NAME_SIZE 0x48 #define SET_MAX_NAME_SIZE 0x48
#define SET_MAX_NICKNAME_SIZE 0x80
typedef enum { typedef enum {
ColorSetId_Light = 0, ColorSetId_Light = 0,
@ -43,6 +42,7 @@ typedef enum
SetLanguage_ES419 = 14, ///< "LatinAmericanSpanish" SetLanguage_ES419 = 14, ///< "LatinAmericanSpanish"
SetLanguage_ZHHANS = 15, ///< [4.0.0+] ChineseSimplified SetLanguage_ZHHANS = 15, ///< [4.0.0+] ChineseSimplified
SetLanguage_ZHHANT = 16, ///< [4.0.0+] ChineseTraditional SetLanguage_ZHHANT = 16, ///< [4.0.0+] ChineseTraditional
SetLanguage_PTBR = 17, ///< [10.1.0+] "BrazilianPortuguese"
SetLanguage_Total, ///< Total languages supported by this enum. SetLanguage_Total, ///< Total languages supported by this enum.
} SetLanguage; } SetLanguage;
@ -346,6 +346,11 @@ typedef struct {
char number[0x18]; char number[0x18];
} SetSysSerialNumber; } SetSysSerialNumber;
/// DeviceNickName
typedef struct {
char nickname[0x80];
} SetSysDeviceNickName;
/// UserSelectorSettings /// UserSelectorSettings
typedef struct { typedef struct {
u32 flags; ///< Bitmask with \ref SetSysUserSelectorFlag. u32 flags; ///< Bitmask with \ref SetSysUserSelectorFlag.
@ -891,6 +896,20 @@ Result setGetAvailableLanguageCodeCount(s32 *total);
/// Gets the RegionCode. /// Gets the RegionCode.
Result setGetRegionCode(SetRegion *out); 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. /// Initialize setsys.
Result setsysInitialize(void); Result setsysInitialize(void);
@ -1358,15 +1377,16 @@ Result setsysSetInitialLaunchSettings(const SetSysInitialLaunchSettings *setting
/** /**
* @brief Gets the system's nickname. * @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. * @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 * @brief GetProductModel
@ -2238,6 +2258,20 @@ Result setsysGetButtonConfigRegisteredSettings(s32 *total_out, SetSysButtonConfi
*/ */
Result setsysSetButtonConfigRegisteredSettings(const SetSysButtonConfigRegisteredSettings *settings, s32 count); 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. /// Initialize setcal.
Result setcalInitialize(void); 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); 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) { static Result setInitializeLanguageCodesCache(void) {
if (g_setLanguageCodesInitialized) return 0; if (g_setLanguageCodesInitialized) return 0;
Result rc = 0; Result rc = 0;
@ -213,6 +220,20 @@ Result setGetRegionCode(SetRegion *out) {
return rc; 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) { Result setsysSetLanguageCode(u64 LanguageCode) {
return _setCmdInU64NoOut(&g_setsysSrv, LanguageCode, 0); return _setCmdInU64NoOut(&g_setsysSrv, LanguageCode, 0);
} }
@ -605,20 +626,14 @@ Result setsysSetInitialLaunchSettings(const SetSysInitialLaunchSettings *setting
return serviceDispatchIn(&g_setsysSrv, 76, *settings); return serviceDispatchIn(&g_setsysSrv, 76, *settings);
} }
Result setsysGetDeviceNickname(char* nickname) { Result setsysGetDeviceNickname(SetSysDeviceNickName *nickname) {
return serviceDispatch(&g_setsysSrv, 77, return _setCmdOutBufAliasFixed(&g_setsysSrv, nickname, sizeof(*nickname), 77);
.buffer_attrs = { SfBufferAttr_HipcMapAlias | SfBufferAttr_Out },
.buffers = { { nickname, SET_MAX_NICKNAME_SIZE } },
);
} }
Result setsysSetDeviceNickname(const char* nickname) { Result setsysSetDeviceNickname(const SetSysDeviceNickName *nickname) {
char send_nickname[SET_MAX_NICKNAME_SIZE] = {0};
strncpy(send_nickname, nickname, SET_MAX_NICKNAME_SIZE-1);
return serviceDispatch(&g_setsysSrv, 78, return serviceDispatch(&g_setsysSrv, 78,
.buffer_attrs = { SfBufferAttr_HipcMapAlias | SfBufferAttr_In }, .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)) if (hosversionBefore(4,0,0))
return MAKERESULT(Module_Libnx, LibnxError_IncompatSysVer); return MAKERESULT(Module_Libnx, LibnxError_IncompatSysVer);
return serviceDispatch(&g_setsysSrv, 140, return _setCmdOutBufAliasFixed(&g_setsysSrv, out, sizeof(*out), 140);
.buffer_attrs = { SfBufferAttr_FixedSize | SfBufferAttr_HipcMapAlias | SfBufferAttr_Out },
.buffers = { { out, sizeof(SetSysHostFsMountPoint) } },
);
} }
Result setsysGetRequiresRunRepairTimeReviser(bool *out) { Result setsysGetRequiresRunRepairTimeReviser(bool *out) {
@ -1504,10 +1516,7 @@ Result setsysGetButtonConfigRegisteredSettingsEmbedded(SetSysButtonConfigRegiste
if (hosversionBefore(10,0,0)) if (hosversionBefore(10,0,0))
return MAKERESULT(Module_Libnx, LibnxError_IncompatSysVer); return MAKERESULT(Module_Libnx, LibnxError_IncompatSysVer);
return serviceDispatch(&g_setsysSrv, 197, return _setCmdOutBufAliasFixed(&g_setsysSrv, settings, sizeof(*settings), 197);
.buffer_attrs = { SfBufferAttr_FixedSize | SfBufferAttr_HipcMapAlias | SfBufferAttr_Out },
.buffers = { { settings, sizeof(SetSysButtonConfigRegisteredSettings) } },
);
} }
Result setsysSetButtonConfigRegisteredSettingsEmbedded(const SetSysButtonConfigRegisteredSettings *settings) { 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) { Result setcalGetBdAddress(SetCalBdAddress *out) {
return serviceDispatchOut(&g_setcalSrv, 0, *out); return serviceDispatchOut(&g_setcalSrv, 0, *out);
} }
@ -1596,45 +1619,27 @@ Result setcalGetBatteryLot(SetBatteryLot *out) {
} }
Result setcalGetEciDeviceCertificate(SetCalEccB233DeviceCertificate *out) { Result setcalGetEciDeviceCertificate(SetCalEccB233DeviceCertificate *out) {
return serviceDispatch(&g_setcalSrv, 14, return _setCmdOutBufAliasFixed(&g_setcalSrv, out, sizeof(*out), 14);
.buffer_attrs = { SfBufferAttr_HipcMapAlias | SfBufferAttr_Out },
.buffers = { { out, sizeof(SetCalEccB233DeviceCertificate) } },
);
} }
Result setcalGetEticketDeviceCertificate(SetCalRsa2048DeviceCertificate *out) { Result setcalGetEticketDeviceCertificate(SetCalRsa2048DeviceCertificate *out) {
return serviceDispatch(&g_setcalSrv, 15, return _setCmdOutBufAliasFixed(&g_setcalSrv, out, sizeof(*out), 15);
.buffer_attrs = { SfBufferAttr_HipcMapAlias | SfBufferAttr_Out },
.buffers = { { out, sizeof(SetCalRsa2048DeviceCertificate) } },
);
} }
Result setcalGetSslKey(SetCalSslKey *out) { Result setcalGetSslKey(SetCalSslKey *out) {
return serviceDispatch(&g_setcalSrv, 16, return _setCmdOutBufAliasFixed(&g_setcalSrv, out, sizeof(*out), 16);
.buffer_attrs = { SfBufferAttr_HipcMapAlias | SfBufferAttr_Out },
.buffers = { { out, sizeof(SetCalSslKey) } },
);
} }
Result setcalGetSslCertificate(SetCalSslCertificate *out) { Result setcalGetSslCertificate(SetCalSslCertificate *out) {
return serviceDispatch(&g_setcalSrv, 17, return _setCmdOutBufAliasFixed(&g_setcalSrv, out, sizeof(*out), 17);
.buffer_attrs = { SfBufferAttr_HipcMapAlias | SfBufferAttr_Out },
.buffers = { { out, sizeof(SetCalSslCertificate) } },
);
} }
Result setcalGetGameCardKey(SetCalGameCardKey *out) { Result setcalGetGameCardKey(SetCalGameCardKey *out) {
return serviceDispatch(&g_setcalSrv, 18, return _setCmdOutBufAliasFixed(&g_setcalSrv, out, sizeof(*out), 18);
.buffer_attrs = { SfBufferAttr_HipcMapAlias | SfBufferAttr_Out },
.buffers = { { out, sizeof(SetCalGameCardKey) } },
);
} }
Result setcalGetGameCardCertificate(SetCalGameCardCertificate *out) { Result setcalGetGameCardCertificate(SetCalGameCardCertificate *out) {
return serviceDispatch(&g_setcalSrv, 19, return _setCmdOutBufAliasFixed(&g_setcalSrv, out, sizeof(*out), 19);
.buffer_attrs = { SfBufferAttr_HipcMapAlias | SfBufferAttr_Out },
.buffers = { { out, sizeof(SetCalGameCardCertificate) } },
);
} }
Result setcalGetEciDeviceKey(SetCalEccB233DeviceKey *out) { Result setcalGetEciDeviceKey(SetCalEccB233DeviceKey *out) {
@ -1642,10 +1647,7 @@ Result setcalGetEciDeviceKey(SetCalEccB233DeviceKey *out) {
} }
Result setcalGetEticketDeviceKey(SetCalRsa2048DeviceKey *out) { Result setcalGetEticketDeviceKey(SetCalRsa2048DeviceKey *out) {
return serviceDispatch(&g_setcalSrv, 21, return _setCmdOutBufAliasFixed(&g_setcalSrv, out, sizeof(*out), 21);
.buffer_attrs = { SfBufferAttr_HipcMapAlias | SfBufferAttr_Out },
.buffers = { { out, sizeof(SetCalRsa2048DeviceKey) } },
);
} }
Result setcalGetSpeakerParameter(SetCalSpeakerParameter *out) { Result setcalGetSpeakerParameter(SetCalSpeakerParameter *out) {
@ -1663,20 +1665,14 @@ Result setcalGetEciDeviceCertificate2(SetCalRsa2048DeviceCertificate *out) {
if (hosversionBefore(5,0,0)) if (hosversionBefore(5,0,0))
return MAKERESULT(Module_Libnx, LibnxError_IncompatSysVer); return MAKERESULT(Module_Libnx, LibnxError_IncompatSysVer);
return serviceDispatch(&g_setcalSrv, 24, return _setCmdOutBufAliasFixed(&g_setcalSrv, out, sizeof(*out), 24);
.buffer_attrs = { SfBufferAttr_HipcMapAlias | SfBufferAttr_Out },
.buffers = { { out, sizeof(SetCalRsa2048DeviceCertificate) } },
);
} }
Result setcalGetEciDeviceKey2(SetCalRsa2048DeviceKey *out) { Result setcalGetEciDeviceKey2(SetCalRsa2048DeviceKey *out) {
if (hosversionBefore(5,0,0)) if (hosversionBefore(5,0,0))
return MAKERESULT(Module_Libnx, LibnxError_IncompatSysVer); return MAKERESULT(Module_Libnx, LibnxError_IncompatSysVer);
return serviceDispatch(&g_setcalSrv, 25, return _setCmdOutBufAliasFixed(&g_setcalSrv, out, sizeof(*out), 25);
.buffer_attrs = { SfBufferAttr_HipcMapAlias | SfBufferAttr_Out },
.buffers = { { out, sizeof(SetCalRsa2048DeviceKey) } },
);
} }
Result setcalGetAmiiboKey(SetCalAmiiboKey *out) { Result setcalGetAmiiboKey(SetCalAmiiboKey *out) {