Add mcuHWC.c

This commit is contained in:
Kartik 2017-08-20 10:42:26 +05:30 committed by GitHub
parent 56df13246e
commit 0c8db83896

View File

@ -0,0 +1,93 @@
#include <3ds.h>
#include <3ds/services/mcuHWC.h>
static Handle mcuHWCHandle;
static int mcuHWCRefCount;
Result mcuHWCInit(void)
{
if (AtomicPostIncrement(&mcuHWCRefCount)) return 0;
Result res = srvGetServiceHandle(&mcuHWCHandle, "mcu::HWC");
if (R_FAILED(res)) AtomicDecrement(&mcuHWCRefCount);
return res;
}
void mcuHWCExit(void)
{
if (AtomicDecrement(&mcuHWCRefCount)) return;
svcCloseHandle(mcuHWCHandle);
}
Result mcuReadRegister(u8 reg, u32 size, u8* data)
{
Result ret = 0;
u32 *cmdbuf = getThreadCommandBuffer();
cmdbuf[0] = IPC_MakeHeader(0x1,2,2); // 0x10082
cmdbuf[1] = reg;
cmdbuf[2] = size;
cmdbuf[3] = size << 4 | 0xC;
cmdbuf[4] = (u32)data;
if(R_FAILED(ret = svcSendSyncRequest(mcuHWCHandle)))return ret;
return (Result)cmdbuf[1];
}
Result mcuWriteRegister(u8 reg, u32 size, u8* data)
{
Result ret = 0;
u32 *cmdbuf = getThreadCommandBuffer();
cmdbuf[0] = IPC_MakeHeader(0x2,2,2); // 0x20082
cmdbuf[1] = reg;
cmdbuf[2] = size;
cmdbuf[3] = size << 4 | 0xA;
cmdbuf[4] = (u32)data;
if(R_FAILED(ret = svcSendSyncRequest(mcuHWCHandle)))return ret;
return (Result)cmdbuf[1];
}
Result mcuGetBatteryVoltage(u8 *voltage)
{
Result ret = 0;
u32 *cmdbuf = getThreadCommandBuffer();
cmdbuf[0] = IPC_MakeHeader(0x4,0,0); // 0x40000
if(R_FAILED(ret = svcSendSyncRequest(mcuHWCHandle)))return ret;
*voltage = cmdbuf[2];
return (Result)cmdbuf[1];
}
Result mcuGetBatteryLevel(u8 *level)
{
Result ret = 0;
u32 *cmdbuf = getThreadCommandBuffer();
cmdbuf[0] = IPC_MakeHeader(0x5,0,0); // 0x50000
if(R_FAILED(ret = svcSendSyncRequest(mcuHWCHandle)))return ret;
*level = cmdbuf[2];
return (Result)cmdbuf[1];
}
Result mcuGetSoundSliderLevel(u8 *level)
{
Result ret = 0;
u32 *cmdbuf = getThreadCommandBuffer();
cmdbuf[0] = IPC_MakeHeader(0xB,0,0); // 0xB0000
if(R_FAILED(ret = svcSendSyncRequest(mcuHWCHandle)))return ret;
*level = cmdbuf[2];
return (Result)cmdbuf[1];
}