GUI_Display.c 17 KB
Newer Older
1
#include "GUI_Display\GUI_Display.h"
2
#include "SEG_DISPLAY\SEG_DISPLAY.h"
3 4
#include "Application.h"

5
uint16_t poweroff_time = 0;
6

7
uint8_t SOC_Count_Time = 0;
8
uint8_t BUZZER_ON = 0;
9
uint8_t Charge_OFF_Flag = 0;
10

11
// void Gauge_Gear_Display(void)
12
// {
13 14 15 16 17 18 19
//     // uint8_t MBMS_StatBattWorkState = Get_CAN_CH0_ID_18203220_Sig_MBMS_StatBattWorkState();
//     if (Common_Get_IG_Sts() == COMMON_POWER_ON)
//     {
//         SEG_SET_GEAR(1,);
//     }
//     else
//     {
20

21 22
//     }
// }
23

24 25 26
void Gauge_Power_SOC_pull_Display(void)
{
    // uint8_t MBMS_StatBattWorkState = Get_CAN_CH0_ID_18203220_Sig_MBMS_StatBattWorkState();
27
    if (Common_Get_IG_Sts() == COMMON_POWER_ON && Charge_OFF_Flag == 0)
28
    {
29
        if (CAN_MSG_Status(&CAN_CH0_CanMsgOp, Co_Can_ConvertSubID_CAN_CH0(CAN_CH0_ID_CAN_0x18200A20_Msg)) == CAN_ERR_OK )
30 31
        {
            uint8_t SOC_1_Count = Get_CAN_CH0_ID_18200A20_Sig_MBMS_Soc();
32
            
33 34 35 36 37
            SEG_SET_EleDial_1SOC(1, SOC_1_Count);
        }
        else
        {
            SEG_SET_EleDial_1SOC(0, 0);
38 39 40 41 42 43 44 45 46
        }

        if (CAN_MSG_Status(&CAN_CH0_CanMsgOp, Co_Can_ConvertSubID_CAN_CH0(CAN_CH0_ID_CAN_0x18200A21_Msg)) == CAN_ERR_OK)
        {
            uint8_t SOC_2_Count = Get_CAN_CH0_ID_18200A21_Sig_SBMS_Soc();
            SEG_SET_EleDial_2SOC(1, SOC_2_Count);
        }
        else
        {
47 48 49 50 51 52 53 54 55 56
            SEG_SET_EleDial_2SOC(0, 0);
        }
    }
    else
    {
        SEG_SET_EleDial_1SOC(0, 0);
        SEG_SET_EleDial_2SOC(0, 0);
    }
}

57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112
void Gauge_Cutterhead_Gear_Display(void)
{
    uint8_t Signal1 = Get_CAN_CH0_ID_157_Sig_BMCU_BladeSpeedGear();
    uint8_t Signal2 = Get_CAN_CH0_ID_157_Sig_BMCU_ErrorGrage();
    // uint8_t MBMS_StatBattWorkState = Get_CAN_CH0_ID_18203220_Sig_MBMS_StatBattWorkState();
    if (Common_Get_IG_Sts() == COMMON_POWER_ON && Charge_OFF_Flag == 0 && CAN_MSG_Status(&CAN_CH0_CanMsgOp, Co_Can_ConvertSubID_CAN_CH0(CAN_CH0_ID_CAN_0x157_Msg)) == CAN_ERR_OK)
    {

        if (Signal2 == 0x1 || Signal2 == 0x2 || Signal2 == 0x3 || Signal2 == 0x4)
        {
            if (FLASH_SYNC_1Hz)
            {
                SEG_SET_Cutterhead(1, Signal1, 0);
            }
            else
            {
                SEG_SET_Cutterhead(1, 4, 0);
            }
        }
        else if (Signal2 == 0x0)
        {
            SEG_SET_Cutterhead(1, Signal1, 0);
        }
    }
    else
    {
        SEG_SET_Cutterhead(0, Signal1, 0);
    }
}

