]> oss.titaniummirror.com Git - tinyos-2.x.git/blobdiff - tos/platforms/tmirws/sensors/MultiSampleP.nc
Changes to MultiSampleC
[tinyos-2.x.git] / tos / platforms / tmirws / sensors / MultiSampleP.nc
index 031f4ba2e8583148e6b2a0465e3fbe1ea9e33509..79714ad822e98ab1694418589a03046a7579d4fc 100644 (file)
  */
  
 /**
- * A generic component that multiply samples via the ADC, returning the sum of
- * ADC sample values.
+ * A generic component that multiply samples via the ADC, returning an array
+ * of ADC results.
  * 
  * @author R. Steve McKown <smckown@gmail.com>
  */
  
-generic module MultiSampleP(typedef val_t @integer(), uint16_t count) @safe()
+generic module MultiSampleP(uint16_t count) @safe()
 {
   provides {
     interface Get<uint16_t> as Count;
-    interface Read<val_t>;
+    interface ReadRef<uint16_t>;
   }
   uses interface ReadStream<uint16_t>;
 }
 implementation
 {
-  bool busy;
-  uint16_t values[count];
+  uint16_t* m_array;
 
   command uint16_t Count.get()
   {
     return count;
   }
 
-  command error_t Read.read()
+  command error_t ReadRef.read(uint16_t* array)
   {
-    if (busy)
+    if (m_array)
       return EBUSY;
 
-    if (call ReadStream.postBuffer(values, count) != SUCCESS ||
-       call ReadStream.read(0) != SUCCESS)
+    m_array = array;
+    if (call ReadStream.postBuffer(m_array, count) != SUCCESS ||
+       call ReadStream.read(0) != SUCCESS) {
+      m_array = NULL;
       return FAIL;
-
-    busy = TRUE;
+    }
     return SUCCESS;
   }
 
   void signalReadDone(error_t error)
   {
-    val_t sum = 0;
+    uint16_t* tmp = m_array;
 
-    if (error == SUCCESS) {
-      uint16_t i;
-
-      /* Average all the incoming readings */
-      for (i = 0; i < count; i++)
-         sum += values[i];
-    }
-    busy = FALSE;
-    signal Read.readDone(error, sum);
+    m_array = NULL;
+    signal ReadRef.readDone(error, tmp);
   }
 
   event void ReadStream.bufferDone(error_t error, uint16_t* buf,