Index: firmware/App/Monitors/Level.c =================================================================== diff -u -r27e8758fa6199e72b914e1199786a4396ce74d06 -r24486f327e661fbfce27e5b5bf7f94193652efd0 --- firmware/App/Monitors/Level.c (.../Level.c) (revision 27e8758fa6199e72b914e1199786a4396ce74d06) +++ firmware/App/Monitors/Level.c (.../Level.c) (revision 24486f327e661fbfce27e5b5bf7f94193652efd0) @@ -28,9 +28,10 @@ */ // ********** private definitions ********** -#define FPGA_LEVEL_LOW 5 ///< Floater low level status -#define FPGA_LEVEL_MEDIUM 4 ///< Floater medium level status -#define FPGA_LEVEL_HIGH 6 ///< Floater high level status +#define FPGA_LEVEL_EMPTY 3 ///< Floater empty level status +#define FPGA_LEVEL_LOW 2 ///< Floater low level status +#define FPGA_LEVEL_MEDIUM 0 ///< Floater medium level status +#define FPGA_LEVEL_HIGH 4 ///< Floater high level status #define LEVEL_COUNT_LOW 0xFFFF ///< Level sensor count when fluid level is low or non submerged #define LEVEL_COUNT_HIGH_START 0x0000 ///< Start range of level sensor count when fluid level is high or submerged #define LEVEL_COUNT_HIGH_END 0x1FFF ///< End range of level sensor count when fluid level is high or submerged @@ -125,6 +126,10 @@ currentLevelStatus = ( processLevelCount( getFPGAD63LevelSensor() ) == 0 ? LEVEL_STATE_LOW : LEVEL_STATE_HIGH ); break; + case D98_LEVL: + currentLevelStatus = ( processLevelCount( getFPGAD98LevelSensor() ) == 0 ? LEVEL_STATE_LOW : LEVEL_STATE_HIGH ); + break; + case D46_LEVL: currentLevelStatus = ( processLevelCount( getFPGAD46LevelSensor() ) == 0 ? LEVEL_STATE_LOW : LEVEL_STATE_HIGH ); break; @@ -161,6 +166,10 @@ SEND_EVENT_WITH_2_U32_DATA( DD_EVENT_D63_LEVL_CHANGE, (U32)status[ i ].data, (U32)currentLevelStatus ); break; + case D98_LEVL: + SEND_EVENT_WITH_2_U32_DATA( DD_EVENT_D98_LEVL_CHANGE, (U32)status[ i ].data, (U32)currentLevelStatus ); + break; + case D46_LEVL: SEND_EVENT_WITH_2_U32_DATA( DD_EVENT_D46_LEVL_CHANGE, (U32)status[ i ].data, (U32)currentLevelStatus ); break; @@ -255,58 +264,151 @@ if ( D6_LEVL == levelId ) { - levelStatus = getFPGAD6LevelStatus(); + levelStatus = getFPGAD6LevelStatus(); - if ( FPGA_LEVEL_LOW == levelStatus ) - { - currentLevelStatus = LEVEL_STATE_LOW ; - } - else if ( FPGA_LEVEL_MEDIUM == levelStatus ) - { - currentLevelStatus = LEVEL_STATE_MEDIUM ; - } - else if ( FPGA_LEVEL_HIGH == levelStatus ) - { - currentLevelStatus = LEVEL_STATE_HIGH ; - } - else - { - // TODO - Handle invalid level alarm - currentLevelStatus = LEVEL_STATE_ILLEGAL ; - } + if ( getTestConfigStatus( TEST_CONFIG_ENABLE_BETA_1_0_HW ) != TRUE ) + { + // Beta 1.9 behavior + if ( FPGA_LEVEL_EMPTY == levelStatus ) + { + currentLevelStatus = LEVEL_STATE_EMPTY; + } + else if ( FPGA_LEVEL_LOW == levelStatus ) + { + currentLevelStatus = LEVEL_STATE_LOW; + } + else if ( FPGA_LEVEL_MEDIUM == levelStatus ) + { + currentLevelStatus = LEVEL_STATE_MEDIUM; + } + else if ( FPGA_LEVEL_HIGH == levelStatus ) + { + currentLevelStatus = LEVEL_STATE_HIGH; + } + else + { + // TODO - Handle invalid level alarm + currentLevelStatus = LEVEL_STATE_ILLEGAL; + } + } + else + { + // Beta 1.0 behavior + if ( FPGA_LEVEL_LOW == levelStatus ) + { + currentLevelStatus = LEVEL_STATE_LOW; + } + else if ( FPGA_LEVEL_MEDIUM == levelStatus ) + { + currentLevelStatus = LEVEL_STATE_MEDIUM; + } + else if ( FPGA_LEVEL_HIGH == levelStatus ) + { + currentLevelStatus = LEVEL_STATE_HIGH; + } + else + { + // TODO - Handle invalid level alarm + currentLevelStatus = LEVEL_STATE_ILLEGAL; + } + } } else if ( P25_LEVL == levelId ) { - levelStatus = getFPGAP25FloaterState(); + levelStatus = getFPGAP25FloaterState(); - if ( FPGA_LEVEL_LOW == levelStatus ) - { - currentLevelStatus = LEVEL_STATE_LOW ; - } - else if ( FPGA_LEVEL_MEDIUM == levelStatus ) - { - currentLevelStatus = LEVEL_STATE_MEDIUM ; - } - else if ( FPGA_LEVEL_HIGH == levelStatus ) - { - currentLevelStatus = LEVEL_STATE_HIGH ; - } - else - { - // TODO - Handle invalid level alarm - currentLevelStatus = LEVEL_STATE_ILLEGAL ; - } + if ( getTestConfigStatus( TEST_CONFIG_ENABLE_BETA_1_0_HW ) != TRUE ) + { + // Beta 1.9 behavior + if ( FPGA_LEVEL_EMPTY == levelStatus ) + { + currentLevelStatus = LEVEL_STATE_EMPTY; + } + else if ( FPGA_LEVEL_LOW == levelStatus ) + { + currentLevelStatus = LEVEL_STATE_LOW; + } + else if ( FPGA_LEVEL_MEDIUM == levelStatus ) + { + currentLevelStatus = LEVEL_STATE_MEDIUM; + } + else if ( FPGA_LEVEL_HIGH == levelStatus ) + { + currentLevelStatus = LEVEL_STATE_HIGH; + } + else + { + // TODO - Handle invalid level alarm + currentLevelStatus = LEVEL_STATE_ILLEGAL; + } + } + else + { + // Beta 1.0 behavior + if ( FPGA_LEVEL_LOW == levelStatus ) + { + currentLevelStatus = LEVEL_STATE_LOW; + } + else if ( FPGA_LEVEL_MEDIUM == levelStatus ) + { + currentLevelStatus = LEVEL_STATE_MEDIUM; + } + else if ( FPGA_LEVEL_HIGH == levelStatus ) + { + currentLevelStatus = LEVEL_STATE_HIGH; + } + else + { + // TODO - Handle invalid level alarm + currentLevelStatus = LEVEL_STATE_ILLEGAL; + } + } } + else { - SET_ALARM_WITH_2_U32_DATA( ALARM_ID_DD_SOFTWARE_FAULT, SW_FAULT_ID_DD_INVALID_LEVEL_ID, (U32)levelId ) + SET_ALARM_WITH_2_U32_DATA( ALARM_ID_DD_SOFTWARE_FAULT, SW_FAULT_ID_DD_INVALID_LEVEL_ID, (U32)levelId ); } return currentLevelStatus; } /*********************************************************************//** * @brief + * The getBicarbChamberLevelStatus function returns the status of Bicarb chamber + * F level from the upper level and lower level sensors. + * @details \b Inputs: FPGA level sensor data + * @details \b Outputs: level + * @return level status + *************************************************************************/ +LEVEL_STATE_T getBicarbChamberLevelStatus( void ) +{ + LEVEL_STATE_T status = LEVEL_STATE_ILLEGAL; + LEVEL_STATE_T upperlevel = getLevelStatus( D63_LEVL ); + LEVEL_STATE_T lowerlevel = getLevelStatus( D98_LEVL ); + + if ( ( lowerlevel == LEVEL_STATE_LOW ) && ( upperlevel == LEVEL_STATE_LOW ) ) + { + status = LEVEL_STATE_LOW; + } + else if ( ( lowerlevel == LEVEL_STATE_HIGH ) && ( upperlevel == LEVEL_STATE_LOW ) ) + { + status = LEVEL_STATE_MEDIUM; + } + else if ( ( lowerlevel == LEVEL_STATE_HIGH ) && ( upperlevel == LEVEL_STATE_HIGH ) ) + { + status = LEVEL_STATE_HIGH; + } + else + { + // upperlevel == TRUE while lowerlevel == FALSE - illegal + status = LEVEL_STATE_ILLEGAL; + } + return status; +} + +/*********************************************************************//** + * @brief * The publishLevelsData function broadcasts the level data at the * publication interval. * @details \b Inputs: levelsDataPublicationCounter @@ -321,9 +423,11 @@ { DD_LEVEL_DATA_T data; - data.d6Level = (U32)getLevelStatus( D6_LEVL ); - data.d63Level = (U32)getLevelStatus( D63_LEVL ); - data.d46Level = (U32)getLevelStatus( D46_LEVL ); + data.d6Level = (U32)getLevelStatus( D6_LEVL ); + data.d63Level = (U32)getLevelStatus( D63_LEVL ); + data.d98Level = (U32)getLevelStatus( D98_LEVL ); + data.bicarbLevel = (U32)getBicarbChamberLevelStatus(); + data.d46Level = (U32)getLevelStatus( D46_LEVL ); levelsDataPublicationCounter = 0;