Index: firmware/App/Controllers/DGInterface.c =================================================================== diff -u -re93b63ee6a4e46aca48197d9d7a5fbd1ecd2b09e -rdbdd97d883c75351fb316ac61911e189986f911e --- firmware/App/Controllers/DGInterface.c (.../DGInterface.c) (revision e93b63ee6a4e46aca48197d9d7a5fbd1ecd2b09e) +++ firmware/App/Controllers/DGInterface.c (.../DGInterface.c) (revision dbdd97d883c75351fb316ac61911e189986f911e) @@ -48,9 +48,10 @@ #define DIALYSATE_TEMP_HIGH_SAFETY_TIMEOUT_MS ( 1 * MS_PER_SECOND ) ///< Dialysate temperature high safety timeout in milliseconds. #define DIALYSATE_TEMP_LOW_SAFETY_LIMIT_C 42.0F ///< Dialysate low safety temperature limit in C. #define DIALYSATE_TEMP_LOW_SAFETY_TIMEOUT_MS ( 10 * MS_PER_SECOND ) ///< Dialysate temperature low safety timeout in milliseconds. -#define LOAD_CELL_DATA_TIMEOUT_MS ( 2 * MS_PER_SECOND ) ///< Load cell freshness timeout (in ms). +#define DG_DATA_FRESHNESS_TIMEOUT_MS ( 3 * MS_PER_SECOND ) ///< DG data freshness timeout (in ms). -// ********** private data ********** +// ********** private data ********** + static const U32 DIP_LOAD_CELL_DATA_MESSAGE_ALARM_THRESHOLD = ((2 * MS_PER_SECOND) / TASK_GENERAL_INTERVAL); static const U32 DIP_TEMPERATURE_DATA_MESSAGE_ALARM_THRESHOLD = ((2 * MS_PER_SECOND) / TASK_GENERAL_INTERVAL); static const U32 DIP_RESERVOIRS_DATA_MESSAGE_ALARM_THRESHOLD = ((2 * MS_PER_SECOND) / TASK_GENERAL_INTERVAL); @@ -93,10 +94,6 @@ static BOOL dgDialysateTemperatureDataFreshFlag = FALSE; ///< Flag to signal the handleTemperatureReadingsFromDG() to process fresh temperature data static BOOL dgReservoirsDataFreshFlag = FALSE; ///< Flag to signal the handleDGReservoirData() to process fresh reservoirs data static BOOL dgOpModeDataFreshFlag = FALSE; ///< Flag to signal the handleDGOpMode() to process fresh dg op mode data -static U32 loadcellDataMessageFreshStatusCounter = 0; ///< Counter use to trigger alarm if no fresh load cell data message is received -static U32 temperatureDataMessageFreshStatusCounter = 0; ///< Counter use to trigger alarm if no fresh temperature data message is received -static U32 reservoirsDataMessageFreshStatusCounter = 0; ///< Counter use to trigger alarm if no fresh reservoirs data message is received -static U32 dgOpModeDataMessageFreshStatusCounter = 0; ///< Counter use to trigger alarm if no fresh dg op mode data message is received // Reservoir data static DG_RESERVOIR_ID_T dgActiveReservoir = DG_RESERVOIR_2; ///< Latest active reservoir reported by the DG. @@ -175,10 +172,10 @@ initPersistentAlarm( ALARM_ID_HD_DIALYSATE_TEMP_BELOW_TARGET_TEMP, DIALYSATE_TEMP_OUT_OF_TARGET_TIMEOUT_MS, DIALYSATE_TEMP_OUT_OF_TARGET_TIMEOUT_MS ); initPersistentAlarm( ALARM_ID_HD_DIALYSATE_TEMP_ABOVE_TARGET_TEMP, DIALYSATE_TEMP_OUT_OF_TARGET_TIMEOUT_MS, DIALYSATE_TEMP_OUT_OF_TARGET_TIMEOUT_MS ); - initPersistentAlarm( ALARM_ID_HD_NEW_LOAD_CELL_DATA_MESSAGE_NOT_RECEIVE, LOAD_CELL_DATA_TIMEOUT_MS, LOAD_CELL_DATA_TIMEOUT_MS ); - initPersistentAlarm( ALARM_ID_HD_NEW_DIALYSATE_TEMPERATURE_DATA_MESSAGE_NOT_RECEIVE, LOAD_CELL_DATA_TIMEOUT_MS, LOAD_CELL_DATA_TIMEOUT_MS ); - initPersistentAlarm( ALARM_ID_HD_NEW_RESERVOIRS_DATA_MESSAGE_NOT_RECEIVE, LOAD_CELL_DATA_TIMEOUT_MS, LOAD_CELL_DATA_TIMEOUT_MS ); - initPersistentAlarm( ALARM_ID_HD_NEW_DG_OPERATION_MODE_MESSAGE_NOT_RECEIVE, LOAD_CELL_DATA_TIMEOUT_MS, LOAD_CELL_DATA_TIMEOUT_MS ); + initPersistentAlarm( ALARM_ID_HD_NEW_LOAD_CELL_DATA_MESSAGE_NOT_RECEIVE, DG_DATA_FRESHNESS_TIMEOUT_MS, DG_DATA_FRESHNESS_TIMEOUT_MS ); + initPersistentAlarm( ALARM_ID_HD_NEW_DIALYSATE_TEMPERATURE_DATA_MESSAGE_NOT_RECEIVE, DG_DATA_FRESHNESS_TIMEOUT_MS, DG_DATA_FRESHNESS_TIMEOUT_MS ); + initPersistentAlarm( ALARM_ID_HD_NEW_RESERVOIRS_DATA_MESSAGE_NOT_RECEIVE, DG_DATA_FRESHNESS_TIMEOUT_MS, DG_DATA_FRESHNESS_TIMEOUT_MS ); + initPersistentAlarm( ALARM_ID_HD_NEW_DG_OPERATION_MODE_MESSAGE_NOT_RECEIVE, DG_DATA_FRESHNESS_TIMEOUT_MS, DG_DATA_FRESHNESS_TIMEOUT_MS ); } /**********************************************************************//** @@ -223,14 +220,14 @@ { // Trigger alarm if not receiving new load cell data message in timely manner checkDGDataFreshness( ALARM_ID_HD_NEW_LOAD_CELL_DATA_MESSAGE_NOT_RECEIVE, &dgLoadCellDataFreshFlag ); - +/* =========== DN-28AUG2022 for debug only. Will re-install this line. // Trigger alarm if not receiving new dialysate temperature data message in timely manner checkDGDataFreshness( ALARM_ID_HD_NEW_DIALYSATE_TEMPERATURE_DATA_MESSAGE_NOT_RECEIVE, &dgDialysateTemperatureDataFreshFlag ); - +============== */ // Trigger alarm if not receiving new reservoirs data message in timely manner checkDGDataFreshness( ALARM_ID_HD_NEW_RESERVOIRS_DATA_MESSAGE_NOT_RECEIVE, &dgReservoirsDataFreshFlag ); - // Trigger alarm if not receiving new reservoirs data message in timely manner + // Trigger alarm if not receiving new DG op mode message in timely manner checkDGDataFreshness( ALARM_ID_HD_NEW_DG_OPERATION_MODE_MESSAGE_NOT_RECEIVE, &dgOpModeDataFreshFlag ); // Check to see if DG has restarted @@ -347,74 +344,6 @@ /*********************************************************************//** * @brief - * The getLoadCellDataFreshFlag function returns a flag to indicate - * if the load cell data message reported by the DG is fresh or stale data. - * @details Inputs: dgLoadCellDataFreshFlag - * @details Outputs: dgLoadCellDataFreshFlag - * @return T/F flag to indicate fresh/stale status of load cell data. - *************************************************************************/ -BOOL getLoadCellDataFreshFlag( void ) -{ - BOOL result = dgLoadCellDataFreshFlag; - - dgLoadCellDataFreshFlag = FALSE; - - return result; -} - -/*********************************************************************//** - * @brief - * The getTemperatureDataFreshFlag function returns a flag to indicate - * if the temperature data message reported by the DG is fresh or stale data. - * @details Inputs: dgDialysateTemperatureDataFreshFlag - * @details Outputs: dgDialysateTemperatureDataFreshFlag - * @return T/F flag to indicate fresh/stale status of load cell data. - *************************************************************************/ -BOOL getTemperatureDataFreshFlag( void ) // DN-19AUG2022 -{ - BOOL result = dgDialysateTemperatureDataFreshFlag; - - dgDialysateTemperatureDataFreshFlag = FALSE; - - return result; -} - -/*********************************************************************//** - * @brief - * The getReservoirsDataFreshFlag function returns a flag to indicate - * if the reservoirs data message reported by the DG is fresh or stale data. - * @details Inputs: dgReservoirsDataFreshFlag - * @details Outputs: dgReservoirsDataFreshFlag - * @return T/F flag to indicate fresh/stale status of load cell data. - *************************************************************************/ -BOOL getReservoirsDataFreshFlag( void ) // DN-22AUG2022 -{ - BOOL result = dgReservoirsDataFreshFlag; - - dgReservoirsDataFreshFlag = FALSE; - - return result; -} - -/*********************************************************************//** - * @brief - * The getDGOpModeDataFreshFlag function returns a flag to indicate - * if the dg op mode data message reported by the DG is fresh or stale data. - * @details Inputs: dgOpModeDataFreshFlag - * @details Outputs: dgOpModeDataFreshFlag - * @return T/F flag to indicate fresh/stale status of load cell data. - *************************************************************************/ -BOOL getDgOpModeDataFreshFlag( void ) // DN-22AUG2022 -{ - BOOL result = dgOpModeDataFreshFlag; - - dgOpModeDataFreshFlag = FALSE; - - return result; -} - -/*********************************************************************//** - * @brief * The getLoadCellWeight function gets the current load cell weight. * @details Inputs: loadCellWeightInGrams * @details Outputs: none Index: firmware/App/Controllers/DGInterface.h =================================================================== diff -u -re54806da466a8c52e19fd272356dbbfde04171fd -rdbdd97d883c75351fb316ac61911e189986f911e --- firmware/App/Controllers/DGInterface.h (.../DGInterface.h) (revision e54806da466a8c52e19fd272356dbbfde04171fd) +++ firmware/App/Controllers/DGInterface.h (.../DGInterface.h) (revision dbdd97d883c75351fb316ac61911e189986f911e) @@ -149,7 +149,6 @@ DG_RESERVOIR_ID_T getDGInactiveReservoir( void ); BOOL hasDGCompletedReservoirSwitch( void ); BOOL getDialysateFlowDataFreshFlag( void ); -BOOL getLoadCellDataFreshFlag( void ); F32 getDGDialysateFlowRateLMin( void ); F32 getLoadCellWeight( LOAD_CELL_ID_T loadCellID ); F32 getReservoirWeight( DG_RESERVOIR_ID_T resID ); Index: firmware/App/Services/SystemCommMessages.c =================================================================== diff -u -re54806da466a8c52e19fd272356dbbfde04171fd -rdbdd97d883c75351fb316ac61911e189986f911e --- firmware/App/Services/SystemCommMessages.c (.../SystemCommMessages.c) (revision e54806da466a8c52e19fd272356dbbfde04171fd) +++ firmware/App/Services/SystemCommMessages.c (.../SystemCommMessages.c) (revision dbdd97d883c75351fb316ac61911e189986f911e) @@ -2365,8 +2365,6 @@ memcpy( &payload, message->payload, sizeof( TEMPERATURE_SENSORS_DATA_T ) ); setDialysateTemperatureReadings( payload.inletDialysate, payload.outletRedundant ); } - // TODO - what to do if invalid payload length? - // TODO - how to know if DG stops sending these? } /*********************************************************************//** Index: firmware/App/Tasks/TaskGeneral.c =================================================================== diff -u -rc9b434898a8bbe9143b243627ea081e5e0f7a861 -rdbdd97d883c75351fb316ac61911e189986f911e --- firmware/App/Tasks/TaskGeneral.c (.../TaskGeneral.c) (revision c9b434898a8bbe9143b243627ea081e5e0f7a861) +++ firmware/App/Tasks/TaskGeneral.c (.../TaskGeneral.c) (revision dbdd97d883c75351fb316ac61911e189986f911e) @@ -89,6 +89,7 @@ // Run operation mode state machine execOperationModes(); + #ifndef BOARD_WITH_NO_HARDWARE // Manage RTC @@ -115,6 +116,9 @@ // Manage alarm state execAlarmMgmt(); #endif + + // Monitor processor RAM status + execRAMMonitor(); // DN-01SEPT2022 // Manage data to be transmitted to other sub-systems execSystemCommTx();