Data_VehicleSpeed.c 8.48 KB
Newer Older
hu's avatar
hu committed
1
#include "Data_VehicleSpeed.h"
hu's avatar
hu committed
2
#include "TimerB.h"
hu's avatar
hu committed
3 4
#include "Gauges.h"
#include "GaugesInterface.h"
hu's avatar
hu committed
5
#include "Common_Interface.h"
6
#include "GUI.h"
hu's avatar
hu committed
7

hu's avatar
hu committed
8
static uint32_t SPEED_RADIO = 637u;
hu's avatar
hu committed
9 10 11

uint16_t Vehicle_ACT_Speed;
uint16_t Vehicle_DISP_Speed;
hu's avatar
hu committed
12 13 14 15 16
uint8_t  VehicleSpeedValid;
uint8_t  Vehicle_CurSeg;
uint8_t  DataOverSpeed;
uint8_t  DataOverSpeedK_Line;
uint32_t SPEED_PPK;
17 18 19 20 21

_ACCSUBSPEED   AccSubSpeed;
uint16_t       Speed_Old  ;
uint16_t       GslYblSpeedTime  ;

hu's avatar
hu committed
22
volatile uint32_t VehFreBuf[VehFreNum];
hu's avatar
hu committed
23 24 25

void Speed_KL30_Init(void)
{
hu's avatar
hu committed
26
    uint8_t i = 0u;
hu's avatar
hu committed
27 28 29
    Vehicle_ACT_Speed = 0u;
    Vehicle_DISP_Speed = 0u;
    VehicleSpeedValid = 0u;
hu's avatar
hu committed
30 31 32
    DataOverSpeedK_Line = 0u;

    for (i = 0; i < VehFreNum; i++)
hu's avatar
hu committed
33
    {
hu's avatar
hu committed
34
        VehFreBuf[i] = 0u;
hu's avatar
hu committed
35 36
    }
}
hu's avatar
hu committed
37

hu's avatar
hu committed
38 39
void Speed_KL15_ON_Init(void)
{
hu's avatar
hu committed
40
    uint8_t i = 0u;
hu's avatar
hu committed
41 42 43 44
    Vehicle_ACT_Speed = 0u;
    Vehicle_DISP_Speed = 0u;
    VehicleSpeedValid = 0u;
    Vehicle_CurSeg = 0u;
hu's avatar
hu committed
45 46 47 48 49 50
    DataOverSpeedK_Line = 0u;

    SPEED_PPK = 15925u;

    Veh_Fre_Init(SPEED_PPK);
    for (i = 0; i < VehFreNum; i++)
hu's avatar
hu committed
51
    {
hu's avatar
hu committed
52
        VehFreBuf[i] = 0u;
hu's avatar
hu committed
53
    }
54 55 56

    Speed_Old = 0u;
    GslYblSpeedTime = 0u;
hu's avatar
hu committed
57
}
hu's avatar
hu committed
58

hu's avatar
hu committed
59 60 61 62 63 64 65
void Speed_KL15_OFF_Init(void)
{
    Vehicle_ACT_Speed = 0u;
    Vehicle_DISP_Speed = 0u;
    VehicleSpeedValid = 0u;
    Vehicle_CurSeg = 0u;
}
hu's avatar
hu committed
66

hu's avatar
hu committed
67 68 69 70 71 72 73
void Speed_Wakeup_Init(void)
{
    Vehicle_ACT_Speed = 0u;
    Vehicle_DISP_Speed = 0u;
    VehicleSpeedValid = 0u;
    Vehicle_CurSeg = 0u;
}
hu's avatar
hu committed
74

hu's avatar
hu committed
75 76 77 78 79 80 81 82 83 84
void Speed_Sleep_Init(void)
{
    Vehicle_ACT_Speed = 0u;
    Vehicle_DISP_Speed = 0u;
    VehicleSpeedValid = 0u;
    Vehicle_CurSeg = 0u;
}

