FaultCode.c 6.25 KB
Newer Older
1 2
#include "FaultCode\FaultCode.h"
#include "Application.h"
3

4 5 6
uint8_t DTC_Amnt_Number = 0;
uint8_t DTC_Amnt_Number_Count = 0;
uint8_t FaultCode_Number = 0;
7

8 9 10
uint32_t DTC_Data[FualtCodeMax] = {0};
uint32_t DTC_Data_Count[FualtCodeMax] = {0};
uint32_t FaultCode_Data[FualtCodeMax] = {0};
11 12 13 14
uint32_t u32Countbuf = 0UL;
void Fault_Code_Receive(uint8_t CopyData[])
{
    uint8_t i = 0;
15 16

    //ECU_FaultCode_Processing_Service();
17
}
18
uint8_t FaultCode_Compare(uint32_t FaultCode, uint32_t *CodeList, uint8_t len)
19 20
{
    uint8_t i = 0;
21 22
    uint8_t result = 0;
    for (i = 0; i < len; i++)
23
    {
24
        if (FaultCode == CodeList[i])
25 26 27 28 29 30
        {
            result = 1;
        }
    }
    return result;
}
31 32 33 34 35 36 37 38 39 40 41 42 43
static void Fault_Code_App_Swap(uint32_t *pData1, uint32_t *pData2)
{
    uint32_t psw;
    if ((*pData1) > (*pData2))
    {
        psw = (*pData2);
        (*pData2) = (*pData1);
        (*pData1) = psw;
    }
}
static void Fault_Code_App_SortNByte(uint32_t *SortData, uint8_t len)
{
    uint8_t n = 0, m;
44

45 46 47 48 49 50 51 52
    for (; n < len - 1; n++)
    {
        for (m = n + 1; m < len; m++)
        {
            Fault_Code_App_Swap((SortData + n), (SortData + m));
        }
    }
}
53 54 55 56
uint32_t u32YZHDArray[200];
uint32_t u32YZHDArraycount = 0;
uint32_t u32YZHDCount=0;
void ECU_FaultCode_Processing_Service(void)
57 58 59 60 61 62 63
{
    uint8_t DTCH1 = 0;
    uint8_t DTCM1 = 0;
    uint8_t DTCH2 = 0;
    uint8_t DTCM2 = 0;
    uint32_t DTC1 = 0;
    uint32_t DTC2 = 0;
64 65
    uint32_t i = 0;
    if (Common_Get_IG_Sts() == COMMON_POWER_ON)
66
    {
67
        if (CAN_MSG_Status(&CAN_CH0_CanMsgOp, CAN_CH0_ID_CAN_0x402_Msg_Count) == CAN_SIG_LOST)
68
        {
69
            memset(FaultCode_Data, 0, FaultCode_Number);
70 71 72 73
            FaultCode_Number = 0;
        }
        else
        {
74 75 76 77 78
            u32YZHDCount = 0;
            DTCH1 = Get_CAN_CH0_ID_402_Sig_ECU_DTCH1();
            DTCM1 = Get_CAN_CH0_ID_402_Sig_ECU_DTCM1();
            DTCH2 = Get_CAN_CH0_ID_402_Sig_ECU_DTCH2();
            DTCM2 = Get_CAN_CH0_ID_402_Sig_ECU_DTCM2();
79 80 81 82 83 84 85 86
            DTC_Amnt_Number = Get_CAN_CH0_ID_402_Sig_ECU_DTCAmnt();

            if (((DTCH1 & 0xF0) >> 4) >= 0xA)
            {
                DTC1 |= ((DTCH1 & 0xF0) >> 4) + 3;
            }
            else
            {
87
                DTC1 |= (DTCH1 & 0xF0) >> 4;
88 89 90 91 92 93 94 95
            }
            DTC1 <<= 8;
            if ((DTCH1 & 0xF) >= 0xA)
            {
                DTC1 |= (DTCH1 & 0xF) + 3;
            }
            else
            {
96
                DTC1 |= DTCH1 & 0xF;
97 98
            }
            DTC1 <<= 8;
99

100 101 102 103 104 105
            if (((DTCM1 & 0xF0) >> 4) >= 0xA)
            {
                DTC1 |= ((DTCM1 & 0xF0) >> 4) + 3;
            }
            else
            {
106
                DTC1 |= (DTCM1 & 0xF0) >> 4;
107 108 109 110 111 112 113 114
            }
            DTC1 <<= 8;
            if ((DTCM1 & 0xF) >= 0xA)
            {
                DTC1 |= (DTCM1 & 0xF) + 3;
            }
            else
            {
115
                DTC1 |= DTCM1 & 0xF;
116 117 118 119 120 121 122 123
            }

            if (((DTCH2 & 0xF0) >> 4) >= 0xA)
            {
                DTC2 |= ((DTCH2 & 0xF0) >> 4) + 3;
            }
            else
            {
124
                DTC2 |= (DTCH2 & 0xF0) >> 4;
125 126 127 128 129 130 131 132
            }
            DTC2 <<= 8;
            if ((DTCH2 & 0xF) >= 0xA)
            {
                DTC2 |= (DTCH2 & 0xF) + 3;
            }
            else
            {
133
                DTC2 |= DTCH2 & 0xF;
134 135
            }
            DTC2 <<= 8;
136

137 138 139 140 141 142
            if (((DTCM2 & 0xF0) >> 4) >= 0xA)
            {
                DTC2 |= ((DTCM2 & 0xF0) >> 4) + 3;
            }
            else
            {
143
                DTC2 |= (DTCM2 & 0xF0) >> 4;
144 145 146 147 148 149 150 151
            }
            DTC2 <<= 8;
            if ((DTCM2 & 0xF) >= 0xA)
            {
                DTC2 |= (DTCM2 & 0xF) + 3;
            }
            else
            {
152
                DTC2 |= DTCM2 & 0xF;
153 154
            }

155
            if (DTC_Amnt_Number == 0)
156
            {
157
                for (i = 0; i < FualtCodeMax; i++)
158 159
                {
                    FaultCode_Data[i] = 0;
160 161
                    DTC_Data_Count[i] = 0;
                    DTC_Data[i] = 0;
162
                }
163
                DTC_Amnt_Number_Count = 0;
164
            }
165
            if (DTC_Amnt_Number_Count < DTC_Amnt_Number)
166 167 168 169
            {
                if ((DTC1 != 0) && (FaultCode_Compare(DTC1, &DTC_Data_Count[0], DTC_Amnt_Number_Count) == 0))
                {
                    DTC_Data_Count[DTC_Amnt_Number_Count] = DTC1;
170
                    DTC_Amnt_Number_Count++;
171
                    Fault_Code_App_SortNByte(DTC_Data_Count, DTC_Amnt_Number_Count);
172 173
                }
            }
174
            if (DTC_Amnt_Number_Count < DTC_Amnt_Number)
175 176 177 178
            {
                if ((DTC2 != 0) && (FaultCode_Compare(DTC2, &DTC_Data_Count[0], DTC_Amnt_Number_Count) == 0))
                {
                    DTC_Data_Count[DTC_Amnt_Number_Count] = DTC2;
179
                    DTC_Amnt_Number_Count++;
180
                    Fault_Code_App_SortNByte(DTC_Data_Count, DTC_Amnt_Number_Count);
181 182
                }
            }
183
            if (DTC_Amnt_Number_Count > DTC_Amnt_Number)
184 185 186
            {
                for (i = 0; i < FualtCodeMax; i++)
                {
187
                    // FaultCode_Data[i] = 0;
188 189 190 191 192
                    DTC_Data_Count[i] = 0;
                    DTC_Data[i] = 0;
                }
                DTC_Amnt_Number_Count = 0;
            }
193 194
            if (DTC_Amnt_Number_Count == DTC_Amnt_Number)
            {
195
                for (i = 0; i < DTC_Amnt_Number_Count; i++)
196 197 198
                {
                    DTC_Data[i] = DTC_Data_Count[i];
                    DTC_Data_Count[i] = 0;
199
                    Fault_Code_App_SortNByte(DTC_Data, FaultCode_Number);
200 201 202 203
                }
                FaultCode_Number = DTC_Amnt_Number;
                DTC_Amnt_Number_Count = 0;

204
                for (i = 0; i < FaultCode_Number; i++)
205
                {
206
                    if (FaultCode_Data[i] != DTC_Data[i])
207 208 209 210
                    {
                        FaultCode_Data[i] = DTC_Data[i];
                        Fault_Code_App_SortNByte(FaultCode_Data, FaultCode_Number);
                    }
211 212
                }
            }
213 214
            if (u32YZHDArraycount < 200)
            {               
215

216 217
                u32YZHDArray[u32YZHDArraycount++] = u32YZHDCount;
            }
218 219 220 221
        }
    }
    else
    {
222
        memset(FaultCode_Data, 0, FaultCode_Number);
223 224 225
        FaultCode_Number = 0;
    }
}