Index: firmware/App/Drivers/NVDriver.h =================================================================== diff -u -r43e60a63eae841e599ff9106f43177a8f63d22be -r724f9a0cf2b603e988a519420bf95f4aa4da4b93 --- firmware/App/Drivers/NVDriver.h (.../NVDriver.h) (revision 43e60a63eae841e599ff9106f43177a8f63d22be) +++ firmware/App/Drivers/NVDriver.h (.../NVDriver.h) (revision 724f9a0cf2b603e988a519420bf95f4aa4da4b93) @@ -29,11 +29,6 @@ #define BANK7_SECTOR0_START_ADDRESS 0xF0200000 ///< Bank7 sector 0 start address. -#ifndef _RELEASE_ -#define SW_CONFIG_ENABLE_VALUE 1 ///< Software configuration enable. -#define SW_CONFIG_DISABLE_VALUE 0 ///< Software configuration disable. -#endif - /// NVDataMgmt memory operation modes enumeration. typedef enum NVDataMgmt_Operation { @@ -50,8 +45,6 @@ NVDATAMGMT_CALIBRATION_RECORD = 0, ///< NVDataMgmt process write calibration record. NVDATAMGMT_SYSTEM_RECORD, ///< NVDataMgmt process write system record. NVDATAMGMT_SERVICE_RECORD, ///< NVDataMgmt process service record. - NVDATAMGMT_SCHEDULED_RUNS_RECORD, ///< NVDataMgmt process scheduled runs record. - NVDATAMGMT_HEATERS_INFO_RECORD, ///< NVDataMgmt process heaters info record. NVDATAMGMT_USAGE_INFO_RECORD, ///< NVDataMgmt process usage info record. #ifndef _RELEASE_ NVDATAMGMT_SW_CONFIG_RECORD, ///< NVDataMgmt process software record. 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; Index: firmware/App/Services/NVMsgQ.h =================================================================== diff -u -rb442c93bd71649c2e7473c7013d32c534334cdcb -r724f9a0cf2b603e988a519420bf95f4aa4da4b93 --- firmware/App/Services/NVMsgQ.h (.../NVMsgQ.h) (revision b442c93bd71649c2e7473c7013d32c534334cdcb) +++ firmware/App/Services/NVMsgQ.h (.../NVMsgQ.h) (revision 724f9a0cf2b603e988a519420bf95f4aa4da4b93) @@ -29,15 +29,19 @@ // ********** public definitions ********** -#define MIN_JOBS_NEEDED_FOR_SECTOR_0 5U ///< Min queue count needed to erase and write all (5) records back in sector 0. +#define NV_MEM_BASE_ADDRESS BANK7_SECTOR0_START_ADDRESS +#define NV_RECORD_SLOT_SIZE 4096 // 4K + +#define SYSTEM_RECORD_OFFSET (0U * NV_RECORD_SLOT_SIZE) +#define SERVICE_RECORD_OFFSET (1U * NV_RECORD_SLOT_SIZE) +#define CAL_RECORD_OFFSET (2U * NV_RECORD_SLOT_SIZE) + +#define SYSTEM_RECORD_NV_MEM_START_ADDRESS (NV_MEM_BASE_ADDRESS + SYSTEM_RECORD_OFFSET) +#define SERVICE_RECORD_NV_MEM_START_ADDRESS (NV_MEM_BASE_ADDRESS + SERVICE_RECORD_OFFSET) +#define CAL_RECORD_NV_MEM_START_ADDRESS (NV_MEM_BASE_ADDRESS + CAL_RECORD_OFFSET) #define DD_USAGE_INFO_START_ADDRESS 0x00000030 /* 48 */ ///< DG usage info start address in RTC RAM (48). -#define DD_SCHEDULED_RUNS_START_ADDRESS (DD_USAGE_INFO_START_ADDRESS + sizeof(DD_SERVICE_GROUP_T)) ///< DG scheduled runs start address in RTC RAM. -#define DD_HEATERS_INFO_START_ADDRESS (DD_SCHEDULED_RUNS_START_ADDRESS + sizeof(DD_HEATERS_INFO_GROUP_T))///< DG heaters info start address in RTC RAM. -#define SW_CONFIGS_START_ADDRESS 0x00000100 /* 256 */ ///< Software configurations start address in RTC RAM. -#define SYSTEM_RECORD_NV_MEM_START_ADDRESS (BANK7_SECTOR0_START_ADDRESS) ///< System record storage start address in NV memory. -#define SERVICE_RECORD_NV_MEM_START_ADDRESS (BANK7_SECTOR0_START_ADDRESS + BITS_12_FULL_SCALE) ///< Service record storage start address in NV memory. -#define CAL_RECORD_NV_MEM_START_ADDRESS (SERVICE_RECORD_NV_MEM_START_ADDRESS + BITS_12_FULL_SCALE) ///< Calibration record storage start address in NV memory. +#define MIN_JOBS_NEEDED_FOR_SECTOR_0 5U ///< Min queue count needed to erase and write all (5) records back in sector 0. /// NVDataMgmt records read status typedef enum NVDataMgmt_NV_Records_Read_Status Index: firmware/App/Services/NVRecordsDD.c =================================================================== diff -u -r43e60a63eae841e599ff9106f43177a8f63d22be -r724f9a0cf2b603e988a519420bf95f4aa4da4b93 --- firmware/App/Services/NVRecordsDD.c (.../NVRecordsDD.c) (revision 43e60a63eae841e599ff9106f43177a8f63d22be) +++ firmware/App/Services/NVRecordsDD.c (.../NVRecordsDD.c) (revision 724f9a0cf2b603e988a519420bf95f4aa4da4b93) @@ -13,7 +13,7 @@ ***************************************************************************/ #include // For memcpy -#include "Common.h" +//#include "Common.h" #include "DDDefs.h" #include "NVMsgQ.h" #include "NVRecordsDD.h" @@ -87,7 +87,6 @@ { DD_PRES_SENSORS_CAL_RECORD_T presSensorsCalRecord; ///< DG pressure sensors. DD_FLOW_SENSORS_CAL_RECORD_T flowSensorsCalRecord; ///< DG flow sensors. - DD_LOAD_CELLS_CAL_RECORD_T loadCellsCalRecord; ///< DG load cells. DD_TEMP_SENSORS_CAL_RECORD_T tempSensorsCalRecord; ///< DG temperature sensors. DD_CONC_PUMPS_CAL_RECORD_T concentratePumpsRecord; ///< DG concentrate pumps. DD_DRAIN_PUMP_CAL_RECORD_T drainPumpRecord; ///< DG drain pump. @@ -128,14 +127,6 @@ U16 crc; ///< CRC for the DG service structure. } DD_SERVICE_GROUP_T; -/// DG scheduler record structure -typedef struct -{ - DD_SCHEDULED_RUN_RECORD_T ddScheduledRun; ///< DG scheduled runs. - U08 padding[ RECORD_PADDING_LENGTH(DD_SCHEDULED_RUN_RECORD_T, MAX_EEPROM_WRITE_BUFFER_BYTES) ]; ///< DG scheduled run group padding. - U16 crc; ///< CRC for the DG scheduled runs structure. -} DD_SCHEDULED_RUNS_GROUP_T; - /// DG usage record structure typedef struct { @@ -144,26 +135,6 @@ U16 crc; ///< CRC for the DG usage info structure. } DD_USAGE_INFO_GROUP_T; -/// DG heaters record -typedef struct -{ - DD_HEATERS_RECORD_T ddHeatersInfo; ///< DG heaters info record. - U08 padding[ RECORD_PADDING_LENGTH(DD_HEATERS_RECORD_T, MAX_EEPROM_WRITE_BUFFER_BYTES) ]; ///< DG heater info group padding. - U16 crc; ///< CRC for the DG heaters info structure. -} DD_HEATERS_INFO_GROUP_T; - -#ifndef _RELEASE_ -/// DG software configurations group -typedef struct -{ - DD_SW_CONFIG_RECORD_T ddSWConfigsRecord; ///< Software configurations record. - - // Since the software configurations are one byte, Num_of was used for the length of the lists - U08 padding[ RECORD_PADDING_LENGTH(DD_SW_CONFIG_RECORD_T, MAX_EEPROM_WRITE_BUFFER_BYTES) ]; ///< Software configurations group padding. - U16 crc; ///< Software configurations CRC. -} DD_SW_CONFIG_GROUP_T; -#endif - #pragma pack(pop) // ********** private data ********** @@ -172,25 +143,15 @@ static DD_CALIBRATION_RECORD_T ddCalibrationRecord; ///< DG calibration record structure (including padding and final CRC). static DD_SYSTEM_GROUP_T ddSystemGroup; ///< DG system group structure (including padding and final CRC). static DD_SERVICE_GROUP_T ddServiceGroup; ///< DG service group structure (including padding and final CRC). -static DD_SCHEDULED_RUNS_GROUP_T ddScheduledRunsGroup; ///< DG scheduled run structure (including padding and final CRC). static DD_USAGE_INFO_GROUP_T ddUsageInfoGroup; ///< DG usage info structure (including padding and final CRC). -static DD_HEATERS_INFO_GROUP_T ddHeatersInfoGroup; ///< DG heaters info structure (including padding and final CRC). -#ifndef _RELEASE_ -static DD_SW_CONFIG_GROUP_T ddSWConfigGroup; ///< DG Software configurations structure(including padding and final CRC). -#endif // Process records specifications const PROCESS_RECORD_SPECS_T RECORDS_SPECS[ NUM_OF_NVDATMGMT_RECORDS_JOBS ] = { // Start address Size of the job Max write bytes per job Max read bytes per job Record structure pointer Record CRC pointer Event calibration record update {CAL_RECORD_NV_MEM_START_ADDRESS, sizeof(DD_CALIBRATION_RECORD_T), MAX_EEPROM_WRITE_BUFFER_BYTES, sizeof(DD_CALIBRATION_RECORD_T), (U08*)&ddCalibrationRecord, (U08*)&ddCalibrationRecord.crc, DD_EVENT_CAL_RECORD_UPDATE }, // NVDATAMGMT_CALIBRATION_RECORD {SYSTEM_RECORD_NV_MEM_START_ADDRESS, sizeof(DD_SYSTEM_GROUP_T), MAX_EEPROM_WRITE_BUFFER_BYTES, sizeof(DD_SYSTEM_GROUP_T), (U08*)&ddSystemGroup, (U08*)&ddSystemGroup.crc, DD_EVENT_SYSTEM_RECORD_UPDATE }, // NVDATAMGMT_SYSTEM_RECORD {SERVICE_RECORD_NV_MEM_START_ADDRESS, sizeof(DD_SERVICE_GROUP_T), MAX_EEPROM_WRITE_BUFFER_BYTES, sizeof(DD_SERVICE_GROUP_T), (U08*)&ddServiceGroup, (U08*)&ddServiceGroup.crc, DD_EVENT_SERVICE_UPDATE }, // NVDATAMGMT_SERVICE_RECORD - {DD_SCHEDULED_RUNS_START_ADDRESS, sizeof(DD_SCHEDULED_RUNS_GROUP_T), MAX_EEPROM_WRITE_BUFFER_BYTES, sizeof(DD_SCHEDULED_RUNS_GROUP_T),(U08*)&ddScheduledRunsGroup, (U08*)&ddScheduledRunsGroup.crc, DD_EVENT_SCHEDULED_RUNS_UPDATE }, // NVDATAMGMT_SCHEDULER_RECORD - {DD_HEATERS_INFO_START_ADDRESS, sizeof(DD_HEATERS_INFO_GROUP_T), MAX_EEPROM_WRITE_BUFFER_BYTES, sizeof(DD_HEATERS_INFO_GROUP_T), (U08*)&ddHeatersInfoGroup, (U08*)&ddHeatersInfoGroup.crc, DD_EVENT_HEATERS_INFO_UPDATE }, // NVDATAMGMT_HEATERS_INFO_RECORD {DD_USAGE_INFO_START_ADDRESS, sizeof(DD_USAGE_INFO_GROUP_T), MAX_EEPROM_WRITE_BUFFER_BYTES, sizeof(DD_USAGE_INFO_GROUP_T), (U08*)&ddUsageInfoGroup, (U08*)&ddUsageInfoGroup.crc, DD_EVENT_USAGE_INFO_UPDATE }, // NVDATAMGMT_USAGE_INFO_RECORD -#ifndef _RELEASE_ - {SW_CONFIGS_START_ADDRESS, sizeof(DD_SW_CONFIG_GROUP_T), MAX_EEPROM_WRITE_BUFFER_BYTES, sizeof(DD_SW_CONFIG_GROUP_T), (U08*)&ddSWConfigGroup, (U08*)&ddSWConfigGroup.crc, DD_EVENT_SW_CONFIG_UPDATE } // NVDATAMGMT_SW_CONFIG_RECORD -#endif }; static NVDATAMGMT_SELF_TEST_STATE_T nvDataMgmtSelfTestState; ///< NVDataMgmt self-test state variable. @@ -222,9 +183,6 @@ static BOOL isDDAccelerometerSensorRecordValid( DD_ACCEL_SENSOR_CAL_RECORD_T* record ); static BOOL isDDHeatingCalRecordValid( DD_HEATING_CAL_RECORD_T* record ); static BOOL isDDFillConductiviesRecordValid( DD_ACID_BICARB_FILL_COND_VALUES_T* record, DD_ACID_TYPES_T acidType, DD_FILL_COND_OPS_T operation ); -#ifndef _RELEASE_ -static BOOL isSWConfigRecordValid( void ); -#endif void initNVRecordsDD( void ) { @@ -309,7 +267,6 @@ BOOL hasSystemRecordPassed = TRUE; BOOL hasServiceRecordPassed = TRUE; BOOL hasInstitutionalRecordPassed = TRUE; - BOOL hasSWConfigRecordPassed = TRUE; BOOL hasUsageRecordPassed = TRUE; updateRecordReadStatus( NVDATAMGMT_RECORDS_CRC_CHECKED ); @@ -319,9 +276,6 @@ hasSystemRecordPassed = isDDSystemRecordValid(); hasServiceRecordPassed = isDDServiceRecordValid(); hasUsageRecordPassed = isDDUsageRecordValid(); -#ifndef _RELEASE_ - hasSWConfigRecordPassed = isSWConfigRecordValid(); -#endif // If any of the records did not pass, they should be filled // with benign values. After that, schedule a write to sector 0 @@ -330,23 +284,15 @@ ( FALSE == hasSystemRecordPassed ) || ( FALSE == hasInstitutionalRecordPassed ) ) { enqueueSector0Records(); - SEND_EVENT_WITH_2_U32_DATA( RECORDS_SPECS[ NVDATAMGMT_CALIBRATION_RECORD ].nvEvent, 0, 0 ) - SEND_EVENT_WITH_2_U32_DATA( RECORDS_SPECS[ NVDATAMGMT_SYSTEM_RECORD ].nvEvent, 0, 0 ) - SEND_EVENT_WITH_2_U32_DATA( RECORDS_SPECS[ NVDATAMGMT_SERVICE_RECORD ].nvEvent, 0, 0 ) + SEND_EVENT_WITH_2_U32_DATA( RECORDS_SPECS[ NVDATAMGMT_CALIBRATION_RECORD ].nvEvent, 0, 0 ); + SEND_EVENT_WITH_2_U32_DATA( RECORDS_SPECS[ NVDATAMGMT_SYSTEM_RECORD ].nvEvent, 0, 0 ); + SEND_EVENT_WITH_2_U32_DATA( RECORDS_SPECS[ NVDATAMGMT_SERVICE_RECORD ].nvEvent, 0, 0 ); } -#ifndef _RELEASE_ - if ( FALSE == hasSWConfigRecordPassed ) - { - enqueueRecordJob( NVDATAMGMT_WRITE, NVDATAMGMT_SW_CONFIG_RECORD ); - SEND_EVENT_WITH_2_U32_DATA( RECORDS_SPECS[ NVDATAMGMT_SW_CONFIG_RECORD ].nvEvent, 0, 0 ) - } -#endif - if ( FALSE == hasUsageRecordPassed ) { enqueueRecordJob( NVDATAMGMT_WRITE, NVDATAMGMT_USAGE_INFO_RECORD ); - SEND_EVENT_WITH_2_U32_DATA( RECORDS_SPECS[ NVDATAMGMT_USAGE_INFO_RECORD ].nvEvent, 0, 0 ) + SEND_EVENT_WITH_2_U32_DATA( RECORDS_SPECS[ NVDATAMGMT_USAGE_INFO_RECORD ].nvEvent, 0, 0 ); } // Check if the records' entire CRCs as well as the individual CRCs passed @@ -415,39 +361,8 @@ return status; } -#ifndef _RELEASE_ /*********************************************************************//** * @brief - * The isSWConfigRecordValid function checks the validity of the software - * configuration record. - * @details Inputs: ddSWConfigGroup, hdSWConfigGroup - * @details Outputs: ddSWConfigGroup, hdSWConfigGroup - * @return TRUE if the DG system record is valid otherwise FALSE - *************************************************************************/ -static BOOL isSWConfigRecordValid( void ) -{ - BOOL status = TRUE; - - U16 calcCRC = crc16( (U08*)&ddSWConfigGroup, sizeof( DD_SW_CONFIG_GROUP_T ) - sizeof( U16 ) ); - U16 recordCRC = ddSWConfigGroup.crc; - - if ( calcCRC != recordCRC ) - { - memset( (U08*)&ddSWConfigGroup, 0, sizeof( DD_SW_CONFIG_GROUP_T ) ); - - // Recalculate the CRC with the default values - ddSWConfigGroup.crc = crc16( (U08*)&ddSWConfigGroup, sizeof( DD_SW_CONFIG_GROUP_T ) - sizeof( U16 ) ); - - // Set the to FALSE since the record is not valid - status = FALSE; - } - - return status; -} -#endif - -/*********************************************************************//** - * @brief * The isDDSystemRecordValid function checks the validity of the DG system * record. * @details Inputs: ddSystemGroup.ddSystemRecord @@ -574,7 +489,7 @@ // Get the calibration record of the hardware (i.e. pressure sensor) DD_PRES_SENSORS_CAL_RECORD_T* pressure = &ddCalibrationRecord.ddCalibrationGroups.presSensorsCalRecord; // The ones that are an array, are looped through - for ( i = 0; i < NUM_OF_CAL_DATA_PRES_SENSORS; i++ ) + for ( i = 0; i < NUM_OF_PRESSURE_SENSORS; i++ ) { // Get calibration payload and assign it to a pointer record = (POLYNOMIAL_CAL_PAYLOAD_T*)&pressure->pressureSensors[ i ]; @@ -587,12 +502,6 @@ isCalRecordValid = isCalRecordValid == FALSE ? FALSE : isHardwareRecordValid; } - for ( i = 0; i < PRES_SENSORS_RESERVED_SPACE_COUNT; i++ ) - { - // Benign the pressures reserved spaces - memcpy( (POLYNOMIAL_CAL_PAYLOAD_T*)&pressure->reservedSpace[ i ], &tempRecord, sizeof( POLYNOMIAL_CAL_PAYLOAD_T ) ); - } - DD_FLOW_SENSORS_CAL_RECORD_T* flow = &ddCalibrationRecord.ddCalibrationGroups.flowSensorsCalRecord; for ( i = 0; i < NUM_OF_CAL_DATA_FLOW_SENSORS; i++ ) { @@ -601,20 +510,6 @@ isCalRecordValid = isCalRecordValid == FALSE ? FALSE : isHardwareRecordValid; } - for ( i = 0; i < FLOW_SENSROS_RESERVED_SPACE_COUNT; i++ ) - { - // Benign the the flow sensors reserved spaces - memcpy( (POLYNOMIAL_CAL_PAYLOAD_T*)&flow->reservedSpace[ i ], &tempRecord, sizeof( POLYNOMIAL_CAL_PAYLOAD_T ) ); - } - - DD_LOAD_CELLS_CAL_RECORD_T* load = &ddCalibrationRecord.ddCalibrationGroups.loadCellsCalRecord; - for ( i = 0; i < NUM_OF_CAL_DATA_LOAD_CELLS; i++ ) - { - record = (POLYNOMIAL_CAL_PAYLOAD_T*)&load->loadCells[ i ]; - isHardwareRecordValid = isPolynomialRecordValid( record ); - isCalRecordValid = isCalRecordValid == FALSE ? FALSE : isHardwareRecordValid; - } - DD_TEMP_SENSORS_CAL_RECORD_T* temperature = &ddCalibrationRecord.ddCalibrationGroups.tempSensorsCalRecord; for ( i = 0; i < NUM_OF_CAL_DATA_TEMP_SENSORS; i++ ) { @@ -623,12 +518,6 @@ isCalRecordValid = isCalRecordValid == FALSE ? FALSE : isHardwareRecordValid; } - for ( i = 0; i < TEMP_SENSORS_RESERVED_SPACE_COUNT; i++ ) - { - // Benign the temperature sensors reserved spaces - memcpy( (POLYNOMIAL_CAL_PAYLOAD_T*)&temperature->reservedSpace[ i ], &tempRecord, sizeof( POLYNOMIAL_CAL_PAYLOAD_T ) ); - } - DD_CONC_PUMPS_CAL_RECORD_T* concPump = &ddCalibrationRecord.ddCalibrationGroups.concentratePumpsRecord; for ( i = 0; i < NUM_OF_CAL_DATA_DD_CONC_PUMPS; i++ ) { @@ -958,9 +847,6 @@ if ( calcCRC != recordCRC ) { // CRC did not pass so set all values to default - record->reservedSpace1 = RECORD_DEFAULT_CONST; - record->reservedSpace2 = RECORD_DEFAULT_CONST; - record->reservedSpace3 = RECORD_DEFAULT_CONST; record->calibrationTime = RECORD_DEFAULT_TIME; record->crc = crc16 ( (U08*)record, sizeof(DD_FILTER_CAL_RECORD_T) - sizeof(U16) ); @@ -989,8 +875,6 @@ if ( calcCRC != recordCRC ) { // CRC did not pass so set all values to default - record->reservedSpace1 = RECORD_DEFAULT_CONST; - record->reservedSpace2 = RECORD_DEFAULT_CONST; record->calibrationTime = RECORD_DEFAULT_TIME; record->crc = crc16 ( (U08*)record, sizeof(DD_FAN_CAL_RECORD_T) - sizeof(U16) ); @@ -1213,7 +1097,7 @@ status = TRUE; enqueueRecordJob( NVDATAMGMT_WRITE, NVDATAMGMT_USAGE_INFO_RECORD ); - SEND_EVENT_WITH_2_U32_DATA( RECORDS_SPECS[ NVDATAMGMT_USAGE_INFO_RECORD ].nvEvent, 0, 0 ) + SEND_EVENT_WITH_2_U32_DATA( RECORDS_SPECS[ NVDATAMGMT_USAGE_INFO_RECORD ].nvEvent, 0, 0 ); } else if ( ++usageWriteTries > MAX_NUM_OF_WRITE_TRIES ) { @@ -1255,8 +1139,8 @@ enqueueSector0Records(); enqueueRecordJob( NVDATAMGMT_WRITE, NVDATAMGMT_USAGE_INFO_RECORD ); // Both the usage and service records have been updated - SEND_EVENT_WITH_2_U32_DATA( RECORDS_SPECS[ NVDATAMGMT_USAGE_INFO_RECORD ].nvEvent, 0, 0 ) - SEND_EVENT_WITH_2_U32_DATA( RECORDS_SPECS[ NVDATAMGMT_SERVICE_RECORD ].nvEvent, 0, 0 ) + SEND_EVENT_WITH_2_U32_DATA( RECORDS_SPECS[ NVDATAMGMT_USAGE_INFO_RECORD ].nvEvent, 0, 0 ); + SEND_EVENT_WITH_2_U32_DATA( RECORDS_SPECS[ NVDATAMGMT_SERVICE_RECORD ].nvEvent, 0, 0 ); status = TRUE; } @@ -1289,21 +1173,13 @@ switch ( nvData ) { - case GET_CAL_PRESSURE_SENOSRS: nvDataStartPtr = (U08*)&ddCalibrationRecord.ddCalibrationGroups.presSensorsCalRecord; nvDataLength = sizeof( ddCalibrationRecord.ddCalibrationGroups.presSensorsCalRecord ); for ( i = 0; i < numOfSnsrs2Check; i++ ) isNVDataInvalid |= ( 0 == ddCalibrationRecord.ddCalibrationGroups.presSensorsCalRecord.pressureSensors[ i ].calibrationTime ? TRUE : FALSE ); break; - case GET_CAL_LOAD_CELL_SENSORS: - nvDataStartPtr = (U08*)&ddCalibrationRecord.ddCalibrationGroups.loadCellsCalRecord; - nvDataLength = sizeof( ddCalibrationRecord.ddCalibrationGroups.loadCellsCalRecord ); - for ( i = 0; i < numOfSnsrs2Check; i++ ) - isNVDataInvalid |= ( 0 == ddCalibrationRecord.ddCalibrationGroups.loadCellsCalRecord.loadCells[ i ].calibrationTime ? TRUE : FALSE ); - break; - case GET_CAL_FLOW_SENSORS: nvDataStartPtr = (U08*)&ddCalibrationRecord.ddCalibrationGroups.flowSensorsCalRecord; nvDataLength = sizeof( ddCalibrationRecord.ddCalibrationGroups.flowSensorsCalRecord ); @@ -1408,11 +1284,6 @@ } break; - case GET_INF_HEATERS_RECORD: - nvDataStartPtr = (U08*)&ddHeatersInfoGroup.ddHeatersInfo; - nvDataLength = sizeof( ddHeatersInfoGroup.ddHeatersInfo ); - break; - case GET_SYS_RECORD: nvDataStartPtr = (U08*)&ddSystemGroup.ddSystemRecord; nvDataLength = sizeof( ddSystemGroup.ddSystemRecord ); @@ -1423,11 +1294,6 @@ nvDataLength = sizeof( ddServiceGroup.ddServiceRecord ); break; - case GET_SRR_RECORD: - nvDataStartPtr = (U08*)&ddScheduledRunsGroup.ddScheduledRun; - nvDataLength = sizeof( ddScheduledRunsGroup.ddScheduledRun ); - break; - case GET_USAGE_RECORD: nvDataStartPtr = (U08*)&ddUsageInfoGroup.ddUsageInfo; nvDataLength = sizeof( ddUsageInfoGroup.ddUsageInfo ); @@ -1456,18 +1322,7 @@ } else { -#ifndef _RELEASE_ - if ( getSoftwareConfigStatus( SW_CONFIG_DISABLE_CAL_CHECK ) != SW_CONFIG_ENABLE_VALUE ) -#endif - { - activateAlarmNoData( nvAlarm ); - } -#ifndef _RELEASE_ - else - { - isNVDataInvalid = FALSE; - } -#endif + activateAlarmNoData( nvAlarm ); } } @@ -1535,28 +1390,5 @@ isSelfTestReadRecordsDone = value; } -#ifndef _RELEASE_ -/*********************************************************************//** - * @brief - * The getSoftwareConfigStatus function returns the status of a software - * configuration. - * @details Inputs: swConfigsList - * @details Outputs: none - * @param config which is the configuration of the that its status is requested - * @return status of the software configuration (0 or 1) - *************************************************************************/ -U08 getSoftwareConfigStatus( SOFTWARE_CONFIG_T config ) -{ - U08 value = 0; - - // If the build is not a release, get the value from the software configurations list - // If the build is a release, the configuration not matter what its value is kept in - // the NV RAM, it returns a 0 which is the configuration is disabled - value = ddSWConfigGroup.ddSWConfigsRecord.swConfigs[ config ]; - - return value; -} -#endif - /**@}*/ Index: firmware/App/Services/NVRecordsDD.h =================================================================== diff -u -r43e60a63eae841e599ff9106f43177a8f63d22be -r724f9a0cf2b603e988a519420bf95f4aa4da4b93 --- firmware/App/Services/NVRecordsDD.h (.../NVRecordsDD.h) (revision 43e60a63eae841e599ff9106f43177a8f63d22be) +++ firmware/App/Services/NVRecordsDD.h (.../NVRecordsDD.h) (revision 724f9a0cf2b603e988a519420bf95f4aa4da4b93) @@ -18,6 +18,7 @@ #include "Common.h" #include "DDDefs.h" #include "NVDriver.h" +#include "PressureSensor.h" /** * @defgroup NVRecordsDD NVRecordsDD @@ -59,44 +60,10 @@ } PROCESS_RECORD_SPECS_T; -#ifndef _RELEASE_ -/// Software configuration enums -typedef enum software_configurations -{ - SW_CONFIG_DISABLE_TRIMMER_HEATER = 0, ///< Software configuration disable trimmer heater. - SW_CONFIG_DISABLE_ACCELS, ///< Software configuration disable accelerometers. - SW_CONFIG_DISABLE_CAL_CHECK, ///< Software configuration disable calibration check. - SW_CONFIG_DISABLE_HEATERS_MONITOR, ///< Software configuration disable heaters monitor. - SW_CONFIG_DISABLE_DRAIN_PUMP_MONITOR, ///< Software configuration disable drain pump monitor. - SW_CONFIG_DISABLE_RO_PUMP_MONITOR, ///< Software configuration disable RO pump monitor. - SW_CONFIG_DISABLE_RO_RATIO_CHECK, // TODO remove ///< Software configuration disable RO ratio check - SW_CONFIG_DISABLE_COND_SENSOR_CHECK, ///< Software configuration disable conductivity sensor check. - SW_CONFIG_DISABLE_WATER_QUALITY_CHECK, ///< Software configuration disable water quality check. - SW_CONFIG_DISABLE_FLOW_VS_LOAD_CELL_CHECK_IN_FILL, ///< Software configuration disable flow vs. load cell check in fill. - SW_CONFIG_DISABLE_HEATERS_EFFICIENCY, ///< Software configuration disable heaters efficiency. - SW_CONFIG_DISABLE_DISINFECT_CONDUCTIVITY_CHECK, ///< Software configuration disable disinfect conductivity check. - SW_CONFIG_DISABLE_CONC_PUMPS, ///< Software configuration disable concentrate pumps. - SW_CONFIG_DISABLE_CAPS_MONITOR, ///< Software configuration disable cap monitor. - SW_CONFIG_DISABLE_UV_REACTORS, ///< Software configuration disable UV reactors. - SW_CONFIG_DISABLE_VOLTAGES_MONITOR, ///< Software configuration disable voltages monitor. - SW_CONFIG_DISABLE_BICARB_ALARMS, ///< Software configuration disable bicarb alarms. - SW_CONFIG_DISABLE_EMPTY_BOTTLES_ALARM, ///< Software configuration disable empty bottle alarms. - SW_CONFIG_DISABLE_BICARB_CONDUCTIVITY_TEST, // TODO remove ///< Software configuration disable bicarb conductivity test. - SW_CONFIG_DISABLE_ACID_CONDUCTIVITY_TEST, // TODO remove ///< Software configuration disable acid conductivity test. - SW_CONFIG_DISABLE_CONC_PUMPS_SPEED_ALARM, ///< Software configuration disable concentrate pumps speed alarm. - SW_CONFIG_DISABLE_MIXING_IN_FILL, // TODO remove ///< Software configuration disable mixing in fill. - SW_CONFIG_DISABLE_TEMPERATURE_SENSORS_ALARM, ///< Software configuration disable temperature sensors alarm. - SW_CONFIG_DISABLE_CONCENTRATE_PUMPS_PARK, ///< Software configuration disable concentrate pumps park feature. - SW_CONFIG_ENABLE_USING_TPO_FOR_PRIMARY_HEATER_CONTROL, ///< Software configuration enable TPo for primary heater control. - NUM_OF_SW_CONFIGS ///< Number of software configurations. -} SOFTWARE_CONFIG_T; -#endif - /// DD available NV data to get typedef enum DD_nv_commands { GET_CAL_PRESSURE_SENOSRS = 0, ///< Get pressure sensors calibration data. - GET_CAL_LOAD_CELL_SENSORS, ///< Get load cell sensors calibration data. GET_CAL_FLOW_SENSORS, ///< Get flow sensors calibration data. GET_CAL_ACID_CONCENTREATES, ///< Get acid concentrates calibration data. GET_CAL_BICARB_CONCENTRATES, ///< Get bicarb concentrates calibration data. @@ -111,25 +78,12 @@ GET_CAL_PRE_RO_PURGE_VOLUME_RECORD, ///< Get pre RO purge volume record. GET_CAL_FILTERS_RECORD, ///< Get filters record. GET_CAL_FILL_CONDUCTIVITIES_RECORD, ///< Get fill conductivities record. - GET_INF_HEATERS_RECORD, ///< Get heaters information form the the last run. GET_SYS_RECORD, ///< Get system record. GET_SRV_RECORD, ///< Get service record. - GET_SRR_RECORD, ///< Get scheduled runs record. GET_USAGE_RECORD, ///< Get usage record. NUM_OF_NV_DD_DATA ///< Number of non-volatile data. } NV_DATA_T; -/// DD pressure sensors enumeration. -typedef enum DD_pressure_sensors -{ - CAL_DATA_RO_PUMP_INLET_PRES_SENSOR = 0, ///< DD calibration data RO pump inlet pressure sensor. - CAL_DATA_RO_PUMP_OUTLET_PRES_SENSOR, ///< DD calibration data RO pump outlet pressure sensor. - CAL_DATA_DRAIN_PUMP_INLET_PRES_SENSOR, ///< DD calibration data drain pump inlet pressure sensor. - CAL_DATA_DRAIN_PUMP_OUTLET_PRES_SENSOR, ///< DD calibration data drain pump outlet pressure sensor. - CAL_DATA_BAROMETRIC_PRES_SENSOR, ///< DD calibration data barometric pressure sensor. - NUM_OF_CAL_DATA_PRES_SENSORS, ///< Number of calibration data pressure sensors. -} CAL_DATA_DD_PRES_SENSORS_T; - /// DD flow sensors enumeration. typedef enum DD_flow_sensors { @@ -297,28 +251,19 @@ /// Pressure sensors calibration structure typedef struct { - POLYNOMIAL_CAL_PAYLOAD_T pressureSensors[ NUM_OF_CAL_DATA_PRES_SENSORS ]; ///< Pressure sensors to calibrate. - POLYNOMIAL_CAL_PAYLOAD_T reservedSpace[ PRES_SENSORS_RESERVED_SPACE_COUNT ]; ///< Reserved space for future pressure sensors. + POLYNOMIAL_CAL_PAYLOAD_T pressureSensors[ NUM_OF_PRESSURE_SENSORS ]; ///< Pressure sensors to calibrate. } DD_PRES_SENSORS_CAL_RECORD_T; /// Flow sensors calibration structure typedef struct { POLYNOMIAL_CAL_PAYLOAD_T flowSensors[ NUM_OF_CAL_DATA_FLOW_SENSORS ]; ///< Flow sensors to calibrate. - POLYNOMIAL_CAL_PAYLOAD_T reservedSpace[ FLOW_SENSROS_RESERVED_SPACE_COUNT ]; ///< Reserved space for future flow sensors. } DD_FLOW_SENSORS_CAL_RECORD_T; -/// Load cells calibration structure -typedef struct -{ - POLYNOMIAL_CAL_PAYLOAD_T loadCells[ NUM_OF_CAL_DATA_LOAD_CELLS ]; ///< Load cells to calibrate. -} DD_LOAD_CELLS_CAL_RECORD_T; - /// Temperature sensors calibration structure typedef struct { POLYNOMIAL_CAL_PAYLOAD_T tempSensors[ NUM_OF_CAL_DATA_TEMP_SENSORS ]; ///< Temperature sensors to calibrate. - POLYNOMIAL_CAL_PAYLOAD_T reservedSpace[ TEMP_SENSORS_RESERVED_SPACE_COUNT ]; ///< Reserved space for future temperature sensors. } DD_TEMP_SENSORS_CAL_RECORD_T; /// Drain line volume calibration structure @@ -389,9 +334,6 @@ /// DD filter calibration record typedef struct { - F32 reservedSpace1; ///< DD filter reserved space 1. - F32 reservedSpace2; ///< DD filter reserved space 2. - F32 reservedSpace3; ///< DD filter reserved space 3 U32 calibrationTime; ///< Calibration time. U16 crc; ///< CRC. } DD_FILTER_CAL_RECORD_T; @@ -409,8 +351,6 @@ /// DD fan calibration data structure typedef struct { - F32 reservedSpace1; ///< Reserved space 1. - F32 reservedSpace2; ///< Reserved space 2. U32 calibrationTime; ///< Calibration time. U16 crc; ///< CRC. } DD_FAN_CAL_RECORD_T; @@ -466,35 +406,6 @@ U16 crc; ///< CRC for the DD system record structure. } DD_SYSTEM_RECORD_T; -/// DD scheduled runs record structure -typedef struct -{ - U32 lastRunTime; ///< DD scheduled run last run time. - U16 crc; ///< CRC for the DD scheduled run record structure. -} DD_SCHEDULED_RUN_T; - -/// DD scheduled run record structure -typedef struct -{ - DD_SCHEDULED_RUN_T ddScheduledRun[ NUM_OF_DD_SCHEDULED_RUNS ]; ///< DD scheduled run. -} DD_SCHEDULED_RUN_RECORD_T; - -/// DD heaters information structure -typedef struct -{ - F32 averageFillFlow; ///< Average fill flow rate. -} DD_HEATERS_RECORD_T; - -#ifndef _RELEASE_ -/// DD software configurations -typedef struct -{ - U08 swConfigs[ NUM_OF_SW_CONFIGS ]; ///< Software configurations. -} DD_SW_CONFIG_RECORD_T; -#endif -#pragma pack(pop) - -#pragma pack(push, 1) /// DD usage info structure. typedef struct { @@ -535,11 +446,6 @@ void updateNVSelfTestResult( SELF_TEST_STATUS_T result ); void updateNVSelfTestState( NVDATAMGMT_SELF_TEST_STATE_T state ); void updateSelfTestReadRecordsFlag ( BOOL value ); - -#ifndef _RELEASE_ -U08 getSoftwareConfigStatus( SOFTWARE_CONFIG_T config ); -#endif - /**@}*/ #endif /* _NV_RECORDS_DD_H_ */