From 8f3997e3a7f007274cef703704b63f21341747ce Mon Sep 17 00:00:00 2001 From: smea Date: Mon, 25 Aug 2014 09:14:48 -0700 Subject: [PATCH] PTM & AC stuff --- libctru/include/3ds/AC.h | 5 +++- libctru/include/3ds/PTM.h | 10 ++++++++ libctru/source/services/ac.c | 31 +++++++++++++++++------- libctru/source/services/ptm.c | 45 +++++++++++++++++++++++++++++++++++ 4 files changed, 82 insertions(+), 9 deletions(-) create mode 100644 libctru/include/3ds/PTM.h create mode 100644 libctru/source/services/ptm.c diff --git a/libctru/include/3ds/AC.h b/libctru/include/3ds/AC.h index dd3e78a..0205d76 100644 --- a/libctru/include/3ds/AC.h +++ b/libctru/include/3ds/AC.h @@ -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 diff --git a/libctru/include/3ds/PTM.h b/libctru/include/3ds/PTM.h new file mode 100644 index 0000000..aa761f4 --- /dev/null +++ b/libctru/include/3ds/PTM.h @@ -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 diff --git a/libctru/source/services/ac.c b/libctru/source/services/ac.c index c7bf8ec..1b382d8 100644 --- a/libctru/source/services/ac.c +++ b/libctru/source/services/ac.c @@ -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; } diff --git a/libctru/source/services/ptm.c b/libctru/source/services/ptm.c new file mode 100644 index 0000000..54f5596 --- /dev/null +++ b/libctru/source/services/ptm.c @@ -0,0 +1,45 @@ +#include +#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]; +}