/************************************************************************** * * Copyright (c) 2020-2025 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 NVDataMgmt.h * * @author (last) Dara Navaei * @date (last) 16-Jun-2025 * * @author (original) Dara Navaei * @date (original) 12-Feb-2020 * ***************************************************************************/ #ifndef FWCOMMON_NVDATAMGMT_H_ #define FWCOMMON_NVDATAMGMT_H_ #include "Common.h" #ifdef _HD_ #include "NVDataMgmtHDRecords.h" #include "OperationModes.h" #include "HDDefs.h" #endif #ifdef _DG_ #include "NVDataMgmtDGRecords.h" #endif /** * @defgroup NVDataMgmt NVDataMgmt * @brief Non-volatile data management module. Handles Bank 7 of the TI processor and the * RAM of the RTC chip. * * @addtogroup NVDataMgmt * @{ */ // ********** public definitions ********** #ifndef _RELEASE_ #define SW_CONFIG_ENABLE_VALUE 1 ///< Software configuration enable. #define SW_CONFIG_DISABLE_VALUE 0 ///< Software configuration disable. #endif /// Log event enumeration. typedef enum log_event { NVDATAMGMT_MODE_CHANGE = 0, ///< Mode change. NVDATAMGMT_ALARM, ///< Alarm. NVDATAMGMT_DISINFECTION_STARTED, ///< Disinfection started. NVDATAMGMT_DISINFECTION_ENDED, ///< Disinfection ended. NVDATAMGMT_DEVICE_TURNED_ON, ///< Device turned on. NVDATAMGMT_DEVICE_TURNED_OFF, ///< Device turned off. NVDATAMGMT_UI_CRASHED ///< UI crashed. } NVDATAMGMT_LOG_EVENT_T; /// Read status enumeration. typedef enum read_status { NVDATAMGMT_READ_IDLE = 0, ///< Read status idle. NVDATAMGMT_READ_IN_PROGRESS, ///< Read status in progress. NVDATAMGMT_READ_COMPLETE ///< Read status complete. } NVDATAMGMT_READ_STATUS_T; /// NVDataMgmt records' jobs states typedef enum NVDataMgmt_Records_Jobs { NVDATAMGMT_CALIBRATION_RECORD = 0, ///< NVDataMgmt process write calibration record. NVDATAMGMT_SYSTEM_RECORD, ///< NVDataMgmt process write system record. NVDATAMGMT_SERVICE_RECORD, ///< NVDataMgmt process service record. #ifdef _HD_ NVDATAMGMT_INTITUTIONAL_RECORD, ///< NVDataMgmt process institutional record. #endif #ifdef _DG_ NVDATAMGMT_SCHEDULED_RUNS_RECORD, ///< NVDataMgmt process scheduled runs record. NVDATAMGMT_HEATERS_INFO_RECORD, ///< NVDataMgmt process heaters info record. #endif NVDATAMGMT_USAGE_INFO_RECORD, ///< NVDataMgmt process usage info record. #ifndef _RELEASE_ NVDATAMGMT_SW_CONFIG_RECORD, ///< NVDataMgmt process software record. #endif NUM_OF_NVDATMGMT_RECORDS_JOBS ///< Number of NVDataMgmt records jobs. } RECORD_JOBS_STATE_T; /// NVDataMgmt records read status typedef enum NVDataMgmt_NV_Records_Read_Status { NVDATAMGMT_RECORDS_NOT_STARTED = 0, ///< NVDataMgmt records not started. NVDATAMGMT_RECORDS_QUEUED, ///< NVDataMgmt records queued. NVDATAMGMT_RECORDS_READ, ///< NVDataMgmt records read. NVDATAMGMT_RECORDS_CRC_CHECKED, ///< NVDataMgmt records CRC checked. NUM_OF_NVDATAMGMT_READ_RECORDS_STATES, ///< Number of NVDataMgmt read records states. } NVDATAMGMT_RECORDS_READ_STATUS_T; #pragma pack(push, 1) /// Read data status structure. typedef struct { NVDATAMGMT_READ_STATUS_T status; ///< Read data status. U08* externalBuffer; ///< External buffer address. } READ_DATA_T; /// Log data structure. typedef struct { U32 epochTime; ///< Log data time in epoch. U32 eventCode; ///< Log data event code. U32 subCode; ///< Log data sub code. F32 data1; ///< Log data 1. F32 data2; ///< Log data 2. F32 data3; ///< Log data 3. F32 data4; ///< Log data 4. F32 data5; ///< Log data 5. } LOG_DATA_T; #pragma pack(pop) // ********** public function prototypes ********** void initNVDataMgmt( void ); void signalPowerOffWarning( void ); void execNVDataMgmt( void ); SELF_TEST_STATUS_T execNVDataMgmtSelfTest( void ); void execNVDataMgmtProcessRecord( void ); BOOL isNewCalibrationRecordAvailable( void ); void resetNVDataMgmtPOSTState( void ); BOOL getNVRecord2Driver( NV_DATA_T nvData, U08* bufferAddress, U32 bufferLength, U08 numOfSnsrs2Check, ALARM_ID_T nvAlarm ); #ifndef _RELEASE_ U08 getSoftwareConfigStatus( SOFTWARE_CONFIG_T config ); #endif #ifdef _DG_ BOOL setROWaterGeneratedL( F32 liters ); BOOL setLastDisinfectDate( DG_USAGE_INFO_ITEMS_T disinfect, U32 epochTime ); BOOL setHeatersInfoRecord( U08 *addressPtr, U32 infoLength ); #endif #ifdef _HD_ BOOL setTxTimeHours( F32 hours ); BOOL setTxLastStartTimeEpoch( U32 epoch ); BOOL isChemDisinfectEnabledInInstitRecord( void ); U32 getMinRORejectionRatioInInstitRecordPCT( void ); F32 getMinInletWaterConductivityLimitInstitRecordUSPCM( void ); #endif BOOL setServiceTime( void ); BOOL writeLogData( LOG_DATA_T* data ); // Phase 1B BOOL readLogData( READ_DATA_T* buffer, U32 length ); // Phase 1B BOOL sendRecordToDialin( RECORD_JOBS_STATE_T job ); BOOL receiveRecordFromDialin( RECORD_JOBS_STATE_T job, U32 currentMessage, U32 totalMessages, U32 length, U08 *addressPtr ); void benignPolynomialCalRecord( POLYNOMIAL_CAL_PAYLOAD_T* record ); NVDATAMGMT_RECORDS_READ_STATUS_T getNVRecordsReadStatus( void ); BOOL enqueueNVRecordsForRead( void ); BOOL testSetNVRecordCRCOverride( U32 job, U16 crc ); /**@}*/ #endif