Index: firmware/App/Controllers/DialysatePumps.c =================================================================== diff -u -r1644c24b0b51661ceaba579e5ebee0d1d5bad85f -r3f1b02b5eeec93b2b7ad22f8fffcf3caffaebbaf --- firmware/App/Controllers/DialysatePumps.c (.../DialysatePumps.c) (revision 1644c24b0b51661ceaba579e5ebee0d1d5bad85f) +++ firmware/App/Controllers/DialysatePumps.c (.../DialysatePumps.c) (revision 3f1b02b5eeec93b2b7ad22f8fffcf3caffaebbaf) @@ -39,14 +39,15 @@ */ // ********** private definitions ********** + #define DIALYSATE_PUMP_DATA_PUB_INTERVAL ( MS_PER_SECOND / TASK_PRIORITY_INTERVAL ) ///< Interval (ms/task time) at which the dialysate pump data is published on the CAN bus. #define DATA_PUBLISH_COUNTER_START_COUNT 60 ///< Data publish counter start count. #define DP_CONTROL_INTERVAL_MS 1000 ///< Dialysate pump control interval in ms #define DP_CONTROL_INTERVAL ( DP_CONTROL_INTERVAL_MS / TASK_GENERAL_INTERVAL ) ///< Interval (ms/task time) at which the dialysate pump is controlled. #define DIALYSATE_PUMP_CONTROL_RUN 0x01 ///< Dialysate pump control run pump. #define DIALYSATE_PUMP_CONTROL_STOP 0x00 ///< Dialysate pump control stop pump. #define DIALYSATE_PUMP_FORWARD_DIR 1 ///< Dialysate pump forward direction. reverse direction is not allowed. -#define DIALYSATE_PUMP_RAMP_SPEED_INCREMENT 10.0F ///< Speed increase when controlling dialysate pump ramp to target step speed. +#define DIALYSATE_PUMP_RAMP_SPEED_INCREMENT 50.0F ///< Speed increase when controlling dialysate pump ramp to target step speed. #define ZERO_SPEED 0.0F ///< Zero speed/RPM value. #define DIALYSATE_PUMP_MAX_CURRENT_WHEN_OFF_A 0.1F ///< Dialysate pump maximum current when the pump is off in amps. @@ -124,9 +125,8 @@ // ********** private data ********** static U32 dialysatePumpDataPublicationTimerCounter; ///< Used to schedule dialysate pump data publication to CAN bus. -static OVERRIDE_U32_T dialysatePumpDataPublishInterval = { DIALYSATE_PUMP_DATA_PUB_INTERVAL, - DIALYSATE_PUMP_DATA_PUB_INTERVAL, - 0, 0 }; ///< Interval (in ms) at which to publish dialysate pump data to CAN bus. +static OVERRIDE_U32_T dialysatePumpDataPublishInterval; ///< Interval (in ms) at which to publish dialysate pump data to CAN bus. + //static DD_DIALYSATE_PUMP_CAL_RECORD_T dialysatePumpCalRecord; ///< Dialysate pump calibration record. static DIALYSATE_PUMP_DATA_T dialysatePumps[ NUM_OF_DIALYSATE_PUMPS ]; ///< Array of dialysate pumps data structure. static OVERRIDE_F32_T pumpTargetSpeed[ NUM_OF_DIALYSATE_PUMPS ]; ///< Target dialysate pumps' speed (mL/min).forward direction only, hence positive speed. @@ -202,6 +202,11 @@ signalDialysatePumpHardStop( pumpId ); } + dialysatePumpDataPublishInterval.data = DIALYSATE_PUMP_DATA_PUB_INTERVAL; + dialysatePumpDataPublishInterval.ovInitData = DIALYSATE_PUMP_DATA_PUB_INTERVAL; + dialysatePumpDataPublishInterval.ovData = 0; + dialysatePumpDataPublishInterval.override = OVERRIDE_RESET; + pumpTargetPressure[D12_PUMP].data = DEFAULT_FRESH_DIALYSATE_TARGET_PRESSURE_PSI; pumpTargetPressure[D12_PUMP].ovInitData = DEFAULT_FRESH_DIALYSATE_TARGET_PRESSURE_PSI; pumpTargetPressure[D12_PUMP].ovData = 0.0F; @@ -271,10 +276,11 @@ *************************************************************************/ static void calculateDegasPumpTargetPressure( void ) { - F32 pressureInmmHg = getFilteredPressure( BARO_PRES ); + //TODO: Uncomment below once baro reading available from TD. + //F32 pressureInmmHg = getFilteredPressure( BARO_PRES ); //Get the degassing target pressure - pumpTargetPressure[D12_PUMP].data = ( ( DEGAS_PUMP_SLOPE_FACTOR * pressureInmmHg ) + DEGAS_PUMP_INTERCEPT_FACTOR ) + DEGAS_PUMP_TARGET_PRES_ADJ_THRESHOLD; + //pumpTargetPressure[D12_PUMP].data = ( ( DEGAS_PUMP_SLOPE_FACTOR * pressureInmmHg ) + DEGAS_PUMP_INTERCEPT_FACTOR ) + DEGAS_PUMP_TARGET_PRES_ADJ_THRESHOLD; } /*********************************************************************//** Index: firmware/App/Drivers/TemperatureSensors.c =================================================================== diff -u -r09583a9e0a51bb47dd04c825cd706f5a3774bded -r3f1b02b5eeec93b2b7ad22f8fffcf3caffaebbaf --- firmware/App/Drivers/TemperatureSensors.c (.../TemperatureSensors.c) (revision 09583a9e0a51bb47dd04c825cd706f5a3774bded) +++ firmware/App/Drivers/TemperatureSensors.c (.../TemperatureSensors.c) (revision 3f1b02b5eeec93b2b7ad22f8fffcf3caffaebbaf) @@ -57,10 +57,7 @@ #define NON_FLUID_PATH_TEMP_SENSORS_MAX_ALLOWED_DEGREE_C 80.0F ///< Non fluid temperature sensors path maximum allowed temperature in C. #define TEMP_SENSORS_OUT_OF_RANGE_TIME_OUT_MS ( 5 * MS_PER_SECOND ) ///< Temperature sensor out of range persistent period in milliseconds. #define DATA_PUBLISH_COUNTER_START_COUNT 30 ///< Data publish counter start count. -#define BARO_SENSOR_REFERENCE_TEMP_C 2000 ///< Barometric sensor reference temperature in C. -#define BARO_SENSOR_WAIT_FOR_COEFF_TIME_OUT_MS ( 20 * MS_PER_SECOND ) ///< Barometric sensor wait for coefficients timeout in milliseconds. #define TEMP_READ_COUNTER_MAX_VALUE 255 ///< FPGA temperature sensor read counter max value. -#define BARO_SENSOR_CRC_MAX_VALUE 65535 ///< Baro sensor coefficients CRC max value static const U32 TEMP_EQUATION_RESISTOR_CALC = 1 << ( TEMP_SENSORS_ADC_BITS - 1 ); ///< Temperature sensors resistor calculation (2^(24 - 1)). static const F32 TEMP_EQUATION_COEFF_A = 3.9083E-3; ///< ADC to temperature conversion coefficient A. @@ -79,39 +76,13 @@ S32 adcNextIndex; ///< Next ADC read index S32 adcRunningSum; ///< ADC running sum F32 maxAllowedTemp; ///< Maximum allowed temperature of the sensor - S32 baroTempSnsrDiff; ///< Barometric sensor temperature difference } TEMP_SENSOR_T; -/// Barometric sensor temperature conversion -typedef struct -{ - U16 refTemperature; ///< Barometric sensor reference temperature. - U16 temperatureCoeff; ///< Barometric sensor temperature coefficient. - OVERRIDE_U32_T coeffsCRC; ///< Barometric sensor coefficients CRC. - U32 waitForCoeffStartTimeMS; ///< Barometric sensor wait for coefficients start time in milliseconds. - BOOL hasCRCBeenChecked; ///< Barometric sensor has CRC been checked flag. -} BARO_SENSOR_CONSTS_T; - -/// Barometric sensor - 6 type of coefficients -typedef struct -{ - U16 mfgInfo; ///< Barometric sensor manufacturing info. - U16 pressSensitivity; ///< Barometric sensor pressure sensitivity. - U16 pressOffset; ///< Barometric sensor pressure offset. - U16 tempCoeffOfPressSens; ///< Barometric sensor temperature coefficient of pressure sensor. - U16 tempCoeffPressOffset; ///< Barometric sensor temperature coefficient of pressure offset. - U16 referenceTemp; ///< Barometric sensor reference temperature. - U16 tempCoeffOfTemp; ///< Barometric sensor temperature coefficient of Temperature sensor. - U16 crc; ///< Barometric sensor CRC of the coefficients. -} BARO_SENSORS_COEFFS_T; - // ********** private data ********** static TEMP_SENSOR_T tempSensors [ NUM_OF_TEMPERATURE_SENSORS ]; ///< Temperature sensors' data structure. static OVERRIDE_F32_T temperatureValue[ NUM_OF_TEMPERATURE_SENSORS ]; ///< Temperature values with override static OVERRIDE_U32_T lastTemperatureReadCounter; ///< Temperature sensors read count from FPGA. -static OVERRIDE_U32_T lastBaroTempReadCounter; ///< Barometric sensor read count from FPGA. -static BARO_SENSOR_CONSTS_T baroConvConsts; ///< Barometric sensor conversion constants. //static DD_TEMP_SENSORS_CAL_RECORD_T tempSensorCalRecord; ///< Temperature sensors calibration record. @@ -120,7 +91,6 @@ static F32 getADC2TempConversion( F32 avgADC, U32 gain, U32 refResistance, U32 zeroDegResistance, F32 adcConversionCoeff ); static void processTempSnsrsADCRead( U32 sensorIndex, U32 adc ); static void processADCRead( U32 sensorIndex, S32 adc ); -static void checkBaroSensorCRC( void ); static void checkTemperatureSensors( void ); static void getCalibrationAppliedTemperatureValue( U32 sesnorIndex, F32* temperature ); @@ -136,30 +106,23 @@ U08 i; F32 conversionCoeff = 1.0F / 13584.0F; - baroConvConsts.coeffsCRC.data = 0; - baroConvConsts.hasCRCBeenChecked = FALSE; - baroConvConsts.waitForCoeffStartTimeMS = 0; - for ( i = 0; i < NUM_OF_TEMPERATURE_SENSORS; ++i ) { memset( &tempSensors[ i ], 0x0, sizeof( TEMP_SENSOR_T ) ); //benignPolynomialCalRecord( &tempSensorCalRecord.tempSensors[ i ] ); } - // Initialize the barometric sensor's temperature conversion constants - memset( &baroConvConsts, 0x0, sizeof( BARO_SENSOR_CONSTS_T ) ); - // Initialize TH1 (primary heater), TH2(outlet Heat Exchanger), TAUX ( Inlet Heat exchanger), // TH3 ( Trim Heater) constants. tempSensors[ D1_TEMP ].gain = PRIMARY_HEATER_TEMP_SENSORS_GAIN; tempSensors[ D1_TEMP ].refResistance = PRIMARY_HEATER_TEMP_SENSORS_REF_RESISTANCE; tempSensors[ D1_TEMP ].zeroDegreeResistance = PRIMARY_HEATER_TEMP_SENSORS_0_DEGREE_RESISTANCE; tempSensors[ D1_TEMP ].maxAllowedTemp = TEMP_SENSORS_MAX_ALLOWED_DEGREE_C; - tempSensors[ X6_TEMP ].gain = PRIMARY_HEATER_TEMP_SENSORS_GAIN; - tempSensors[ X6_TEMP ].refResistance = PRIMARY_HEATER_TEMP_SENSORS_REF_RESISTANCE; - tempSensors[ X6_TEMP ].zeroDegreeResistance = PRIMARY_HEATER_TEMP_SENSORS_0_DEGREE_RESISTANCE; - tempSensors[ X6_TEMP ].maxAllowedTemp = TEMP_SENSORS_MAX_ALLOWED_DEGREE_C; + tempSensors[ D78_TEMP ].gain = PRIMARY_HEATER_TEMP_SENSORS_GAIN; + tempSensors[ D78_TEMP ].refResistance = PRIMARY_HEATER_TEMP_SENSORS_REF_RESISTANCE; + tempSensors[ D78_TEMP ].zeroDegreeResistance = PRIMARY_HEATER_TEMP_SENSORS_0_DEGREE_RESISTANCE; + tempSensors[ D78_TEMP ].maxAllowedTemp = TEMP_SENSORS_MAX_ALLOWED_DEGREE_C; tempSensors[ D4_TEMP ].gain = PRIMARY_HEATER_TEMP_SENSORS_GAIN; tempSensors[ D4_TEMP ].refResistance = PRIMARY_HEATER_TEMP_SENSORS_REF_RESISTANCE; @@ -175,14 +138,11 @@ tempSensors[ BRD_TEMP ].conversionCoeff = conversionCoeff; tempSensors[ BRD_TEMP ].maxAllowedTemp = NON_FLUID_PATH_TEMP_SENSORS_MAX_ALLOWED_DEGREE_C; - tempSensors[ BARO_TEMP ].maxAllowedTemp = NON_FLUID_PATH_TEMP_SENSORS_MAX_ALLOWED_DEGREE_C; - // Persistent alarm for the temperature sensors range check initPersistentAlarm( ALARM_ID_DD_TEMPERATURE_SENSOR_OUT_OF_RANGE, TEMP_SENSORS_OUT_OF_RANGE_TIME_OUT_MS, TEMP_SENSORS_OUT_OF_RANGE_TIME_OUT_MS ); // Initialize the FPGA persistent alarms initFPGAPersistentAlarm( FPGA_PERS_ERROR_RTD_ADC_TEMP_SENSORS, ALARM_ID_DD_RTD_SENSORS_FPGA_FAULT, TEMP_SENSORS_FPGA_ERROR_TIMEOUT_MS, TEMP_SENSORS_FPGA_ERROR_TIMEOUT_MS); - initFPGAPersistentAlarm( FPGA_PERS_ERROR_BARO_SENSOR, ALARM_ID_DD_BARO_SENSOR_FPGA_FAULT, TEMP_SENSORS_FPGA_ERROR_TIMEOUT_MS, TEMP_SENSORS_FPGA_ERROR_TIMEOUT_MS); } /*********************************************************************//** @@ -215,36 +175,10 @@ /*********************************************************************//** * @brief - * The getBaroSensorTemperatureDiff function returns the barometric pressure - * sensor's temperature difference. - * @details \b Inputs: tempSensors - * @details \b Outputs: none - * @return barometric pressure sensor temperature difference - *************************************************************************/ -S32 getBaroSensorTemperatureDiff( void ) -{ - return tempSensors[ BARO_TEMP ].baroTempSnsrDiff; -} - -/*********************************************************************//** - * @brief - * The setBaroSensorCoefficientReadStartTime function populates the start - * time of baro sensor coefficient read transaction initiated to FPGA. - * @details \b Inputs: none - * @details \b Outputs: baroConvConsts - * @return none - *************************************************************************/ -void setBaroSensorCoefficientReadStartTime( void ) -{ - baroConvConsts.waitForCoeffStartTimeMS = getMSTimerCount(); -} - -/*********************************************************************//** - * @brief * The readTemperatureSensors function reads the temperature sensor * value from FPGA. * @details \b Inputs: FPGA - * @details \b Outputs: lastTemperatureReadCounter,lastBaroTempReadCounter + * @details \b Outputs: lastTemperatureReadCounter * @return none *************************************************************************/ void readTemperatureSensors( void ) @@ -254,26 +188,12 @@ //Read temperature sensors processTempSnsrsADCRead( D1_TEMP, getFPGAD1Temp() ); - processTempSnsrsADCRead( X6_TEMP, getFPGAX6Temp() ); + processTempSnsrsADCRead( D78_TEMP, getFPGAD78Temp() ); processTempSnsrsADCRead( D4_TEMP, getFPGAD4Temp() ); processTempSnsrsADCRead( D50_TEMP, getFPGAD50Temp() ); - //TODO: Read Board temperture + //TODO: Read Board temperature //processTempSnsrsADCRead( TEMPSENSORS_INTERNAL_COND_TEMP_SENSOR, getFPGACondSnsrInternalTemp() ); - - //Read Baro temperature sensor - if ( getCurrentOperationMode() != DD_MODE_INIT ) - { -#ifdef ENABLE_ALARM_1 - // Make sure the baro sensor coefficients are not corrupted - checkBaroSensorCRC(); -#endif - baroConvConsts.refTemperature = getFPGABaroReferenceTemperature(); - baroConvConsts.temperatureCoeff = getFPGABaroTempCoeffOfTemperature(); - lastBaroTempReadCounter.data = (U32)getFPGABaroReadCount(); - - processTempSnsrsADCRead( BARO_TEMP, getFPGABaroTemperature() ); - } } /*********************************************************************//** @@ -298,42 +218,17 @@ /*********************************************************************//** * @brief - * The getBaroTempSensorsReadCount function gets the barometric temperature sensor - * read count. - * @details \b Inputs: lastBaroTempReadCounter - * @details \b Outputs: none - * @return The barometric temperature sensor read count. - *************************************************************************/ -U32 getBaroTempSensorsReadCount( void ) -{ - U32 result = lastBaroTempReadCounter.data; - - if ( OVERRIDE_KEY == lastBaroTempReadCounter.override ) - { - result = lastBaroTempReadCounter.ovData; - } - - return result; -} - -/*********************************************************************//** - * @brief * The checkTemperatureSensors function checks the temperature sensor * freshness and see if there is any read failures from FPGA. * @details \b Inputs: Temperature sensors reading from FPGA * @details \b Outputs: none * @details \b Alarms: ALARM_ID_DD_RTD_SENSORS_FPGA_FAULT when temperature sensor * read count not updated periodically - * @details \b Alarms: ALARM_ID_DD_BARO_SENSOR_FPGA_FAULT when baro temperature sensor - * read count not updated periodically * @return none *************************************************************************/ static void checkTemperatureSensors( void ) { checkFPGAPersistentAlarms( FPGA_PERS_ERROR_RTD_ADC_TEMP_SENSORS, getTemperatureSensorsReadCount() ); -#ifdef ENABLE_ALARM_1 - checkFPGAPersistentAlarms( FPGA_PERS_ERROR_BARO_SENSOR, getBaroTempSensorsReadCount() ); -#endif } /*********************************************************************//** @@ -418,7 +313,7 @@ switch( sensorIndex ) { case D1_TEMP: - case X6_TEMP: + case D78_TEMP: case D4_TEMP: case D50_TEMP: temperature = getADC2TempConversion( avgADCReads, (U32)tempSensors [ sensorIndex ].gain, (U32)tempSensors [ sensorIndex ].refResistance, @@ -429,17 +324,6 @@ //TODO : Need details on calculations. break; - case BARO_TEMP: - { - S32 baroTempSensorsDiff = (S32)avgADCReads - ( baroConvConsts.refTemperature * TWO_TO_POWER_OF_8 ); - S64 differenceTimesCoefficient = (S64)baroTempSensorsDiff * (S64)baroConvConsts.temperatureCoeff; - S64 baroSnsrTemperature = BARO_SENSOR_REFERENCE_TEMP_C + ( differenceTimesCoefficient / TWO_TO_POWER_OF_23 ); - - temperature = (F32)( baroSnsrTemperature / 100.0F ); - tempSensors[ sensorIndex ].baroTempSnsrDiff = baroTempSensorsDiff; - } - break; - default: // Wrong sensor was called, raise an alarm SET_ALARM_WITH_2_U32_DATA( ALARM_ID_DD_SOFTWARE_FAULT, SW_FAULT_ID_INVALID_TEMPERATURE_SENSOR_SELECTED2, sensorIndex ); @@ -495,53 +379,6 @@ /*********************************************************************//** * @brief - * The checkBaroSensorCRC function gets all the barometric sensor coefficients - * and calls crc4 function to calculate the CRC of the coefficients and compares - * them to the provided CRC by the manufacturer. - * @details \b Inputs: hasBaroCoeffsBeenChecked - * @details \b Outputs: hasBaroCoeffsBeenChecked - * @details \b Alarms: ALARM_ID_DD_BAROMETRIC_SENSOR_COEFFS_BAD_CRC when baro - * temperature sensor coefficient CRC mismatch or timeout. - * @return none - *************************************************************************/ -static void checkBaroSensorCRC( void ) -{ - U32 baroCRC = (U32)getFPGABaroCoeffsCRC(); - BOOL hasCRCChanged = ( baroCRC != getU32OverrideValue( &baroConvConsts.coeffsCRC ) ? TRUE : FALSE ); - - // Once FPGA is ready get the barometric sensor's temperature conversion constants - if ( TRUE == hasCRCChanged ) - { - U08 calculatedCRC; - BARO_SENSORS_COEFFS_T baroCoeffs; - - baroCoeffs.mfgInfo = getFPGABaroMfgInfo(); - baroCoeffs.pressSensitivity = getFPGABaroPressureSensitivity(); - baroCoeffs.pressOffset = getFPGABaroPressureOffset(); - baroCoeffs.tempCoeffOfPressSens = getFPGABaroTempCoeffOfPressSensitvity(); - baroCoeffs.tempCoeffPressOffset = getFPGABaroTempCoeffOfPressOffset(); - baroCoeffs.referenceTemp = getFPGABaroReferenceTemperature(); - baroCoeffs.tempCoeffOfTemp = getFPGABaroTempCoeffOfTemperature(); - baroCoeffs.crc = MASK_OFF_LSB & getFPGABaroCoeffsCRC(); - calculatedCRC = crc4( (U16*)&baroCoeffs, sizeof( baroCoeffs ) ); - baroConvConsts.coeffsCRC.data = baroCRC; - baroCRC = (U16)( baroCRC & MASK_OFF_MSB ) & MASK_OFF_NIBBLE_MSB; - baroConvConsts.hasCRCBeenChecked = TRUE; - - if ( calculatedCRC != baroCRC ) - { - SET_ALARM_WITH_2_U32_DATA( ALARM_ID_DD_BAROMETRIC_SENSOR_COEFFS_BAD_CRC, calculatedCRC, baroCoeffs.crc ); - } - } - else if ( ( TRUE == didTimeout( baroConvConsts.waitForCoeffStartTimeMS, BARO_SENSOR_WAIT_FOR_COEFF_TIME_OUT_MS ) ) && - ( FALSE == baroConvConsts.hasCRCBeenChecked ) ) - { - SET_ALARM_WITH_2_U32_DATA( ALARM_ID_DD_BAROMETRIC_SENSOR_COEFFS_BAD_CRC, 0, baroCRC ); - } -} - -/*********************************************************************//** - * @brief * The getCalibrationAppliedTemperatureValue function applies the calibration * values to the provided temperature value * @details \b Inputs: tempSensorCalRecord @@ -561,7 +398,7 @@ //calId = CAL_DATA_INLET_HEAT_EXCHANGER_TEMP; break; - case X6_TEMP: + case D78_TEMP: //calId = CAL_DATA_OUTLET_HEAT_EXCHANGER_TEMP; break; @@ -573,10 +410,6 @@ //calId = CAL_DATA_TRIM_HEATER_TEMP; break; - case BARO_TEMP: - //calId = CAL_DATA_BARMOTERIC_TEMP; - break; - default: // Set the calibration temperature value as num of meaning calibration is not needed for the provided sensor //calId = NUM_OF_CAL_DATA_TEMP_SENSORS; @@ -633,38 +466,4 @@ return result; } -/*********************************************************************//** - * @brief - * The testBaroTemperatureReadCounterOverride function sets the override value - * of the baro temperature read counter. - * @details Inputs: lastBaroTempReadCounter - * @details Outputs: lastBaroTempReadCounter - * @param message Override message from Dialin which includes the read - * counter value to override for the baro sensor. - * @return TRUE if override successful, FALSE if not - *************************************************************************/ -BOOL testBaroTemperatureReadCounterOverride( MESSAGE_T *message ) -{ - BOOL result = u32Override( message, &lastBaroTempReadCounter, 0, TEMP_READ_COUNTER_MAX_VALUE ); - - return result; -} - -/*********************************************************************//** - * @brief - * The testBaroTemperatureReadCounterOverride function sets the override value - * of the baro temperature read counter. - * @details Inputs: lastBaroTempReadCounter - * @details Outputs: lastBaroTempReadCounter - * @param message Override message from Dialin which includes the CRC - * value to override for the baro sensor. - * @return TRUE if override successful, FALSE if not - *************************************************************************/ -BOOL testBaroTemperatureCRCOverride( MESSAGE_T *message ) -{ - BOOL result = u32Override( message, &baroConvConsts.coeffsCRC, 0, BARO_SENSOR_CRC_MAX_VALUE ); - - return result; -} - /**@}*/ Index: firmware/App/Services/Messaging.c =================================================================== diff -u -ra9432a08fba2911e7cf8bc62b0238aa0fd261445 -r3f1b02b5eeec93b2b7ad22f8fffcf3caffaebbaf --- firmware/App/Services/Messaging.c (.../Messaging.c) (revision a9432a08fba2911e7cf8bc62b0238aa0fd261445) +++ firmware/App/Services/Messaging.c (.../Messaging.c) (revision 3f1b02b5eeec93b2b7ad22f8fffcf3caffaebbaf) @@ -20,22 +20,38 @@ #include "reg_system.h" #include "BalancingChamber.h" #include "BloodLeak.h" +#include "BoostPump.h" #include "Conductivity.h" #include "Compatible.h" #include "ConcentratePumps.h" #include "DialysatePumps.h" -#include "Heaters.h" +#include "Flow.h" +#include "FlowSensor.h" +#include "FluidPump.h" +#include "FlushConcentrate.h" +#include "FlushFilter.h" +#include "FlushPermeate.h" #include "FpgaDD.h" +#include "FPModeFault.h" +#include "FPModeInitPOST.h" +#include "FPModeStandby.h" +#include "FPOperationModes.h" +#include "Heaters.h" +#include "InletPressureCheck.h" #include "Level.h" #include "Messaging.h" #include "MessagePayloads.h" #include "ModeGenDialysate.h" +#include "ModeGenPermeate.h" #include "ModePreGenDialysate.h" +#include "ModePreGenPermeate.h" #include "ModePostGenDialysate.h" #include "ModeStandby.h" #include "OperationModes.h" #include "PAL.h" +#include "PermeateTank.h" #include "Pressure.h" +#include "ROPump.h" #include "SafetyShutdown.h" #include "SpentChamberFill.h" #include "SystemCommDD.h" @@ -45,8 +61,8 @@ #include "Utilities.h" #include "Ultrafiltration.h" #include "Valves.h" +#include "Voltages.h" - /** * @addtogroup Messaging * @{ @@ -71,18 +87,18 @@ COMM_BUFFER_NOT_USED, ///< CAN message boxes start at 1 so we will not use this buffer COMM_BUFFER_OUT_CAN_DD_ALARM, ///< Buffer for responding to incoming TD alarm messages COMM_BUFFER_NOT_USED, ///< Buffer for outgoing DD alarm messages so no response buffer - COMM_BUFFER_OUT_CAN_DD_ALARM, ///< Buffer for responding to incoming RO alarm messages + COMM_BUFFER_NOT_USED, ///< Buffer for outgoing FP alarm messages so no response buffer COMM_BUFFER_OUT_CAN_DD_ALARM, ///< Buffer for responding to incoming UI alarm messages COMM_BUFFER_OUT_CAN_DD_2_TD, ///< Buffer for responding to incoming TD to DD messages COMM_BUFFER_NOT_USED, ///< Buffer for outgoing DD to TD messages so no response buffer - COMM_BUFFER_NOT_USED, ///< Buffer for outgoing DD to RO messages so no response buffer - COMM_BUFFER_OUT_CAN_DD_2_RO, ///< Buffer for responding to incoming RO to DD messages COMM_BUFFER_OUT_CAN_DD_BROADCAST, ///< Buffer for responding to incoming TD broadcast messages COMM_BUFFER_NOT_USED, ///< Buffer for outgoing DD broadcast messages so no response buffer - COMM_BUFFER_OUT_CAN_DD_BROADCAST, ///< Buffer for responding to incoming RO broadcast messages + COMM_BUFFER_NOT_USED, ///< Buffer for outgoing FP broadcast messages so no response buffer COMM_BUFFER_OUT_CAN_DD_BROADCAST, ///< Buffer for responding to incoming UI broadcast messages - COMM_BUFFER_OUT_CAN_PC, ///< Buffer for responding to incoming PC to TD messages - COMM_BUFFER_NOT_USED, ///< Buffer for outgoing HD to PC messages so no response buffer + COMM_BUFFER_OUT_DD_CAN_PC, ///< Buffer for responding to incoming PC to DD messages + COMM_BUFFER_NOT_USED, ///< Buffer for outgoing DD to PC messages so no response buffer + COMM_BUFFER_OUT_FP_CAN_PC, ///< Buffer for responding to incoming PC to FP messages + COMM_BUFFER_NOT_USED, ///< Buffer for outgoing FP to PC messages so no response buffer }; typedef BOOL (*MsgFuncPtr)( MESSAGE_T* ); @@ -102,29 +118,25 @@ { MSG_ID_DD_VALVE_PUBLISH_INTERVAL_OVERRIDE_REQUEST, &testValvesStatesPublishIntervalOverride }, { MSG_ID_DD_VALVE_STATE_OVERRIDE_REQUEST, &testValveStateOverride }, { MSG_ID_DD_VALVE_SENSED_STATE_OVERRIDE_REQUEST, &testValveSensedStateOverride }, - { MSG_ID_DD_PRESSURE_SENSOR_READINGS_OVERRIDE_REQUEST, &testPressureSensorReadingsOverride }, - { MSG_ID_DD_PRESSURE_SENSOR_TEMPERATURE_OVERRIDE_REQUEST, &testPressureSensorTemperatureReadingsOverride }, - { MSG_ID_DD_PRESSURE_SENSOR_READ_COUNTER_OVERRIDE_REQUEST, &testPressureSensorReadCounterOverride }, - { MSG_ID_DD_PRESSURE_SENSOR_ERROR_COUNTER_OVERRIDE_REQUEST, &testPressureSensorErrorCounterOverride }, - { MSG_ID_DD_PRESSURE_SENSOR_PUBLISH_INTERVAL_OVERRIDE_REQUEST, &testPressureSensorDataPublishIntervalOverride }, - { MSG_ID_DD_PRESSURE_SENSOR_FILTER_READINGS_OVERRIDE_REQUEST, &testPressureSensorFilteredReadingsOverride }, - { MSG_ID_DD_PRESSURE_SENSOR_FILTER_TEMPERATURE_OVERRIDE_REQUEST, &testPressureSensorFilteredTemperatureReadingsOverride }, - { MSG_ID_DD_CONDUCTIVITY_SENSOR_READINGS_OVERRIDE_REQUEST, &testConductivitySensorReadingsOverride }, - { MSG_ID_DD_CONDUCTIVITY_SENSOR_TEMPERATURE_OVERRIDE_REQUEST, &testConductivitySensorTemperatureReadingsOverride }, - { MSG_ID_DD_CONDUCTIVITY_SENSOR_READ_COUNTER_OVERRIDE_REQUEST, &testConductivitySensorReadCounterOverride }, - { MSG_ID_DD_CONDUCTIVITY_SENSOR_ERROR_COUNTER_OVERRIDE_REQUEST, &testConductivitySensorErrorCounterOverride }, - { MSG_ID_DD_CONDUCTIVITY_SENSOR_PUBLISH_INTERVAL_OVERRIDE_REQUEST, &testConductivitySensorDataPublishIntervalOverride }, + { MSG_ID_DD_PRESSURE_SENSOR_READINGS_OVERRIDE_REQUEST, &testDDPressureSensorReadingsOverride }, + { MSG_ID_DD_PRESSURE_SENSOR_TEMPERATURE_OVERRIDE_REQUEST, &testDDPressureSensorTemperatureReadingsOverride }, + { MSG_ID_DD_PRESSURE_SENSOR_PUBLISH_INTERVAL_OVERRIDE_REQUEST, &testDDPressureSensorDataPublishIntervalOverride }, + { MSG_ID_DD_PRESSURE_SENSOR_FILTER_READINGS_OVERRIDE_REQUEST, &testDDPressureSensorFilteredReadingsOverride }, + { MSG_ID_DD_PRESSURE_SENSOR_FILTER_TEMPERATURE_OVERRIDE_REQUEST, &testDDPressureSensorFilteredTemperatureReadingsOverride }, + { MSG_ID_DD_CONDUCTIVITY_SENSOR_READINGS_OVERRIDE_REQUEST, &testDDConductivitySensorReadingsOverride }, + { MSG_ID_DD_CONDUCTIVITY_SENSOR_TEMPERATURE_OVERRIDE_REQUEST, &testDDConductivitySensorTemperatureReadingsOverride }, + { MSG_ID_DD_CONDUCTIVITY_SENSOR_READ_COUNTER_OVERRIDE_REQUEST, &testDDConductivitySensorReadCounterOverride }, + { MSG_ID_DD_CONDUCTIVITY_SENSOR_ERROR_COUNTER_OVERRIDE_REQUEST, &testDDConductivitySensorErrorCounterOverride }, + { MSG_ID_DD_CONDUCTIVITY_SENSOR_PUBLISH_INTERVAL_OVERRIDE_REQUEST, &testDDConductivitySensorDataPublishIntervalOverride }, { MSG_ID_DD_CONCENTRATE_PUMP_PUBLISH_INTERVAL_OVERRIDE_REQUEST, &testConcentratePumpDataPublishIntervalOverride }, { MSG_ID_DD_CONCENTRATE_PUMP_TARGET_SPEED_OVERRIDE_REQUEST, &testConcentratePumpTargetSpeedOverride }, { MSG_ID_DD_CONCENTRATE_PUMP_MEASURED_SPEED_OVERRIDE_REQUEST, &testConcentratePumpMeasuredSpeedOverride }, { MSG_ID_DD_CONCENTRATE_PUMP_PARKED_OVERRIDE_REQUEST, &testConcentratePumpParkedOverride }, { MSG_ID_DD_CONCENTRATE_PUMP_PARK_FAULT_OVERRIDE_REQUEST, &testConcentratePumpParkCmdFaultedOverride }, { MSG_ID_DD_CONCENTRATE_PUMP_PARK_REQUEST_OVERRIDE_REQUEST, &testConcentratePumpParkRequestOverride }, - { MSG_ID_DD_TEMPERATURE_SENSOR_PUBLISH_INTERVAL_OVERRIDE_REQUEST, &testTemperatureSensorsDataPublishIntervalOverride }, + { MSG_ID_DD_TEMPERATURE_SENSOR_PUBLISH_INTERVAL_OVERRIDE_REQUEST, &testDDTemperatureSensorsDataPublishIntervalOverride }, { MSG_ID_DD_TEMPERATURE_SENSOR_MEASURED_TEMPERATURE_OVERRIDE_REQUEST, &testMeasuredTemperatureOverride }, { MSG_ID_DD_TEMPERATURE_SENSOR_READ_COUNTER_OVERRIDE_REQUEST, &testTemperatureReadCounterOverride }, - { MSG_ID_DD_TEMPERATURE_SENSOR_BARO_READ_COUNTER_OVERRIDE_REQUEST, &testBaroTemperatureReadCounterOverride }, - { MSG_ID_DD_TEMPERATURE_SENSOR_BARO_CRC_OVERRIDE_REQUEST, &testBaroTemperatureCRCOverride }, { MSG_ID_DD_DIALYSATE_PUMPS_PUBLISH_INTERVAL_OVERRIDE_REQUEST, &testDialysatePumpsDataPublishIntervalOverride }, { MSG_ID_DD_DIALYSATE_PUMPS_TARGET_SPEED_OVERRIDE_REQUEST, &testDialysatePumpTargetSpeedOverride }, { MSG_ID_DD_DIALYSATE_PUMPS_MEASURED_SPEED_OVERRIDE_REQUEST, &testDialysatePumpMeasuredSpeedOverride }, @@ -171,12 +183,59 @@ { MSG_ID_DD_BLOOD_LEAK_EMBEDDED_MODE_INFO_OVERRIDE_REQUEST, &testBloodLeakEmbeddedModeInfoOverride }, { MSG_ID_DD_BLOOD_LEAK_INTENSITY_MOVING_AVERAGE_OVERRIDE_REQUEST, &testBloodLeakIntensityMovingAverageOverride }, { MSG_ID_DD_BLOOD_LEAK_ZEROING_INTERVAL_IN_MS_OVERRIDE_REQUEST, &testBloodLeakZeroingIntervalInMillisecondsOverride }, - { MSG_ID_DD_SET_TEST_CONFIGURATION, &testSetTestConfiguration }, - { MSG_ID_DD_GET_TEST_CONFIGURATION, &testGetTestConfiguration }, - { MSG_ID_DD_RESET_ALL_TEST_CONFIGURATIONS, &testResetAllTestConfigurations }, - { MSG_ID_DD_BLOOD_LEAK_ZERO_REQUEST, &testBloodLeakZeroSequenceRequest } + { MSG_ID_DD_BLOOD_LEAK_ZERO_REQUEST, &testBloodLeakZeroSequenceRequest }, + { MSG_ID_DD_FILTERED_COND_SENSOR_READINGS_OVERRIDE_REQUEST, &testDDConductivitySensorFilteredReadingsOverride }, + { MSG_ID_DD_FILTERED_COND_SENSOR_TEMPERATURE_OVERRIDE_REQUEST, &testDDConductivitySensorFilteredTemperatureReadingsOverride }, + { MSG_ID_FP_TESTER_LOGIN_REQUEST, &handleTesterFPLogInRequest }, + { MSG_ID_FP_SET_OPERATION_MODE_REQUEST, &testSetFPOperationMode }, + { MSG_ID_FP_OPERATION_MODE_PUBLISH_INTERVAL_OVERRIDE_REQUEST, &testSetFPOpModePublishIntervalOverride }, + { MSG_ID_FP_PRE_GEN_PUBLISH_INTERVAL_OVERRIDE_REQUEST, &testPreGenDataPublishIntervalOverride }, + { MSG_ID_FP_INLET_PRES_PUBLISH_INTERVAL_OVERRIDE_REQUEST, &testInletPressureCheckDataPublishIntervalOverride }, + { MSG_ID_FP_INLET_PRES_CHECK_TIME_OVERRIDE_REQUEST, &testInletPressureCheckTimerOverride }, + { MSG_ID_FP_BOOST_PUMP_PUBLISH_INTERVAL_OVERRIDE_REQUEST, &testBoostPumpDataPublishIntervalOverride }, + { MSG_ID_FP_BOOST_PUMP_TARGET_PRESSURE_OVERRIDE_REQUEST, &testBoostPumpTargetPressureOverride }, + { MSG_ID_FP_BOOST_PUMP_TARGET_FLOW_OVERRIDE_REQUEST, &testBoostPumpTargetFlowOverride }, + { MSG_ID_FP_BOOST_PUMP_TARGET_PWM_OVERRIDE_REQUEST, &testBoostPumpTargetDutyCycleOverride }, + { MSG_ID_FP_BOOST_PUMP_STOP_REQUEST, &testBoostPumpHardStop }, + { MSG_ID_FP_FLUID_PUMP_SET_PWM_REQUEST, &testSetFluidPumpPWM }, + { MSG_ID_FP_FLUID_PUMP_READ_PWM_OVERRIDE_REQUEST, &testFluidPumpPWMOverride }, + { MSG_ID_FP_FLUID_PUMP_SPEED_OVERRIDE_REQUEST, &testFluidPumpRPMOverride }, + { MSG_ID_FP_RO_PUMP_STOP_REQUEST, &testROPumpHardStop }, + { MSG_ID_FP_RO_PUMP_TARGET_PRESSURE_OVERRIDE_REQUEST, &testROPumpTargetPressureOverride }, + { MSG_ID_FP_RO_PUMP_TARGET_FLOW_OVERRIDE_REQUEST, &testROPumpTargetFlowOverride }, + { MSG_ID_FP_RO_PUMP_TARGET_PWM_OVERRIDE_REQUEST, &testROPumpTargetDutyCycleOverride }, + { MSG_ID_FP_PRESSURE_OVERRIDE_REQUEST, &testIOFPPressureSensorReadingsOverride }, + { MSG_ID_FP_PRESSURE_TEMP_OVERRIDE_REQUEST, &testIOFPPressureSensorTemperatureReadingsOverride }, + { MSG_ID_FP_PRESSURE_PUBLISH_INTERVAL_OVERRIDE_REQUEST, &testIOFPPressureSensorDataPublishIntervalOverride }, + { MSG_ID_FP_PRESSURE_SENSOR_FILTER_READINGS_OVERRIDE_REQUEST, &testIOFPPressureSensorFilteredReadingsOverride }, + { MSG_ID_FP_PRESSURE_SENSOR_FILTER_TEMPERATURE_OVERRIDE_REQUEST, &testIOFPPressureSensorFilteredTemperatureReadingsOverride }, + { MSG_ID_FP_TEMPERATURE_SENSOR_PUBLISH_INTERVAL_OVERRIDE_REQUEST, &testIOFPTemperatureSensorsDataPublishIntervalOverride }, + { MSG_ID_FP_VALVE_PUBLISH_INTERVAL_OVERRIDE_REQUEST, &testIOFPValvesStatesPublishIntervalOverride }, + { MSG_ID_FP_VALVE_CMD_STATE_OVERRIDE_REQUEST, &testIOFPValveStateOverride }, + { MSG_ID_FP_VALVE_SENSED_STATE_OVERRIDE_REQUEST, &testIOFPValveSensedStateOverride }, + { MSG_ID_FP_FLOWS_PUBLISH_INTERVAL_OVERRIDE_REQUEST, &testFlowSensorDataPublishIntervalOverride }, + { MSG_ID_FP_FLOW_RATE_OVERRIDE_REQUEST, &testFlowSensorReadingsOverride }, + { MSG_ID_FP_FLOW_TEMP_OVERRIDE_REQUEST, &testFlowSensorTemperatureReadingsOverride }, + { MSG_ID_FP_FILTERED_FLOW_RATE_OVERRIDE_REQUEST, &testFlowSensorFilteredReadingsOverride }, + { MSG_ID_FP_FILTERED_FLOW_TEMP_OVERRIDE_REQUEST, &testFlowSensorFilteredTemperatureReadingsOverride }, + { MSG_ID_FP_ALARM_STATE_OVERRIDE_REQUEST, &testAlarmStateOverride }, + { MSG_ID_FP_ALARM_CLEAR_ALL_ALARMS_REQUEST, &testFPClearAllAlarms }, + { MSG_ID_FP_CONDUCTIVITY_PUBLISH_INTERVAL_OVERRIDE_REQUEST, &testFPConductivitySensorDataPublishIntervalOverride }, + { MSG_ID_FP_CONDUCTIVITY_OVERRIDE_REQUEST, &testFPConductivitySensorReadingsOverride }, + { MSG_ID_FP_CONDUCTIVITY_TEMP_OVERRIDE_REQUEST, &testFPConductivitySensorTemperatureReadingsOverride }, + { MSG_ID_FP_CONDUCTIVITY_READ_COUNT_OVERRIDE_REQUEST, &testFPConductivitySensorReadCounterOverride }, + { MSG_ID_FP_CONDUCTIVITY_ERROR_COUNT_OVERRIDE_REQUEST, &testFPConductivitySensorErrorCounterOverride }, + { MSG_ID_FP_FILTERED_COND_SENSOR_READINGS_OVERRIDE_REQUEST, &testFPConductivitySensorFilteredReadingsOverride }, + { MSG_ID_FP_FILTERED_COND_SENSOR_TEMPERATURE_OVERRIDE_REQUEST, &testFPConductivitySensorFilteredTemperatureReadingsOverride }, + { MSG_ID_DD_VOLTAGE_DATA_PUBLISH_INTERVAL_OVERRIDE_REQUEST, &testVoltageDataPublishIntervalOverride }, + { MSG_ID_DD_MONITORED_VOLTAGE_OVERRIDE_REQUEST, &testVoltageOverride }, + { MSG_ID_FP_LEVEL_PUBLISH_INTERVAL_OVERRIDE_REQUEST, &testFPLevelsDataPublishIntervalOverride }, + { MSG_ID_FP_LEVEL_OVERRIDE_REQUEST, &testFPLevelStateOverride }, + { MSG_ID_FP_PERMEATE_TANK_PUBLISH_INTERVAL_OVERRIDE_REQUEST, &testPermeateTankDataPublishIntervalOverride }, + { MSG_ID_FP_RO_PUMP_PUBLISH_INTERVAL_OVERRIDE_REQUEST, &testROPumpDataPublishIntervalOverride }, }; +/// Calculation for number of entries in the incoming message function handler look-up table. #define NUM_OF_FUNCTION_HANDLERS (sizeof(MSG_FUNCTION_HANDLER_LOOKUP) / sizeof(MSG_HANDLER_LOOKUP_T)) // ********** private data ********** @@ -377,6 +436,7 @@ // if Dialin message, ensure Dialin is logged in before processing it if ( ( message->hdr.msgID < MSG_ID_FIRST_TD_TESTER_MESSAGE ) || ( MSG_ID_FIRST_DD_TESTER_MESSAGE == message->hdr.msgID ) || + ( MSG_ID_FIRST_FP_TESTER_MESSAGE == message->hdr.msgID ) || ( TRUE == isTestingActivated() ) ) { MsgFuncPtr msgFuncPtr; @@ -432,14 +492,29 @@ // Create a message record blankMessage( &msg ); - msg.hdr.msgID = MSG_ID_DD_EVENT; + if ( ( event >= FP_EVENT_FIRST ) && ( event <= FP_EVENT_LAST ) ) + { + msg.hdr.msgID = MSG_ID_FP_EVENT; + } + else + { + msg.hdr.msgID = MSG_ID_DD_EVENT; + } + msg.hdr.payloadLen = sizeof( EVENT_PAYLOAD_T ); memcpy( &msg.payload, &eventStruct, sizeof( EVENT_PAYLOAD_T ) ); // Serialize the message (w/ sync, CRC, and appropriate CAN padding) and add serialized message data to appropriate comm buffer // TODO : validate the change , DD -> UI channel removed and added DD broadcast instead. - result = serializeMessage( msg, COMM_BUFFER_OUT_CAN_DD_BROADCAST, ACK_NOT_REQUIRED ); + if ( msg.hdr.msgID == MSG_ID_FP_EVENT ) + { + result = serializeMessage( msg, COMM_BUFFER_OUT_CAN_FP_BROADCAST, ACK_NOT_REQUIRED ); + } + else + { + result = serializeMessage( msg, COMM_BUFFER_OUT_CAN_DD_BROADCAST, ACK_NOT_REQUIRED ); + } return result; } @@ -455,7 +530,7 @@ * @param almData2 2nd data associated with alarm * @return TRUE if msg successfully queued for transmit, FALSE if not *************************************************************************/ -BOOL broadcastAlarmTriggered( U32 alarm, ALARM_DATA_T almData1, ALARM_DATA_T almData2 ) +BOOL broadcastAlarmTriggered( U32 alarm, ALARM_DATA_T almData1, ALARM_DATA_T almData2, ALARM_SOURCE_T almSource ) { BOOL result; MESSAGE_T msg; @@ -485,7 +560,14 @@ memset( payloadPtr, 0, sizeof( U32) * 3 ); // 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_DD_ALARM, ACK_REQUIRED ); + if ( ALM_SRC_FP == almSource ) + { + result = serializeMessage( msg, COMM_BUFFER_OUT_CAN_FP_ALARM, ACK_REQUIRED ); + } + else + { + result = serializeMessage( msg, COMM_BUFFER_OUT_CAN_DD_ALARM, ACK_REQUIRED ); + } return result; } @@ -499,7 +581,7 @@ * @param alarm ID of alarm cleared * @return TRUE if msg successfully queued for transmit, FALSE if not *************************************************************************/ -BOOL broadcastAlarmCleared( U32 alarm ) +BOOL broadcastAlarmCleared( U32 alarm, ALARM_SOURCE_T almSource ) { BOOL result; MESSAGE_T msg; @@ -513,7 +595,14 @@ memcpy( payloadPtr, &alarm, sizeof( U32 ) ); // 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_DD_ALARM, ACK_REQUIRED ); + if ( ALM_SRC_FP == almSource ) + { + result = serializeMessage( msg, COMM_BUFFER_OUT_CAN_FP_ALARM, ACK_REQUIRED ); + } + else + { + result = serializeMessage( msg, COMM_BUFFER_OUT_CAN_DD_ALARM, ACK_REQUIRED ); + } return result; } @@ -528,7 +617,7 @@ * @param alarm ID of alarm which alarm condition is cleared * @return TRUE if msg successfully queued for transmit, FALSE if not *************************************************************************/ -BOOL broadcastAlarmConditionCleared( U32 alarm ) +BOOL broadcastAlarmConditionCleared( U32 alarm, ALARM_SOURCE_T almSource ) { BOOL result; MESSAGE_T msg; @@ -542,7 +631,14 @@ memcpy( payloadPtr, &alarm, sizeof( U32 ) ); // 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_DD_ALARM, ACK_REQUIRED ); + if ( ALM_SRC_FP == almSource ) + { + result = serializeMessage( msg, COMM_BUFFER_OUT_CAN_FP_ALARM, ACK_REQUIRED ); + } + else + { + result = serializeMessage( msg, COMM_BUFFER_OUT_CAN_DD_ALARM, ACK_REQUIRED ); + } return result; } @@ -672,7 +768,15 @@ msg.payload[ 0 ] = (U08)ack; // 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_PC, ACK_NOT_REQUIRED ); + // check msgID to determine what channel to use and default to DD's channels + if( ( MSG_ID_FIRST_FP_TESTER_MESSAGE <= msgID ) && ( MSG_ID_TD_DEBUG_EVENT > msgID ) ) + { + result = serializeMessage( msg, COMM_BUFFER_OUT_FP_CAN_PC, ACK_NOT_REQUIRED ); + } + else + { + result = serializeMessage( msg, COMM_BUFFER_OUT_DD_CAN_PC, ACK_NOT_REQUIRED ); + } return result; } @@ -705,6 +809,32 @@ /*********************************************************************//** * @brief + * The handleTesterFPLogInRequest function handles a request to login as a tester. + * @details \b Inputs: none + * @details \b Outputs: message handled + * @param message a pointer to the message to handle + * @return none + *************************************************************************/ +BOOL handleTesterFPLogInRequest( MESSAGE_T *message ) +{ + // verify pass code + // TODO - placeholder - how do we want to authenticate tester? + if ( ( 3 == message->hdr.payloadLen ) && ( 0x31 == message->payload[ 0 ] ) && ( 0x32 == message->payload[ 1 ] ) && ( 0x33 == message->payload[ 2 ] ) ) + { + testerLoggedIn = TRUE; + // The user logged in, so the set the dialin expiration date until the first check in from dialin is received + setDialinCheckInTimeStamp(); + } + else + { + testerLoggedIn = FALSE; + } + + return testerLoggedIn; +} + +/*********************************************************************//** + * @brief * The handleTDSoftwareResetRequest function handles a request to reset the * TD firmware processor. * @details \b Inputs: none