void Gauge_Gears_Display(void)
{
    uint8_t Signal1 = Get_CAN_CH0_ID_125_Sig_MMCU_TravelSpeedGear();
    uint8_t Signal2 = Get_CAN_CH0_ID_125_Sig_MMCU_ParkingGearState();
    // uint8_t MBMS_StatBattWorkState = Get_CAN_CH0_ID_18203220_Sig_MBMS_StatBattWorkState();
    if (Common_Get_IG_Sts() == COMMON_POWER_ON && Charge_OFF_Flag == 0)
    {
        if (Signal2 != 0x1)
        {
            if (Signal1 == 0x1 || Signal1 == 0x2)
            {
                SEG_SET_GEAR(1, Signal1, 0);
            }
        }
        else
        {
            SEG_SET_GEAR(1, Gear_P, 0);
        }
    }
    else
    {
        SEG_SET_GEAR(0, Signal1, 0);
    }
}
uint8_t SOC1_Count = 0;
uint8_t SOC2_Count = 0;
113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131
void Gauge_Power_SOC_CHAGING_Display(void)
{
    uint8_t MBMS_TOTALSigAcc = Get_CAN_CH0_ID_18202922_Sig_MBMS_TOTALSigAcc();
    uint8_t MBMS_TOTALSigCharge = Get_CAN_CH0_ID_18202922_Sig_MBMS_TOTALSigCharge();
    uint8_t MBMS_StatBattWorkState = Get_CAN_CH0_ID_18203220_Sig_MBMS_StatBattWorkState();
    // uint8_t MBMS_StatBattWorkState = Get_CAN_CH0_ID_18203220_Sig_MBMS_StatBattWorkState();
    if (Common_Get_IG_Sts() == COMMON_POWER_ON)
    {
        if (CAN_MSG_Status(&CAN_CH0_CanMsgOp, Co_Can_ConvertSubID_CAN_CH0(CAN_CH0_ID_CAN_0x18200A20_Msg)) == CAN_ERR_OK || CAN_MSG_Status(&CAN_CH0_CanMsgOp, Co_Can_ConvertSubID_CAN_CH0(CAN_CH0_ID_CAN_0x18200A21_Msg)) == CAN_ERR_OK)
        {
            uint8_t SOC_1_Count = Get_CAN_CH0_ID_18200A20_Sig_MBMS_Soc();
            uint8_t SOC_2_Count = Get_CAN_CH0_ID_18200A21_Sig_SBMS_Soc();
            if ((MBMS_TOTALSigAcc == 0x1 && MBMS_TOTALSigCharge == 0x1) || (MBMS_TOTALSigAcc == 0x0 && MBMS_TOTALSigCharge == 0x1)) // 上电充电
            {
                if (MBMS_StatBattWorkState == 0x1) // 主电池
                {
                    if (++SOC_Count_Time > 10)
                    {
                        SOC_Count_Time = 0;
132

133 134 135 136 137 138 139
                        SEG_SET_EleDial_1SOC(1, SOC1_Count);
                        SOC1_Count++;
                        if (SOC1_Count > SOC_1_Count)
                        {
                            SOC1_Count = 0;
                        }
                    }
140 141 142 143 144 145 146 147
                    if(CAN_MSG_Status(&CAN_CH0_CanMsgOp, Co_Can_ConvertSubID_CAN_CH0(CAN_CH0_ID_CAN_0x18200A21_Msg)))
                    {
                        SEG_SET_EleDial_2SOC(0, 0);
                    }
                    else
                    {
                        SEG_SET_EleDial_2SOC(1, SOC_2_Count);
                    }
148 149 150 151 152 153
                }
                else if (MBMS_StatBattWorkState == 0x4) // 副电池
                {
                    if (++SOC_Count_Time > 10)
                    {
                        SOC_Count_Time = 0;
154

155 156 157 158 159 160 161
                        SEG_SET_EleDial_2SOC(1, SOC2_Count);
                        SOC2_Count++;
                        if (SOC2_Count > SOC_2_Count)
                        {
                            SOC2_Count = 0;
                        }
                    }
162 163 164 165 166 167 168 169
                    if(CAN_MSG_Status(&CAN_CH0_CanMsgOp, Co_Can_ConvertSubID_CAN_CH0(CAN_CH0_ID_CAN_0x18200A20_Msg)))
                    {
                        SEG_SET_EleDial_1SOC(0, 0);
                    }
                    else
                    {
                        SEG_SET_EleDial_1SOC(1, SOC_1_Count);
                    }
170 171 172 173 174 175
                }
                else if (MBMS_StatBattWorkState == 0x7) // 主副电池
                {
                    if (++SOC_Count_Time > 10)
                    {
                        SOC_Count_Time = 0;
176

177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206
                        SEG_SET_EleDial_1SOC(1, SOC1_Count);
                        SEG_SET_EleDial_2SOC(1, SOC2_Count);
                        SOC1_Count++;
                        SOC2_Count++;
                        if (SOC_1_Count > SOC_2_Count)
                        {
                            if (SOC2_Count > SOC_2_Count)
                            {
                                SOC2_Count--;
                                if (SOC1_Count > SOC_1_Count)
                                {
                                    SOC1_Count = 0;
                                    SOC2_Count = 0;
                                }
                            }
                        }
                        else
                        {
                            if (SOC1_Count > SOC_1_Count)
                            {
                                SOC1_Count--;
                                if (SOC2_Count > SOC_2_Count)
                                {
                                    SOC1_Count = 0;
                                    SOC2_Count = 0;
                                }
                            }
                        }
                    }
                }
207 208 209 210 211
                else
                {
                    SEG_SET_EleDial_1SOC(1, SOC_1_Count);
                    SEG_SET_EleDial_2SOC(1, SOC_2_Count);
                }
212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233
            }
            if (MBMS_TOTALSigAcc == 0x0 && MBMS_TOTALSigCharge == 0x1) // 下电充电
            {
                poweroff_time++;
            }
            else
            {
                poweroff_time = 0;
            }
        }
        else
        {
            SEG_SET_EleDial_1SOC(0, 0);
            SEG_SET_EleDial_2SOC(0, 0);
        }
    }
    else
    {
        SEG_SET_EleDial_1SOC(0, 0);
        SEG_SET_EleDial_2SOC(0, 0);
    }
}
234
uint8_t AllSOC_DIS = 0;
235 236
void Gauge_EleDial_AllSOC_Display(void)
{
237

238 239
    if (Common_Get_IG_Sts() == COMMON_POWER_ON)
    {
240 241 242 243 244 245 246 247 248
        if (CAN_MSG_Status(&CAN_CH0_CanMsgOp, Co_Can_ConvertSubID_CAN_CH0(CAN_CH0_ID_CAN_0x18203020_Msg)) == CAN_ERR_OK)
        {
            AllSOC_DIS = Get_CAN_CH0_ID_18203020_Sig_MBMS_StatSoc();
            SEG_SET_EleDial_AllSOC(1, AllSOC_DIS);
        }
        else
        {
            SEG_SET_EleDial_AllSOC(0, 0);
        }
249 250 251 252 253 254
    }
    else
    {
        SEG_SET_EleDial_AllSOC(0, 0);
    }
}
255

