]> Chaos Git - corbenik/ctrulib.git/commitdiff
os: Added osGetTime().
authorplutoo <plutoo@univor.se>
Sat, 6 Sep 2014 19:07:26 +0000 (21:07 +0200)
committerplutoo <plutoo@univor.se>
Sat, 6 Sep 2014 19:07:26 +0000 (21:07 +0200)
libctru/include/3ds/os.h
libctru/source/os.c

index c26759020090fdb9b428198107ed09bf795ba863..92e64839310c514572bf5ee4068a36454f9477c4 100644 (file)
@@ -7,3 +7,4 @@ u32 osConvertVirtToPhys(u32 vaddr);
 const char* osStrError(u32 error);
 u32 osGetFirmVersion();
 u32 osGetKernelVersion();
+u64 osGetTime();
index f09bf24d6da05cb92f7d4bc8b96c4ba5347e0252..84431bf2964ee85161ce026ff118773e3e73d60b 100644 (file)
@@ -1,5 +1,21 @@
 #include <3ds.h>
 
+#define TICKS_PER_MSEC 268123.480
+
+typedef struct {
+       u64 date_time;
+       u64 update_tick;
+       //...
+} datetime_t;
+
+static volatile u32* __datetime_selector =
+       (u32*) 0x1FF81000;
+static volatile datetime_t* __datetime1 =
+       (datetime_t*) 0x1FF81020;
+static volatile datetime_t* __datetime2 =
+       (datetime_t*) 0x1FF81040;
+
+
 u32 osConvertVirtToPhys(u32 vaddr)
 {
        if(vaddr >= 0x14000000 && vaddr < 0x1c000000)
@@ -13,6 +29,21 @@ u32 osConvertVirtToPhys(u32 vaddr)
        return 0;
 }
 
+// Returns number of milliseconds since 1st Jan 1900 00:00.
+u64 osGetTime() {
+       volatile datetime_t* dt;
+
+       switch(*__datetime_selector & 1) {
+       case 0:
+               dt = __datetime1;
+       case 1:
+               dt = __datetime2;
+       }
+
+       u64 offset = (svcGetSystemTick() - dt->update_tick) / TICKS_PER_MSEC;
+       return dt->date_time + offset;
+}
+
 u32 osGetFirmVersion() {
        return (*(u32*)0x1FF80000) & ~0xFF;
 }