Index: firmware/App/Controllers/ConductivitySensors.c =================================================================== diff -u -rc20562aef9d0b7487f16aeaa0568f1d92ca844ed -r55c11d87989243f1d755d06910529214db4f7312 --- firmware/App/Controllers/ConductivitySensors.c (.../ConductivitySensors.c) (revision c20562aef9d0b7487f16aeaa0568f1d92ca844ed) +++ firmware/App/Controllers/ConductivitySensors.c (.../ConductivitySensors.c) (revision 55c11d87989243f1d755d06910529214db4f7312) @@ -151,9 +151,6 @@ 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. @@ -530,19 +527,10 @@ rxFifoCount = getFPGAEmstatCPiCPoRxFifoCount(); 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 + // Only process the sensor read if there is a new byteendif 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; @@ -553,20 +541,10 @@ 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) + 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 ); + emstatByte = getFPGAEmstatCD1CD2OutByte(); + processEmstatSensorRead( &emstatBoardRead[ EMSTAT_CD1_CD2_BOARD ], emstatByte ); } break; @@ -596,19 +574,15 @@ 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; @@ -618,6 +592,7 @@ default: if ( TRUE == readPackage->packageStarted ) { + if (readPackage->package[ readPackage->packageIndex ] < EMSTAT_PACKAGE_BUFFER_SIZE ) readPackage->package[ readPackage->packageIndex++ ] = emstatByte; } break; @@ -638,26 +613,12 @@ 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 ); @@ -672,9 +633,6 @@ 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 ); Index: firmware/App/Services/FPGA.c =================================================================== diff -u -rc20562aef9d0b7487f16aeaa0568f1d92ca844ed -r55c11d87989243f1d755d06910529214db4f7312 --- firmware/App/Services/FPGA.c (.../FPGA.c) (revision c20562aef9d0b7487f16aeaa0568f1d92ca844ed) +++ firmware/App/Services/FPGA.c (.../FPGA.c) (revision 55c11d87989243f1d755d06910529214db4f7312) @@ -815,14 +815,30 @@ *************************************************************************/ static FPGA_STATE_T handleFPGAReceiveAllSensorsState( void ) { - static int CRCCounter = 0; - static int NAKCounter = 0; - FPGA_STATE_T result = FPGA_STATE_WRITE_ALL_ACTUATORS; // check bulk write command success - if ( ( FALSE == fpgaWriteCommandResponseReceived ) || ( fpgaWriteResponseBuffer[ 0 ] != FPGA_WRITE_CMD_ACK ) ) + if ( TRUE == fpgaWriteCommandResponseReceived ) { + // The write command completed so check for validity + if ( fpgaWriteResponseBuffer[ 0 ] == FPGA_WRITE_CMD_ACK) + { + // Message is an ack - check CRC + U32 rspSize = FPGA_READ_RSP_HDR_LEN; + U32 crcPos = rspSize; + U16 crc = MAKE_WORD_OF_BYTES( fpgaWriteResponseBuffer[ crcPos ], fpgaWriteResponseBuffer[ crcPos + 1 ] ); + + // Does the FPGA response CRC checkout? + if ( crc != crc16( fpgaWriteResponseBuffer, rspSize ) ) + { + // CRC failed + checkFPGACommFailure(); + } + } + } + else + { + // Timeout - communication error checkFPGACommFailure(); } @@ -833,18 +849,9 @@ if ( fpgaReadResponseBuffer[ 0 ] == FPGA_READ_CMD_ACK ) { U32 rspSize = FPGA_READ_RSP_HDR_LEN + fpgaReadByteSize; - U32 crcPos = rspSize; - U16 crc = MAKE_WORD_OF_BYTES( fpgaReadResponseBuffer[ crcPos ], fpgaReadResponseBuffer[ crcPos + 1 ] ); - U08 address1 = fpgaReadResponseBuffer[1]; //wjb - U08 address2 = fpgaReadResponseBuffer[2]; //wjb - U32 loadCell = getFPGALoadCellA1(); + U32 crcPos = rspSize; + U16 crc = MAKE_WORD_OF_BYTES( fpgaReadResponseBuffer[ crcPos ], fpgaReadResponseBuffer[ crcPos + 1 ] ); - if (fpgaReadResponseBuffer[1] != 0) - CRCCounter++; - - if (fpgaReadResponseBuffer[1] != 0xaa) - NAKCounter++; - // does the FPGA response CRC check out? if ( crc == crc16( fpgaReadResponseBuffer, rspSize ) ) {