]> rtime.felk.cvut.cz Git - arc.git/commitdiff
Dem, removing event entries from primary memory buffers if the event does not exist...
authorhebe <devnull@localhost>
Tue, 28 Aug 2012 14:41:10 +0000 (16:41 +0200)
committerhebe <devnull@localhost>
Tue, 28 Aug 2012 14:41:10 +0000 (16:41 +0200)
diagnostic/Dem/Dem.c

index a3d01dfbc281f2a3a3adcce9e29a4e584ab51d00..0bd020e98c5e34e85fc120a3148ae7bae99a89c2 100644 (file)
@@ -400,8 +400,34 @@ static void lookupEventIdParameter(Dem_EventIdType eventId, const Dem_EventParam
                *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
@@ -612,24 +638,6 @@ static void mergeEventStatusRec(const EventRecType *eventRec)
                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
@@ -2308,6 +2316,7 @@ void Dem_Init(void)
 {\r
        uint16 i;\r
        ChecksumType cSum;\r
+       boolean entryValid = FALSE;\r
        const Dem_EventParameterType *eventParam;\r
 \r
        if(DEM_PREINITIALIZED != demState){\r
@@ -2333,8 +2342,9 @@ void Dem_Init(void)
 \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
@@ -2343,8 +2353,9 @@ void Dem_Init(void)
 \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
@@ -2362,8 +2373,9 @@ void Dem_Init(void)
 \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
@@ -2378,8 +2390,9 @@ void Dem_Init(void)
                //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