Index: firmware/App/Controllers/LoadCell.c =================================================================== diff -u -r99f5ab33592dc20345212256e11c3184aa7460cc -r497dc26e76083742903525aab1490a6900e94969 --- firmware/App/Controllers/LoadCell.c (.../LoadCell.c) (revision 99f5ab33592dc20345212256e11c3184aa7460cc) +++ firmware/App/Controllers/LoadCell.c (.../LoadCell.c) (revision 497dc26e76083742903525aab1490a6900e94969) @@ -20,6 +20,7 @@ #include "FPGA.h" #include "LoadCell.h" #include "NVDataMgmt.h" +#include "PersistentAlarm.h" #include "SystemCommMessages.h" #include "TaskPriority.h" @@ -33,20 +34,23 @@ // TODO check the maximum weight on the load cells in tare. There was 1500 grams limit // but it has been removed. Check the load cells data sheet. -#define LOAD_CELL_REPORT_PERIOD (100 / TASK_PRIORITY_INTERVAL) ///< Broadcast load cell values message every 100 ms. +#define LOAD_CELL_REPORT_PERIOD (100 / TASK_PRIORITY_INTERVAL) ///< Broadcast load cell values message every 100 ms. /// Conversion factor from ADC counts to grams. static const F32 ADC2GRAM = (0.0894 * 1.1338); #define LOAD_CELL_FILTER_ALPHA 0.05 ///< Alpha factor for the alpha filter used on load cell readings. -#define SIZE_OF_SMALL_LOAD_CELL_AVG 100 ///< Small load cell moving average has 100 raw samples @ 10ms intervals (1-second). -#define SIZE_OF_LARGE_LOAD_CELL_AVG 40 ///< Large load cell moving average has 40 samples from small filter @ 100ms intervals (4-second). +#define SIZE_OF_SMALL_LOAD_CELL_AVG 100 ///< Small load cell moving average has 100 raw samples @ 10ms intervals (1-second). +#define SIZE_OF_LARGE_LOAD_CELL_AVG 40 ///< Large load cell moving average has 40 samples from small filter @ 100ms intervals (4-second). +#define LOAD_CELL_ADC_ERROR_PERSISTENCE 500 ///< Alarm persistence period (in ms) for load cell ADC errors. + /// Load cell data structure. typedef struct { - U32 rawReading; ///< Latest raw load cell reading. - OVERRIDE_F32_T weight; ///< Latest load cell weight. - F32 autoCalOffset; ///< Load cell auto-calibration offset. + U32 rawReading; ///< Latest raw load cell reading + OVERRIDE_F32_T weight; ///< Latest load cell weight + F32 autoCalOffset; ///< Load cell auto-calibration offset + F32 loadCellVelocity_g_min; ///< Velocity (in g/min) of load cell. F32 smallFilterReadings[ SIZE_OF_SMALL_LOAD_CELL_AVG ]; ///< Load cell samples for small load cell moving average. F32 smallFilterTotal; ///< Small filter rolling total - used to calc small load cell moving average. @@ -116,6 +120,8 @@ { loadcells[ i ].largeFilterReadings[ j ] = 0.0; } + + loadcells[ i ].loadCellVelocity_g_min = 0.0; } // Set all the load cells' calibration values to benign values @@ -128,6 +134,9 @@ loadCellsCalRecord.loadCells[ cell ].gain = 1.0; loadCellsCalRecord.loadCells[ cell ].offset = 0.0; } + + // Initialize persistent alarm(s) + initPersistentAlarm( ALARM_ID_DG_LOAD_CELL_ADC_ERROR, 0, LOAD_CELL_ADC_ERROR_PERSISTENCE ); } /*********************************************************************//** @@ -141,13 +150,27 @@ void execLoadCell( void ) { U32 ii; + U32 a1 = getFPGALoadCellA1(); + U32 a2 = getFPGALoadCellA2(); + U32 b1 = getFPGALoadCellB1(); + U32 b2 = getFPGALoadCellB2(); // update sums for load cell average calculations - loadcells[ LOAD_CELL_RESERVOIR_1_PRIMARY ].rawReading = getFPGALoadCellA1(); - loadcells[ LOAD_CELL_RESERVOIR_1_BACKUP ].rawReading = getFPGALoadCellA2(); - loadcells[ LOAD_CELL_RESERVOIR_2_PRIMARY ].rawReading = getFPGALoadCellB1(); - loadcells[ LOAD_CELL_RESERVOIR_2_BACKUP ].rawReading = getFPGALoadCellB2(); + loadcells[ LOAD_CELL_RESERVOIR_1_PRIMARY ].rawReading = a1 & MASK_OFF_U32_MSB; + loadcells[ LOAD_CELL_RESERVOIR_1_BACKUP ].rawReading = a2 & MASK_OFF_U32_MSB; + loadcells[ LOAD_CELL_RESERVOIR_2_PRIMARY ].rawReading = b1 & MASK_OFF_U32_MSB; + loadcells[ LOAD_CELL_RESERVOIR_2_BACKUP ].rawReading = b2 & MASK_OFF_U32_MSB; + // Check error bits from new readings + a1 = ( a1 >> 31 ) << SHIFT_24_BITS; + a2 = ( a2 >> 31 ) << SHIFT_16_BITS_FOR_WORD_SHIFT; + b1 = ( b1 >> 31 ) << SHIFT_8_BITS_FOR_BYTE_SHIFT; + b2 = ( b2 >> 31 ); + if ( TRUE == isPersistentAlarmTriggered( ALARM_ID_DG_LOAD_CELL_ADC_ERROR, ( ( a1 > 0 ) || ( a2 > 0 ) || ( b1 > 0 ) || ( b2 > 0 ) ) ) ) + { + SET_ALARM_WITH_1_U32_DATA( ALARM_ID_DG_LOAD_CELL_ADC_ERROR, ( a1 | a2 | b1 | b2 ) ) + } + // Check if a new calibration is available if ( isNewCalibrationRecordAvailable() == TRUE ) { @@ -173,6 +196,7 @@ loadcells[ ii ].weight.data * loadCellsCalRecord.loadCells[ (CAL_DATA_DG_LOAD_CELLS_T)ii ].gain + loadCellsCalRecord.loadCells[ (CAL_DATA_DG_LOAD_CELLS_T)ii ].offset; loadcells[ ii ].weight.data = loadcells[ ii ].weight.data - loadcells[ ii ].autoCalOffset; + loadcells[ ii ].loadCellVelocity_g_min = ( getLoadCellWeight( (LOAD_CELL_ID_T)ii ) - loadcells[ ii ].smallFilterReadings[ smallReadingsIdx ] ) * (F32)SEC_PER_MIN; // Update small filter with new weight sample loadcells[ ii ].smallFilterTotal -= loadcells[ ii ].smallFilterReadings[ smallReadingsIdx ]; @@ -292,7 +316,7 @@ } else { - activateAlarmNoData( ALARM_ID_DG_SOFTWARE_FAULT ); + SET_ALARM_WITH_2_U32_DATA( ALARM_ID_DG_SOFTWARE_FAULT, SW_FAULT_ID_INVALID_LOAD_CELL_ID, (U32)loadCellID ) } return result; @@ -317,7 +341,7 @@ } else { - activateAlarmNoData( ALARM_ID_DG_SOFTWARE_FAULT ); + SET_ALARM_WITH_2_U32_DATA( ALARM_ID_DG_SOFTWARE_FAULT, SW_FAULT_ID_INVALID_LOAD_CELL_ID, (U32)loadCellID ) } return result; @@ -334,22 +358,47 @@ *************************************************************************/ F32 getLoadCellLargeFilteredWeight( LOAD_CELL_ID_T loadCellID ) { - F32 result = 0; + F32 result = 0.0; if ( loadCellID < NUM_OF_LOAD_CELLS ) { result = loadcells[ loadCellID ].largeFilteredWeight; } else { - activateAlarmNoData( ALARM_ID_DG_SOFTWARE_FAULT ); + SET_ALARM_WITH_2_U32_DATA( ALARM_ID_DG_SOFTWARE_FAULT, SW_FAULT_ID_INVALID_LOAD_CELL_ID, (U32)loadCellID ) } return result; } /*********************************************************************//** * @brief + * The getLoadCellVelocity function gets the current velocity (in g/min) + * for the given load cell. + * @details Inputs: loadcells[] + * @details Outputs: none + * @param loadCellID ID of load cell to get velocity + * @return the velocity (in g/min) for the given load cell ID. + *************************************************************************/ +F32 getLoadCellVelocity( LOAD_CELL_ID_T loadCellID ) +{ + F32 result = 0.0; + + if ( loadCellID < NUM_OF_LOAD_CELLS ) + { + result = loadcells[ loadCellID ].loadCellVelocity_g_min; + } + else + { + SET_ALARM_WITH_2_U32_DATA( ALARM_ID_DG_SOFTWARE_FAULT, SW_FAULT_ID_INVALID_LOAD_CELL_ID, (U32)loadCellID ) + } + + return result; +} + +/*********************************************************************//** + * @brief * The getLoadCellDataPublishInterval function gets the load cell data publish interval. * @details Inputs: loadCellDataPublishInterval * @details Outputs: none Index: firmware/App/Controllers/TemperatureSensors.c =================================================================== diff -u -r76f413c7bde4ca9d12cc61e0191daddb1e86e9f1 -r497dc26e76083742903525aab1490a6900e94969 --- firmware/App/Controllers/TemperatureSensors.c (.../TemperatureSensors.c) (revision 76f413c7bde4ca9d12cc61e0191daddb1e86e9f1) +++ firmware/App/Controllers/TemperatureSensors.c (.../TemperatureSensors.c) (revision 497dc26e76083742903525aab1490a6900e94969) @@ -14,7 +14,8 @@ * @date (original) 08-Apr-2020 * ***************************************************************************/ -#include // For temperature calculation +#include // For temperature calculation +#include // For memset() #include "FPGA.h" #include "PersistentAlarm.h" @@ -37,6 +38,7 @@ #define PRIMARY_HEATER_EXT_TEMP_SENSORS_0_DEGREE_RESISTANCE 1000U ///< Primary heater external temperature sensors zero degree resistance. #define COND_SENSORS_TEMP_SENSOR_GAIN 8U ///< Temperature sensor for conductivity gain. + #define COND_SENSORS_TEMP_SENSOR_REF_RESISTANCE 19600U ///< Temperature sensor for conductivity reference resistance. #define COND_SENSORS_TEMP_SENSOR_0_DEGREE_RESISTANCE 1000U ///< Temperature sensor for conductivity zero degree resistance. @@ -712,29 +714,54 @@ *************************************************************************/ static TEMPSENSORS_EXEC_STATES_T handleExecGetADCValues( void ) { + U32 rawADC = 0; + U32 errorCount = 0; + U32 readCount = 0; + // Look at the error counter and the specific error flag to make sure the error is a temperature sensor // Add a byte array to have bits for each sensor to find out exactly what sensor failed if ( ++fpgaRawADCReadInterval >= FPGA_RAW_ADC_READ_INTERVAL_COUNT ) { - processTempSnsrsADCRead( TEMPSENSORS_INLET_PRIMARY_HEATER, getFPGATPiTemp(), getFPGARTDErrorCount(), getFPGARTDReadCount() ); - processTempSnsrsADCRead( TEMPSENSORS_OUTLET_PRIMARY_HEATER, getFPGATPoTemp(), getFPGARTDErrorCount(), getFPGARTDReadCount() ); - processTempSnsrsADCRead( TEMPSENSORS_CONDUCTIVITY_SENSOR_1, getFPGACD1Temp(), getFPGARTDErrorCount(), getFPGARTDReadCount() ); - processTempSnsrsADCRead( TEMPSENSORS_CONDUCTIVITY_SENSOR_2, getFPGACD2Temp(), getFPGARTDErrorCount(), getFPGARTDReadCount() ); - processTempSnsrsADCRead( TEMPSENSORS_OUTLET_REDUNDANT, getFPGATHDoTemp(), getFPGATRoErrorCount(), getFPGATRoReadCount() ); - processTempSnsrsADCRead( TEMPSENSORS_INLET_DIALYSATE, getFPGATDiTemp(), getFPGATDiErrorCount(), getFPGATDiReadCount() ); + rawADC = getFPGATPiTemp(); + errorCount = (U32)getFPGARTDErrorCount(); + readCount = (U32)getFPGARTDReadCount(); + processTempSnsrsADCRead( TEMPSENSORS_INLET_PRIMARY_HEATER, rawADC, errorCount, readCount ); - processHtrsTempSnsrsADCRead( TEMPSENSORS_PRIMARY_HEATER_THERMO_COUPLE, getFPGAPrimaryHeaterTemp(), getFPGAPrimaryHeaterFlags(), - getFPGAPrimaryHeaterReadCount() ); + rawADC = getFPGATPoTemp(); + processTempSnsrsADCRead( TEMPSENSORS_OUTLET_PRIMARY_HEATER, rawADC, errorCount, readCount ); - processHtrsTempSnsrsADCRead( TEMPSENSORS_TRIMMER_HEATER_THERMO_COUPLE, getFPGATrimmerHeaterTemp(), getFPGATrimmerHeaterFlags(), - getFPGATrimmerHeaterReadCount() ); + rawADC = getFPGACD1Temp(); + processTempSnsrsADCRead( TEMPSENSORS_CONDUCTIVITY_SENSOR_1, rawADC, errorCount, readCount ); - processHtrsTempSnsrsADCRead( TEMPSENSORS_PRIMARY_HEATER_COLD_JUNCTION, getFPGAPrimaryColdJunctionTemp(), getFPGAPrimaryHeaterFlags(), - getFPGAPrimaryHeaterReadCount() ); + rawADC = getFPGACD2Temp(); + processTempSnsrsADCRead( TEMPSENSORS_CONDUCTIVITY_SENSOR_2, rawADC, errorCount, readCount ); - processHtrsTempSnsrsADCRead( TEMPSENSORS_TRIMMER_HEATER_COLD_JUNCTION, getFPGATrimmerColdJunctionTemp(), getFPGATrimmerHeaterFlags(), - getFPGATrimmerHeaterReadCount() ); + rawADC = getFPGATHDoTemp(); + errorCount = (U32)getFPGATRoErrorCount(); + readCount = (U32)getFPGATRoReadCount(); + processTempSnsrsADCRead( TEMPSENSORS_OUTLET_REDUNDANT, rawADC, errorCount, readCount ); + rawADC = getFPGATDiTemp(); + errorCount = (U32)getFPGATDiErrorCount(); + readCount = (U32)getFPGATDiReadCount(); + processTempSnsrsADCRead( TEMPSENSORS_INLET_DIALYSATE, rawADC, errorCount, readCount ); + + rawADC = getFPGAPrimaryHeaterTemp(); + errorCount = (U32)getFPGAPrimaryHeaterFlags(); + readCount = (U32)getFPGAPrimaryHeaterReadCount(); + processHtrsTempSnsrsADCRead( TEMPSENSORS_PRIMARY_HEATER_THERMO_COUPLE, rawADC, errorCount, readCount ); + + rawADC = getFPGAPrimaryColdJunctionTemp(); + processHtrsTempSnsrsADCRead( TEMPSENSORS_PRIMARY_HEATER_COLD_JUNCTION, rawADC, errorCount, readCount ); + + rawADC = getFPGATrimmerHeaterTemp(); + errorCount = (U32)getFPGATrimmerHeaterFlags(); + readCount = (U32)getFPGATrimmerHeaterReadCount(); + processHtrsTempSnsrsADCRead( TEMPSENSORS_TRIMMER_HEATER_THERMO_COUPLE, rawADC, errorCount, readCount ); + + rawADC = getFPGATrimmerHeaterTemp(); + processHtrsTempSnsrsADCRead( TEMPSENSORS_TRIMMER_HEATER_COLD_JUNCTION, rawADC, errorCount, readCount ); + // NOTE: FPGA board temperature sensor is different from the rest of the sensors. This sensor does not have FPGA count and error // coming from FPGA. It is kept here to do moving average on the values. The supporting functions need to see the FPGA read count // incrementing internally so there will not be any errors. @@ -812,10 +839,10 @@ data.internalTHDORTD = getTemperatureValue ( TEMPSENSORS_INTERNAL_THDO_RTD ); data.internalTDIRTD = getTemperatureValue ( TEMPSENSORS_INTERNAL_TDI_RTD ); data.internalCondSnsrTemp = getTemperatureValue ( TEMPSENSORS_INTERNAL_COND_TEMP_SENSOR ); - data.primaryThermoCoupleRaw = tempSensors[ TEMPSENSORS_PRIMARY_HEATER_THERMO_COUPLE ].rawADCReads[ MAX_NUM_OF_RAW_ADC_SAMPLES - 1 ]; - data.primaryColdjuncRaw = tempSensors[ TEMPSENSORS_PRIMARY_HEATER_COLD_JUNCTION ].rawADCReads[ MAX_NUM_OF_RAW_ADC_SAMPLES - 1 ]; - data.trimmerThermoCoupleRaw = tempSensors[ TEMPSENSORS_TRIMMER_HEATER_THERMO_COUPLE ].rawADCReads[ MAX_NUM_OF_RAW_ADC_SAMPLES - 1 ]; - data.trimmerColdjuncRaw = tempSensors[ TEMPSENSORS_TRIMMER_HEATER_COLD_JUNCTION ].rawADCReads[ MAX_NUM_OF_RAW_ADC_SAMPLES - 1 ]; + 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 ]; Index: firmware/App/Modes/ModeFault.c =================================================================== diff -u -rd7926685f2fe3086bab183166119f0965a192a69 -r497dc26e76083742903525aab1490a6900e94969 --- firmware/App/Modes/ModeFault.c (.../ModeFault.c) (revision d7926685f2fe3086bab183166119f0965a192a69) +++ firmware/App/Modes/ModeFault.c (.../ModeFault.c) (revision 497dc26e76083742903525aab1490a6900e94969) @@ -57,6 +57,11 @@ *************************************************************************/ void transitionToFaultMode( void ) { + // Publish POST failure status to UI if fault triggered in Init/POST mode + if ( DG_MODE_INIT == getPreviousOperationMode() ) + { + // TODO - send POST failure to UI + } } /*********************************************************************//** Index: firmware/App/Services/AlarmMgmt.h =================================================================== diff -u -r7b6b599a6f98241bc51bbee65b736b92cb881f01 -r497dc26e76083742903525aab1490a6900e94969 --- firmware/App/Services/AlarmMgmt.h (.../AlarmMgmt.h) (revision 7b6b599a6f98241bc51bbee65b736b92cb881f01) +++ firmware/App/Services/AlarmMgmt.h (.../AlarmMgmt.h) (revision 497dc26e76083742903525aab1490a6900e94969) @@ -153,17 +153,18 @@ SW_FAULT_ID_INVALID_TEMPERATURE_SENSOR_SELECTED, SW_FAULT_ID_DRAIN_PUMP_INVALID_RPM_SELECTED, SW_FAULT_ID_ALARM_MGMT_INVALID_ALARM_ID, - SW_FAULT_ID_HEAT_DISINFECT_INVALID_EXEC_STATE, // 75 + SW_FAULT_ID_DG_FLUSH_INVALID_EXEC_STATE, // 75 + SW_FAULT_ID_HEAT_DISINFECT_INVALID_EXEC_STATE, SW_FAULT_ID_INVALID_DG_RESERVOIR_SELECTED, SW_FAULT_ID_STANDBY_MODE_INVALID_EXEC_STATE, SW_FAULT_ID_RECIRC_MODE_INVALID_EXEC_STATE, - SW_FAULT_ID_DRAIN_MODE_INVALID_EXEC_STATE, - SW_FAULT_ID_FILL_MODE_INVALID_EXEC_STATE, // 80 + SW_FAULT_ID_DRAIN_MODE_INVALID_EXEC_STATE, // 80 + SW_FAULT_ID_FILL_MODE_INVALID_EXEC_STATE, SW_FAULT_ID_PRESSURE_INVALID_EXEC_STATE, SW_FAULT_ID_INVALID_NVDATAMGMT_EXEC_CAL_STATE, SW_FAULT_ID_INVALID_VOLTAGE_MONITOR_STATE, - SW_FAULT_ID_INVALID_MONITORED_VOLTAGE_ID, - SW_FAULT_ID_INVALID_LOAD_CELL_ID, // 85 + SW_FAULT_ID_INVALID_MONITORED_VOLTAGE_ID, // 85 + SW_FAULT_ID_INVALID_LOAD_CELL_ID, NUM_OF_SW_FAULT_IDS } SW_FAULT_ID_T; Index: firmware/App/Services/SystemComm.c =================================================================== diff -u -r3eb7c2e62c727be195cd937d49957db9d4ba83b4 -r497dc26e76083742903525aab1490a6900e94969 --- firmware/App/Services/SystemComm.c (.../SystemComm.c) (revision 3eb7c2e62c727be195cd937d49957db9d4ba83b4) +++ firmware/App/Services/SystemComm.c (.../SystemComm.c) (revision 497dc26e76083742903525aab1490a6900e94969) @@ -1154,6 +1154,14 @@ handleTestDGAccelBroadcastIntervalOverrideRequest( message ); break; + case MSG_ID_DG_MONITORED_VOLTAGES_SEND_INTERVAL_OVERRIDE: + handleTestMonitoredVoltagesSendIntervalOverrideRequest( message ); + break; + + case MSG_ID_DG_MONITORED_VOLTAGES_OVERRIDE: + handleTestMonitoredVoltageOverrideRequest( message ); + break; + case MSG_ID_DRAIN_PUMP_SET_DELTA_PRESSURE_OVERRIDE: handleSetDrainPumpDeltaPressureOverrideRequest( message ); break; Index: firmware/App/Services/SystemCommMessages.c =================================================================== diff -u -r35de566c96433689821b7a21f731df26b40d67ae -r497dc26e76083742903525aab1490a6900e94969 --- firmware/App/Services/SystemCommMessages.c (.../SystemCommMessages.c) (revision 35de566c96433689821b7a21f731df26b40d67ae) +++ firmware/App/Services/SystemCommMessages.c (.../SystemCommMessages.c) (revision 497dc26e76083742903525aab1490a6900e94969) @@ -26,6 +26,7 @@ #include "FPGA.h" #include "Heaters.h" #include "LoadCell.h" +#include "ModeFlush.h" #include "ModeStandby.h" #include "ModeRecirculate.h" #include "MsgQueues.h" @@ -1048,6 +1049,33 @@ /*********************************************************************//** * @brief + * The broadcastFlushData function sends out the flush mode data. + * @details Inputs: none + * @details Outputs: flush data msg constructed and queued + * @param flushData which is flush msg constructed and queued + * @return TRUE if msg successfully queued for transmit, FALSE if not + *************************************************************************/ +BOOL broadcastFlushData( MODE_FLUSH_DATA_T *flushData ) +{ + BOOL result; + MESSAGE_T msg; + U08 *payloadPtr = msg.payload; + + // create a message record + blankMessage( &msg ); + msg.hdr.msgID = MSG_ID_DG_FLUSH_DATA; + msg.hdr.payloadLen = sizeof( MODE_FLUSH_DATA_T ); + + memcpy( payloadPtr, flushData, sizeof( MODE_FLUSH_DATA_T ) ); + + // serialize the message (w/ sync, CRC, and appropriate CAN padding) and add serialized message data to appropriate comm buffer + result = serializeMessage( msg, COMM_BUFFER_OUT_CAN_DG_BROADCAST, ACK_NOT_REQUIRED ); + + return result; +} + +/*********************************************************************//** + * @brief * The sendDGSystemRecord function sends out the DG system record. * @details Inputs: none * @details Outputs: DG system record msg constructed and queued @@ -2906,6 +2934,41 @@ /*********************************************************************//** * @brief +* The handleStartStopDGFlush function handles a request to override start +* or stop DG flush mode. +* @details Inputs: none +* @details Outputs: message handled +* @param message a pointer to the message to handle +* @return none +*************************************************************************/ +BOOL handleStartStopDGFlush( MESSAGE_T *message ) +{ + BOOL result = FALSE; + + if ( message->hdr.payloadLen == sizeof(U32) ) + { + BOOL startingDGFlush; + + memcpy( &startingDGFlush, message->payload, sizeof(U32) ); + + if ( TRUE == startingDGFlush ) + { + result = startDGFlush(); + } + else + { + result = stopDGFlush(); + } + } + + // Respond to request + sendAckResponseMsg( (MSG_ID_T)message->hdr.msgID, COMM_BUFFER_OUT_CAN_DG_2_HD, result ); + + return result; +} + +/*********************************************************************//** +* @brief * The handleGetDGCalibrationRecord function handles a request to get the DG * calibration data record. * @details Inputs: none Index: firmware/App/Services/SystemCommMessages.h =================================================================== diff -u -r3eb7c2e62c727be195cd937d49957db9d4ba83b4 -r497dc26e76083742903525aab1490a6900e94969 --- firmware/App/Services/SystemCommMessages.h (.../SystemCommMessages.h) (revision 3eb7c2e62c727be195cd937d49957db9d4ba83b4) +++ firmware/App/Services/SystemCommMessages.h (.../SystemCommMessages.h) (revision 497dc26e76083742903525aab1490a6900e94969) @@ -32,6 +32,7 @@ #include "TemperatureSensors.h" #include "Thermistors.h" #include "UVReactors.h" +#include "Voltages.h" /** * @defgroup SystemCommMessages SystemCommMessages @@ -114,6 +115,9 @@ // MSG_ID_DG_FLUSH_DATA BOOL broadcastFlushData( MODE_FLUSH_DATA_T *flushData ); +// MSG_ID_DG_VOLTAGES_DATA +BOOL broadcastVoltagesData( VOLTAGES_DATA_PAYLOAD_T data ); + // MSG_ID_DG_COMMAND_RESPONSE void sendCommandResponseMsg( DG_CMD_RESPONSE_T *cmdResponsePtr ); @@ -254,6 +258,12 @@ // MSG_ID_DG_ACCEL_SEND_INTERVAL_OVERRIDE: void handleTestDGAccelBroadcastIntervalOverrideRequest( MESSAGE_T *message ); +// MSG_ID_DG_MONITORED_VOLTAGES_SEND_INTERVAL_OVERRIDE +void handleTestMonitoredVoltagesSendIntervalOverrideRequest( MESSAGE_T *message ); + +// MSG_ID_DG_MONITORED_VOLTAGES_OVERRIDE +void handleTestMonitoredVoltageOverrideRequest( MESSAGE_T *message ); + // MSG_ID_DG_START_STOP_INLET_UV_REACTOR void handleStartStopUVReactors( MESSAGE_T *message ); Index: firmware/DG.dil =================================================================== diff -u -r35de566c96433689821b7a21f731df26b40d67ae -r497dc26e76083742903525aab1490a6900e94969 --- firmware/DG.dil (.../DG.dil) (revision 35de566c96433689821b7a21f731df26b40d67ae) +++ firmware/DG.dil (.../DG.dil) (revision 497dc26e76083742903525aab1490a6900e94969) @@ -1,4 +1,8 @@ +<<<<<<< HEAD +# RM46L852PGE 04/27/21 16:18:17 +======= # RM46L852PGE 04/21/21 17:25:51 +>>>>>>> DEN-7605-hd_dg_dev-self-tests # ARCH=RM46L852PGE # @@ -311,7 +315,7 @@ DRIVER.SYSTEM.VAR.VIM_CHANNEL_8_INT_ENABLE.VALUE=0 DRIVER.SYSTEM.VAR.SAFETY_INIT_STC_CPUSELFTEST_ENA.VALUE=0 DRIVER.SYSTEM.VAR.ETPWM2_ENABLE.VALUE=1 -DRIVER.SYSTEM.VAR.HET1_ENABLE.VALUE=0 +DRIVER.SYSTEM.VAR.HET1_ENABLE.VALUE=1 DRIVER.SYSTEM.VAR.CLKT_RTI1_PRE_SOURCE.VALUE=PLL1 DRIVER.SYSTEM.VAR.FLASH_MODE_VALUE.VALUE=1 DRIVER.SYSTEM.VAR.CORE_MPU_REGION_5_SIZE_VALUE.VALUE=0x19 @@ -923,7 +927,7 @@ DRIVER.SYSTEM.VAR.VIM_CHANNEL_19_INT_PRAGMA_ENABLE.VALUE=0 DRIVER.SYSTEM.VAR.SAFETY_INIT_FRAY_RAMPARITYCHECK_ENA.VALUE=0 DRIVER.SYSTEM.VAR.SAFETY_INIT_DMA_DP_PBISTCHECK_ENA.VALUE=0x00000800 -DRIVER.SYSTEM.VAR.HET_ENABLE.VALUE=0 +DRIVER.SYSTEM.VAR.HET_ENABLE.VALUE=1 DRIVER.SYSTEM.VAR.PBIST_ALGO_13_14.VALUE=0 DRIVER.SYSTEM.VAR.RAM_STACK_UNDEF_BASE.VALUE=0x08004800 DRIVER.SYSTEM.VAR.RAM_STACK_SVC_BASE.VALUE=0x08001000 @@ -5957,7 +5961,7 @@ DRIVER.HET.VAR.HET1_BIT27_PSL.VALUE=0x00000000 DRIVER.HET.VAR.HET1_BIT19_PSL.VALUE=0x00080000 DRIVER.HET.VAR.HET2_EDGE6_LVL.VALUE=0x00000000 -DRIVER.HET.VAR.HET1_BIT24_PULL.VALUE=1 +DRIVER.HET.VAR.HET1_BIT24_PULL.VALUE=0 DRIVER.HET.VAR.HET1_BIT16_PULL.VALUE=1 DRIVER.HET.VAR.HET1_BIT2_DIR.VALUE=0x00000000 DRIVER.HET.VAR.HET2_PWM6_DUTY_INTENA.VALUE=0x00000000 @@ -6231,7 +6235,7 @@ DRIVER.HET.VAR.HET1_PWM3_PERIOD.VALUE=1000.000 DRIVER.HET.VAR.HET2_PWM5_DUTY_PRESCALER.VALUE=51968 DRIVER.HET.VAR.HET1_PWM1_PERIOD_PRESCALER.VALUE=103296 -DRIVER.HET.VAR.HET1_BIT10_DIR.VALUE=0x00000400 +DRIVER.HET.VAR.HET1_BIT10_DIR.VALUE=0x00000000 DRIVER.HET.VAR.HET2_CAP4_POLARITY.VALUE=0 DRIVER.HET.VAR.HET2_BIT8_XORSHARE.VALUE=0x00000000 DRIVER.HET.VAR.HET2_BIT4_PULDIS.VALUE=0x00000000 @@ -6261,7 +6265,7 @@ DRIVER.HET.VAR.HET2_EDGE3_PIN_SELECT.VALUE=6 DRIVER.HET.VAR.HET2_PWM2_ACTUALPERIOD.VALUE=1000.862 DRIVER.HET.VAR.HET2_BIT18_PSL.VALUE=0x00000000 -DRIVER.HET.VAR.HET1_BIT11_DIR.VALUE=0x00000800 +DRIVER.HET.VAR.HET1_BIT11_DIR.VALUE=0x00000000 DRIVER.HET.VAR.HET1_BIT10_PULL.VALUE=1 DRIVER.HET.VAR.HET2_EDGE1_INTENA.VALUE=0x00000000 DRIVER.HET.VAR.HET2_PWM7_PERIOD_INTENA.VALUE=0x00000000 @@ -6337,7 +6341,7 @@ DRIVER.HET.VAR.HET1_LR_ACTUALTIME.VALUE=1238.690 DRIVER.HET.VAR.HET1_BIT21_DIR.VALUE=0x00000000 DRIVER.HET.VAR.HET1_BIT13_DIR.VALUE=0x00000000 -DRIVER.HET.VAR.HET1_BIT11_PULL.VALUE=1 +DRIVER.HET.VAR.HET1_BIT11_PULL.VALUE=2 DRIVER.HET.VAR.HET2_PWM3_DUTY.VALUE=50 DRIVER.HET.VAR.HET1_PWM7_ENA.VALUE=0 DRIVER.HET.VAR.HET1_HR_PRESCALE.VALUE=0 @@ -6426,7 +6430,7 @@ DRIVER.HET.VAR.HET1_EDGE0_EVENT.VALUE=1 DRIVER.HET.VAR.HET2_BIT10_PULDIS.VALUE=0x00000000 DRIVER.HET.VAR.HET1_CAP2_PIN_SELECT.VALUE=4 -DRIVER.HET.VAR.HET1_BIT11_PSL.VALUE=0x00000000 +DRIVER.HET.VAR.HET1_BIT11_PSL.VALUE=0x00000800 DRIVER.HET.VAR.HET2_PWM2_DUTYTIME.VALUE=501.669 DRIVER.HET.VAR.HET2_PWM0_DUTY_LVL.VALUE=0x00000000 DRIVER.HET.VAR.HET1_BIT31_DIR.VALUE=0x80000000 @@ -6571,7 +6575,7 @@ DRIVER.HET.VAR.HET1_PWM7_DUTY_INTENA.VALUE=0x00000000 DRIVER.HET.VAR.HET1_BIT10_ANDSHARE.VALUE=0x00000000 DRIVER.HET.VAR.HET1_EDGE7_PIN_SELECT.VALUE=23 -DRIVER.HET.VAR.HET1_BIT24_PDR.VALUE=0x00000000 +DRIVER.HET.VAR.HET1_BIT24_PDR.VALUE=0x01000000 DRIVER.HET.VAR.HET1_BIT16_PDR.VALUE=0x00000000 DRIVER.HET.VAR.HET1_BIT5_DOUT.VALUE=0 DRIVER.HET.VAR.HET2_PWM7_PERIOD_PRESCALER.VALUE=103296 @@ -6622,7 +6626,7 @@ DRIVER.HET.VAR.HET2_EDGE1_POLARITY.VALUE=0 DRIVER.HET.VAR.HET1_CAP7_POLARITY.VALUE=0 DRIVER.HET.VAR.HET1_BIT28_ANDSHARE.VALUE=0x00000000 -DRIVER.HET.VAR.HET1_BIT24_PULDIS.VALUE=0x00000000 +DRIVER.HET.VAR.HET1_BIT24_PULDIS.VALUE=0x01000000 DRIVER.HET.VAR.HET1_BIT16_PULDIS.VALUE=0x00000000 DRIVER.HET.VAR.HET2_BIT16_PULL.VALUE=1 DRIVER.HET.VAR.HET2_BIT12_DIR.VALUE=0x00000000 @@ -6634,7 +6638,7 @@ DRIVER.HET.VAR.HET2_EDGE6_PIN_SELECT.VALUE=12 DRIVER.HET.VAR.HET2_BIT2_PDR.VALUE=0x00000000 DRIVER.HET.VAR.HET2_DIS_BLACKBOX.VALUE=0 -DRIVER.HET.VAR.HET1_BIT24_PSL.VALUE=0x00000000 +DRIVER.HET.VAR.HET1_BIT24_PSL.VALUE=0x01000000 DRIVER.HET.VAR.HET1_BIT16_PSL.VALUE=0x00000000 DRIVER.HET.VAR.HET2_EDGE3_LVL.VALUE=0x00000000 DRIVER.HET.VAR.HET1_EDGE6_EVENT.VALUE=1 @@ -7278,7 +7282,7 @@ DRIVER.PINMUX.VAR.DMA_PRITY_1_VALUE.VALUE=0x0001 DRIVER.PINMUX.VAR.PINMUX11.VALUE=PINMUX_PIN_91_HET1_24 DRIVER.PINMUX.VAR.DMA_PRITY_12.VALUE=FIXED -DRIVER.PINMUX.VAR.PINMUX20.VALUE=PINMUX_PIN_130_HET1_17 +DRIVER.PINMUX.VAR.PINMUX20.VALUE=PINMUX_PIN_130_MIBSPI1NCS_1 DRIVER.PINMUX.VAR.PINMUX12.VALUE="PINMUX_PIN_92_HET1_26 | PINMUX_PIN_96_MIBSPI1NENA | PINMUX_PIN_97_MIBSPI5NENA" DRIVER.PINMUX.VAR.DMA_PRITY_13.VALUE=FIXED DRIVER.PINMUX.VAR.PINMUX21.VALUE=PINMUX_PIN_133_GIOB_1 @@ -7402,7 +7406,7 @@ DRIVER.PINMUX.VAR.MUX75_OPTION4.VALUE=0 DRIVER.PINMUX.VAR.MUX67_OPTION4.VALUE=0 DRIVER.PINMUX.VAR.MUX59_OPTION4.VALUE=0 -DRIVER.PINMUX.VAR.MUX6_OPTION0.VALUE=1 +DRIVER.PINMUX.VAR.MUX6_OPTION0.VALUE=0 DRIVER.PINMUX.VAR.DMA_CHANNEL_29.VALUE=CHANNEL0 DRIVER.PINMUX.VAR.DMA_FIDXS_7.VALUE=0 DRIVER.PINMUX.VAR.DMA_AIM_7.VALUE=ENABLED @@ -7422,7 +7426,7 @@ DRIVER.PINMUX.VAR.MUX6_OPTION3.VALUE=0 DRIVER.PINMUX.VAR.MUX60_OPTION0.VALUE=0 DRIVER.PINMUX.VAR.MUX52_OPTION0.VALUE=0 -DRIVER.PINMUX.VAR.MUX44_OPTION0.VALUE=1 +DRIVER.PINMUX.VAR.MUX44_OPTION0.VALUE=0 DRIVER.PINMUX.VAR.MUX36_OPTION0.VALUE=1 DRIVER.PINMUX.VAR.MUX28_OPTION0.VALUE=1 DRIVER.PINMUX.VAR.MUX6_OPTION4.VALUE=0 @@ -7498,7 +7502,7 @@ DRIVER.PINMUX.VAR.DMA_CP0_IDADDR_16.VALUE=0 DRIVER.PINMUX.VAR.DMA_STADD_2.VALUE=0 DRIVER.PINMUX.VAR.MUX21_OPTION0.VALUE=1 -DRIVER.PINMUX.VAR.MUX13_OPTION0.VALUE=1 +DRIVER.PINMUX.VAR.MUX13_OPTION0.VALUE=0 DRIVER.PINMUX.VAR.DMA_TTYPE_25.VALUE=FRAME_TRANSFER DRIVER.PINMUX.VAR.DMA_CP0_IDADDR_25.VALUE=0 DRIVER.PINMUX.VAR.DMA_TTYPE_17.VALUE=FRAME_TRANSFER @@ -7519,7 +7523,7 @@ DRIVER.PINMUX.VAR.PIN_MUX_71_SELECT.VALUE=0 DRIVER.PINMUX.VAR.PIN_MUX_63_SELECT.VALUE=0 DRIVER.PINMUX.VAR.PIN_MUX_55_SELECT.VALUE=0 -DRIVER.PINMUX.VAR.PIN_MUX_47_SELECT.VALUE=1 +DRIVER.PINMUX.VAR.PIN_MUX_47_SELECT.VALUE=0 DRIVER.PINMUX.VAR.PIN_MUX_39_SELECT.VALUE=0 DRIVER.PINMUX.VAR.DMA_TTYPE_27.VALUE=FRAME_TRANSFER DRIVER.PINMUX.VAR.DMA_CP0_IDADDR_27.VALUE=0 @@ -7668,7 +7672,7 @@ DRIVER.PINMUX.VAR.DMA_ADDMW_6.VALUE=CONSTANT DRIVER.PINMUX.VAR.DMA_INTFTCEN_2.VALUE=1 DRIVER.PINMUX.VAR.MUX51_OPTION0.VALUE=0 -DRIVER.PINMUX.VAR.MUX43_OPTION0.VALUE=1 +DRIVER.PINMUX.VAR.MUX43_OPTION0.VALUE=0 DRIVER.PINMUX.VAR.MUX35_OPTION0.VALUE=1 DRIVER.PINMUX.VAR.MUX27_OPTION0.VALUE=1 DRIVER.PINMUX.VAR.MUX19_OPTION0.VALUE=0 @@ -7737,7 +7741,7 @@ DRIVER.PINMUX.VAR.DMA_INTMP_2_VALUE.VALUE=0x0001 DRIVER.PINMUX.VAR.DMA_INTEN_16.VALUE=1 DRIVER.PINMUX.VAR.MUX20_OPTION0.VALUE=0 -DRIVER.PINMUX.VAR.MUX12_OPTION0.VALUE=1 +DRIVER.PINMUX.VAR.MUX12_OPTION0.VALUE=0 DRIVER.PINMUX.VAR.MUX20_OPTION1.VALUE=1 DRIVER.PINMUX.VAR.MUX12_OPTION1.VALUE=0 DRIVER.PINMUX.VAR.MUX20_OPTION2.VALUE=0 @@ -7872,7 +7876,7 @@ DRIVER.PINMUX.VAR.MUX73_OPTION0.VALUE=0 DRIVER.PINMUX.VAR.MUX65_OPTION0.VALUE=0 DRIVER.PINMUX.VAR.MUX57_OPTION0.VALUE=0 -DRIVER.PINMUX.VAR.MUX49_OPTION0.VALUE=1 +DRIVER.PINMUX.VAR.MUX49_OPTION0.VALUE=0 DRIVER.PINMUX.VAR.DMA_FIDXS_25.VALUE=0 DRIVER.PINMUX.VAR.DMA_AIM_25.VALUE=ENABLED DRIVER.PINMUX.VAR.DMA_FIDXS_17.VALUE=0 @@ -7943,7 +7947,7 @@ DRIVER.PINMUX.VAR.DMA_BYP_12.VALUE=1 DRIVER.PINMUX.VAR.DMA_INTBTCEN_2.VALUE=1 DRIVER.PINMUX.VAR.MUX50_OPTION0.VALUE=0 -DRIVER.PINMUX.VAR.MUX42_OPTION0.VALUE=1 +DRIVER.PINMUX.VAR.MUX42_OPTION0.VALUE=0 DRIVER.PINMUX.VAR.MUX34_OPTION0.VALUE=1 DRIVER.PINMUX.VAR.MUX26_OPTION0.VALUE=1 DRIVER.PINMUX.VAR.MUX18_OPTION0.VALUE=0 @@ -8183,8 +8187,8 @@ DRIVER.PINMUX.VAR.DMA_ADDMR_12.VALUE=CONSTANT DRIVER.PINMUX.VAR.DMA_INTEN_6.VALUE=1 DRIVER.PINMUX.VAR.EMIF.VALUE=0 -DRIVER.PINMUX.VAR.MUX41_OPTION0.VALUE=1 -DRIVER.PINMUX.VAR.MUX33_OPTION0.VALUE=1 +DRIVER.PINMUX.VAR.MUX41_OPTION0.VALUE=0 +DRIVER.PINMUX.VAR.MUX33_OPTION0.VALUE=0 DRIVER.PINMUX.VAR.MUX25_OPTION0.VALUE=0 DRIVER.PINMUX.VAR.MUX17_OPTION0.VALUE=0 DRIVER.PINMUX.VAR.MUX3_OPTION4.VALUE=0 @@ -8380,7 +8384,7 @@ DRIVER.PINMUX.VAR.MUX94_OPTION4.VALUE=0 DRIVER.PINMUX.VAR.MUX86_OPTION4.VALUE=0 DRIVER.PINMUX.VAR.MUX78_OPTION4.VALUE=0 -DRIVER.PINMUX.VAR.MUX9_OPTION0.VALUE=1 +DRIVER.PINMUX.VAR.MUX9_OPTION0.VALUE=0 DRIVER.PINMUX.VAR.MUX9_OPTION1.VALUE=0 DRIVER.PINMUX.VAR.DMA_EIDXD_0.VALUE=0 DRIVER.PINMUX.VAR.DMA_CHPR_10.VALUE=HIGH @@ -8407,7 +8411,7 @@ DRIVER.PINMUX.VAR.MUX71_OPTION1.VALUE=0 DRIVER.PINMUX.VAR.MUX63_OPTION1.VALUE=0 DRIVER.PINMUX.VAR.MUX55_OPTION1.VALUE=0 -DRIVER.PINMUX.VAR.MUX47_OPTION1.VALUE=1 +DRIVER.PINMUX.VAR.MUX47_OPTION1.VALUE=0 DRIVER.PINMUX.VAR.MUX39_OPTION1.VALUE=0 DRIVER.PINMUX.VAR.MUX9_OPTION5.VALUE=0 DRIVER.PINMUX.VAR.DMA_ADDMW_10.VALUE=CONSTANT @@ -8486,7 +8490,7 @@ DRIVER.PINMUX.VAR.DMA_IET_COUNT_6.VALUE=0 DRIVER.PINMUX.VAR.DMA_TRIG_12.VALUE=HARDWARE_TRIGGER DRIVER.PINMUX.VAR.MUX40_OPTION0.VALUE=0 -DRIVER.PINMUX.VAR.MUX32_OPTION0.VALUE=1 +DRIVER.PINMUX.VAR.MUX32_OPTION0.VALUE=0 DRIVER.PINMUX.VAR.MUX24_OPTION0.VALUE=1 DRIVER.PINMUX.VAR.MUX16_OPTION0.VALUE=0 DRIVER.PINMUX.VAR.MUX2_OPTION4.VALUE=0 @@ -8691,7 +8695,7 @@ DRIVER.PINMUX.VAR.MUX70_OPTION0.VALUE=0 DRIVER.PINMUX.VAR.MUX62_OPTION0.VALUE=0 DRIVER.PINMUX.VAR.MUX54_OPTION0.VALUE=0 -DRIVER.PINMUX.VAR.MUX46_OPTION0.VALUE=1 +DRIVER.PINMUX.VAR.MUX46_OPTION0.VALUE=0 DRIVER.PINMUX.VAR.MUX38_OPTION0.VALUE=1 DRIVER.PINMUX.VAR.MUX8_OPTION4.VALUE=0 DRIVER.PINMUX.VAR.MUX70_OPTION1.VALUE=0 Index: firmware/source/sys_main.c =================================================================== diff -u -re94cf93f66b011ca994fa768b523a80fd36e00ec -r497dc26e76083742903525aab1490a6900e94969 --- firmware/source/sys_main.c (.../sys_main.c) (revision e94cf93f66b011ca994fa768b523a80fd36e00ec) +++ firmware/source/sys_main.c (.../sys_main.c) (revision 497dc26e76083742903525aab1490a6900e94969) @@ -56,6 +56,7 @@ #include "can.h" #include "etpwm.h" #include "gio.h" +#include "het.h" #include "mibspi.h" #include "sci.h" #include "rti.h" @@ -141,6 +142,7 @@ static void initProcessor( void ) { gioInit(); // configure GPIO pins + hetInit(); // Configure HET1 adcInit(); // configure internal ADC channels mibspiInit(); // configure MIBSPI3 and re-purpose MIBSPI1 & 5 pins for GPIO etpwmInit(); // configure PWMs