]> oss.titaniummirror.com Git - tinyos-2.x.git/blobdiff - tos/lib/tossim/sim_noise.c
Fixed memory bug.
[tinyos-2.x.git] / tos / lib / tossim / sim_noise.c
index 6614cc9c0c36682e6d573560ca2e9456d4e185e4..eb9784d0469ba5375d88e522b5e45cb46f853dd9 100644 (file)
@@ -98,6 +98,9 @@ void sim_noise_trace_add(uint16_t node_id, char noiseVal)__attribute__ ((C, spon
 uint8_t search_bin_num(char noise)__attribute__ ((C, spontaneous))
 {
   uint8_t bin;
+  if (noise > NOISE_MAX || noise < NOISE_MIN) {
+    noise = NOISE_MIN;
+  }
   bin = (noise-NOISE_MIN)/NOISE_QUANTIZE_INTERVAL + 1;
   return bin;
 }
@@ -221,15 +224,9 @@ void sim_noise_dist(uint16_t node_id)__attribute__ ((C, spontaneous))
 
 void arrangeKey(uint16_t node_id)__attribute__ ((C, spontaneous))
 {
-  int i;
-  char key[NOISE_HISTORY];
   char *pKey = noiseData[node_id].key;
+  memcpy(pKey, pKey+1, NOISE_HISTORY-1);
 
-  for(i=0;i<NOISE_HISTORY-1; i++)
-    {
-      key[i] = pKey[i+1];
-    }
-  memcpy((void *)pKey, (void *)key, NOISE_HISTORY);
 }
 
 /*
@@ -248,6 +245,9 @@ void makePmfDistr(uint16_t node_id)__attribute__ ((C, spontaneous))
   sim_noise_dist(node_id);
   arrangeKey(node_id);
   for(i = NOISE_HISTORY; i < noiseData[node_id].noiseTraceIndex; i++) {
+    if (i >= 196605) {
+      int foo = 7;
+    }
     if (i == NOISE_HISTORY) {
       printf("Inserting first element.\n");
     }
@@ -336,6 +336,11 @@ char sim_noise_generate(uint16_t node_id, uint32_t cur_t)__attribute__ ((C, spon
 
   prev_t = noiseData[node_id].noiseGenTime;
 
+  if (noiseData[node_id].generated == 0) {
+    dbgerror("TOSSIM", "Tried to generate noise from an uninitialized radio model of node %hu.\n", node_id);
+    return 127;
+  }
+  
   if ( (0<= cur_t) && (cur_t < NOISE_HISTORY) ) {
     noiseData[node_id].noiseGenTime = cur_t;
     noiseData[node_id].key[cur_t] = search_bin_num(noiseData[node_id].noiseTrace[cur_t]);
@@ -390,6 +395,7 @@ void makeNoiseModel(uint16_t node_id)__attribute__ ((C, spontaneous)) {
     sim_noise_add(node_id, noiseData[node_id].noiseTrace[i+1]);
     arrangeKey(node_id);
   }
+  noiseData[node_id].generated = 1;
 }