PTM & AC stuff

This commit is contained in:
smea 2014-08-25 09:14:48 -07:00
parent 14312cf851
commit 8f3997e3a7
4 changed files with 82 additions and 9 deletions

View File

@ -1,7 +1,10 @@
#ifndef AC_H
#define AC_H
Result ACU_GetWifiStatus(Handle servhandle, u32 *out);
Result acInit();
Result acExit();
Result ACU_GetWifiStatus(Handle* servhandle, u32 *out);
Result ACU_WaitInternetConnection();
#endif

10
libctru/include/3ds/PTM.h Normal file
View File

@ -0,0 +1,10 @@
#ifndef PTM_H
#define PTM_H
Result ptmInit();
Result ptmExit();
Result PTMU_GetBatteryLevel(Handle* servhandle, u8 *out);
Result PTMU_GetBatteryChargeState(Handle* servhandle, u8 *out);
#endif

View File

@ -4,9 +4,22 @@
#include <3ds/svc.h>
#include <3ds/srv.h>
// ptr=0x200-byte outbuf
Result ACU_CreateDefaultConfig(Handle servhandle, u32 *ptr)
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)
{
if(!servhandle)servhandle=&acHandle;
u32 tmp0, tmp1;
Result ret=0;
u32 *cmdbuf = getThreadCommandBuffer();
@ -18,7 +31,7 @@ Result ACU_CreateDefaultConfig(Handle servhandle, u32 *ptr)
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;
@ -27,8 +40,9 @@ Result ACU_CreateDefaultConfig(Handle servhandle, u32 *ptr)
}
// 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();
@ -43,7 +57,7 @@ Result ACU_cmd26(Handle servhandle, u32 *ptr, u8 val)
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;
@ -51,14 +65,15 @@ Result ACU_cmd26(Handle servhandle, u32 *ptr, u8 val)
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];
@ -75,7 +90,7 @@ Result ACU_WaitInternetConnection()
while(1)
{
ret = ACU_GetWifiStatus(servhandle, &outval);
ret = ACU_GetWifiStatus(&servhandle, &outval);
if(ret==0 && outval==1)break;
}

View File

@ -0,0 +1,45 @@
#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];
}