Index: firmware/App/Services/NVMsgQ.c =================================================================== diff -u -rb442c93bd71649c2e7473c7013d32c534334cdcb -r724f9a0cf2b603e988a519420bf95f4aa4da4b93 --- firmware/App/Services/NVMsgQ.c (.../NVMsgQ.c) (revision b442c93bd71649c2e7473c7013d32c534334cdcb) +++ firmware/App/Services/NVMsgQ.c (.../NVMsgQ.c) (revision 724f9a0cf2b603e988a519420bf95f4aa4da4b93) @@ -89,12 +89,12 @@ static PROCESS_RECORD_STATE_T nvDataMgmtExecProcessRecordState; ///< NVDataMgmt exec process record state. static RECEIVE_RECORD_STATE_T nvDataMgmtExecReceiveRecordState; ///< NVDataMgmt exec receive record state. static RECORD_JOBS_STATE_T nvPublishRecordState; -static BOOL hasPublishRecordBeenRequested[ NUM_OF_NVDATMGMT_RECORDS_JOBS ]; ///< Record state machine publish request flag. +static BOOL hasPublishRecordBeenRequested[ NUM_OF_NVDATMGMT_RECORDS_JOBS ]; ///< Record state machine publish request flag. static U32 recordPublishMsgCount; ///< Record data publish message counter. static U32 recordPublishTotalMsgs; ///< Record data total number of messages to be sent. static U32 recordSendDataIntervalCounter; ///< Record data send to CAN bust interval counter. -static U32 previousRecordMessageNum; ///< Record previous message number. -static U32 recordUpdateAddress; ///< DG record update address for all the write operations. +static U32 previousRecordMessageNum; ///< Record previous message number. +static U32 recordUpdateAddress; ///< DD record update address for all the write operations. static U32 recordReceiveStartTime; ///< Time stamp the calibration/service was received. static U32 newCalStartTimer; ///< New calibration availability start timer. @@ -104,7 +104,7 @@ static PROCESS_RECORD_STATE_T handleExecProcessRecordIdleState( void ); static PROCESS_RECORD_STATE_T handleExecProcessRecordSendRecordState( void ); static BOOL sendDDRecord( MSG_ID_T msgId, U32 payloadCurrNum, U32 payloadTotalNum, U32 length, U08* calRcrdAddress ); -//static RECORD_JOBS_STATE_T getNVMRecordJobState( MSG_ID_T msgID ); +static RECORD_JOBS_STATE_T getNVMRecordJobState( MSG_ID_T msgID ); static MSG_ID_T getNVMRecordResponseMsgId (RECORD_JOBS_STATE_T job ); static void monitorNewCalSignal( void ); @@ -120,12 +120,10 @@ nvDataMgmtExecProcessRecordState = NVDATAMGMT_PROCESS_RECORD_STATE_IDLE; nvDataMgmtExecReceiveRecordState = NVDATAMGMT_RECEIVE_RECORD_IDLE; - nvPublishRecordState = NVDATAMGMT_CALIBRATION_RECORD; + nvPublishRecordState = NVDATAMGMT_CALIBRATION_RECORD; hasPublishRecordBeenRequested[ NVDATAMGMT_CALIBRATION_RECORD ] = FALSE; hasPublishRecordBeenRequested[ NVDATAMGMT_SYSTEM_RECORD ] = FALSE; hasPublishRecordBeenRequested[ NVDATAMGMT_SERVICE_RECORD ] = FALSE; - hasPublishRecordBeenRequested[ NVDATAMGMT_SCHEDULED_RUNS_RECORD ] = FALSE; - hasPublishRecordBeenRequested[ NVDATAMGMT_HEATERS_INFO_RECORD ] = FALSE; hasPublishRecordBeenRequested[ NVDATAMGMT_USAGE_INFO_RECORD ] = FALSE; #ifndef _RELEASE_ hasPublishRecordBeenRequested[ NVDATAMGMT_SW_CONFIG_RECORD ] = FALSE; @@ -204,7 +202,7 @@ if ( TRUE == hasPublishRecordBeenRequested[ nvPublishRecordState ] ) { - recordToPublish = nvPublishRecordState; + recordToPublish = ( RECORD_JOBS_STATE_T )nvPublishRecordState; // Set the publish flag to FALSE hasPublishRecordBeenRequested[ recordToPublish ] = FALSE; @@ -224,10 +222,10 @@ state = NVDATAMGMT_PROCESS_RECORD_STATE_SEND_RECORD; } - nvPublishRecordState = nvPublishRecordState + 1; + nvPublishRecordState = ( RECORD_JOBS_STATE_T )( nvPublishRecordState + 1 ); if(nvPublishRecordState >= NUM_OF_NVDATMGMT_RECORDS_JOBS) { - nvPublishRecordState = 0; + nvPublishRecordState = NVDATAMGMT_CALIBRATION_RECORD; } return state; @@ -451,11 +449,11 @@ // verify payload length if ( 1 == message->hdr.payloadLen ) { - job = message->payload[ 0 ]; + job = ( RECORD_JOBS_STATE_T )message->payload[ 0 ]; // job = getNVMRecordJobState( msgID ); - if ( ( job >= NVDATAMGMT_CALIBRATION_RECORD ) && ( job < NUM_OF_NVDATMGMT_RECORDS_JOBS ) - && ( NVDATAMGMT_PROCESS_RECORD_STATE_IDLE == nvDataMgmtExecProcessRecordState ) ) + if ( ( job < NUM_OF_NVDATMGMT_RECORDS_JOBS ) && + ( NVDATAMGMT_PROCESS_RECORD_STATE_IDLE == nvDataMgmtExecProcessRecordState ) ) { // Check if the state machine is in idle state and then set the request // if ( NVDATAMGMT_PROCESS_RECORD_STATE_IDLE == nvDataMgmtExecProcessRecordState ) @@ -472,6 +470,53 @@ } /*********************************************************************//** +* @brief +* The handleSetDGSystemRecord function handles a request to set the DG +* system data record. +* @details Inputs: none +* @details Outputs: message handled +* @param message a pointer to the message to handle +* @return none +*************************************************************************/ +BOOL testDDSetNVRecord( MESSAGE_T *message ) +{ + BOOL status = FALSE; + U32 currentMessage; + U32 totalMessages; + U32 payloadLength; + + U08* payloadPtr = message->payload; + U08 minPayloadLen = ( sizeof(currentMessage) + sizeof(totalMessages) + sizeof(payloadLength) ); + MSG_ID_T msgID = (MSG_ID_T)message->hdr.msgID; + RECORD_JOBS_STATE_T job = getNVMRecordJobState( msgID ); + + BOOL isValidPayloadLen = ( message->hdr.payloadLen >= minPayloadLen); + + BOOL isServiceJob = ( ( job == NVDATAMGMT_CALIBRATION_RECORD ) || + ( job == NVDATAMGMT_SYSTEM_RECORD ) || + ( job == NVDATAMGMT_SERVICE_RECORD ) ); + + BOOL isServiceMode = ( DD_MODE_SERV == getCurrentOperationMode() ); + + // To proceed, the payload length should be valid. And, if it is a service job, then DD mode should also be in service. + if ( ( TRUE == isValidPayloadLen ) && ( ( FALSE == isServiceJob ) || ( TRUE == isServiceMode ) ) ) + { + memcpy(¤tMessage, payloadPtr, sizeof(U32)); + payloadPtr += sizeof(U32); + + memcpy(&totalMessages, payloadPtr, sizeof(U32)); + payloadPtr += sizeof(U32); + + memcpy(&payloadLength, payloadPtr, sizeof(U32)); + payloadPtr += sizeof(U32); + + status = receiveRecordFromDialin( job, currentMessage, totalMessages, payloadLength, payloadPtr ); + } + + return status; +} + +/*********************************************************************//** * @brief * The receiveRecordFromDialin function receives the record that has been sent * from Dialin and if the CRCs passed, it schedules a write to the NV data. @@ -544,7 +589,7 @@ isNewCalAvailable = TRUE; // Update the event of the received record that has been accepted - SEND_EVENT_WITH_2_U32_DATA( recordSpec.nvEvent, 0, 0 ) + SEND_EVENT_WITH_2_U32_DATA( recordSpec.nvEvent, 0, 0 ); // Done with receiving data, go back to idle nvDataMgmtExecReceiveRecordState = NVDATAMGMT_RECEIVE_RECORD_IDLE; @@ -587,50 +632,50 @@ payload.payloadCurrNum = payloadCurrNum; payload.payloadTotalNum = payloadTotalNum; payload.length = length; - memcpy(payload.data, recordAddress, length); - result = sendMessage( msgId, COMM_BUFFER_OUT_DD_CAN_PC, (U08 *)&payload, payloadLen); + memcpy( payload.data, recordAddress, length ); + result = sendMessage( msgId, COMM_BUFFER_OUT_DD_CAN_PC, (U08 *)&payload, payloadLen ); return result; } -//static RECORD_JOBS_STATE_T getNVMRecordJobState( MSG_ID_T msgID ) -//{ -// RECORD_JOBS_STATE_T job; -// -// switch( msgID ) -// { -// case MSG_ID_DD_NVM_GET_CALIBRATION_RECORD: -// job = NVDATAMGMT_CALIBRATION_RECORD; -// break; -// -// case MSG_ID_DD_NVM_GET_SYSTEM_RECORD: -// job = NVDATAMGMT_SYSTEM_RECORD; -// break; -// -// case MSG_ID_DD_NVM_GET_SERVICE_RECORD: -// job = NVDATAMGMT_SERVICE_RECORD; -// break; -// -// case MSG_ID_DD_NVM_GET_USAGE_INFO_RECORD: -// job = NVDATAMGMT_USAGE_INFO_RECORD; -// break; -// -//#ifndef _RELEASE_ -// case MSG_ID_DD_NVM_GET_SW_CONFIG_RECORD: -// job = NVDATAMGMT_SW_CONFIG_RECORD; -// break; -//#endif -// -// default: -// // Software Fault -// break; -// -// } -// -// return job; -//} +static RECORD_JOBS_STATE_T getNVMRecordJobState( MSG_ID_T msgID ) +{ + RECORD_JOBS_STATE_T job; -static MSG_ID_T getNVMRecordResponseMsgId(RECORD_JOBS_STATE_T job ) + switch( msgID ) + { + case MSG_ID_DD_NVM_SET_CALIBRATION_RECORD: + job = NVDATAMGMT_CALIBRATION_RECORD; + break; + + case MSG_ID_DD_NVM_SET_SYSTEM_RECORD: + job = NVDATAMGMT_SYSTEM_RECORD; + break; + + case MSG_ID_DD_NVM_SET_SERVICE_RECORD: + job = NVDATAMGMT_SERVICE_RECORD; + break; + + case MSG_ID_DD_NVM_SET_USAGE_INFO_RECORD: + job = NVDATAMGMT_USAGE_INFO_RECORD; + break; + +#ifndef _RELEASE_ + case MSG_ID_DD_NVM_SET_SW_CONFIG_RECORD: + job = NVDATAMGMT_SW_CONFIG_RECORD; + break; +#endif + + default: + // Software Fault + break; + + } + + return job; +} + +static MSG_ID_T getNVMRecordResponseMsgId( RECORD_JOBS_STATE_T job ) { MSG_ID_T msgID;