Index: Common.h =================================================================== diff -u -r2f7217131cfe6d5c53a7df934a6f202b00177811 -r59871c9964559b5137781af9c2eeed6bab18ef73 --- Common.h (.../Common.h) (revision 2f7217131cfe6d5c53a7df934a6f202b00177811) +++ Common.h (.../Common.h) (revision 59871c9964559b5137781af9c2eeed6bab18ef73) @@ -1,14 +1,14 @@ /************************************************************************** * -* Copyright (c) 2020-2022 Diality Inc. - All Rights Reserved. +* Copyright (c) 2020-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 Common.h * -* @author (last) Dara Navaei -* @date (last) 03-Aug-2022 +* @author (last) Sean Nash +* @date (last) 09-Aug-2023 * * @author (original) Sean * @date (original) 04-Feb-2020 @@ -34,7 +34,7 @@ typedef float F32; ///< 32-bit floating point type typedef double F64; ///< 64-bit floating point type -typedef unsigned long long U64; ///< 64-bit unsigned integer type +typedef long long S64; ///< 64-bit signed integer type typedef unsigned int U32; ///< 32-bit unsigned integer type typedef int S32; ///< 32-bit signed integer type typedef unsigned short U16; ///< 16-bit unsigned integer type @@ -106,24 +106,65 @@ #define MAX_SINGLE_DIGIT_DECIMAL 9U ///< Maximum value for a decimal nibble #define SHIFT_BITS_BY_4 4U ///< Number of bits to shift in order to shift a nibble #define SHIFT_BITS_BY_31 31 ///< Shift bits by 31 +#define SHIFT_BITS_BY_7 7 ///< Shift bits by 7 +#define SHIFT_BITS_BY_23 23 ///< Shift bits by 23 #define FLOAT_TO_INT_ROUNDUP_OFFSET 0.5F ///< Offset to add to a floating point value for rounding rounding when converting to integer #define ML_PER_LITER 1000 ///< Number of milliliters in a liter #define MA_PER_AMP 1000 ///< Number of milliamps in an amp #define MS_PER_SECOND 1000 ///< Number of milliseconds in a second -#define US_PER_SECOND 1000000 ///< Number of microseconds in a millisecond +#define US_PER_SECOND 1000000 ///< Number of microseconds in a second #define SEC_PER_MIN 60 ///< Number of seconds in a minute #define FRACTION_TO_PERCENT_FACTOR 100.0F ///< Percentage factor (100) #define MIN_PER_HOUR 60 ///< Number of minutes in an hour -#define PI 3.1415927F ///< PI +#define PI 3.1415927F ///< PI #define SECONDS_IN_A_DAY 86400 ///< Number of seconds in a day #define BITS_8_FULL_SCALE 256 ///< Full scale range for 8 bit ADC or DAC #define BITS_10_FULL_SCALE 1024 ///< Full scale range for 10 bit ADC or DAC +#define BITS_11_FULL_SCALE 2048 ///< Full scale range for 11 bit ADC or DAC #define BITS_12_FULL_SCALE 4096 ///< Full scale range for 12 bit ADC or DAC #define BITS_14_FULL_SCALE 16384 ///< Full scale range for 14 bit ADC or DAC #define BITS_16_FULL_SCALE 65536 ///< Full scale range for 16 bit ADC or DAC #define BITS_24_FULL_SCALE 16777216 ///< Full scale range for 24 bit ADC or DAC #define HALF 0.5F ///< Half +#define ASCII_CODE_LETTER_A 0x41 ///< ASCII code in hex for letter A. +#define ASCII_CODE_LETTER_B 0x42 ///< ASCII code in hex for letter B. +#define ASCII_CODE_LETTER_C 0x43 ///< ASCII code in hex for letter C. +#define ASCII_CODE_LETTER_D 0x44 ///< ASCII code in hex for letter D. +#define ASCII_CODE_LETTER_E 0x45 ///< ASCII code in hex for letter E. +#define ASCII_CODE_LETTER_F 0x46 ///< ASCII code in hex for letter F. +#define ASCII_CODE_LETTER_G 0x47 ///< ASCII code in hex for letter G. +#define ASCII_CODE_LETTER_H 0x48 ///< ASCII code in hex for letter H. +#define ASCII_CODE_LETTER_I 0x49 ///< ASCII code in hex for letter I. +#define ASCII_CODE_LETTER_J 0x4A ///< ASCII code in hex for letter J. +#define ASCII_CODE_LETTER_K 0x4B ///< ASCII code in hex for letter K. +#define ASCII_CODE_LETTER_L 0x4C ///< ASCII code in hex for letter L. +#define ASCII_CODE_LETTER_M 0x4D ///< ASCII code in hex for letter M. +#define ASCII_CODE_LETTER_N 0x4E ///< ASCII code in hex for letter N. +#define ASCII_CODE_LETTER_O 0x4F ///< ASCII code in hex for letter O. +#define ASCII_CODE_LETTER_P 0x50 ///< ASCII code in hex for letter P. +#define ASCII_CODE_LETTER_Q 0x51 ///< ASCII code in hex for letter Q. +#define ASCII_CODE_LETTER_R 0x52 ///< ASCII code in hex for letter R. +#define ASCII_CODE_LETTER_S 0x53 ///< ASCII code in hex for letter S. +#define ASCII_CODE_LETTER_T 0x54 ///< ASCII code in hex for letter T. +#define ASCII_CODE_LETTER_U 0x55 ///< ASCII code in hex for letter U. +#define ASCII_CODE_LETTER_V 0x56 ///< ASCII code in hex for letter V. +#define ASCII_CODE_LETTER_W 0x57 ///< ASCII code in hex for letter W. +#define ASCII_CODE_LETTER_X 0x58 ///< ASCII code in hex for letter X. +#define ASCII_CODE_LETTER_Y 0x59 ///< ASCII code in hex for letter Y. +#define ASCII_CODE_LETTER_Z 0x5A ///< ASCII code in hex for letter Z. + +#define ASCII_CODE_NUMBER_ZERO 0x30 ///< ASCII code in hex for number zero. +#define ASCII_CODE_NUMBER_ONE 0x31 ///< ASCII code in hex for number one. +#define ASCII_CODE_NUMBER_TWO 0x32 ///< ASCII code in hex for number two. +#define ASCII_CODE_NUMBER_THREE 0x33 ///< ASCII code in hex for number three. +#define ASCII_CODE_NUMBER_FOUR 0x34 ///< ASCII code in hex for number four. +#define ASCII_CODE_NUMBER_FIVE 0x35 ///< ASCII code in hex for number five. +#define ASCII_CODE_NUMBER_SIX 0x36 ///< ASCII code in hex for number six. +#define ASCII_CODE_NUMBER_SEVEN 0x37 ///< ASCII code in hex for number seven. +#define ASCII_CODE_NUMBER_EIGHT 0x38 ///< ASCII code in hex for number eight. +#define ASCII_CODE_NUMBER_NINE 0x39 ///< ASCII code in hex for number nine. + // **** Common Macros **** #define FLOAT_TO_INT_WITH_ROUND(f) ((f) < 0.0F ? (S32)((f) - FLOAT_TO_INT_ROUNDUP_OFFSET) : (S32)((f) + FLOAT_TO_INT_ROUNDUP_OFFSET)) ///< Macro converts a floating point value to an integer @@ -168,7 +209,7 @@ dat1.data.uInt.data = (U32)(d1); \ dat2.dataType = ALARM_DATA_TYPE_U32; \ dat2.data.uInt.data = (U32)(d2); \ - activateAlarm2Data( a, dat1, dat2 ); \ + activateAlarm2Data( a, dat1, dat2, FALSE ); \ } /// Macro to set a specific alarm with 2 pieces of floating point alarm data. @@ -179,7 +220,7 @@ dat1.data.flt.data = (F32)(d1); \ dat2.dataType = ALARM_DATA_TYPE_F32; \ dat2.data.flt.data = (F32)(d2); \ - activateAlarm2Data( a, dat1, dat2 ); \ + activateAlarm2Data( a, dat1, dat2, FALSE ); \ } /// Record structure for unsigned integer event data. @@ -255,9 +296,18 @@ sendEvent( e, dat1, dat2 ); \ } -// **** Common Broadcast Data **** +// **** Common Data **** -#pragma pack(push,1) +#ifndef _RELEASE_ +/// Hardware configuration +typedef enum Hardware_Configurations +{ + HW_CONFIG_BETA = 1, ///< Hardware configuration beta + HW_CONFIG_DVT, ///< Hardware configuration DVT + NUM_OF_HW_CONFIGS, ///< Number of hardware configurations +} HARDWARE_CONFIG_T; +#endif + /// Heaters data structure. typedef struct { @@ -271,9 +321,12 @@ F32 primaryEfficiency; ///< Primary heater efficiency F32 primaryCalcTargetTemp; ///< Primary heater calculated target temperature F32 trimmerCalcCurrentTemp; ///< Trimmer heater calculated current temperature + U32 trimmerUseLastDC; ///< Trimmer heater use last duty cycle + F32 previsouFlow; ///< Trimmer heater previous flow L/min + U32 controlCounter; ///< Trimmer heater control count } HEATERS_DATA_T; -/// Temperature sensors data. +/// Temperature sensors data structure. typedef struct { F32 inletPrimaryHeater; ///< Inlet primary heater temperature sensor @@ -294,9 +347,24 @@ F32 loadCellA2B2; ///< Load cell A2/B2 temperature sensor F32 internalTHDORTD; ///< THDo RTD channel temperature sensor F32 internalTDIRTD; ///< TDI RTD channel temperature sensor + F32 interalTHDRTD; ///< THd RTD channel temperature sensor F32 internalCondSnsrTemp; ///< Conductivity Sensor internal temperature sensor + F32 baroTempSensor; ///< Barometric temperature sensor + F32 dialysateInletMovingAvg; ///< Dialysate inlet moving average + F32 redundantOutletMovingAvg; ///< Redundant outlet moving average } TEMPERATURE_SENSORS_DATA_T; +/// Dialysate heating parameters +typedef struct +{ + F32 trimmerTargetTemperature; ///< Trimmer Target temperature. + U32 timeReservoirCycleMS; ///< Reservoir cycle time in milliseconds. + F32 timeReservoirFillMS; ///< Reservoir fill time in milliseconds. + U32 timeReservoirWait2SwitchMS; ///< Wait to switch active reservoir time in milliseconds. + F32 dialysateFlowLPM; ///< Dialysate flow rate in L/min. + BOOL usePriTargetTempEquation; ///< Use primary heater target temperature estimation equation or not. +} DG_CMD_DIALYSATE_HEATING_PARAMS_T; + /// Loadcell measurements struct. typedef struct { @@ -305,12 +373,103 @@ F32 loadCellB1inGram; ///< Loadcell B1 measurement in gram F32 loadCellB2inGram; ///< Loadcell B2 measurement in gram } LOAD_CELL_DATA_T; + +/// Flow meters data struct. +typedef struct +{ + F32 ROFlowRateLPM; ///< RO flow rate in L/min. + F32 ROFlowRateWithCPsLPM; ///< RO flow rate with concentrate pumps in L/min. + F32 dialysateFlowRateLPM; ///< Dialysate flow rate L/min. + F32 RORawFlowRateLPM; ///< Raw RO flow rate in L/min. + F32 dialysateRawFlowRateLPM; ///< Raw dialysate flow rate in L/min. +} FLOW_SENSORS_DATA_T; + +/// DG switch reservoirs command structure +typedef struct +{ + U32 reservoirID; ///< DG reservoir ID. + BOOL useLastTrimmerHeaterDC; ///< Use last trimmer heater duty cycle flag. +} DG_SWITCH_RSRVRS_CMD_T; + +/// DG change valve settings command structure +typedef struct +{ + U32 valveSettingCmd; ///< DG valve setting command. +} DG_VALVE_SETTING_CMD_REQUEST_T; + +/// DG fill command structure +typedef struct +{ + U32 fillToVolMl; ///< fill to volume in mL. + U32 cmd; ///< DG cmd. + F32 targetFlowRateLPM; ///< target flow rate in LPM. +} DG_FILL_CMD_T; + +/// DG start stop command structure +typedef struct +{ + BOOL start; ///< DG start stop cmd. + U32 acidType; ///< Acid type. + U32 bicarbType; ///< Bicarb type. +} DG_START_STOP_TX_CMD_REQUEST_T; + +/// DG start stop trimmer heater command structure +typedef struct +{ + BOOL start; ///< DG start stop trimmer heater. +} DG_START_STOP_TRIMMER_HEATER_CMD_T; + +typedef struct +{ + BOOL start; ///< DG start stop flush mode. +} DG_FLUSH_MODE_CMD_T; + +typedef struct +{ + BOOL start; ///< DG start stop heat disinfection mode. +} DG_HEAT_DISINFECTION_MODE_CMD_T; + +typedef struct +{ + BOOL start; ///< DG start stop chem disinfection mode. +} DG_CHEM_DISINFECTION_MODE_CMD_T; + +typedef struct +{ + U32 cmd; ///< DG sample water command. +} DG_SAMPLE_WATER_CMD_REQUEST_T; + +#pragma pack(push, 1) +/// DG usage info structure. +typedef struct +{ + F32 roWaterGenTotalL; ///< Total RO water generated in liters. (Cannot be reset) + F32 roWaterGenSinceLastServiceL; ///< RO water generated since last treatment in liters. + U32 lastBasicFlushCompleteDateEpoch; ///< Last basic flush complete date in epoch. + U32 lastChemDisStartDateEpoch; ///< Last chemical disinfect start date in epoch. + U32 lastChemDisCompleteDateEpoch; ///< Last chemical disinfect complete date in epoch. + U32 lastChemDisFlushCompleteDateEpoch; ///< Last chemical disinfect flush complete date in epoch. + U32 lastHeatDisCompleteDateEpoch; ///< Last heat disinfect complete date in epoch. + U32 lastHeatActiveCoolCompleteDateEpoch; ///< Last heat disinfect active cool complete date in epoch. + U32 lastFilterFlushCompleteDateEpoch; ///< Last filter flush complete date in epoch. + U32 lastResetTimeEpoch; ///< Last time the record was reset in epoch. + U16 crc; ///< CRC for the DG usage info structure. +} DG_USAGE_INFO_RECORD_T; + +/// DG service record structure +typedef struct +{ + U08 serviceLoc; ///< DG service location. + U32 lastServiceEpochDate; ///< DG last service date in epoch. + U32 serviceIntervalSeconds; ///< DG service interval in seconds. + U32 lastResetTimeEpoch; ///< Last time the record was reset in epoch. + U16 crc; ///< CRC for the DG service record structure. +} DG_SERVICE_RECORD_T; #pragma pack(pop) // **** VectorCAST Definitions **** #ifdef _VECTORCAST_ - #define _enable_IRQ() #define _disable_IRQ() #define _enable_FIQ()