Index: firmware/App/Drivers/LevelSensors.c =================================================================== diff -u -rd9b5f588d81e15ed3849222bed3362e15dbf4b0a -r58c82eeb7e6113e610babd4e36b3968552b35260 --- firmware/App/Drivers/LevelSensors.c (.../LevelSensors.c) (revision d9b5f588d81e15ed3849222bed3362e15dbf4b0a) +++ firmware/App/Drivers/LevelSensors.c (.../LevelSensors.c) (revision 58c82eeb7e6113e610babd4e36b3968552b35260) @@ -18,6 +18,7 @@ #include "LevelSensors.h" #include "FpgaTD.h" #include "Messaging.h" +#include "TaskPriority.h" #include "Timers.h" /** @@ -27,13 +28,13 @@ // ********** private definitions ********** -#define AIR_TRAP_LEVEL_DEBOUNCE_TIME_MS ( 400 ) ///< Air trap level sensor debounce time (in ms). +#define AIR_TRAP_LEVEL_DEBOUNCE_TIME_MS ( 400 / TASK_PRIORITY_INTERVAL ) ///< Air trap level sensor debounce time (in priority task intervals). // ********** private data ********** static OVERRIDE_U32_T rawLevelStates[ NUM_OF_AIR_TRAP_LEVEL_SENSORS ]; ///< Raw air trap level states before debounce (overrideable). static OVERRIDE_U32_T currentLevelStates[ NUM_OF_AIR_TRAP_LEVEL_SENSORS ]; ///< Current raw level sensor states (overrideable). -static U32 airTrapLevelsDebounceStartTime[ NUM_OF_AIR_TRAP_LEVEL_SENSORS ]; ///< Debounce start time for airtrap level sensors. +static U32 airTrapLevelsDebounceTimerCtr[ NUM_OF_AIR_TRAP_LEVEL_SENSORS ]; ///< Debounce timer counter for air trap level sensors. // ********** private function prototypes ********** @@ -50,7 +51,7 @@ for( airTrapLevelSensor = AIR_TRAP_LEVEL_FIRST; airTrapLevelSensor < NUM_OF_AIR_TRAP_LEVEL_SENSORS; airTrapLevelSensor++ ) { - airTrapLevelsDebounceStartTime[ airTrapLevelSensor ] = 0; + airTrapLevelsDebounceTimerCtr[ airTrapLevelSensor ] = 0; rawLevelStates[ airTrapLevelSensor ].data = AIR_TRAP_LEVEL_AIR; rawLevelStates[ airTrapLevelSensor ].ovData = AIR_TRAP_LEVEL_AIR; rawLevelStates[ airTrapLevelSensor ].ovInitData = AIR_TRAP_LEVEL_AIR; @@ -89,23 +90,16 @@ // Check if the raw level sensor status is not the same as the recorded data if ( getRawLevelSensorState( airTrapLevelSensor ) != (AIR_TRAP_LEVELS_T)currentLevelStates[ airTrapLevelSensor ].data ) { - // If the debounce time is 0, start the timer - if ( 0 == airTrapLevelsDebounceStartTime[ airTrapLevelSensor ] ) - { - airTrapLevelsDebounceStartTime[ airTrapLevelSensor ] = getMSTimerCount(); - } // If the debounce time has elapsed, update the level sensor status to the new status - else if ( TRUE == didTimeout( airTrapLevelsDebounceStartTime[ airTrapLevelSensor ], AIR_TRAP_LEVEL_DEBOUNCE_TIME_MS ) ) + if ( ++airTrapLevelsDebounceTimerCtr[ airTrapLevelSensor ] >= AIR_TRAP_LEVEL_DEBOUNCE_TIME_MS ) { - // reset the debounce time - airTrapLevelsDebounceStartTime[ airTrapLevelSensor ] = 0; - // update recent level status - currentLevelStates[ airTrapLevelSensor ].data = (U32)getRawLevelSensorState( airTrapLevelSensor ); + currentLevelStates[ airTrapLevelSensor ].data = (U32)getRawLevelSensorState( airTrapLevelSensor ); + airTrapLevelsDebounceTimerCtr[ airTrapLevelSensor ] = 0; } } else { - airTrapLevelsDebounceStartTime[ airTrapLevelSensor ] = 0; + airTrapLevelsDebounceTimerCtr[ airTrapLevelSensor ] = 0; } } }