mirror of
https://github.com/switchbrew/libnx.git
synced 2025-06-21 04:22:50 +02:00
81 lines
2.3 KiB
C
81 lines
2.3 KiB
C
#define NX_SERVICE_ASSUME_NON_DOMAIN
|
|
#include "service_guard.h"
|
|
#include "services/mii.h"
|
|
|
|
static MiiServiceType g_miiServiceType;
|
|
static Service g_miiSrv;
|
|
|
|
NX_GENERATE_SERVICE_GUARD_PARAMS(mii, (MiiServiceType service_type), (service_type));
|
|
|
|
Result _miiInitialize(MiiServiceType service_type) {
|
|
Result rc = MAKERESULT(Module_Libnx, LibnxError_BadInput);
|
|
|
|
g_miiServiceType = service_type;
|
|
switch (g_miiServiceType) {
|
|
case MiiServiceType_System:
|
|
rc = smGetService(&g_miiSrv, "mii:e");
|
|
break;
|
|
case MiiServiceType_User:
|
|
rc = smGetService(&g_miiSrv, "mii:u");
|
|
break;
|
|
}
|
|
|
|
return rc;
|
|
}
|
|
|
|
void _miiCleanup(void) {
|
|
serviceClose(&g_miiSrv);
|
|
}
|
|
|
|
Service* miiGetServiceSession(void) {
|
|
return &g_miiSrv;
|
|
}
|
|
|
|
Result miiOpenDatabase(MiiDatabase *out, MiiSpecialKeyCode key_code) {
|
|
u32 in = (u32)key_code;
|
|
return serviceDispatchIn(&g_miiSrv, 0, in,
|
|
.out_num_objects = 1,
|
|
.out_objects = &out->s,
|
|
);
|
|
}
|
|
|
|
Result miiDatabaseIsUpdated(MiiDatabase *db, bool *out_updated, MiiSourceFlag flag) {
|
|
u32 in = (u32)flag;
|
|
u8 tmp = 0;
|
|
Result rc = serviceDispatchInOut(&db->s, 0, in, tmp);
|
|
if (R_SUCCEEDED(rc) && out_updated) *out_updated = tmp & 1;
|
|
return rc;
|
|
}
|
|
|
|
Result miiDatabaseIsFull(MiiDatabase *db, bool *out_full) {
|
|
u8 tmp = 0;
|
|
Result rc = serviceDispatchOut(&db->s, 1, tmp);
|
|
if (R_SUCCEEDED(rc) && out_full) *out_full = tmp & 1;
|
|
return rc;
|
|
}
|
|
Result miiDatabaseGetCount(MiiDatabase *db, s32 *out_count, MiiSourceFlag flag) {
|
|
u32 in = (u32)flag;
|
|
return serviceDispatchInOut(&db->s, 2, in, *out_count);
|
|
}
|
|
|
|
Result miiDatabaseGet1(MiiDatabase *db, MiiSourceFlag flag, MiiCharInfo *out_infos, s32 count, s32 *total_out) {
|
|
u32 in = (u32)flag;
|
|
return serviceDispatchInOut(&db->s, 4, in, *total_out,
|
|
.buffer_attrs = { SfBufferAttr_HipcMapAlias | SfBufferAttr_Out },
|
|
.buffers = { { out_infos, count * sizeof(MiiCharInfo) } },
|
|
);
|
|
}
|
|
|
|
Result miiDatabaseBuildRandom(MiiDatabase *db, MiiAge age, MiiGender gender, MiiFaceColor face_color, MiiCharInfo *out_info) {
|
|
const struct {
|
|
u32 age;
|
|
u32 gender;
|
|
u32 face_color;
|
|
} in = { age, gender, face_color };
|
|
return serviceDispatchInOut(&db->s, 6, in, *out_info);
|
|
}
|
|
|
|
void miiDatabaseClose(MiiDatabase *db) {
|
|
serviceClose(&db->s);
|
|
}
|