256 257 258
uint8_t Get_EleDial_AllSOC_lenth(void)
{
    uint8_t num = 0;
259
    if (AllSOC_DIS > 99)
260 261 262
    {
        num = 2;
    }
263
    else if (AllSOC_DIS > 9)
264 265 266 267 268 269
    {
        num = 1;
    }
    return num;
}
uint8_t Clockonetime_flag = 0;
270 271
uint8_t Clock_seconds = 0;
uint8_t Clock_hours = 0;
272 273
void Gauge_Clock_Display(void)
{
274
    uint32_t Clock_all = 0;
275
    if (Common_Get_IG_Sts() == COMMON_POWER_ON && Charge_OFF_Flag == 0)
276 277 278 279 280 281 282
    {
        if (CAN_MSG_Status(&CAN_CH0_CanMsgOp, Co_Can_ConvertSubID_CAN_CH0(CAN_CH0_ID_CAN_0x339_Msg)) == CAN_ERR_OK)
        {
            Clock_all = Get_CAN_CH0_ID_339_Sig_MMCU_SingleWorkingHours();
            Clock_hours = Clock_all / 60;
            Clock_seconds = Clock_all % 60;
            SEG_SET_Clock(Clock_hours, Clock_seconds, FLASH_SYNC_1Hz, 1, 1);
283
            Clockonetime_flag = 1;
284 285 286
        }
        else
        {
287
            SEG_SET_Clock(Clock_hours, Clock_seconds, 0, 0, 0);
288 289 290 291 292
        }
    }
    else
    {
        SEG_SET_Clock(0, 0, 0, 0, 0);
293
        Clockonetime_flag = 0;
294
    }
295
}
296 297 298 299 300
uint8_t Get_Clockonetime_lenth(void)
{
    return Clockonetime_flag;
}

