generic module AveragePolarC(uint16_t samples) {
provides interface Average<aerovector_t>;
uses {
- interface Average<int16_t> as AverageAngle;
+ interface Average<uint16_t> as AverageAngle;
interface Average<uint16_t> as AverageSpeed;
}
}
implementation {
int m_count;
- aerovector_t vector;
command void Average.reset()
{
AverageSpeed.init();
}
- event void AverageAngle.average(uint16_t angle)
+ command uint16_t Average.submit(aerovector_t vector)
{
- vector.dir = angle;
- if (++m_count == 2)
- signal Average.average(vector);
+ call AverageAngle.submit(vector.dir);
+ call AverageSpeed.submit(vector.speed);
}
- event void AverageSpeed.average(uint16_t speed)
+ command aerovector_t Average.average()
{
- vector.speed = speed;
- if (++m_count == 2)
- signal Average.average(vector);
- }
+ aerovector_t vector;
- command void Average.submit(aerovector_t vector)
- {
- call AverageAngle.submit(vector.dir);
- call AverageSpeed.submit(vector.speed);
+ vector.dir = call AverageAngle.average();
+ vector.speed = call AverageSpeed.average();
+ init();
+ return vector;
}
- command void Average.null()
+ command uint16_t Average.count()
{
- call AverageAngle.submit(vector.dir);
- call AverageSpeed.submit(vector.speed);
+ return call AverageAngle.count();
}
}