Index: firmware/App/Drivers/ConductivitySensors.c =================================================================== diff -u -re228885d4b066320c69bbec2553b5e7fc62ec2cb -re2e51b0219db0132cebb6f65f3dbd803e1f01e30 --- firmware/App/Drivers/ConductivitySensors.c (.../ConductivitySensors.c) (revision e228885d4b066320c69bbec2553b5e7fc62ec2cb) +++ firmware/App/Drivers/ConductivitySensors.c (.../ConductivitySensors.c) (revision e2e51b0219db0132cebb6f65f3dbd803e1f01e30) @@ -35,6 +35,22 @@ #define SIEMENS_TO_MICROSIEMENS_CONVERSION 1000000 ///< Siemens to microSiemens conversion factor. #define COND_SENSORS_FPGA_ERROR_TIMEOUT_MS ( 2 * MS_PER_SECOND ) ///< Conductivity sensors FPGA error timeout in milliseconds. +/// Defined states for the conductivity write transaction. +typedef enum Conductvity_write_tx_states +{ + CONDUCTIVITY_WRITE_INITIATE = 0, ///< Conductivity sensor write initiate state. + CONDUCTIVITY_WRITE_COMPLETE, ///< Conductivity sensor write complete state. + NUM_OF_CONDUCTIVITY_WR_STATES ///< Number of conductivity write states. +} CONDUCTIVITY_WRITE_STATE_T; + +/// Defined states for the conductivity read transaction. +typedef enum Conductvity_read_tx_states +{ + CONDUCTIVITY_READ_INITIATE = 0, ///< Conductivity sensor read initiate state. + CONDUCTIVITY_READ_COMPLETE, ///< Conductivity sensor read complete state. + NUM_OF_CONDUCTIVITY_RD_STATES ///< Number of conductivity read states. +} CONDUCTIVITY_READ_STATE_T; + /// Conductivity Sensor Control group typedef struct { @@ -48,36 +64,20 @@ BOOL readComplete; ///< Flag indicates read transaction complete state. U32 writeData; ///< Data to write for the given conductivity sensor. U32 readData; ///< Read data from the given conductivity sensor. + CONDUCTIVITY_READ_STATE_T readExecState; ///< Read executive state from the given conductivity sensor. + CONDUCTIVITY_WRITE_STATE_T writeExecState; ///< Write executive state from the given conductivity sensor. U16 writeAddress; ///< Write address where the data needs to be written. U16 readAddress; ///< Read address to read the data. } CONDUCTIVITY_SENSOR_CONTROL_T; -/// Defined states for the conductivity write transaction. -typedef enum Conductvity_write_tx_states -{ - CONDUCTIVITY_WRITE_INITIATE = 0, ///< Conductivity sensor write initiate state. - CONDUCTIVITY_WRITE_COMPLETE, ///< Conductivity sensor write complete state. - NUM_OF_CONDUCTIVITY_WR_STATES ///< Number of conductivity write states. -} CONDUCTIVITY_WRITE_STATE_T; - -/// Defined states for the conductivity read transaction. -typedef enum Conductvity_read_tx_states -{ - CONDUCTIVITY_READ_INITIATE = 0, ///< Conductivity sensor read initiate state. - CONDUCTIVITY_READ_COMPLETE, ///< Conductivity sensor read complete state. - NUM_OF_CONDUCTIVITY_RD_STATES ///< Number of conductivity write states. -} CONDUCTIVITY_READ_STATE_T; - // ********** private data ********** static OVERRIDE_F32_T currentConductivityReadings[ NUM_OF_CONDUCTIVITY_SENSORS ]; ///< Current conductivity sensor conductivity readings (overrideable). static OVERRIDE_F32_T currentTemperatureReadings[ NUM_OF_CONDUCTIVITY_SENSORS ]; ///< Current conductivity sensor temperature readings (overrideable). static OVERRIDE_U32_T lastConductivityReadCounter[ NUM_OF_CONDUCTIVITY_SENSORS ]; ///< Last conductivity sensor read count (Overrideable). static OVERRIDE_U32_T lastConductivityErrorCounter[ NUM_OF_CONDUCTIVITY_SENSORS ]; ///< Last conductivity sensor error count (Overrideable). -static CONDUCTIVITY_SENSOR_CONTROL_T conductivitySensorControl[ NUM_OF_CONDUCTIVITY_SENSORS ]; ///< Conductivity sensor Control -static CONDUCTIVITY_WRITE_STATE_T conductivitySensorWriteState; ///< Conductivity sensor write state machine -static CONDUCTIVITY_READ_STATE_T conductivitySensorReadState; ///< Conductivity sensor read state machine +static CONDUCTIVITY_SENSOR_CONTROL_T conductivitySensorControl[ NUM_OF_CONDUCTIVITY_SENSORS ]; ///< Conductivity sensor Control for reset, init, read and write operations. // ********** private function prototypes ********** @@ -89,7 +89,7 @@ /*********************************************************************//** * @brief - * The initConductivitySensors function initializes the ConductivitySensors module. + * The initConductivitySensors function initializes the ConductivitySensors unit. * @details \b Inputs: none * @details \b Outputs: ConductivitySensors unit variables initialized * @return none @@ -131,14 +131,12 @@ conductivitySensorControl[i].writeAddress = 0; conductivitySensorControl[i].writeComplete = 0; conductivitySensorControl[i].writeData = 0; + conductivitySensorControl[i].readExecState = CONDUCTIVITY_READ_INITIATE; + conductivitySensorControl[i].writeExecState = CONDUCTIVITY_WRITE_INITIATE; conductivitySensorControl[i].writeEnable = FALSE; conductivitySensorControl[i].writeInProgress = FALSE; } - //Initialize the conductivity sensor read and write state - conductivitySensorWriteState = CONDUCTIVITY_WRITE_INITIATE; - conductivitySensorReadState = CONDUCTIVITY_READ_INITIATE; - // Initialize the conductivity sensor FPGA alarms initFPGAPersistentAlarm( FPGA_PERS_ERROR_CD1_COND_SENSOR, ALARM_ID_DD_CD1_SENSOR_FPGA_FAULT, COND_SENSORS_FPGA_ERROR_TIMEOUT_MS, COND_SENSORS_FPGA_ERROR_TIMEOUT_MS ); initFPGAPersistentAlarm( FPGA_PERS_ERROR_CD2_COND_SENSOR, ALARM_ID_DD_CD2_SENSOR_FPGA_FAULT, COND_SENSORS_FPGA_ERROR_TIMEOUT_MS, COND_SENSORS_FPGA_ERROR_TIMEOUT_MS ); @@ -592,21 +590,26 @@ *************************************************************************/ void execConductivitySensorWrite( void ) { - // state machine - switch ( conductivitySensorWriteState ) + CONDUCTIVITY_SENSORS_T sensor; + + for ( sensor = CONDUCTIVITYSENSORS_CD1_SENSOR; sensor < NUM_OF_CONDUCTIVITY_SENSORS; sensor++ ) { - case CONDUCTIVITY_WRITE_INITIATE: - conductivitySensorWriteState = handleConductivitySensorsWriteInitiate(); - break; + // write state machine + switch ( conductivitySensorControl[sensor].writeExecState ) + { + case CONDUCTIVITY_WRITE_INITIATE: + conductivitySensorControl[sensor].writeExecState = handleConductivitySensorsWriteInitiate(); + break; - case CONDUCTIVITY_WRITE_COMPLETE: - conductivitySensorWriteState = handleConductivitySensorsWriteComplete(); - break; + case CONDUCTIVITY_WRITE_COMPLETE: + conductivitySensorControl[sensor].writeExecState = handleConductivitySensorsWriteComplete(); + break; - default: - SET_ALARM_WITH_2_U32_DATA( ALARM_ID_DD_SOFTWARE_FAULT, SW_FAULT_ID_CONDUCTIVITY_WR_INVALID_EXEC_STATE, conductivitySensorWriteState ) - conductivitySensorWriteState = CONDUCTIVITY_WRITE_INITIATE; - break; + default: + SET_ALARM_WITH_2_U32_DATA( ALARM_ID_DD_SOFTWARE_FAULT, SW_FAULT_ID_CONDUCTIVITY_WR_INVALID_EXEC_STATE, conductivitySensorControl[sensor].writeExecState ) + conductivitySensorControl[sensor].writeExecState = CONDUCTIVITY_WRITE_INITIATE; + break; + } } } @@ -732,21 +735,26 @@ *************************************************************************/ void execConductivitySensorRead( void ) { - // state machine - switch ( conductivitySensorReadState ) + CONDUCTIVITY_SENSORS_T sensor; + + for ( sensor = CONDUCTIVITYSENSORS_CD1_SENSOR; sensor < NUM_OF_CONDUCTIVITY_SENSORS; sensor++ ) { - case CONDUCTIVITY_READ_INITIATE: - conductivitySensorReadState = handleConductivitySensorsReadInitiate(); - break; + // Read state machine + switch ( conductivitySensorControl[sensor].readExecState ) + { + case CONDUCTIVITY_READ_INITIATE: + conductivitySensorControl[sensor].readExecState = handleConductivitySensorsReadInitiate(); + break; - case CONDUCTIVITY_READ_COMPLETE: - conductivitySensorReadState = handleConductivitySensorsReadComplete(); - break; + case CONDUCTIVITY_READ_COMPLETE: + conductivitySensorControl[sensor].readExecState = handleConductivitySensorsReadComplete(); + break; - default: - SET_ALARM_WITH_2_U32_DATA( ALARM_ID_DD_SOFTWARE_FAULT, SW_FAULT_ID_CONDUCTIVITY_RD_INVALID_EXEC_STATE, conductivitySensorReadState ) - conductivitySensorReadState = CONDUCTIVITY_READ_INITIATE; - break; + default: + SET_ALARM_WITH_2_U32_DATA( ALARM_ID_DD_SOFTWARE_FAULT, SW_FAULT_ID_CONDUCTIVITY_RD_INVALID_EXEC_STATE, conductivitySensorControl[sensor].readExecState ) + conductivitySensorControl[sensor].readExecState = CONDUCTIVITY_READ_INITIATE; + break; + } } } @@ -882,12 +890,12 @@ TEST_OVERRIDE_ARRAY_PAYLOAD_T override; OVERRIDE_TYPE_T ovType = getOverrideArrayPayloadFromMessage( message, &override ); - // Verify tester has logged in with TD and override type is valid + // Verify tester has logged in with DD and override type is valid if ( ( TRUE == isTestingActivated() ) && ( ovType != OVERRIDE_INVALID ) && ( ovType < NUM_OF_OVERRIDE_TYPES ) ) { U32 sensor = override.index; - // Verify bubble detector index of override + // Verify conductivity sensor index of override if ( sensor < NUM_OF_CONDUCTIVITY_SENSORS ) { if ( OVERRIDE_OVERRIDE == ovType ) @@ -896,14 +904,14 @@ currentConductivityReadings[ sensor ].ovData = value; currentConductivityReadings[ sensor ].override = OVERRIDE_KEY; - result = TRUE; } else { currentConductivityReadings[ sensor ].override = OVERRIDE_RESET; currentConductivityReadings[ sensor ].ovData = currentConductivityReadings[ sensor ].ovInitData; - result = TRUE; } + + result = TRUE; } } @@ -926,12 +934,12 @@ TEST_OVERRIDE_ARRAY_PAYLOAD_T override; OVERRIDE_TYPE_T ovType = getOverrideArrayPayloadFromMessage( message, &override ); - // Verify tester has logged in with TD and override type is valid + // Verify tester has logged in with DD and override type is valid if ( ( TRUE == isTestingActivated() ) && ( ovType != OVERRIDE_INVALID ) && ( ovType < NUM_OF_OVERRIDE_TYPES ) ) { U32 sensor = override.index; - // Verify bubble detector index of override + // Verify conductivity sensor index of override if ( sensor < NUM_OF_CONDUCTIVITY_SENSORS ) { if ( OVERRIDE_OVERRIDE == ovType ) @@ -940,18 +948,106 @@ currentTemperatureReadings[ sensor ].ovData = value; currentTemperatureReadings[ sensor ].override = OVERRIDE_KEY; - result = TRUE; } else { currentTemperatureReadings[ sensor ].override = OVERRIDE_RESET; currentTemperatureReadings[ sensor ].ovData = currentTemperatureReadings[ sensor ].ovInitData; - result = TRUE; } + + result = TRUE; } } return result; } +/*********************************************************************//** + * @brief + * The testConductivitySensorReadCounterOverride function overrides + * the value of the specified conductivity sensor read counter with a given value. + * @details \b Inputs: none + * @details \b Outputs: lastConductivityReadCounter[] + * @param message Override message from Dialin which includes an sensor + * ID and override value of the conductivity sensor read counter. + * @return TRUE if override successful, FALSE if not + *************************************************************************/ +BOOL testConductivitySensorReadCounterOverride( MESSAGE_T *message ) +{ + BOOL result = FALSE; + TEST_OVERRIDE_ARRAY_PAYLOAD_T override; + OVERRIDE_TYPE_T ovType = getOverrideArrayPayloadFromMessage( message, &override ); + + // Verify tester has logged in with DD and override type is valid + if ( ( TRUE == isTestingActivated() ) && ( ovType != OVERRIDE_INVALID ) && ( ovType < NUM_OF_OVERRIDE_TYPES ) ) + { + U32 sensor = override.index; + + // Verify conductivity sensor index of override + if ( sensor < NUM_OF_CONDUCTIVITY_SENSORS ) + { + if ( OVERRIDE_OVERRIDE == ovType ) + { + U32 value = override.state.u32; + + lastConductivityReadCounter[ sensor ].ovData = value; + lastConductivityReadCounter[ sensor ].override = OVERRIDE_KEY; + } + else + { + lastConductivityReadCounter[ sensor ].override = OVERRIDE_RESET; + lastConductivityReadCounter[ sensor ].ovData = lastConductivityReadCounter[ sensor ].ovInitData; + } + + result = TRUE; + } + } + + return result; +} + +/*********************************************************************//** + * @brief + * The testConductivitySensorErrorCounterOverride function overrides + * the value of the specified conductivity sensor error counter with a given value. + * @details \b Inputs: none + * @details \b Outputs: lastConductivityErrorCounter[] + * @param message Override message from Dialin which includes an sensor + * ID and override value of the conductivity sensor error counter. + * @return TRUE if override successful, FALSE if not + *************************************************************************/ +BOOL testConductivitySensorErrorCounterOverride( MESSAGE_T *message ) +{ + BOOL result = FALSE; + TEST_OVERRIDE_ARRAY_PAYLOAD_T override; + OVERRIDE_TYPE_T ovType = getOverrideArrayPayloadFromMessage( message, &override ); + + // Verify tester has logged in with DD and override type is valid + if ( ( TRUE == isTestingActivated() ) && ( ovType != OVERRIDE_INVALID ) && ( ovType < NUM_OF_OVERRIDE_TYPES ) ) + { + U32 sensor = override.index; + + // Verify conductivity sensor index of override + if ( sensor < NUM_OF_CONDUCTIVITY_SENSORS ) + { + if ( OVERRIDE_OVERRIDE == ovType ) + { + U32 value = override.state.u32; + + lastConductivityErrorCounter[ sensor ].ovData = value; + lastConductivityErrorCounter[ sensor ].override = OVERRIDE_KEY; + } + else + { + lastConductivityErrorCounter[ sensor ].override = OVERRIDE_RESET; + lastConductivityErrorCounter[ sensor ].ovData = lastConductivityErrorCounter[ sensor ].ovInitData; + } + + result = TRUE; + } + } + + return result; +} + /**@}*/ Index: firmware/App/Drivers/ConductivitySensors.h =================================================================== diff -u -re228885d4b066320c69bbec2553b5e7fc62ec2cb -re2e51b0219db0132cebb6f65f3dbd803e1f01e30 --- firmware/App/Drivers/ConductivitySensors.h (.../ConductivitySensors.h) (revision e228885d4b066320c69bbec2553b5e7fc62ec2cb) +++ firmware/App/Drivers/ConductivitySensors.h (.../ConductivitySensors.h) (revision e2e51b0219db0132cebb6f65f3dbd803e1f01e30) @@ -70,6 +70,8 @@ BOOL testConductivitySensorReadingsOverride( MESSAGE_T *message ); BOOL testConductivitySensorTemperatureReadingsOverride( MESSAGE_T *message ); +BOOL testConductivitySensorReadCounterOverride( MESSAGE_T *message ); +BOOL testConductivitySensorErrorCounterOverride( MESSAGE_T *message ); /**@}*/ Index: firmware/App/Drivers/PressureSensor.c =================================================================== diff -u -r8d390efa9309c8a0f430ba4652528fdbdbb6e2b8 -re2e51b0219db0132cebb6f65f3dbd803e1f01e30 --- firmware/App/Drivers/PressureSensor.c (.../PressureSensor.c) (revision 8d390efa9309c8a0f430ba4652528fdbdbb6e2b8) +++ firmware/App/Drivers/PressureSensor.c (.../PressureSensor.c) (revision e2e51b0219db0132cebb6f65f3dbd803e1f01e30) @@ -310,12 +310,12 @@ TEST_OVERRIDE_ARRAY_PAYLOAD_T override; OVERRIDE_TYPE_T ovType = getOverrideArrayPayloadFromMessage( message, &override ); - // Verify tester has logged in with TD and override type is valid + // Verify tester has logged in with DD and override type is valid if ( ( TRUE == isTestingActivated() ) && ( ovType != OVERRIDE_INVALID ) && ( ovType < NUM_OF_OVERRIDE_TYPES ) ) { U32 sensor = override.index; - // Verify bubble detector index of override + // Verify pressure sensor index of override if ( sensor < NUM_OF_PRESSURE_SENSORS ) { if ( OVERRIDE_OVERRIDE == ovType ) @@ -324,14 +324,14 @@ currentPressureReadings[ sensor ].ovData = value; currentPressureReadings[ sensor ].override = OVERRIDE_KEY; - result = TRUE; } else { currentPressureReadings[ sensor ].override = OVERRIDE_RESET; currentPressureReadings[ sensor ].ovData = currentPressureReadings[ sensor ].ovInitData; - result = TRUE; } + + result = TRUE; } } @@ -354,12 +354,12 @@ TEST_OVERRIDE_ARRAY_PAYLOAD_T override; OVERRIDE_TYPE_T ovType = getOverrideArrayPayloadFromMessage( message, &override ); - // Verify tester has logged in with TD and override type is valid + // Verify tester has logged in with DD and override type is valid if ( ( TRUE == isTestingActivated() ) && ( ovType != OVERRIDE_INVALID ) && ( ovType < NUM_OF_OVERRIDE_TYPES ) ) { U32 sensor = override.index; - // Verify bubble detector index of override + // Verify pressure sensor index of override if ( sensor < NUM_OF_PRESSURE_SENSORS ) { if ( OVERRIDE_OVERRIDE == ovType ) @@ -368,18 +368,106 @@ currentPresTempReadings[ sensor ].ovData = value; currentPresTempReadings[ sensor ].override = OVERRIDE_KEY; - result = TRUE; } else { currentPresTempReadings[ sensor ].override = OVERRIDE_RESET; currentPresTempReadings[ sensor ].ovData = currentPresTempReadings[ sensor ].ovInitData; - result = TRUE; } + + result = TRUE; } } return result; } + +/*********************************************************************//** + * @brief + * The testPressureSensorReadCounterOverride function overrides the value of the + * specified pressure sensor read counter with a given value. + * @details \b Inputs: none + * @details \b Outputs: lastPressureReadCounter[] + * @param message Override message from Dialin which includes an sensor + * ID and override value of the pressure sensor read counter. + * @return TRUE if override successful, FALSE if not + *************************************************************************/ +BOOL testPressureSensorReadCounterOverride( MESSAGE_T *message ) +{ + BOOL result = FALSE; + TEST_OVERRIDE_ARRAY_PAYLOAD_T override; + OVERRIDE_TYPE_T ovType = getOverrideArrayPayloadFromMessage( message, &override ); + + // Verify tester has logged in with DD and override type is valid + if ( ( TRUE == isTestingActivated() ) && ( ovType != OVERRIDE_INVALID ) && ( ovType < NUM_OF_OVERRIDE_TYPES ) ) + { + U32 sensor = override.index; + + // Verify pressure sensor index of override + if ( sensor < NUM_OF_PRESSURE_SENSORS ) + { + if ( OVERRIDE_OVERRIDE == ovType ) + { + U32 value = override.state.u32; + + lastPressureReadCounter[ sensor ].ovData = value; + lastPressureReadCounter[ sensor ].override = OVERRIDE_KEY; + } + else + { + lastPressureReadCounter[ sensor ].override = OVERRIDE_RESET; + lastPressureReadCounter[ sensor ].ovData = lastPressureReadCounter[ sensor ].ovInitData; + } + + result = TRUE; + } + } + + return result; +} + +/*********************************************************************//** + * @brief + * The testPressureSensorErrorCounterOverride function overrides the value of the + * specified pressure sensor error counter with a given value. + * @details \b Inputs: none + * @details \b Outputs: lastPressureErrorCounter[] + * @param message Override message from Dialin which includes an sensor + * ID and override value of the pressure sensor error counter. + * @return TRUE if override successful, FALSE if not + *************************************************************************/ +BOOL testPressureSensorErrorCounterOverride( MESSAGE_T *message ) +{ + BOOL result = FALSE; + TEST_OVERRIDE_ARRAY_PAYLOAD_T override; + OVERRIDE_TYPE_T ovType = getOverrideArrayPayloadFromMessage( message, &override ); + + // Verify tester has logged in with DD and override type is valid + if ( ( TRUE == isTestingActivated() ) && ( ovType != OVERRIDE_INVALID ) && ( ovType < NUM_OF_OVERRIDE_TYPES ) ) + { + U32 sensor = override.index; + + // Verify pressure sensor index of override + if ( sensor < NUM_OF_PRESSURE_SENSORS ) + { + if ( OVERRIDE_OVERRIDE == ovType ) + { + U32 value = override.state.u32; + + lastPressureErrorCounter[ sensor ].ovData = value; + lastPressureErrorCounter[ sensor ].override = OVERRIDE_KEY; + } + else + { + lastPressureErrorCounter[ sensor ].override = OVERRIDE_RESET; + lastPressureErrorCounter[ sensor ].ovData = lastPressureErrorCounter[ sensor ].ovInitData; + } + + result = TRUE; + } + } + + return result; +} /**@}*/ Index: firmware/App/Drivers/PressureSensor.h =================================================================== diff -u -r8d390efa9309c8a0f430ba4652528fdbdbb6e2b8 -re2e51b0219db0132cebb6f65f3dbd803e1f01e30 --- firmware/App/Drivers/PressureSensor.h (.../PressureSensor.h) (revision 8d390efa9309c8a0f430ba4652528fdbdbb6e2b8) +++ firmware/App/Drivers/PressureSensor.h (.../PressureSensor.h) (revision e2e51b0219db0132cebb6f65f3dbd803e1f01e30) @@ -35,8 +35,8 @@ /// Enumeration of pressure sensors monitored by this module. typedef enum PressureSensors { - PRESSURE_SENSOR_FIRST = 0, ///< First pressure to scan - PRESSURE_SENSOR_HYDRAULICS_OUTLET = PRESSURE_SENSOR_FIRST, ///< Hydraulics outlet pressure (PHo/Pn) + PRESSURE_SENSOR_HYDRAULICS_OUTLET = 0, ///< Hydraulics outlet pressure (PHo/Pn) + PRESSURE_SENSOR_FIRST = PRESSURE_SENSOR_HYDRAULICS_OUTLET, ///< First pressure to scan PRESSURE_SENSOR_BIBAG, ///< Dry Bicarb pressure (PDB/PCb) PRESSURE_SENSOR_SPENT_DIALYSATE, ///< Spent Dialysate pressure (PDs) PRESSURE_SENSOR_FRESH_DIALYSATE, ///< Fresh Dialysate pressure (PDf) @@ -54,7 +54,9 @@ U32 getPressureSensorErrorCount( PRESSURE_SENSORS_T sensor ); BOOL testPressureSensorReadingsOverride( MESSAGE_T *message ); -BOOL testPressureSensorTemperatureReadingsOverride( MESSAGE_T *message ); +BOOL testPressureSensorTemperatureReadingsOverride( MESSAGE_T *message ); +BOOL testPressureSensorReadCounterOverride( MESSAGE_T *message ); +BOOL testPressureSensorErrorCounterOverride( MESSAGE_T *message ); /**@}*/ Index: firmware/App/Monitors/Conductivity.c =================================================================== diff -u -re228885d4b066320c69bbec2553b5e7fc62ec2cb -re2e51b0219db0132cebb6f65f3dbd803e1f01e30 --- firmware/App/Monitors/Conductivity.c (.../Conductivity.c) (revision e228885d4b066320c69bbec2553b5e7fc62ec2cb) +++ firmware/App/Monitors/Conductivity.c (.../Conductivity.c) (revision e2e51b0219db0132cebb6f65f3dbd803e1f01e30) @@ -32,6 +32,7 @@ // ********** private definitions ********** #define COND_SENSOR_REPORT_PERIOD ( MS_PER_SECOND / TASK_PRIORITY_INTERVAL ) ///< Broadcast conductivity values message every second. +#define DATA_PUBLISH_COUNTER_START_COUNT 40 ///< Data publish counter start count. // ********** private data ********** @@ -52,16 +53,18 @@ *************************************************************************/ void initConductivity( void ) { + conductivityPublishTimerCounter = DATA_PUBLISH_COUNTER_START_COUNT; + initConductivitySensors(); } /*********************************************************************//** * @brief - * The execConductivitySensors function gets conductivity sensors' latest - * readings from FPGA and advertises them over CAN. + * The execConductivity function gets conductivity sensors' latest + * readings from FPGA and publishes them over CAN. * @details \b Inputs: none * @details \b Outputs: Conductivity sensor latest reading is updated and - * advertised. + * published. * @return none *************************************************************************/ void execConductivity( void ) @@ -132,23 +135,23 @@ TEST_OVERRIDE_PAYLOAD_T override; OVERRIDE_TYPE_T ovType = getOverridePayloadFromMessage( message, &override ); - // Verify tester has logged in with TD and override type is valid + // Verify tester has logged in with DD and override type is valid if ( ( TRUE == isTestingActivated() ) && ( ovType != OVERRIDE_INVALID ) && ( ovType < NUM_OF_OVERRIDE_TYPES ) ) { if ( OVERRIDE_OVERRIDE == ovType ) { U32 intvl = override.state.u32 / TASK_PRIORITY_INTERVAL; - result = TRUE; conductivityDataPublishInterval.ovData = intvl; conductivityDataPublishInterval.override = OVERRIDE_KEY; } else { - result = TRUE; conductivityDataPublishInterval.override = OVERRIDE_RESET; conductivityDataPublishInterval.ovData = conductivityDataPublishInterval.ovInitData; } + + result = TRUE; } return result; Index: firmware/App/Monitors/Pressure.c =================================================================== diff -u -re228885d4b066320c69bbec2553b5e7fc62ec2cb -re2e51b0219db0132cebb6f65f3dbd803e1f01e30 --- firmware/App/Monitors/Pressure.c (.../Pressure.c) (revision e228885d4b066320c69bbec2553b5e7fc62ec2cb) +++ firmware/App/Monitors/Pressure.c (.../Pressure.c) (revision e2e51b0219db0132cebb6f65f3dbd803e1f01e30) @@ -41,12 +41,7 @@ PRESSURE_CONTINUOUS_READ_STATE, ///< Continuous read sensors state. NUM_OF_PRESSURE_STATES ///< Number of pressure monitor states. } PRESSURE_STATE_T; - -// ********** private data ********** -static OVERRIDE_F32_T filteredcurrentPressureReadings[ NUM_OF_PRESSURE_SENSORS ]; ///< filtered current pressure sensor pressure readings (overrideable). -static OVERRIDE_F32_T filteredcurrentPresTempReadings[ NUM_OF_PRESSURE_SENSORS ]; ///< filtered current pressure sensor temperature readings (overrideable). - /// Filter pressure reading. typedef struct { @@ -64,13 +59,18 @@ F32 pressureTempReadingsTotal; ///< Rolling total - used to calc average. U32 pressureTempReadingsCount; ///< Number of samples in rolling average buffer }FILTER_PRESSURE_TEMPERATURE_READINGS_T; + +// ********** private data ********** -static FILTER_PRESSURE_READINGS_T filteredPressureReadings[NUM_OF_PRESSURE_SENSORS] = { 0 }; ///< Filtered pressure reading for pressure sensors. -static FILTER_PRESSURE_TEMPERATURE_READINGS_T filteredPressureTempReadings[NUM_OF_PRESSURE_SENSORS] = { 0 }; ///< Filtered pressure reading for pressure sensors. +static OVERRIDE_F32_T filteredcurrentPressureReadings[ NUM_OF_PRESSURE_SENSORS ]; ///< filtered current pressure sensor pressure readings (overrideable). +static OVERRIDE_F32_T filteredcurrentPresTempReadings[ NUM_OF_PRESSURE_SENSORS ]; ///< filtered current pressure sensor temperature readings (overrideable). + +static FILTER_PRESSURE_READINGS_T filteredPressureReadings[NUM_OF_PRESSURE_SENSORS]; ///< Filtered pressure reading for pressure sensors. +static FILTER_PRESSURE_TEMPERATURE_READINGS_T filteredPressureTempReadings[NUM_OF_PRESSURE_SENSORS]; ///< Filtered pressure reading for pressure sensors. static PRESSURE_STATE_T pressuresState; ///< current state of pressure monitor state machine. static U32 pressuresDataPublicationTimerCounter; ///< used to schedule pressure data publication to CAN bus. static OVERRIDE_U32_T pressuresDataPublishInterval = { PRESSURES_DATA_PUB_INTERVAL, - PRESSURES_DATA_PUB_INTERVAL, 0, 0 }; /// Pressure data publish interval. + PRESSURES_DATA_PUB_INTERVAL, 0, 0 }; ///< Pressure data publish interval. // ********** private function prototypes ********** @@ -90,6 +90,7 @@ void initPressure( void ) { U32 i; + pressuresState = PRESSURE_INIT_STATE; pressuresDataPublicationTimerCounter = DATA_PUBLISH_COUNTER_START_COUNT; @@ -107,6 +108,14 @@ filteredcurrentPresTempReadings[ i ].ovData = 0.0F; filteredcurrentPresTempReadings[ i ].ovInitData = 0.0F; filteredcurrentPresTempReadings[ i ].override = OVERRIDE_RESET; + + filteredPressureReadings[i].pressureReadingsCount = 0; + filteredPressureReadings[i].pressureReadingsIdx = 0; + filteredPressureReadings[i].pressureReadingsTotal = 0.0F; + + filteredPressureTempReadings[i].pressureTempReadingsCount = 0; + filteredPressureTempReadings[i].pressureTempReadingsIdx = 0; + filteredPressureTempReadings[i].pressureTempReadingsTotal = 0.0F; } } @@ -305,7 +314,7 @@ //Get raw pressure value readPressureSensors(); - // filtered pressure readings + // filter pressure readings filterPressureSensors(); return result; @@ -364,7 +373,7 @@ TEST_OVERRIDE_PAYLOAD_T override; OVERRIDE_TYPE_T ovType = getOverridePayloadFromMessage( message, &override ); - // Verify tester has logged in with TD and override type is valid + // Verify tester has logged in with DD and override type is valid if ( ( TRUE == isTestingActivated() ) && ( ovType != OVERRIDE_INVALID ) && ( ovType < NUM_OF_OVERRIDE_TYPES ) ) { if ( OVERRIDE_OVERRIDE == ovType ) @@ -385,5 +394,93 @@ return result; } + +/*********************************************************************//** + * @brief + * The testPressureSensorFilteredReadingsOverride function overrides the + * filtered value of the specified pressure sensor with a given value. + * @details \b Inputs: none + * @details \b Outputs: filteredcurrentPressureReadings[] + * @param message Override message from Dialin which includes an sensor + * ID and override value of the pressure sensor. + * @return TRUE if override successful, FALSE if not + *************************************************************************/ +BOOL testPressureSensorFilteredReadingsOverride( MESSAGE_T *message ) +{ + BOOL result = FALSE; + TEST_OVERRIDE_ARRAY_PAYLOAD_T override; + OVERRIDE_TYPE_T ovType = getOverrideArrayPayloadFromMessage( message, &override ); + + // Verify tester has logged in with DD and override type is valid + if ( ( TRUE == isTestingActivated() ) && ( ovType != OVERRIDE_INVALID ) && ( ovType < NUM_OF_OVERRIDE_TYPES ) ) + { + U32 sensor = override.index; + + // Verify pressure sensor index of override + if ( sensor < NUM_OF_PRESSURE_SENSORS ) + { + if ( OVERRIDE_OVERRIDE == ovType ) + { + F32 value = override.state.f32; + + filteredcurrentPressureReadings[ sensor ].ovData = value; + filteredcurrentPressureReadings[ sensor ].override = OVERRIDE_KEY; + } + else + { + filteredcurrentPressureReadings[ sensor ].override = OVERRIDE_RESET; + filteredcurrentPressureReadings[ sensor ].ovData = filteredcurrentPressureReadings[ sensor ].ovInitData; + } + + result = TRUE; + } + } + + return result; +} + +/*********************************************************************//** + * @brief + * The testPressureSensorFilteredTemperatureReadingsOverride function overrides the + * value of the specified pressure sensor filtered temperature with a given value. + * @details \b Inputs: none + * @details \b Outputs: currentPresTempReadings[] + * @param message Override message from Dialin which includes an sensor + * ID and override value of the pressure sensor temperature. + * @return TRUE if override successful, FALSE if not + *************************************************************************/ +BOOL testPressureSensorFilteredTemperatureReadingsOverride( MESSAGE_T *message ) +{ + BOOL result = FALSE; + TEST_OVERRIDE_ARRAY_PAYLOAD_T override; + OVERRIDE_TYPE_T ovType = getOverrideArrayPayloadFromMessage( message, &override ); + + // Verify tester has logged in with DD and override type is valid + if ( ( TRUE == isTestingActivated() ) && ( ovType != OVERRIDE_INVALID ) && ( ovType < NUM_OF_OVERRIDE_TYPES ) ) + { + U32 sensor = override.index; + + // Verify pressure sensor index of override + if ( sensor < NUM_OF_PRESSURE_SENSORS ) + { + if ( OVERRIDE_OVERRIDE == ovType ) + { + F32 value = override.state.f32; + + filteredcurrentPresTempReadings[ sensor ].ovData = value; + filteredcurrentPresTempReadings[ sensor ].override = OVERRIDE_KEY; + } + else + { + filteredcurrentPresTempReadings[ sensor ].override = OVERRIDE_RESET; + filteredcurrentPresTempReadings[ sensor ].ovData = filteredcurrentPresTempReadings[ sensor ].ovInitData; + } + + result = TRUE; + } + } + + return result; +} /**@}*/ Index: firmware/App/Monitors/Pressure.h =================================================================== diff -u -r8d390efa9309c8a0f430ba4652528fdbdbb6e2b8 -re2e51b0219db0132cebb6f65f3dbd803e1f01e30 --- firmware/App/Monitors/Pressure.h (.../Pressure.h) (revision 8d390efa9309c8a0f430ba4652528fdbdbb6e2b8) +++ firmware/App/Monitors/Pressure.h (.../Pressure.h) (revision e2e51b0219db0132cebb6f65f3dbd803e1f01e30) @@ -32,7 +32,6 @@ // ********** public definitions ********** -#pragma pack(push,1) /// Pressure data struct. typedef struct { @@ -47,7 +46,6 @@ F32 filteredFreshdialysateTemp; ///< Fresh Dialysate temperature F32 filteredTransmembraneTemp; ///< Transmembrane temperature } PRESSURE_TEMP_DATA_T; -#pragma pack(pop) // ********** public function prototypes ********** @@ -56,7 +54,10 @@ F32 getFilteredPressure( PRESSURE_SENSORS_T sensor ); F32 getFilteredPressureSensorTemperature( PRESSURE_SENSORS_T sensor ); -BOOL testPressureSensorDataPublishIntervalOverride( MESSAGE_T *message ); + +BOOL testPressureSensorDataPublishIntervalOverride( MESSAGE_T *message ); +BOOL testPressureSensorFilteredReadingsOverride( MESSAGE_T *message ); +BOOL testPressureSensorFilteredTemperatureReadingsOverride( MESSAGE_T *message ); /**@}*/ Index: firmware/App/Services/Messaging.c =================================================================== diff -u -r4fb1e15d35f6b968bab5620909c30baec98bfd4e -re2e51b0219db0132cebb6f65f3dbd803e1f01e30 --- firmware/App/Services/Messaging.c (.../Messaging.c) (revision 4fb1e15d35f6b968bab5620909c30baec98bfd4e) +++ firmware/App/Services/Messaging.c (.../Messaging.c) (revision e2e51b0219db0132cebb6f65f3dbd803e1f01e30) @@ -18,13 +18,18 @@ #include // for memcpy() #include "reg_system.h" + +#include "Conductivity.h" #include "Compatible.h" #include "Messaging.h" #include "OperationModes.h" -#include "Utilities.h" -#include "SystemCommDD.h" #include "PAL.h" +#include "Pressure.h" +#include "SystemCommDD.h" +#include "Utilities.h" +#include "Valves.h" + /** * @addtogroup Messaging * @{ @@ -70,14 +75,44 @@ static const U16 MSG_FUNCTION_HANDLER_LOOKUP[] = { MSG_ID_TESTER_LOGIN_REQUEST, MSG_ID_DD_SOFTWARE_RESET_REQUEST, - MSG_ID_TD_OP_MODE_DATA + MSG_ID_TD_OP_MODE_DATA, + MSG_ID_DD_VALVE_PUBLISH_INTERVAL_OVERRIDE_REQUEST, + MSG_ID_DD_VALVE_STATE_OVERRIDE_REQUEST, + MSG_ID_DD_VALVE_SENSED_STATE_OVERRIDE_REQUEST, + MSG_ID_DD_PRESSURE_SENSOR_READINGS_OVERRIDE_REQUEST, + MSG_ID_DD_PRESSURE_SENSOR_TEMPERATURE_OVERRIDE_REQUEST, + MSG_ID_DD_PRESSURE_SENSOR_READ_COUNTER_OVERRIDE_REQUEST, + MSG_ID_DD_PRESSURE_SENSOR_ERROR_COUNTER_OVERRIDE_REQUEST, + MSG_ID_DD_PRESSURE_SENSOR_PUBLISH_INTERVAL_OVERRIDE_REQUEST, + MSG_ID_DD_PRESSURE_SENSOR_FILTER_READINGS_OVERRIDE_REQUEST, + MSG_ID_DD_PRESSURE_SENSOR_FILTER_TEMPERATURE_OVERRIDE_REQUEST, + MSG_ID_DD_CONDUCTIVITY_SENSOR_READINGS_OVERRIDE_REQUEST, + MSG_ID_DD_CONDUCTIVITY_SENSOR_TEMPERATURE_OVERRIDE_REQUEST, + MSG_ID_DD_CONDUCTIVITY_SENSOR_READ_COUNTER_OVERRIDE_REQUEST, + MSG_ID_DD_CONDUCTIVITY_SENSOR_ERROR_COUNTER_OVERRIDE_REQUEST, + MSG_ID_DD_CONDUCTIVITY_SENSOR_PUBLISH_INTERVAL_OVERRIDE_REQUEST }; /// Message handling function table static const MsgFuncPtr MSG_FUNCTION_HANDLERS[] = { &handleTesterLogInRequest, &handleDDSoftwareResetRequest, - &handleSetTDOperationMode + &handleSetTDOperationMode, + &testValvesStatesPublishIntervalOverride, + &testValveStateOverride, + &testValveSensedStateOverride, + &testPressureSensorReadingsOverride, + &testPressureSensorTemperatureReadingsOverride, + &testPressureSensorReadCounterOverride, + &testPressureSensorErrorCounterOverride, + &testPressureSensorDataPublishIntervalOverride, + &testPressureSensorFilteredReadingsOverride, + &testPressureSensorFilteredTemperatureReadingsOverride, + &testConductivitySensorReadingsOverride, + &testConductivitySensorTemperatureReadingsOverride, + &testConductivitySensorReadCounterOverride, + &testConductivitySensorErrorCounterOverride, + &testConductivitySensorDataPublishIntervalOverride }; #define NUM_OF_FUNCTION_HANDLERS (sizeof(MSG_FUNCTION_HANDLERS) / sizeof(MsgFuncPtr))