Index: firmware/App/Drivers/PressureSensor.c =================================================================== diff -u --- firmware/App/Drivers/PressureSensor.c (revision 0) +++ firmware/App/Drivers/PressureSensor.c (revision 8d390efa9309c8a0f430ba4652528fdbdbb6e2b8) @@ -0,0 +1,385 @@ +/************************************************************************** +* +* Copyright (c) 2024-2024 Diality Inc. - All Rights Reserved. +* +* THIS CODE MAY NOT BE COPIED OR REPRODUCED IN ANY FORM, IN PART OR IN +* WHOLE, WITHOUT THE EXPLICIT PERMISSION OF THE COPYRIGHT OWNER. +* +* @file PressureSensor.c +* +* @author (last) Vinayakam Mani +* @date (last) 04-Sep-2024 +* +* @author (original) Vinayakam Mani +* @date (original) 04-Sep-2024 +* +***************************************************************************/ + +#include "AlarmMgmtDD.h" +#include "FpgaDD.h" +#include "Messaging.h" +#include "PersistentAlarm.h" +#include "PressureSensor.h" + +/** + * @addtogroup PressureSensor + * @{ + */ + +// ********** private definitions ********** + +#define PRES_SENSORS_COUNT_ERROR_TIMEOUT_MS ( 2 * MS_PER_SECOND ) ///< Pressure sensors read and error count timeout in milliseconds. + +// ********** private data ********** + +static OVERRIDE_F32_T currentPressureReadings[ NUM_OF_PRESSURE_SENSORS ]; ///< Current pressure sensor pressure readings (overrideable). +static OVERRIDE_F32_T currentPresTempReadings[ NUM_OF_PRESSURE_SENSORS ]; ///< Current pressure sensor temperature readings (overrideable). +static OVERRIDE_U32_T lastPressureReadCounter[ NUM_OF_PRESSURE_SENSORS ]; ///< Last pressure sensor read count (Overrideable). +static OVERRIDE_U32_T lastPressureErrorCounter[ NUM_OF_PRESSURE_SENSORS ]; ///< Last pressure sensor error count (Overrideable). + +// ********** private function prototypes ********** + +static void checkPressureSensors( void ); + +/*********************************************************************//** + * @brief + * The initPressureSensor function initializes the Pressure Sensor unit. + * @details \b Inputs: none + * @details \b Outputs: Pressure Sensor unit is initialized. + * @return none + *************************************************************************/ +void initPressureSensor( void ) +{ + U32 i; + + // Initialize override structures for each pressure sensor + for ( i = (U32)PRESSURE_SENSOR_FIRST; i < (U32)NUM_OF_PRESSURE_SENSORS; i++ ) + { + currentPressureReadings[ i ].data = 0.0F; + currentPressureReadings[ i ].ovData = 0.0F; + currentPressureReadings[ i ].ovInitData = 0.0F; + currentPressureReadings[ i ].override = OVERRIDE_RESET; + + currentPresTempReadings[ i ].data = 0.0F; + currentPresTempReadings[ i ].ovData = 0.0F; + currentPresTempReadings[ i ].ovInitData = 0.0F; + currentPresTempReadings[ i ].override = OVERRIDE_RESET; + + lastPressureReadCounter[ i ].data = 0; + lastPressureReadCounter[ i ].ovData = 0; + lastPressureReadCounter[ i ].ovInitData = 0; + lastPressureReadCounter[ i ].override = OVERRIDE_RESET; + + lastPressureErrorCounter[ i ].data = 0; + lastPressureErrorCounter[ i ].ovData = 0; + lastPressureErrorCounter[ i ].ovInitData = 0; + lastPressureErrorCounter[ i ].override = OVERRIDE_RESET; + } + + // Initialize the FPGA persistent alarms + initFPGAPersistentAlarm( FPGA_PERS_ERROR_HYDRAULICS_OUTLET_PRESSURE, ALARM_ID_DD_HYD_OUTLET_PRES_TIMEOUT_FAULT, + PRES_SENSORS_COUNT_ERROR_TIMEOUT_MS, PRES_SENSORS_COUNT_ERROR_TIMEOUT_MS ); + initFPGAPersistentAlarm( FPGA_PERS_ERROR_BIBAG_PRESSURE, ALARM_ID_DD_BIBAG_PRES_TIMEOUT_FAULT, + PRES_SENSORS_COUNT_ERROR_TIMEOUT_MS, PRES_SENSORS_COUNT_ERROR_TIMEOUT_MS ); + initFPGAPersistentAlarm( FPGA_PERS_ERROR_SPENT_DIALYSATE_PRESSURE, ALARM_ID_DD_SPENT_DIALYSATE_PRES_TIMEOUT_FAULT, + PRES_SENSORS_COUNT_ERROR_TIMEOUT_MS, PRES_SENSORS_COUNT_ERROR_TIMEOUT_MS ); + initFPGAPersistentAlarm( FPGA_PERS_ERROR_FRESH_DIALYSATE_PRESSURE, ALARM_ID_DD_FRESH_DIALYSATE_PRES_TIMEOUT_FAULT, + PRES_SENSORS_COUNT_ERROR_TIMEOUT_MS, PRES_SENSORS_COUNT_ERROR_TIMEOUT_MS ); + initFPGAPersistentAlarm( FPGA_PERS_ERROR_TRANSMEMBRANE_PRESSURE, ALARM_ID_DD_TRANSMEMB_PRES_TIMEOUT_FAULT, + PRES_SENSORS_COUNT_ERROR_TIMEOUT_MS, PRES_SENSORS_COUNT_ERROR_TIMEOUT_MS ); +} + +/*********************************************************************//** + * @brief + * The readPressureSensors function gets the current pressure reading + * for a all pressure sensors from the FPGA and also reads the freshness + * and error counters to verify that the pressure sensors are being read + * by the FPGA without issue. + * @note This function should be called periodically to maintain fresh + * sensor readings for all pressure sensors. + * @details \b Inputs: FPGA + * @details \b Outputs: currentPressureReadings[],currentPresTempReadings[], + * lastPressureReadCounter[],lastPressureErrorCounter[]. + * @return none + *************************************************************************/ +void readPressureSensors( void ) +{ + // Update and convert raw pressures to mmHg + currentPressureReadings[ PRESSURE_SENSOR_HYDRAULICS_OUTLET ].data = convertPressureReading2mmHg( getFPGAPnRawPressure() ); + currentPressureReadings[ PRESSURE_SENSOR_BIBAG ].data = convertPressureReading2mmHg( getFPGAPCbRawPressure() ); + currentPressureReadings[ PRESSURE_SENSOR_SPENT_DIALYSATE ].data = convertPressureReading2mmHg( getFPGAPDsRawPressure() ); + currentPressureReadings[ PRESSURE_SENSOR_FRESH_DIALYSATE ].data = convertPressureReading2mmHg( getFPGAPDfRawPressure() ); + currentPressureReadings[ PRESSURE_SENSOR_TRANSMEMBRANE ].data = convertPressureReading2mmHg( getFPGAPtmRawPressure() ); + + // Update and convert raw pressure sensor temperatures to deg C + currentPresTempReadings[ PRESSURE_SENSOR_HYDRAULICS_OUTLET ].data = convertPressureTempReading2DegC( getFPGAPnRawTemperature() ); + currentPresTempReadings[ PRESSURE_SENSOR_BIBAG ].data = convertPressureTempReading2DegC( getFPGAPCbRawTemperature() ); + currentPresTempReadings[ PRESSURE_SENSOR_SPENT_DIALYSATE ].data = convertPressureTempReading2DegC( getFPGAPDsRawTemperature() ); + currentPresTempReadings[ PRESSURE_SENSOR_FRESH_DIALYSATE ].data = convertPressureTempReading2DegC( getFPGAPDfRawTemperature() ); + currentPresTempReadings[ PRESSURE_SENSOR_TRANSMEMBRANE ].data = convertPressureTempReading2DegC( getFPGAPtmRawTemperature() ); + + // Update read and error counters for each pressure sensor + lastPressureReadCounter[ PRESSURE_SENSOR_HYDRAULICS_OUTLET ].data = (U32)getFPGAPnReadCount(); + lastPressureReadCounter[ PRESSURE_SENSOR_BIBAG ].data = (U32)getFPGAPCbReadCount(); + lastPressureReadCounter[ PRESSURE_SENSOR_SPENT_DIALYSATE ].data = (U32)getFPGAPDsReadCount(); + lastPressureReadCounter[ PRESSURE_SENSOR_FRESH_DIALYSATE ].data = (U32)getFPGAPDfReadCount(); + lastPressureReadCounter[ PRESSURE_SENSOR_TRANSMEMBRANE ].data = (U32)getFPGAPtmReadCount(); + + lastPressureErrorCounter[ PRESSURE_SENSOR_HYDRAULICS_OUTLET ].data = (U32)getFPGAPnErrorCount(); + lastPressureErrorCounter[ PRESSURE_SENSOR_BIBAG ].data = (U32)getFPGAPCbErrorCount(); + lastPressureErrorCounter[ PRESSURE_SENSOR_SPENT_DIALYSATE ].data = (U32)getFPGAPDsErrorCount(); + lastPressureErrorCounter[ PRESSURE_SENSOR_FRESH_DIALYSATE ].data = (U32)getFPGAPDfErrorCount(); + lastPressureErrorCounter[ PRESSURE_SENSOR_TRANSMEMBRANE ].data = (U32)getFPGAPtmErrorCount(); + + // Monitor pressure sensor health + checkPressureSensors(); +} + +/*********************************************************************//** + * @brief + * The checkPressureSensors function checks the read and error counters for + * each pressure sensor. + * @details \b Alarm: ALARM_ID_DD_HYD_OUTLET_PRES_TIMEOUT_FAULT if the + * hydraulics outlet pressure sensor is not able to be read. + * @details \b Alarm: ALARM_ID_DD_BIBAG_PRES_TIMEOUT_FAULT if the + * BiBag pressure sensor is not able to be read. + * @details \b Alarm: ALARM_ID_DD_SPENT_DIALYSATE_PRES_TIMEOUT_FAULT if the + * spent dialysate pressure sensor is not able to be read. + * @details \b Alarm: ALARM_ID_DD_FRESH_DIALYSATE_PRES_TIMEOUT_FAULT if the + * fresh dialysate pressure sensor is not able to be read. + * @details \b Alarm: ALARM_ID_DD_TRANSMEMB_PRES_TIMEOUT_FAULT if the + * Transmembrane pressure sensor is not able to be read. + * @details \b Inputs: lastPressureReadCounter, lastPressureErrorCounter + * @details \b Outputs: none + * @return none + *************************************************************************/ +static void checkPressureSensors( void ) +{ + checkFPGAPersistentAlarms( FPGA_PERS_ERROR_HYDRAULICS_OUTLET_PRESSURE, getPressureSensorReadCount( PRESSURE_SENSOR_HYDRAULICS_OUTLET ) ); + checkFPGAPersistentAlarms( FPGA_PERS_ERROR_BIBAG_PRESSURE, getPressureSensorReadCount( PRESSURE_SENSOR_BIBAG ) ); + checkFPGAPersistentAlarms( FPGA_PERS_ERROR_SPENT_DIALYSATE_PRESSURE, getPressureSensorReadCount( PRESSURE_SENSOR_SPENT_DIALYSATE ) ); + checkFPGAPersistentAlarms( FPGA_PERS_ERROR_FRESH_DIALYSATE_PRESSURE, getPressureSensorReadCount( PRESSURE_SENSOR_FRESH_DIALYSATE ) ); + checkFPGAPersistentAlarms( FPGA_PERS_ERROR_TRANSMEMBRANE_PRESSURE, getPressureSensorReadCount( PRESSURE_SENSOR_TRANSMEMBRANE ) ); + + checkFPGAPersistentErrorCountAlarm( FPGA_PERS_ERROR_HYDRAULICS_OUTLET_PRESSURE, getPressureSensorErrorCount( PRESSURE_SENSOR_HYDRAULICS_OUTLET ) ); + checkFPGAPersistentErrorCountAlarm( FPGA_PERS_ERROR_BIBAG_PRESSURE, getPressureSensorErrorCount( PRESSURE_SENSOR_BIBAG ) ); + checkFPGAPersistentErrorCountAlarm( FPGA_PERS_ERROR_SPENT_DIALYSATE_PRESSURE, getPressureSensorErrorCount( PRESSURE_SENSOR_SPENT_DIALYSATE ) ); + checkFPGAPersistentErrorCountAlarm( FPGA_PERS_ERROR_FRESH_DIALYSATE_PRESSURE, getPressureSensorErrorCount( PRESSURE_SENSOR_FRESH_DIALYSATE ) ); + checkFPGAPersistentErrorCountAlarm( FPGA_PERS_ERROR_TRANSMEMBRANE_PRESSURE, getPressureSensorErrorCount( PRESSURE_SENSOR_TRANSMEMBRANE ) ); +} + +/*********************************************************************//** + * @brief + * The getPressure function gets the current pressure (in mmHg) for a given + * pressure sensor. + * @details \b Alarm: ALARM_ID_DD_SOFTWARE_FAULT if given sensor is invalid. + * @details \b Inputs: currentPressureReadings + * @details \b Outputs: none + * @param sensor ID of pressure sensor to get pressure reading for. + * @return The current pressure (in mmHg) of the given pressure sensor. + *************************************************************************/ +F32 getPressure( PRESSURE_SENSORS_T sensor ) +{ + F32 result = 0.0F; + + if ( sensor < NUM_OF_PRESSURE_SENSORS ) + { + result = currentPressureReadings[ sensor ].data; + if ( OVERRIDE_KEY == currentPressureReadings[ sensor ].override ) + { + result = currentPressureReadings[ sensor ].ovData; + } + } + else + { + SET_ALARM_WITH_2_U32_DATA( ALARM_ID_DD_SOFTWARE_FAULT, SW_FAULT_ID_PRESSURE_SENSOR_INVALID_SENSOR1, sensor ) + } + + return result; +} + +/*********************************************************************//** + * @brief + * The getPressureSensorTemperature function gets the current pressure sensor + * temperature (in deg C) for a given pressure sensor. + * @details \b Alarm: ALARM_ID_DD_SOFTWARE_FAULT if given sensor is invalid. + * @details \b Inputs: currentPresTempReadings + * @details \b Outputs: none + * @param sensor ID of pressure sensor to get temperature reading for. + * @return The current pressure sensor temperature (in deg C) of the given pressure sensor. + *************************************************************************/ +F32 getPressureSensorTemperature( PRESSURE_SENSORS_T sensor ) +{ + F32 result = 0.0F; + + if ( sensor < NUM_OF_PRESSURE_SENSORS ) + { + result = currentPresTempReadings[ sensor ].data; + if ( OVERRIDE_KEY == currentPresTempReadings[ sensor ].override ) + { + result = currentPresTempReadings[ sensor ].ovData; + } + } + else + { + SET_ALARM_WITH_2_U32_DATA( ALARM_ID_DD_SOFTWARE_FAULT, SW_FAULT_ID_PRESSURE_SENSOR_INVALID_SENSOR2, sensor ) + } + + return result; +} + +/*********************************************************************//** + * @brief + * The getPressureSensorReadCount function gets the current pressure sensor + * read count for a given pressure sensor. + * @details \b Alarm: ALARM_ID_DD_SOFTWARE_FAULT if given sensor is invalid. + * @details \b Inputs: lastPressureReadCounter + * @details \b Outputs: none + * @param sensor ID of pressure sensor to get read count for. + * @return The current pressure sensor read count of a given pressure sensor. + *************************************************************************/ +U32 getPressureSensorReadCount( PRESSURE_SENSORS_T sensor ) +{ + U32 result = 0; + + if ( sensor < NUM_OF_PRESSURE_SENSORS ) + { + result = lastPressureReadCounter[ sensor ].data; + if ( OVERRIDE_KEY == lastPressureReadCounter[ sensor ].override ) + { + result = lastPressureReadCounter[ sensor ].ovData; + } + } + else + { + SET_ALARM_WITH_2_U32_DATA( ALARM_ID_DD_SOFTWARE_FAULT, SW_FAULT_ID_PRESSURE_SENSOR_INVALID_SENSOR3, sensor ) + } + + return result; +} + +/*********************************************************************//** + * @brief + * The getPressureSensorErrorCount function gets the current pressure sensor + * error count for a given pressure sensor. + * @details \b Alarm: ALARM_ID_DD_SOFTWARE_FAULT if given sensor is invalid. + * @details \b Inputs: lastPressureErrorCounter + * @details \b Outputs: none + * @param sensor ID of pressure sensor to get error count for. + * @return The current pressure sensor error count of a given pressure sensor. + *************************************************************************/ +U32 getPressureSensorErrorCount( PRESSURE_SENSORS_T sensor ) +{ + U32 result = 0; + + if ( sensor < NUM_OF_PRESSURE_SENSORS ) + { + result = lastPressureErrorCounter[ sensor ].data; + if ( OVERRIDE_KEY == lastPressureErrorCounter[ sensor ].override ) + { + result = lastPressureErrorCounter[ sensor ].ovData; + } + } + else + { + SET_ALARM_WITH_2_U32_DATA( ALARM_ID_DD_SOFTWARE_FAULT, SW_FAULT_ID_PRESSURE_SENSOR_INVALID_SENSOR4, sensor ) + } + + return result; +} + + +/************************************************************************* + * TEST SUPPORT FUNCTIONS + *************************************************************************/ + + +/*********************************************************************//** + * @brief + * The testPressureSensorReadingsOverride function overrides the value of the + * specified pressure sensor with a given value. + * @details \b Inputs: none + * @details \b Outputs: currentPressureReadings[] + * @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 testPressureSensorReadingsOverride( 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 TD 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 + if ( sensor < NUM_OF_PRESSURE_SENSORS ) + { + if ( OVERRIDE_OVERRIDE == ovType ) + { + F32 value = override.state.f32; + + 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; + } + } + } + + return result; +} + +/*********************************************************************//** + * @brief + * The testPressureSensorTemperatureReadingsOverride function overrides the value of the + * specified pressure sensor 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 testPressureSensorTemperatureReadingsOverride( 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 TD 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 + if ( sensor < NUM_OF_PRESSURE_SENSORS ) + { + if ( OVERRIDE_OVERRIDE == ovType ) + { + F32 value = override.state.f32; + + 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; + } + } + } + + return result; +} + +/**@}*/ Index: firmware/App/Drivers/PressureSensor.h =================================================================== diff -u --- firmware/App/Drivers/PressureSensor.h (revision 0) +++ firmware/App/Drivers/PressureSensor.h (revision 8d390efa9309c8a0f430ba4652528fdbdbb6e2b8) @@ -0,0 +1,61 @@ +/************************************************************************** +* +* Copyright (c) 2024-2024 Diality Inc. - All Rights Reserved. +* +* THIS CODE MAY NOT BE COPIED OR REPRODUCED IN ANY FORM, IN PART OR IN +* WHOLE, WITHOUT THE EXPLICIT PERMISSION OF THE COPYRIGHT OWNER. +* +* @file PressureSensor.h +* +* @author (last) Vinayakam Mani +* @date (last) 04-Sep-2024 +* +* @author (original) Vinayakam Mani +* @date (original) 04-Sep-2024 +* +***************************************************************************/ + +#ifndef __PRESSURE_SENSOR_H__ +#define __PRESSURE_SENSOR_H__ + +#include "DDCommon.h" +#include "PressureCommon.h" + +/** + * @defgroup PressureSensor PressureSensor + * @brief Pressure sensors driver module. Reads the various DD pressure + * sensors raw pressure and temperature value. + * + * @addtogroup PressureSensor + * @{ + */ + +// ********** public definitions ********** + +/// 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_BIBAG, ///< Dry Bicarb pressure (PDB/PCb) + PRESSURE_SENSOR_SPENT_DIALYSATE, ///< Spent Dialysate pressure (PDs) + PRESSURE_SENSOR_FRESH_DIALYSATE, ///< Fresh Dialysate pressure (PDf) + PRESSURE_SENSOR_TRANSMEMBRANE, ///< Transmembrane pressure (Ptm) + NUM_OF_PRESSURE_SENSORS ///< Number of pressure sensors +} PRESSURE_SENSORS_T; + +// ********** public function prototypes ********** + +void initPressureSensor( void ); +void readPressureSensors( void ); +F32 getPressure( PRESSURE_SENSORS_T sensor ); +F32 getPressureSensorTemperature( PRESSURE_SENSORS_T sensor ); +U32 getPressureSensorReadCount( PRESSURE_SENSORS_T sensor ); +U32 getPressureSensorErrorCount( PRESSURE_SENSORS_T sensor ); + +BOOL testPressureSensorReadingsOverride( MESSAGE_T *message ); +BOOL testPressureSensorTemperatureReadingsOverride( MESSAGE_T *message ); + +/**@}*/ + +#endif Index: firmware/App/Monitors/Pressure.c =================================================================== diff -u --- firmware/App/Monitors/Pressure.c (revision 0) +++ firmware/App/Monitors/Pressure.c (revision 8d390efa9309c8a0f430ba4652528fdbdbb6e2b8) @@ -0,0 +1,390 @@ +/************************************************************************** +* +* Copyright (c) 2024-2024 Diality Inc. - All Rights Reserved. +* +* THIS CODE MAY NOT BE COPIED OR REPRODUCED IN ANY FORM, IN PART OR IN +* WHOLE, WITHOUT THE EXPLICIT PERMISSION OF THE COPYRIGHT OWNER. +* +* @file Pressure.c +* +* @author (last) Vinayakam Mani +* @date (last) 04-Sep-2024 +* +* @author (original) Vinayakam Mani +* @date (original) 04-Sep-2024 +* +***************************************************************************/ + +#include "AlarmMgmtDD.h" +#include "Messaging.h" +#include "Pressure.h" +#include "TaskPriority.h" + +/** + * @addtogroup Pressure + * @{ + */ + +// ********** private definitions ********** + +#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 DATA_PUBLISH_COUNTER_START_COUNT ( 5 ) ///< Data publish counter start count. +#define SIZE_OF_PRESSURE_ROLLING_AVG ( ( MS_PER_SECOND / TASK_PRIORITY_INTERVAL ) * 1 ) ///< Filtered pressure w/ 1 second moving average. +#define SIZE_OF_PRESSURETEMP_ROLLING_AVG ( ( MS_PER_SECOND / TASK_PRIORITY_INTERVAL ) * 1 ) ///< Filtered pressure temprature w/ 1 second moving average. + +/// Defined states for the pressures monitor state machine. +typedef enum PresMonitor_States +{ + PRESSURE_INIT_STATE = 0, ///< Initialization state. + 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 +{ + F32 pressureReadings[ SIZE_OF_PRESSURE_ROLLING_AVG ]; ///< Holds pressure sample rolling average. + U32 pressureReadingsIdx; ///< Index for next sample in rolling average array. + F32 pressureReadingsTotal; ///< Rolling total - used to calc average. + U32 pressureReadingsCount; ///< Number of samples in rolling average buffer +}FILTER_PRESSURE_READINGS_T; + +/// Filter pressuretemperature reading. +typedef struct +{ + F32 pressureTempReadings[ SIZE_OF_PRESSURETEMP_ROLLING_AVG ]; ///< Holds pressure temperature sample rolling average. + U32 pressureTempReadingsIdx; ///< Index for next sample in rolling average array. + F32 pressureTempReadingsTotal; ///< Rolling total - used to calc average. + U32 pressureTempReadingsCount; ///< Number of samples in rolling average buffer +}FILTER_PRESSURE_TEMPERATURE_READINGS_T; + +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 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. + +// ********** private function prototypes ********** + +static void filterPressureSensorReadings( void ); +static void filterPressureSensorTemperatureReadings( void ); +static PRESSURE_STATE_T handlePressuresInitState( void ); +static PRESSURE_STATE_T handlePressuresContReadState( void ); +static void publishPressuresData( void ); + +/*********************************************************************//** + * @brief + * The initPressureSensor function initializes the Pressure Sensor unit. + * @details \b Inputs: none + * @details \b Outputs: Pressure Sensor unit is initialized. + * @return none + *************************************************************************/ +void initPressure( void ) +{ + U32 i; + pressuresState = PRESSURE_INIT_STATE; + pressuresDataPublicationTimerCounter = DATA_PUBLISH_COUNTER_START_COUNT; + + initPressureSensor(); + + // Initialize override structures for each pressure sensor + for ( i = (U32)PRESSURE_SENSOR_FIRST; i < (U32)NUM_OF_PRESSURE_SENSORS; i++ ) + { + filteredcurrentPressureReadings[ i ].data = 0.0F; + filteredcurrentPressureReadings[ i ].ovData = 0.0F; + filteredcurrentPressureReadings[ i ].ovInitData = 0.0F; + filteredcurrentPressureReadings[ i ].override = OVERRIDE_RESET; + + filteredcurrentPresTempReadings[ i ].data = 0.0F; + filteredcurrentPresTempReadings[ i ].ovData = 0.0F; + filteredcurrentPresTempReadings[ i ].ovInitData = 0.0F; + filteredcurrentPresTempReadings[ i ].override = OVERRIDE_RESET; + } +} + +/*********************************************************************//** + * @brief + * The readPressureSensors function gets the current pressure reading + * for a all pressure sensors from the FPGA and also reads the freshness + * and error counters to verify that the pressure sensors are being read + * by the FPGA without issue. + * @note This function should be called periodically to maintain fresh + * sensor readings for all pressure sensors. + * @details \b Inputs: FPGA + * @details \b Outputs: currentPressureReadings[],currentPresTempReadings[], + * lastPressureReadCounter[],lastPressureErrorCounter[]. + * @return none + *************************************************************************/ +static void filterPressureSensors( void ) +{ + //Filter pressure sensor reading + filterPressureSensorReadings(); + + //Filter pressure sensor temperature reading + filterPressureSensorTemperatureReadings(); + +} + +/*********************************************************************//** + * @brief + * The getFilteredPressure function gets the filtered current pressure (in mmHg) + * for a given pressure sensor. + * @details \b Alarm: ALARM_ID_DD_SOFTWARE_FAULT if given sensor is invalid. + * @details \b Inputs: filteredcurrentPressureReadings + * @details \b Outputs: none + * @param sensor ID of pressure sensor to get pressure reading for. + * @return The filtered current pressure (in mmHg) of the given pressure sensor. + *************************************************************************/ +F32 getFilteredPressure( PRESSURE_SENSORS_T sensor ) +{ + F32 result = 0.0F; + + if ( sensor < NUM_OF_PRESSURE_SENSORS ) + { + result = filteredcurrentPressureReadings[ sensor ].data; + if ( OVERRIDE_KEY == filteredcurrentPressureReadings[ sensor ].override ) + { + result = filteredcurrentPressureReadings[ sensor ].ovData; + } + } + else + { + SET_ALARM_WITH_2_U32_DATA( ALARM_ID_DD_SOFTWARE_FAULT, SW_FAULT_ID_PRESSURE_SENSOR_INVALID_SENSOR5, sensor ) + } + + return result; +} + +/*********************************************************************//** + * @brief + * The getFilteredPressureSensorTemperature function gets the filtered current + * pressure sensor temperature (in deg C) for a given pressure sensor. + * @details \b Alarm: ALARM_ID_DD_SOFTWARE_FAULT if given sensor is invalid. + * @details \b Inputs: currentPresTempReadings + * @details \b Outputs: none + * @param sensor ID of pressure sensor to get temperature reading for. + * @return The filtered current pressure sensor temperature (in deg C) of the given pressure sensor. + *************************************************************************/ +F32 getFilteredPressureSensorTemperature( PRESSURE_SENSORS_T sensor ) +{ + F32 result = 0.0F; + + if ( sensor < NUM_OF_PRESSURE_SENSORS ) + { + result = filteredcurrentPresTempReadings[ sensor ].data; + if ( OVERRIDE_KEY == filteredcurrentPresTempReadings[ sensor ].override ) + { + result = filteredcurrentPresTempReadings[ sensor ].ovData; + } + } + else + { + SET_ALARM_WITH_2_U32_DATA( ALARM_ID_DD_SOFTWARE_FAULT, SW_FAULT_ID_PRESSURE_SENSOR_INVALID_SENSOR6, sensor ) + } + + return result; +} + +/*********************************************************************//** + * @brief + * The execPressureSensor function executes the pressure monitor state machine + * and publish pressure data. + * @details \b Inputs: pressuresState + * @details \b Outputs: pressuresState + * @details \b Alarm: ALARM_ID_DD_SOFTWARE_FAULT if invalid pressure state seen + * @return none + *************************************************************************/ +void execPressureSensor( void ) +{ + // state machine + switch ( pressuresState ) + { + case PRESSURE_INIT_STATE: + pressuresState = handlePressuresInitState(); + break; + + case PRESSURE_CONTINUOUS_READ_STATE: + pressuresState = handlePressuresContReadState(); + break; + + default: + SET_ALARM_WITH_2_U32_DATA( ALARM_ID_DD_SOFTWARE_FAULT, SW_FAULT_ID_PRESSURE_INVALID_EXEC_STATE, pressuresState ) + pressuresState = PRESSURE_INIT_STATE; + break; + } + + // publish pressure/occlusion data on interval + publishPressuresData(); +} + +/*********************************************************************//** + * @brief + * The filterPressureSensorReadings function filters the pressures for + * defined interval to get average pressure reading. + * @details \b Inputs: filteredPressureReadings,currentPressureReadings + * @details \b Outputs: filteredPressureReadings,filteredcurrentPressureReadings + * @return none + *************************************************************************/ +static void filterPressureSensorReadings( void ) +{ + U32 i; + + for ( i = (U32)PRESSURE_SENSOR_FIRST; i < (U32)NUM_OF_PRESSURE_SENSORS; i++ ) + { + F32 pressure = getPressure( (PRESSURE_SENSORS_T)i ); + + if ( filteredPressureReadings[i].pressureReadingsCount >= SIZE_OF_PRESSURE_ROLLING_AVG ) + { + filteredPressureReadings[i].pressureReadingsTotal -= filteredPressureReadings[i].pressureReadings[ filteredPressureReadings[i].pressureReadingsIdx ]; + } + filteredPressureReadings[i].pressureReadings[ filteredPressureReadings[i].pressureReadingsIdx ] = pressure; + filteredPressureReadings[i].pressureReadingsTotal += pressure; + filteredPressureReadings[i].pressureReadingsIdx = INC_WRAP( filteredPressureReadings[i].pressureReadingsIdx, 0, SIZE_OF_PRESSURE_ROLLING_AVG - 1 ); + filteredPressureReadings[i].pressureReadingsCount = INC_CAP( filteredPressureReadings[i].pressureReadingsCount, SIZE_OF_PRESSURE_ROLLING_AVG ); + filteredcurrentPressureReadings[i].data = filteredPressureReadings[i].pressureReadingsTotal / (F32)filteredPressureReadings[i].pressureReadingsCount; + } +} + +/*********************************************************************//** + * @brief + * The filterPressureSensorTemperatureReadings function filters the pressure sensor + * temperature for defined interval to get average temperature reading. + * @details \b Inputs: filteredPressureTempReadings,currentPresTempReadings + * @details \b Outputs: filteredPressureTempReadings,filteredcurrentPresTempReadings + * @return none + *************************************************************************/ +static void filterPressureSensorTemperatureReadings( void ) +{ + U32 i; + + for ( i = (U32)PRESSURE_SENSOR_FIRST; i < (U32)NUM_OF_PRESSURE_SENSORS; i++ ) + { + F32 pressureTemperature = getPressureSensorTemperature( (PRESSURE_SENSORS_T)i ); + + if ( filteredPressureTempReadings[i].pressureTempReadingsCount >= SIZE_OF_PRESSURETEMP_ROLLING_AVG ) + { + filteredPressureTempReadings[i].pressureTempReadingsTotal -= filteredPressureTempReadings[i].pressureTempReadings[ filteredPressureTempReadings[i].pressureTempReadingsIdx ]; + } + filteredPressureTempReadings[i].pressureTempReadings[ filteredPressureTempReadings[i].pressureTempReadingsIdx ] = pressureTemperature; + filteredPressureTempReadings[i].pressureTempReadingsTotal += pressureTemperature; + filteredPressureTempReadings[i].pressureTempReadingsIdx = INC_WRAP( filteredPressureTempReadings[i].pressureTempReadingsIdx, 0, SIZE_OF_PRESSURETEMP_ROLLING_AVG - 1 ); + filteredPressureTempReadings[i].pressureTempReadingsCount = INC_CAP( filteredPressureTempReadings[i].pressureTempReadingsCount, SIZE_OF_PRESSURETEMP_ROLLING_AVG ); + filteredcurrentPresTempReadings[i].data = filteredPressureTempReadings[i].pressureTempReadingsTotal / (F32)filteredPressureTempReadings[i].pressureTempReadingsCount; + } +} + +/*********************************************************************//** + * @brief + * The handlePressuresInitState function handles the pressures initialize state + * of the pressures monitor state machine. + * @details \b Inputs: none + * @details \b Outputs: none + * @return next state + *************************************************************************/ +static PRESSURE_STATE_T handlePressuresInitState( void ) +{ + return PRESSURE_CONTINUOUS_READ_STATE; +} + +/*********************************************************************//** + * @brief + * The handlePressuresContReadState function handles the continuous read state + * of the pressures monitor state machine. + * @details \b Inputs: pressureFilterCounter + * @details \b Outputs: pressure sensor values updated + * @return next state + *************************************************************************/ +static PRESSURE_STATE_T handlePressuresContReadState( void ) +{ + PRESSURE_STATE_T result = PRESSURE_CONTINUOUS_READ_STATE; + + //Get raw pressure value + readPressureSensors(); + // filtered pressure readings + filterPressureSensors(); + + return result; +} + +/*********************************************************************//** + * @brief + * The publishPressuresData function publishes DD pressures data at a set interval. + * @details \b Inputs: pressuresDataPublicationTimerCounter + * @details \b Outputs: pressuresDataPublicationTimerCounter + * @details \b Message \b Sent: MSG_ID_DD_PRESSURES_DATA to publish pressure data. + * @return none + *************************************************************************/ +static void publishPressuresData( void ) +{ + // publish pressure/occlusion data on interval + if ( ++pressuresDataPublicationTimerCounter >= getU32OverrideValue( &pressuresDataPublishInterval ) ) + { + PRESSURE_TEMP_DATA_T data; + + data.filteredHydraulicsOutletPressure = getFilteredPressure( PRESSURE_SENSOR_HYDRAULICS_OUTLET ); + data.filteredBibagPressure = getFilteredPressure( PRESSURE_SENSOR_BIBAG ); + data.filteredSpentdialysatePressure = getFilteredPressure( PRESSURE_SENSOR_SPENT_DIALYSATE ); + data.filteredFreshdialysatePressure = getFilteredPressure( PRESSURE_SENSOR_FRESH_DIALYSATE ); + data.filteredTransmembranePressure = getFilteredPressure( PRESSURE_SENSOR_TRANSMEMBRANE ); + data.filteredHydraulicsOutletTemp = getFilteredPressureSensorTemperature( PRESSURE_SENSOR_HYDRAULICS_OUTLET ); + data.filteredBibagTemp = getFilteredPressureSensorTemperature( PRESSURE_SENSOR_BIBAG ); + data.filteredSpentdialysateTemp = getFilteredPressureSensorTemperature( PRESSURE_SENSOR_SPENT_DIALYSATE ); + data.filteredFreshdialysateTemp = getFilteredPressureSensorTemperature( PRESSURE_SENSOR_FRESH_DIALYSATE ); + data.filteredTransmembraneTemp = getFilteredPressureSensorTemperature( PRESSURE_SENSOR_TRANSMEMBRANE ); + pressuresDataPublicationTimerCounter = 0; + + broadcastData( MSG_ID_DD_PRESSURES_DATA, COMM_BUFFER_OUT_CAN_DD_BROADCAST, (U08*)&data, sizeof( PRESSURE_TEMP_DATA_T ) ); + } +} + + +/************************************************************************* + * TEST SUPPORT FUNCTIONS + *************************************************************************/ + + +/*********************************************************************//** + * @brief + * The testPressureSensnorDataPublishIntervalOverride function overrides the + * pressure sensor data publish interval. + * @details \b Inputs: none + * @details \b Outputs: pressuresDataPublishInterval + * @param message Override message from Dialin which includes the value + * that override valves states publish interval with (in ms) + * @return TRUE if override successful, FALSE if not + *************************************************************************/ +BOOL testPressureSensorDataPublishIntervalOverride( MESSAGE_T *message ) +{ + BOOL result = FALSE; + TEST_OVERRIDE_PAYLOAD_T override; + OVERRIDE_TYPE_T ovType = getOverridePayloadFromMessage( message, &override ); + + // Verify tester has logged in with TD 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; + pressuresDataPublishInterval.ovData = intvl; + pressuresDataPublishInterval.override = OVERRIDE_KEY; + } + else + { + result = TRUE; + pressuresDataPublishInterval.override = OVERRIDE_RESET; + pressuresDataPublishInterval.ovData = pressuresDataPublishInterval.ovInitData; + } + } + + return result; +} + +/**@}*/ Index: firmware/App/Monitors/Pressure.h =================================================================== diff -u --- firmware/App/Monitors/Pressure.h (revision 0) +++ firmware/App/Monitors/Pressure.h (revision 8d390efa9309c8a0f430ba4652528fdbdbb6e2b8) @@ -0,0 +1,63 @@ +/************************************************************************** +* +* Copyright (c) 2024-2024 Diality Inc. - All Rights Reserved. +* +* THIS CODE MAY NOT BE COPIED OR REPRODUCED IN ANY FORM, IN PART OR IN +* WHOLE, WITHOUT THE EXPLICIT PERMISSION OF THE COPYRIGHT OWNER. +* +* @file Pressure.h +* +* @author (last) Vinayakam Mani +* @date (last) 04-Sep-2024 +* +* @author (original) Vinayakam Mani +* @date (original) 04-Sep-2024 +* +***************************************************************************/ + +#ifndef __PRESSURE_H__ +#define __PRESSURE_H__ + +#include "DDCommon.h" +#include "PressureSensor.h" + +/** + * @defgroup Pressure Pressure + * @brief Pressure sensors monitor module. Monitors the various DD pressure + * sensors. + * + * @addtogroup Pressure + * @{ + */ + +// ********** public definitions ********** + +#pragma pack(push,1) +/// Pressure data struct. +typedef struct +{ + F32 filteredHydraulicsOutletPressure; ///< Hydraulics outlet pressure + F32 filteredBibagPressure; ///< Bicarb bag pressure + F32 filteredSpentdialysatePressure; ///< Spent Dialysate pressure + F32 filteredFreshdialysatePressure; ///< Fresh Dialysate pressure + F32 filteredTransmembranePressure; ///< Transmembrane pressure + F32 filteredHydraulicsOutletTemp; ///< Hydraulics outlet pressure temperature + F32 filteredBibagTemp; ///< Bicarb bag temperature + F32 filteredSpentdialysateTemp; ///< Spent Dialysate temperature + F32 filteredFreshdialysateTemp; ///< Fresh Dialysate temperature + F32 filteredTransmembraneTemp; ///< Transmembrane temperature +} PRESSURE_TEMP_DATA_T; +#pragma pack(pop) + +// ********** public function prototypes ********** + +void initPressure( void ); +void execPressureSensor( void ); + +F32 getFilteredPressure( PRESSURE_SENSORS_T sensor ); +F32 getFilteredPressureSensorTemperature( PRESSURE_SENSORS_T sensor ); +BOOL testPressureSensorDataPublishIntervalOverride( MESSAGE_T *message ); + +/**@}*/ + +#endif Fisheye: Tag 8d390efa9309c8a0f430ba4652528fdbdbb6e2b8 refers to a dead (removed) revision in file `firmware/App/Monitors/PressureSensor.c'. Fisheye: No comparison available. Pass `N' to diff? Fisheye: Tag 8d390efa9309c8a0f430ba4652528fdbdbb6e2b8 refers to a dead (removed) revision in file `firmware/App/Monitors/PressureSensor.h'. Fisheye: No comparison available. Pass `N' to diff? Index: firmware/App/Services/AlarmMgmtSWFaults.h =================================================================== diff -u -ra151824b11e912adee44fab8f5e779cd1b2d1903 -r8d390efa9309c8a0f430ba4652528fdbdbb6e2b8 --- firmware/App/Services/AlarmMgmtSWFaults.h (.../AlarmMgmtSWFaults.h) (revision a151824b11e912adee44fab8f5e779cd1b2d1903) +++ firmware/App/Services/AlarmMgmtSWFaults.h (.../AlarmMgmtSWFaults.h) (revision 8d390efa9309c8a0f430ba4652528fdbdbb6e2b8) @@ -102,6 +102,10 @@ SW_FAULT_ID_PRESSURE_SENSOR_INVALID_SENSOR4 = 71, SW_FAULT_ID_PRESSURE_SENSOR_INVALID_SENSOR5 = 72, SW_FAULT_ID_PRESSURE_SENSOR_INVALID_SENSOR6 = 73, + SW_FAULT_ID_INVALID_CONDUCTIVITY_SENSOR_ID = 74, + SW_FAULT_ID_INVALID_CONDUCTIVITY_SENSOR_ID1 = 75, + SW_FAULT_ID_INVALID_CONDUCTIVITY_SENSOR_ID2 = 76, + SW_FAULT_ID_INVALID_CONDUCTIVITY_SENSOR_ID3 = 77, NUM_OF_SW_FAULT_IDS } SW_FAULT_ID_T; Index: firmware/App/Services/FpgaDD.c =================================================================== diff -u -r119a861592835f560bc3fb41bad2a1b1299d8e5d -r8d390efa9309c8a0f430ba4652528fdbdbb6e2b8 --- firmware/App/Services/FpgaDD.c (.../FpgaDD.c) (revision 119a861592835f560bc3fb41bad2a1b1299d8e5d) +++ firmware/App/Services/FpgaDD.c (.../FpgaDD.c) (revision 8d390efa9309c8a0f430ba4652528fdbdbb6e2b8) @@ -51,10 +51,24 @@ #define FPGA_ENABLE_BC_VALVES_CONTROL 0x00 ///< FPGA enable Balancing chamber valves control. #define FPGA_ENABLE_UF_VALVES_CONTROL 0x00 ///< FPGA enable Balancing Chamber valves control. -#define FPGA_VBF_PWM_PULL_IN_MS ( 3 * MS_PER_SECOND ) ///< FPGA VBf PWM pull in in milliseconds. -#define FPGA_VBF_PWM_LOW 9999 ///< FPGA VBf PWM low. -#define FPGA_VBF_PWM_PERIOD 16666 ///< FPGA VBf PWM period. +#define FPGA_CD1_RESET_BIT 0x01 ///< Conductivity Sensor CD1 reset bit mask. +#define FPGA_CD1_INIT_ENABLE_BIT 0x02 ///< Conductivity Sensor CD1 Initialization enable bit mask. +#define FPGA_CD1_WR_ENABLE_BIT 0x04 ///< Conductivity Sensor CD1 write enable bit mask. +#define FPGA_CD1_RD_ENABLE_BIT 0x08 ///< Conductivity Sensor CD1 read enable bit mask. +#define FPGA_CD2_RESET_BIT 0x10 ///< Conductivity Sensor CD2 reset bit mask. +#define FPGA_CD2_INIT_ENABLE_BIT 0x20 ///< Conductivity Sensor CD2 Initialization enable bit mask. +#define FPGA_CD2_WR_ENABLE_BIT 0x40 ///< Conductivity Sensor CD2 write enable bit mask. +#define FPGA_CD2_RD_ENABLE_BIT 0x80 ///< Conductivity Sensor CD2 read enable bit mask. +#define FPGA_CD3_RESET_BIT 0x01 ///< Conductivity Sensor CD3 reset bit mask. +#define FPGA_CD3_INIT_ENABLE_BIT 0x02 ///< Conductivity Sensor CD3 Initialization enable bit mask. +#define FPGA_CD3_WR_ENABLE_BIT 0x04 ///< Conductivity Sensor CD3 write enable bit mask. +#define FPGA_CD3_RD_ENABLE_BIT 0x08 ///< Conductivity Sensor CD3 read enable bit mask. +#define FPGA_CD4_RESET_BIT 0x10 ///< Conductivity Sensor CD4 reset bit mask. +#define FPGA_CD4_INIT_ENABLE_BIT 0x20 ///< Conductivity Sensor CD4 Initialization enable bit mask. +#define FPGA_CD4_WR_ENABLE_BIT 0x40 ///< Conductivity Sensor CD4 write enable bit mask. +#define FPGA_CD4_RD_ENABLE_BIT 0x80 ///< Conductivity Sensor CD4 read enable bit mask. + // Assuming all valves are ON/OFF based control ( No PWM control used) #define FPGA_ENABLE_VALVES_PWM 0x0000 ///< FPGA enable valves PWM. #define FPGA_ENABLE_BC_VALVES_PWM 0x00 ///< FPGA enable Balancing chamber valves PWM. @@ -102,72 +116,72 @@ U08 fpgaIOErrorCntProcessor; ///< Reg 262. Number of errors in Microprocessor UART interface U08 fpgaIOErrorCntPC; ///< Reg 263. Number of errors in PC UART interface - U32 fpgaPnPressure; ///< Reg 264. Pn/PHo MPM pressure sensor RAW pressure data - U32 fpgaPnTemp; ///< Reg 268. Pn/PHo MPM pressure sensor RAW temperature data - U08 fpgaPnReadCnt; ///< Reg 272. Pn/PHo Counter for good I2C transmission b/w FPGA and sensor - U08 fpgaPnErrorCnt; ///< Reg 273. Pn/PHo Counter for bad I2C transmission b/w FPGA and sensor + U16 fpgaPnPressure; ///< Reg 264. Pn/PHo MPM pressure sensor RAW pressure data + U16 fpgaPnTemp; ///< Reg 266. Pn/PHo MPM pressure sensor RAW temperature data + U08 fpgaPnReadCnt; ///< Reg 268. Pn/PHo Counter for good I2C transmission b/w FPGA and sensor + U08 fpgaPnErrorCnt; ///< Reg 229. Pn/PHo Counter for bad I2C transmission b/w FPGA and sensor - U32 fpgaPCbPressure; ///< Reg 274. PCb/PDB MPM pressure sensor RAW pressure data - U32 fpgaPCbTemp; ///< Reg 278. PCb/PDB MPM pressure sensor RAW temperature data - U08 fpgaPCbReadCnt; ///< Reg 282. PCb/PDB Counter for good I2C transmission b/w FPGA and sensor - U08 fpgaPCbErrorCnt; ///< Reg 283. PCb/PDB Counter for bad I2C transmission b/w FPGA and sensor + U16 fpgaPCbPressure; ///< Reg 270. PCb/PDB MPM pressure sensor RAW pressure data + U16 fpgaPCbTemp; ///< Reg 272. PCb/PDB MPM pressure sensor RAW temperature data + U08 fpgaPCbReadCnt; ///< Reg 274. PCb/PDB Counter for good I2C transmission b/w FPGA and sensor + U08 fpgaPCbErrorCnt; ///< Reg 275. PCb/PDB Counter for bad I2C transmission b/w FPGA and sensor - U32 fpgaPDsPressure; ///< Reg 284. PDs MPM pressure sensor RAW pressure data - U32 fpgaPDsTemp; ///< Reg 288. PDs MPM pressure sensor RAW temperature data - U08 fpgaPDsReadCnt; ///< Reg 292. PDs Counter for good I2C transmission b/w FPGA and sensor - U08 fpgaPDsErrorCnt; ///< Reg 293. PDs Counter for bad I2C transmission b/w FPGA and sensor + U16 fpgaPDsPressure; ///< Reg 276. PDs MPM pressure sensor RAW pressure data + U16 fpgaPDsTemp; ///< Reg 278. PDs MPM pressure sensor RAW temperature data + U08 fpgaPDsReadCnt; ///< Reg 280. PDs Counter for good I2C transmission b/w FPGA and sensor + U08 fpgaPDsErrorCnt; ///< Reg 281. PDs Counter for bad I2C transmission b/w FPGA and sensor - U32 fpgaPDfPressure; ///< Reg 294. PDf MPM pressure sensor RAW pressure data - U32 fpgaPDfTemp; ///< Reg 298. PDf MPM pressure sensor RAW temperature data - U08 fpgaPDfReadCnt; ///< Reg 302. PDf Counter for good I2C transmission b/w FPGA and sensor - U08 fpgaPDfErrorCnt; ///< Reg 303. PDf Counter for bad I2C transmission b/w FPGA and sensor + U16 fpgaPDfPressure; ///< Reg 282. PDf MPM pressure sensor RAW pressure data + U16 fpgaPDfTemp; ///< Reg 284. PDf MPM pressure sensor RAW temperature data + U08 fpgaPDfReadCnt; ///< Reg 286. PDf Counter for good I2C transmission b/w FPGA and sensor + U08 fpgaPDfErrorCnt; ///< Reg 287. PDf Counter for bad I2C transmission b/w FPGA and sensor - U32 fpgaPtmPressure; ///< Reg 304. Ptm MPM pressure sensor RAW pressure data - U32 fpgaPtmTemp; ///< Reg 308. Ptm MPM pressure sensor RAW temperature data - U08 fpgaPtmReadCnt; ///< Reg 312. Ptm Counter for good I2C transmission b/w FPGA and sensor - U08 fpgaPtmErrorCnt; ///< Reg 313. Ptm Counter for bad I2C transmission b/w FPGA and sensor + U16 fpgaPtmPressure; ///< Reg 288. Ptm MPM pressure sensor RAW pressure data + U16 fpgaPtmTemp; ///< Reg 290. Ptm MPM pressure sensor RAW temperature data + U08 fpgaPtmReadCnt; ///< Reg 292. Ptm Counter for good I2C transmission b/w FPGA and sensor + U08 fpgaPtmErrorCnt; ///< Reg 293. Ptm Counter for bad I2C transmission b/w FPGA and sensor - U16 fpgaCD1DataOut; ///< Reg 314. Data read from Conductivity Sensor 1 register - U16 fpgaCD1Cond; ///< Reg 316. CD1 conductivity - U16 fpgaCD1Temp; ///< Reg 318. CD1 Temperature - U08 fpgaCD1ReadCnt; ///< Reg 320. CD1 successful read count - U08 fpgaCD1ErrorCnt; ///< Reg 321. CD1 error read count + U32 fpgaCD1DataOut; ///< Reg 294. Data read from Conductivity Sensor 1 register + U16 fpgaCD1Cond; ///< Reg 298. CD1 conductivity + U16 fpgaCD1Temp; ///< Reg 300. CD1 Temperature + U08 fpgaCD1ReadCnt; ///< Reg 302. CD1 successful read count + U08 fpgaCD1ErrorCnt; ///< Reg 303. CD1 error read count - U16 fpgaCD2DataOut; ///< Reg 322. Data read from Conductivity Sensor 2 register - U16 fpgaCD2Cond; ///< Reg 324. CD2 conductivity - U16 fpgaCD2Temp; ///< Reg 326. CD2 Temperature - U08 fpgaCD2ReadCnt; ///< Reg 328. CD2 successful read count - U08 fpgaCD2ErrorCnt; ///< Reg 329. CD2 error read count + U32 fpgaCD2DataOut; ///< Reg 304. Data read from Conductivity Sensor 2 register + U16 fpgaCD2Cond; ///< Reg 308. CD2 conductivity + U16 fpgaCD2Temp; ///< Reg 310. CD2 Temperature + U08 fpgaCD2ReadCnt; ///< Reg 312. CD2 successful read count + U08 fpgaCD2ErrorCnt; ///< Reg 313. CD2 error read count - U16 fpgaCD3DataOut; ///< Reg 330. Data read from Conductivity Sensor 3 register - U16 fpgaCD3Cond; ///< Reg 332. CD3 conductivity - U16 fpgaCD3Temp; ///< Reg 334. CD3 Temperature - U08 fpgaCD3ReadCnt; ///< Reg 336. CD3 successful read count - U08 fpgaCD3ErrorCnt; ///< Reg 337. CD3 error read count + U32 fpgaCD3DataOut; ///< Reg 314. Data read from Conductivity Sensor 3 register + U16 fpgaCD3Cond; ///< Reg 318. CD3 conductivity + U16 fpgaCD3Temp; ///< Reg 320. CD3 Temperature + U08 fpgaCD3ReadCnt; ///< Reg 322. CD3 successful read count + U08 fpgaCD3ErrorCnt; ///< Reg 323. CD3 error read count - U16 fpgaCD4DataOut; ///< Reg 338. Data read from Conductivity Sensor 4 register - U16 fpgaCD4Cond; ///< Reg 340. CD4 conductivity - U16 fpgaCD4Temp; ///< Reg 342. CD4 Temperature - U08 fpgaCD4ReadCnt; ///< Reg 344. CD4 successful read count - U08 fpgaCD4ErrorCnt; ///< Reg 345. CD4 error read count + U32 fpgaCD4DataOut; ///< Reg 324. Data read from Conductivity Sensor 4 register + U16 fpgaCD4Cond; ///< Reg 328. CD4 conductivity + U16 fpgaCD4Temp; ///< Reg 330. CD4 Temperature + U08 fpgaCD4ReadCnt; ///< Reg 332. CD4 successful read count + U08 fpgaCD4ErrorCnt; ///< Reg 333. CD4 error read count - U16 fpgaLevelSensor1; ///< Reg 346. Level Sensor 1 - U16 fpgaLevelSensor2; ///< Reg 348. Level Sensor 2 + U16 fpgaLevelSensor1; ///< Reg 334. Level Sensor 1 + U16 fpgaLevelSensor2; ///< Reg 336. Level Sensor 2 - U08 fpgaHallSensInputs; ///< Reg 350. Hall sensor Inputs + U08 fpgaHallSensInputs; ///< Reg 338. Hall sensor Inputs - U08 fpgaBldTxFIFOCnt; ///< Reg 351. Blood leak sensor transmit FIFO count - U16 fpgaBldRxErrorCnt; ///< Reg 352. Blood leak sensor Receive error count - U16 fpgaBldRxFIFOCnt; ///< Reg 354. Blood leak sensor Receive FIFO count - U08 fpgaBldRxFIFODataOut; ///< Reg 356. Blood leak sensor Receive data - U08 fpgaBldPulseStatus; ///< Reg 357. Blood leak sensor status + U08 fpgaBldTxFIFOCnt; ///< Reg 339. Blood leak sensor transmit FIFO count + U16 fpgaBldRxErrorCnt; ///< Reg 340. Blood leak sensor Receive error count + U16 fpgaBldRxFIFOCnt; ///< Reg 342. Blood leak sensor Receive FIFO count + U08 fpgaBldRxFIFODataOut; ///< Reg 344. Blood leak sensor Receive data + U08 fpgaBldPulseStatus; ///< Reg 345. Blood leak sensor status - U16 fpgaValveStates; ///< Reg 358. Valve status read - U16 fpgaValvePWMEnableStates; ///< Reg 360. Valve PWM Enable status read - U08 fpgaValveBCStates; ///< Reg 362. Balancing chamber Valves states - U08 fpgaValveBCPWMStates; ///< Reg 363. Balancing Chamber Valve PWM states - U08 fpgaValveUFStates; ///< Reg 364. Ultrafiltration Valves states - U08 fpgaValveUFPWMStates; ///< Reg 365. Ultrafiltration Valves PWM states + U16 fpgaValveStates; ///< Reg 346. Valve status read + U16 fpgaValvePWMEnableStates; ///< Reg 348. Valve PWM Enable status read + U08 fpgaValveBCStates; ///< Reg 350. Balancing chamber Valves states + U08 fpgaValveBCPWMStates; ///< Reg 351. Balancing Chamber Valve PWM states + U08 fpgaValveUFStates; ///< Reg 352. Ultrafiltration Valves states + U08 fpgaValveUFPWMStates; ///< Reg 353. Ultrafiltration Valves PWM states } DD_FPGA_SENSORS_T; typedef struct @@ -225,24 +239,24 @@ U08 fpgaConSensTD12Control; ///< Reg 90. Conductivity/Temperature Sensors 1 & 2 Control registers U08 fpgaConSensTD34Control; ///< Reg 91. Conductivity/Temperature Sensors 3 & 4 Control registers U16 fpgaConSensTD12_Addrs; ///< Reg 92. CDTD 1&2 Initialization Address register - U16 fpgaConSensTD12_Data_In; ///< Reg 94. CDTD 1&2 Initialization data register - U16 fpgaConSensTD34_Addrs; ///< Reg 96. CDTD 3&4 Initialization Address register - U16 fpgaConSensTD34_Data_In; ///< Reg 98. CDTD 3&4 Initialization data register + U32 fpgaConSensTD12_Data_In; ///< Reg 94. CDTD 1&2 Initialization data register + U16 fpgaConSensTD34_Addrs; ///< Reg 98. CDTD 3&4 Initialization Address register + U32 fpgaConSensTD34_Data_In; ///< Reg 100. CDTD 3&4 Initialization data register - U16 fpgaRemoteUpdate_Write; ///< Reg 100.Register for Remote update used by SW. + U16 fpgaRemoteUpdate_Write; ///< Reg 104.Register for Remote update used by SW. - U16 fpgaDGPSpeed; ///< Reg 102. DGP Speed/RPM Control - U08 fpgaDGPControl; ///< Reg 104. DGP Control - U08 fpgaSDPControl; ///< Reg 105. SDP Control - U16 fpgaSDPSpeed; ///< Reg 106. SDP Speed/RPM Control - U16 fpgaCPASpeed; ///< Reg 108. Acid Concentrate Pump Speed/RPM Control - U08 fpgaCPAControl; ///< Reg 110. Acid Concentrate Pump Control - U08 fpgaCPBControl; ///< Reg 111. BiCarb Concentrate Pump Control - U16 fpgaCPBSpeed; ///< Reg 112. BiCarb Concentrate Pump Speed/RPM Control + U16 fpgaDGPSpeed; ///< Reg 106. DGP Speed/RPM Control + U08 fpgaDGPControl; ///< Reg 108. DGP Control + U08 fpgaSDPControl; ///< Reg 109. SDP Control + U16 fpgaSDPSpeed; ///< Reg 110. SDP Speed/RPM Control + U16 fpgaCPASpeed; ///< Reg 112. Acid Concentrate Pump Speed/RPM Control + U08 fpgaCPAControl; ///< Reg 114. Acid Concentrate Pump Control + U08 fpgaCPBControl; ///< Reg 115. BiCarb Concentrate Pump Control + U16 fpgaCPBSpeed; ///< Reg 116. BiCarb Concentrate Pump Speed/RPM Control - U08 fpgaBloodLeakSensorTest; ///< Reg 114. Blood leak sensor test - U08 fpgaBloodLeakUARTControl; ///< Reg 115. Blood leak sensor UART control - U08 fpgaBloodLeakFIFOTx; ///< Reg 116. Blood leak sensor FIFO transmit control + U08 fpgaBloodLeakSensorTest; ///< Reg 118. Blood leak sensor test + U08 fpgaBloodLeakUARTControl; ///< Reg 119. Blood leak sensor UART control + U08 fpgaBloodLeakFIFOTx; ///< Reg 120. Blood leak sensor FIFO transmit control } FPGA_ACTUATORS_T; #pragma pack(pop) @@ -594,6 +608,478 @@ /*********************************************************************//** * @brief + * The setFPGACD1Reset function resets the FPGA Conductivity + * Sensor CD1. + * @details \b Inputs: none + * @details \b Outputs: fpgaActuatorSetPoints.fpgaConSensTD12Control + * @param none + * @return none + *************************************************************************/ +void setFPGACD1Reset( void ) +{ + fpgaActuatorSetPoints.fpgaConSensTD12Control |= FPGA_CD1_RESET_BIT; +} + +/*********************************************************************//** + * @brief + * The clearFPGACD1Reset function clears the reset of FPGA Conductivity + * Sensor CD1. + * @details \b Inputs: none + * @details \b Outputs: fpgaActuatorSetPoints.fpgaConSensTD12Control + * @param none + * @return none + *************************************************************************/ +void clearFPGACD1Reset( void ) +{ + fpgaActuatorSetPoints.fpgaConSensTD12Control &= ~FPGA_CD1_RESET_BIT; +} + +/*********************************************************************//** + * @brief + * The setFPGACD1InitEnable function enables the FPGA Conductivity + * Sensor CD1 initialzation procedure. + * @details \b Inputs: none + * @details \b Outputs: fpgaActuatorSetPoints.fpgaConSensTD12Control + * @param none + * @return none + *************************************************************************/ +void setFPGACD1InitEnable( void ) +{ + fpgaActuatorSetPoints.fpgaConSensTD12Control |= FPGA_CD1_INIT_ENABLE_BIT; +} + +/*********************************************************************//** + * @brief + * The clearFPGACD1InitEnable function clears the init process of FPGA Conductivity + * Sensor CD1. + * @details \b Inputs: none + * @details \b Outputs: fpgaActuatorSetPoints.fpgaConSensTD12Control + * @param none + * @return none + *************************************************************************/ +void clearFPGACD1InitEnable( void ) +{ + fpgaActuatorSetPoints.fpgaConSensTD12Control &= ~FPGA_CD1_INIT_ENABLE_BIT; +} + +/*********************************************************************//** + * @brief + * The setFPGACD1WriteEnable function enables the FPGA Conductivity + * Sensor CD1 write transaction. + * @details \b Inputs: none + * @details \b Outputs: fpgaActuatorSetPoints.fpgaConSensTD12Control + * @param none + * @warning: The address (setFPGACD12Address) and data (setFPGACD12Data) register + * must be populated before invoking this write enable function to initiate + * write transaction with the sensor. + * @return none + *************************************************************************/ +void setFPGACD1WriteEnable( void ) +{ + fpgaActuatorSetPoints.fpgaConSensTD12Control |= FPGA_CD1_WR_ENABLE_BIT; +} + +/*********************************************************************//** + * @brief + * The clearFPGACD1WriteEnable function clears the write enable of FPGA Conductivity + * Sensor CD1. + * @details \b Inputs: none + * @details \b Outputs: fpgaActuatorSetPoints.fpgaConSensTD12Control + * @param none + * @return none + *************************************************************************/ +void clearFPGACD1WriteEnable( void ) +{ + fpgaActuatorSetPoints.fpgaConSensTD12Control &= ~FPGA_CD1_WR_ENABLE_BIT; +} + +/*********************************************************************//** + * @brief + * The setFPGACD1ReadEnable function enables the FPGA Conductivity + * Sensor CD1 read transaction. + * @details \b Inputs: none + * @details \b Outputs: fpgaActuatorSetPoints.fpgaConSensTD12Control + * @param none + * @warning: The address (setFPGACD12Address) register must be populated + * before invoking this read enable function to initiate read transaction + * with the sensor. + * @return none + *************************************************************************/ +void setFPGACD1ReadEnable( void ) +{ + fpgaActuatorSetPoints.fpgaConSensTD12Control |= FPGA_CD1_RD_ENABLE_BIT; +} + +/*********************************************************************//** + * @brief + * The clearFPGACD1ReadEnable function clears the read enable of FPGA Conductivity + * Sensor CD1. + * @details \b Inputs: none + * @details \b Outputs: fpgaActuatorSetPoints.fpgaConSensTD12Control + * @param none + * @return none + *************************************************************************/ +void clearFPGACD1ReadEnable( void ) +{ + fpgaActuatorSetPoints.fpgaConSensTD12Control &= ~FPGA_CD1_RD_ENABLE_BIT; +} + +/*********************************************************************//** + * @brief + * The setFPGACD2Reset function resets the FPGA Conductivity + * Sensor CD2. + * @details \b Inputs: none + * @details \b Outputs: fpgaActuatorSetPoints.fpgaConSensTD12Control + * @param none + * @return none + *************************************************************************/ +void setFPGACD2Reset( void ) +{ + fpgaActuatorSetPoints.fpgaConSensTD12Control |= FPGA_CD2_RESET_BIT; +} + +/*********************************************************************//** + * @brief + * The clearFPGACD2Reset function clears the reset of FPGA Conductivity + * Sensor CD2. + * @details \b Inputs: none + * @details \b Outputs: fpgaActuatorSetPoints.fpgaConSensTD12Control + * @param none + * @return none + *************************************************************************/ +void clearFPGACD2Reset( void ) +{ + fpgaActuatorSetPoints.fpgaConSensTD12Control &= ~FPGA_CD2_RESET_BIT; +} + +/*********************************************************************//** + * @brief + * The setFPGACD2InitEnable function enables the FPGA Conductivity + * Sensor CD2 initialzation procedure. + * @details \b Inputs: none + * @details \b Outputs: fpgaActuatorSetPoints.fpgaConSensTD12Control + * @param none + * @return none + *************************************************************************/ +void setFPGACD2InitEnable( void ) +{ + fpgaActuatorSetPoints.fpgaConSensTD12Control |= FPGA_CD2_INIT_ENABLE_BIT; +} + +/*********************************************************************//** + * @brief + * The clearFPGACD2InitEnable function clears the init process of FPGA Conductivity + * Sensor CD2. + * @details \b Inputs: none + * @details \b Outputs: fpgaActuatorSetPoints.fpgaConSensTD12Control + * @param none + * @return none + *************************************************************************/ +void clearFPGACD2InitEnable( void ) +{ + fpgaActuatorSetPoints.fpgaConSensTD12Control &= ~FPGA_CD2_INIT_ENABLE_BIT; +} + +/*********************************************************************//** + * @brief + * The setFPGACD2WriteEnable function enables the FPGA Conductivity + * Sensor CD2 write transaction. + * @details \b Inputs: none + * @details \b Outputs: fpgaActuatorSetPoints.fpgaConSensTD12Control + * @param none + * @warning: The address (setFPGACD12Address) and data (setFPGACD12Data) register + * must be populated before invoking this write enable function to initiate + * write transaction with the sensor. + * @return none + *************************************************************************/ +void setFPGACD2WriteEnable( void ) +{ + fpgaActuatorSetPoints.fpgaConSensTD12Control |= FPGA_CD2_WR_ENABLE_BIT; +} + +/*********************************************************************//** + * @brief + * The clearFPGACD2WriteEnable function clears the write enable of FPGA Conductivity + * Sensor CD2. + * @details \b Inputs: none + * @details \b Outputs: fpgaActuatorSetPoints.fpgaConSensTD12Control + * @param none + * @return none + *************************************************************************/ +void clearFPGACD2WriteEnable( void ) +{ + fpgaActuatorSetPoints.fpgaConSensTD12Control &= ~FPGA_CD2_WR_ENABLE_BIT; +} + +/*********************************************************************//** + * @brief + * The setFPGACD2ReadEnable function enables the FPGA Conductivity + * Sensor CD2 read transaction. + * @details \b Inputs: none + * @details \b Outputs: fpgaActuatorSetPoints.fpgaConSensTD12Control + * @param none + * @warning: The address (setFPGACD12Address) register must be populated + * before invoking this read enable function to initiate read transaction + * with the sensor. + * @return none + *************************************************************************/ +void setFPGACD2ReadEnable( void ) +{ + fpgaActuatorSetPoints.fpgaConSensTD12Control |= FPGA_CD2_RD_ENABLE_BIT; +} + +/*********************************************************************//** + * @brief + * The clearFPGACD2ReadEnable function clears the read enable of FPGA Conductivity + * Sensor CD2. + * @details \b Inputs: none + * @details \b Outputs: fpgaActuatorSetPoints.fpgaConSensTD12Control + * @param none + * @return none + *************************************************************************/ +void clearFPGACD2ReadEnable( void ) +{ + fpgaActuatorSetPoints.fpgaConSensTD12Control &= ~FPGA_CD2_RD_ENABLE_BIT; +} + +/*********************************************************************//** + * @brief + * The setFPGCD3Reset function resets the FPGA Conductivity + * Sensor CD3. + * @details \b Inputs: none + * @details \b Outputs: fpgaActuatorSetPoints.fpgaConSensTD34Control + * @param none + * @return none + *************************************************************************/ +void setFPGACD3Reset( void ) +{ + fpgaActuatorSetPoints.fpgaConSensTD34Control |= FPGA_CD3_RESET_BIT; +} + +/*********************************************************************//** + * @brief + * The clearFPGACD3Reset function clears the reset of FPGA Conductivity + * Sensor CD3. + * @details \b Inputs: none + * @details \b Outputs: fpgaActuatorSetPoints.fpgaConSensTD34Control + * @param none + * @return none + *************************************************************************/ +void clearFPGACD3Reset( void ) +{ + fpgaActuatorSetPoints.fpgaConSensTD34Control &= ~FPGA_CD3_RESET_BIT; +} + +/*********************************************************************//** + * @brief + * The setFPGACD3InitEnable function enables the FPGA Conductivity + * Sensor CD3 initialzation procedure. + * @details \b Inputs: none + * @details \b Outputs: fpgaActuatorSetPoints.fpgaConSensTD34Control + * @param none + * @return none + *************************************************************************/ +void setFPGACD3InitEnable( void ) +{ + fpgaActuatorSetPoints.fpgaConSensTD34Control |= FPGA_CD3_INIT_ENABLE_BIT; +} + +/*********************************************************************//** + * @brief + * The clearFPGACD3InitEnable function clears the init process of FPGA Conductivity + * Sensor CD3. + * @details \b Inputs: none + * @details \b Outputs: fpgaActuatorSetPoints.fpgaConSensTD34Control + * @param none + * @return none + *************************************************************************/ +void clearFPGACD3InitEnable( void ) +{ + fpgaActuatorSetPoints.fpgaConSensTD34Control &= ~FPGA_CD3_INIT_ENABLE_BIT; +} + +/*********************************************************************//** + * @brief + * The setFPGACD3WriteEnable function enables the FPGA Conductivity + * Sensor CD3 write transaction. + * @details \b Inputs: none + * @details \b Outputs: fpgaActuatorSetPoints.fpgaConSensTD34Control + * @param none + * @warning: The address (setFPGACD12Address) and data (setFPGACD12Data) register + * must be populated before invoking this write enable function to initiate + * write transaction with the sensor. + * @return none + *************************************************************************/ +void setFPGACD3WriteEnable( void ) +{ + fpgaActuatorSetPoints.fpgaConSensTD34Control |= FPGA_CD3_WR_ENABLE_BIT; +} + +/*********************************************************************//** + * @brief + * The clearFPGACD3WriteEnable function clears the write enable of FPGA Conductivity + * Sensor CD3. + * @details \b Inputs: none + * @details \b Outputs: fpgaActuatorSetPoints.fpgaConSensTD34Control + * @param none + * @return none + *************************************************************************/ +void clearFPGACD3WriteEnable( void ) +{ + fpgaActuatorSetPoints.fpgaConSensTD34Control &= ~FPGA_CD3_WR_ENABLE_BIT; +} + +/*********************************************************************//** + * @brief + * The setFPGACD3ReadEnable function enables the FPGA Conductivity + * Sensor CD3 read transaction. + * @details \b Inputs: none + * @details \b Outputs: fpgaActuatorSetPoints.fpgaConSensTD34Control + * @param none + * @warning: The address (setFPGACD12Address) register must be populated + * before invoking this read enable function to initiate read transaction + * with the sensor. + * @return none + *************************************************************************/ +void setFPGACD3ReadEnable( void ) +{ + fpgaActuatorSetPoints.fpgaConSensTD34Control |= FPGA_CD3_RD_ENABLE_BIT; +} + +/*********************************************************************//** + * @brief + * The clearFPGACD3ReadEnable function clears the read enable of FPGA Conductivity + * Sensor CD3. + * @details \b Inputs: none + * @details \b Outputs: fpgaActuatorSetPoints.fpgaConSensTD34Control + * @param none + * @return none + *************************************************************************/ +void clearFPGACD3ReadEnable( void ) +{ + fpgaActuatorSetPoints.fpgaConSensTD34Control &= ~FPGA_CD3_RD_ENABLE_BIT; +} + +/*********************************************************************//** + * @brief + * The setFPGACD4Reset function resets the FPGA Conductivity + * Sensor CD4. + * @details \b Inputs: none + * @details \b Outputs: fpgaActuatorSetPoints.fpgaConSensTD34Control + * @param none + * @return none + *************************************************************************/ +void setFPGACD4Reset( void ) +{ + fpgaActuatorSetPoints.fpgaConSensTD34Control |= FPGA_CD4_RESET_BIT; +} + +/*********************************************************************//** + * @brief + * The clearFPGACD4Reset function clears the reset of FPGA Conductivity + * Sensor CD4. + * @details \b Inputs: none + * @details \b Outputs: fpgaActuatorSetPoints.fpgaConSensTD34Control + * @param none + * @return none + *************************************************************************/ +void clearFPGACD4Reset( void ) +{ + fpgaActuatorSetPoints.fpgaConSensTD34Control &= ~FPGA_CD4_RESET_BIT; +} + +/*********************************************************************//** + * @brief + * The setFPGACD4InitEnable function enables the FPGA Conductivity + * Sensor CD4 initialzation procedure. + * @details \b Inputs: none + * @details \b Outputs: fpgaActuatorSetPoints.fpgaConSensTD34Control + * @param none + * @return none + *************************************************************************/ +void setFPGACD4InitEnable( void ) +{ + fpgaActuatorSetPoints.fpgaConSensTD34Control |= FPGA_CD4_INIT_ENABLE_BIT; +} + +/*********************************************************************//** + * @brief + * The clearFPGACD4InitEnable function clears the init process of FPGA Conductivity + * Sensor CD4. + * @details \b Inputs: none + * @details \b Outputs: fpgaActuatorSetPoints.fpgaConSensTD34Control + * @param none + * @return none + *************************************************************************/ +void clearFPGACD4InitEnable( void ) +{ + fpgaActuatorSetPoints.fpgaConSensTD34Control &= ~FPGA_CD4_INIT_ENABLE_BIT; +} + +/*********************************************************************//** + * @brief + * The setFPGACD4WriteEnable function enables the FPGA Conductivity + * Sensor CD4 write transaction. + * @details \b Inputs: none + * @details \b Outputs: fpgaActuatorSetPoints.fpgaConSensTD34Control + * @param none + * @warning: The address (setFPGACD12Address) and data (setFPGACD12Data) register + * must be populated before invoking this write enable function to initiate + * write transaction with the sensor. + * @return none + *************************************************************************/ +void setFPGACD4WriteEnable( void ) +{ + fpgaActuatorSetPoints.fpgaConSensTD34Control |= FPGA_CD4_WR_ENABLE_BIT; +} + +/*********************************************************************//** + * @brief + * The clearFPGACD4WriteEnable function clears the write enable of FPGA Conductivity + * Sensor CD4. + * @details \b Inputs: none + * @details \b Outputs: fpgaActuatorSetPoints.fpgaConSensTD34Control + * @param none + * @return none + *************************************************************************/ +void clearFPGACD4WriteEnable( void ) +{ + fpgaActuatorSetPoints.fpgaConSensTD34Control &= ~FPGA_CD4_WR_ENABLE_BIT; +} + +/*********************************************************************//** + * @brief + * The setFPGACD4ReadEnable function enables the FPGA Conductivity + * Sensor CD4 read transaction. + * @details \b Inputs: none + * @details \b Outputs: fpgaActuatorSetPoints.fpgaConSensTD34Control + * @param none + * @warning: The address (setFPGACD12Address) register must be populated + * before invoking this read enable function to initiate read transaction + * with the sensor. + * @return none + *************************************************************************/ +void setFPGACD4ReadEnable( void ) +{ + fpgaActuatorSetPoints.fpgaConSensTD34Control |= FPGA_CD4_RD_ENABLE_BIT; +} + +/*********************************************************************//** + * @brief + * The clearFPGACD4ReadEnable function clears the read enable of FPGA Conductivity + * Sensor CD4. + * @details \b Inputs: none + * @details \b Outputs: fpgaActuatorSetPoints.fpgaConSensTD34Control + * @param none + * @return none + *************************************************************************/ +void clearFPGACD4ReadEnable( void ) +{ + fpgaActuatorSetPoints.fpgaConSensTD34Control &= ~FPGA_CD4_RD_ENABLE_BIT; +} + +/*********************************************************************//** + * @brief * The setFpgaCD12Control function sets the FPGA Conductivity * Sensor control register for CD1&2. * bit 7: Enables TD2 read transaction (1), address needed @@ -673,7 +1159,7 @@ * @param data The conductivity sensor CD12 Data * @return none *************************************************************************/ -void setFPGACD12Data( U16 data ) +void setFPGACD12Data( U32 data ) { fpgaActuatorSetPoints.fpgaConSensTD12_Data_In = data; } @@ -687,7 +1173,7 @@ * @param data The conductivity sensor CD34 Data * @return none *************************************************************************/ -void setFPGACD34Data( U16 data ) +void setFPGACD34Data( U32 data ) { fpgaActuatorSetPoints.fpgaConSensTD34_Data_In = data; } @@ -857,7 +1343,7 @@ * @details \b Outputs: none * @return Latest hydraulics outlet pressure sensor raw pressure data *************************************************************************/ -U32 getFPGAPnRawPressure( void ) +U16 getFPGAPnRawPressure( void ) { return fpgaSensorReadings.fpgaPnPressure; } @@ -870,7 +1356,7 @@ * @details \b Outputs: none * @return Latest hydraulics outlet pressure sensor raw temperature data *************************************************************************/ -U32 getFPGAPnRawTemperature( void ) +U16 getFPGAPnRawTemperature( void ) { return fpgaSensorReadings.fpgaPnTemp; } @@ -908,7 +1394,7 @@ * @details \b Outputs: none * @return Latest Bibag pressure sensor raw pressure data *************************************************************************/ -U32 getFPGAPCbRawPressure( void ) +U16 getFPGAPCbRawPressure( void ) { return fpgaSensorReadings.fpgaPCbPressure; } @@ -921,7 +1407,7 @@ * @details \b Outputs: none * @return Latest Bibag pressure sensor raw temperature data *************************************************************************/ -U32 getFPGAPCbRawTemperature( void ) +U16 getFPGAPCbRawTemperature( void ) { return fpgaSensorReadings.fpgaPCbTemp; } @@ -959,7 +1445,7 @@ * @details \b Outputs: none * @return Latest spent dialysate pressure sensor raw pressure data *************************************************************************/ -U32 getFPGAPDsRawPressure( void ) +U16 getFPGAPDsRawPressure( void ) { return fpgaSensorReadings.fpgaPDsPressure; } @@ -972,7 +1458,7 @@ * @details \b Outputs: none * @return Latest spent dialysate pressure sensor raw temperature data *************************************************************************/ -U32 getFPGAPDsRawTemperature( void ) +U16 getFPGAPDsRawTemperature( void ) { return fpgaSensorReadings.fpgaPDsTemp; } @@ -1010,7 +1496,7 @@ * @details \b Outputs: none * @return Latest fresh dialysate pressure sensor raw pressure data *************************************************************************/ -U32 getFPGAPDfRawPressure( void ) +U16 getFPGAPDfRawPressure( void ) { return fpgaSensorReadings.fpgaPDfPressure; } @@ -1023,7 +1509,7 @@ * @details \b Outputs: none * @return Latest fresh dialysate pressure sensor raw temperature data *************************************************************************/ -U32 getFPGAPDfRawTemperature( void ) +U16 getFPGAPDfRawTemperature( void ) { return fpgaSensorReadings.fpgaPDfTemp; } @@ -1061,7 +1547,7 @@ * @details \b Outputs: none * @return Latest transmembrane pressure sensor raw pressure data *************************************************************************/ -U32 getFPGAPtmRawPressure( void ) +U16 getFPGAPtmRawPressure( void ) { return fpgaSensorReadings.fpgaPtmPressure; } @@ -1074,7 +1560,7 @@ * @details \b Outputs: none * @return Latest transmembrane pressure sensor raw temperature data *************************************************************************/ -U32 getFPGAPtmRawTemperature( void ) +U16 getFPGAPtmRawTemperature( void ) { return fpgaSensorReadings.fpgaPtmTemp; } @@ -1134,7 +1620,7 @@ * @details \b Outputs: none * @return Latest CD1 conductivity sensor register data value *************************************************************************/ -U16 getFPGACD1Data( void ) +U32 getFPGACD1Data( void ) { return fpgaSensorReadings.fpgaCD1DataOut; } @@ -1194,7 +1680,7 @@ * @details \b Outputs: none * @return Latest CD2 conductivity sensor register data value *************************************************************************/ -U16 getFPGACD2Data( void ) +U32 getFPGACD2Data( void ) { return fpgaSensorReadings.fpgaCD2DataOut; } @@ -1254,7 +1740,7 @@ * @details \b Outputs: none * @return Latest CD3 conductivity sensor register data value *************************************************************************/ -U16 getFPGACD3Data( void ) +U32 getFPGACD3Data( void ) { return fpgaSensorReadings.fpgaCD3DataOut; } @@ -1314,7 +1800,7 @@ * @details \b Outputs: none * @return Latest CD4 conductivity sensor register data value *************************************************************************/ -U16 getFPGACD4Data( void ) +U32 getFPGACD4Data( void ) { return fpgaSensorReadings.fpgaCD4DataOut; } Index: firmware/App/Services/FpgaDD.h =================================================================== diff -u -rf7c714a1a09b10d85a8b013712532d37b4d7b97a -r8d390efa9309c8a0f430ba4652528fdbdbb6e2b8 --- firmware/App/Services/FpgaDD.h (.../FpgaDD.h) (revision f7c714a1a09b10d85a8b013712532d37b4d7b97a) +++ firmware/App/Services/FpgaDD.h (.../FpgaDD.h) (revision 8d390efa9309c8a0f430ba4652528fdbdbb6e2b8) @@ -56,32 +56,68 @@ void setFPGACD34Control( U08 control ); void setFPGACD12Address( U16 address ); void setFPGACD34Address( U16 address ); -void setFPGACD12Data( U16 data ); -void setFPGACD34Data( U16 data ); +void setFPGACD12Data( U32 data ); +void setFPGACD34Data( U32 data ); +void setFPGACD1Reset( void ); +void clearFPGACD1Reset( void ); +void setFPGACD1InitEnable( void ); +void clearFPGACD1InitEnable( void ); +void setFPGACD1WriteEnable( void ); +void clearFPGACD1WriteEnable( void ); +void setFPGACD1ReadEnable( void ); +void clearFPGACD1ReadEnable( void ); + +void setFPGACD2Reset( void ); +void clearFPGACD2Reset( void ); +void setFPGACD2InitEnable( void ); +void clearFPGACD2InitEnable( void ); +void setFPGACD2WriteEnable( void ); +void clearFPGACD2WriteEnable( void ); +void setFPGACD2ReadEnable( void ); +void clearFPGACD2ReadEnable( void ); + +void setFPGACD3Reset( void ); +void clearFPGACD3Reset( void ); +void setFPGACD3InitEnable( void ); +void clearFPGACD3InitEnable( void ); +void setFPGACD3WriteEnable( void ); +void clearFPGACD3WriteEnable( void ); +void setFPGACD3ReadEnable( void ); +void clearFPGACD3ReadEnable( void ); + +void setFPGACD4Reset( void ); +void clearFPGACD4Reset( void ); +void setFPGACD4InitEnable( void ); +void clearFPGACD4InitEnable( void ); +void setFPGACD4WriteEnable( void ); +void clearFPGACD4WriteEnable( void ); +void setFPGACD4ReadEnable( void ); +void clearFPGACD4ReadEnable( void ); + U08 getFPGACD1ReadCount( void ); U08 getFPGACD1ErrorCount( void ); U16 getFPGACD1( void ); U16 getFPGACD1Temp( void ); -U16 getFPGACD1Data( void ); +U32 getFPGACD1Data( void ); U08 getFPGACD2ReadCount( void ); U08 getFPGACD2ErrorCount( void ); U16 getFPGACD2( void ); U16 getFPGACD2Temp( void ); -U16 getFPGACD2Data( void ); +U32 getFPGACD2Data( void ); U08 getFPGACD3ReadCount( void ); U08 getFPGACD3ErrorCount( void ); U16 getFPGACD3( void ); U16 getFPGACD3Temp( void ); -U16 getFPGACD3Data( void ); +U32 getFPGACD3Data( void ); U08 getFPGACD4ReadCount( void ); U08 getFPGACD4ErrorCount( void ); U16 getFPGACD4( void ); U16 getFPGACD4Temp( void ); -U16 getFPGACD4Data( void ); +U32 getFPGACD4Data( void ); // Pumps ( Concentrate and Gear pumps ) void setFPGAAcidPumpSetStepSpeed( U16 stepSpeed ); @@ -98,28 +134,28 @@ //Pressure sensor U08 getFPGAPnReadCount( void ); U08 getFPGAPnErrorCount( void ); -U32 getFPGAPnRawPressure( void ); -U32 getFPGAPnRawTemperature( void ); +U16 getFPGAPnRawPressure( void ); +U16 getFPGAPnRawTemperature( void ); U08 getFPGAPCbReadCount( void ); U08 getFPGAPCbErrorCount( void ); -U32 getFPGAPCbRawPressure( void ); -U32 getFPGAPCbRawTemperature( void ); +U16 getFPGAPCbRawPressure( void ); +U16 getFPGAPCbRawTemperature( void ); U08 getFPGAPDsReadCount( void ); U08 getFPGAPDsErrorCount( void ); -U32 getFPGAPDsRawPressure( void ); -U32 getFPGAPDsRawTemperature( void ); +U16 getFPGAPDsRawPressure( void ); +U16 getFPGAPDsRawTemperature( void ); U08 getFPGAPDfReadCount( void ); U08 getFPGAPDfErrorCount( void ); -U32 getFPGAPDfRawPressure( void ); -U32 getFPGAPDfRawTemperature( void ); +U16 getFPGAPDfRawPressure( void ); +U16 getFPGAPDfRawTemperature( void ); U08 getFPGAPtmReadCount( void ); U08 getFPGAPtmErrorCount( void ); -U32 getFPGAPtmRawPressure( void ); -U32 getFPGAPtmRawTemperature( void ); +U16 getFPGAPtmRawPressure( void ); +U16 getFPGAPtmRawTemperature( void ); //Level sensor U16 getFPGALevelSensor1( void ); Index: firmware/App/Tasks/TaskPriority.c =================================================================== diff -u -r26ee1d67dca19aac1850077cbd41c05498cf059d -r8d390efa9309c8a0f430ba4652528fdbdbb6e2b8 --- firmware/App/Tasks/TaskPriority.c (.../TaskPriority.c) (revision 26ee1d67dca19aac1850077cbd41c05498cf059d) +++ firmware/App/Tasks/TaskPriority.c (.../TaskPriority.c) (revision 8d390efa9309c8a0f430ba4652528fdbdbb6e2b8) @@ -15,14 +15,13 @@ * ***************************************************************************/ +#include #include "gio.h" //#include "ConductivitySensors.h" -//#include "DrainPump.h" #include "FPGA.h" //#include "Heaters.h" #include "InternalADC.h" -//#include "Pressures.h" #include "TaskPriority.h" //#include "TemperatureSensors.h" #include "Valves.h" @@ -62,7 +61,7 @@ //execInternalADC(); // Monitor pressures - //execPressures(); + execPressureSensor(); // Temperature sensors read //execTemperatureSensors(); Index: firmware/source/sys_main.c =================================================================== diff -u -rd741f651b63edc7695b2be2178c9e5c44aaed1f3 -r8d390efa9309c8a0f430ba4652528fdbdbb6e2b8 --- firmware/source/sys_main.c (.../sys_main.c) (revision d741f651b63edc7695b2be2178c9e5c44aaed1f3) +++ firmware/source/sys_main.c (.../sys_main.c) (revision 8d390efa9309c8a0f430ba4652528fdbdbb6e2b8) @@ -67,6 +67,7 @@ #include "Interrupts.h" #include "MsgQueues.h" #include "OperationModes.h" +#include "Pressure.h" #include "SafetyShutdown.h" #include "SystemCommDD.h" #include "TaskBG.h" @@ -155,6 +156,7 @@ initWatchdogMgmt(); initInterrupts(); initFPGADD(); + initPressure(); initValves(); initCommBuffers(); initMsgQueues();