#include <3ds/svc.h>
#include <3ds/srv.h>
+static Handle acHandle;
+
+Result acInit()
+{
+ return srvGetServiceHandle(&acHandle, "ac:u");
+}
+
+Result acExit()
+{
+ return svcCloseHandle(acHandle);
+}
+
// ptr=0x200-byte outbuf
-Result ACU_CreateDefaultConfig(Handle servhandle, u32 *ptr)
+Result ACU_CreateDefaultConfig(Handle* servhandle, u32 *ptr)
{
+ if(!servhandle)servhandle=&acHandle;
u32 tmp0, tmp1;
Result ret=0;
u32 *cmdbuf = getThreadCommandBuffer();
cmdbuf[0x100>>2] = 0x00800002;
cmdbuf[0x104>>2] = (u32)ptr;
- if((ret = svcSendSyncRequest(servhandle))!=0)return ret;
+ if((ret = svcSendSyncRequest(*servhandle))!=0)return ret;
cmdbuf[0x100>>2] = tmp0;
cmdbuf[0x104>>2] = tmp1;
}
// Unknown what this cmd does at the time of writing. (ptr=0x200-byte inbuf/outbuf)
-Result ACU_cmd26(Handle servhandle, u32 *ptr, u8 val)
+Result ACU_cmd26(Handle* servhandle, u32 *ptr, u8 val)
{
+ if(!servhandle)servhandle=&acHandle;
u32 tmp0, tmp1;
Result ret=0;
u32 *cmdbuf = getThreadCommandBuffer();
cmdbuf[2] = 0x00800002;
cmdbuf[3] = (u32)ptr;
- if((ret = svcSendSyncRequest(servhandle))!=0)return ret;
+ if((ret = svcSendSyncRequest(*servhandle))!=0)return ret;
cmdbuf[0x100>>2] = tmp0;
cmdbuf[0x104>>2] = tmp1;
return (Result)cmdbuf[1];
}
-Result ACU_GetWifiStatus(Handle servhandle, u32 *out)
+Result ACU_GetWifiStatus(Handle* servhandle, u32 *out)
{
+ if(!servhandle)servhandle=&acHandle;
Result ret=0;
u32 *cmdbuf = getThreadCommandBuffer();
cmdbuf[0] = 0x000D0000;
- if((ret = svcSendSyncRequest(servhandle))!=0)return ret;
+ if((ret = svcSendSyncRequest(*servhandle))!=0)return ret;
*out = cmdbuf[2];
while(1)
{
- ret = ACU_GetWifiStatus(servhandle, &outval);
+ ret = ACU_GetWifiStatus(&servhandle, &outval);
if(ret==0 && outval==1)break;
}
--- /dev/null
+#include <stdlib.h>
+#include <3ds/types.h>
+#include <3ds/svc.h>
+#include <3ds/srv.h>
+#include <3ds/PTM.h>
+
+static Handle ptmHandle;
+
+Result ptmInit()
+{
+ return srvGetServiceHandle(&ptmHandle, "ptm:u");
+}
+
+Result ptmExit()
+{
+ return svcCloseHandle(ptmHandle);
+}
+
+Result PTMU_GetBatteryLevel(Handle* servhandle, u8 *out)
+{
+ Result ret=0;
+ u32 *cmdbuf = getThreadCommandBuffer();
+
+ cmdbuf[0] = 0x00070000;
+
+ if((ret = svcSendSyncRequest(*servhandle))!=0)return ret;
+
+ *out = (u8)cmdbuf[2];
+
+ return (Result)cmdbuf[1];
+}
+
+Result PTMU_GetBatteryChargeState(Handle* servhandle, u8 *out)
+{
+ Result ret=0;
+ u32 *cmdbuf = getThreadCommandBuffer();
+
+ cmdbuf[0] = 0x00080000;
+
+ if((ret = svcSendSyncRequest(*servhandle))!=0)return ret;
+
+ *out = (u8)cmdbuf[2];
+
+ return (Result)cmdbuf[1];
+}