X-Git-Url: https://oss.titaniummirror.com/gitweb/?a=blobdiff_plain;f=tos%2Fplatforms%2Ftmirws%2Fsensors%2FMultiSampleP.nc;h=79714ad822e98ab1694418589a03046a7579d4fc;hb=924c646126a4cc643fdf90dce88e98e487bcf9eb;hp=031f4ba2e8583148e6b2a0465e3fbe1ea9e33509;hpb=de3bf162a7f3764ba43088c13e9e656c2a9ae4f1;p=tinyos-2.x.git diff --git a/tos/platforms/tmirws/sensors/MultiSampleP.nc b/tos/platforms/tmirws/sensors/MultiSampleP.nc index 031f4ba2..79714ad8 100644 --- a/tos/platforms/tmirws/sensors/MultiSampleP.nc +++ b/tos/platforms/tmirws/sensors/MultiSampleP.nc @@ -28,56 +28,49 @@ */ /** - * 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 */ -generic module MultiSampleP(typedef val_t @integer(), uint16_t count) @safe() +generic module MultiSampleP(uint16_t count) @safe() { provides { interface Get as Count; - interface Read; + interface ReadRef; } uses interface ReadStream; } 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,