#define NX_SERVICE_ASSUME_NON_DOMAIN
#include "service_guard.h"
#include "services/fan.h"
#include "runtime/hosversion.h"

static Service g_fanSrv;

NX_GENERATE_SERVICE_GUARD(fan);

Result _fanInitialize(void) {
    return smGetService(&g_fanSrv, "fan");
}

void _fanCleanup(void) {
    serviceClose(&g_fanSrv);
}

Result fanOpenController(FanController *out, u32 device_code) {
    return serviceDispatchIn(&g_fanSrv, 0, device_code,
        .out_num_objects = 1,
        .out_objects = &out->s,
    );
}

Service* fanGetServiceSession(void) {
    return &g_fanSrv;
}

void fanControllerClose(FanController *controller) {
    serviceClose(&controller->s);
}

Result fanControllerSetRotationSpeedLevel(FanController *controller, float level) {
    return serviceDispatchIn(&controller->s, 0, level);
}

Result fanControllerGetRotationSpeedLevel(FanController *controller, float *level) {
    return serviceDispatchOut(&controller->s, 2, *level);
}