301 302
uint16_t EEPROM_Write_Time = 0;
uint8_t EEPROM_Cumulativee_clean = 0;
303
void Data_CumulativeWorkHours_EEPROM_Write(void)
304
{
305 306 307
    uint32_t u32Data[1] = {0};
    uint32_t eeprom_back[1] = {0};
    if (CAN_MSG_Status(&CAN_CH0_CanMsgOp, Co_Can_ConvertSubID_CAN_CH0(CAN_CH0_ID_CAN_0x339_Msg)) == CAN_ERR_OK)
308
    {
309
        u32Data[0] = Get_CAN_CH0_ID_339_Sig_MMCU_AccumulatedWorkHours();
310 311 312 313 314 315
        if(u32Data[0] > 0XFFFA && EEPROM_Cumulativee_clean == 0)
        {
            EEPROM_Cumulativee_clean = 1;
            eeprom_WriteRecord(EEPROM_BLOCK_00, (uint8_t *)eeprom_back, 4);
            u32Data[0] = 0;
        }
316 317 318 319 320 321 322 323 324
        eeprom_ReadRecord(EEPROM_BLOCK_00, (uint8_t *)eeprom_back, 4);
        if (EEPROM_Write_Time == 0)
        {
            if (u32Data[0] >= eeprom_back[0])
            {
                eeprom_WriteRecord(EEPROM_BLOCK_00, (uint8_t *)u32Data, 4);
            }
        }
        if (++EEPROM_Write_Time > 6000) // 一分钟存一次
325
        {
326
            EEPROM_Write_Time = 0;
327
        }
328 329 330
    }
    else
    {
331 332 333
        EEPROM_Write_Time = 0;
    }
}
334
uint32_t u32Data_read[1] = {0};
335 336
void Gauge_Clock_All_Display(void)
{
337

338 339
    eeprom_ReadRecord(EEPROM_BLOCK_00, (uint8_t *)u32Data_read, 4);
    if (Common_Get_IG_Sts() == COMMON_POWER_ON && Charge_OFF_Flag == 0)
340
    {
341
        SEG_SET_Clock_ALL(1, u32Data_read[0]);
342 343 344 345
    }
    else
    {
        SEG_SET_Clock_ALL(0, 0);
346 347
    }
}
348 349 350
uint8_t Get_Clock_All_lenth(void)
{
    uint8_t num = 0;
351
    if (u32Data_read[0] > 999)
352 353 354
    {
        num = 2;
    }
355
    else if (u32Data_read[0] > 9)
356 357 358 359 360
    {
        num = 1;
    }
    return num;
}
361
void Gauge_Frame_Display(void)
362
{
363
    if (Common_Get_IG_Sts() == COMMON_POWER_ON && Charge_OFF_Flag == 0)
364 365 366 367 368 369 370 371
    {
        SEG_SET_Frame(1);
    }
    else
    {
        SEG_SET_Frame(0);
    }
}
372 373 374 375

void Clear_Bu98(void)
{
    uint8_t i = 0;
376
    for (i = 0; i < BU98R10_DDRAM_SIZE; i++)
377 378 379 380 381 382 383 384
    {
        BU98R10Chip0DDRAM.Byte[i] = 0;
        BU98R10Chip1DDRAM.Byte[i] = 0;
    }
}

