Index: firmware/App/Controllers/ConductivitySensors.c =================================================================== diff -u -r56429f955d5da2c3e571908b5a383125ea078197 -rc20562aef9d0b7487f16aeaa0568f1d92ca844ed --- firmware/App/Controllers/ConductivitySensors.c (.../ConductivitySensors.c) (revision 56429f955d5da2c3e571908b5a383125ea078197) +++ firmware/App/Controllers/ConductivitySensors.c (.../ConductivitySensors.c) (revision c20562aef9d0b7487f16aeaa0568f1d92ca844ed) @@ -74,6 +74,8 @@ #define EMSTAT_CPI_OR_CD1_INDEX 0 ///< Emstat board CPi index number. #define EMSTAT_CPO_OR_CD2_INDEX 1 ///< Emstat board CPo index number. +#define EMSTAT_PACKAGE_BUFFER_SIZE 50 ///< EmStat package buffer size + #define DATA_PUBLISH_COUNTER_START_COUNT 40 ///< Data publish counter start count. #define COND_SENSOR_BAD_STATUS_PERSISTENCE_PERIOD ( 1 * MS_PER_SECOND ) ///< Conductivity sensor bad status persistence period. #define COND_SENSORS_FPGA_ERROR_TIMEOUT_MS ( 2 * MS_PER_SECOND ) ///< Conductivity sensors FPGA error timeout in milliseconds. @@ -104,7 +106,7 @@ { BOOL packageStarted; ///< Emstat package started flag. U08 packageIndex; ///< Emstat package index number. - U08 package[ 50 ]; ///< Emstat read buffer package. + U08 package[ EMSTAT_PACKAGE_BUFFER_SIZE ]; ///< Emstat read buffer package. EMSTAT_COND_SENSORS_T sensors[ EMSTAT_NUM_OF_SENSORS_PER_BOARD ]; ///< Emstat conductivity and corresponding temperature sensors. } EMSTAT_READ_T; @@ -149,6 +151,9 @@ static void processEmstatMeasurementDataPackets( U08 boardSensorIndex, EMSTAT_READ_T* readPackage, EMSTAT_VARIABLE_T* receivedPackets ); static F32 getCalibrationAppliedConductivityValue( U32 sensorId, F32 compensatedValue ); +//#define PICO_STATUS_CHECK //wjb +//#define CONDUCTIVITY_BAD_CHAR //wjb + /*********************************************************************//** * @brief * The initConductivitySensors function initializes the ConductivitySensors module. @@ -526,12 +531,18 @@ checkFPGAPersistentAlarms( FPGA_PERS_ERROR_CPI_CPO_COND_SENSORS, rxFifoCount ); // Only process the sensor read if there is a new byte +#ifdef PICO_STATUS_CHECK + rxFifoCount = 10; +#endif if ( 0 != rxFifoCount ) { emstatByte = getFPGAEmstatCPiCPoByteOut(); // fpgaErrorCount = getFPGAEmstatCPiCPoRxErrCount(); // checkFPGAPersistentErrorCountAlarm( FPGA_PERS_ERROR_CPI_CPO_COND_SENSORS, fpgaErrorCount ); +#ifdef PICO_STATUS_CHECK + emstatByte = ';'; +#endif processEmstatSensorRead( &emstatBoardRead[ EMSTAT_CPI_CPO_BOARD ], emstatByte ); } break; @@ -542,12 +553,19 @@ checkFPGAPersistentAlarms( FPGA_PERS_ERROR_CD1_CD2_COND_SENSORS, rxFifoCount ); // Only process the sensor read if there is a new byte +#ifdef PICO_STATUS_CHECK + rxFifoCount = 10; +#endif if ( 0 != rxFifoCount) { emstatByte = getFPGAEmstatCD1CD2OutByte(); // fpgaErrorCount = getFPGAEmstatCD1CD2RxErrCount(); // checkFPGAPersistentErrorCountAlarm( FPGA_PERS_ERROR_CD1_CD2_COND_SENSORS, fpgaErrorCount ); +#ifdef PICO_STATUS_CHECK + emstatByte = ';'; +#endif + processEmstatSensorRead( &emstatBoardRead[ EMSTAT_CD1_CD2_BOARD ], emstatByte ); } break; @@ -578,15 +596,19 @@ break; case ';': +#ifndef PICO_STATUS_CHECK if ( TRUE == readPackage->packageStarted ) +#endif { processEmstatMeasurementDataPackets( EMSTAT_CPI_OR_CD1_INDEX, readPackage, (EMSTAT_VARIABLE_T*)readPackage->package ); readPackage->packageIndex = 0; } break; case '\n': +#ifndef PICO_STATUS_CHECK if ( TRUE == readPackage->packageStarted ) +#endif { processEmstatMeasurementDataPackets( EMSTAT_CPO_OR_CD2_INDEX, readPackage, (EMSTAT_VARIABLE_T*)readPackage->package ); readPackage->packageStarted = FALSE; @@ -615,12 +637,27 @@ *************************************************************************/ static void processEmstatMeasurementDataPackets( U08 boardSensorIndex, EMSTAT_READ_T* readPackage, EMSTAT_VARIABLE_T* receivedPackets ) { + +#ifdef PICO_STATUS_CHECK + static int picoCounter = 0; + int picoSensorId = 0; + int picoCounterMax = 10000; +#endif CONDUCTIVITY_SENSORS_T sensorId = readPackage->sensors[ boardSensorIndex ].condSnsr; BOOL convStatus = hexStrToDec( (U08*)&receivedPackets->status, &condSensorStatus[ sensorId ].sensorStatus, sizeof( receivedPackets->status ) ); BOOL isSensorStatusBad = ( EMSTAT_PICO_STATUS_TIMING_NOT_MET == condSensorStatus[ sensorId ].sensorStatus ? TRUE : FALSE ); ALARM_ID_T badHexAlarm = readPackage->sensors[ boardSensorIndex ].condSnsrHex2StrAlarm; BOOL isConvNotValid = FALSE; +#ifdef PICO_STATUS_CHECK + if (picoCounter++ >= picoCounterMax) + { + // simulate error + condSensorStatus[ picoSensorId ].sensorStatus = EMSTAT_PICO_STATUS_TIMING_NOT_MET; + isSensorStatusBad = TRUE; + } +#endif + if ( FALSE == isSensorStatusBad ) { U32 prefix = prefixStrToSIFactor( receivedPackets->prefix ); @@ -635,6 +672,9 @@ condSensorStatus[ sensorId ].rawCondValue = conductivity; } +#ifdef CONDUCTIVITY_BAD_CHAR + convStatus = FALSE; +#endif isConvNotValid = ( TRUE == convStatus ? FALSE : TRUE ); // Check the conductivity sensors bad status alarm checkPersistentAlarm( badHexAlarm, isConvNotValid, isConvNotValid, COND_SENSORS_BAD_CHAR_TIME_OUT_MS );