void Speed_Processing_Service(void)
{
hu's avatar
hu committed
85
    static uint8_t i = 0u;
86
    uint32_t VehValTmp = 0u;
hu's avatar
hu committed
87
    uint32_t VehValDisp = 0u;
hu's avatar
hu committed
88
    uint16_t VehValCup = 0u;
89
    uint32_t PPK = 0u;
hu's avatar
hu committed
90
    uint16_t  DataOverSpeedValue ;
hu's avatar
hu committed
91

hu's avatar
hu committed
92
    COMMON_PowerStatus_t IG_Sta;
hu's avatar
hu committed
93

hu's avatar
hu committed
94
    IG_Sta = Common_Get_IG_Sts_Valid();
hu's avatar
hu committed
95

hu's avatar
hu committed
96
    if ( IG_Sta == COMMON_POWER_ON)
hu's avatar
hu committed
97
    {
hu's avatar
hu committed
98 99 100
        /**/
        DataOverSpeedValue = K_Line_Set.K_Line_LID44;
        DataOverSpeedValue *= 10u;
hu's avatar
hu committed
101

hu's avatar
hu committed
102 103 104 105 106 107
        PPK = Get_Speed_PPK();

        VehValTmp = Cal_Veh_Frequency();
        VehValTmp *= 36000u;
        VehValTmp /= PPK;
        VehFreBuf[i] = VehValTmp;
hu's avatar
hu committed
108

hu's avatar
hu committed
109 110
        i++;
        if (i > VehFreNum)
hu's avatar
hu committed
111
        {
hu's avatar
hu committed
112 113
            Fre_SortShort(VehFreBuf, VehFreNum);
            i = 0u;
hu's avatar
hu committed
114
        }
hu's avatar
hu committed
115
        VehValCup = (uint16_t) VehFreBuf[1u];
hu's avatar
hu committed
116 117

        if (VehValCup > 2250)
hu's avatar
hu committed
118
        {
hu's avatar
hu committed
119 120
            VehicleSpeedValid = 0u;

hu's avatar
hu committed
121 122 123 124
            Vehicle_ACT_Speed = 0u;
        }
        else
        {
hu's avatar
hu committed
125 126 127 128 129 130 131 132 133 134 135 136 137 138
            VehicleSpeedValid = 1u;

            if (VehValCup >= 1400u)
            {
                Vehicle_ACT_Speed = 1400u;
            }
            else  if (VehValCup <= 40u)
            {
                Vehicle_ACT_Speed = 0u;
            }
            else
            {
                Vehicle_ACT_Speed = VehValCup;
            }
hu's avatar
hu committed
139
        }
hu's avatar
hu committed
140

hu's avatar
hu committed
141 142 143
        //传入表头  计算放大系数
        VehValDisp = VehSpeedAmplification((uint16_t)Vehicle_ACT_Speed);
        SetGaugesPara(VehGauges, (uint16_t)VehValDisp);
hu's avatar
hu committed
144

hu's avatar
hu committed
145 146 147
        //获得显示格和显示车速
        Vehicle_CurSeg = GetGaugesCurrentPos(VehGauges);
        Vehicle_DISP_Speed = VehValDisp;//GetVehDisVal(Vehicle_CurSeg, &GaugesInfo_Init_Table[VehGauges]);
hu's avatar
hu committed
148

hu's avatar
hu committed
149 150 151 152 153 154 155 156 157 158 159 160 161 162

        if (K_Line_Set.K_Line_LID44 != 0xFF)
        {
            if (DataOverSpeedK_Line)
            {
                if (Vehicle_DISP_Speed <= DataOverSpeedValue)
                    DataOverSpeedK_Line = 0;
            }
            else
            {
                if (Vehicle_DISP_Speed >= (DataOverSpeedValue + 20))
                    DataOverSpeedK_Line = 1;
            }
        }
hu's avatar
hu committed
163 164 165
    }
    else
    {
hu's avatar
hu committed
166
        i = 0u;
hu's avatar
hu committed
167 168 169 170 171 172
    }
}