void Gauge_Service(void)
{
385
    uint8_t i = 0;
386
    if (Common_Get_IG_Sts() == COMMON_POWER_ON && ADC_Read_Signal(ADC_CH_KL30_VOLTAGE) <= 16000 && ADC_Read_Signal(ADC_CH_KL30_VOLTAGE) >= 9000)
387
    {
388
        if (Get_CAN_Power_State() != PKEY_ON)
389
        {
390 391 392 393 394 395 396 397 398 399 400 401 402
            BUZZER_Init();
            if (Common_GetIgnOnTime() > 1500)
            {
                SOC_charge_seg_Flag = 0;
                Checkself_Init();
                Gauge_CAN_setup_Service();
            }
            else
            {
                checkself_seg_Flag = 1;
                Checkself_LED_Display();
                // Checkself_SEG_Display();
            }
403
        }
404
        else if (Get_CAN_Power_State() == PKEY_ON)
405
        {
406
            poweroff_time = 0;
407
            if (Buzzer_time == 0)
408
            {
409 410
                Clear_Bu98();
                for (i = 0; i < LampCh0_MAX; i++)
411
                {
412 413 414 415 416 417 418 419
                    LED_Driver_Channel_Set(LampChannel_0, i, LED_OFF);
                }

                // Gpio_Init(Gpio_Sleep_Init);
            }
            interact_PWM_Low_Duty = 50;
            if (FLASH_SYNC_05Hz)
            {
420
                SEG_SET_GEAR(1, Gear_P, 0);
421 422 423 424
                if (Buzzer_time <= 6000)
                {
                    RTE_GPIO_Config(RTE_GPIO_PORT04_PIN01, GpioOut_High); // OUT_EN_1
                    BUZZER_ON = 1;
425 426 427
                }
                else
                {
428 429
                    RTE_GPIO_Config(RTE_GPIO_PORT04_PIN01, GpioOut_Low); // OUT_EN_1
                    BUZZER_ON = 0;
430
                }
431 432
            }
            else
433
            {
434
                SEG_SET_GEAR(1, Gear_OFF, 0);
435 436 437 438 439 440
                RTE_GPIO_Config(RTE_GPIO_PORT04_PIN01, GpioOut_Low); // OUT_EN_1
                BUZZER_ON = 0;
            }
            if (Buzzer_time < 0xFFFF)
            {
                Buzzer_time++;
441 442
            }
        }
443 444 445 446
    }
    else
    {
        BUZZER_Init();
447
        poweroff_time = 0;
448 449 450 451 452 453 454 455 456 457 458
        Clear_Bu98();
        for (i = 0; i < LampCh0_MAX; i++)
        {
            LED_Driver_Channel_Set(LampChannel_0, i, LED_OFF);
        }
    }
}

void Gauge_CAN_setup_Service(void)
{
    uint8_t state = Get_CAN_Power_State();
459 460 461 462 463 464
    Gauge_Clock_Display();
    Gauge_Clock_All_Display();
    Gauge_EleDial_AllSOC_Display();
    // SEG_SET_GEAR(1, 1);
    // SEG_SET_Cutterhead(1, 2);
    Gauge_Frame_Display();
465 466
    Gauge_Cutterhead_Gear_Display();
    Gauge_Gears_Display();
467 468 469 470
    switch (state)
    {
    case KEY_ACC:
    {
471 472
        poweroff_time = 0;
        Charge_OFF_Flag = 0;
473 474 475 476 477 478
        interact_PWM_Low_Duty = 0;
        Gauge_Power_SOC_pull_Display();
    }
    break;
    case READY:
    {
479 480
        poweroff_time = 0;
        Charge_OFF_Flag = 0;
481 482 483 484 485 486 487 488
        interact_PWM_Low_Duty = 30;
        Gauge_Power_SOC_pull_Display();
    }
    break;
    case CHRGING:
    {
        SOC_charge_seg_Flag = 1;
        if (poweroff_time < 3600)
489
        {
490 491
            Gauge_Power_SOC_CHAGING_Display();
            if (poweroff_time == 0)
492
            {
493 494 495 496 497
                Charge_OFF_Flag = 0;
            }
            else
            {
                Charge_OFF_Flag = 1;
498
            }
499
        }
500 501
        else
        {
502
            Charge_OFF_Flag = 2;
503 504
            uint8_t MBMS_TOTALSigAcc = Get_CAN_CH0_ID_18202922_Sig_MBMS_TOTALSigAcc();
            uint8_t MBMS_TOTALSigCharge = Get_CAN_CH0_ID_18202922_Sig_MBMS_TOTALSigCharge();
505 506 507
            SEG_SET_EleDial_AllSOC(0, 0);
            SEG_SET_EleDial_1SOC(0, 0);
            SEG_SET_EleDial_2SOC(0, 0);
508 509 510 511 512
            if (MBMS_TOTALSigAcc == 0x1 && MBMS_TOTALSigCharge == 0x1) // 下电充电)
            {
                Charge_OFF_Flag = 0;
                poweroff_time = 0;
            }
513 514 515
        }
    }
    break;
516 517 518 519 520 521 522 523 524 525 526 527 528 529
    case CHRG_PLUGIN:
    {
        Charge_OFF_Flag = 0;
        Gauge_Power_SOC_pull_Display();
        poweroff_time = 0;
    }
    break;
    case CHRGEND:
    {
        poweroff_time = 0;
        Charge_OFF_Flag = 0;
        Gauge_Power_SOC_pull_Display();
    }
    break;
530 531 532

    default:
        break;
533
    }
534
}
535 536 537 538 539 540 541 542 543 544 545 546 547 548 549 550 551 552 553 554 555 556 557 558 559 560 561 562 563 564 565 566 567 568 569 570 571 572 573 574 575

