Add set:cal service with a few functions

This commit is contained in:
ITotalJustice 2019-12-15 19:52:58 +00:00
parent d25bcc486a
commit fd8e2dfbd7
2 changed files with 94 additions and 0 deletions

View File

@ -271,6 +271,36 @@ void setExit(void);
/// Gets the Service object for the actual set service session. /// Gets the Service object for the actual set service session.
Service* setGetServiceSession(void); Service* setGetServiceSession(void);
/// Initialize setcal.
Result setcalInitialize(void);
/// Exit setcal.
void setcalExit(void);
/// Gets the Service object for the actual setcal service session.
Service* setcalGetServiceSession(void);
/// Gets EciDeviceCertificate of size 0x180.
Result setcalGetEciDeviceCertificate(void *certificate, size_t size);
/// Gets EticketDeviceCertificate of size 0x240.
Result setcalGetEticketDeviceCertificate(void *certificate, size_t size);
/// Gets SslKey of size 0x134.
Result setcalGetSslKey(void *key, size_t size);
/// Gets SslCertificate of size 0x804.
Result setcalGetSslCertificate(void *certificate, size_t size);
/// Gets GameCardKey of size 0x134.
Result setcalGetGameCardKey(void *key, size_t size);
/// Gets GameCardCertificate of size 0x404.
Result setcalGetGameCardCertificate(void *certificate, size_t size);
/// Gets EticketDeviceKey of size 0x244.
Result setcalGetEticketDeviceKey(void *key, size_t size);
/// Converts LanguageCode to \ref SetLanguage. /// Converts LanguageCode to \ref SetLanguage.
Result setMakeLanguage(u64 LanguageCode, SetLanguage *Language); Result setMakeLanguage(u64 LanguageCode, SetLanguage *Language);

View File

@ -7,6 +7,7 @@
static Service g_setSrv; static Service g_setSrv;
static Service g_setsysSrv; static Service g_setsysSrv;
static Service g_setcalSrv;
static bool g_setLanguageCodesInitialized; static bool g_setLanguageCodesInitialized;
static u64 g_setLanguageCodes[0x40]; static u64 g_setLanguageCodes[0x40];
@ -44,6 +45,20 @@ Service* setsysGetServiceSession(void) {
return &g_setsysSrv; return &g_setsysSrv;
} }
NX_GENERATE_SERVICE_GUARD(setcal);
Result _setcalInitialize(void) {
return smGetService(&g_setcalSrv, "set:cal");
}
void _setcalCleanup(void) {
serviceClose(&g_setcalSrv);
}
Service* setcalGetServiceSession(void) {
return &g_setcalSrv;
}
static Result _setCmdGetHandle(Service* srv, Handle* handle_out, u32 cmd_id) { static Result _setCmdGetHandle(Service* srv, Handle* handle_out, u32 cmd_id) {
return serviceDispatch(srv, cmd_id, return serviceDispatch(srv, cmd_id,
.out_handle_attrs = { SfOutHandleAttr_HipcCopy }, .out_handle_attrs = { SfOutHandleAttr_HipcCopy },
@ -99,6 +114,55 @@ static Result _setCmdInU64NoOut(Service* srv, u64 inval, u32 cmd_id) {
return serviceDispatchIn(srv, cmd_id, inval); return serviceDispatchIn(srv, cmd_id, inval);
} }
Result setcalGetEciDeviceCertificate(void *certificate, size_t size) {
return serviceDispatch(&g_setcalSrv, 14,
.buffer_attrs = { SfBufferAttr_HipcMapAlias | SfBufferAttr_Out },
.buffers = { { certificate, size } },
);
}
Result setcalGetEticketDeviceCertificate(void *certificate, size_t size) {
return serviceDispatch(&g_setcalSrv, 15,
.buffer_attrs = { SfBufferAttr_HipcMapAlias | SfBufferAttr_Out },
.buffers = { { certificate, size } },
);
}
Result setcalGetSslKey(void *key, size_t size) {
return serviceDispatch(&g_setcalSrv, 16,
.buffer_attrs = { SfBufferAttr_HipcMapAlias | SfBufferAttr_Out },
.buffers = { { key, size } },
);
}
Result setcalGetSslCertificate(void *certificate, size_t size) {
return serviceDispatch(&g_setcalSrv, 17,
.buffer_attrs = { SfBufferAttr_HipcMapAlias | SfBufferAttr_Out },
.buffers = { { certificate, size } },
);
}
Result setcalGetGameCardKey(void *key, size_t size) {
return serviceDispatch(&g_setcalSrv, 18,
.buffer_attrs = { SfBufferAttr_HipcMapAlias | SfBufferAttr_Out },
.buffers = { { key, size } },
);
}
Result setcalGetGameCardCertificate(void *certificate, size_t size) {
return serviceDispatch(&g_setcalSrv, 19,
.buffer_attrs = { SfBufferAttr_HipcMapAlias | SfBufferAttr_Out },
.buffers = { { certificate, size } },
);
}
Result setcalGetEticketDeviceKey(void *key, size_t size) {
return serviceDispatch(&g_setcalSrv, 21,
.buffer_attrs = { SfBufferAttr_HipcMapAlias | SfBufferAttr_Out },
.buffers = { { key, 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;