]> oss.titaniummirror.com Git - tinyos-2.x.git/blobdiff - tos/platforms/eyesIFX/LocalTimeP.nc
be more careful with conversion
[tinyos-2.x.git] / tos / platforms / eyesIFX / LocalTimeP.nc
index d696ad0d959eda4009942e2f7e43821c05031a12..2136381a1baa5f223a4880c6af932389a07e568f 100644 (file)
@@ -30,6 +30,7 @@
 module LocalTimeP {
     provides {  
         interface LocalTime<T32khz> as LocalTime32kHz;
+        interface LocalTime<TMilli> as LocalTimeTMilli;
         interface WideLocalTime<T32khz> as WideLocalTime;
     }
     uses {
@@ -37,11 +38,20 @@ module LocalTimeP {
     }
 }
 implementation  {
-    uint16_t counter2sec = 40000U;
+    typedef union 
+    {
+        int64_t op;
+        struct {
+            uint32_t lo;
+            int32_t hi;
+        };
+    } i64parts_t;
+    
+    uint16_t counter2sec = 126;
     int32_t dayCounter = 0;
     bool increaseDay = FALSE;
     async command uint32_t LocalTime32kHz.get() {
-        int64_t time;
+        uint32_t time;
         unsigned t;
         bool dirty1;
         bool dirty2;
@@ -65,17 +75,16 @@ implementation  {
     }
 
     async command int64_t WideLocalTime.get() {
-        int64_t time;
+        i64parts_t time;
         uint32_t t;
         atomic {
             t = call LocalTime32kHz.get();
-            time = dayCounter;
-            if(increaseDay) time++;
-            if(time < 0) time = 0;
-            time <<= 32;
-            time += t;
+            time.hi = dayCounter;
+            if(increaseDay) time.hi++;
+            if(time.hi < 0) time.hi = 0;
+            time.lo = t;
         }
-        return time;
+        return time.op;
     }
     
     async event void Counter32khz16.overflow() {
@@ -83,5 +92,9 @@ implementation  {
         if(counter2sec == 0) ++dayCounter;
         if(dayCounter < 0) dayCounter = 0;
     }
+    
+    async command uint32_t LocalTimeTMilli.get() {
+        return (call WideLocalTime.get() / 32);
+    }
 }