]> oss.titaniummirror.com Git - tinyos-2.x.git/blobdiff - tos/chips/tda5250/mac/DuplicateP.nc
startPeriodic does not always work
[tinyos-2.x.git] / tos / chips / tda5250 / mac / DuplicateP.nc
index b07b5686676e83d889ea751b5151fed9780da243..f1e8598ee991e5b3d5e127c28d9407ef2e6fdc0f 100644 (file)
@@ -39,11 +39,35 @@ module DuplicateP {
   }
   uses {
       interface Timer<TMilli> as Timer;
+#ifdef DUPLICATE_DEBUG
+      interface SerialDebug;
+#endif
   }
 }
-implementation {    
+implementation {
     known_t knownTable[TABLE_ENTRIES];
-
+    
+#ifdef DUPLICATE_DEBUG
+    void sdDebug(uint16_t p) {
+        call SerialDebug.putPlace(p);
+    }
+    known_t dupOldest;
+    unsigned last;
+    task void dump() {
+        sdDebug(3000 + last);
+        sdDebug(dupOldest.src);
+        sdDebug(dupOldest.seqno);
+        sdDebug(dupOldest.age);
+        sdDebug(4000);
+        sdDebug(knownTable[last].src);
+        sdDebug(knownTable[last].seqno);
+        sdDebug(knownTable[last].age);
+        sdDebug(5000);
+    }
+#else
+    void sdDebug(uint16_t p) {};
+#endif
+    
     /** helper functions */
     task void ageMsgsTask() {
         unsigned i;
@@ -80,18 +104,27 @@ implementation {
                 break;
             }
         }
+        sdDebug(100 + rVal);
+        sdDebug(200 + i);
         return rVal;
     }
     
     async command void Duplicate.remember(am_addr_t src, uint8_t seqno) {
         unsigned oldest = findOldest();
+#ifdef DUPLICATE_DEBUG
+        dupOldest = knownTable[oldest];
+        last = oldest;
+        post dump();
+#endif
         knownTable[oldest].src = src;
         knownTable[oldest].seqno = seqno;
         knownTable[oldest].age = 0;
+        post ageMsgsTask();
     }
 
     /** helper interfaces */
     event void Timer.fired() {
+        call Timer.startOneShot(AGE_INTERVALL);
         post ageMsgsTask();
     }
 
@@ -99,10 +132,10 @@ implementation {
         uint8_t i;
         for(i = 0; i < TABLE_ENTRIES; i++) {
             atomic {
-                    knownTable[i].age = MAX_AGE;
+                knownTable[i].age = MAX_AGE;
             }
         }
-        call Timer.startPeriodic(AGE_INTERVALL);
+        call Timer.startOneShot(AGE_INTERVALL);
         return SUCCESS;
     }
 }