Index: NVJobQ.c =================================================================== diff -u -rebf3ea1b1f09cb5a21abde6f6106c9213df5afff -rcfda869b0370c1444bcc16e91f6e3a42bb4d1f03 --- NVJobQ.c (.../NVJobQ.c) (revision ebf3ea1b1f09cb5a21abde6f6106c9213df5afff) +++ NVJobQ.c (.../NVJobQ.c) (revision cfda869b0370c1444bcc16e91f6e3a42bb4d1f03) @@ -72,18 +72,27 @@ * recordQueueCount * @param ops memory operation (i.e write, read) * @param job type of job (i.e write calibration data) - * @return none + * @return TRUE if the record job was enqueued successfully, + * FALSE if the queue is full. *************************************************************************/ -void enqueueRecordJob( NVM_OPERATION_T ops, NVM_RECORD_TYPE_T job ) +BOOL enqueueRecordJob( NVM_OPERATION_T ops, NVM_RECORD_TYPE_T job ) { + BOOL status = FALSE; PROCESS_RECORD_JOB_T currentJob; - currentJob.memoryOperation = ops; - currentJob.recordJob = job; - recordJobQueue[ recordQueueRearIndex ] = currentJob; + if ( FALSE == isRecordQueueFull() ) + { + currentJob.memoryOperation = ops; + currentJob.recordJob = job; + recordJobQueue[ recordQueueRearIndex ] = currentJob; - recordQueueCount++; - recordQueueRearIndex = INC_WRAP( recordQueueRearIndex, 0, QUEUE_MAX_SIZE - 1 ); + recordQueueCount++; + recordQueueRearIndex = INC_WRAP( recordQueueRearIndex, 0, QUEUE_MAX_SIZE - 1 ); + + status = TRUE; + } + + return status; } /*********************************************************************//** @@ -95,10 +104,12 @@ * recordJobQueue * @details \b Outputs: recordQueueFrontIndex, recordQueueCount, * recordCurrentJob - * @return none + * @return TRUE if the record was dequeued successfully; + * FALSE if the queue is empty. *************************************************************************/ -void dequeueRecordJob( void ) +BOOL dequeueRecordJob( void ) { + BOOL status = FALSE; U32 tempIndex; _disable_IRQ(); @@ -108,12 +119,15 @@ { recordQueueFrontIndex = INC_WRAP( recordQueueFrontIndex, 0, QUEUE_MAX_SIZE - 1 ); recordCurrentJob = recordJobQueue[ tempIndex ]; + status = TRUE; } if ( recordQueueCount > 0 ) { recordQueueCount--; } _enable_IRQ(); + + return status; } /*********************************************************************//** @@ -185,20 +199,19 @@ if ( getAvailableRecordQueueCount() >= MIN_JOBS_NEEDED_TO_WRITE_A_RECORD ) { + status = TRUE; // Service and Calibration record are stored in the same sector. if ( ( job == NVM_SERVICE_RECORD ) || ( job == NVM_CALIBRATION_RECORD ) ) { - enqueueRecordJob( NVM_OPERATION_ERASE, NVM_SERVICE_RECORD ); - enqueueRecordJob( NVM_OPERATION_WRITE, NVM_SERVICE_RECORD ); - enqueueRecordJob( NVM_OPERATION_WRITE, NVM_CALIBRATION_RECORD ); + status &= enqueueRecordJob( NVM_OPERATION_ERASE, NVM_SERVICE_RECORD ); + status &= enqueueRecordJob( NVM_OPERATION_WRITE, NVM_SERVICE_RECORD ); + status &= enqueueRecordJob( NVM_OPERATION_WRITE, NVM_CALIBRATION_RECORD ); } else { - enqueueRecordJob( NVM_OPERATION_ERASE, job ); - enqueueRecordJob( NVM_OPERATION_WRITE, job ); + status &= enqueueRecordJob( NVM_OPERATION_ERASE, job ); + status &= enqueueRecordJob( NVM_OPERATION_WRITE, job ); } - - status = TRUE; } return status; @@ -220,20 +233,19 @@ if ( getAvailableRecordQueueCount() >= MIN_JOBS_NEEDED_TO_WRITE_ALL_RECORDS ) { NVM_RECORD_TYPE_T record; + status = TRUE; // Erase all the sectors for ( record = NVM_SYSTEM_RECORD; record < NUM_OF_NVM_RECORD_TYPES; record++ ) { - enqueueRecordJob( NVM_OPERATION_ERASE, record ); + status &= enqueueRecordJob( NVM_OPERATION_ERASE, record ); } // Write all the records for ( record = NVM_SYSTEM_RECORD; record < NUM_OF_NVM_RECORD_TYPES; record++ ) { - enqueueRecordJob( NVM_OPERATION_WRITE, record ); + status &= enqueueRecordJob( NVM_OPERATION_WRITE, record ); } - - status = TRUE; } return status; @@ -257,10 +269,8 @@ { for ( record = NVM_SYSTEM_RECORD; record < NUM_OF_NVM_RECORD_TYPES; record++ ) { - enqueueRecordJob( NVM_OPERATION_READ, record ); + status = enqueueRecordJob( NVM_OPERATION_READ, record ); } - - status = TRUE; } // Set the status to records were queued successfully Index: NVJobQ.h =================================================================== diff -u -rebf3ea1b1f09cb5a21abde6f6106c9213df5afff -rcfda869b0370c1444bcc16e91f6e3a42bb4d1f03 --- NVJobQ.h (.../NVJobQ.h) (revision ebf3ea1b1f09cb5a21abde6f6106c9213df5afff) +++ NVJobQ.h (.../NVJobQ.h) (revision cfda869b0370c1444bcc16e91f6e3a42bb4d1f03) @@ -51,8 +51,8 @@ void initNVJobQ( void ); // Record operations queue functions -void enqueueRecordJob( NVM_OPERATION_T ops, NVM_RECORD_TYPE_T job ); -void dequeueRecordJob( void ); +BOOL enqueueRecordJob( NVM_OPERATION_T ops, NVM_RECORD_TYPE_T job ); +BOOL dequeueRecordJob( void ); BOOL isRecordQueueEmpty( void ); BOOL isRecordQueueFull( void ); U32 getAvailableRecordQueueCount( void ); Index: NVMsgQ.c =================================================================== diff -u -rebf3ea1b1f09cb5a21abde6f6106c9213df5afff -rcfda869b0370c1444bcc16e91f6e3a42bb4d1f03 --- NVMsgQ.c (.../NVMsgQ.c) (revision ebf3ea1b1f09cb5a21abde6f6106c9213df5afff) +++ NVMsgQ.c (.../NVMsgQ.c) (revision cfda869b0370c1444bcc16e91f6e3a42bb4d1f03) @@ -58,14 +58,22 @@ * @details \b Outputs: requestQueue, * requestQueueRearIndex, requestQueueCount * @param request NV message request to be queued - * @return none + * @return TRUE if the NV message request was enqueued successfully, + * FALSE if the queue is full. *************************************************************************/ -void enqueueNVMsgRequest( NVM_MSG_REQUEST_Q_T request ) +BOOL enqueueNVMsgRequest( NVM_MSG_REQUEST_Q_T request ) { - requestQueue[ requestQueueRearIndex ] = request; + BOOL status = FALSE; - requestQueueCount++; - requestQueueRearIndex = INC_WRAP( requestQueueRearIndex, 0, QUEUE_MAX_SIZE - 1 ); + if ( FALSE == isNVMsgRequestQueueFull() ) + { + requestQueue[ requestQueueRearIndex ] = request; + requestQueueCount++; + requestQueueRearIndex = INC_WRAP( requestQueueRearIndex, 0, QUEUE_MAX_SIZE - 1 ); + status = TRUE; + } + + return status; } /*********************************************************************//** @@ -77,10 +85,12 @@ * requestQueue * @details \b Outputs: requestQueueFrontIndex, requestQueueCount, * currentNVMsgRequest - * @return none + * @return TRUE if the NV message request was dequeued successfully; + * FALSE if the queue is empty. *************************************************************************/ -void dequeueNVMsgRequest( void ) +BOOL dequeueNVMsgRequest( void ) { + BOOL status = FALSE; U32 tempIndex; _disable_IRQ(); @@ -89,13 +99,16 @@ if ( FALSE == isNVMsgRequestQueueEmpty() ) { requestQueueFrontIndex = INC_WRAP( requestQueueFrontIndex, 0, QUEUE_MAX_SIZE - 1 ); - currentNVMsgRequest = requestQueue[ tempIndex ]; + currentNVMsgRequest = requestQueue[ tempIndex ]; + status = TRUE; } if ( requestQueueCount > 0 ) { requestQueueCount--; } _enable_IRQ(); + + return status; } /*********************************************************************//** Index: NVMsgQ.h =================================================================== diff -u -rebf3ea1b1f09cb5a21abde6f6106c9213df5afff -rcfda869b0370c1444bcc16e91f6e3a42bb4d1f03 --- NVMsgQ.h (.../NVMsgQ.h) (revision ebf3ea1b1f09cb5a21abde6f6106c9213df5afff) +++ NVMsgQ.h (.../NVMsgQ.h) (revision cfda869b0370c1444bcc16e91f6e3a42bb4d1f03) @@ -43,15 +43,14 @@ { NVM_MSG_REQUEST_TYPE_T requestType; ///< Type of Request Received from UI NV_DATA_T recordType; ///< Type of Record for which Request was received - BOOL isIndexed; ///< TRUE if this record is indexed U32 idx; ///< Index value received with the request } NVM_MSG_REQUEST_Q_T; // ********** public function prototypes ********** void initNVMsgQ( void ); -void enqueueNVMsgRequest( NVM_MSG_REQUEST_Q_T request ); -void dequeueNVMsgRequest( void ); +BOOL enqueueNVMsgRequest( NVM_MSG_REQUEST_Q_T request ); +BOOL dequeueNVMsgRequest( void ); BOOL isNVMsgRequestQueueEmpty( void ); BOOL isNVMsgRequestQueueFull( void ); U32 getAvailableNVMsgRequestQueueCount( void );