/************************************************************************** * * Copyright (c) 2026-2027 Diality Inc. - All Rights Reserved. * * THIS CODE MAY NOT BE COPIED OR REPRODUCED IN ANY FORM, IN PART OR IN * WHOLE, WITHOUT THE EXPLICIT PERMISSION OF THE COPYRIGHT OWNER. * * @file NVMsgQ.h * * @author (original) Arpita Srivastava * @date (original) 31-Mar-2026 * ***************************************************************************/ #ifndef _NV_MSG_Q_H_ #define _NV_MSG_Q_H_ #include "Common.h" #include "DDDefs.h" #include "NVDriver.h" /** * @defgroup NVMsgQ NVMsgQ * @brief * * @addtogroup NVMsgQ * @{ */ // ********** public definitions ********** #define NV_RECORD_SLOT_SIZE 4096 ///< Size of each NV record slot (4KB) #define SYSTEM_RECORD_OFFSET (0U * NV_RECORD_SLOT_SIZE) ///< Offset of system record within sector #define SERVICE_RECORD_OFFSET (0U * NV_RECORD_SLOT_SIZE) ///< Offset of service record within sector #define CAL_RECORD_OFFSET (1U * NV_RECORD_SLOT_SIZE) ///< Offset of calibration record within sector #define INSTIT_RECORD_OFFSET (0U * NV_RECORD_SLOT_SIZE) ///< Offset of institutional record within sector #define USAGE_RECORD_OFFSET (0U * NV_RECORD_SLOT_SIZE) ///< Offset of usage record within sector #define SYSTEM_RECORD_NV_MEM_START_ADDRESS ( BANK7_SECTOR0_START_ADDRESS + SYSTEM_RECORD_OFFSET ) ///< Start address of system record in NV memory #define SERVICE_RECORD_NV_MEM_START_ADDRESS ( BANK7_SECTOR1_START_ADDRESS + SERVICE_RECORD_OFFSET ) ///< Start address of service record in NV memory #define CAL_RECORD_NV_MEM_START_ADDRESS ( BANK7_SECTOR1_START_ADDRESS + CAL_RECORD_OFFSET ) ///< Start address of calibration record in NV memory #define INSTIT_RECORD_NV_MEM_START_ADDRESS ( BANK7_SECTOR2_START_ADDRESS + INSTIT_RECORD_OFFSET ) ///< Start address of institutional record in NV memory #define USAGE_INFO_START_ADDRESS ( BANK7_SECTOR3_START_ADDRESS + USAGE_RECORD_OFFSET ) ///< Start address of usage info record in NV memory #define MAX_NUM_OF_RECORD_IN_A_SECTOR 2 ///< Maximum number of records stored in one sector #define MIN_JOBS_NEEDED_TO_WRITE_A_RECORD ( MAX_NUM_OF_RECORD_IN_A_SECTOR * 2 ) ///< Minimum queue jobs to erase and write one record #define MIN_JOBS_NEEDED_TO_WRITE_ALL_RECORDS ( NUM_OF_NVM_RECORD_TYPES * 2 ) ///< Minimum queue jobs to erase and write all records #define MIN_JOBS_NEEDED_TO_READ_ALL_RECORDS ( NUM_OF_NVM_RECORD_TYPES ) ///< Minimum queue jobs to read all records /// NVM records read status typedef enum NVM_NV_Records_Read_Status { NVM_RECORDS_NOT_STARTED = 0, ///< NVM records not started. NVM_RECORDS_QUEUED, ///< NVM records queued. NVM_RECORDS_READ, ///< NVM records read. NVM_RECORDS_CRC_CHECKED, ///< NVM records CRC checked. NUM_OF_NVM_READ_RECORDS_STATES, ///< Number of NVM read records states. } NVM_RECORDS_READ_STATUS_T; // ********** public function prototypes ********** void initNVMsgQ ( void ); void execNVMProcessRecord( void ); // Record operations queue functions void enqueueRecordJob( NVM_OPERATION_T ops, NVM_RECORD_TYPE_T job ); void dequeueRecordJob( void ); BOOL isRecordQueueEmpty( void ); BOOL isRecordQueueFull( void ); U32 getAvailableRecordQueueCount( void ); BOOL enqueueEraseAndWriteSector( NVM_RECORD_TYPE_T job ); BOOL enqueuewriteAllRecords( void ); BOOL enqueueReadAllRecords( void ); BOOL isNewCalibrationRecordAvailable( void ); void updateNewNVRecordAvailableFlag( BOOL value ); void updateRecordReadStatus( NVM_RECORDS_READ_STATUS_T status ); void updateRecordStartTimer( U32 value ); PROCESS_RECORD_JOB_T getCurrentProcessRecordJob ( void ); BOOL testDDGetNVRecord( MESSAGE_T *message ); BOOL testDDSetNVSystemRecord( MESSAGE_T *message ); BOOL testDDSetNVServiceRecord( MESSAGE_T *message ); BOOL testDDSetNVCalibrationRecord( MESSAGE_T *message ); BOOL testDDSetNVInstitutionalRecord( MESSAGE_T *message ); BOOL testDDSetNVUsageInfoRecord( MESSAGE_T *message ); /**@}*/ #endif /* _NV_MSG_Q_H_ */