void Checkself_LED_Display(void)
{
    LED_Driver_Channel_Set(LampChannel_0, LampCh0_00_Grass_Full_R, LED_ON);
    // LED_Driver_Channel_Set(LampChannel_0, LampCh0_01_Power_Battery_Failure_R, LED_ON);
    // LED_Driver_Channel_Set(LampChannel_0, LampCh0_02_System_Indicator_R, LED_ON);
    LED_Driver_Channel_Set(LampChannel_0, LampCh0_03_P_GEAR_G, LED_ON);

    LED_Driver_Channel_Set(LampChannel_0, LampCh0_04_GEAR_W, LED_ON);
    LED_Driver_Channel_Set(LampChannel_0, LampCh0_08_Battery_Charging_W, LED_ON);
    LED_Driver_Channel_Set(LampChannel_0, LampCh0_10_READY_G, LED_ON);
    LED_Driver_Channel_Set(LampChannel_0, LampCh0_11_Key_Access_W, LED_ON);

    LED_Driver_Channel_Set(LampChannel_0, LampCh0_12_Seat_Detection_W, LED_ON);
    LED_Driver_Channel_Set(LampChannel_0, LampCh0_13_OVERLOAD_R, LED_ON);
    LED_Driver_Channel_Set(LampChannel_0, LampCh0_14_Cutterhead_Switch_W, LED_ON);
    LED_Driver_Channel_Set(LampChannel_0, LampCh0_15_Cutterhead_Gear_W, LED_ON);

    // LED_Driver_Channel_Set(LampChannel_0, LampCh0_17_External_Discharge_W, LED_ON);
    LED_Driver_Channel_Set(LampChannel_0, LampCh0_21_LED_Open_W, LED_ON);
    LED_Driver_Channel_Set(LampChannel_0, LampCh0_31_Working_Hours_One_W, LED_ON);
    LED_Driver_Channel_Set(LampChannel_0, LampCh0_32_Charging_Connection_R, LED_ON);
    SEG_SET_LED_STS(SEG_LED_Recharge, 1);
    // SEG_SET_LED_STS(SEG_LED_System_Light, 1);
    SEG_SET_LED_STS(SEG_LED_Chloramine, 1);
    SEG_SET_LED_STS(SEG_LED_Cutter_Overload, 1);
    SEG_SET_LED_STS(SEG_LED_Seat_Detection, 1);
    SEG_SET_LED_STS(SEG_LED_Key_Access, 1);
    SEG_SET_LED_STS(SEG_LED_Ready, 1);
    SEG_SET_LED_STS(SEG_LED_Cutter_Head_switch, 1);
    // SEG_SET_LED_STS(SEG_LED_External_Discharge, 1);
    SEG_SET_LED_STS(SEG_LED_Distance_Light, 1);
    SEG_SET_LED_STS(SEG_LED_HHT_Charger, 1);
}

void BUZZER_Init(void)
{
    Buzzer_time = 0;
    BUZZER_ON = 0;
    RTE_GPIO_Config(RTE_GPIO_PORT04_PIN01, GpioOut_Low); // OUT_EN_1
}