/*-------------------------------------------------------------------------
 * Function Name  : Set_Speed_PPK
 * Description    : 设置PPK值,初始化 或需要改变时调用
hu's avatar
hu committed
173
 * Input          :
hu's avatar
hu committed
174 175 176 177 178 179
 * Output         : None
 * Return         : None
 * onther         : PPK = 频率 * 3600 / 车速
 --------------------------------------------------------------------------*/
void Set_Speed_PPK(uint32_t PPK)
{
hu's avatar
hu committed
180
    SPEED_PPK = PPK;
hu's avatar
hu committed
181 182 183 184 185 186 187 188 189 190 191
}
/*-------------------------------------------------------------------------
 * Function Name  : Set_Speed_PPK
 * Description    : 设置速比值,初始化 或需要改变时调用
 * Input          : 速比
 * Output         : None
 * Return         : None
 * onther         : 速比 = PPK / 脉冲
 --------------------------------------------------------------------------*/
void Set_Speed_Ratio(uint32_t Ratio)
{
hu's avatar
hu committed
192
    SPEED_RADIO = Ratio;
hu's avatar
hu committed
193 194 195
}
/*-------------------------------------------------------------------------
 * Function Name  : Get_Speed_PPK
hu's avatar
hu committed
196
 * Description    :
hu's avatar
hu committed
197 198 199
 * Input          : None
 * Output         : None
 * Return         : 10倍PPK值
hu's avatar
hu committed
200
 * onther         :
hu's avatar
hu committed
201 202 203
 --------------------------------------------------------------------------*/
uint32_t Get_Speed_PPK(void)
{
hu's avatar
hu committed
204
    uint32_t u32Result = 0u;
hu's avatar
hu committed
205 206
    u32Result = SPEED_PPK;
    return u32Result;
hu's avatar
hu committed
207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230
}

uint16_t Speed_Get_ActualValue(void)
{
    uint16_t u16Result = 0u;
    u16Result = Vehicle_ACT_Speed;
    return u16Result;
}
uint16_t Speed_Get_Display_Value(void)
{
    uint16_t u16Result = 0u;
    u16Result = Vehicle_DISP_Speed;
    return u16Result;
}
/*-------------------------------------------------------------------------
 * Function Name  : Speed_Get_CurSeg
 * Description    : 车速当前格
 * Input          : None
 * Output         : None
 * Return         : None
 * onther         : 应用于断码
 --------------------------------------------------------------------------*/
uint8_t Speed_Get_CurSeg(void)
{
hu's avatar
hu committed
231
    return Vehicle_CurSeg;
hu's avatar
hu committed
232 233 234 235 236 237 238 239 240 241 242
}
/*-------------------------------------------------------------------------
 * Function Name  : Speed_Get_Valid
 * Description    : 车速有效?
 * Input          : None
 * Output         : None
 * Return         : None
 * onther         : None
 --------------------------------------------------------------------------*/
uint8_t Speed_Get_Valid(void)
{
hu's avatar
hu committed
243
    return VehicleSpeedValid;
hu's avatar
hu committed
244
}
hu's avatar
hu committed
245 246 247 248 249 250 251 252 253 254 255

/******************************************************************************
  函数名:Data_Acc_Speed_Processing
  功  能: 加速度计算
  参  数: 无
  返回值:无
 ******************************************************************************/
