#include "AeroVane.h"
-generic module AverageU16(uint16_t samples) {
- provides interface Average<aerovector_t>;
+generic module AverageU16() {
+ provides interface Average<uint16_t>;
}
implementation {
- uint8_t m_count;
+ uint16_t m_count;
uint16_t m_value;
inline void init()
init();
}
- task void signalAverage()
+ command Average.submit(uint16_t value)
{
- uint16_t value;
-
- value = (m_value + (m_count / 2)) / m_count;
- init();
-
- /* Inform the consumer of the vector */
- signal Average.average(vector);
+ m_count++;
+ m_value += value;
}
- command Average.submit(uint16_t value)
+ command uint16_t Average.average()
{
- m_value += value;
- if (++m_count == samples)
- post signalAverage();
+ uint16_t value = 0;
+
+ if (m_count) {
+ value = (m_value + (m_count / 2)) / m_count;
+ init();
+ }
+ return value;
}
- command Average.null()
+ command uint16_t Average.count()
{
- if (++m_count == samples)
- post signalAverage();
+ return m_count;
}
}