Index: firmware/.launches/DG.launch =================================================================== diff -u -rf3aae110ab3efde68897d0224f799dc039ac84f5 -r6190a4ad94521b74164f1e1fbd79ed359c7c27fb --- firmware/.launches/DG.launch (.../DG.launch) (revision f3aae110ab3efde68897d0224f799dc039ac84f5) +++ firmware/.launches/DG.launch (.../DG.launch) (revision 6190a4ad94521b74164f1e1fbd79ed359c7c27fb) @@ -1,5 +1,24 @@ +<<<<<<< HEAD + + + + + + + + + + + + + + + + + +======= @@ -9,6 +28,7 @@ +>>>>>>> DEN-8886-hd_dg_dev-self-tests-2-of-2 Index: firmware/App/Controllers/Heaters.h =================================================================== diff -u -rf656b17f3d8d93b4fca49c9725e096e7eb55acc7 -r6190a4ad94521b74164f1e1fbd79ed359c7c27fb --- firmware/App/Controllers/Heaters.h (.../Heaters.h) (revision f656b17f3d8d93b4fca49c9725e096e7eb55acc7) +++ firmware/App/Controllers/Heaters.h (.../Heaters.h) (revision 6190a4ad94521b74164f1e1fbd79ed359c7c27fb) @@ -69,6 +69,8 @@ void setPrimaryHeaterTargetTemperature( F32 targetTemp ); void setTrimmerHeaterTargetTemperature( F32 targetTemp ); +F32 getPrimaryHeaterTargetTemperature( void ); + BOOL startPrimaryHeater( void ); BOOL startTrimmerHeater( void ); Index: firmware/App/Controllers/LoadCell.c =================================================================== diff -u -rcea079b61dbd17b2ddaec99b1124248147d14e72 -r6190a4ad94521b74164f1e1fbd79ed359c7c27fb --- firmware/App/Controllers/LoadCell.c (.../LoadCell.c) (revision cea079b61dbd17b2ddaec99b1124248147d14e72) +++ firmware/App/Controllers/LoadCell.c (.../LoadCell.c) (revision 6190a4ad94521b74164f1e1fbd79ed359c7c27fb) @@ -34,33 +34,33 @@ // 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. +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. -#define EMPTY_RESERVOIR_WEIGHT_GRAMS 1600 ///< Reservoirs empty weight in grams. -#define MAX_ALLOWED_EXTRA_WEIGHT_BEFORE_TARE_GRAMS 300 ///< Max allowed extra weight before tare in grams. +#define LOAD_CELL_ADC_ERROR_PERSISTENCE 500 ///< Alarm persistence period (in ms) for load cell ADC errors. +#define EMPTY_RESERVOIR_WEIGHT_GRAMS 1600 ///< Reservoirs empty weight in grams. +#define MAX_ALLOWED_EXTRA_WEIGHT_BEFORE_TARE_GRAMS 300 ///< Max allowed extra weight before tare in grams. /// Load cell data structure. typedef struct { - U32 rawReading; ///< Latest raw load cell reading - OVERRIDE_F32_T weight; ///< Latest load cell weight + 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. - F64 smallFilterTotal; ///< Small filter rolling total - used to calc small load cell moving average. - F32 smallFilteredWeight; ///< Load cell small filtered (100 100Hz raw sample) weight. + 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. + F32 smallFilteredWeight; ///< Load cell small filtered (100 100Hz raw sample) weight. - F32 largeFilterReadings[ SIZE_OF_LARGE_LOAD_CELL_AVG ]; ///< Load cell samples for large load cell moving average. - F64 largeFilterTotal; ///< Large filter rolling total - used to calc small load cell moving average. - F32 largeFilteredWeight; ///< Load cell large filtered (40 10Hz filtered sample) weight. + F32 largeFilterReadings[ SIZE_OF_LARGE_LOAD_CELL_AVG ]; ///< Load cell samples for large load cell moving average. + F32 largeFilterTotal; ///< Large filter rolling total - used to calc small load cell moving average. + F32 largeFilteredWeight; ///< Load cell large filtered (40 10Hz filtered sample) weight. } LOADCELL_T; // ********** private data ********** @@ -198,7 +198,6 @@ 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 Index: firmware/App/Controllers/TemperatureSensors.c =================================================================== diff -u -ra2c32d4d221603054ca9ad7a097112caebf08c4e -r6190a4ad94521b74164f1e1fbd79ed359c7c27fb --- firmware/App/Controllers/TemperatureSensors.c (.../TemperatureSensors.c) (revision a2c32d4d221603054ca9ad7a097112caebf08c4e) +++ firmware/App/Controllers/TemperatureSensors.c (.../TemperatureSensors.c) (revision 6190a4ad94521b74164f1e1fbd79ed359c7c27fb) @@ -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" Index: firmware/App/DGCommon.h =================================================================== diff -u -r9cfc69328f6b54a6b8e3737dfa24db607105cdd9 -r6190a4ad94521b74164f1e1fbd79ed359c7c27fb --- firmware/App/DGCommon.h (.../DGCommon.h) (revision 9cfc69328f6b54a6b8e3737dfa24db607105cdd9) +++ firmware/App/DGCommon.h (.../DGCommon.h) (revision 6190a4ad94521b74164f1e1fbd79ed359c7c27fb) @@ -23,9 +23,9 @@ // ********** version ********** #define DG_VERSION_MAJOR 0 -#define DG_VERSION_MINOR 5 +#define DG_VERSION_MINOR 6 #define DG_VERSION_MICRO 0 -#define DG_VERSION_BUILD 15 +#define DG_VERSION_BUILD 17 // ********** build switches ********** @@ -37,8 +37,8 @@ // #define SIMULATE_UI 1 // #define TASK_TIMING_OUTPUT_ENABLED 1 // re-purposes drain pump enable pin for task timing // #define DISABLE_HEATERS_AND_TEMPS 1 -// #define DISABLE_ACCELS 1 -// #define SKIP_POST 1 + #define DISABLE_ACCELS 1 + #define SKIP_POST 1 #define DISABLE_CAL_CHECK 1 // #define ENABLE_DIP_SWITCHES 1 // #define EMC_TEST_BUILD 1 @@ -49,12 +49,15 @@ // #define IGNORE_DRAIN_PUMP_MONITOR 1 // #define IGNORE_HEATERS_MONITOR 1 #define IGNORE_RO_PUMP_MONITOR 1 -// #define DISABLE_RO_RATIO_CHECK 1 + #define IGNORE_DISINFECT_RSRVR_TIMEOUT 1 + #define DISABLE_RO_RATIO_CHECK 1 #define DISABLE_COND_SENSOR_CHECK 1 #define DISABLE_MIXING 1 #define DISABLE_WATER_QUALITY_CHECK 1 #define DISABLE_RTC_CONFIG 1 - //#define V_2_SYSTEM 1 +// #define V_2_SYSTEM 1 + #define DISABLE_UV_REACTOR_MONITOR 1 + #define IGNORE_HEAT_DISINFECT_RSRVR_TIMEOUT 1 #define THD_USING_TRO_CONNECTOR 1 #define IGNORE_CONC_PUMP_IN_HEAT_DISINFECT 1 #include Index: firmware/App/Modes/ModeDrain.c =================================================================== diff -u -rcea079b61dbd17b2ddaec99b1124248147d14e72 -r6190a4ad94521b74164f1e1fbd79ed359c7c27fb --- firmware/App/Modes/ModeDrain.c (.../ModeDrain.c) (revision cea079b61dbd17b2ddaec99b1124248147d14e72) +++ firmware/App/Modes/ModeDrain.c (.../ModeDrain.c) (revision 6190a4ad94521b74164f1e1fbd79ed359c7c27fb) @@ -164,14 +164,8 @@ setDrainPumpTargetRPM( 0 ); #ifndef V_2_SYSTEM - if ( DG_RESERVOIR_1 == inactiveReservoir ) - { - setValveState( VRD1, VALVE_STATE_CLOSED ); - } - else if ( DG_RESERVOIR_2 == inactiveReservoir ) - { - setValveState( VRD2, VALVE_STATE_CLOSED ); - } + setValveState( VRD1, VALVE_STATE_CLOSED ); + setValveState( VRD2, VALVE_STATE_CLOSED ); #endif if ( TRUE == isReservoirTarePending() ) @@ -205,11 +199,6 @@ drainEmptyTareTimerCtr = 0; tareLoadCellsAtEmpty( inactiveReservoir ); requestNewOperationMode( DG_MODE_CIRC ); - -#ifndef V_2_SYSTEM - setValveState( VRD1, VALVE_STATE_CLOSED ); - setValveState( VRD2, VALVE_STATE_CLOSED ); -#endif } return result; Index: firmware/App/Modes/ModeFault.c =================================================================== diff -u -r1a5efe97f5f39594b45797fded52cafce92afe80 -r6190a4ad94521b74164f1e1fbd79ed359c7c27fb --- firmware/App/Modes/ModeFault.c (.../ModeFault.c) (revision 1a5efe97f5f39594b45797fded52cafce92afe80) +++ firmware/App/Modes/ModeFault.c (.../ModeFault.c) (revision 6190a4ad94521b74164f1e1fbd79ed359c7c27fb) @@ -59,6 +59,8 @@ *************************************************************************/ void transitionToFaultMode( void ) { + deenergizeActuators(); + // Publish POST failure status to UI if fault triggered in Init/POST mode if ( DG_MODE_INIT == getPreviousOperationMode() ) { Index: firmware/App/Modes/ModeFill.c =================================================================== diff -u -rcea079b61dbd17b2ddaec99b1124248147d14e72 -r6190a4ad94521b74164f1e1fbd79ed359c7c27fb --- firmware/App/Modes/ModeFill.c (.../ModeFill.c) (revision cea079b61dbd17b2ddaec99b1124248147d14e72) +++ firmware/App/Modes/ModeFill.c (.../ModeFill.c) (revision 6190a4ad94521b74164f1e1fbd79ed359c7c27fb) @@ -55,6 +55,10 @@ #define CONDUCTIVITY_ERROR_PERSISTENCE_PERIOD_MS ( 5 * MS_PER_SECOND ) ///< Persistence period for conductivity error. +#define DIALYSATE_TEMPERATURE_TOLERANCE_C 2.0 ///< Dialysate temperature tolerance in degree C. + +#define ONE_LITER_WEIGHT_GRAMS ( ML_PER_LITER ) ///< One liter weight in grams. + /// Multiplier to convert flow (L/min) into volume (mL) for period of general task interval. static const F32 RO_FLOW_INTEGRATOR = ( ( ML_PER_LITER * TASK_GENERAL_INTERVAL ) / ( SEC_PER_MIN * MS_PER_SECOND ) ); @@ -66,11 +70,14 @@ static F32 totalROFlowRate_LPM; ///< Total RO flow rate over period of time. static U32 concentrateTestStartTime; ///< Starting time for concentrate test. static U32 waterQualityCheckStartTime; ///< Starting time for inlet water quality check. +static F32 dialysateConductivityTotal; ///< Total of dialysate conductivity during fill. +static U32 dialysateConductivitySampleCount; ///< Sample count of dialysate conductivity during fill. // ********** private function prototypes ********** static BOOL isWaterQualityGood( void ); static BOOL checkDialysateConductivity( void ); +static BOOL checkDialysateTemperature( void ); static DG_FILL_MODE_STATE_T handleCheckInletWaterState( void ); static DG_FILL_MODE_STATE_T handleBicarbPumpCheckState( void ); static DG_FILL_MODE_STATE_T handleAcidPumpCheckState( void ); @@ -93,6 +100,8 @@ reservoirBaseWeight = 0.0; totalROFlowRate_LPM = 0.0; concentrateTestStartTime = 0; + dialysateConductivityTotal = 0.0; + dialysateConductivitySampleCount = 0; initPersistentAlarm( ALARM_ID_ACID_CONDUCTIVITY_OUT_OF_RANGE, CONDUCTIVITY_ERROR_PERSISTENCE_PERIOD_MS, CONDUCTIVITY_ERROR_PERSISTENCE_PERIOD_MS ); initPersistentAlarm( ALARM_ID_DIALYSATE_CONDUCTIVITY_OUT_OF_RANGE, CONDUCTIVITY_ERROR_PERSISTENCE_PERIOD_MS, CONDUCTIVITY_ERROR_PERSISTENCE_PERIOD_MS ); @@ -241,6 +250,22 @@ /*********************************************************************//** * @brief + * The checkDialysateTemperature function checks dialysate temperature after + * it gets heated up by primary heater. + * @details Inputs: TPo temperature value + * @details Outputs: None + * @return TRUE if dialysate temperature is in range, otherwise FALSE + *************************************************************************/ +static BOOL checkDialysateTemperature( void ) +{ + F32 const dialysateTemp = getTemperatureValue( TEMPSENSORS_OUTLET_PRIMARY_HEATER ); + F32 const targetTemp = getPrimaryHeaterTargetTemperature(); + + return ( ( fabs( dialysateTemp - targetTemp ) <= DIALYSATE_TEMPERATURE_TOLERANCE_C ) ? TRUE : FALSE ); +} + +/*********************************************************************//** + * @brief * The handleCheckInletWaterState function checks for inlet water quality * before jumping to dialysate production state. * @details Inputs: Temperature and conductivity alarms @@ -252,10 +277,8 @@ DG_FILL_MODE_STATE_T result = DG_FILL_MODE_STATE_CHECK_INLET_WATER; DG_RESERVOIR_ID_T inactiveReservoir = getInactiveReservoir(); - BOOL isInletWaterReady = isWaterQualityGood(); - #ifndef DISABLE_DIALYSATE_CHECK - if ( isInletWaterReady ) + if ( TRUE == isWaterQualityGood() ) #endif { reservoirBaseWeight = getReservoirWeight( inactiveReservoir ); @@ -353,9 +376,8 @@ handleDialysateMixing(); - // TODO - transition when temperature and mix is in range #ifndef DISABLE_DIALYSATE_CHECK - if ( TRUE == checkDialysateConductivity() ) + if ( ( TRUE == checkDialysateConductivity() ) && ( TRUE == checkDialysateTemperature() ) ) #endif { setValveState( VPO, VALVE_STATE_FILL_C_TO_NC ); @@ -375,23 +397,39 @@ *************************************************************************/ static DG_FILL_MODE_STATE_T handleDeliverDialysateState( void ) { + F32 avgDialysateConductivity; DG_FILL_MODE_STATE_T result = DG_FILL_MODE_STATE_DELIVER_DIALYSATE; DG_RESERVOIR_ID_T inactiveReservoir = getInactiveReservoir(); + totalROFlowRate_LPM += getMeasuredROFlowRate(); + dialysateConductivityTotal += getConductivityValue( CONDUCTIVITYSENSORS_CD2_SENSOR ); + dialysateConductivitySampleCount++; handleDialysateMixing(); - // TODO - transition back when temperature or mix out of range - if ( FALSE == checkDialysateConductivity() ) + if ( ( checkDialysateConductivity() != TRUE ) || ( checkDialysateTemperature() != TRUE ) ) { #ifndef DISABLE_DIALYSATE_CHECK setValveState( VPO, VALVE_STATE_NOFILL_C_TO_NO ); result = DG_FILL_MODE_STATE_DIALYSATE_PRODUCTION; #endif } + if ( getReservoirWeight( inactiveReservoir ) >= ONE_LITER_WEIGHT_GRAMS ) + { + avgDialysateConductivity = dialysateConductivityTotal / dialysateConductivitySampleCount; + + if ( ( avgDialysateConductivity < MIN_DIALYSATE_CONDUCTIVITY ) || ( avgDialysateConductivity > MAX_DIALYSATE_CONDUCTIVITY ) ) + { +#ifndef DISABLE_DIALYSATE_CHECK + SET_ALARM_WITH_1_F32_DATA( ALARM_ID_DIALYSATE_CONDUCTIVITY_FAULT, avgDialysateConductivity ); + requestNewOperationMode( DG_MODE_CIRC ); +#endif + } + } + // if we've reached our target fill to volume (by weight), we're done filling - go back to re-circ mode - if ( hasTargetFillVolumeBeenReached( inactiveReservoir ) ) + if ( TRUE == hasTargetFillVolumeBeenReached( inactiveReservoir ) ) { F32 const filledVolume_mL = getReservoirWeight( inactiveReservoir ) - reservoirBaseWeight; F32 const integratedVolume_mL = totalROFlowRate_LPM * RO_FLOW_INTEGRATOR * ACID_BICARB_CONCENTRATE_ADDITION_MULTIPLER; Index: firmware/App/Modes/ModeHeatDisinfect.c =================================================================== diff -u -r4557f3d5ac6bdbd766153c7c1aabd94db3eee16a -r6190a4ad94521b74164f1e1fbd79ed359c7c27fb --- firmware/App/Modes/ModeHeatDisinfect.c (.../ModeHeatDisinfect.c) (revision 4557f3d5ac6bdbd766153c7c1aabd94db3eee16a) +++ firmware/App/Modes/ModeHeatDisinfect.c (.../ModeHeatDisinfect.c) (revision 6190a4ad94521b74164f1e1fbd79ed359c7c27fb) @@ -680,7 +680,7 @@ BOOL isTD2Out = ( fabs( TD2Temp - avgTemp ) > MAX_FLUSH_CIRC_TEMP_SENSOR_DIFF_C ? TRUE : FALSE ); // Check if any of the temperature sensors are out of tolerance - if( ( TRUE == isThdOut ) || ( TRUE == isTPoOut ) || ( TRUE == isTD1Out ) || ( TRUE == isTD2Out ) ) + if ( ( TRUE == isThdOut ) || ( TRUE == isTPoOut ) || ( TRUE == isTD1Out ) || ( TRUE == isTD2Out ) ) { // Check if we have exceeded the number of trials. If not, try another time if ( ++stateTrialCounter < MAX_ALLOWED_STATE_TRIALS ) @@ -768,7 +768,7 @@ } } // Once R1 is full, keep monitoring for R2 level and timeout - else if( DG_RESERVOIR_REACHED_TARGET == rsrvr1Status ) + else if ( DG_RESERVOIR_REACHED_TARGET == rsrvr1Status ) { rsrvr2Status = getRsrvrFillStatus( DG_RESERVOIR_2, RSRVRS_PARTIAL_FILL_VOL_ML, RSRVRS_500ML_FILL_UP_TIMEOUT_MS ); @@ -865,7 +865,7 @@ } } // Once R2 is full, R1 must be partially full - else if( DG_RESERVOIR_REACHED_TARGET == rsrvr2Status ) + else if ( DG_RESERVOIR_REACHED_TARGET == rsrvr2Status ) { rsrvr1Status = getRsrvrFillStatus( DG_RESERVOIR_1, RSRVRS_PARTIAL_FILL_VOL_ML, RSRVRS_500ML_FILL_UP_TIMEOUT_MS ); Index: firmware/App/Modes/ModeRecirculate.c =================================================================== diff -u -r9cfc69328f6b54a6b8e3737dfa24db607105cdd9 -r6190a4ad94521b74164f1e1fbd79ed359c7c27fb --- firmware/App/Modes/ModeRecirculate.c (.../ModeRecirculate.c) (revision 9cfc69328f6b54a6b8e3737dfa24db607105cdd9) +++ firmware/App/Modes/ModeRecirculate.c (.../ModeRecirculate.c) (revision 6190a4ad94521b74164f1e1fbd79ed359c7c27fb) @@ -97,6 +97,7 @@ #endif signalDrainPumpHardStop(); + stopPrimaryHeater(); requestConcentratePumpsOff( CONCENTRATEPUMPS_CP1_ACID ); requestConcentratePumpsOff( CONCENTRATEPUMPS_CP2_BICARB ); Index: firmware/App/Modes/ModeStandby.c =================================================================== diff -u -r3d131237935eb36e56e0d057a713430e31dc6405 -r6190a4ad94521b74164f1e1fbd79ed359c7c27fb --- firmware/App/Modes/ModeStandby.c (.../ModeStandby.c) (revision 3d131237935eb36e56e0d057a713430e31dc6405) +++ firmware/App/Modes/ModeStandby.c (.../ModeStandby.c) (revision 6190a4ad94521b74164f1e1fbd79ed359c7c27fb) @@ -22,6 +22,7 @@ #include "ModeFault.h" #include "ModeStandby.h" #include "OperationModes.h" +#include "Pressures.h" #include "Reservoirs.h" #include "ROPump.h" #include "SystemComm.h" @@ -54,13 +55,16 @@ static U32 waterSampleStartTime = 0; ///< Time stamp for start of water sample state. static U32 filterFlushStartTime = 0; ///< Time stamp for start of filter flush state. static U32 filterFlushPublishTimerCounter = 0; ///< Filter flush data publish timer counter. +/// Filter flush time period in ms. +static OVERRIDE_U32_T filterFlushTimePeriod = { FILTER_FLUSH_TIME_MS, FILTER_FLUSH_TIME_MS, 0, 0 }; // ********** private function prototypes ********** static DG_STANDBY_MODE_STATE_T handleStandbyIdleState( void ); static DG_STANDBY_MODE_STATE_T handleStandbyFlushFilterState( void ); static DG_STANDBY_MODE_STATE_T handleStandbyFlushFilterIdleState( void ); static DG_STANDBY_MODE_STATE_T handleStandbySampleWaterState( void ); +static U32 getFilterFlushTimePeriod( void ); /*********************************************************************//** * @brief @@ -189,15 +193,19 @@ static DG_STANDBY_MODE_STATE_T handleStandbyFlushFilterState( void ) { DG_STANDBY_MODE_STATE_T state = DG_STANDBY_MODE_STATE_FLUSH_FILTER; + U32 const filterFlushTimePeriod_ms = getFilterFlushTimePeriod(); - if ( TRUE == didTimeout( filterFlushStartTime, FILTER_FLUSH_TIME_MS ) ) + checkInletPressure(); + + if ( TRUE == didTimeout( filterFlushStartTime, filterFlushTimePeriod_ms ) ) { + setValveState( VPI, VALVE_STATE_CLOSED ); state = DG_STANDBY_MODE_STATE_FLUSH_FILTER_IDLE; } if ( FILTER_FLUSH_DATA_PUBLISH_INTERVAL <= filterFlushPublishTimerCounter++ ) { - U32 const timeout = FILTER_FLUSH_TIME_MS / MS_PER_SECOND; + U32 const timeout = filterFlushTimePeriod_ms / MS_PER_SECOND; U32 const countdown = timeout - ( calcTimeSince( filterFlushStartTime ) / MS_PER_SECOND ); filterFlushPublishTimerCounter = 0; @@ -257,6 +265,7 @@ // After HD requests to stop or 10 seconds has elapsed, close and return to idle state if ( ( TRUE == stopSampleWaterRequest ) || ( TRUE == didTimeout( waterSampleStartTime, MAX_WATER_SAMPLE_TIME_MS ) ) ) { + stopSampleWaterRequest = FALSE; setValveState( VSP, VALVE_STATE_CLOSED ); #ifndef V_2_SYSTEM @@ -430,4 +439,74 @@ return standbyState; } +/*********************************************************************//** + * @brief + * The getFilterFlushTimePeriod function gets the filter flush time period. + * @details Inputs: filterFlushTimePeriod + * @details Outputs: none + * @return the current filter flush time period (in ms). + *************************************************************************/ +static U32 getFilterFlushTimePeriod( void ) +{ + U32 result = filterFlushTimePeriod.data; + + if ( OVERRIDE_KEY == filterFlushTimePeriod.override ) + { + result = filterFlushTimePeriod.ovData; + } + + return result; +} + + +/************************************************************************* + * TEST SUPPORT FUNCTIONS + *************************************************************************/ + + +/*********************************************************************//** + * @brief + * The testSetFilterFlushTimePeriodOverride function overrides the filter + * flush time period. + * @details Inputs: none + * @details Outputs: filterFlushTimePeriod + * @param value override concentrate pump data publish interval with (in ms) + * @return TRUE if override successful, FALSE if not + *************************************************************************/ +BOOL testSetFilterFlushTimePeriodOverride( U32 value ) +{ + BOOL result = FALSE; + + if ( TRUE == isTestingActivated() ) + { + result = TRUE; + filterFlushTimePeriod.override = OVERRIDE_KEY; + filterFlushTimePeriod.ovData = value; + } + + return result; +} + +/*********************************************************************//** + * @brief + * The testResetFilterFlushTimePeriodOverride function resets the + * override of the filter flush time period. + * @details Inputs: none + * @details Outputs: filterFlushTimePeriod + * @return TRUE if override reset successful, FALSE if not + *************************************************************************/ +BOOL testResetFilterFlushTimePeriodOverride( void ) +{ + BOOL result = FALSE; + + if ( TRUE == isTestingActivated() ) + { + result = TRUE; + filterFlushTimePeriod.override = OVERRIDE_RESET; + filterFlushTimePeriod.ovData = filterFlushTimePeriod.ovInitData; + } + + return result; +} + /**@}*/ Index: firmware/App/Services/Interrupts.c =================================================================== diff -u -r8467f8ff09e382e0991f14d02683080dc811e24e -r6190a4ad94521b74164f1e1fbd79ed359c7c27fb --- firmware/App/Services/Interrupts.c (.../Interrupts.c) (revision 8467f8ff09e382e0991f14d02683080dc811e24e) +++ firmware/App/Services/Interrupts.c (.../Interrupts.c) (revision 6190a4ad94521b74164f1e1fbd79ed359c7c27fb) @@ -29,9 +29,6 @@ #include "TaskPriority.h" #include "TaskTimer.h" #include "Utilities.h" -#ifdef DEBUG_ENABLED - #include "SystemCommMessages.h" -#endif /** * @addtogroup Interrupts @@ -45,10 +42,6 @@ // ********** private data ********** -static U32 sci2FrameErrorCnt; ///< SCI2 frame error count. -static U32 sci2OverrunErrorCnt; ///< SCI2 overrun error count. - -static U32 can1PassiveCnt; ///< CAN1 passive count. static U32 can1WarningCnt; ///< CAN1 warning count. static U32 can1BusOffCnt; ///< CAN1 bus offline count. static U32 can1ParityCnt; ///< CAN1 parity count. @@ -62,15 +55,11 @@ *************************************************************************/ void initInterrupts( void ) { - sci2FrameErrorCnt = 0; - sci2OverrunErrorCnt = 0; - can1PassiveCnt = 0; can1WarningCnt = 0; can1BusOffCnt = 0; can1ParityCnt = 0; // initialize various time windowed counts for monitoring CAN & UART errors and warnings - initTimeWindowedCount( TIME_WINDOWED_COUNT_CAN_PASSIVE, MAX_COMM_ERRORS, COMM_ERROR_TIME_WINDOW_MS ); initTimeWindowedCount( TIME_WINDOWED_COUNT_CAN_OFF, MAX_COMM_ERRORS, COMM_ERROR_TIME_WINDOW_MS ); initTimeWindowedCount( TIME_WINDOWED_COUNT_CAN_PARITY, MAX_COMM_ERRORS, COMM_ERROR_TIME_WINDOW_MS ); initTimeWindowedCount( TIME_WINDOWED_COUNT_FPGA_UART_FRAME_ERROR, MAX_COMM_ERRORS, COMM_ERROR_TIME_WINDOW_MS ); @@ -87,15 +76,6 @@ void phantomInterrupt( void ) { // TODO - what to do with phantom interrupts? -#ifdef DEBUG_ENABLED - { - char debugStr[ 50 ]; - - strcpy( debugStr, "DG-phantom interrupt\n" ); - sendDebugData( (U08*)debugStr, strlen(debugStr) ); - sendDebugDataToUI( (U08*)debugStr ); - } -#endif } /*********************************************************************//** @@ -166,6 +146,7 @@ { if ( node == canREG1 ) { + // Parity error - message RAM is corrupted if ( notification & canLEVEL_PARITY_ERR ) { can1ParityCnt++; @@ -174,6 +155,7 @@ SET_ALARM_WITH_1_U32_DATA( ALARM_ID_DG_SOFTWARE_FAULT, SW_FAULT_ID_CAN_PARITY_ERROR ) } } + // Bus off - our transmitter has counted 255+ errors else if ( notification & canLEVEL_BUS_OFF ) { can1BusOffCnt++; @@ -182,62 +164,20 @@ SET_ALARM_WITH_1_U32_DATA( ALARM_ID_DG_SOFTWARE_FAULT, SW_FAULT_ID_CAN_OFF_ERROR ) } } + // Warning - our transmitter has counted 96+ errors else if ( notification & canLEVEL_WARNING ) { can1WarningCnt++; } - else if ( notification & canLEVEL_PASSIVE ) - { - can1PassiveCnt++; - if ( TRUE == incTimeWindowedCount( TIME_WINDOWED_COUNT_CAN_PASSIVE ) ) - { - SET_ALARM_WITH_1_U32_DATA( ALARM_ID_DG_SOFTWARE_FAULT, SW_FAULT_ID_CAN_PASSIVE_WARNING ) - } - } else { - // ignore - other notifications undefined + // Ignore - other notifications - unhandled } } } /*********************************************************************//** * @brief - * The sciNotification function handles UART communication error interrupts. - * Frame and Over-run errors are handled. - * @details Inputs: none - * @details Outputs: UART error interrupts handled. - * @param sci pointer to the SCI peripheral that detected the error - * @param flags error flag(s) - * @return none - *************************************************************************/ -void sciNotification(sciBASE_t *sci, uint32 flags) -{ - if ( sci == scilinREG ) - { - if ( ( flags & SCI_FE_INT ) != 0 ) - { - sci2FrameErrorCnt++; - clearSCI2CommErrors(); - if ( TRUE == incTimeWindowedCount( TIME_WINDOWED_COUNT_FPGA_UART_FRAME_ERROR ) ) - { - SET_ALARM_WITH_1_U32_DATA( ALARM_ID_DG_SOFTWARE_FAULT, SW_FAULT_ID_FPGA_UART_FRAME_ERROR ) - } - } - if ( ( flags & SCI_OE_INT ) != 0 ) - { - sci2OverrunErrorCnt++; - clearSCI2CommErrors(); - if ( TRUE == incTimeWindowedCount( TIME_WINDOWED_COUNT_FPGA_UART_OVERRUN ) ) - { - SET_ALARM_WITH_1_U32_DATA( ALARM_ID_DG_SOFTWARE_FAULT, SW_FAULT_ID_FPGA_UART_OVERRUN_ERROR ) - } - } - } -} - -/*********************************************************************//** - * @brief * The dmaGroupANotification function handles communication DMA interrupts. * @details Inputs: none * @details Outputs: DMA interrupt is handled. Index: firmware/App/Services/Reservoirs.c =================================================================== diff -u -r476da1c222d2af6833d9e66a637c977bf927188f -r6190a4ad94521b74164f1e1fbd79ed359c7c27fb --- firmware/App/Services/Reservoirs.c (.../Reservoirs.c) (revision 476da1c222d2af6833d9e66a637c977bf927188f) +++ firmware/App/Services/Reservoirs.c (.../Reservoirs.c) (revision 6190a4ad94521b74164f1e1fbd79ed359c7c27fb) @@ -129,27 +129,31 @@ { case DG_RESERVOIR_1: activeReservoir.data = (U32)resID; - cmdResponse.rejected = FALSE; - setValveState( VRF, VALVE_STATE_R2_C_TO_NO ); -#ifdef V_2_SYSTEM + cmdResponse.rejected = FALSE; + setValveState( VRF, VALVE_STATE_R2_C_TO_NO ); +#ifndef V_2_SYSTEM + setValveState( VRD1, VALVE_STATE_CLOSED ); +#else setValveState( VRD, VALVE_STATE_R2_C_TO_NO ); #endif - setValveState( VRO, VALVE_STATE_R1_C_TO_NO ); - setValveState( VRI, VALVE_STATE_R1_C_TO_NO ); - break; - - case DG_RESERVOIR_2: + setValveState( VRO, VALVE_STATE_R1_C_TO_NO ); + setValveState( VRI, VALVE_STATE_R1_C_TO_NO ); + break; + + case DG_RESERVOIR_2: activeReservoir.data = (U32)resID; - cmdResponse.rejected = FALSE; - setValveState( VRF, VALVE_STATE_R1_C_TO_NC ); -#ifdef V_2_SYSTEM + cmdResponse.rejected = FALSE; + setValveState( VRF, VALVE_STATE_R1_C_TO_NC ); +#ifndef V_2_SYSTEM + setValveState( VRD2, VALVE_STATE_CLOSED ); +#else setValveState( VRD, VALVE_STATE_R1_C_TO_NC ); #endif - setValveState( VRO, VALVE_STATE_R2_C_TO_NC ); - setValveState( VRI, VALVE_STATE_R2_C_TO_NC ); - break; - - default: + setValveState( VRO, VALVE_STATE_R2_C_TO_NC ); + setValveState( VRI, VALVE_STATE_R2_C_TO_NC ); + break; + + default: // invalid reservoir given - cmd will be NAK'd w/ false result. cmdResponse.rejectCode = DG_CMD_REQUEST_REJECT_REASON_INVALID_PARAMETER; break; Index: firmware/App/Services/SystemComm.c =================================================================== diff -u -r6ec678e1c03a52564f5699986fe5d608f95cce79 -r6190a4ad94521b74164f1e1fbd79ed359c7c27fb --- firmware/App/Services/SystemComm.c (.../SystemComm.c) (revision 6ec678e1c03a52564f5699986fe5d608f95cce79) +++ firmware/App/Services/SystemComm.c (.../SystemComm.c) (revision 6190a4ad94521b74164f1e1fbd79ed359c7c27fb) @@ -554,13 +554,12 @@ else { signalCANXmitsCompleted(); - // TODO - shouldn't get here, but let's see if we do - SET_ALARM_WITH_1_U32_DATA( ALARM_ID_DG_SOFTWARE_FAULT, (U32)mBox ) + SET_ALARM_WITH_2_U32_DATA( ALARM_ID_DG_SOFTWARE_FAULT, SW_FAULT_ID_CAN_TX_FAULT, (U32)mBox ) } } else - { // TODO - shouldn't get here - just testing - set first data to new s/w fault enum later - SET_ALARM_WITH_2_U32_DATA( ALARM_ID_DG_SOFTWARE_FAULT, (U32)buffer, (U32)dataSize ) + { + SET_ALARM_WITH_2_U32_DATA( ALARM_ID_DG_SOFTWARE_FAULT, SW_FAULT_ID_INVALID_CAN_MESSAGE_SIZE, (U32)dataSize ) } } @@ -826,9 +825,7 @@ if ( TRUE == didTimeout( timeOfLastHDCheckIn, HD_COMM_TIMEOUT_IN_MS ) ) { hdIsCommunicating = FALSE; -#ifndef DEBUG_ENABLED - activateAlarmNoData( ALARM_ID_HD_COMM_TIMEOUT ); // TODO - add this alarm if we're in middle of a treatment? or if in a mode that comm loss would impact badly? -#endif + activateAlarmNoData( ALARM_ID_HD_COMM_TIMEOUT ); } } @@ -1254,6 +1251,10 @@ handleSetFluidLeakStateDetectorOverrideRequest( message ); break; + case MSG_ID_FILTER_FLUSH_TIME_PERIOD_OVERRIDE: + handleFilterFlushTimePeriodOverride(message); + break; + default: // TODO - unrecognized message ID received - ignore break; Index: firmware/App/Services/SystemCommMessages.c =================================================================== diff -u -r3d131237935eb36e56e0d057a713430e31dc6405 -r6190a4ad94521b74164f1e1fbd79ed359c7c27fb --- firmware/App/Services/SystemCommMessages.c (.../SystemCommMessages.c) (revision 3d131237935eb36e56e0d057a713430e31dc6405) +++ firmware/App/Services/SystemCommMessages.c (.../SystemCommMessages.c) (revision 6190a4ad94521b74164f1e1fbd79ed359c7c27fb) @@ -772,13 +772,17 @@ *************************************************************************/ void handleAlarmClear( MESSAGE_T *message ) { + BOOL result = FALSE; + if ( message->hdr.payloadLen == sizeof( U32 ) ) { U32 alarmId; + result = TRUE; memcpy(&alarmId, message->payload, sizeof( U32 ) ); clearAlarm( (ALARM_ID_T)alarmId ); } + sendAckResponseMsg( (MSG_ID_T)message->hdr.msgID, COMM_BUFFER_OUT_CAN_DG_2_HD, result ); } /*********************************************************************//** @@ -1047,8 +1051,8 @@ return result; } - /*********************************************************************//** - * @brief +/*********************************************************************//** + * @brief * The broadcastFlushData function sends out the flush mode data. * @details Inputs: none * @details Outputs: flush data msg constructed and queued @@ -1096,7 +1100,7 @@ memcpy( payloadPtr, chemDisinfectData, sizeof( MODE_CHEMICAL_DISINFECT_DATA_T ) ); - // serialize the message (w/ sync, CRC, and appropriate CAN padding) and add serialized message data to appropriate comm buffer + // 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; @@ -3396,4 +3400,36 @@ return result; } +/*********************************************************************//** + * @brief + * The handleFilterFlushTimePeriodOverride function handles a request + * to override the filter flush time period value. + * @details Inputs: none + * @details Outputs: message handled + * @param message a pointer to the message to handle + * @return none + *************************************************************************/ +void handleFilterFlushTimePeriodOverride( MESSAGE_T *message ) +{ + TEST_OVERRIDE_PAYLOAD_T payload; + BOOL result = FALSE; + + // verify payload length + if ( sizeof( TEST_OVERRIDE_PAYLOAD_T ) == message->hdr.payloadLen ) + { + memcpy( &payload, message->payload, sizeof( TEST_OVERRIDE_PAYLOAD_T ) ); + if ( FALSE == payload.reset ) + { + result = testSetFilterFlushTimePeriodOverride( payload.state.u32 ); + } + else + { + result = testResetFilterFlushTimePeriodOverride(); + } + } + + // respond to request + sendTestAckResponseMsg( (MSG_ID_T)message->hdr.msgID, result ); +} + /**@}*/ Index: firmware/App/Services/SystemCommMessages.h =================================================================== diff -u -r1a5efe97f5f39594b45797fded52cafce92afe80 -r6190a4ad94521b74164f1e1fbd79ed359c7c27fb --- firmware/App/Services/SystemCommMessages.h (.../SystemCommMessages.h) (revision 1a5efe97f5f39594b45797fded52cafce92afe80) +++ firmware/App/Services/SystemCommMessages.h (.../SystemCommMessages.h) (revision 6190a4ad94521b74164f1e1fbd79ed359c7c27fb) @@ -113,12 +113,12 @@ // MSG_ID_DG_FLUID_LEAK_STATE BOOL broadcastFluidLeakState( FLUID_LEAK_STATES_T state); -// MSG_ID_DG_VOLTAGES_DATA -BOOL broadcastVoltagesData( VOLTAGES_DATA_PAYLOAD_T data ); - // 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_CHEM_DISINFECT_DATA BOOL broadcastChemicalDisinfectData( MODE_CHEMICAL_DISINFECT_DATA_T *chemDisinfectData ); @@ -367,6 +367,9 @@ // MSG_ID_DG_START_STOP_CHEM_DSINFECT BOOL handleStartStopDGChemicalDisinfect( MESSAGE_T *message ); +// MSG_ID_FILTER_FLUSH_TIME_PERIOD_OVERRIDE +void handleFilterFlushTimePeriodOverride( MESSAGE_T *message ); + /**@}*/ #endif Index: firmware/DG.dil =================================================================== diff -u -rf3aae110ab3efde68897d0224f799dc039ac84f5 -r6190a4ad94521b74164f1e1fbd79ed359c7c27fb --- firmware/DG.dil (.../DG.dil) (revision f3aae110ab3efde68897d0224f799dc039ac84f5) +++ firmware/DG.dil (.../DG.dil) (revision 6190a4ad94521b74164f1e1fbd79ed359c7c27fb) @@ -6229,9 +6229,15 @@ DRIVER.HET.VAR.HET2_BIT17_PSL.VALUE=0x00000000 DRIVER.HET.VAR.HET2_BIT14_DOUT.VALUE=0 DRIVER.HET.VAR.HET1_PWM3_PERIOD.VALUE=1000.000 +<<<<<<< HEAD +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.HET2_PWM5_DUTY_PRESCALER.VALUE=52224 DRIVER.HET.VAR.HET1_PWM1_PERIOD_PRESCALER.VALUE=103936 DRIVER.HET.VAR.HET1_BIT10_DIR.VALUE=0x00000000 +>>>>>>> DEN-8886-hd_dg_dev-self-tests-2-of-2 DRIVER.HET.VAR.HET2_CAP4_POLARITY.VALUE=0 DRIVER.HET.VAR.HET2_BIT8_XORSHARE.VALUE=0x00000000 DRIVER.HET.VAR.HET2_BIT4_PULDIS.VALUE=0x00000000 @@ -6427,7 +6433,11 @@ 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 +<<<<<<< HEAD +DRIVER.HET.VAR.HET2_PWM2_DUTYTIME.VALUE=501.669 +======= DRIVER.HET.VAR.HET2_PWM2_DUTYTIME.VALUE=500.923 +>>>>>>> DEN-8886-hd_dg_dev-self-tests-2-of-2 DRIVER.HET.VAR.HET2_PWM0_DUTY_LVL.VALUE=0x00000000 DRIVER.HET.VAR.HET1_BIT31_DIR.VALUE=0x80000000 DRIVER.HET.VAR.HET1_BIT23_DIR.VALUE=0x00000000 @@ -7278,7 +7288,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_MIBSPI1NCS_1 +DRIVER.PINMUX.VAR.PINMUX20.VALUE=PINMUX_PIN_130_HET1_17 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 +7412,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=0 +DRIVER.PINMUX.VAR.MUX6_OPTION0.VALUE=1 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 +7432,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=0 +DRIVER.PINMUX.VAR.MUX44_OPTION0.VALUE=1 DRIVER.PINMUX.VAR.MUX36_OPTION0.VALUE=1 DRIVER.PINMUX.VAR.MUX28_OPTION0.VALUE=1 DRIVER.PINMUX.VAR.MUX6_OPTION4.VALUE=0 @@ -7498,7 +7508,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=0 +DRIVER.PINMUX.VAR.MUX13_OPTION0.VALUE=1 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 +7529,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=0 +DRIVER.PINMUX.VAR.PIN_MUX_47_SELECT.VALUE=1 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 +7678,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=0 +DRIVER.PINMUX.VAR.MUX43_OPTION0.VALUE=1 DRIVER.PINMUX.VAR.MUX35_OPTION0.VALUE=1 DRIVER.PINMUX.VAR.MUX27_OPTION0.VALUE=1 DRIVER.PINMUX.VAR.MUX19_OPTION0.VALUE=0 @@ -7737,7 +7747,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=0 +DRIVER.PINMUX.VAR.MUX12_OPTION0.VALUE=1 DRIVER.PINMUX.VAR.MUX20_OPTION1.VALUE=1 DRIVER.PINMUX.VAR.MUX12_OPTION1.VALUE=0 DRIVER.PINMUX.VAR.MUX20_OPTION2.VALUE=0 @@ -7872,7 +7882,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=0 +DRIVER.PINMUX.VAR.MUX49_OPTION0.VALUE=1 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 +7953,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=0 +DRIVER.PINMUX.VAR.MUX42_OPTION0.VALUE=1 DRIVER.PINMUX.VAR.MUX34_OPTION0.VALUE=1 DRIVER.PINMUX.VAR.MUX26_OPTION0.VALUE=1 DRIVER.PINMUX.VAR.MUX18_OPTION0.VALUE=0 @@ -8183,8 +8193,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=0 -DRIVER.PINMUX.VAR.MUX33_OPTION0.VALUE=0 +DRIVER.PINMUX.VAR.MUX41_OPTION0.VALUE=1 +DRIVER.PINMUX.VAR.MUX33_OPTION0.VALUE=1 DRIVER.PINMUX.VAR.MUX25_OPTION0.VALUE=0 DRIVER.PINMUX.VAR.MUX17_OPTION0.VALUE=0 DRIVER.PINMUX.VAR.MUX3_OPTION4.VALUE=0 @@ -8380,7 +8390,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=0 +DRIVER.PINMUX.VAR.MUX9_OPTION0.VALUE=1 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 +8417,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=0 +DRIVER.PINMUX.VAR.MUX47_OPTION1.VALUE=1 DRIVER.PINMUX.VAR.MUX39_OPTION1.VALUE=0 DRIVER.PINMUX.VAR.MUX9_OPTION5.VALUE=0 DRIVER.PINMUX.VAR.DMA_ADDMW_10.VALUE=CONSTANT @@ -8486,7 +8496,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=0 +DRIVER.PINMUX.VAR.MUX32_OPTION0.VALUE=1 DRIVER.PINMUX.VAR.MUX24_OPTION0.VALUE=1 DRIVER.PINMUX.VAR.MUX16_OPTION0.VALUE=0 DRIVER.PINMUX.VAR.MUX2_OPTION4.VALUE=0 @@ -8691,7 +8701,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=0 +DRIVER.PINMUX.VAR.MUX46_OPTION0.VALUE=1 DRIVER.PINMUX.VAR.MUX38_OPTION0.VALUE=1 DRIVER.PINMUX.VAR.MUX8_OPTION4.VALUE=0 DRIVER.PINMUX.VAR.MUX70_OPTION1.VALUE=0 Index: firmware/source/het.c =================================================================== diff -u -rf3aae110ab3efde68897d0224f799dc039ac84f5 -r6190a4ad94521b74164f1e1fbd79ed359c7c27fb --- firmware/source/het.c (.../het.c) (revision f3aae110ab3efde68897d0224f799dc039ac84f5) +++ firmware/source/het.c (.../het.c) (revision 6190a4ad94521b74164f1e1fbd79ed359c7c27fb) @@ -1132,13 +1132,13 @@ | (uint32) 0x00000000U | (uint32) 0x00000000U | (uint32) 0x00000000U + | (uint32) 0x00000400U | (uint32) 0x00000000U | (uint32) 0x00000000U | (uint32) 0x00000000U | (uint32) 0x00000000U | (uint32) 0x00000000U | (uint32) 0x00000000U - | (uint32) 0x00000000U | (uint32) 0x00000008U | (uint32) 0x00000000U | (uint32) 0x00000002U