void Data_Acc_Speed_Processing(void)
{
    uint16_t Speed_New = 0;
    uint16_t AccSpeed  = 0;
256
    Speed_New = Common_Get_Act_V_Speed_Valid();
hu's avatar
hu committed
257

258 259
    AccSubSpeed.ACCSpeed_Time++;
    if (AccSubSpeed.ACCSpeed_Time >= 10)
hu's avatar
hu committed
260
    {
261
        AccSubSpeed.ACCSpeed_Time = 0;
hu's avatar
hu committed
262 263 264 265 266 267 268
        if (Speed_Old <= Speed_New)
        {
            AccSpeed      = Speed_New - Speed_Old;
            Speed_Old     = Speed_New ;

            if (AccSpeed > User_App.User_JADD)
            {
269
                AccSubSpeed.AccSpeed_Flag = 1 ;
hu's avatar
hu committed
270 271 272
            }
            else
            {
273
                AccSubSpeed.AccSpeed_Flag = 0 ;
hu's avatar
hu committed
274
            }
275
            AccSubSpeed.SubSpeed_Flag = 0 ;
hu's avatar
hu committed
276 277 278 279 280 281 282
        }
        else
        {
            AccSpeed      = Speed_Old - Speed_New;
            Speed_Old     = Speed_New ;
            if (AccSpeed > User_App.User_JSUB)
            {
283
                AccSubSpeed.SubSpeed_Flag = 1 ;
hu's avatar
hu committed
284 285 286
            }
            else
            {
287
                AccSubSpeed.SubSpeed_Flag = 0 ;
hu's avatar
hu committed
288
            }
289
            AccSubSpeed.AccSpeed_Flag = 0 ;
hu's avatar
hu committed
290 291 292 293 294 295 296 297 298 299 300 301 302
        }
    }
}
/******************************************************************************
  函数名:Data_GsLYbL_Speed_Processing
  功  能: 高速路, 一般路判断
  参  数: 无
  返回值:无
 ******************************************************************************/
void Data_GsLYbL_Speed_Processing(void)
{
    uint16_t User_Gsl = 0;
    uint16_t User_Ybl = 0;
303 304 305
    uint16_t Veh_Speed = 0u;

    Veh_Speed = Common_Get_Act_V_Speed_Valid();
hu's avatar
hu committed
306 307 308 309

    User_Gsl = (uint16_t)User_App.User_Gsl * 10 ;
    User_Ybl = (uint16_t)User_App.User_Ybl * 10 ;

310
    if ( Veh_Speed >= 600 )
hu's avatar
hu committed
311 312 313 314
    {
        if (GslYblSpeedTime <= 6000 )
            GslYblSpeedTime++;
    }
315
    else if ( Veh_Speed <= 590 )
hu's avatar
hu committed
316 317 318 319 320 321
    {
        GslYblSpeedTime = 0;
    }

    if (GslYblSpeedTime >= 6000)
    {
322
        AccSubSpeed.GslYbl_Flag = 1;
hu's avatar
hu committed
323 324 325
    }
    else
    {
326
        AccSubSpeed.GslYbl_Flag = 0;
hu's avatar
hu committed
327 328
    }

329
    if (AccSubSpeed.GslYbl_Flag == 1)
hu's avatar
hu committed
330
    {
331
        if (Veh_Speed > User_Gsl)
hu's avatar
hu committed
332
        {
333
            AccSubSpeed.GslSpeed_Flag = 1;
hu's avatar
hu committed
334
        }
335
        else if (Veh_Speed <= (User_Gsl - 10))
hu's avatar
hu committed
336
        {
337
            AccSubSpeed.GslSpeed_Flag = 0;
hu's avatar
hu committed
338 339 340 341
        }
    }
    else
    {
342
        if (Veh_Speed > User_Ybl)
hu's avatar
hu committed
343
        {
344
            AccSubSpeed.GslSpeed_Flag = 1;
hu's avatar
hu committed
345
        }
346
        else if (Veh_Speed <= (User_Ybl - 10))
hu's avatar
hu committed
347
        {
348
            AccSubSpeed.GslSpeed_Flag = 0;
hu's avatar
hu committed
349 350 351
        }
    }
}