mirror of
https://github.com/switchbrew/libnx.git
synced 2025-06-21 20:42:44 +02:00
71 lines
3.3 KiB
C
71 lines
3.3 KiB
C
#include <string.h>
|
|
#include "libapplet_internal.h"
|
|
#include "applets/nfp_la.h"
|
|
|
|
static Result _nfpLaShow(const NfpLaStartParamForAmiiboSettings *param, NfpLaReturnValueForAmiiboSettings *reply) {
|
|
Result rc=0;
|
|
size_t out_reply_size=0;
|
|
u32 ver=1;
|
|
LibAppletArgs commonargs;
|
|
|
|
libappletArgsCreate(&commonargs, ver);
|
|
|
|
rc = libappletLaunch(AppletId_cabinet, &commonargs, param, sizeof(*param), reply, sizeof(*reply), &out_reply_size);
|
|
if (R_SUCCEEDED(rc)) { // sdknso doesn't validate out_reply_size.
|
|
if (!reply->flags) rc = MAKERESULT(Module_Libnx, LibnxError_LibAppletBadExit);
|
|
}
|
|
else
|
|
reply->flags = 0;
|
|
|
|
return rc;
|
|
}
|
|
|
|
static Result _nfpLaStartSettings(NfpLaStartParamTypeForAmiiboSettings type, const NfpLaAmiiboSettingsStartParam *in_param, const NfpTagInfo *in_tag_info, const NfpRegisterInfo *in_reg_info, NfpTagInfo *out_tag_info, NfcDeviceHandle *handle, bool *reg_info_flag, NfpRegisterInfo *out_reg_info) {
|
|
Result rc=0;
|
|
NfpLaStartParamForAmiiboSettings param={0};
|
|
NfpLaReturnValueForAmiiboSettings reply={0};
|
|
|
|
param.type = type;
|
|
param.flags = 0x1;
|
|
if (in_tag_info) param.flags |= BIT(1);
|
|
if (in_reg_info) param.flags |= BIT(2);
|
|
param.unk_x3 = in_param->unk_x28;
|
|
memcpy(param.unk_x4, in_param->unk_x0, sizeof(in_param->unk_x0));
|
|
|
|
if (in_tag_info) memcpy(¶m.tag_info, in_tag_info, sizeof(NfpTagInfo));
|
|
if (in_reg_info) memcpy(¶m.register_info, in_reg_info, sizeof(NfpRegisterInfo));
|
|
|
|
memcpy(param.unk_x164, in_param->unk_x8, sizeof(in_param->unk_x8));
|
|
|
|
rc = _nfpLaShow(¶m, &reply);
|
|
|
|
if (R_SUCCEEDED(rc)) {
|
|
if (out_tag_info) memcpy(out_tag_info, &reply.tag_info, sizeof(NfpTagInfo));
|
|
*handle = reply.handle;
|
|
if (reg_info_flag || out_reg_info) {
|
|
bool tmpflag = (reply.flags & BIT(2)) != 0;
|
|
if (reg_info_flag) *reg_info_flag = tmpflag;
|
|
if (tmpflag && out_reg_info) memcpy(out_reg_info, &reply.register_info, sizeof(NfpRegisterInfo));
|
|
}
|
|
}
|
|
|
|
return rc;
|
|
}
|
|
|
|
Result nfpLaStartNicknameAndOwnerSettings(const NfpLaAmiiboSettingsStartParam *in_param, const NfpTagInfo *in_tag_info, const NfpRegisterInfo *in_reg_info, NfpTagInfo *out_tag_info, NfcDeviceHandle *handle, bool *reg_info_flag, NfpRegisterInfo *out_reg_info) {
|
|
return _nfpLaStartSettings(NfpLaStartParamTypeForAmiiboSettings_NicknameAndOwnerSettings, in_param, in_tag_info, in_reg_info, out_tag_info, handle, reg_info_flag, out_reg_info);
|
|
}
|
|
|
|
Result nfpLaStartGameDataEraser(const NfpLaAmiiboSettingsStartParam *in_param, const NfpTagInfo *in_tag_info, NfpTagInfo *out_tag_info, NfcDeviceHandle *handle) {
|
|
return _nfpLaStartSettings(NfpLaStartParamTypeForAmiiboSettings_GameDataEraser, in_param, in_tag_info, NULL, out_tag_info, handle, NULL, NULL);
|
|
}
|
|
|
|
Result nfpLaStartRestorer(const NfpLaAmiiboSettingsStartParam *in_param, const NfpTagInfo *in_tag_info, NfpTagInfo *out_tag_info, NfcDeviceHandle *handle) {
|
|
return _nfpLaStartSettings(NfpLaStartParamTypeForAmiiboSettings_Restorer, in_param, in_tag_info, NULL, out_tag_info, handle, NULL, NULL);
|
|
}
|
|
|
|
Result nfpLaStartFormatter(const NfpLaAmiiboSettingsStartParam *in_param, NfpTagInfo *out_tag_info, NfcDeviceHandle *handle) {
|
|
return _nfpLaStartSettings(NfpLaStartParamTypeForAmiiboSettings_Formatter, in_param, NULL, NULL, out_tag_info, handle, NULL, NULL);
|
|
}
|
|
|