Index: NVDataMgmt.c =================================================================== diff -u -r839935998cfe2a1a7594e6b6810301ad3c2aa872 -rfd1a4ea5198033bcbd17986c3079967afb1f220f --- NVDataMgmt.c (.../NVDataMgmt.c) (revision 839935998cfe2a1a7594e6b6810301ad3c2aa872) +++ NVDataMgmt.c (.../NVDataMgmt.c) (revision fd1a4ea5198033bcbd17986c3079967afb1f220f) @@ -129,34 +129,24 @@ // DG specific defines #ifdef _DG_ -#define FLUSH_LINES_DEFAULT_VOLUME_L 0.01F ///< Water volume to flush when starting re-circulate mode in liters. -#define BICARB_CONC_DEFAULT_MIXING_RATIO ( 4.06812 / FRACTION_TO_PERCENT_FACTOR ) ///< Ratio between RO water and bicarbonate concentrate mixing ratio. -#define RECORD_DEFAULT_BICARB_BOTTLE_VOL_ML 3780.0F ///< Record default bicarb bottle volume in milliliters. -#define RECORD_DEFAULT_BICARB_COND_US_PER_CM 13734.88F ///< Record default acid conductivity in uS/cm. -#define RECORD_DEFAULT_BICARB_BOTTLE_TEMP_C 23.5F ///< Record default acid bottle temperature in C. -#define ACID_CONC_DEFAULT_MIXING_RATIO ( 2.35618 / FRACTION_TO_PERCENT_FACTOR ) ///< Ratio between RO water and acid concentrate mixing ratio. -#define RECORD_DEFAULT_ACID_BOTTLE_VOL_ML 3430.0F ///< Record default acid bottle volume in milliliters. -#define RECORD_DEFAULT_ACID_COND_US_PER_CM 11645.05F ///< Record default acid conductivity in uS/cm. -#define RECORD_DEFAULT_ACID_BOTTLE_TEMP_C 23.5F ///< Record default acid bottle temperature in C. -#define RESERVOIR_TEMPERATURE_TAU_C_PER_MIN -0.512F ///< Reservoir temperature time constant C/min. -#define ULTRAFILTER_TEMPERATURE_TAU_C_PER_MIN -4.565F ///< Ultrafilter temperature time constant C/min. -#define ULTRAFILTER_VOLUME_ML 700 ///< Ultrafilter volume in milliliters. +#define DEFAULT_FLUSH_LINES_VOLUME_L 0.01F ///< Water volume to flush when starting re-circulate mode in liters. +#define DEFAULT_BICARB_CONC_MIXING_RATIO ( 4.06812F / FRACTION_TO_PERCENT_FACTOR ) ///< Ratio between RO water and bicarbonate concentrate mixing ratio. +#define DEFAULT_BICARB_BOTTLE_VOL_ML 3780.0F ///< Record default bicarb bottle volume in milliliters. +#define DEFAULT_BICARB_COND_US_PER_CM 13734.88F ///< Record default acid conductivity in uS/cm. +#define DEFAULT_BICARB_BOTTLE_TEMP_C 23.5F ///< Record default acid bottle temperature in C. +#define DEFAULT_ACID_CONC_MIXING_RATIO ( 2.35618F / FRACTION_TO_PERCENT_FACTOR ) ///< Ratio between RO water and acid concentrate mixing ratio. +#define DEFAULT_ACID_BOTTLE_VOL_ML 3430.0F ///< Record default acid bottle volume in milliliters. +#define DEFAULT_ACID_COND_US_PER_CM 11645.05F ///< Record default acid conductivity in uS/cm. +#define DEFAULT_ACID_BOTTLE_TEMP_C 23.5F ///< Record default acid bottle temperature in C. +#define DEFAULT_RSRVR_TEMP_TAU_C_PER_MIN -0.512F ///< Reservoir temperature time constant C/min. +#define DEFAULT_UF_TEMP_TAU_C_PER_MIN -4.565F ///< Ultrafilter temperature time constant C/min. +#define DEFAULT_UF_VOLUME_ML 700 ///< Ultrafilter volume in milliliters. #endif /// NVDataMgmt self-test states enumeration. typedef enum NVDataMgmt_Self_Test_States { - NVDATAMGMT_SELF_TEST_STATE_START = 0, ///< Self test start. - NVDATAMGMT_SELF_TEST_STATE_READ_CAL_RECORD, ///< Self test read calibration record. - NVDATAMGMT_SELF_TEST_STATE_READ_SYS_RECORD, ///< Self test read system record. - NVDATAMGMT_SELF_TEST_STATE_READ_SERVICE_RECORD, ///< Self test read service record. - NVDATAMGMT_SELF_TEST_STATE_READ_SCHEDULED_RUNS_RECORD, ///< Self test read scheduled runs record (DG only). - NVDATAMGMT_SELF_TEST_STATE_READ_LOG_RECORD, ///< Self test read log record. - NVDATAMGMT_SELF_TEST_STATE_READ_TREATMENT_TIME, ///< Self test read treatment time. TODO combine with water consumption - NVDATAMGMT_SELF_TEST_STATE_READ_WATER_CONSUMPTION, ///< Self test read water consumption. TODO combine with tx time - NVDATAMGMT_SELF_TEST_STATE_READ_DG_HEATERS_INFO, ///< Self test read DG heaters information. - NVDATAMGMT_SELF_TEST_STATE_READ_SW_CONFIG_RECORD, ///< Self test read software configuration record. - NVDATAMGMT_SELF_TEST_STATE_READ_RECORDS, // TODO new POST State ///< Self test read records. + NVDATAMGMT_SELF_TEST_STATE_READ_RECORDS = 0, ///< Self test read records. NVDATAMGMT_SELF_TEST_STATE_CHECK_CRC, ///< Self test check CRC. NVDATAMGMT_SELF_TEST_STATE_COMPLETE, ///< Self test complete. NUM_OF_NVDATAMGMT_SELF_TEST_STATES ///< Total number of self-test states. @@ -165,8 +155,7 @@ /// NVDataMgmt Exec states enumeration. typedef enum NVDataMgmt_Exec_State { - NVDATAMGMT_EXEC_STATE_WAIT_FOR_POST = 0, ///< Exec state wait for POST. - NVDATAMGMT_EXEC_STATE_IDLE, ///< Exec state Idle. + NVDATAMGMT_EXEC_STATE_IDLE = 0, ///< Exec state Idle. NVDATAMGMT_EXEC_STATE_WRITE_TO_EEPROM, ///< Exec state write to EEPROM. NVDATAMGMT_EXEC_STATE_VERIFY_EEPROM_WRITE, ///< Exec state verify EEPROM write. NVDATAMGMT_EXEC_STATE_READ_FROM_EEPROM, ///< Exec state read from EEPROM. @@ -471,16 +460,17 @@ }; #endif +// Private variables 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. -static RECEIVE_RECORD_STATE_T nvDataMgmtExecReceiveRecordState = NVDATAMGMT_RECEIVE_RECORD_IDLE; ///< NVDataMgmt exec receive record state. -static BOOL hasPublishRecordBeenRequested = FALSE; ///< Record state machine publish request flag. -static U32 calPublishMessageCount = 1; ///< Calibration data publish message counter. -static U32 calPublishTotalMessages = 1; ///< Calibration data total number of messages to be sent. -static U32 calSendDataIntervalCounter = 0; ///< Calibration data send to CAN bust interval counter. -static U32 previousCalMessageNum = 0; ///< Calibration previous message number. -static U32 recordUpdateAddress = 0; ///< DG record update address for all the write operations. -static U32 recordReceiveStartTime = 0; ///< Time stamp the calibration/service was received. +static PROCESS_RECORD_STATE_T nvDataMgmtExecProcessRecordState; ///< NVDataMgmt exec process record state. +static RECEIVE_RECORD_STATE_T nvDataMgmtExecReceiveRecordState; ///< NVDataMgmt exec receive record state. +static BOOL hasPublishRecordBeenRequested; ///< Record state machine publish request flag. +static U32 calPublishMessageCount; ///< Calibration data publish message counter. +static U32 calPublishTotalMessages; ///< Calibration data total number of messages to be sent. +static U32 calSendDataIntervalCounter; ///< Calibration data send to CAN bust interval counter. +static U32 previousCalMessageNum; ///< Calibration previous message number. +static U32 recordUpdateAddress; ///< DG record update address for all the write operations. +static U32 recordReceiveStartTime; ///< Time stamp the calibration/service was received. static PROCESS_RECORD_JOB_T recordJobQueue[ QUEUE_MAX_SIZE ]; ///< Record queue jobs. static U08 recordQueueRearIndex; ///< Record queue rear index. static U08 recordQueueFrontIndex; ///< Record queue front index. @@ -490,46 +480,27 @@ static RECORD_VALIDITY_CHECK_T writtenRecordStatus; ///< Record data write validity check. static U08 writtenRecordCheckBuffer[ MAX_EEPROM_WRITE_BUFFER_BYTES ]; ///< Written record validity check buffer. static ACTIVE_QUEUE_T activeQueue; ///< Active queue. - -// Private variables static MEMORY_LOG_OPS_T jobQueue [ QUEUE_MAX_SIZE ]; ///< Job queue buffer. static MEMORY_LOG_OPS_T currentJob; ///< Current job. static LOG_RECORD_T logRecord; ///< Log record variable. -static U08 queueRearIndex = QUEUE_START_INDEX; ///< Queue rear index. -static U08 queueFrontIndex = QUEUE_START_INDEX; ///< Queue front index. -static U08 queueCount = 0; ///< Queue count. -static NVDATAMGMT_SELF_TEST_STATE_T nvDataMgmtSelfTestState = NVDATAMGMT_SELF_TEST_STATE_START; ///< NVDataMgmt self-test state variable. -static NVDATAMGMT_EXEC_STATE_T nvDataMgmtExecState = NVDATAMGMT_EXEC_STATE_WAIT_FOR_POST; ///< NVDataMgmt exec state variable. -static SELF_TEST_STATUS_T nvDataMgmtSelfTestResult = SELF_TEST_STATUS_IN_PROGRESS; ///< NVDataMgmt self-test result. -static U32 currentTime = 0; ///< Current time. -static volatile BOOL powerOffIsImminent = FALSE; ///< Power off warning has been signaled. Non-volatile memory operations should be completed ASAP and then ceased. -static BOOL isNewCalAvailable = FALSE; ///< Signal to indicate whether a new calibration data is available. -static U32 newCalStartTimer = 0; ///< New calibration availability start timer. +static U08 queueRearIndex; ///< Queue rear index. +static U08 queueFrontIndex; ///< Queue front index. +static U08 queueCount; ///< Queue count. +static NVDATAMGMT_SELF_TEST_STATE_T nvDataMgmtSelfTestState; ///< NVDataMgmt self-test state variable. +static NVDATAMGMT_EXEC_STATE_T nvDataMgmtExecState; ///< NVDataMgmt exec state variable. +static SELF_TEST_STATUS_T nvDataMgmtSelfTestResult; ///< NVDataMgmt self-test result. +static U32 currentTime; ///< Current time. +static volatile BOOL powerOffIsImminent; ///< Power off warning has been signaled. Non-volatile memory operations should be completed ASAP and then ceased. +static BOOL isNewCalAvailable; ///< Signal to indicate whether a new calibration data is available. +static U32 newCalStartTimer; ///< New calibration availability start timer. static BOOL hasServiceRecordBeenUpdated; ///< Flag that indicates the service record has been updated once the calibration record has been updated. +static NVDATAMGMT_RECORDS_READ_STATUS recordsReadStatus; ///< NVDataMgmt records read status. -// Private functions -static NVDATAMGMT_SELF_TEST_STATE_T handleSelfTestStart( void ); -static NVDATAMGMT_SELF_TEST_STATE_T handleSelfTestReadCalibrationRecord( void ); -static NVDATAMGMT_SELF_TEST_STATE_T handleSelfTestReadSystemRecord( void ); -static NVDATAMGMT_SELF_TEST_STATE_T handleSelfTestReadServiceRecord( void ); -#ifdef _DG_ -static NVDATAMGMT_SELF_TEST_STATE_T handleSelfTestReadScheduledRunsRecord( void ); -#endif -#ifdef _HD_ -static NVDATAMGMT_SELF_TEST_STATE_T handleSelfTestReadHDTreatmentTime( void ); -#endif -#ifdef _DG_ -static NVDATAMGMT_SELF_TEST_STATE_T handleSelfTestReadDGHeatersInfo( void ); -static NVDATAMGMT_SELF_TEST_STATE_T handleSelfTestReadDGWaterConsumption( void ); -#endif -static NVDATAMGMT_SELF_TEST_STATE_T handleSelfTestReadSWConfigRecord( void ); -static NVDATAMGMT_SELF_TEST_STATE_T handleSelfTestReadLogRecord( void ); - -static NVDATAMGMT_SELF_TEST_STATE_T handleSelfTestReadRecords( void ); // TODO new function - +// Self test functions +static NVDATAMGMT_SELF_TEST_STATE_T handleSelfTestReadRecords( void ); static NVDATAMGMT_SELF_TEST_STATE_T handleSelfTestCheckCRC( void ); -static NVDATAMGMT_EXEC_STATE_T handleExecWaitForPostState( void ); +// Exec functions static NVDATAMGMT_EXEC_STATE_T handleExecIdleState( void ); static NVDATAMGMT_EXEC_STATE_T handleExecEraseState( void ); static NVDATAMGMT_EXEC_STATE_T handleExecWriteToEEPROMState( void ); @@ -539,6 +510,7 @@ static NVDATAMGMT_EXEC_STATE_T handleExecVerifyRTCWriteState( void ); static NVDATAMGMT_EXEC_STATE_T handleExecReadFromRAMState( void ); +// Process record functions static PROCESS_RECORD_STATE_T handleExecProcessRecordIdleState( void ); static PROCESS_RECORD_STATE_T handleExecProcessRecordSendRecordState( void ); @@ -622,8 +594,8 @@ void initNVDataMgmt( void ) { // Initialize the parameters - nvDataMgmtSelfTestState = NVDATAMGMT_SELF_TEST_STATE_START; - nvDataMgmtExecState = NVDATAMGMT_EXEC_STATE_WAIT_FOR_POST; + nvDataMgmtSelfTestState = NVDATAMGMT_SELF_TEST_STATE_READ_RECORDS; + nvDataMgmtExecState = NVDATAMGMT_EXEC_STATE_IDLE; nvDataMgmtSelfTestResult = SELF_TEST_STATUS_IN_PROGRESS; nvDataMgmtExecProcessRecordState = NVDATAMGMT_PROCESS_RECORD_STATE_IDLE; nvDataMgmtExecReceiveRecordState = NVDATAMGMT_RECEIVE_RECORD_IDLE; @@ -640,6 +612,14 @@ isNewCalAvailable = FALSE; newCalStartTimer = 0; hasServiceRecordBeenUpdated = FALSE; + currentTime = 0; + powerOffIsImminent = FALSE; + calPublishMessageCount = 1; + calPublishTotalMessages = 1; + calSendDataIntervalCounter = 0; + previousCalMessageNum = 0; + recordReceiveStartTime = 0; + recordsReadStatus = NVDATAMGMT_RECORDS_NOT_STARTED; enqueuePOSTReadRecords(); @@ -674,10 +654,6 @@ { switch ( nvDataMgmtExecState ) { - case NVDATAMGMT_EXEC_STATE_WAIT_FOR_POST: - nvDataMgmtExecState = handleExecWaitForPostState(); - break; - case NVDATAMGMT_EXEC_STATE_IDLE: nvDataMgmtExecState = handleExecIdleState(); break; @@ -732,50 +708,6 @@ { switch ( nvDataMgmtSelfTestState ) { - case NVDATAMGMT_SELF_TEST_STATE_START: - nvDataMgmtSelfTestState = handleSelfTestStart(); - break; - - case NVDATAMGMT_SELF_TEST_STATE_READ_CAL_RECORD: - nvDataMgmtSelfTestState = handleSelfTestReadCalibrationRecord(); - break; - - case NVDATAMGMT_SELF_TEST_STATE_READ_SYS_RECORD: - nvDataMgmtSelfTestState = handleSelfTestReadSystemRecord(); - break; - - case NVDATAMGMT_SELF_TEST_STATE_READ_SERVICE_RECORD: - nvDataMgmtSelfTestState = handleSelfTestReadServiceRecord(); - break; - -#ifdef _DG_ - case NVDATAMGMT_SELF_TEST_STATE_READ_SCHEDULED_RUNS_RECORD: - nvDataMgmtSelfTestState = handleSelfTestReadScheduledRunsRecord(); - break; -#endif - - case NVDATAMGMT_SELF_TEST_STATE_READ_LOG_RECORD: - nvDataMgmtSelfTestState = handleSelfTestReadLogRecord(); - break; - -#ifdef _HD_ - case NVDATAMGMT_SELF_TEST_STATE_READ_TREATMENT_TIME: - nvDataMgmtSelfTestState = handleSelfTestReadHDTreatmentTime(); - break; -#endif -#ifdef _DG_ - case NVDATAMGMT_SELF_TEST_STATE_READ_WATER_CONSUMPTION: - nvDataMgmtSelfTestState = handleSelfTestReadDGWaterConsumption(); - break; - - case NVDATAMGMT_SELF_TEST_STATE_READ_DG_HEATERS_INFO: - nvDataMgmtSelfTestState = handleSelfTestReadDGHeatersInfo(); - break; -#endif - case NVDATAMGMT_SELF_TEST_STATE_READ_SW_CONFIG_RECORD: - nvDataMgmtSelfTestState = handleSelfTestReadSWConfigRecord(); - break; - case NVDATAMGMT_SELF_TEST_STATE_READ_RECORDS: nvDataMgmtSelfTestState = handleSelfTestReadRecords(); break; @@ -794,7 +726,7 @@ #else SET_ALARM_WITH_2_U32_DATA ( ALARM_ID_HD_SOFTWARE_FAULT, SW_FAULT_ID_NVDATAMGMT_INVALID_SELF_TEST_STATE, nvDataMgmtSelfTestState ); #endif - nvDataMgmtSelfTestState = NVDATAMGMT_SELF_TEST_STATE_COMPLETE; + nvDataMgmtSelfTestState = NVDATAMGMT_SELF_TEST_STATE_COMPLETE; nvDataMgmtSelfTestResult = SELF_TEST_STATUS_FAILED; break; } @@ -1544,404 +1476,65 @@ enqueueRecordJob( NVDATAMGMT_WRITE, NVDATAMGMT_RTC, NVDATAMGMT_HEATERS_INFO_RECORD ); status = TRUE; } - } return status; } +#endif /*********************************************************************//** * @brief - * The resetNVDataMgmtPostState function resets the NV data management POST - * state. + * The getNVRecordsReadStatus function returns the status of the NV POST. * @details Inputs: none - * @details Outputs: nvDataMgmtSelfTestState - * @param none - * @return none + * @details Outputs: none + * @return recordsReadStatus *************************************************************************/ -void resetNVDataMgmtPostState( void ) +NVDATAMGMT_RECORDS_READ_STATUS getNVRecordsReadStatus( void ) { - nvDataMgmtSelfTestState = NVDATAMGMT_SELF_TEST_STATE_START; + return recordsReadStatus; } -#endif /*********************************************************************//** * @brief - * The handleSelfTestStart enables the EEPROM bank sectors. - * @details Inputs: currentTime - * @details Outputs: currentTime - * @return next state - *************************************************************************/ -static NVDATAMGMT_SELF_TEST_STATE_T handleSelfTestStart ( void ) -{ - NVDATAMGMT_SELF_TEST_STATE_T state = NVDATAMGMT_SELF_TEST_STATE_START; - - /*if ( FAPI_CHECK_FSM_READY_BUSY == Fapi_Status_FsmReady ) - { - PROCESS_RECORD_SPECS_T specs = RECORDS_SPECS [ NVDATAMGMT_CALIBRATION_RECORD ]; - U32 startAddress = specs.startAddress; - U08* bufferAddress = specs.structAddressPtr; - U32 maxBufferLength = specs.maxReadBufferSize / EEPROM_OPS_SIZE_OF_CONVERTER; - - Fapi_doMarginRead( (U32*)startAddress, (U32*)bufferAddress, maxBufferLength, Fapi_NormalRead ); - currentTime = getMSTimerCount(); - state = NVDATAMGMT_SELF_TEST_STATE_READ_CAL_RECORD; - } - - return state;*/ - return NVDATAMGMT_SELF_TEST_STATE_READ_RECORDS; -} - -/*********************************************************************//** - * @brief - * The handleSelfTestReadCalibrationRecord reads the calibration record - * from EEPROM. - * @details Inputs: currentTime - * @details Outputs: currentTime - * @return next state - *************************************************************************/ -static NVDATAMGMT_SELF_TEST_STATE_T handleSelfTestReadCalibrationRecord ( void ) -{ - NVDATAMGMT_SELF_TEST_STATE_T state = NVDATAMGMT_SELF_TEST_STATE_READ_CAL_RECORD; - BOOL timeoutStatus = didCommandTimeout ( ALARM_ID_NVDATA_EEPROM_OPS_FAILURE, (U08*)&state ); - - if ( FAPI_CHECK_FSM_READY_BUSY == Fapi_Status_FsmReady || timeoutStatus == TRUE ) - { - PROCESS_RECORD_SPECS_T specs = RECORDS_SPECS [ NVDATAMGMT_SYSTEM_RECORD ]; - U32 startAddress = specs.startAddress; - U08* bufferAddress = specs.structAddressPtr; - U32 maxBufferLength = specs.maxReadBufferSize / EEPROM_OPS_SIZE_OF_CONVERTER; - - Fapi_doMarginRead( (U32*)startAddress, (U32*)bufferAddress, maxBufferLength, Fapi_NormalRead ); - currentTime = getMSTimerCount(); - state = NVDATAMGMT_SELF_TEST_STATE_READ_SYS_RECORD; - } - - return state; -} - -/*********************************************************************//** - * @brief - * The handleSelfTestReadSystemRecord reads the system record from EEPROM. - * @details Inputs: currentTime, calibrationRecord - * @details Outputs: currentTime - * @return next state - *************************************************************************/ -static NVDATAMGMT_SELF_TEST_STATE_T handleSelfTestReadSystemRecord ( void ) -{ - NVDATAMGMT_SELF_TEST_STATE_T state = NVDATAMGMT_SELF_TEST_STATE_READ_SYS_RECORD; - BOOL timeoutStatus = didCommandTimeout ( ALARM_ID_NVDATA_EEPROM_OPS_FAILURE, (U08*)&state ); - - if ( ( Fapi_Status_FsmReady == FAPI_CHECK_FSM_READY_BUSY ) || ( TRUE == timeoutStatus ) ) - { - if ( RTC_RAM_STATE_READY == getRTCRAMState() ) - { - PROCESS_RECORD_SPECS_T specs = RECORDS_SPECS[ NVDATAMGMT_SERVICE_RECORD ]; - U32 startAddress = specs.startAddress; - U32 maxBufferLength = specs.maxReadBufferSize; - - currentTime = getMSTimerCount(); - readFromRAM( startAddress, maxBufferLength ); - -#ifndef BOARD_WITH_NO_HARDWARE - state = NVDATAMGMT_SELF_TEST_STATE_READ_SERVICE_RECORD; -#else - state = NVDATAMGMT_SELF_TEST_STATE_CHECK_CRC; -#endif - } - } - - return state; -} - -/*********************************************************************//** - * @brief - * The handleSelfTestReadServiceRecord reads the service record from RTC - * RAM. - * @details Inputs: currentTime - * @details Outputs: currentTime - * @return next state - *************************************************************************/ -static NVDATAMGMT_SELF_TEST_STATE_T handleSelfTestReadServiceRecord ( void ) -{ - NVDATAMGMT_SELF_TEST_STATE_T state = NVDATAMGMT_SELF_TEST_STATE_READ_SERVICE_RECORD; - BOOL timeoutStatus = didCommandTimeout ( ALARM_ID_RTC_RAM_OPS_ERROR, (U08*)&state ); - - if ( ( RTC_RAM_STATUS_IDLE == getRTCRAMStatus() ) || ( TRUE == timeoutStatus ) ) - { - PROCESS_RECORD_SPECS_T specs = RECORDS_SPECS[ NVDATAMGMT_SERVICE_RECORD ]; - U08* bufferAddress = specs.structAddressPtr; - U32 maxBufferLength = specs.maxReadBufferSize; - - getDataFromRAM( bufferAddress, maxBufferLength ); - -#ifdef _DG_ - if ( RTC_RAM_STATE_READY == getRTCRAMState() ) - { - PROCESS_RECORD_SPECS_T specs = RECORDS_SPECS[ NVDATAMGMT_SCHEDULED_RUNS_RECORD ]; - U32 startAddress = specs.startAddress; - U32 maxBufferLength = specs.maxReadBufferSize; - - currentTime = getMSTimerCount(); - readFromRAM( startAddress, maxBufferLength ); - - state = NVDATAMGMT_SELF_TEST_STATE_READ_SCHEDULED_RUNS_RECORD; - } -#endif -#ifdef _HD_ - if ( RTC_RAM_STATE_READY == getRTCRAMState() ) - { - PROCESS_RECORD_SPECS_T specs = RECORDS_SPECS[ NVDATAMGMT_SW_CONFIG_RECORD ]; - U32 startAddress = specs.startAddress; - U32 maxBufferLength = specs.maxReadBufferSize; - - currentTime = getMSTimerCount(); - readFromRAM( startAddress, maxBufferLength ); - } - - state = NVDATAMGMT_SELF_TEST_STATE_READ_SW_CONFIG_RECORD; -#endif - } - - return state; -} - -#ifdef _DG_ -/*********************************************************************//** - * @brief - * The handleSelfTestReadScheduledRunsRecord reads the scheduled runs - * from RTC RAM (only DG for now). - * @details Inputs: currentTime, serviceRecord - * @details Outputs: currentTime - * @return next state - *************************************************************************/ -static NVDATAMGMT_SELF_TEST_STATE_T handleSelfTestReadScheduledRunsRecord( void ) -{ - NVDATAMGMT_SELF_TEST_STATE_T state = NVDATAMGMT_SELF_TEST_STATE_READ_SCHEDULED_RUNS_RECORD; - BOOL timeoutStatus = didCommandTimeout( ALARM_ID_RTC_RAM_OPS_ERROR, (U08*)&state ); - - if ( ( RTC_RAM_STATUS_IDLE == getRTCRAMStatus() ) || ( TRUE == timeoutStatus ) ) - { - PROCESS_RECORD_SPECS_T specs = RECORDS_SPECS[ NVDATAMGMT_SCHEDULED_RUNS_RECORD ]; - U08* bufferAddress = specs.structAddressPtr; - U32 maxBufferLength = specs.maxReadBufferSize; - - getDataFromRAM( bufferAddress, maxBufferLength ); - - state = NVDATAMGMT_SELF_TEST_STATE_READ_DG_HEATERS_INFO; - } - - return state; -} -#endif -#ifdef _HD_ -/*********************************************************************//** - * @brief - * The handleSelfTestReadHDTreatmentTime reads the HD treatment time - * from RTC RAM. - * @details Inputs: currentTime, treatmentTimeRecord - * @details Outputs: currentTime - * @return next state - *************************************************************************/ -static NVDATAMGMT_SELF_TEST_STATE_T handleSelfTestReadHDTreatmentTime ( void ) -{ - NVDATAMGMT_SELF_TEST_STATE_T state = NVDATAMGMT_SELF_TEST_STATE_READ_TREATMENT_TIME; - BOOL timeoutStatus = didCommandTimeout( ALARM_ID_RTC_RAM_OPS_ERROR, (U08*)&state ); - - // If the RTC RAM is ready, read the results - if ( getRTCRAMStatus() == RTC_RAM_STATUS_IDLE || timeoutStatus == TRUE ) - { - // If the RAM is ready, request a read for the log records (RAM) - if ( getRTCRAMState() == RTC_RAM_STATE_READY ) - { - PROCESS_RECORD_SPECS_T specs = RECORDS_SPECS[ NVDATAMGMT_USAGE_INFO_RECORD ]; - U08* bufferAddress = specs.structAddressPtr; - U32 maxBufferLength = specs.maxReadBufferSize; - - getDataFromRAM ( bufferAddress, maxBufferLength ); - - state = NVDATAMGMT_SELF_TEST_STATE_CHECK_CRC; - } - } - - return state; -} -#endif -#ifdef _DG_ -/*********************************************************************//** - * @brief - * The handleSelfTestReadDGHeatersInfo reads the DG heaters information - * from RTC RAM. + * The enqueueNVRecordsForRead checks whether there are enough queue jobs and + * it is in mode fault to enqueue all the read records. * @details Inputs: none - * @details Outputs: dgHeatersInfoGroup + * @details Outputs: none * @return next state *************************************************************************/ -static NVDATAMGMT_SELF_TEST_STATE_T handleSelfTestReadDGHeatersInfo( void ) +BOOL enqueueNVRecordsForRead( void ) { - NVDATAMGMT_SELF_TEST_STATE_T state = NVDATAMGMT_SELF_TEST_STATE_READ_DG_HEATERS_INFO; - BOOL timeoutStatus = didCommandTimeout( ALARM_ID_RTC_RAM_OPS_ERROR, (U08*)&state ); + BOOL status = FALSE; - if ( ( RTC_RAM_STATUS_IDLE == getRTCRAMStatus() ) || ( TRUE == timeoutStatus ) ) + // Check if there are enough jobs available in the queue to schedule all the jobs and the we are in the fault mode. + // The fault mode is required to make sure an NV record read is not requested in other modes. Only if the software is + // in the fault mode but the POST was not completed + if ( ( getAvailableRecordQueueCount() > NUM_OF_NVDATMGMT_RECORDS_JOBS ) && ( DG_MODE_FAUL == getCurrentOperationMode() ) ) { - PROCESS_RECORD_SPECS_T specs = RECORDS_SPECS[ NVDATAMGMT_HEATERS_INFO_RECORD ]; - U08* bufferAddress = specs.structAddressPtr; - U32 maxBufferLength = specs.maxReadBufferSize; + enqueuePOSTReadRecords(); - getDataFromRAM( bufferAddress, maxBufferLength ); - - // Calculate the CRC of the record - U16 calcCRC = crc16 ( specs.structAddressPtr, specs.sizeofJob - sizeof(U16) ); - U16 recordCRC = *(U16*)specs.structCRCPtr; - - // If the CRCs are not equal, set the average fill flow to 0.0 - // Otherwise, keep the data so it can be used - if ( calcCRC != recordCRC ) - { - dgHeatersInfoGroup.dgHeatersInfo.averageFillFlow = 0.0; - dgHeatersInfoGroup.crc = recordCRC; - } - else - { - memcpy( &dgHeatersInfoGroup, bufferAddress, sizeof( DG_HEATERS_INFO_GROUP_T ) ); - } - - if ( RTC_RAM_STATE_READY == getRTCRAMState() ) - { - PROCESS_RECORD_SPECS_T specs = RECORDS_SPECS[ NVDATAMGMT_SW_CONFIG_RECORD ]; - U32 startAddress = specs.startAddress; - U32 maxBufferLength = specs.maxReadBufferSize; - - currentTime = getMSTimerCount(); - readFromRAM( startAddress, maxBufferLength ); - - state = NVDATAMGMT_SELF_TEST_STATE_READ_SW_CONFIG_RECORD; - } + status = TRUE; + nvDataMgmtSelfTestState = NVDATAMGMT_SELF_TEST_STATE_READ_RECORDS; } - return state; + return status; } /*********************************************************************//** * @brief - * The handleSelfTestReadDGWaterConsumption reads the DG water consumption - * from RTC RAM. - * @details Inputs: currentTime, waterConsumptionRecord - * @details Outputs: currentTime - * @return next state - *************************************************************************/ -static NVDATAMGMT_SELF_TEST_STATE_T handleSelfTestReadDGWaterConsumption ( void ) -{ - NVDATAMGMT_SELF_TEST_STATE_T state = NVDATAMGMT_SELF_TEST_STATE_READ_WATER_CONSUMPTION; - BOOL timeoutStatus = didCommandTimeout ( ALARM_ID_RTC_RAM_OPS_ERROR, (U08*)&state ); - - // If the RAM is ready, request a read for water consumption - if ( ( RTC_RAM_STATUS_IDLE == getRTCRAMStatus() ) || ( TRUE == timeoutStatus ) ) - { - PROCESS_RECORD_SPECS_T specs = RECORDS_SPECS[ NVDATAMGMT_USAGE_INFO_RECORD ]; - U08* bufferAddress = specs.structAddressPtr; - U32 maxBufferLength = specs.maxReadBufferSize; - - getDataFromRAM ( bufferAddress, maxBufferLength ); - - if ( RTC_RAM_STATE_READY == getRTCRAMState() ) - { - // TODO Phase 1B - //readFromRAM ( LOG_RECORD_START_ADDRESS, sizeof(LOG_RECORD_T) ); - //currentTime = getMSTimerCount(); - state = NVDATAMGMT_SELF_TEST_STATE_CHECK_CRC; - } - } - - return state; -} -#endif - -/*********************************************************************//** - * @brief - * The handleSelfTestReadLogRecord reads the log record from RTC RAM. - * @details Inputs: currentTime, logRecord, mfgRecord - * @details Outputs: currentTime - * @return next state - *************************************************************************/ -static NVDATAMGMT_SELF_TEST_STATE_T handleSelfTestReadLogRecord ( void ) -{ - NVDATAMGMT_SELF_TEST_STATE_T state = NVDATAMGMT_SELF_TEST_STATE_READ_LOG_RECORD; - BOOL timeoutStatus = didCommandTimeout ( ALARM_ID_RTC_RAM_OPS_ERROR, (U08*)&state ); - - // If the RAM is in Idle, read the log records - if ( getRTCRAMStatus() == RTC_RAM_STATUS_IDLE || timeoutStatus == TRUE ) - { - // TODO enable the logs once we get back to logging the data in the future phases - //U32 len = sizeof(MFG_RECORD_T) / sizeof(U32); - //U32 *addr = (U32*)&mfgRecord; - - getDataFromRAM ( (U08*)&logRecord, sizeof(LOG_RECORD_T) ); - - currentTime = getMSTimerCount(); - // Get ready for reading the manufacturing record - // TODO uncomment. currently not working This section is for phase 1B - //Fapi_doMarginRead( (U32*)BANK7_SECTOR0_START_ADDRESS, addr, len, Fapi_NormalRead ); - state = NVDATAMGMT_SELF_TEST_STATE_READ_SYS_RECORD; - } - - return state; -} - -/*********************************************************************//** - * @brief - * The handleSelfTestReadSWConfigRecord reads the software configurations - * record from RTC RAM. + * The handleSelfTestReadRecords waits for the records to be read * @details Inputs: none * @details Outputs: none * @return next state *************************************************************************/ -static NVDATAMGMT_SELF_TEST_STATE_T handleSelfTestReadSWConfigRecord( void ) -{ - NVDATAMGMT_SELF_TEST_STATE_T state = NVDATAMGMT_SELF_TEST_STATE_READ_SW_CONFIG_RECORD; - BOOL timeoutStatus = didCommandTimeout( ALARM_ID_RTC_RAM_OPS_ERROR, (U08*)&state ); - PROCESS_RECORD_SPECS_T specs = RECORDS_SPECS[ NVDATAMGMT_SW_CONFIG_RECORD ]; - -#ifndef _RELEASE_ - if ( ( RTC_RAM_STATUS_IDLE == getRTCRAMStatus() ) || ( TRUE == timeoutStatus ) ) - { - U08* bufferAddress = specs.structAddressPtr; - U32 maxBufferLength = specs.maxReadBufferSize; - - getDataFromRAM( bufferAddress, maxBufferLength ); - - if ( RTC_RAM_STATE_READY == getRTCRAMState() ) - { - PROCESS_RECORD_SPECS_T specs = RECORDS_SPECS[ NVDATAMGMT_USAGE_INFO_RECORD ]; - U32 startAddress = specs.startAddress; - U32 maxBufferLength = specs.maxReadBufferSize; - - currentTime = getMSTimerCount(); - readFromRAM( startAddress, maxBufferLength ); - -#ifdef _DG_ - state = NVDATAMGMT_SELF_TEST_STATE_READ_WATER_CONSUMPTION; -#endif -#ifdef _HD_ - state = NVDATAMGMT_SELF_TEST_STATE_READ_TREATMENT_TIME; -#endif - } - } -#else - // It is a release so set all the software configurations to 0 to be considered as disable - memset( specs.structAddressPtr, 0, specs.sizeofJob ); - state = NVDATAMGMT_SELF_TEST_STATE_CHECK_CRC; -#endif - - return state; -} - static NVDATAMGMT_SELF_TEST_STATE_T handleSelfTestReadRecords( void ) { NVDATAMGMT_SELF_TEST_STATE_T state = NVDATAMGMT_SELF_TEST_STATE_READ_RECORDS; if ( TRUE == isRecordQueueEmpty() ) { - state = NVDATAMGMT_SELF_TEST_STATE_CHECK_CRC; + recordsReadStatus = NVDATAMGMT_RECORDS_READ; + state = NVDATAMGMT_SELF_TEST_STATE_CHECK_CRC; } return state; @@ -1958,13 +1551,13 @@ static NVDATAMGMT_SELF_TEST_STATE_T handleSelfTestCheckCRC ( void ) { NVDATAMGMT_SELF_TEST_STATE_T state = NVDATAMGMT_SELF_TEST_STATE_COMPLETE; - BOOL haveCalGroupsPassed = TRUE; - BOOL haveRecordsPassed = TRUE; - BOOL hasSystemRecordPassed = TRUE; - BOOL hasServiceRecordPassed = TRUE; - BOOL hasSWConfigRecordPassed = TRUE; + BOOL haveCalGroupsPassed = TRUE; + BOOL haveRecordsPassed = TRUE; + BOOL hasSystemRecordPassed = TRUE; + BOOL hasServiceRecordPassed = TRUE; + BOOL hasSWConfigRecordPassed = TRUE; - // Check the integrity of the records as a whole. Check the upper layer CRC + recordsReadStatus = NVDATAMGMT_RECORDS_CRC_CHECKED; haveRecordsPassed = areRecordsValid(); #ifdef _DG_ @@ -2023,26 +1616,6 @@ /*********************************************************************//** * @brief - * The handleExecWaitForPostState waits for POST to be completed. - * @details Inputs: nvDataMgmtSelfTestState - * @details Outputs: none - * @return next state - *************************************************************************/ -static NVDATAMGMT_EXEC_STATE_T handleExecWaitForPostState ( void ) // TODO remove this function -{ - NVDATAMGMT_EXEC_STATE_T state = NVDATAMGMT_EXEC_STATE_WAIT_FOR_POST; - - if ( nvDataMgmtSelfTestState == NVDATAMGMT_SELF_TEST_STATE_COMPLETE ) - { - state = NVDATAMGMT_EXEC_STATE_IDLE; - } - - //return state; - return NVDATAMGMT_EXEC_STATE_IDLE; -} - -/*********************************************************************//** - * @brief * The handleExecIdleState checks if the queue is empty and if it is not * empty, it sets the state of the job. * @details Inputs: powerOffIsImminent @@ -3555,7 +3128,7 @@ if ( calcCRC != recordCRC ) { // CRC did not pass so set all values to default - record->volume = FLUSH_LINES_DEFAULT_VOLUME_L; + record->volume = DEFAULT_FLUSH_LINES_VOLUME_L; record->calibrationTime = RECORD_DEFAULT_TIME; record->crc = crc16 ( (U08*)record, sizeof(DG_DRAIN_LINE_VOLUME_T) - sizeof(U16) ); @@ -3643,10 +3216,10 @@ if ( calcCRC != recordCRC ) { // CRC did not pass so set all values to default - record->acidFullBottleVolumeML = RECORD_DEFAULT_ACID_BOTTLE_VOL_ML; - record->acidConductivityUSPerCM = RECORD_DEFAULT_ACID_COND_US_PER_CM; - record->acidBottleTemperature = RECORD_DEFAULT_ACID_BOTTLE_TEMP_C; - record->acidConcMixRatio = ACID_CONC_DEFAULT_MIXING_RATIO; + record->acidFullBottleVolumeML = DEFAULT_ACID_BOTTLE_VOL_ML; + record->acidConductivityUSPerCM = DEFAULT_ACID_COND_US_PER_CM; + record->acidBottleTemperature = DEFAULT_ACID_BOTTLE_TEMP_C; + record->acidConcMixRatio = DEFAULT_ACID_CONC_MIXING_RATIO; record->calibrationTime = RECORD_DEFAULT_TIME; record->crc = crc16 ( (U08*)record, sizeof( DG_ACID_CONCENTRATE_T ) - sizeof( U16 ) ); status = FALSE; @@ -3673,10 +3246,10 @@ if ( calcCRC != recordCRC ) { // CRC did not pass so set all values to default - record->bicarbStartVolumeML = RECORD_DEFAULT_BICARB_BOTTLE_VOL_ML; - record->bicarbConductivityUSPerCM = RECORD_DEFAULT_BICARB_COND_US_PER_CM; - record->bicarbBottleTemperature = RECORD_DEFAULT_BICARB_BOTTLE_TEMP_C; - record->bicarbConcMixRatio = BICARB_CONC_DEFAULT_MIXING_RATIO; + record->bicarbStartVolumeML = DEFAULT_BICARB_BOTTLE_VOL_ML; + record->bicarbConductivityUSPerCM = DEFAULT_BICARB_COND_US_PER_CM; + record->bicarbBottleTemperature = DEFAULT_BICARB_BOTTLE_TEMP_C; + record->bicarbConcMixRatio = DEFAULT_BICARB_CONC_MIXING_RATIO; record->calibrationTime = RECORD_DEFAULT_TIME; record->crc = crc16 ( (U08*)record, sizeof( DG_BICARB_CONCENTRATE_T ) - sizeof( U16 ) ); status = FALSE; @@ -3795,9 +3368,9 @@ if ( calcCRC != recordCRC ) { // CRC did not pass so set all values to default - record->reservoirTempTauCPerMin = RESERVOIR_TEMPERATURE_TAU_C_PER_MIN; - record->ultrafilterTempTauCPerMin = ULTRAFILTER_TEMPERATURE_TAU_C_PER_MIN; - record->ultrafilterVolmL = ULTRAFILTER_VOLUME_ML; + record->reservoirTempTauCPerMin = DEFAULT_RSRVR_TEMP_TAU_C_PER_MIN; + record->ultrafilterTempTauCPerMin = DEFAULT_UF_TEMP_TAU_C_PER_MIN; + record->ultrafilterVolmL = DEFAULT_UF_VOLUME_ML; record->calibrationTime = RECORD_DEFAULT_TIME; record->crc = crc16 ( (U08*)record, sizeof(DG_HEATING_CAL_RECORD_T) - sizeof(U16) ); @@ -4205,13 +3778,29 @@ return status; } +/*********************************************************************//** + * @brief + * The enqueuePOSTReadRecords enqueues the NV records to be read during POST. + * @details Inputs: none + * @details Outputs: recordsReadStatus + * @return none + *************************************************************************/ static void enqueuePOSTReadRecords( void ) { enqueueRecordJob( NVDATAMGMT_READ, NVDATAMGMT_EEPROM, NVDATAMGMT_CALIBRATION_RECORD ); enqueueRecordJob( NVDATAMGMT_READ, NVDATAMGMT_EEPROM, NVDATAMGMT_SYSTEM_RECORD ); enqueueRecordJob( NVDATAMGMT_READ, NVDATAMGMT_RTC, NVDATAMGMT_SERVICE_RECORD ); + enqueueRecordJob( NVDATAMGMT_READ, NVDATAMGMT_RTC, NVDATAMGMT_USAGE_INFO_RECORD ); +#ifdef _DG_ + enqueueRecordJob( NVDATAMGMT_READ, NVDATAMGMT_RTC, NVDATAMGMT_SCHEDULED_RUNS_RECORD ); +#endif + +#ifndef _RELEASE_ enqueueRecordJob( NVDATAMGMT_READ, NVDATAMGMT_RTC, NVDATAMGMT_SW_CONFIG_RECORD ); - //enqueueRecordJob( NVDATAMGMT_READ, NVDATAMGMT_RTC, NVDATAMGMT_USAGE_INFO_RECORD ); +#endif + + // Set the status to records were queued successfully + recordsReadStatus = NVDATAMGMT_RECORDS_QUEUED; } /**@}*/