Index: firmware/App/Monitors/Level.c =================================================================== diff -u -rd4d21b42ee8bd292a6d9f7966fe37abe0271dfda -r6525ec84b42e7d73710cc81ae93d2e2f0202a486 --- firmware/App/Monitors/Level.c (.../Level.c) (revision d4d21b42ee8bd292a6d9f7966fe37abe0271dfda) +++ firmware/App/Monitors/Level.c (.../Level.c) (revision 6525ec84b42e7d73710cc81ae93d2e2f0202a486) @@ -33,6 +33,10 @@ #define LEVEL_DEBOUNCE_TIME_MS ( MS_PER_SECOND / 10 ) ///< Level debounce time in milliseconds. #define DATA_PUBLISH_COUNTER_START_COUNT 7 ///< Data publish counter start count. +#define LOW_LEVEL_SWITCH_BIT 0x01 ///< Bit position for lower level switch. +#define HIGH_LEVEL_SWITCH_BIT 0x02 ///< Bit position for upper level switch. +#define LEVEL_SWITCH_BIT_MASK 0x03 ///< Bit mask for level switch bits. + /// Level status structure typedef struct { @@ -85,8 +89,22 @@ *************************************************************************/ void execLevels( void ) { - U32 currentLevelState = ( getFPGAFloaterState() != 0 ? LEVEL_STATE_LOW : LEVEL_STATE_MEDIUM ); + U08 levelBits = getFPGAFloaterState() & LEVEL_SWITCH_BIT_MASK; + U32 currentLevelState = LEVEL_STATE_LOW; + // Convert floater switch bits to level + if ( ( levelBits & LOW_LEVEL_SWITCH_BIT ) != 0 ) + { + if ( ( levelBits & HIGH_LEVEL_SWITCH_BIT ) != 0 ) + { // upper switch is active low + currentLevelState = LEVEL_STATE_MEDIUM; + } + else + { + currentLevelState = LEVEL_STATE_HIGH; + } + } + // Check if the current level status is not the same as the recorded data if ( currentLevelState != levelState.level.data ) {