Index: NVDataMgmt.c =================================================================== diff -u -r03eaec1ba61d804bd22664d4a2c5e033fd77a302 -rf2a92b265b295e93b57199a89d6491e195f74c56 --- NVDataMgmt.c (.../NVDataMgmt.c) (revision 03eaec1ba61d804bd22664d4a2c5e033fd77a302) +++ NVDataMgmt.c (.../NVDataMgmt.c) (revision f2a92b265b295e93b57199a89d6491e195f74c56) @@ -328,45 +328,70 @@ /// HD calibration groups structure typedef struct { - HD_PUMPS_CAL_RECORD_T pumpsCalRecord; - HD_VALVES_CAL_RECORD_T valvesCalRecord; - HD_OCCLUSION_SENSORS_CAL_RECORD_T occlusionSensorsCalRecord; - HD_FLOW_SENSORS_CAL_RECORD_T flowSensorsCalRecord; - HD_PRESSURE_SENSORS_CAL_RECORD_T pressureSensorsCalRecord; - HD_TEMP_SENSORS_CAL_RECORD_T tempSensorsCalRecord; - HD_HEPARIN_FORCE_SENSOR_CAL_RECORD_T heparinForceSensorCalRecord; + HD_PUMPS_CAL_RECORD_T pumpsCalRecord; ///< HD pumps. + HD_VALVES_CAL_RECORD_T valvesCalRecord; ///< HD valves. + HD_OCCLUSION_SENSORS_CAL_RECORD_T occlusionSensorsCalRecord; ///< HD occlusion sensors. + HD_FLOW_SENSORS_CAL_RECORD_T flowSensorsCalRecord; ///< HD flow sensors. + HD_PRESSURE_SENSORS_CAL_RECORD_T pressureSensorsCalRecord; ///< HD pressure sensors. + HD_TEMP_SENSORS_CAL_RECORD_T tempSensorsCalRecord; ///< HD temperature sensors. + HD_HEPARIN_FORCE_SENSOR_CAL_RECORD_T heparinForceSensorCalRecord; ///< HD heparin force sensor. + HD_ACCELEROMETER_SENSOR_CAL_RECORD_T accelerometerCalRecord; ///< HD accelerometer sensor. } HD_CALIBRATION_GROUPS; /// HD calibration records structure typedef struct { - //TODO fill up -} HD_CALIBRATION_GROUPS_T; + HD_CALIBRATION_GROUPS hdCalibrationGroups; ///< HD calibration groups. + U08 padding[ RECORD_PADDING_LENGTH(HD_CALIBRATION_GROUPS, MAX_EEPROM_WRITE_BUFFER_BYTES) - + RECORD_BYTE_SIZE(HD_CALIBRATION_GROUPS) ]; ///< HD calibration record padding byte array. + U16 crc; ///< CRC for the DG calibration record structure. +} HD_CALIBRATION_RECORD_T; +/// HD system group structure typedef struct { - HD_CALIBRATION_GROUPS_T hdCalibrationGroups; -} HD_CALIBRATION_RECORD_T; + HD_SYSTEM_RECORD_T hdsystemRecord; ///< HD system record. + U08 padding[ RECORD_PADDING_LENGTH(HD_SYSTEM_RECORD_T, MAX_EEPROM_WRITE_BUFFER_BYTES) - + RECORD_BYTE_SIZE(HD_SYSTEM_RECORD_T) ]; ///< HD system group padding. + U16 crc; ///< CRC for the HD system group structure. +} HD_SYSTEM_GROUP_T; + +/// HD service record structure +typedef struct +{ + HD_SERVICE_RECORD_T hdServiceRecord; ///< HD service record. + U08 padding[ RECORD_PADDING_LENGTH(HD_SERVICE_RECORD_T, MAX_RTC_RAM_OPS_BUFFER_BYTES) - + RECORD_BYTE_SIZE(HD_SERVICE_RECORD_T) ]; ///< HD service group padding. + U16 crc; ///< CRC for the HD service structure. +} HD_SERVICE_GROUP_T; #endif #pragma pack(pop) // Calibration variables #ifdef _DG_ -static DG_CALIBRATION_RECORD_T dgCalibrationRecord; ///< DG calibration record structure (including padding and final CRC). -static DG_SYSTEM_GROUP_T dgSystemGroup; ///< DG system group structure (including padding and final CRC). -static DG_SERVICE_GROUP_T dgServiceGroup; ///< DG service group structure (including padding and final CRC). -static DG_SCHEDULED_RUNS_GROUP_T dgScheduledRunGroup; ///< DG scheduled run structure (including padding and final CRC). +static DG_CALIBRATION_RECORD_T dgCalibrationRecord; ///< DG calibration record structure (including padding and final CRC). +static DG_SYSTEM_GROUP_T dgSystemGroup; ///< DG system group structure (including padding and final CRC). +static DG_SERVICE_GROUP_T dgServiceGroup; ///< DG service group structure (including padding and final CRC). +static DG_SCHEDULED_RUNS_GROUP_T dgScheduledRunGroup; ///< DG scheduled run structure (including padding and final CRC). // Process records specifications const PROCESS_RECORD_SPECS_T RECORDS_SPECS [ NUM_OF_NVDATMGMT_RECORDS_JOBS ] = { {BANK7_SECTOR0_START_ADDRESS, sizeof(DG_CALIBRATION_RECORD_T), MAX_EEPROM_WRITE_BUFFER_BYTES, sizeof(DG_CALIBRATION_RECORD_T), (U08*)&dgCalibrationRecord, (U08*)&(dgCalibrationRecord.crc)}, // NVDATAMGMT_CALIBRATION_RECORD {SYSTEM_DATA_NV_MEM_START_ADDRESS, sizeof(DG_SYSTEM_GROUP_T), MAX_EEPROM_WRITE_BUFFER_BYTES, sizeof(DG_SYSTEM_GROUP_T), (U08*)&dgSystemGroup, (U08*)&dgSystemGroup.crc}, // NVDATAMGMT_SYSTEM_RECORD {SERVICE_RECORD_START_ADDRESS, sizeof(DG_SERVICE_GROUP_T), MAX_RTC_RAM_OPS_BUFFER_BYTES, MAX_RTC_RAM_OPS_BUFFER_BYTES, (U08*)&dgServiceGroup, (U08*)&dgServiceGroup.crc}, // NVDATAMGMT_PROCESS_LAST_SERVICE_RECORD - {DG_SCHEDULED_RUNS_START_ADDRESS, sizeof(DG_SCHEDULED_RUNS_GROUP_T), MAX_RTC_RAM_OPS_BUFFER_BYTES, MAX_RTC_RAM_OPS_BUFFER_BYTES, (U08*)&dgScheduledRunGroup, (U08*)&dgScheduledRunGroup.crc} // NVDATAMGMT_SCHEDULER_RECORD + {DG_SCHEDULED_RUNS_START_ADDRESS, sizeof(DG_SCHEDULED_RUNS_GROUP_T), MAX_RTC_RAM_OPS_BUFFER_BYTES, MAX_RTC_RAM_OPS_BUFFER_BYTES, (U08*)&dgScheduledRunGroup, (U08*)&dgScheduledRunGroup.crc} // NVDATAMGMT_SCHEDULER_RECORD }; #endif #ifdef _HD_ -static HD_CALIBRATION_RECORD_T hdCalibrationRecord; ///< HD calibration record. +static HD_CALIBRATION_RECORD_T hdCalibrationRecord; ///< HD calibration record structure. +static HD_SYSTEM_GROUP_T hdSystemGroup; ///< HD system group structure (including padding and final CRC). +static HD_SERVICE_GROUP_T hdServiceGroup; ///< HD service group structure (including padding and final CRC). +// Process records specifications +const PROCESS_RECORD_SPECS_T RECORDS_SPECS [ NUM_OF_NVDATMGMT_RECORDS_JOBS ] = { + {BANK7_SECTOR0_START_ADDRESS, sizeof(HD_CALIBRATION_RECORD_T), MAX_EEPROM_WRITE_BUFFER_BYTES, sizeof(HD_CALIBRATION_RECORD_T), (U08*)&hdCalibrationRecord, (U08*)&hdCalibrationRecord.crc}, // NVDATAMGMT_CALIBRATION_RECORD + {SYSTEM_DATA_NV_MEM_START_ADDRESS, sizeof(HD_SYSTEM_GROUP_T), MAX_EEPROM_WRITE_BUFFER_BYTES, sizeof(HD_SYSTEM_GROUP_T), (U08*)&hdSystemGroup, (U08*)&hdSystemGroup.crc}, // NVDATAMGMT_SYSTEM_RECORD + {SERVICE_RECORD_START_ADDRESS, sizeof(HD_SERVICE_GROUP_T), MAX_RTC_RAM_OPS_BUFFER_BYTES, MAX_RTC_RAM_OPS_BUFFER_BYTES, (U08*)&hdServiceGroup, (U08*)&hdServiceGroup.crc}, // NVDATAMGMT_PROCESS_LAST_SERVICE_RECORD +}; #endif static RECORD_JOBS_STATE_T recordToPublish; ///< Record to publish (i.e. calibration, system) static PROCESS_RECORD_STATE_T nvDataMgmtExecProcessRecordState = NVDATAMGMT_PROCESS_RECORD_STATE_IDLE; ///< NVDataMgmt exec process record state. @@ -725,8 +750,8 @@ { nvDataMgmtExecReceiveRecordState = NVDATAMGMT_RECEIVE_RECORD_RECEIVE; recordReceiveStartTime = getMSTimerCount(); - previousCalMessageNum = 0; - recordUpdateAddress = 0; + previousCalMessageNum = 0; + recordUpdateAddress = 0; } // Check if there is still a message left to be received @@ -1293,8 +1318,114 @@ } #endif +#ifdef _HD_ /*********************************************************************//** * @brief + * The getHDPumpsCalibrationRecord function returns the HD pumps calibration + * record. + * @details Inputs: none + * @details Outputs: none + * @return HD pumps calibration record + *************************************************************************/ +HD_PUMPS_CAL_RECORD_T getHDPumpsCalibrationRecord( void ) +{ + return hdCalibrationRecord.hdCalibrationGroups.pumpsCalRecord; +} + +/*********************************************************************//** + * @brief + * The getHDValvesCalibrationRecord function returns the HD valves calibration + * record. + * @details Inputs: none + * @details Outputs: none + * @return HD valves calibration record + *************************************************************************/ +HD_VALVES_CAL_RECORD_T getHDValvesCalibrationRecord( void ) +{ + return hdCalibrationRecord.hdCalibrationGroups.valvesCalRecord; +} + +/*********************************************************************//** + * @brief + * The getHDOccluesionSensrosCalibrationRecord function returns the HD + * occlusion sensors calibration record. + * @details Inputs: none + * @details Outputs: none + * @return HD occlusion sensors calibration record + *************************************************************************/ +HD_OCCLUSION_SENSORS_CAL_RECORD_T getHDOccluesionSensrosCalibrationRecord( void ) +{ + return hdCalibrationRecord.hdCalibrationGroups.occlusionSensorsCalRecord; +} + +/*********************************************************************//** + * @brief + * The getHDFlowSensorsCalibrationRecord function returns the HD flow + * sensors calibration record. + * @details Inputs: none + * @details Outputs: none + * @return HD flow sensors calibration record + *************************************************************************/ +HD_FLOW_SENSORS_CAL_RECORD_T getHDFlowSensorsCalibrationRecord( void ) +{ + return hdCalibrationRecord.hdCalibrationGroups.flowSensorsCalRecord; +} + +/*********************************************************************//** + * @brief + * The getHDPressureSensorsCalibrationRecord function returns the HD pressure + * sensors calibration record. + * @details Inputs: none + * @details Outputs: none + * @return HD pressure sensors calibration record + *************************************************************************/ +HD_PRESSURE_SENSORS_CAL_RECORD_T getHDPressureSensorsCalibrationRecord( void ) +{ + return hdCalibrationRecord.hdCalibrationGroups.pressureSensorsCalRecord; +} + +/*********************************************************************//** + * @brief + * The getHDTemperatureSensorsCalibrationRecord function returns the HD + * temperature sensors calibration record. + * @details Inputs: none + * @details Outputs: none + * @return HD temperature sensors calibration record + *************************************************************************/ +HD_TEMP_SENSORS_CAL_RECORD_T getHDTemperatureSensorsCalibrationRecord( void ) +{ + return hdCalibrationRecord.hdCalibrationGroups.tempSensorsCalRecord; +} + +/*********************************************************************//** + * @brief + * The getHDHeparinForceSensorCalibrationRecord function returns the HD + * heparin force sensor calibration record. + * @details Inputs: none + * @details Outputs: none + * @return HD heparin force sensor calibration record + *************************************************************************/ +HD_HEPARIN_FORCE_SENSOR_CAL_RECORD_T getHDHeparinForceSensorCalibrationRecord( void ) +{ + return hdCalibrationRecord.hdCalibrationGroups.heparinForceSensorCalRecord; +} + +/*********************************************************************//** + * @brief + * The getHDAccelerometerSensorCalibrationRecord function returns the HD + * accelerometer sensor calibration record. + * @details Inputs: none + * @details Outputs: none + * @return HD heparin force sensor calibration record + *************************************************************************/ +HD_ACCELEROMETER_SENSOR_CAL_RECORD_T getHDAccelerometerSensorCalibrationRecord( void ) +{ + return hdCalibrationRecord.hdCalibrationGroups.accelerometerCalRecord; +} +#endif + +/*********************************************************************//** + * @brief * The setCalibrationData updates the structure that holds the calibration data, * calls another function to calculate the CRC for the provided data and * calls another function to erase sector 0 and write the new manufacturing @@ -2285,27 +2416,41 @@ switch( recordToPublish ) { case NVDATAMGMT_CALIBRATION_RECORD: - +#ifdef _DG_ // Pass the information to the CAN bus sendDGCalibrationRecord( calPublishMessageCount + 1, calPublishTotalMessages, length, startPtr ); +#endif +#ifdef _HD_ + sendHDCalibrationRecord( calPublishMessageCount + 1, calPublishTotalMessages, length, startPtr ); +#endif break; case NVDATAMGMT_SYSTEM_RECORD: - +#ifdef _DG_ // Pass the information to the CAN bus sendDGSystemRecord( calPublishMessageCount + 1, calPublishTotalMessages, length, startPtr ); +#endif +#ifdef _HD_ + sendHDSystemRecord( calPublishMessageCount + 1, calPublishTotalMessages, length, startPtr ); +#endif break; case NVDATAMGMT_SERVICE_RECORD: - +#ifdef _DG_ // Pass the information to the CAN bus sendDGServiceRecord( calPublishMessageCount + 1, calPublishTotalMessages, length, startPtr ); +#endif +#ifdef _HD_ + sendHDServiceRecord( calPublishMessageCount + 1, calPublishTotalMessages, length, startPtr ); +#endif break; case NVDATAMGMT_SCHEDULED_RUNS_RECORD: - +#ifdef _DG_ // Pass the information to the CAN bus sendDGScheduledRunsRecord( calPublishMessageCount + 1, calPublishTotalMessages, length, startPtr ); +#endif + // There are no scheduled runs for HD right now. break; default: @@ -2784,7 +2929,6 @@ return QUEUE_MAX_SIZE - recordQueueCount; } - /*********************************************************************//** * @brief * The enqueueSector0Records checks whether there are enough jobs available Index: NVDataMgmt.h =================================================================== diff -u -r03eaec1ba61d804bd22664d4a2c5e033fd77a302 -rf2a92b265b295e93b57199a89d6491e195f74c56 --- NVDataMgmt.h (.../NVDataMgmt.h) (revision 03eaec1ba61d804bd22664d4a2c5e033fd77a302) +++ NVDataMgmt.h (.../NVDataMgmt.h) (revision f2a92b265b295e93b57199a89d6491e195f74c56) @@ -80,8 +80,6 @@ F32 bloodFlowOffset_mL_min; ///< Offset for blood flow sensor F32 dialysateFlowGain; ///< Gain for dialysate flow sensor F32 dialysateFlowOffset_mL_min; ///< Offset for dialysate flow sensor - char calDateBloodFlow[ MAX_DATE_CHARACTERS ]; ///< Last calibration date of blood flow sensor - char calDateDialysateFlow[ MAX_DATE_CHARACTERS ]; ///< Last calibration date of blood flow sensor #endif //char calDateAccel[ MAX_DATE_CHARACTERS ]; ///< Last calibration date of accelerometer } CALIBRATION_DATA_T; @@ -150,6 +148,16 @@ DG_RO_PUMP_CAL_RECORD_T getDGROPumpRecord( void ); DG_DRAIN_PUMP_CAL_RECORD_T getDGDrainPumpRecord( void ); #endif +#ifdef _HD_ +HD_PUMPS_CAL_RECORD_T getHDPumpsCalibrationRecord( void ); +HD_VALVES_CAL_RECORD_T getHDValvesCalibrationRecord( void ); +HD_OCCLUSION_SENSORS_CAL_RECORD_T getHDOccluesionSensrosCalibrationRecord( void ); +HD_FLOW_SENSORS_CAL_RECORD_T getHDFlowSensorsCalibrationRecord( void ); +HD_PRESSURE_SENSORS_CAL_RECORD_T getHDPressureSensorsCalibrationRecord( void ); +HD_TEMP_SENSORS_CAL_RECORD_T getHDTemperatureSensorsCalibrationRecord( void ); +HD_HEPARIN_FORCE_SENSOR_CAL_RECORD_T getHDHeparinForceSensorCalibrationRecord( void ); +HD_ACCELEROMETER_SENSOR_CAL_RECORD_T getHDAccelerometerSensorCalibrationRecord( void ); +#endif BOOL setCalibrationData ( CALIBRATION_DATA_T data ); //TODO remove BOOL getCalibrationData ( CALIBRATION_DATA_T* buffer ); //TODO remove Index: NVDataMgmtHDRecords.h =================================================================== diff -u -r4d7812fb7c4caff40ffb374475a33de29d5fe396 -rf2a92b265b295e93b57199a89d6491e195f74c56 --- NVDataMgmtHDRecords.h (.../NVDataMgmtHDRecords.h) (revision 4d7812fb7c4caff40ffb374475a33de29d5fe396) +++ NVDataMgmtHDRecords.h (.../NVDataMgmtHDRecords.h) (revision f2a92b265b295e93b57199a89d6491e195f74c56) @@ -171,6 +171,34 @@ NON_LINEAR_CAL_PAYLOAD_T hdHeparinForceSensor; ///< HD heparin force sensor calibration data. } HD_HEPARIN_FORCE_SENSOR_CAL_RECORD_T; +/// HD accelerometer sensor calibration record +typedef struct +{ + F32 accelXOffset; ///< HD accelerometer X axis offset. + F32 accelYOffset; ///< HD accelerometer Y axis offset. + F32 accelZOffset; ///< HD accelerometer Z axis offset. + U32 calibrationTime; ///< Calibration time. + U16 crc; ///< CRC for the HD accelerometer sensor. +} HD_ACCELEROMETER_SENSOR_CAL_RECORD_T; + +/// HD systems record structure +typedef struct +{ + char topLevelPN[ MAX_TOP_LEVEL_PN_CHARS ]; ///< HD top level part number. + char topLevelSN[ MAX_TOP_LEVEL_SN_CHARS ]; ///< HD top level serial number. + MFG_LOCATION_T mfgLocation; ///< HD manufacturing location. + U32 mfgDate; ///< HD manufacturing date. + U16 crc; ///< CRC for the HD system record structure. +} HD_SYSTEM_RECORD_T; + +/// HD service record structure +typedef struct +{ + SERVICE_LOCATION_T serviceLoc; ///< HD service location. + U32 serviceDate; ///< HD service date. + U16 crc; ///< CRC for the HD service record structure. +} HD_SERVICE_RECORD_T; + #pragma pack(pop) /**@}*/