Index: firmware/.launches/DG.launch =================================================================== diff -u -r5319f126f8dba1a758e78a53184e8eb0863437db -rbbf1e3736be03a4f041ace57e0f95e23caf472dd --- firmware/.launches/DG.launch (.../DG.launch) (revision 5319f126f8dba1a758e78a53184e8eb0863437db) +++ firmware/.launches/DG.launch (.../DG.launch) (revision bbf1e3736be03a4f041ace57e0f95e23caf472dd) @@ -3,6 +3,7 @@ + @@ -19,15 +20,18 @@ + + + Index: firmware/App/Controllers/DrainPump.c =================================================================== diff -u -r9f25f22ef6cd3566f8f7fbbc5c037a69e7f9411b -rbbf1e3736be03a4f041ace57e0f95e23caf472dd --- firmware/App/Controllers/DrainPump.c (.../DrainPump.c) (revision 9f25f22ef6cd3566f8f7fbbc5c037a69e7f9411b) +++ firmware/App/Controllers/DrainPump.c (.../DrainPump.c) (revision bbf1e3736be03a4f041ace57e0f95e23caf472dd) @@ -213,6 +213,7 @@ DRAIN_PUMP_STATE_T result = DRAIN_PUMP_OFF_STATE; #ifdef DEBUG_ENABLED +#ifdef ENABLE_DIP_SWITCHES // TODO - test code - remove later if ( GET_DIP_SW2_TEST() ) { @@ -222,6 +223,7 @@ setDrainPumpTargetSpeed( 1000 ); } #endif +#endif // if we've been given a pressure, transition to control to target state if ( getTargetDrainPumpSpeed() > 0 ) @@ -271,6 +273,7 @@ } #ifdef DEBUG_ENABLED +#ifdef ENABLE_DIP_SWITCHES // TODO - test code - remove later if ( !GET_DIP_SW2_TEST() ) { @@ -281,6 +284,7 @@ result = DRAIN_PUMP_OFF_STATE; } #endif +#endif return result; } Index: firmware/App/Controllers/Heaters.c =================================================================== diff -u -r8ff2c0f050380b2bab2f00eea71dcae546400bbc -rbbf1e3736be03a4f041ace57e0f95e23caf472dd --- firmware/App/Controllers/Heaters.c (.../Heaters.c) (revision 8ff2c0f050380b2bab2f00eea71dcae546400bbc) +++ firmware/App/Controllers/Heaters.c (.../Heaters.c) (revision bbf1e3736be03a4f041ace57e0f95e23caf472dd) @@ -18,6 +18,7 @@ // TODO for testing only remove #include "mibspi.h" +#include "FPGA.h" // TODO for testing only remove #include "AlarmMgmt.h" @@ -27,9 +28,14 @@ #include "SystemCommMessages.h" #include "PIControllers.h" +/** + * @addtogroup Heaters + * @{ + */ + #define MAIN_PRIMARY_HEATER_MAX_DUTY_CYCLE 0.89 ///< Main primary heater (heater A) max duty cycle (89%) -#define SMALL_PRIMAY_HEATER_MAX_DUTY_CYCLE 0.50 ///< Small Primary heater (heater B) max duty cycle (25%) -#define TRIMMER_HEATER_MAX_DUTY_CYCLE 0.50 ///< Trimmer heater max duty cycle (25%) +#define SMALL_PRIMAY_HEATER_MAX_DUTY_CYCLE 0.50 ///< Small Primary heater (heater B) max duty cycle (50%) +#define TRIMMER_HEATER_MAX_DUTY_CYCLE 0.50 ///< Trimmer heater max duty cycle (50%) #define HEATERS_MIN_DUTY_CYCLE 0.00 ///< Primary and trimmer heaters minimum duty cycle (0.00%) #define PRIMARY_HEATERS_P_COEFFICIENT 0.02 ///< Primary heaters proportional coefficient @@ -38,9 +44,7 @@ #define TRIMMER_HEATER_P_COEFFICIENT 0.02 ///< Trimmer heater proportional coefficient #define TRIMMER_HEATER_I_COEFFICIENT 0.001 ///< Trimmer heater integral coefficient -#define DELTA_TEMP_TO_PWM_DUTY_CYCLE_CONVERSION 0.05 ///< Delta temperature to PWM duty cycle conversion (initial guess) #define CONTROLLER_CHECK_INTERVAL_COUNT 10U ///< Time interval count to check the PI controller - #define TEMP_SENSORS_INTERVAL_COUNT 10U ///< Temperature sensors interval count /// Heaters self test enums @@ -93,6 +97,8 @@ static U32 primaryHeaterTimerCounter; ///< Primary heater timer counter static U32 trimmerHeaterTimerCounter; ///< Trimmer heater timer counter static U32 dataPublicationTimerCounter; ///< Data publication timer counter +static BOOL isPrimaryHeaterOn; ///< Flag to show if the primary heater is on //TODO add to AE +static BOOL isTrimmerHeaterOn; ///< Flag to show if the trimmer heater is on //TODO add to AE // private functions prototypes @@ -111,6 +117,10 @@ // TODO: Remove the below code. FOR TESTING ONLY #define PRIMARY_HEATER_MIBSPI1_PORT_MASK 0x00000002 // (CS1 - re-purposed as input GPIO) #define TOGGLEPRIMAYHEATER() (( mibspiREG1->PC2 & PRIMARY_HEATER_MIBSPI1_PORT_MASK ) != 0) +static void temporaryStartROPump ( void ); +static void temporaryStopROPump ( void ); +static void temporaryStartFan ( void ); +static void temporaryStopFan ( void ); //TODO: Remove the above code. FOR TESTING ONLY // Public functions @@ -153,8 +163,9 @@ * The setPrimaryHeaterTargetTemperature function sets the primary heater * target temperature * @details - * Inputs : F32 (targetTemp) + * Inputs : primaryHeaterTargetTemperature * Outputs : none + * @param targetTemp : Target temperature * @return none *************************************************************************/ void setPrimaryHeaterTargetTemperature ( F32 targetTemp ) @@ -167,8 +178,9 @@ * The setTrimmerHeaterTargetTemperature function sets the trimmer heater * target temperature * @details - * Inputs : F32 (targetTemp) + * Inputs : trimmerHeaterTargetTemperature * Outputs : none + * @param targetTemp : Target temperature * @return none *************************************************************************/ void setTrimmerHeaterTargetTemperature ( F32 targetTemp ) @@ -313,17 +325,14 @@ switch ( primaryHeatersExecState ) { case PRIMARY_HEATERS_EXEC_STATE_OFF: - primaryHeatersExecState = handlePrimaryHeaterStateOff(); break; case PRIMARY_HEATERS_EXEC_STATE_CONTROL_TO_TARGET: - primaryHeatersExecState = handlePrimaryHeaterStateControlToTarget(); break; default: - SET_ALARM_WITH_2_U32_DATA ( ALARM_ID_SOFTWARE_FAULT, SW_FAULT_ID_HEATERS_PRIMARY_HEATER_EXEC_INVALID_STATE, primaryHeatersExecState ); primaryHeatersExecState = PRIMARY_HEATERS_EXEC_STATE_CONTROL_TO_TARGET; @@ -344,17 +353,14 @@ switch ( trimmerHeaterExecState ) { case TRIMMER_HEATER_EXEC_STATE_OFF: - trimmerHeaterExecState = handleTrimmerHeaterStateOff(); break; case TRIMMER_HEATER_EXEC_STATE_CONTROL_TO_TARGET: - trimmerHeaterExecState = handleTrimmerHeaterControlToTarget(); break; default: - SET_ALARM_WITH_2_U32_DATA ( ALARM_ID_SOFTWARE_FAULT, SW_FAULT_ID_HEATERS_TRIMMER_HEATER_EXEC_INVALID_STATE, trimmerHeaterExecState ); trimmerHeaterExecState = TRIMMER_HEATER_EXEC_STATE_CONTROL_TO_TARGET; @@ -382,10 +388,12 @@ if ( TOGGLEPRIMAYHEATER() ) { setPrimaryHeaterTargetTemperature ( 37 ); - if ( getTemperatureValue ( TEMPSENSORS_INLET_PRIMARY_HEATER_TEMP_SENSOR ) > 0 ) + //if ( getTemperatureValue ( TEMPSENSORS_INLET_PRIMARY_HEATER_TEMP_SENSOR ) > 0 ) { startPrimaryHeater(); state = PRIMARY_HEATERS_EXEC_STATE_CONTROL_TO_TARGET; + temporaryStartROPump(); + temporaryStartFan(); } //state = PRIMARY_HEATERS_EXEC_STATE_CONTROL_TO_TARGET; } @@ -427,12 +435,14 @@ } primaryHeaterTimerCounter = 0; } - publishTemperatureData(); + //publishTemperatureData(); // TODO remove this code if ( !TOGGLEPRIMAYHEATER() ) { stopPrimaryHeater(); + temporaryStopROPump(); + temporaryStopFan(); state = PRIMARY_HEATERS_EXEC_STATE_OFF; } // TODO Remove this code @@ -457,13 +467,15 @@ state = TRIMMER_HEATER_EXEC_STATE_OFF; if ( TOGGLEPRIMAYHEATER() ) { - setTrimmerHeaterTargetTemperature ( 37 ); - if ( getTemperatureValue ( TEMPSENSORS_OUTLET_REDUNDANCY_TEMP_SENSOR ) > 0 ) + setTrimmerHeaterTargetTemperature ( 38 ); + //if ( getTemperatureValue ( TEMPSENSORS_OUTLET_REDUNDANCY_TEMP_SENSOR ) > 0 ) { startTrimmerHeater(); state = TRIMMER_HEATER_EXEC_STATE_CONTROL_TO_TARGET; + //temporaryStartROPump(); + //temporaryStartFan(); } - state = TRIMMER_HEATER_EXEC_STATE_CONTROL_TO_TARGET; + //state = TRIMMER_HEATER_EXEC_STATE_CONTROL_TO_TARGET; } // TODO remove this code for testing @@ -490,12 +502,14 @@ setTrimmerHeaterPWM ( trimmerHeaterDutyCycle ); trimmerHeaterTimerCounter = 0; } - publishTemperatureData(); + //publishTemperatureData(); // TODO remove this code if ( !TOGGLEPRIMAYHEATER() ) { stopTrimmerHeater(); + temporaryStopROPump(); + temporaryStopFan(); state = TRIMMER_HEATER_EXEC_STATE_OFF; } // TODO Remove this code @@ -510,6 +524,7 @@ * @details * Inputs : none * Outputs : none + * @param : pwm : To set the PWM * @return none *************************************************************************/ static void setMainPrimaryHeaterPWM ( F32 pwm ) @@ -524,6 +539,7 @@ * @details * Inputs : none * Outputs : none + * @param: pwm : To set the PWM * @return none *************************************************************************/ static void setSmallPrimaryHeaterPWM ( F32 pwm ) @@ -537,6 +553,7 @@ * @details * Inputs : none * Outputs : none + * @param : pwm : To set the PWM * @return none *************************************************************************/ static void setTrimmerHeaterPWM ( F32 pwm ) @@ -551,21 +568,18 @@ * @details * Inputs : none * Outputs : none + * @param : heater (NAME_OF_HEATER) : Name of the heater to reset * @return none *************************************************************************/ static void resetHeaterState ( NAME_OF_HEATER_T heater ) { if ( heater == PRIMARY_HEATER ) { - F32 inletTemperatrue = getTemperatureValue ( TEMPSENSORS_INLET_PRIMARY_HEATER_TEMP_SENSOR ); - mainPrimaryHeaterDutyCycle = fabs(primaryHeaterTargetTemperature - inletTemperatrue) * DELTA_TEMP_TO_PWM_DUTY_CYCLE_CONVERSION; - resetPIController ( PI_CONTROLLER_ID_PRIMARY_HEATER, mainPrimaryHeaterDutyCycle ); + resetPIController ( PI_CONTROLLER_ID_PRIMARY_HEATER, MAIN_PRIMARY_HEATER_MAX_DUTY_CYCLE ); } else if ( heater == TRIMMER_HEATER ) { - F32 inletTemperatrue = getTemperatureValue ( TEMPSENSORS_OUTLET_REDUNDANCY_TEMP_SENSOR ); - trimmerHeaterDutyCycle = fabs(trimmerHeaterTargetTemperature - inletTemperatrue) * DELTA_TEMP_TO_PWM_DUTY_CYCLE_CONVERSION; - resetPIController ( PI_CONTROLLER_ID_TRIMMER_HEATER, trimmerHeaterDutyCycle ); + resetPIController ( PI_CONTROLLER_ID_TRIMMER_HEATER, SMALL_PRIMAY_HEATER_MAX_DUTY_CYCLE ); } } @@ -583,24 +597,49 @@ { if ( ++dataPublicationTimerCounter >= TEMP_SENSORS_INTERVAL_COUNT ) { -//#ifdef DEBUG_ENABLED -// { -// char debugTempStr[ 256 ]; -// sprintf( debugTempStr, "MPDuty: %6.2f, SPDuty: %6.2f, THDuty: %6.2f, TPi: %6.2f, TPo: %6.2f, TD1: %6.2f, " -// "TD2: %6.2f, TRo: %6.2f, TDi: %6.2f, TPh: %6.2f, TTh: %6.2f, PTarg: %6.2f, TTarg: %6.2f\r\n", -// mainPrimaryHeaterDutyCycle, smallPrimaryHeaterDutyCycle, trimmerHeaterDutyCycle, -// getTemperatureValue ( TEMPSENSORS_INLET_PRIMARY_HEATER_TEMP_SENSOR ), -// getTemperatureValue ( TEMPSENSORS_OUTLET_PRIMARY_HEATER_TEMP_SENSOR ), -// getTemperatureValue ( TEMPSENSORS_CONDUCTIVITY_SENSOR_1_TEMP_SENSOR ), -// getTemperatureValue ( TEMPSENSORS_CONDUCTIVITY_SENSOR_2_TEMP_SENSOR ), -// getTemperatureValue ( TEMPSENSORS_OUTLET_REDUNDANCY_TEMP_SENSOR ), -// getTemperatureValue ( TEMPSENSORS_INLET_DIALYSATE_TEMP_SENSOR ), -// getTemperatureValue ( TEMPSENSORS_PRIMARY_HEATER_INTERNAL_TEMP_SENSOR ), -// getTemperatureValue ( TEMPSENSORS_TRIMMER_HEATER_INTERNAL_TEMP_SESNOR ), -// primaryHeaterTargetTemperature, trimmerHeaterTargetTemperature); -// sendDebugData ( (U08*)debugTempStr, strlen(debugTempStr) ); -// } -//#endif +#ifdef DEBUG_ENABLED + { + char debugTempStr[ 256 ]; + sprintf( debugTempStr, "MPDC: %2d, SPDC: %2d, THDC: %2d, TPi: %6.2f, TPo: %6.2f, TD1: %6.2f, " + "TD2: %6.2f, TRo: %6.2f, TDi: %6.2f, TPh: %6.2f, TTh: %6.2f, PTarg: %6.2f, TTarg: %6.2f, ROFlow: %6.2f\r\n", + (U32)(mainPrimaryHeaterDutyCycle*100), (U32)(smallPrimaryHeaterDutyCycle*100), (U32)(trimmerHeaterDutyCycle*100), + getTemperatureValue ( TEMPSENSORS_INLET_PRIMARY_HEATER_TEMP_SENSOR ), + getTemperatureValue ( TEMPSENSORS_OUTLET_PRIMARY_HEATER_TEMP_SENSOR ), + getTemperatureValue ( TEMPSENSORS_CONDUCTIVITY_SENSOR_1_TEMP_SENSOR ), + getTemperatureValue ( TEMPSENSORS_CONDUCTIVITY_SENSOR_2_TEMP_SENSOR ), + getTemperatureValue ( TEMPSENSORS_OUTLET_REDUNDANCY_TEMP_SENSOR ), + getTemperatureValue ( TEMPSENSORS_INLET_DIALYSATE_TEMP_SENSOR ), + getTemperatureValue ( TEMPSENSORS_PRIMARY_HEATER_INTERNAL_TEMP_SENSOR ), + getTemperatureValue ( TEMPSENSORS_TRIMMER_HEATER_INTERNAL_TEMP_SESNOR ), + primaryHeaterTargetTemperature, trimmerHeaterTargetTemperature, + (F32)(10909.0909/getFPGAROPumpFlowRate()) ); + sendDebugData ( (U08*)debugTempStr, strlen(debugTempStr) ); + } +#endif dataPublicationTimerCounter = 0; } } + +// TODO REMOVE THE CODE +static void temporaryStartROPump ( void ) +{ + F32 tempPWM = 0.6; + etpwmSetCmpB( etpwmREG2, (U32)( (S32)( ( tempPWM * (F32)(etpwmREG2->TBPRD) ) + FLOAT_TO_INT_ROUNDUP_OFFSET ) ) ); +} +static void temporaryStopROPump ( void ) +{ + etpwmSetCmpB( etpwmREG2, 0 ); +} + +static void temporaryStartFan ( void ) +{ + F32 tempPWM = 0.25; + etpwmSetCmpA( etpwmREG6, (U32)( (S32)( ( tempPWM * (F32)(etpwmREG6->TBPRD) ) + FLOAT_TO_INT_ROUNDUP_OFFSET ) ) ); + etpwmSetCmpB( etpwmREG6, (U32)( (S32)( ( tempPWM * (F32)(etpwmREG6->TBPRD) ) + FLOAT_TO_INT_ROUNDUP_OFFSET ) ) ); +} +static void temporaryStopFan ( void ) +{ + etpwmSetCmpA( etpwmREG6, 0 ); + etpwmSetCmpB( etpwmREG6, 0 ); +} +// TODO REMOVE THE CODE Index: firmware/App/Controllers/LoadCell.c =================================================================== diff -u -rf5d0c90297a0716e1fb5a5c946436cccd35050e5 -rbbf1e3736be03a4f041ace57e0f95e23caf472dd --- firmware/App/Controllers/LoadCell.c (.../LoadCell.c) (revision f5d0c90297a0716e1fb5a5c946436cccd35050e5) +++ firmware/App/Controllers/LoadCell.c (.../LoadCell.c) (revision bbf1e3736be03a4f041ace57e0f95e23caf472dd) @@ -30,8 +30,8 @@ #define LOAD_CELL_SAMPLES_TO_AVERAGE LOAD_CELL_REPORT_PERIOD ///< Averaging load cell data over the reporting interval. #define LOAD_CELL_AVERAGE_MULTIPLIER (1.0 / (F32)LOAD_CELL_SAMPLES_TO_AVERAGE) ///< Optimization - multiplying is faster than dividing. // TODO - gain and offset for load cells should be read from NV Data calibration record. -#define ADC2GRAM 0.01126 // Conversion factor from ADC counts to grams. Division for averaging is folded into this value. -#define LOAD_CELL_ZERO_OFFSET -237.16 // Zero offset (in grams). +#define ADC2GRAM (0.0894 * 1.1338) // Conversion factor from ADC counts to grams. Division for averaging is folded into this value. +#define LOAD_CELL_ZERO_OFFSET -1018.02 // Zero offset (in grams). TODO - right now, this is empty reservoir weight. // ********** private data ********** Index: firmware/App/Controllers/Pressures.c =================================================================== diff -u -r249dd3ba5b51f616cc51044424b9009273086cb9 -rbbf1e3736be03a4f041ace57e0f95e23caf472dd --- firmware/App/Controllers/Pressures.c (.../Pressures.c) (revision 249dd3ba5b51f616cc51044424b9009273086cb9) +++ firmware/App/Controllers/Pressures.c (.../Pressures.c) (revision bbf1e3736be03a4f041ace57e0f95e23caf472dd) @@ -34,8 +34,8 @@ /// Default publication interval for pressure and occlusion data. #define PRESSURES_DATA_PUB_INTERVAL ( MS_PER_SECOND / TASK_PRIORITY_INTERVAL ) ///< interval (ms/task time) at which the pressures data is published on the CAN bus. -#define PUMP_PRESSURE_ZERO 0x309 ///< ADC counts equivalent to 0 PSI for pump in/out pressure sensors. -#define PUMP_PRESSURE_PSIA_PER_COUNT 0.06343 ///< PSIA per ADC count conversion factor for pump in/out pressure sensors. +#define PUMP_PRESSURE_ZERO 777 ///< ADC counts equivalent to 0 PSI for pump in/out pressure sensors. +#define PUMP_PRESSURE_PSIA_PER_COUNT 0.06434 ///< PSIA per ADC count conversion factor for pump in/out pressure sensors. #define PUMP_PRESSURE_PSIA_TO_PSI_OFFSET 14.7 ///< Subtract this offset to convert PSIA to PSI. /// Defined states for the pressures monitor state machine. @@ -66,7 +66,6 @@ static PRESSURE_SELF_TEST_STATE_T pressuresSelfTestState = PRESSURE_SELF_TEST_STATE_START; ///< current pressure self test state. static U32 pressuresSelfTestTimerCount = 0; ///< timer counter for pressure self test. - // ********** private function prototypes ********** static PRESSURE_STATE_T handlePressuresInitState( void ); @@ -75,8 +74,6 @@ static void publishPressuresData( void ); static DATA_GET_PROTOTYPE( U32, getPublishPressuresDataInterval ); -/**@}*/ - /*********************************************************************//** * @brief * The initPressures function initializes the Pressures module. @@ -403,3 +400,5 @@ return result; } +/**@}*/ + Index: firmware/App/Controllers/ROPump.c =================================================================== diff -u -r8ff2c0f050380b2bab2f00eea71dcae546400bbc -rbbf1e3736be03a4f041ace57e0f95e23caf472dd --- firmware/App/Controllers/ROPump.c (.../ROPump.c) (revision 8ff2c0f050380b2bab2f00eea71dcae546400bbc) +++ firmware/App/Controllers/ROPump.c (.../ROPump.c) (revision bbf1e3736be03a4f041ace57e0f95e23caf472dd) @@ -235,12 +235,14 @@ RO_PUMP_STATE_T result = RO_PUMP_OFF_STATE; #ifdef DEBUG_ENABLED +#ifdef ENABLE_DIP_SWITCHES // TODO - test code - remove later if ( GET_DIP_SW0_TEST() ) { setROPumpTargetPressure( 120, PUMP_CONTROL_MODE_CLOSED_LOOP ); } #endif +#endif // if we've been given a pressure, transition to control to target state if ( getTargetROPumpPressure() > 0 ) @@ -289,13 +291,15 @@ } #ifdef DEBUG_ENABLED +#ifdef ENABLE_DIP_SWITCHES // TODO - test code - remove later if ( !GET_DIP_SW0_TEST() ) { signalROPumpHardStop(); result = RO_PUMP_OFF_STATE; } #endif +#endif return result; } Index: firmware/App/Controllers/TemperatureSensors.c =================================================================== diff -u -ra3b108c205e9bcd4d1a45033d73c5714c7247123 -rbbf1e3736be03a4f041ace57e0f95e23caf472dd --- firmware/App/Controllers/TemperatureSensors.c (.../TemperatureSensors.c) (revision a3b108c205e9bcd4d1a45033d73c5714c7247123) +++ firmware/App/Controllers/TemperatureSensors.c (.../TemperatureSensors.c) (revision bbf1e3736be03a4f041ace57e0f95e23caf472dd) @@ -18,12 +18,12 @@ #include "TemperatureSensors.h" #include "FPGA.h" #include "SystemCommMessages.h" - -// TODO: For testing only REMOVE #include "Timers.h" -// TODO: For testing only REMOVE -//TODO change the incoming water for ranges +/** + * @addtogroup TemperatureSensors + * @{ + */ // Private variables @@ -39,7 +39,7 @@ #define TRIMMER_HEATER_EXT_TEMP_SENSORS_REF_RESISTANCE 5110U ///< Trimmer heater external temperature sensors reference resistance #define TRIMMER_HEATER_EXT_TEMP_SENSORS_0_DEGREE_RESISTANCE 100U ///< Trimmer heater external temperature sensors zero degree resistance -#define HEATERS_INTERNAL_ADC_TO_TEMP_CONVERSION_COEFF 0.0625 ///< Heaters internal temperature sensors ADC to temperature conversion coefficient +#define HEATERS_INTERNAL_ADC_TO_TEMP_CONVERSION_COEFF 0.25 ///< Heaters internal temperature sensors ADC to temperature conversion coefficient #define TEMP_SENSORS_ADC_BITS 24U ///< External temperature sensors ADC bits #define TEMP_SENSORS_ADC_MAX_COUNT (pow(2,TEMP_SENSORS_ADC_BITS)) ///< Temperature sensors max ADC count @@ -73,6 +73,11 @@ #define EXTERNAL_TEMP_SENSORS_ERROR_VALUE 0x80 ///< External temperature sensors error value #define HEATERS_INTERNAL_TEMP_SENSOR_FAULT 0x01 ///< Heaters internal temperature sensor fault +#define SHIFT_BITS_BY_2 2U ///< Shift bits by 2 TODO add to AE +#define MIN_WATER_INPUT_TEMPERATURE 10U ///< Minimum water input temperature TODO add to AE +#define MAX_WATER_INPUT_TEMPERATURE 40U ///< Maximum water input temperature TODO add to AE +#define ADC_FPGA_READ_DELAY 30U ///< Delay in ms before reading the ADC values from FPGA TODO add to AE +#define INPUT_WATER_TEMPERATURE_CHECK_TIME_INTERVAL 100U ///< Time interval that is used to check the input water TODO add to AE /// Temperature sensor self test states typedef enum tempSensors_Self_Test_States @@ -98,16 +103,16 @@ static TEMPSENSORS_SELF_TEST_STATES_T tempSensorsSelfTestState; ///< TemperatureSensor self test state static TEMPSENSORS_EXEC_STATES_T tempSensorsExecState; ///< TemperatureSensor exec state static U32 sampleCount; ///< Initial ADC read index until the array if filled up for the first time -static U32 rawADCReads [ NUM_OF_TEMPERATURE_SENSORS ] ///< Raw ADC reads array - [ MAX_NUM_OF_RAW_ADC_SAMPLES ]; -static U32 runningSumAndIndex [ NUM_OF_TEMPERATURE_SENSORS ] ///< Running sum and next ADC index array +static S32 rawADCReads [ NUM_OF_TEMPERATURE_SENSORS ] + [ MAX_NUM_OF_RAW_ADC_SAMPLES ]; ///< Raw ADC reads array +static S32 runningSumAndIndex [ NUM_OF_TEMPERATURE_SENSORS ] ///< Running sum and next ADC index array [ NUM_OF_RUNNING_SUM_AND_INDEX_ARRAY_COLUMNS ]; -static U32 tempSensorsConstants [ NUM_OF_TEMPERATURE_SENSORS ] ///< Temperature sensors constants - [ NUM_OF_TEMP_SENSORS_CONSTANTS_ARRAY_COLUMNS ]; -static F32 avgADCReads [ NUM_OF_TEMPERATURE_SENSORS ]; //TODO remove ///< Temperature sensors averaged ADC values -static F32 temperatureValues [ NUM_OF_TEMPERATURE_SENSORS ]; +static U32 tempSensorsConstants [ NUM_OF_TEMPERATURE_SENSORS ] + [ NUM_OF_TEMP_SENSORS_CONSTANTS_ARRAY_COLUMNS ];///< Temperature sensors constants static U32 readAndErrorCounts [ NUM_OF_TEMPERATURE_SENSORS ] [ NUM_OF_READ_AND_ERROR_ARRAY_COLUMNS ]; +static F32 temperatureValues [ NUM_OF_TEMPERATURE_SENSORS ]; +static U32 elapsedTime; ///< Elapsed time // Private functions prototypes @@ -124,7 +129,7 @@ // Public functions /************************************************************************* - * @brief initTemperatureSensors + * @brief * The initTemperatureSensors function initializes the module * @details * Inputs : none @@ -139,6 +144,7 @@ tempSensorsSelfTestState = TEMPSENSORS_SELF_TEST_START; tempSensorsExecState = TEMPSENSORS_EXEC_STATE_START; sampleCount = 0; + elapsedTime = 0; // Initialize TPi and TPo constants for ( i = TEMPSENSORS_INLET_PRIMARY_HEATER_TEMP_SENSOR; i < TEMPSENSORS_CONDUCTIVITY_SENSOR_1_TEMP_SENSOR; i++ ) @@ -173,7 +179,7 @@ tempSensorsConstants [ TEMPSENSORS_TRIMMER_HEATER_INTERNAL_TEMP_SESNOR ] [ ADC_READ_0_DEG_RESISTANCE_INDEX ] = 0; } /************************************************************************* - * @brief execTemperatureSensorsSelfTest + * @brief * The execTemperatureSensorsSelfTest function runs the TemperatureSensors * POST during the self test * @details @@ -187,27 +193,22 @@ switch ( tempSensorsSelfTestState ) { case TEMPSENSORS_SELF_TEST_START: - tempSensorsSelfTestState = handleSelfTestStart(); break; case TEMPSENSORS_SELF_TEST_ADC_CHECK: - tempSensorsSelfTestState = handleSelfTestADCCheck(); break; case TEMPSENSORS_SELF_TEST_CONSISTENCY_CHECK: - tempSensorsSelfTestState = handleSelfTestConsistencyCheck(); break; case TEMPSENSORS_SELF_TEST_COMPLETE: - // Done with self test, do nothing break; default: - SET_ALARM_WITH_2_U32_DATA ( ALARM_ID_SOFTWARE_FAULT, SW_FAULT_ID_TEMPERATURE_SENSORS_INVALID_SELF_TEST_STATE, tempSensorsSelfTestState ); tempSensorsSelfTestState = TEMPSENSORS_SELF_TEST_COMPLETE; @@ -232,17 +233,14 @@ switch ( tempSensorsExecState ) { case TEMPSENSORS_SELF_TEST_START: - tempSensorsExecState = handleExecStart(); break; case TEMPSENSORS_EXEC_STATE_GET_ADC_VALUES: - tempSensorsExecState = handleExecGetADCValues(); break; default: - SET_ALARM_WITH_2_U32_DATA ( ALARM_ID_SOFTWARE_FAULT, SW_FAULT_ID_TEMPERATURE_SENSORS_EXEC_INVALID_STATE, tempSensorsExecState ); tempSensorsExecState = TEMPSENSORS_EXEC_STATE_GET_ADC_VALUES; @@ -349,9 +347,9 @@ static void processADCRead (U32 sensorIndex, U32 adc, U32 fpgaError, U32 fpgaCount ) { U32 error; - U32 heatersTemperature; BOOL isADCValid = TRUE; F32 temperature; + S32 convertedADC; /* * check if the index is not the heaters @@ -363,10 +361,11 @@ * set the avgCalc to true * if the avgCalc in true, calculate all the steps and immediately convert to temperature */ - if ( sensorIndex != TEMPSENSORS_PRIMARY_HEATER_INTERNAL_TEMP_SENSOR || sensorIndex != TEMPSENSORS_TRIMMER_HEATER_INTERNAL_TEMP_SESNOR ) + if ( sensorIndex != TEMPSENSORS_PRIMARY_HEATER_INTERNAL_TEMP_SENSOR && + sensorIndex != TEMPSENSORS_TRIMMER_HEATER_INTERNAL_TEMP_SESNOR ) { - error = 0; - adc = adc & MASK_OFF_U32_MSB; + error = 0; //TODO non-zero error + convertedADC = (S32)(adc & MASK_OFF_U32_MSB); /* * what if the fpga channel error is not zero? * what if the fpga channel error is zero but the individual is not? @@ -389,18 +388,8 @@ // It is a heaters temperature sensor else { - // Fault state is the 17th bit - U32 fault = adc & MASK_OFF_LSW; - fault = fault & 0x0001; - - if ( fault == HEATERS_INTERNAL_TEMP_SENSOR_FAULT ) - { - // Fault alarm? or have a threshold? - // If the fault is 1, should we check the individuals? - } - // TODO fix these - heatersTemperature = adc & 0xFF05; - heatersTemperature = (heatersTemperature & 0x7FFF) >> 2; //TODO use #define for 2 + U16 adcConv = ( (U16)adc ) << SHIFT_BITS_BY_2; + convertedADC = ( (S16)adcConv ) >> SHIFT_BITS_BY_2; } U32 previousReadCount = readAndErrorCounts [ sensorIndex ] [ READ_AND_ERROR_PREV_FPGA_COUNT_INDEX ]; @@ -413,14 +402,14 @@ } else { - readAndErrorCounts [ sensorIndex ] [ READ_AND_ERROR_PREV_FPGA_COUNT_INDEX ] = fpgaCount; + readAndErrorCounts [ sensorIndex ] [ READ_AND_ERROR_PREV_FPGA_COUNT_INDEX ] = fpgaCount; readAndErrorCounts [ sensorIndex ] [ READ_AND_ERROR_INTERNAL_ERROR_COUNT_INDEX ] = internalErrorCount++; } //isADCValid = FALSE; } else if ( fpgaCount > previousReadCount ) { - readAndErrorCounts [ sensorIndex ] [ READ_AND_ERROR_PREV_FPGA_COUNT_INDEX ] = fpgaCount; + readAndErrorCounts [ sensorIndex ] [ READ_AND_ERROR_PREV_FPGA_COUNT_INDEX ] = fpgaCount; readAndErrorCounts [ sensorIndex ] [ READ_AND_ERROR_INTERNAL_ERROR_COUNT_INDEX ] = 0; isADCValid = TRUE; } @@ -429,12 +418,12 @@ { // Update the values in the folders U32 index = runningSumAndIndex [ sensorIndex ] [ ADC_READ_NEXT_INDEX_INDEX ]; - U32 runningSum = runningSumAndIndex [ sensorIndex ] [ ADC_READ_RUNNING_SUM_INDEX ]; - U32 indexValue = rawADCReads [ sensorIndex ] [ index ]; + S32 runningSum = runningSumAndIndex [ sensorIndex ] [ ADC_READ_RUNNING_SUM_INDEX ]; + S32 indexValue = rawADCReads [ sensorIndex ] [ index ]; U32 nextIndex = INC_WRAP( index, ADC_READ_FIRST_READ_INDEX, MAX_NUM_OF_RAW_ADC_SAMPLES - 1 ); - runningSum = runningSum - indexValue + adc; + runningSum = runningSum - indexValue + convertedADC; - rawADCReads [ sensorIndex ] [ index ] = adc; + rawADCReads [ sensorIndex ] [ index ] = convertedADC; runningSumAndIndex [ sensorIndex ] [ ADC_READ_NEXT_INDEX_INDEX ] = nextIndex; runningSumAndIndex [ sensorIndex ] [ ADC_READ_RUNNING_SUM_INDEX ] = runningSum; @@ -496,7 +485,8 @@ static TEMPSENSORS_SELF_TEST_STATES_T handleSelfTestADCCheck ( void ) { TEMPSENSORS_SELF_TEST_STATES_T state = TEMPSENSORS_SELF_TEST_CONSISTENCY_CHECK; - + // TODo Remove + F32 avgADCReads [ NUM_OF_TEMPERATURE_SENSORS ]; //TODO remove U08 i; for ( i = 0; i < sizeof(avgADCReads); i++ ) { @@ -558,7 +548,19 @@ *************************************************************************/ static TEMPSENSORS_EXEC_STATES_T handleExecStart ( void ) { - return TEMPSENSORS_EXEC_STATE_GET_ADC_VALUES; + TEMPSENSORS_EXEC_STATES_T state = TEMPSENSORS_EXEC_STATE_START; + + if ( elapsedTime == 0 ) + { + elapsedTime = getMSTimerCount(); + } + else if ( didTimeout( elapsedTime, ADC_FPGA_READ_DELAY ) ) + { + elapsedTime = 0; + state = TEMPSENSORS_EXEC_STATE_GET_ADC_VALUES; + } + + return state; } /************************************************************************* * @brief handleExecGetADCValues @@ -573,21 +575,31 @@ { TEMPSENSORS_EXEC_STATES_T state = TEMPSENSORS_EXEC_STATE_GET_ADC_VALUES; - // Check the read count for a change before inserting - // Need to remember the fpga counter and if it has not changed increment another counter and - // zero it if it changed. if it is above a certain number throw fault - // error counter from fpga same as above remember, if it is incremented: - // Look at the error counter and the specific error flag to make sure the error is a temp sensor // Add a byte array to have bits for each sensor to find out exactly what sensor failed - processADCRead( TEMPSENSORS_INLET_PRIMARY_HEATER_TEMP_SENSOR, getFPGATPiTemp(), getFPGARTDErrorCount(), getFPGARTDReadCount() ); - processADCRead( TEMPSENSORS_OUTLET_PRIMARY_HEATER_TEMP_SENSOR, getFPGATPoTemp(), getFPGARTDErrorCount(), getFPGARTDReadCount() ); - processADCRead( TEMPSENSORS_CONDUCTIVITY_SENSOR_1_TEMP_SENSOR, getFPGACD1Temp(), 0, 0 ); - processADCRead( TEMPSENSORS_CONDUCTIVITY_SENSOR_2_TEMP_SENSOR, getFPGACD2Temp(), 0, 0 ); - processADCRead( TEMPSENSORS_OUTLET_REDUNDANCY_TEMP_SENSOR, getFPGATHDoTemp(), 0, 0 ); - processADCRead( TEMPSENSORS_INLET_DIALYSATE_TEMP_SENSOR, getFPGATDiTemp(), 0, 0 ); - //processADCRead( TEMPSENSORS_PRIMARY_HEATER_INTERNAL_TEMP_SENSOR, getFPGAPrimaryHeaterTemp() ); - //processADCRead( TEMPSENSORS_TRIMMER_HEATER_INTERNAL_TEMP_SESNOR, getFPGATrimmerHeaterTemp() ); + processADCRead( TEMPSENSORS_INLET_PRIMARY_HEATER_TEMP_SENSOR, getFPGATPiTemp(), getFPGARTDErrorCount(), getFPGARTDReadCount() ); + processADCRead( TEMPSENSORS_OUTLET_PRIMARY_HEATER_TEMP_SENSOR, getFPGATPoTemp(), getFPGARTDErrorCount(), getFPGARTDReadCount() ); + processADCRead( TEMPSENSORS_CONDUCTIVITY_SENSOR_1_TEMP_SENSOR, getFPGACD1Temp(), getFPGARTDErrorCount(), getFPGARTDReadCount() ); + processADCRead( TEMPSENSORS_CONDUCTIVITY_SENSOR_2_TEMP_SENSOR, getFPGACD2Temp(), getFPGARTDErrorCount(), getFPGARTDReadCount() ); + processADCRead( TEMPSENSORS_OUTLET_REDUNDANCY_TEMP_SENSOR, getFPGATHDoTemp(), getFPGATHDoErrorCount(), getFPGATHDoReadCount() ); + processADCRead( TEMPSENSORS_INLET_DIALYSATE_TEMP_SENSOR, getFPGATDiTemp(), getFPGATDiErrorCount(), getFPGATDiReadCount() ); + processADCRead( TEMPSENSORS_PRIMARY_HEATER_INTERNAL_TEMP_SENSOR, getFPGAPrimaryHeaterTemp(), getFPGAPrimaryHeaterFlags(), getFPGAPrimaryHeaterReadCount() ); + processADCRead( TEMPSENSORS_TRIMMER_HEATER_INTERNAL_TEMP_SESNOR, getFPGATrimmerHeaterTemp(), getFPGATrimmerHeaterFlags(), getFPGATrimmerHeaterReadCount() ); + // Check the inlet water is within temperature range at the desired time interval + if ( elapsedTime == 0 ) + { + elapsedTime = getMSTimerCount(); + } + else if ( didTimeout( elapsedTime, INPUT_WATER_TEMPERATURE_CHECK_TIME_INTERVAL ) ) + { + elapsedTime = 0; + F32 inletTemperature = temperatureValues [ TEMPSENSORS_INLET_PRIMARY_HEATER_TEMP_SENSOR ]; + if ( inletTemperature < MIN_WATER_INPUT_TEMPERATURE || inletTemperature >= MAX_WATER_INPUT_TEMPERATURE ) + { + SET_ALARM_WITH_1_U32_DATA ( ALARM_ID_INLET_WATER_TEMPERATURE_OUT_OF_RANGE, inletTemperature ); + } + } + return state; } Index: firmware/App/Controllers/TemperatureSensors.h =================================================================== diff -u -ra3b108c205e9bcd4d1a45033d73c5714c7247123 -rbbf1e3736be03a4f041ace57e0f95e23caf472dd --- firmware/App/Controllers/TemperatureSensors.h (.../TemperatureSensors.h) (revision a3b108c205e9bcd4d1a45033d73c5714c7247123) +++ firmware/App/Controllers/TemperatureSensors.h (.../TemperatureSensors.h) (revision bbf1e3736be03a4f041ace57e0f95e23caf472dd) @@ -40,4 +40,9 @@ F32 getTemperatureValue ( TEMPERATURE_SENSORS_T sensor ); +//DATA_GET_PROTOTYPE ( F32, ); + +BOOL testSetMeasuredTemperatureOverride ( F32 temperatrue ); +BOOL testResetMeasuredTemperatureOverride ( void ); + #endif Index: firmware/App/Controllers/Valves.h =================================================================== diff -u -rf5d0c90297a0716e1fb5a5c946436cccd35050e5 -rbbf1e3736be03a4f041ace57e0f95e23caf472dd --- firmware/App/Controllers/Valves.h (.../Valves.h) (revision f5d0c90297a0716e1fb5a5c946436cccd35050e5) +++ firmware/App/Controllers/Valves.h (.../Valves.h) (revision bbf1e3736be03a4f041ace57e0f95e23caf472dd) @@ -59,7 +59,7 @@ VBF, ///< Valve Bypass Filter VRC, ///< Valve Recirculate VDR, ///< Valve Drain - VPI, ///< Valve Pressure inlet + VPI, ///< Valve Pressure Inlet VSP, ///< Valve Sampling Port VR1, ///< Valve Reservoir 1 (spare for now including DG FPGA, as valve is of passive air relief type) VR2, ///< Valve Reservoir 2 (spare for now including DG FPGA, as valve is of passive air relief type) @@ -72,7 +72,7 @@ void initValves( void ); // initialize the valves driver void execValves( void ); // execute the valves driver -BOOL setValveState( VALVES_T valve, VALVE_STATE_NAMES_T valveState ); // set valve's state to valveState +BOOL setValveState( VALVES_T valve, VALVE_STATE_NAMES_T valveState ); // set valve's state to valveState DATA_ARRAY_GET_PROTOTYPE( U32, getValveState, valveID ); // get valve state for given valve BOOL testSetValvesStatesPublishIntervalOverride( U32 value ); Index: firmware/App/DGCommon.h =================================================================== diff -u -rdea90cb6d941a0d70c1666a11a0199e147dea764 -rbbf1e3736be03a4f041ace57e0f95e23caf472dd --- firmware/App/DGCommon.h (.../DGCommon.h) (revision dea90cb6d941a0d70c1666a11a0199e147dea764) +++ firmware/App/DGCommon.h (.../DGCommon.h) (revision bbf1e3736be03a4f041ace57e0f95e23caf472dd) @@ -23,7 +23,7 @@ #define DG_VERSION_MAJOR 0 #define DG_VERSION_MINOR 4 -#define DG_VERSION_MICRO 0 +#define DG_VERSION_MICRO 5 #define DG_VERSION_BUILD 0 // ********** build switches ********** @@ -33,6 +33,7 @@ // #define RM46_EVAL_BOARD_TARGET 1 // #define SIMULATE_UI 1 // #define CAN_TEST 1 +// #define ENABLE_DIP_SWITCHES 1 #include #include #endif Index: firmware/App/Modes/ModeChemicalDisinfect.c =================================================================== diff -u -rf5b02f03b6695c0c76fd8a4d902a13114e1a8aca -rbbf1e3736be03a4f041ace57e0f95e23caf472dd --- firmware/App/Modes/ModeChemicalDisinfect.c (.../ModeChemicalDisinfect.c) (revision f5b02f03b6695c0c76fd8a4d902a13114e1a8aca) +++ firmware/App/Modes/ModeChemicalDisinfect.c (.../ModeChemicalDisinfect.c) (revision bbf1e3736be03a4f041ace57e0f95e23caf472dd) @@ -18,7 +18,7 @@ #include "OperationModes.h" /** - * @addtogroup ChemicalDisinfectMode + * @addtogroup DGChemicalDisinfectMode * @{ */ Index: firmware/App/Modes/ModeChemicalDisinfect.h =================================================================== diff -u -rf5b02f03b6695c0c76fd8a4d902a13114e1a8aca -rbbf1e3736be03a4f041ace57e0f95e23caf472dd --- firmware/App/Modes/ModeChemicalDisinfect.h (.../ModeChemicalDisinfect.h) (revision f5b02f03b6695c0c76fd8a4d902a13114e1a8aca) +++ firmware/App/Modes/ModeChemicalDisinfect.h (.../ModeChemicalDisinfect.h) (revision bbf1e3736be03a4f041ace57e0f95e23caf472dd) @@ -21,11 +21,11 @@ #include "DGModes.h" /** - * @defgroup ChemicalDisinfectMode ChemicalDisinfectMode + * @defgroup DGChemicalDisinfectMode DGChemicalDisinfectMode * @brief Chemical disinfect mode module. * Manages chemical disinfect mode functions via a state machine. * - * @addtogroup ChemicalDisinfectMode + * @addtogroup DGChemicalDisinfectMode * @{ */ Index: firmware/App/Modes/ModeDrain.c =================================================================== diff -u -r9f25f22ef6cd3566f8f7fbbc5c037a69e7f9411b -rbbf1e3736be03a4f041ace57e0f95e23caf472dd --- firmware/App/Modes/ModeDrain.c (.../ModeDrain.c) (revision 9f25f22ef6cd3566f8f7fbbc5c037a69e7f9411b) +++ firmware/App/Modes/ModeDrain.c (.../ModeDrain.c) (revision bbf1e3736be03a4f041ace57e0f95e23caf472dd) @@ -22,7 +22,7 @@ #include "Valves.h" /** - * @addtogroup DrainMode + * @addtogroup DGDrainMode * @{ */ Index: firmware/App/Modes/ModeDrain.h =================================================================== diff -u -rf5b02f03b6695c0c76fd8a4d902a13114e1a8aca -rbbf1e3736be03a4f041ace57e0f95e23caf472dd --- firmware/App/Modes/ModeDrain.h (.../ModeDrain.h) (revision f5b02f03b6695c0c76fd8a4d902a13114e1a8aca) +++ firmware/App/Modes/ModeDrain.h (.../ModeDrain.h) (revision bbf1e3736be03a4f041ace57e0f95e23caf472dd) @@ -21,11 +21,11 @@ #include "DGModes.h" /** - * @defgroup DrainMode DrainMode + * @defgroup DGDrainMode DGDrainMode * @brief Drain mode module. * Manages drain mode functions via a state machine. * - * @addtogroup DrainMode + * @addtogroup DGDrainMode * @{ */ Index: firmware/App/Modes/ModeFault.c =================================================================== diff -u -rf5b02f03b6695c0c76fd8a4d902a13114e1a8aca -rbbf1e3736be03a4f041ace57e0f95e23caf472dd --- firmware/App/Modes/ModeFault.c (.../ModeFault.c) (revision f5b02f03b6695c0c76fd8a4d902a13114e1a8aca) +++ firmware/App/Modes/ModeFault.c (.../ModeFault.c) (revision bbf1e3736be03a4f041ace57e0f95e23caf472dd) @@ -18,7 +18,7 @@ #include "ModeFault.h" /** - * @addtogroup FaultMode + * @addtogroup DGFaultMode * @{ */ Index: firmware/App/Modes/ModeFault.h =================================================================== diff -u -rf5b02f03b6695c0c76fd8a4d902a13114e1a8aca -rbbf1e3736be03a4f041ace57e0f95e23caf472dd --- firmware/App/Modes/ModeFault.h (.../ModeFault.h) (revision f5b02f03b6695c0c76fd8a4d902a13114e1a8aca) +++ firmware/App/Modes/ModeFault.h (.../ModeFault.h) (revision bbf1e3736be03a4f041ace57e0f95e23caf472dd) @@ -21,11 +21,11 @@ #include "DGModes.h" /** - * @defgroup FaultMode FaultMode + * @defgroup DGFaultMode DGFaultMode * @brief Fault mode module. * Manages fault mode functions via a state machine. * - * @addtogroup FaultMode + * @addtogroup DGFaultMode * @{ */ Index: firmware/App/Modes/ModeFill.c =================================================================== diff -u -r9f25f22ef6cd3566f8f7fbbc5c037a69e7f9411b -rbbf1e3736be03a4f041ace57e0f95e23caf472dd --- firmware/App/Modes/ModeFill.c (.../ModeFill.c) (revision 9f25f22ef6cd3566f8f7fbbc5c037a69e7f9411b) +++ firmware/App/Modes/ModeFill.c (.../ModeFill.c) (revision bbf1e3736be03a4f041ace57e0f95e23caf472dd) @@ -23,7 +23,7 @@ #include "ModeFill.h" /** - * @addtogroup FillMode + * @addtogroup DGFillMode * @{ */ Index: firmware/App/Modes/ModeFill.h =================================================================== diff -u -rf5b02f03b6695c0c76fd8a4d902a13114e1a8aca -rbbf1e3736be03a4f041ace57e0f95e23caf472dd --- firmware/App/Modes/ModeFill.h (.../ModeFill.h) (revision f5b02f03b6695c0c76fd8a4d902a13114e1a8aca) +++ firmware/App/Modes/ModeFill.h (.../ModeFill.h) (revision bbf1e3736be03a4f041ace57e0f95e23caf472dd) @@ -21,11 +21,11 @@ #include "DGModes.h" /** - * @defgroup FillMode FillMode + * @defgroup DGFillMode DGFillMode * @brief Fill mode module. * Manages fill mode functions via a state machine. * - * @addtogroup FillMode + * @addtogroup DGFillMode * @{ */ Index: firmware/App/Modes/ModeFlush.c =================================================================== diff -u -rf5b02f03b6695c0c76fd8a4d902a13114e1a8aca -rbbf1e3736be03a4f041ace57e0f95e23caf472dd --- firmware/App/Modes/ModeFlush.c (.../ModeFlush.c) (revision f5b02f03b6695c0c76fd8a4d902a13114e1a8aca) +++ firmware/App/Modes/ModeFlush.c (.../ModeFlush.c) (revision bbf1e3736be03a4f041ace57e0f95e23caf472dd) @@ -18,7 +18,7 @@ #include "OperationModes.h" /** - * @addtogroup FlushMode + * @addtogroup DGFlushMode * @{ */ Index: firmware/App/Modes/ModeFlush.h =================================================================== diff -u -rf5b02f03b6695c0c76fd8a4d902a13114e1a8aca -rbbf1e3736be03a4f041ace57e0f95e23caf472dd --- firmware/App/Modes/ModeFlush.h (.../ModeFlush.h) (revision f5b02f03b6695c0c76fd8a4d902a13114e1a8aca) +++ firmware/App/Modes/ModeFlush.h (.../ModeFlush.h) (revision bbf1e3736be03a4f041ace57e0f95e23caf472dd) @@ -21,11 +21,11 @@ #include "DGModes.h" /** - * @defgroup FlushMode FlushMode + * @defgroup DGFlushMode DGFlushMode * @brief Flush mode module. Manages the state machine for the * flush mode. * - * @addtogroup FlushMode + * @addtogroup DGFlushMode * @{ */ Index: firmware/App/Modes/ModeHeatDisinfect.c =================================================================== diff -u -rf5b02f03b6695c0c76fd8a4d902a13114e1a8aca -rbbf1e3736be03a4f041ace57e0f95e23caf472dd --- firmware/App/Modes/ModeHeatDisinfect.c (.../ModeHeatDisinfect.c) (revision f5b02f03b6695c0c76fd8a4d902a13114e1a8aca) +++ firmware/App/Modes/ModeHeatDisinfect.c (.../ModeHeatDisinfect.c) (revision bbf1e3736be03a4f041ace57e0f95e23caf472dd) @@ -18,7 +18,7 @@ #include "OperationModes.h" /** - * @addtogroup HeatDisinfectMode + * @addtogroup DGHeatDisinfectMode * @{ */ Index: firmware/App/Modes/ModeHeatDisinfect.h =================================================================== diff -u -rf5b02f03b6695c0c76fd8a4d902a13114e1a8aca -rbbf1e3736be03a4f041ace57e0f95e23caf472dd --- firmware/App/Modes/ModeHeatDisinfect.h (.../ModeHeatDisinfect.h) (revision f5b02f03b6695c0c76fd8a4d902a13114e1a8aca) +++ firmware/App/Modes/ModeHeatDisinfect.h (.../ModeHeatDisinfect.h) (revision bbf1e3736be03a4f041ace57e0f95e23caf472dd) @@ -21,11 +21,11 @@ #include "DGModes.h" /** - * @defgroup HeatDisinfectMode HeatDisinfectMode + * @defgroup DGHeatDisinfectMode DGHeatDisinfectMode * @brief Heat disinfection mode module. Manages the state machine for the * heat disinfection mode. * - * @addtogroup HeatDisinfectMode + * @addtogroup DGHeatDisinfectMode * @{ */ Index: firmware/App/Modes/ModeInitPOST.c =================================================================== diff -u -r3e7b064885d99793bb56d940bd613555b1cdbdfa -rbbf1e3736be03a4f041ace57e0f95e23caf472dd --- firmware/App/Modes/ModeInitPOST.c (.../ModeInitPOST.c) (revision 3e7b064885d99793bb56d940bd613555b1cdbdfa) +++ firmware/App/Modes/ModeInitPOST.c (.../ModeInitPOST.c) (revision bbf1e3736be03a4f041ace57e0f95e23caf472dd) @@ -21,7 +21,7 @@ #include "ModeInitPOST.h" /** - * @addtogroup InitAndPOSTMode + * @addtogroup DGInitAndPOSTMode * @{ */ Index: firmware/App/Modes/ModeInitPOST.h =================================================================== diff -u -rf5b02f03b6695c0c76fd8a4d902a13114e1a8aca -rbbf1e3736be03a4f041ace57e0f95e23caf472dd --- firmware/App/Modes/ModeInitPOST.h (.../ModeInitPOST.h) (revision f5b02f03b6695c0c76fd8a4d902a13114e1a8aca) +++ firmware/App/Modes/ModeInitPOST.h (.../ModeInitPOST.h) (revision bbf1e3736be03a4f041ace57e0f95e23caf472dd) @@ -21,11 +21,11 @@ #include "DGModes.h" /** - * @defgroup InitAndPOSTMode InitAndPOSTMode + * @defgroup DGInitAndPOSTMode DGInitAndPOSTMode * @brief Initialization and POST mode module. * Manages initialization and POST mode functions via a state machine. * - * @addtogroup InitAndPOSTMode + * @addtogroup DGInitAndPOSTMode * @{ */ Index: firmware/App/Modes/ModeRecirculate.c =================================================================== diff -u -r9f25f22ef6cd3566f8f7fbbc5c037a69e7f9411b -rbbf1e3736be03a4f041ace57e0f95e23caf472dd --- firmware/App/Modes/ModeRecirculate.c (.../ModeRecirculate.c) (revision 9f25f22ef6cd3566f8f7fbbc5c037a69e7f9411b) +++ firmware/App/Modes/ModeRecirculate.c (.../ModeRecirculate.c) (revision bbf1e3736be03a4f041ace57e0f95e23caf472dd) @@ -24,7 +24,7 @@ #include "ModeRecirculate.h" /** - * @addtogroup RecirculateMode + * @addtogroup DGRecirculateMode * @{ */ @@ -36,7 +36,7 @@ // ********** private data ********** static DG_RECIRCULATE_MODE_STATE_T recircState; ///< Currently active re-circulation state. -static F32 flushLinesVolume = 0.0; ///< Volume of water pumped by RO pump during flush lines state. +static F32 flushLinesVolumeL = 0.0; ///< Volume of water pumped by RO pump during flush lines state. // ********** private function prototypes ********** @@ -55,7 +55,7 @@ void initRecirculateMode( void ) { recircState = DG_RECIRCULATE_MODE_STATE_START; - flushLinesVolume = 0.0; + flushLinesVolumeL = 0.0; } /*********************************************************************//** @@ -138,10 +138,10 @@ F32 waterVolume = ( ( waterFlowRate / SEC_PER_MIN ) / ( MS_PER_SECOND / TASK_GENERAL_INTERVAL ) ); // integrate volume of water moved through line - flushLinesVolume += waterVolume; + flushLinesVolumeL += waterVolume; // when enough water volume has flowed to flush the lines, transition to re-circ state - if ( flushLinesVolume >= FLUSH_LINES_VOLUME_L ) + if ( flushLinesVolumeL >= FLUSH_LINES_VOLUME_L ) { setValveState( VDR, VALVE_STATE_RECIRC_C_TO_NC ); result = DG_RECIRCULATE_MODE_STATE_RECIRC_WATER; Index: firmware/App/Modes/ModeRecirculate.h =================================================================== diff -u -rf5b02f03b6695c0c76fd8a4d902a13114e1a8aca -rbbf1e3736be03a4f041ace57e0f95e23caf472dd --- firmware/App/Modes/ModeRecirculate.h (.../ModeRecirculate.h) (revision f5b02f03b6695c0c76fd8a4d902a13114e1a8aca) +++ firmware/App/Modes/ModeRecirculate.h (.../ModeRecirculate.h) (revision bbf1e3736be03a4f041ace57e0f95e23caf472dd) @@ -21,11 +21,11 @@ #include "DGModes.h" /** - * @defgroup RecirculateMode RecirculateMode + * @defgroup DGRecirculateMode DGRecirculateMode * @brief Re-circulate mode module. * Manages re-circulate mode functions via a state machine. * - * @addtogroup RecirculateMode + * @addtogroup DGRecirculateMode * @{ */ Index: firmware/App/Modes/ModeService.c =================================================================== diff -u -rf5b02f03b6695c0c76fd8a4d902a13114e1a8aca -rbbf1e3736be03a4f041ace57e0f95e23caf472dd --- firmware/App/Modes/ModeService.c (.../ModeService.c) (revision f5b02f03b6695c0c76fd8a4d902a13114e1a8aca) +++ firmware/App/Modes/ModeService.c (.../ModeService.c) (revision bbf1e3736be03a4f041ace57e0f95e23caf472dd) @@ -18,7 +18,7 @@ #include "ModeService.h" /** - * @addtogroup ServiceMode + * @addtogroup DGServiceMode * @{ */ Index: firmware/App/Modes/ModeService.h =================================================================== diff -u -rf5b02f03b6695c0c76fd8a4d902a13114e1a8aca -rbbf1e3736be03a4f041ace57e0f95e23caf472dd --- firmware/App/Modes/ModeService.h (.../ModeService.h) (revision f5b02f03b6695c0c76fd8a4d902a13114e1a8aca) +++ firmware/App/Modes/ModeService.h (.../ModeService.h) (revision bbf1e3736be03a4f041ace57e0f95e23caf472dd) @@ -21,11 +21,11 @@ #include "DGModes.h" /** - * @defgroup ServiceMode ServiceMode + * @defgroup DGServiceMode DGServiceMode * @brief Service mode module. * Manages service mode functions via a state machine. * - * @addtogroup ServiceMode + * @addtogroup DGServiceMode * @{ */ Index: firmware/App/Modes/ModeSolo.c =================================================================== diff -u -rf5b02f03b6695c0c76fd8a4d902a13114e1a8aca -rbbf1e3736be03a4f041ace57e0f95e23caf472dd --- firmware/App/Modes/ModeSolo.c (.../ModeSolo.c) (revision f5b02f03b6695c0c76fd8a4d902a13114e1a8aca) +++ firmware/App/Modes/ModeSolo.c (.../ModeSolo.c) (revision bbf1e3736be03a4f041ace57e0f95e23caf472dd) @@ -19,7 +19,7 @@ #include "CPLD.h" /** - * @addtogroup SoloStandbyMode + * @addtogroup DGSoloStandbyMode * @{ */ Index: firmware/App/Modes/ModeSolo.h =================================================================== diff -u -rf5b02f03b6695c0c76fd8a4d902a13114e1a8aca -rbbf1e3736be03a4f041ace57e0f95e23caf472dd --- firmware/App/Modes/ModeSolo.h (.../ModeSolo.h) (revision f5b02f03b6695c0c76fd8a4d902a13114e1a8aca) +++ firmware/App/Modes/ModeSolo.h (.../ModeSolo.h) (revision bbf1e3736be03a4f041ace57e0f95e23caf472dd) @@ -21,11 +21,11 @@ #include "DGModes.h" /** - * @defgroup SoloStandbyMode SoloStandbyMode + * @defgroup DGSoloStandbyMode DGSoloStandbyMode * @brief Solo Standby mode module. * Manages Solo standby mode functions via a state machine. * - * @addtogroup SoloStandbyMode + * @addtogroup DGSoloStandbyMode * @{ */ Index: firmware/App/Modes/ModeStandby.c =================================================================== diff -u -r9f25f22ef6cd3566f8f7fbbc5c037a69e7f9411b -rbbf1e3736be03a4f041ace57e0f95e23caf472dd --- firmware/App/Modes/ModeStandby.c (.../ModeStandby.c) (revision 9f25f22ef6cd3566f8f7fbbc5c037a69e7f9411b) +++ firmware/App/Modes/ModeStandby.c (.../ModeStandby.c) (revision bbf1e3736be03a4f041ace57e0f95e23caf472dd) @@ -25,7 +25,7 @@ #include "ModeStandby.h" /** - * @addtogroup StandbyMode + * @addtogroup DGStandbyMode * @{ */ @@ -137,7 +137,7 @@ // go to standby solo mode if HD is turned off or stops communicating. if ( FALSE == isHDCommunicating() ) { // TODO if HD comm loss, should we wait an hour or so before going to solo standby? - requestNewOperationMode( DG_MODE_SOLO ); +// requestNewOperationMode( DG_MODE_SOLO ); // TODO - uncomment when solo mode is implemented. } // if HD requests water sample, go to water sample state else if ( TRUE == pendingSampleWaterRequest ) Index: firmware/App/Modes/ModeStandby.h =================================================================== diff -u -rf5b02f03b6695c0c76fd8a4d902a13114e1a8aca -rbbf1e3736be03a4f041ace57e0f95e23caf472dd --- firmware/App/Modes/ModeStandby.h (.../ModeStandby.h) (revision f5b02f03b6695c0c76fd8a4d902a13114e1a8aca) +++ firmware/App/Modes/ModeStandby.h (.../ModeStandby.h) (revision bbf1e3736be03a4f041ace57e0f95e23caf472dd) @@ -21,11 +21,11 @@ #include "DGModes.h" /** - * @defgroup StandbyMode StandbyMode + * @defgroup DGStandbyMode DGStandbyMode * @brief Standby mode module. * Manages standby mode functions via a state machine. * - * @addtogroup StandbyMode + * @addtogroup DGStandbyMode * @{ */ Index: firmware/App/Modes/OperationModes.c =================================================================== diff -u -r3e7b064885d99793bb56d940bd613555b1cdbdfa -rbbf1e3736be03a4f041ace57e0f95e23caf472dd --- firmware/App/Modes/OperationModes.c (.../OperationModes.c) (revision 3e7b064885d99793bb56d940bd613555b1cdbdfa) +++ firmware/App/Modes/OperationModes.c (.../OperationModes.c) (revision bbf1e3736be03a4f041ace57e0f95e23caf472dd) @@ -32,7 +32,7 @@ #include "ModeStandby.h" /** - * @addtogroup OperationModes + * @addtogroup DGOperationModes * @{ */ Index: firmware/App/Modes/OperationModes.h =================================================================== diff -u -r3e7b064885d99793bb56d940bd613555b1cdbdfa -rbbf1e3736be03a4f041ace57e0f95e23caf472dd --- firmware/App/Modes/OperationModes.h (.../OperationModes.h) (revision 3e7b064885d99793bb56d940bd613555b1cdbdfa) +++ firmware/App/Modes/OperationModes.h (.../OperationModes.h) (revision bbf1e3736be03a4f041ace57e0f95e23caf472dd) @@ -21,11 +21,11 @@ #include "DGModes.h" /** - * @defgroup OperationModes OperationModes + * @defgroup DGOperationModes DGOperationModes * @brief Operation Modes module. * Manages the top level operation modes of the DG via a state machine. * - * @addtogroup OperationModes + * @addtogroup DGOperationModes * @{ */ Index: firmware/App/Services/Reservoirs.c =================================================================== diff -u -ra52e41cc2219362d433149ca034908c8763d8378 -rbbf1e3736be03a4f041ace57e0f95e23caf472dd --- firmware/App/Services/Reservoirs.c (.../Reservoirs.c) (revision a52e41cc2219362d433149ca034908c8763d8378) +++ firmware/App/Services/Reservoirs.c (.../Reservoirs.c) (revision bbf1e3736be03a4f041ace57e0f95e23caf472dd) @@ -81,7 +81,7 @@ *************************************************************************/ void execReservoirs( void ) { - // TODO - publish active reservoir, fill/drain volume targets at 1 Hz. + // publish active reservoir, fill/drain volume targets at 1 Hz. if ( ++reservoirDataPublicationTimerCounter >= RESERVOIR_DATA_PUB_INTERVAL ) { U32 actRes = getActiveReservoir(); @@ -114,19 +114,19 @@ case RESERVOIR_1: activeReservoir.data = (U32)resID; result = TRUE; - setValveState( VRF, VALVE_STATE_R2_C_TO_NO ); - setValveState( VRD, VALVE_STATE_R2_C_TO_NO ); - setValveState( VRO, VALVE_STATE_R1_C_TO_NO ); - setValveState( VRI, VALVE_STATE_R1_C_TO_NO ); + setValveState( VRF, VALVE_STATE_R1_C_TO_NC ); // TODO - valve states are reversed for the two reservoirs for now - revert back when load cells are fixed. + setValveState( VRD, VALVE_STATE_R1_C_TO_NC ); + setValveState( VRO, VALVE_STATE_R2_C_TO_NC ); + setValveState( VRI, VALVE_STATE_R2_C_TO_NC ); break; case RESERVOIR_2: activeReservoir.data = (U32)resID; result = TRUE; - setValveState( VRF, VALVE_STATE_R1_C_TO_NC ); - setValveState( VRD, VALVE_STATE_R1_C_TO_NC ); - setValveState( VRO, VALVE_STATE_R2_C_TO_NC ); - setValveState( VRI, VALVE_STATE_R2_C_TO_NC ); + setValveState( VRF, VALVE_STATE_R2_C_TO_NO ); + setValveState( VRD, VALVE_STATE_R2_C_TO_NO ); + setValveState( VRO, VALVE_STATE_R1_C_TO_NO ); + setValveState( VRI, VALVE_STATE_R1_C_TO_NO ); break; default: @@ -305,11 +305,11 @@ *************************************************************************/ U32 getReservoirFillVolumeTargetMl( void ) { - U32 result = (RESERVOIR_ID_T)fillVolumeTargetMl.data; + U32 result = fillVolumeTargetMl.data; if ( OVERRIDE_KEY == fillVolumeTargetMl.override ) { - result = (RESERVOIR_ID_T)fillVolumeTargetMl.ovData; + result = fillVolumeTargetMl.ovData; } return result; @@ -326,11 +326,11 @@ *************************************************************************/ U32 getReservoirDrainVolumeTargetMl( void ) { - U32 result = (RESERVOIR_ID_T)drainVolumeTargetMl.data; + U32 result = drainVolumeTargetMl.data; if ( OVERRIDE_KEY == drainVolumeTargetMl.override ) { - result = (RESERVOIR_ID_T)drainVolumeTargetMl.ovData; + result = drainVolumeTargetMl.ovData; } return result; Index: firmware/App/Services/SystemComm.c =================================================================== diff -u -r77738b42add276957539f0efb3f9a4092852c5ce -rbbf1e3736be03a4f041ace57e0f95e23caf472dd --- firmware/App/Services/SystemComm.c (.../SystemComm.c) (revision 77738b42add276957539f0efb3f9a4092852c5ce) +++ firmware/App/Services/SystemComm.c (.../SystemComm.c) (revision bbf1e3736be03a4f041ace57e0f95e23caf472dd) @@ -1008,6 +1008,10 @@ handleSampleWaterCmd( message ); break; + case MSG_ID_DG_START_STOP_TRIMMER_HEATER_CMD: + handleStartStopTrimmerHeaterCmd( message ); + break; + case MSG_ID_DG_TESTER_LOGIN_REQUEST: handleTesterLogInRequest( message ); break; Index: firmware/App/Services/SystemCommMessages.c =================================================================== diff -u -r3e7b064885d99793bb56d940bd613555b1cdbdfa -rbbf1e3736be03a4f041ace57e0f95e23caf472dd --- firmware/App/Services/SystemCommMessages.c (.../SystemCommMessages.c) (revision 3e7b064885d99793bb56d940bd613555b1cdbdfa) +++ firmware/App/Services/SystemCommMessages.c (.../SystemCommMessages.c) (revision bbf1e3736be03a4f041ace57e0f95e23caf472dd) @@ -76,7 +76,7 @@ typedef struct { U32 setDrainPumpSpeed; - F32 drainPumpPWM; + U32 dacValue; } DRAIN_PUMP_DATA_T; typedef struct @@ -493,10 +493,10 @@ * Inputs : none * Outputs : Drain pump data msg constructed and queued * @param tgtSpeed : target speed for drain pump in RPM. - * @param setPWM : set PWM duty cycle in %. + * @param dac : set DAC value. * @return TRUE if msg successfully queued for transmit, FALSE if not *************************************************************************/ -BOOL broadcastDrainPumpData( U32 tgtSpeed, F32 setPWM ) +BOOL broadcastDrainPumpData( U32 tgtSpeed, U32 dac ) { BOOL result; MESSAGE_T msg; @@ -509,7 +509,7 @@ msg.hdr.payloadLen = sizeof( DRAIN_PUMP_DATA_T ); payload.setDrainPumpSpeed = tgtSpeed; - payload.drainPumpPWM = setPWM; + payload.dacValue = dac; memcpy( payloadPtr, &payload, sizeof( DRAIN_PUMP_DATA_T ) ); @@ -685,13 +685,13 @@ { BOOL result = FALSE; - if ( message->hdr.payloadLen == sizeof(U32) ) + if ( message->hdr.payloadLen == sizeof(RESERVOIR_ID_T) ) { - U32 reservoirID; + RESERVOIR_ID_T reservoirID; result = TRUE; - memcpy( &reservoirID, message->payload, sizeof(U32) ); - setActiveReservoirCmd( (RESERVOIR_ID_T)reservoirID ); + memcpy( &reservoirID, message->payload, sizeof(RESERVOIR_ID_T) ); + setActiveReservoirCmd( reservoirID ); } sendAckResponseMsg( (MSG_ID_T)message->hdr.msgID, COMM_BUFFER_OUT_CAN_DG_2_HD, result ); } @@ -779,6 +779,38 @@ /************************************************************************* * @brief + * The handleStartStopTrimmerHeaterCmd function handles a trimmer heater start/stop \n + * command message from the HD. + * @details + * Inputs : none + * Outputs : message handled + * @param message : a pointer to the message to handle + * @return none + *************************************************************************/ +void handleStartStopTrimmerHeaterCmd( MESSAGE_T *message ) +{ + BOOL result = FALSE; + + if ( message->hdr.payloadLen == sizeof(U32) ) + { + BOOL startingHeater; + + memcpy( &startingHeater, message->payload, sizeof(U32) ); + + if ( TRUE == startingHeater ) + { + result = startTrimmerHeaterCmd(); + } + else + { + result = stopTrimmerHeaterCmd(); + } + } + sendAckResponseMsg( (MSG_ID_T)message->hdr.msgID, COMM_BUFFER_OUT_CAN_DG_2_HD, result ); +} + +/************************************************************************* + * @brief * The handleSampleWaterCmd function handles a sample water command from the HD. * @details * Inputs : none Index: firmware/App/Services/SystemCommMessages.h =================================================================== diff -u -rf5b02f03b6695c0c76fd8a4d902a13114e1a8aca -rbbf1e3736be03a4f041ace57e0f95e23caf472dd --- firmware/App/Services/SystemCommMessages.h (.../SystemCommMessages.h) (revision f5b02f03b6695c0c76fd8a4d902a13114e1a8aca) +++ firmware/App/Services/SystemCommMessages.h (.../SystemCommMessages.h) (revision bbf1e3736be03a4f041ace57e0f95e23caf472dd) @@ -48,7 +48,7 @@ BOOL broadcastROPumpData( U32 tgtPressure, F32 measFlow, F32 setPWM ); // MSG_ID_DRAIN_PUMP_DATA -BOOL broadcastDrainPumpData( U32 tgtSpeed, F32 setPWM ); +BOOL broadcastDrainPumpData( U32 tgtSpeed, U32 dac ); // MSG_ID_DG_PRESSURES_DATA BOOL broadcastPressureSensorsData( F32 measROIn, F32 measROOut, F32 measDrainIn, F32 measDrainOut ); @@ -80,6 +80,9 @@ // MSG_ID_DG_SAMPLE_WATER_CMD void handleSampleWaterCmd( MESSAGE_T *message ); +// MSG_ID_DG_START_STOP_TRIMMER_HEATER_CMD +void handleStartStopTrimmerHeaterCmd( MESSAGE_T *message ); + // *********** public test support message functions ********** #ifdef DEBUG_ENABLED