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