*eventIdParam = NULL;\r
}\r
}\r
+/*\r
+ * Procedure: checkEntryValid\r
+ * Description: Returns whether event id "eventId" is a valid entry in primary memory\r
+ */\r
+static boolean checkEntryValid(Dem_EventIdType eventId){\r
+ const Dem_EventParameterType *EventIdParamList = configSet->EventParameter;\r
+ boolean isValid = FALSE;\r
+ uint16 i=0;\r
+ while ((EventIdParamList[i].EventID != eventId) && (!EventIdParamList[i].Arc_EOL)) {\r
+ i++;\r
+ }\r
\r
+ if (!EventIdParamList[i].Arc_EOL) {\r
+ // Event was found\r
+ uint16 index = 0;\r
+ for (index = 0; (index < DEM_MAX_NR_OF_EVENT_DESTINATION)\r
+ && (EventIdParamList[i].EventClass->EventDestination[index] != DEM_EVENT_DESTINATION_END_OF_LIST); index++) {\r
+ if( DEM_DTC_ORIGIN_PRIMARY_MEMORY == EventIdParamList[i].EventClass->EventDestination[index]){\r
+ // Event should be stored in primary memory.\r
+ isValid = TRUE;\r
+ }\r
+ }\r
\r
+ } else {\r
+ // The event did not exist\r
+ }\r
+ return isValid;\r
+}\r
/*\r
* Procedure: preDebounceNone\r
* Description: Returns the result of the debouncing.\r
eventStatusRecPtr->eventStatusExtended |= (Dem_EventStatusExtendedType)(eventRec->eventStatusExtended & (DEM_PENDING_DTC | DEM_CONFIRMED_DTC));\r
\r
}\r
- else {\r
- // Search for free position\r
- lookupEventStatusRec(DEM_EVENT_ID_NULL, &eventStatusRecPtr);\r
-\r
- if (eventStatusRecPtr != NULL) {\r
- // Create new event, from stored event\r
- eventStatusRecPtr->eventId = eventRec->eventId;\r
- lookupEventIdParameter(eventRec->eventId, &eventStatusRecPtr->eventParamRef);\r
- eventStatusRecPtr->faultDetectionCounter = 0;\r
- eventStatusRecPtr->occurrence = eventRec->occurrence;\r
- eventStatusRecPtr->eventStatusExtended = DEM_TEST_NOT_COMPLETED_THIS_OPERATION_CYCLE | DEM_TEST_NOT_COMPLETED_SINCE_LAST_CLEAR;\r
- eventStatusRecPtr->errorStatusChanged = FALSE;\r
- }\r
- else {\r
- // Error: Event status buffer full\r
- DET_REPORTERROR(MODULE_ID_DEM, 0, DEM_MERGE_EVENT_STATUS_ID, DEM_E_EVENT_STATUS_BUFF_FULL);\r
- }\r
- }\r
\r
Irq_Restore(state);\r
}\r
{\r
uint16 i;\r
ChecksumType cSum;\r
+ boolean entryValid = FALSE;\r
const Dem_EventParameterType *eventParam;\r
\r
if(DEM_PREINITIALIZED != demState){\r
\r
// Validate aging records stored in primary memory\r
for (i = 0; i < DEM_MAX_NUMBER_AGING_PRI_MEM; i++){\r
+ entryValid = checkEntryValid(priMemAgingBuffer[i].eventId);\r
cSum = calcChecksum(&priMemAgingBuffer[i], sizeof(HealingRecType) - sizeof(ChecksumType));\r
- if ((cSum != priMemAgingBuffer[i].checksum) || (priMemAgingBuffer[i].eventId == DEM_EVENT_ID_NULL)) {\r
+ if ((cSum != priMemAgingBuffer[i].checksum) || (priMemAgingBuffer[i].eventId == DEM_EVENT_ID_NULL) || (FALSE == entryValid)) {\r
// Unlegal record, clear the record\r
memset(&priMemAgingBuffer[i], 0, sizeof(HealingRecType));\r
AgingIsModified = TRUE;\r
\r
// Validate event records stored in primary memory\r
for (i = 0; i < DEM_MAX_NUMBER_EVENT_PRI_MEM; i++) {\r
+ entryValid = checkEntryValid(priMemEventBuffer[i].eventId);\r
cSum = calcChecksum(&priMemEventBuffer[i], sizeof(EventRecType)-sizeof(ChecksumType));\r
- if ((cSum != priMemEventBuffer[i].checksum) || (priMemEventBuffer[i].eventId == DEM_EVENT_ID_NULL)) {\r
+ if ((cSum != priMemEventBuffer[i].checksum) || (priMemEventBuffer[i].eventId == DEM_EVENT_ID_NULL) || (FALSE == entryValid)) {\r
// Unlegal record, clear the record\r
memset(&priMemEventBuffer[i], 0, sizeof(EventRecType));\r
}\r
\r
// Validate extended data records stored in primary memory\r
for (i = 0; i < DEM_MAX_NUMBER_EXT_DATA_PRI_MEM; i++) {\r
+ entryValid = checkEntryValid(priMemExtDataBuffer[i].eventId);\r
cSum = calcChecksum(&priMemExtDataBuffer[i], sizeof(ExtDataRecType)-sizeof(ChecksumType));\r
- if ((cSum != priMemExtDataBuffer[i].checksum) || (priMemExtDataBuffer[i].eventId == DEM_EVENT_ID_NULL)) {\r
+ if ((cSum != priMemExtDataBuffer[i].checksum) || (priMemExtDataBuffer[i].eventId == DEM_EVENT_ID_NULL) || (FALSE == entryValid)) {\r
// Unlegal record, clear the record\r
memset(&priMemExtDataBuffer[i], 0, sizeof(ExtDataRecType));\r
}\r
//lint -e681 //PC-Lint exception to MISRA 14.1: Loop is not entered. This only happens when DEM_MAX_NUMBER_FF_DATA_PRE_INIT is zero. Keep as it is for less complex code.\r
// Validate freeze frame records stored in primary memory\r
for (i = 0; i < DEM_MAX_NUMBER_FF_DATA_PRI_MEM; i++) {\r
+ entryValid = checkEntryValid(priMemFreezeFrameBuffer[i].eventId);\r
cSum = calcChecksum(&priMemFreezeFrameBuffer[i], sizeof(FreezeFrameRecType)-sizeof(ChecksumType));\r
- if ((cSum != priMemFreezeFrameBuffer[i].checksum) || (priMemFreezeFrameBuffer[i].eventId == DEM_EVENT_ID_NULL)) {\r
+ if ((cSum != priMemFreezeFrameBuffer[i].checksum) || (priMemFreezeFrameBuffer[i].eventId == DEM_EVENT_ID_NULL) || (FALSE == entryValid)) {\r
// Unlegal record, clear the record\r
memset(&priMemFreezeFrameBuffer[i], 0, sizeof(FreezeFrameRecType));\r
}\r