Index: firmware/App/Controllers/Heaters.h =================================================================== diff -u -r3d413ac026e89a1324c4b0e99516735ec382fed8 -r66137c87d01cef2f8d20796a29efc928bdb59d50 --- firmware/App/Controllers/Heaters.h (.../Heaters.h) (revision 3d413ac026e89a1324c4b0e99516735ec382fed8) +++ firmware/App/Controllers/Heaters.h (.../Heaters.h) (revision 66137c87d01cef2f8d20796a29efc928bdb59d50) @@ -48,20 +48,6 @@ BOOL startHeater; ///< Flag indicates start or stop heater } TRIMMER_HEATER_CMD_T; -/// Heaters data structure. -typedef struct -{ - F32 mainPrimayHeaterDC; ///< Main primary heater DC - F32 smallPrimaryHeaterDC; ///< Small primary heater DC - F32 trimmerHeaterDC; ///< Trimmer heater DC - F32 primaryTargetTemp; ///< Primary heater target temperature - F32 trimmerTargetTemp; ///< Trimmer heater target temperature - U32 primaryHeaterState; ///< Primary heater state - U32 trimmerHeaterState; ///< Trimmer heater state - F32 primaryEfficiency; ///< Primary heater efficiency - F32 primaryCalcTargetTemp; ///< Primary heater calculated target temperature - F32 trimmerCalcCurrentTemp; ///< Trimmer heater calculated current temperature -} HEATERS_DATA_T; // ********** Public function prototypes ********** Index: firmware/App/Controllers/LoadCell.h =================================================================== diff -u -ra9315539f527b92523b1598ff91e47db4d71dae2 -r66137c87d01cef2f8d20796a29efc928bdb59d50 --- firmware/App/Controllers/LoadCell.h (.../LoadCell.h) (revision a9315539f527b92523b1598ff91e47db4d71dae2) +++ firmware/App/Controllers/LoadCell.h (.../LoadCell.h) (revision 66137c87d01cef2f8d20796a29efc928bdb59d50) @@ -31,16 +31,6 @@ // ********** public definitions ********** -#pragma pack(push,1) -/// Loadcell measurements struct. -typedef struct -{ - F32 loadCellA1inGram; ///< Loadcell A1 measurement in gram - F32 loadCellA2inGram; ///< Loadcell A2 measurement in gram - F32 loadCellB1inGram; ///< Loadcell B1 measurement in gram - F32 loadCellB2inGram; ///< Loadcell B2 measurement in gram -} LOAD_CELL_DATA_T; -#pragma pack(pop) // ********** public function prototypes ********** Index: firmware/App/Controllers/TemperatureSensors.c =================================================================== diff -u -r0f4fbb2a56cdbe35dcedd9cad23867fd7248f86e -r66137c87d01cef2f8d20796a29efc928bdb59d50 --- firmware/App/Controllers/TemperatureSensors.c (.../TemperatureSensors.c) (revision 0f4fbb2a56cdbe35dcedd9cad23867fd7248f86e) +++ firmware/App/Controllers/TemperatureSensors.c (.../TemperatureSensors.c) (revision 66137c87d01cef2f8d20796a29efc928bdb59d50) @@ -989,13 +989,6 @@ data.internalTHDORTD = getTemperatureValue( TEMPSENSORS_INTERNAL_TRO_RTD ); data.internalTDIRTD = getTemperatureValue( TEMPSENSORS_INTERNAL_TDI_RTD ); data.internalCondSnsrTemp = getTemperatureValue( TEMPSENSORS_INTERNAL_COND_TEMP_SENSOR ); - data.primaryThermoCoupleRaw = getFPGAPrimaryHeaterTemp(); - data.primaryColdjuncRaw = getFPGAPrimaryColdJunctionTemp(); - data.trimmerThermoCoupleRaw = getFPGATrimmerHeaterTemp(); - data.trimmerColdjuncRaw = getFPGATrimmerColdJunctionTemp(); - data.cond1Raw = tempSensors[ TEMPSENSORS_CONDUCTIVITY_SENSOR_1 ].rawADCReads[ MAX_NUM_OF_RAW_ADC_SAMPLES - 1 ]; - data.cond2Raw = tempSensors[ TEMPSENSORS_CONDUCTIVITY_SENSOR_2 ].rawADCReads[ MAX_NUM_OF_RAW_ADC_SAMPLES - 1 ]; - broadcastData( MSG_ID_DG_TEMPERATURE_DATA, COMM_BUFFER_OUT_CAN_DG_BROADCAST, (U08*)&data, sizeof( TEMPERATURE_SENSORS_DATA_T ) ); dataPublicationTimerCounter = 0; } Index: firmware/App/Controllers/TemperatureSensors.h =================================================================== diff -u -r544e9782a1b8d444224f41efef38a5204c262722 -r66137c87d01cef2f8d20796a29efc928bdb59d50 --- firmware/App/Controllers/TemperatureSensors.h (.../TemperatureSensors.h) (revision 544e9782a1b8d444224f41efef38a5204c262722) +++ firmware/App/Controllers/TemperatureSensors.h (.../TemperatureSensors.h) (revision 66137c87d01cef2f8d20796a29efc928bdb59d50) @@ -59,35 +59,6 @@ NUM_OF_TEMPERATURE_SENSORS ///< Number of temperature sensors } TEMPERATURE_SENSORS_T; -/// Temperature sensors data. -typedef struct -{ - F32 inletPrimaryHeater; ///< Inlet primary heater temperature sensor - F32 heatDisinfect; ///< Heat Disinfect temperature sensor - F32 outletPrimaryHeater; ///< Outlet primary heater temperature sensor - F32 conductivitySensor1; ///< Conductivity sensor 1 temperature sensor - F32 conductivitySensor2; ///< Conductivity sensor 2 temperature sensor - F32 outletRedundant; ///< Outlet redundant temperature sensor - F32 inletDialysate; ///< Inlet dialysate temperature sensor - F32 primaryHeaterThermocouple; ///< Primary heaters thermocouple sensor - F32 trimmerHeaterThermocouple; ///< Trimmer heater thermocouple sensor - F32 priamyHeaterColdjunction; ///< Primary heaters cold junction temperature sensor - F32 trimmerHeaterColdjunction; ///< Trimmer heater cold junction temperature sensor - F32 primaryHeaterInternal; ///< Primary heaters internal temperature (calculated from thermocouple and cold junction) - F32 trimmerHeaterInternal; ///< Trimmer heater internal temperature (calculated from thermocouple and cold junction) - F32 fpgaBoard; ///< FPGA board temperature sensor - F32 loadCellA1B1; ///< Load cell A1/B1 temperature sensor - F32 loadCellA2B2; ///< Load cell A2/B2 temperature sensor - F32 internalTHDORTD; ///< THDo RTD channel temperature sensor - F32 internalTDIRTD; ///< TDI RTD channel temperature sensor - F32 internalCondSnsrTemp; ///< Conductivity Sensor internal temperature sensor - U32 primaryThermoCoupleRaw; ///< Primary heaters thermocouple raw ADC value // TODO remove later? - U32 primaryColdjuncRaw; ///< Primary heaters cold junction raw ADC value // TODO remove later? - U32 trimmerThermoCoupleRaw; ///< Trimmer heater thermocouple raw ADC value // TODO remove later? - U32 trimmerColdjuncRaw; ///< Trimmer heater cold junction raw ADC value // TODO remove later? - S32 cond1Raw; ///< Conductivity sensor 1 raw temperature ADC value // TODO remove later? - S32 cond2Raw; ///< Conductivity sensor 2 raw temperature ADC value // TODO remove later? -} TEMPERATURE_SENSORS_DATA_T; // ********** public function prototypes ********** Index: firmware/App/Services/AlarmMgmt.c =================================================================== diff -u -rbc29cfd7dc00191e3f5e26c29f7e21bef178d815 -r66137c87d01cef2f8d20796a29efc928bdb59d50 --- firmware/App/Services/AlarmMgmt.c (.../AlarmMgmt.c) (revision bc29cfd7dc00191e3f5e26c29f7e21bef178d815) +++ firmware/App/Services/AlarmMgmt.c (.../AlarmMgmt.c) (revision 66137c87d01cef2f8d20796a29efc928bdb59d50) @@ -292,36 +292,6 @@ /*********************************************************************//** * @brief - * The checkPersistentAlarm function triggers/clears an alarm if an alarm condition - * has persisted/cleared over given time limit. - * @details Inputs: none - * @details Outputs: checks whether an alarm is triggered or an alarm condition is cleared - * @param alarmID ID of alarm to check - * @param isErrorOccured Flag indicates alarm condition is active or not - * @param data alarm data - * @param limit alarm condition limit - * @return TRUE if given alarm is active, FALSE if not - *************************************************************************/ -BOOL checkPersistentAlarm( ALARM_ID_T alarm, BOOL const isErrorOccured, F32 const data, F32 const limit ) -{ - BOOL status = FALSE; - - if ( TRUE == isPersistentAlarmTriggered( alarm, isErrorOccured ) ) - { - SET_ALARM_WITH_2_F32_DATA( alarm, data, limit ); - } - - if ( TRUE == isPersistentAlarmConditionCleared( alarm, isErrorOccured ) ) - { - clearAlarmCondition( alarm ); - status = TRUE; - } - - return status; -} - -/*********************************************************************//** - * @brief * The handleResendActiveAlarmsRequest function processes the request to re-send * all active alarms. * @details Inputs: alarmIsActive[] Index: firmware/App/Services/AlarmMgmt.h =================================================================== diff -u -r0f6b35ef8da4d30793a181750d0a6d5898118120 -r66137c87d01cef2f8d20796a29efc928bdb59d50 --- firmware/App/Services/AlarmMgmt.h (.../AlarmMgmt.h) (revision 0f6b35ef8da4d30793a181750d0a6d5898118120) +++ firmware/App/Services/AlarmMgmt.h (.../AlarmMgmt.h) (revision 66137c87d01cef2f8d20796a29efc928bdb59d50) @@ -100,7 +100,6 @@ void clearAlarmCondition( ALARM_ID_T alarm ); BOOL isAlarmActive( ALARM_ID_T alarm ); -BOOL checkPersistentAlarm( ALARM_ID_T alarm, BOOL const isErrorOccured, F32 const data, F32 const limit ); void handleResendActiveAlarmsRequest( void ); BOOL testSetAlarmStateOverride( U32 alarmID, BOOL value ); Index: firmware/App/Services/FPGA.c =================================================================== diff -u -r19056bcb960b73405326d038abcea63b6862e344 -r66137c87d01cef2f8d20796a29efc928bdb59d50 --- firmware/App/Services/FPGA.c (.../FPGA.c) (revision 19056bcb960b73405326d038abcea63b6862e344) +++ firmware/App/Services/FPGA.c (.../FPGA.c) (revision 66137c87d01cef2f8d20796a29efc928bdb59d50) @@ -93,6 +93,8 @@ /// FPGA size of V3 read bytes. #define FPGA_SIZE_OF_V3_READ_BYTES ( FPGA_READ_V3_END_BYTE_NUM - FPGA_READ_V3_START_BYTE_NUM ) +#define PROCESSOR_FPGA_CLOCK_DIFF_TOLERANCE 1 ///< Tolerance for processor clock speed check against FPGA clock. + // FPGA header struct. #pragma pack(push,1) typedef struct @@ -340,6 +342,11 @@ static FPGA_ACTUATORS_T fpgaActuatorSetPoints; ///< FPGA actuator set points structure. static U08 fpgaReadByteSize; ///< FPGA read byte size. +//#ifndef DEBUG_ENABLED - TODO: uncomment it DN-15SEPT2022 +static U16 currentFPGATimerCount_ms; ///< Current FPGA timer count in ms. +static U32 currentTimerCount_ms; ///< Current processor timer count in ms. +//#endif + // ********** private function prototypes ********** static FPGA_STATE_T handleFPGAReadHeaderState( void ); @@ -895,23 +902,27 @@ *************************************************************************/ void execFPGAClockSpeedTest( void ) { -#ifndef DEBUG_ENABLED +//#ifndef DEBUG_ENABLED - TODO: uncomment it DN-15SEPT2022 U16 const newFPGATimerCount_ms = getFPGATimerCount(); U32 const newTimerCount_ms = getMSTimerCount(); U32 const diffFPGATimerCount = (U32)u16DiffWithWrap( currentFPGATimerCount_ms, newFPGATimerCount_ms ); U32 const diffTimerCount = u32DiffWithWrap( currentTimerCount_ms, newTimerCount_ms ); - if ( getCurrentOperationMode() > MODE_INIT ) + if ( getCurrentOperationMode() != DG_MODE_INIT ) { if ( abs( diffFPGATimerCount - diffTimerCount ) > PROCESSOR_FPGA_CLOCK_DIFF_TOLERANCE ) { - SET_ALARM_WITH_2_U32_DATA( ALARM_ID_DG_FPGA_CLOCK_SPEED_CHECK_FAILURE, diffFPGATimerCount, diffTimerCount ); + if ( TRUE == incTimeWindowedCount( TIME_WINDOWED_COUNT_FPGA_CLOCK_SPEED_ERROR ) ) // DN-16SEPT2022 + { + SET_ALARM_WITH_2_U32_DATA( ALARM_ID_DG_FPGA_CLOCK_SPEED_CHECK_FAILURE, diffFPGATimerCount, diffTimerCount ); + } + } } currentFPGATimerCount_ms = newFPGATimerCount_ms; currentTimerCount_ms = newTimerCount_ms; -#endif +//#endif } /*********************************************************************//** * @brief Index: firmware/App/Services/SystemComm.c =================================================================== diff -u -r0f6b35ef8da4d30793a181750d0a6d5898118120 -r66137c87d01cef2f8d20796a29efc928bdb59d50 --- firmware/App/Services/SystemComm.c (.../SystemComm.c) (revision 0f6b35ef8da4d30793a181750d0a6d5898118120) +++ firmware/App/Services/SystemComm.c (.../SystemComm.c) (revision 66137c87d01cef2f8d20796a29efc928bdb59d50) @@ -52,6 +52,9 @@ #define MSG_NOT_ACKED_MAX_RETRIES 3 ///< maximum number of times a message that requires ACK that was not ACK'd can be re-sent before alarm #define PENDING_ACK_LIST_SIZE 25 ///< maximum number of Delanli messages that can be pending ACK at any given time +#define MAX_FPGA_CLOCK_SPEED_ERRORS 3 ///< maximum number of FPGA clock speed errors within window period before alarm - // DN-16SEPT2022 +#define MAX_FPGA_CLOCK_SPEED_ERROR_WINDOW_MS (10 * SEC_PER_MIN * MS_PER_SECOND) ///< FPGA clock speed error window - // DN-16SEPT2022 + #pragma pack(push, 1) /// Record for transmitted message that is pending acknowledgement from receiver. @@ -136,6 +139,9 @@ // initialize bad message CRC time windowed count initTimeWindowedCount( TIME_WINDOWED_COUNT_BAD_MSG_CRC, MAX_COMM_CRC_FAILURES, MAX_COMM_CRC_FAILURE_WINDOW_MS ); + // initialize FPGA clock speed error time windowed count + initTimeWindowedCount( TIME_WINDOWED_COUNT_FPGA_CLOCK_SPEED_ERROR, MAX_FPGA_CLOCK_SPEED_ERRORS, MAX_FPGA_CLOCK_SPEED_ERROR_WINDOW_MS); // DN-16SEPT2022 + // initialize pending ACK list for ( i = 0; i < PENDING_ACK_LIST_SIZE; i++ ) {