Index: NVDataMgmt.c =================================================================== diff -u -rdd517da58c2ed6006d3b827876929fe2b99b7c37 -rd3cde5e8996177f4fef18929fe9595ae623ef3c5 --- NVDataMgmt.c (.../NVDataMgmt.c) (revision dd517da58c2ed6006d3b827876929fe2b99b7c37) +++ NVDataMgmt.c (.../NVDataMgmt.c) (revision d3cde5e8996177f4fef18929fe9595ae623ef3c5) @@ -67,9 +67,9 @@ #define MAX_HW_SERIAL_NUMBER_CHARACTERS 5U #define MAX_MFG_DATE_CHARACTERS 10U #define MAX_CRC_LENGTH_BYTES 2U -#define MAX_EEPROM_WRITE_BUFFER_BYTES 16U +#define MAX_EEPROM_WRITE_BUFFER_BYTES 16U -#define IDLE_TIME 20 // ms +//#define IDLE_TIME 10U // ms typedef enum NVDataMgmt_Self_Test_States @@ -87,10 +87,11 @@ { NVDATAMGMT_EXEC_STATE_WAIT_FOR_POST = 0, NVDATAMGMT_EXEC_STATE_IDLE, - NVDATAMGMT_EXEC_STATE_WRITE, - NVDATAMGMT_EXEC_STATE_READ, + NVDATAMGMT_EXEC_STATE_WRITE_TO_EEPROM, + NVDATAMGMT_EXEC_STATE_READ_FROM_EEPROM, NVDATAMGMT_EXEC_STATE_ERASE, - NVDATAMGMT_EXEC_STATE_WAIT, + NVDATAMGMT_EXEC_STATE_WRITE_TO_RTC, + NVDATAMGMT_EXEC_STATE_READ_FROM_RTC, NVDATAMGMT_EXEC_STATE_FAULT, NUM_OF_NVDATAMGMT_EXEC_STATES } NVDATAMGMT_EXEC_STATE_T; @@ -169,8 +170,10 @@ static NVDATAMGMT_EXEC_STATE_T handleExecReadState( void ); // Queue functions +static void setMemoryOpsStruct(NVDATAMGMT_OPERATION_STATE_T ops, NVDATAMGMT_LOCATION_STATE_T location, + U32 startAddress, U08* data, U32 length); static void enqueue( NVDATAMGMT_OPERATION_STATE_T ops, NVDATAMGMT_LOCATION_STATE_T location, - U32 startAddress, LOG_DATA_T* data, U32 length ); + U32 startAddress, U08* data, U32 length ); static void dequeue( void ); static BOOL isQueueEmpty ( void ); static U08 getQueueSize( void ); @@ -190,12 +193,10 @@ static SELF_TEST_STATUS_T NVDataMgmtSelfTestResult = SELF_TEST_STATUS_IN_PROGRESS; static BOOL isServiceOnEntry = TRUE; static U32 bootloaderFlag = 0; -static U32 waitTimer = 0; // REMOVE THIS CODE -static U08 tempBufferForTest[5] = {'5', 'Y', 'I', 'D', 'P'}; -static U08 readBufferForTest [ 8 ]; - +//static U08 tempBufferForTest[5] = {'5', 'Y', 'I', 'D', 'P'}; +//static U08 readBufferForTest [ 8 ]; // REMOVE THIS CODE /************************************************************************* @@ -302,11 +303,11 @@ { getDataFromRAM( readBuffer, LOG_RECORDS_LENGTH_BYTES ); logRecord.recordsCount = ( readBuffer [ BUFFER_INDEX_0 ] << SHIFT_8_BITS_FOR_BYTE_SHIFT ) - + readBuffer [ BUFFER_INDEX_1 ]; + + readBuffer [ BUFFER_INDEX_1 ]; logRecord.nextWriteIndex = ( readBuffer [ BUFFER_INDEX_2 ] << SHIFT_8_BITS_FOR_BYTE_SHIFT ) - + readBuffer [ BUFFER_INDEX_3 ]; + + readBuffer [ BUFFER_INDEX_3 ]; logRecord.nextReadIndex = ( readBuffer [ BUFFER_INDEX_4 ] << SHIFT_8_BITS_FOR_BYTE_SHIFT ) - + readBuffer [ BUFFER_INDEX_5 ]; + + readBuffer [ BUFFER_INDEX_5 ]; state = NVDATAMGMT_SELF_TEST_STATE_READ_MFG_RECORDS; isServiceOnEntry = TRUE; } @@ -460,7 +461,7 @@ NVDataMgmtExecState = handleExecIdleState(); break; - case NVDATAMGMT_EXEC_STATE_WRITE: + case NVDATAMGMT_EXEC_STATE_WRITE_TO_EEPROM: NVDataMgmtExecState = handleExecWriteState(); break; @@ -470,7 +471,7 @@ NVDataMgmtExecState = handleExecEraseState(); break; - case NVDATAMGMT_EXEC_STATE_READ: + case NVDATAMGMT_EXEC_STATE_READ_FROM_EEPROM: NVDataMgmtExecState = handleExecReadState(); break; @@ -496,16 +497,16 @@ { // TODO: REMOVE THIS CODE logData.epochTime = 1582583436; - logData.eventCode = NVDATAMGMT_MODE_CHANGE; + logData.eventCode = NVDATAMGMT_DEVICE_TURNED_ON; logData.subCode = 14587; logData.data1 = 2.4; logData.data2 = 13; - logData.data3 = 37.8; - logData.data4 = 125; - logData.data5 = 45.9; - enqueue(NVDATAMGMT_WRITE, NVDATAMGMT_EEPROM, BANK7_SECTOR1_START_ADDRESS, &logData, sizeof(LOG_DATA_T)); + logData.data3 = 223.58; + logData.data4 = 80.125; + logData.data5 = 68; + enqueue(NVDATAMGMT_WRITE, NVDATAMGMT_EEPROM, BANK7_SECTOR1_START_ADDRESS, (U08*)&logData, sizeof(LOG_DATA_T)); //enqueue(NVDATAMGMT_READ, NVDATAMGMT_EEPROM, BANK7_SECTOR1_START_ADDRESS, 0, 8); - //enqueue(NVDATAMGMT_WRITE, NVDATAMGMT_EEPROM, BANK7_SECTOR1_START_ADDRESS+20, &logData, sizeof(LOG_DATA_T)); + enqueue(NVDATAMGMT_WRITE, NVDATAMGMT_EEPROM, BANK7_SECTOR1_START_ADDRESS+0x50, (U08*)&logData, sizeof(LOG_DATA_T)); // TODO: REMOVE THIS CODE state = NVDATAMGMT_EXEC_STATE_IDLE; } @@ -521,33 +522,36 @@ static NVDATAMGMT_EXEC_STATE_T handleExecIdleState( void ) { NVDATAMGMT_EXEC_STATE_T state = NVDATAMGMT_EXEC_STATE_IDLE; - if ( isServiceOnEntry ) + if ( !isQueueEmpty() ) { - waitTimer = getMSTimerCount(); - isServiceOnEntry = FALSE; - } - if ( !isQueueEmpty() && didTimeout( waitTimer, IDLE_TIME ) ) - { NVDATAMGMT_OPERATION_STATE_T ops = jobQueue [ queueFrontIndex ].memoryOperation; - if ( ops == NVDATAMGMT_WRITE ) + NVDATAMGMT_LOCATION_STATE_T location = jobQueue [ queueFrontIndex ].memoryLocation; + if ( ops == NVDATAMGMT_WRITE && location == NVDATAMGMT_EEPROM ) { - state = NVDATAMGMT_EXEC_STATE_WRITE; + state = NVDATAMGMT_EXEC_STATE_WRITE_TO_EEPROM; } - else if ( ops == NVDATAMGMT_READ ) + else if ( ops == NVDATAMGMT_READ && location == NVDATAMGMT_EEPROM ) { - state = NVDATAMGMT_EXEC_STATE_READ; + state = NVDATAMGMT_EXEC_STATE_READ_FROM_EEPROM; } else if ( ops == NVDATAMGMT_ERASE ) { state = NVDATAMGMT_EXEC_STATE_ERASE; } - isServiceOnEntry = TRUE; + else if ( ops == NVDATAMGMT_WRITE && location == NVDATAMGMT_RTC ) + { + state = NVDATAMGMT_EXEC_STATE_WRITE_TO_RTC; + } + else if ( ops == NVDATAMGMT_READ && location == NVDATAMGMT_RTC ) + { + state = NVDATAMGMT_EXEC_STATE_READ_FROM_RTC; + } } return state; } static NVDATAMGMT_EXEC_STATE_T handleExecWriteState( void ) { - NVDATAMGMT_EXEC_STATE_T state = NVDATAMGMT_EXEC_STATE_WRITE; + NVDATAMGMT_EXEC_STATE_T state = NVDATAMGMT_EXEC_STATE_WRITE_TO_EEPROM; if ( isServiceOnEntry ) { // TODO: Convert the buffer to U08* @@ -557,7 +561,7 @@ 0x00, 0, Fapi_DataOnly ); isServiceOnEntry = FALSE; } - else if ( EEPROMStatus == Fapi_Status_Success ) + else if ( FAPI_CHECK_FSM_READY_BUSY == Fapi_Status_FsmReady ) { state = NVDATAMGMT_EXEC_STATE_IDLE; dequeue(); @@ -567,20 +571,17 @@ } static NVDATAMGMT_EXEC_STATE_T handleExecReadState( void ) { - NVDATAMGMT_EXEC_STATE_T state = NVDATAMGMT_EXEC_STATE_READ; + NVDATAMGMT_EXEC_STATE_T state = NVDATAMGMT_EXEC_STATE_READ_FROM_EEPROM; if ( isServiceOnEntry ) { EEPROMStatus = Fapi_doMarginRead ( jobQueue [ queueFrontIndex ].startAddress, (U32*)jobQueue [ queueFrontIndex ].buffer, jobQueue [ queueFrontIndex ].length, Fapi_NormalRead ); isServiceOnEntry = FALSE; } - else if ( EEPROMStatus == Fapi_Status_Success ) + else if ( FAPI_CHECK_FSM_READY_BUSY == Fapi_Status_FsmReady ) { state = NVDATAMGMT_EXEC_STATE_IDLE; - // REMOVE THIS CODE - //memcpy ( readBuffer, jobQueue [ queueRearIndex ].buffer, 16 ); - // REMVOE THIS CODE dequeue(); isServiceOnEntry = TRUE; } @@ -595,7 +596,7 @@ EEPROMStatus = Fapi_issueAsyncCommandWithAddress( Fapi_EraseSector, jobQueue [ queueFrontIndex ].startAddress ); isServiceOnEntry = FALSE; } - else if ( EEPROMStatus == Fapi_Status_Success ) + else if ( FAPI_CHECK_FSM_READY_BUSY == Fapi_Status_FsmReady ) { state = NVDATAMGMT_EXEC_STATE_IDLE; dequeue(); @@ -604,9 +605,20 @@ return state; } -static void enqueue( NVDATAMGMT_OPERATION_STATE_T ops, NVDATAMGMT_LOCATION_STATE_T location, - U32 startAddress, LOG_DATA_T* data, U32 length ) +static void setMemoryOpsStruct ( NVDATAMGMT_OPERATION_STATE_T ops, NVDATAMGMT_LOCATION_STATE_T location, + U32 startAddress, U08* data, U32 length ) { + queueRearIndex++; + jobQueue [ queueRearIndex ].memoryOperation = ops; + jobQueue [ queueRearIndex ].memoryLocation = location; + jobQueue [ queueRearIndex ].startAddress = (U32*)startAddress; + jobQueue [ queueRearIndex ].length = length; + memcpy ( jobQueue [ queueRearIndex ].buffer, data, length ); +} + +static void enqueue ( NVDATAMGMT_OPERATION_STATE_T ops, NVDATAMGMT_LOCATION_STATE_T location, + U32 startAddress, U08* data, U32 length ) +{ U32 quotient = 0; U32 modulus = 0; U08 i; @@ -616,36 +628,33 @@ startAddress == BANK7_SECTOR2_START_ADDRESS || startAddress == BANK7_SECTOR3_START_ADDRESS ) && ops == NVDATAMGMT_WRITE ) { - queueRearIndex++; - jobQueue [ queueRearIndex ].memoryOperation = NVDATAMGMT_ERASE; - jobQueue [ queueRearIndex ].memoryLocation = NVDATAMGMT_EEPROM; - jobQueue [ queueRearIndex ].startAddress = (U32*)startAddress; - memcpy ( jobQueue[ queueRearIndex ].buffer, 0, MEMORY_OPS_BUFFER_LENGTH ); - jobQueue[ queueRearIndex ].length = MEMORY_OPS_BUFFER_LENGTH; + setMemoryOpsStruct( NVDATAMGMT_ERASE, NVDATAMGMT_EEPROM, startAddress, 0, MEMORY_OPS_BUFFER_LENGTH ); } if ( length > MAX_EEPROM_WRITE_BUFFER_BYTES && ops == NVDATAMGMT_WRITE ) { quotient = length / MAX_EEPROM_WRITE_BUFFER_BYTES; modulus = length % MAX_EEPROM_WRITE_BUFFER_BYTES; for ( i = 0; i < quotient; i++ ) { - queueRearIndex++; + setMemoryOpsStruct( ops, location, ( startAddress + ( i * MAX_EEPROM_WRITE_BUFFER_BYTES ) ), + data + ( i * MAX_EEPROM_WRITE_BUFFER_BYTES ), MAX_EEPROM_WRITE_BUFFER_BYTES ); + /*queueRearIndex++; jobQueue [ queueRearIndex ].memoryOperation = ops; jobQueue [ queueRearIndex ].memoryLocation = location; - jobQueue [ queueRearIndex ].startAddress = (U32*)(startAddress + ( i * MAX_EEPROM_WRITE_BUFFER_BYTES )); + jobQueue [ queueRearIndex ].startAddress = (U32*)( startAddress + ( i * MAX_EEPROM_WRITE_BUFFER_BYTES )); jobQueue [ queueRearIndex ].length = MAX_EEPROM_WRITE_BUFFER_BYTES; - memcpy ( jobQueue [ queueRearIndex ].buffer, &(data) + ( i * MAX_EEPROM_WRITE_BUFFER_BYTES ), MAX_EEPROM_WRITE_BUFFER_BYTES ); - //&data[i * MAX_EEPROM_WRITE_BUFFER_BYTES ], MAX_EEPROM_WRITE_BUFFER_BYTES - + memcpy ( jobQueue [ queueRearIndex ].buffer, data + ( i * MAX_EEPROM_WRITE_BUFFER_BYTES ), MAX_EEPROM_WRITE_BUFFER_BYTES );*/ } if ( modulus != 0 ) { - queueRearIndex++; + setMemoryOpsStruct( ops, location, ( startAddress + ( quotient * MAX_EEPROM_WRITE_BUFFER_BYTES ), + data + ( quotient * MAX_EEPROM_WRITE_BUFFER_BYTES ), modulus ); + /*queueRearIndex++; jobQueue [ queueRearIndex ].memoryOperation = ops; jobQueue [ queueRearIndex ].memoryLocation = location; - jobQueue [ queueRearIndex ].startAddress = (U32*)(startAddress + ( quotient * MAX_EEPROM_WRITE_BUFFER_BYTES )); + jobQueue [ queueRearIndex ].startAddress = (U32*)( startAddress + ( quotient * MAX_EEPROM_WRITE_BUFFER_BYTES )); jobQueue [ queueRearIndex ].length = modulus; - memcpy ( jobQueue [ queueRearIndex ].buffer, &data[quotient * MAX_EEPROM_WRITE_BUFFER_BYTES], modulus ); + memcpy ( jobQueue [ queueRearIndex ].buffer, data + ( quotient * MAX_EEPROM_WRITE_BUFFER_BYTES ), modulus );*/ } } else @@ -655,7 +664,7 @@ jobQueue [ queueRearIndex ].memoryLocation = location; jobQueue [ queueRearIndex ].startAddress = (U32*)startAddress; jobQueue [ queueRearIndex ].length = length; - memcpy ( jobQueue [ queueRearIndex ].buffer, &data, length ); + memcpy ( jobQueue [ queueRearIndex ].buffer, data, length ); } if ( queueFrontIndex == QUEUE_EMPTY_INDEX ) {