From c2eb9d69519f7b05050fa490c125b527af3a17b2 Mon Sep 17 00:00:00 2001 From: andreaskoepke Date: Thu, 6 Dec 2007 18:33:02 +0000 Subject: [PATCH] simplified interface --- .../eyesIFX/sensors/CoulombCounter.nc | 7 +++++-- .../eyesIFX/sensors/CoulombCounterP.nc | 21 ++++++++++++------- 2 files changed, 19 insertions(+), 9 deletions(-) diff --git a/tos/platforms/eyesIFX/sensors/CoulombCounter.nc b/tos/platforms/eyesIFX/sensors/CoulombCounter.nc index 2ae7848f..0ce2c943 100644 --- a/tos/platforms/eyesIFX/sensors/CoulombCounter.nc +++ b/tos/platforms/eyesIFX/sensors/CoulombCounter.nc @@ -46,11 +46,14 @@ interface CoulombCounter { * re-boot every time we fiddle with the power supply -- this trick * allows us to "continue" measureing. */ - command error_t startMeasurement(uint32_t delay, uint32_t duration); + command error_t start(uint32_t delay, uint32_t duration); /** Stop a measurement, returns FAIL if there is no ongoing measurement */ - command error_t stopMeasurement(); + command error_t stop(); /** notification: a fixed portion of energy has been consumed */ async event void portionConsumed(); + + /** notification that the measurement will be soon over */ + event void soonOver(); } diff --git a/tos/platforms/eyesIFX/sensors/CoulombCounterP.nc b/tos/platforms/eyesIFX/sensors/CoulombCounterP.nc index edba1ef0..32c74413 100644 --- a/tos/platforms/eyesIFX/sensors/CoulombCounterP.nc +++ b/tos/platforms/eyesIFX/sensors/CoulombCounterP.nc @@ -49,11 +49,12 @@ module CoulombCounterP { } } implementation { -#define MIN_DELAY 30 +#define MIN_DELAY 60 uint16_t timerHighBits = 0; uint32_t dur = 0; - + bool warned = FALSE; + void resetBoard() { call ResetBoard.set(); __asm__("NOP"); @@ -106,12 +107,12 @@ implementation { } } - command error_t CoulombCounter.startMeasurement(uint32_t delay, uint32_t duration) { + command error_t CoulombCounter.start(uint32_t delay, uint32_t duration) { error_t result = SUCCESS; timerHighBits = duration >> 22; dur = duration * (uint32_t)1024; - + warned = FALSE; if(call CoulombCounter.isMeasureing()) { startLongTimer(); call EnergyInterrupt.enableFallingEdge(); @@ -128,7 +129,7 @@ implementation { } /** Stop a measurement, returns FAIL if there is no ongoing measurement */ - command error_t CoulombCounter.stopMeasurement() { + command error_t CoulombCounter.stop() { error_t result = FAIL; call Timer.stop(); timerHighBits = 0; @@ -151,8 +152,14 @@ implementation { startLongTimer(); } else { - // measurement finished - call CoulombCounter.stopMeasurement(); + if(warned == TRUE) { + call CoulombCounter.stop(); + } + else { + signal CoulombCounter.soonOver(); + call Timer.startOneShot((uint32_t)MIN_DELAY*1024); + warned = TRUE; + } } } else { -- 2.39.2