Index: NVDataMgmt.c =================================================================== diff -u -r6c744022aca4f4ec8c3bcf581da066487db3aa82 -r169b3efe1866e53f4d31db0cde00594a7c8ad210 --- NVDataMgmt.c (.../NVDataMgmt.c) (revision 6c744022aca4f4ec8c3bcf581da066487db3aa82) +++ NVDataMgmt.c (.../NVDataMgmt.c) (revision 169b3efe1866e53f4d31db0cde00594a7c8ad210) @@ -206,13 +206,13 @@ static SELF_TEST_STATUS_T NVDataMgmtSelfTestResult = SELF_TEST_STATUS_IN_PROGRESS; static U32 bootloaderFlag = 0; static BOOL hasLogRecordCRCFailed = FALSE; -static BOOL hasCommandFailed = FALSE; +static BOOL hasCommandTimedout = FALSE; static U32 currentTime = 0; // Private functions static NVDATAMGMT_SELF_TEST_STATE_T handleSelfTestStart ( void ); -static NVDATAMGMT_SELF_TEST_STATE_T handleSelfTestEnableEEPROM ( void ); // TODO Add to AE +static NVDATAMGMT_SELF_TEST_STATE_T handleSelfTestEnableEEPROM ( void ); static NVDATAMGMT_SELF_TEST_STATE_T handleSelfTestReadBootloaderFlag ( void ); static NVDATAMGMT_SELF_TEST_STATE_T handleSelfTestReadHDTreatmentTime ( void ); static NVDATAMGMT_SELF_TEST_STATE_T handleSelfTestReadDGWaterConsumption ( void ); @@ -244,6 +244,10 @@ static U32 getAvailableQueueCount ( void ); static BOOL enqueueBank7Sector0Records ( void ); +// Helper functions + +static BOOL didCommandTimeout ( ALARM_ID_T alarm, U08* state ); + // REMOVE THIS CODE //static U08 tempBufferForTest[5] = {'5', 'Y', 'I', 'D', 'P'}; static U08 readBufferForTest [ 36 ]; @@ -693,6 +697,8 @@ Fapi_enableEepromBankSectors( BANK7_SECTOR_0_31_ENABLE_BIT_MASK, BANK7_SECTOR_32_63_ENABLE_BIT_MASK ); + // Get the time to check for timeout + currentTime = getMSTimerCount(); return state; } @@ -710,8 +716,9 @@ static NVDATAMGMT_SELF_TEST_STATE_T handleSelfTestEnableEEPROM ( void ) { NVDATAMGMT_SELF_TEST_STATE_T state = NVDATAMGMT_SELF_TEST_STATE_ENABLE_EEPROM; + BOOL timeoutStatus = didCommandTimeout ( ALARM_ID_NVDATA_EEPROM_OPS_FAILURE, (U08*)&state ); - if ( FAPI_CHECK_FSM_READY_BUSY == Fapi_Status_FsmReady ) + if ( FAPI_CHECK_FSM_READY_BUSY == Fapi_Status_FsmReady || timeoutStatus == TRUE ) { // Enable was successful, Request a read for bootloader if ( getRTCRAMState() == RTC_RAM_STATE_READY ) @@ -739,9 +746,10 @@ static NVDATAMGMT_SELF_TEST_STATE_T handleSelfTestReadBootloaderFlag ( void ) { NVDATAMGMT_SELF_TEST_STATE_T state = NVDATAMGMT_SELF_TEST_STATE_READ_BOOTLOADER_FLAG; + BOOL timeoutStatus = didCommandTimeout ( ALARM_ID_RTC_RAM_OPS_ERROR, (U08*)&state ); // If the read for bootloader is done, read it - if ( getRTCRAMStatus() == RTC_RAM_STATUS_IDLE ) + if ( getRTCRAMStatus() == RTC_RAM_STATUS_IDLE || timeoutStatus == TRUE ) { getDataFromRAM( (U08*)&bootloaderFlag, BOOTLOADER_FLAG_LENGTH_BYTES ); // If the device is HD, read treatment time, @@ -762,17 +770,6 @@ state = NVDATAMGMT_SELF_TEST_STATE_READ_WATER_CONSUMPTION; #endif } - /*else if ( didTimeout( currentTime, COMMAND_TIME_OUT ) ) - { - SET_ALARM_WITH_2_U32_DATA( ALARM_ID_RTC_RAM_OPS_ERROR, NVDATAMGMT_SELF_TEST_STATE_READ_BOOTLOADER_FLAG, getRTCRAMStatus() ); - hasCommandFailed = TRUE; -#ifdef _HD_ - state = NVDATAMGMT_SELF_TEST_STATE_READ_TREATMENT_TIME; -#else - state = NVDATAMGMT_SELF_TEST_STATE_READ_WATER_CONSUMPTION; -#endif - isServiceOnEntry= TRUE; - }*/ return state; } @@ -790,27 +787,20 @@ 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 ) + if ( getRTCRAMStatus() == RTC_RAM_STATUS_IDLE || timeoutStatus == TRUE ) { getDataFromRAM ( (U08*)&treatmentTimeRecord, sizeof(TREATMENT_TIME_RECORD_T) ); - // If the RAM is ready, request a read for the log records (RAM) if ( getRTCRAMState() == RTC_RAM_STATE_READY ) { readFromRAM ( LOG_RECORD_START_ADDRESS, sizeof(LOG_RECORD_T) ); + currentTime = getMSTimerCount(); state = NVDATAMGMT_SELF_TEST_STATE_READ_LOG_RECORD; } } - /*else if ( didTimeout( currentTime, COMMAND_TIME_OUT ) ) - { - Fapi_StatusType status; - status = FAPI_GET_FSM_STATUS; - SET_ALARM_WITH_2_U32_DATA( ALARM_ID_NVDATA_EEPROM_OPS_FAILURE, NVDATAMGMT_SELF_TEST_STATE_READ_TREATMENT_TIME, - 0 ); - hasCommandFailed = TRUE; - }*/ return state; } @@ -828,14 +818,16 @@ 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 ( getRTCRAMStatus() == RTC_RAM_STATUS_IDLE ) + if ( getRTCRAMStatus() == RTC_RAM_STATUS_IDLE || timeoutStatus == TRUE ) { getDataFromRAM ( (U08*)&waterConsumptionRecord, sizeof(WATER_CONSUMPTION_RECORD_T) ); if ( getRTCRAMState() == RTC_RAM_STATE_READY ) { readFromRAM ( LOG_RECORD_START_ADDRESS, sizeof(LOG_RECORD_T) ); + currentTime = getMSTimerCount(); } state = NVDATAMGMT_SELF_TEST_STATE_READ_LOG_RECORD; } @@ -855,12 +847,14 @@ 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 ) + if ( getRTCRAMStatus() == RTC_RAM_STATUS_IDLE || timeoutStatus == TRUE ) { getDataFromRAM ( (U08*)&logRecord, sizeof(LOG_RECORD_T) ); + currentTime = getMSTimerCount(); // Get ready for reading the manufacturing record Fapi_doMarginRead ( (U32*)BANK7_SECTOR0_START_ADDRESS, (U32*)&mfgRecord, sizeof(MFG_RECORD_T), Fapi_NormalRead ); @@ -883,10 +877,12 @@ static NVDATAMGMT_SELF_TEST_STATE_T handleSelfTestReadMfgRecord ( void ) { NVDATAMGMT_SELF_TEST_STATE_T state = NVDATAMGMT_SELF_TEST_STATE_READ_MFG_RECORD; + BOOL timeoutStatus = didCommandTimeout ( ALARM_ID_NVDATA_EEPROM_OPS_FAILURE, (U08*)&state ); // Wait for the read from EEPROM to be successful - if ( FAPI_CHECK_FSM_READY_BUSY == Fapi_Status_FsmReady ) + if ( FAPI_CHECK_FSM_READY_BUSY == Fapi_Status_FsmReady || timeoutStatus == TRUE ) { + currentTime = getMSTimerCount(); // Send the read command for calibration record Fapi_doMarginRead ( (U32*)CALIBRATION_RECORD_START_ADDRESS, (U32*)&calibrationRecord, sizeof(CALIBRATION_RECORD_T), Fapi_NormalRead ); @@ -909,13 +905,15 @@ 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 the EEPROM read was successful, request a read from RAM to // read the service record - if ( FAPI_CHECK_FSM_READY_BUSY == Fapi_Status_FsmReady ) + if ( FAPI_CHECK_FSM_READY_BUSY == Fapi_Status_FsmReady || timeoutStatus == TRUE ) { if ( getRTCRAMState() == RTC_RAM_STATE_READY ) { + currentTime = getMSTimerCount(); readFromRAM( SERVICE_DATE_START_ADDRESS, sizeof(SERVICE_RECORD_T) ); state = NVDATAMGMT_SELF_TEST_STATE_READ_SERVICE_RECORD; } @@ -937,8 +935,9 @@ 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 ( getRTCRAMStatus() == RTC_RAM_STATUS_IDLE ) + if ( getRTCRAMStatus() == RTC_RAM_STATUS_IDLE || timeoutStatus == TRUE ) { getDataFromRAM ( (U08*)&serviceRecord, sizeof(SERVICE_RECORD_T) ); state = NVDATAMGMT_SELF_TEST_STATE_CHECK_CRC; @@ -986,7 +985,14 @@ if ( calcCRC != recordCRC ) { hasCRCPassed = FALSE; + // CRC for the log record has failed. The flag will be set to true + // The log header will be set to full by having the record count be at + // maximum number of counts (1536 in this case) and the read index be a 0 + // of the beginning of the log sectors hasLogRecordCRCFailed = TRUE; + logRecord.logHeader.recordCount = MAX_NUM_OF_DATA_LOGS_IN_SECTOR3; + logRecord.logHeader.nextReadIndex = 0; + logRecord.logHeader.nextReadIndex = 0; } // Check CRC for manufacturing record calcCRC = crc16 ( (U08*)&mfgRecord.mfgData, sizeof(MFG_DATA_T) ); @@ -1012,7 +1018,7 @@ hasCRCPassed = FALSE; SET_ALARM_WITH_2_U32_DATA( ALARM_ID_NVDATA_SRVC_RECORD_CRC_ERROR, recordCRC, calcCRC ); } - if ( hasCRCPassed || !hasCommandFailed ) + if ( hasCRCPassed || !hasCommandTimedout ) { NVDataMgmtSelfTestResult = SELF_TEST_STATUS_PASSED; } @@ -1104,12 +1110,14 @@ if ( ops == NVDATAMGMT_WRITE && location == NVDATAMGMT_EEPROM ) { + currentTime = getMSTimerCount(); Fapi_issueProgrammingCommand ( startAddress, currentJob.buffer, length, 0x00, 0, Fapi_DataOnly ); state = NVDATAMGMT_EXEC_STATE_WRITE_TO_EEPROM; } else if ( ops == NVDATAMGMT_READ && location == NVDATAMGMT_EEPROM ) { + currentTime = getMSTimerCount(); Fapi_doMarginRead ( startAddress, (U32*)( currentJob.externalAddress->externalBuffer ), length, Fapi_NormalRead ); // Change the status to in progress until the read operation is done @@ -1118,13 +1126,15 @@ } else if ( ops == NVDATAMGMT_ERASE_SECTOR ) { + currentTime = getMSTimerCount(); Fapi_issueAsyncCommandWithAddress ( Fapi_EraseSector, startAddress ); state = NVDATAMGMT_EXEC_STATE_ERASE_EEPROM; } else if ( ops == NVDATAMGMT_WRITE && location == NVDATAMGMT_RTC ) { if ( getRTCRAMState() == RTC_RAM_STATE_READY ) { + currentTime = getMSTimerCount(); writeToRAM ( (U32)startAddress, currentJob.buffer, length ); } state = NVDATAMGMT_EXEC_STATE_WRITE_TO_RTC; @@ -1133,6 +1143,7 @@ { if ( getRTCRAMState() == RTC_RAM_STATE_READY ) { + currentTime = getMSTimerCount(); readFromRAM( (U32)startAddress, length ); currentJob.externalAddress->status = NVDATAMGMT_READ_IN_PROGRESS; } @@ -1156,8 +1167,9 @@ static NVDATAMGMT_EXEC_STATE_T handleExecWriteToEEPROMState ( void ) { NVDATAMGMT_EXEC_STATE_T state = NVDATAMGMT_EXEC_STATE_WRITE_TO_EEPROM; + BOOL timeoutStatus = didCommandTimeout ( ALARM_ID_NVDATA_EEPROM_OPS_FAILURE, (U08*)&state ); - if ( FAPI_CHECK_FSM_READY_BUSY == Fapi_Status_FsmReady ) + if ( FAPI_CHECK_FSM_READY_BUSY == Fapi_Status_FsmReady || timeoutStatus == TRUE ) { state = NVDATAMGMT_EXEC_STATE_IDLE; } @@ -1178,8 +1190,9 @@ static NVDATAMGMT_EXEC_STATE_T handleExecReadFromEEPROMState ( void ) { NVDATAMGMT_EXEC_STATE_T state = NVDATAMGMT_EXEC_STATE_READ_FROM_EEPROM; + BOOL timeoutStatus = didCommandTimeout ( ALARM_ID_NVDATA_EEPROM_OPS_FAILURE, (U08*)&state ); - if ( FAPI_CHECK_FSM_READY_BUSY == Fapi_Status_FsmReady ) + if ( FAPI_CHECK_FSM_READY_BUSY == Fapi_Status_FsmReady || timeoutStatus == TRUE ) { currentJob.externalAddress->status = NVDATAMGMT_READ_COMPLETE; state = NVDATAMGMT_EXEC_STATE_IDLE; @@ -1201,8 +1214,9 @@ static NVDATAMGMT_EXEC_STATE_T handleExecEraseState ( void ) { NVDATAMGMT_EXEC_STATE_T state = NVDATAMGMT_EXEC_STATE_ERASE_EEPROM; + BOOL timeoutStatus = didCommandTimeout ( ALARM_ID_NVDATA_EEPROM_OPS_FAILURE, (U08*)&state ); - if ( FAPI_CHECK_FSM_READY_BUSY == Fapi_Status_FsmReady ) + if ( FAPI_CHECK_FSM_READY_BUSY == Fapi_Status_FsmReady || timeoutStatus == TRUE ) { state = NVDATAMGMT_EXEC_STATE_IDLE; } @@ -1224,8 +1238,9 @@ static NVDATAMGMT_EXEC_STATE_T handleExecWriteToRAMState ( void ) { NVDATAMGMT_EXEC_STATE_T state = NVDATAMGMT_EXEC_STATE_WRITE_TO_RTC; + BOOL timeoutStatus = didCommandTimeout ( ALARM_ID_RTC_RAM_OPS_ERROR, (U08*)&state ); - if ( getRTCRAMStatus() == RTC_RAM_STATUS_IDLE ) + if ( getRTCRAMStatus() == RTC_RAM_STATUS_IDLE || timeoutStatus == TRUE ) { state = NVDATAMGMT_EXEC_STATE_IDLE; } @@ -1248,8 +1263,9 @@ static NVDATAMGMT_EXEC_STATE_T handleExecReadFromRAMState ( void ) { NVDATAMGMT_EXEC_STATE_T state = NVDATAMGMT_EXEC_STATE_READ_FROM_RTC; + BOOL timeoutStatus = didCommandTimeout ( ALARM_ID_RTC_RAM_OPS_ERROR, (U08*)&state ); - if ( getRTCRAMStatus() == RTC_RAM_STATUS_IDLE ) + if ( getRTCRAMStatus() == RTC_RAM_STATUS_IDLE || timeoutStatus == TRUE ) { getDataFromRAM( currentJob.externalAddress->externalBuffer, currentJob.length ); currentJob.externalAddress->status = NVDATAMGMT_READ_COMPLETE; @@ -1359,7 +1375,7 @@ * @param none * @return U32 (opsStartAddress) *************************************************************************/ -static U32 prepareReadLogJobAndGetStartAddress( void ) +static U32 prepareReadLogJobAndGetStartAddress ( void ) { // The write address is calculated using the next write index and is and offset from // the start of sector 1. Sectors 1,2, and 3 have been allocated for logging data @@ -1562,3 +1578,32 @@ return status; } + +/************************************************************************* + * @brief didCommandTimedout + * The didCommandTimedout checks whether the a command whether RTC RAM or + * EEPROM has timedout. If it has timedout, it sets the alarm and turns + * flag to TRUE + * @details + * Inputs : ALARM_ID_T (alarm), U08* state (pointer to the state) + * Outputs : BOOL + * @param none + * @return BOOL + *************************************************************************/ +static BOOL didCommandTimeout ( ALARM_ID_T alarm, U08* state ) +{ + /* + * NOTE: The state is a pointer so it can cover both the self test + * states and exec states + */ + BOOL status = FALSE; + + if ( didTimeout( currentTime, COMMAND_TIME_OUT ) ) + { + SET_ALARM_WITH_2_U32_DATA( alarm, *state, 0 ); + hasCommandTimedout = TRUE; + status = TRUE; + } + + return status; +} Index: NVDataMgmt.h =================================================================== diff -u -r6c744022aca4f4ec8c3bcf581da066487db3aa82 -r169b3efe1866e53f4d31db0cde00594a7c8ad210 --- NVDataMgmt.h (.../NVDataMgmt.h) (revision 6c744022aca4f4ec8c3bcf581da066487db3aa82) +++ NVDataMgmt.h (.../NVDataMgmt.h) (revision 169b3efe1866e53f4d31db0cde00594a7c8ad210) @@ -75,6 +75,10 @@ SELF_TEST_STATUS_T execNVDataMgmtSelfTest ( void ); +BOOL setBootloaderFlag ( U32 flag ); + +U32 getBootloaderFlag ( void ); + BOOL setMfgData ( MFG_DATA_T data ); void getMfgData ( U08* buffer ); @@ -95,12 +99,12 @@ U32 getWaterConsumption ( void ); +BOOL setDisinfectionDate ( char date ); // TODO ADD TO AE + +void getDisinfectionDate ( void ); // TODO ADD TO AE + BOOL writeLogData ( U08* data, U32 length ); BOOL readLogData ( READ_DATA_T* buffer, U32 length ); -BOOL setBootloaderFlag ( U32 flag ); - -U32 getBootloaderFlag ( void ); - #endif /* FWCOMMON_NVDATAMGMT_H_ */