#include /*標準輸入輸出定義*/ #include /*標準函數庫定義*/ #include #include #include "../Config.h" #include "../Log/log.h" #include "../Define/define.h" #include "../ShareMemory/shmMem.h" #include "../SelectGun/SelectGun.h" #include "main.h" #include "../common.h" //------------------------------------------------------------------------------ typedef struct StLedConfig { //OutputDrvValue[0] uint8_t LeftButtonLed: 1; //bit 0, H: ON, L:OFF uint8_t RightButtonLed: 1; //bit 1, H: ON, L:OFF uint8_t GreenLED: 1; //bit 2, H: ON, L:OFF uint8_t YellowLED: 1; //bit 3, H: ON, L:OFF uint8_t RedLED: 1; //bit 4, H: ON, L:OFF uint8_t SystemLed4: 1; //bit 5, H: ON, L:OFF uint8_t AcContactor: 1; //bit 6, H: ON, L:OFF uint8_t Reserved: 1; //bit 7 reserved } LedConfig; time_t showInfoTimer; //------------------------------------------------------------------------------ static uint8_t checkCabinetEthConnectState(LedConfig *ledConfig) { uint8_t ret = NO; LedConfig *pLedConfig = (LedConfig *)ledConfig; struct AlarmCodeData *pAlarmCode = (struct AlarmCodeData *)GetShmAlarmCodeData(); if (pAlarmCode->AlarmEvents.bits.DisconnectedFromDo == YES) { ret = YES; if (pLedConfig->RedLED == YES || pLedConfig->YellowLED == YES || pLedConfig->GreenLED == YES) { pLedConfig->RedLED = NO; pLedConfig->YellowLED = NO; pLedConfig->GreenLED = NO; } else { pLedConfig->RedLED = YES; pLedConfig->YellowLED = YES; pLedConfig->GreenLED = YES; } } return ret; } void PrimaryLedIndicatorCtrlFork(void) { #if !defined DD360ComBox return; #endif //!defined DD360ComBox pid_t pid = fork(); if (pid == 0) { uint8_t gunIndex = 0; int isContinue = 1; log_info("Primary Fork Child's PID is %d", getpid()); struct SysConfigData *pSysConfig = (struct SysConfigData *)GetShmSysConfigData(); struct SysInfoData *pSysInfo = (struct SysInfoData *)GetShmSysInfoData(); struct WARNING_CODE_INFO *pSysWarning = (struct WARNING_CODE_INFO *)GetShmSysWarningInfo(); struct PrimaryMcuData *ShmPrimaryMcuData = (struct PrimaryMcuData *)GetShmPrimaryMcuData(); struct ChargingInfoData *pDcChargingInfo = NULL; LedConfig *pLedConfig = (LedConfig *)&ShmPrimaryMcuData->OutputDrv.OutputDrvValue[0]; while (isContinue) { for (gunIndex = 0; gunIndex < pSysConfig->TotalConnectorCount; gunIndex++) { pDcChargingInfo = (struct ChargingInfoData *)GetDcChargingInfoData(gunIndex); if (pSysWarning->Level == WARN_LV_ER) { if (checkCabinetEthConnectState(pLedConfig) == YES) { usleep(500000); continue; } pLedConfig->YellowLED = NO; pLedConfig->GreenLED = NO; pLedConfig->RedLED = YES; usleep(500000); continue; } //log_info("led indicator status = %d", pDcChargingInfo->SystemStatus); //printf("level = %d", pSysWarning->Level); switch (pDcChargingInfo->SystemStatus) { case S_BOOTING: if (pSysInfo->SelfTestSeq == _STEST_COMPLETE) { //Module_DoComm tcp disconnect if (pLedConfig->RedLED == YES || pLedConfig->YellowLED == YES || pLedConfig->GreenLED == YES) { pLedConfig->RedLED = NO; pLedConfig->YellowLED = NO; pLedConfig->GreenLED = NO; } else { pLedConfig->RedLED = YES; pLedConfig->YellowLED = YES; pLedConfig->GreenLED = YES; } break; } pLedConfig->RedLED = YES; pLedConfig->YellowLED = YES; pLedConfig->GreenLED = YES; break; case S_IDLE: //Module_DoComm connected and system idle pLedConfig->RedLED = NO; pLedConfig->YellowLED = NO; pLedConfig->GreenLED = YES; break; case S_RESERVATION: case S_AUTHORIZING: case S_REASSIGN_CHECK: case S_REASSIGN: case S_PREPARNING: case S_PREPARING_FOR_EV: case S_PREPARING_FOR_EVSE: case S_CCS_PRECHARGE_ST0: case S_CCS_PRECHARGE_ST1: //precharging status if (pLedConfig->GreenLED == YES) { pLedConfig->GreenLED = NO; } else { pLedConfig->GreenLED = YES; } break; case S_CHARGING: pLedConfig->RedLED = NO; #ifdef DD360ComBox pLedConfig->YellowLED = YES; #else if (pLedConfig->YellowLED == YES) { pLedConfig->YellowLED = NO; } else { pLedConfig->YellowLED = YES; } #endif pLedConfig->GreenLED = NO; break; case S_ALARM: pLedConfig->YellowLED = NO; pLedConfig->GreenLED = NO; if (checkCabinetEthConnectState(pLedConfig) == YES) { break; } pLedConfig->RedLED = YES; break; case S_TERMINATING: case S_COMPLETE: //if (pSysWarning->Level == WARN_LV_ER) { // pLedConfig->YellowLED = NO; // pLedConfig->GreenLED = NO; // if (checkCabinetEthConnectState(pLedConfig) == YES) { // break; // } // pLedConfig->RedLED = YES; //} else { pLedConfig->RedLED = NO; #ifdef DD360ComBox if (pLedConfig->YellowLED == YES) { pLedConfig->YellowLED = NO; } else { pLedConfig->YellowLED = YES; } #else pLedConfig->YellowLED = YES; #endif pLedConfig->GreenLED = NO; //} break; case S_MAINTAIN: case S_FAULT: case S_UPDATE: pLedConfig->YellowLED = NO; pLedConfig->GreenLED = NO; pLedConfig->RedLED = YES; //if (pSysWarning->Level == WARN_LV_ER) { // if (checkCabinetEthConnectState(pLedConfig) == YES) { // break; // } // pLedConfig->RedLED = YES; //} break; case S_BOOKING: case S_DEBUG: case S_NONE: break; }//switch }//for usleep(500000); }//while }//fork } void SetIDLE(int gunIndex) { struct SysConfigData *pSysConfig = (struct SysConfigData *)GetShmSysConfigData(); DcCommonInfo *ShmDcCommonData = (DcCommonInfo *)GetShmDcCommonData(); struct ChargingInfoData* pDcChargingInfo = (struct ChargingInfoData*)GetDcChargingInfoData(gunIndex); log_info("Set Gun%d to IDLE", gunIndex); pDcChargingInfo->SystemStatus = S_IDLE; strcpy((char*)pSysConfig->UserId, ""); StopSystemTimeoutDet(); StopGunInfoTimeoutDet(gunIndex); destroySelGun(gunIndex); ShmDcCommonData->pGunInfo[gunIndex].WaitForPlugit = NO; ShmDcCommonData->LcmPage = _PAGE_SELECTGUN; } void LeftBtnPress() { struct SysConfigData *pSysConfig = (struct SysConfigData *)GetShmSysConfigData(); struct SysInfoData *pSysInfo = (struct SysInfoData *)GetShmSysInfoData(); DcCommonInfo *ShmDcCommonData = (DcCommonInfo *)GetShmDcCommonData(); struct ChargingInfoData* pDcChargingInfo = (struct ChargingInfoData*)GetDcChargingInfoData(pSysInfo->CurGunSelected); if (CheckDispenserGeneration() != _DISPENSER_GENERATION_3_5) { if (pSysInfo->SystemPage == _LCM_WAIT_FOR_PLUG) { if (isDetectPlugin(LEFT_GUN_NUM)) { _DetectPlugInTimeout(LEFT_GUN_NUM); destroySelGun(LEFT_GUN_NUM); } if (isDetectPlugin(RIGHT_GUN_NUM)) { _DetectPlugInTimeout(RIGHT_GUN_NUM); destroySelGun(RIGHT_GUN_NUM); } //systemPageRestoreInit(); //connectorPageRestoreIdle(); } switch (pDcChargingInfo->SystemStatus) { case S_IDLE: case S_RESERVATION: if (isDetectPlugin(pSysInfo->CurGunSelected)) { _DetectPlugInTimeout(pSysInfo->CurGunSelected); destroySelGun(pSysInfo->CurGunSelected); } else { if( pSysConfig->isAuthrizeByEVCCID && pSysInfo->ConnectorPage == _LCM_PRE_CHARGE) { _evccidlinktimeout(pSysInfo->CurGunSelected); pDcChargingInfo->isEVCCIDVerify = true; break; } #if !defined DD360Audi break; #endif //!defined DD360Audi if (getConfirmSelectedGun(pSysInfo->CurGunSelected) == PASS) { //printf("destroy gun = %d", pSysInfo->CurGunSelected); destroySelGun(pSysInfo->CurGunSelected); } else { confirmSelGun(pSysInfo->CurGunSelected); log_info("confirm select gun ............................... %d ", pSysInfo->CurGunSelected); } } break; case S_REASSIGN_CHECK: case S_REASSIGN: case S_PREPARNING: case S_PREPARING_FOR_EV: case S_PREPARING_FOR_EVSE: case S_CCS_PRECHARGE_ST0: case S_CCS_PRECHARGE_ST1: // 取消充電 if (pSysConfig->StopChargingByButton == YES || pDcChargingInfo->StartMethod == _CHARGING_START_AUTOSTART || pDcChargingInfo->StartMethod == _CHARGING_START_EVCCID) { ChargingTerminalProcess(pSysInfo->CurGunSelected); } break; case S_CHARGING: if (pSysConfig->StopChargingByButton == YES || pDcChargingInfo->StartMethod == _CHARGING_START_AUTOSTART || pDcChargingInfo->StartMethod == _CHARGING_START_EVCCID) { // 停止充電 ChargingTerminalProcess(pSysInfo->CurGunSelected); } break; case S_COMPLETE: break; } } else { strcpy((char*)pSysConfig->UserId, ""); switch (ShmDcCommonData->LcmPage) { case _PAGE_SELECTGUN: if (!ShmDcCommonData->pGunInfo[LEFT_GUN_NUM].WaitForPlugit) { ClearDetectPluginFlag(LEFT_GUN_NUM); confirmSelGun(LEFT_GUN_NUM); ShmDcCommonData->LcmPage = _PAGE_SELECT_PAY; StopSystemTimeoutDet(); // Clear Timeout_SelectGun } pSysInfo->CurGunSelected = LEFT_GUN_NUM; break; case _PAGE_SELECT_PAY: SetIDLE(pSysInfo->CurGunSelected); break; case _PAGE_SETTING: ShmDcCommonData->LcmPage = ShmDcCommonData->previousPage; StopSystemTimeoutDet(); break; case _PAGE_BACKLIGHT: ( ShmDcCommonData->MaxBlackLight >= BRIGHTNESS_LEVEL_5 ) ? (ShmDcCommonData->MaxBlackLight -=2) : ( ShmDcCommonData->MaxBlackLight = BRIGHTNESS_LEVEL_3); StopSystemTimeoutDet(); break; case _PAGE_LANGUAGE: if (ShmDcCommonData->language >= 1) ShmDcCommonData->language--; StopSystemTimeoutDet(); break; case _PAGE_AUTHORIZING: break; case _PAGE_AUTHORIZE_COMPLETE: break; case _PAGE_AUTHORIZE_FAIL: SetIDLE(pSysInfo->CurGunSelected); break; case _PAGE_PLUGIN_TIMEOUT: case _PAGE_WAIT_FOR_PLUGIN: SetIDLE(pSysInfo->CurGunSelected); case _PAGE_CHARGING: case _PAGE_PRECHARGE: if (pSysConfig->StopChargingByButton) { pDcChargingInfo->SystemStatus = S_TERMINATING; } else { if (pDcChargingInfo->StartMethod == _CHARGING_START_REMOTESTART) ShmDcCommonData->LcmPage = _PAGE_APP_STOP; else if (pDcChargingInfo->StartMethod == _CHARGING_START_RFID) ShmDcCommonData->LcmPage = _PAGE_RFID_STOP; else pDcChargingInfo->SystemStatus = S_TERMINATING; strcpy((char*)pSysConfig->UserId, ""); } break; case _PAGE_COMPLETE: case _PAGE_COMPLETE_RECEIPT: SetIDLE(pSysInfo->CurGunSelected); //ShmDcCommonData->LcmPage = _PAGE_SELECTGUN; break; case _PAGE_APP_STOP: ShmDcCommonData->LcmPage = _PAGE_CHARGING; StopSystemTimeoutDet(); // Clear Timeout_ShowStopPage break; case _PAGE_RFID_STOP: ShmDcCommonData->LcmPage = _PAGE_CHARGING; StopSystemTimeoutDet(); // Clear Timeout_ShowStopPage break; case _PAGE_ALARM: if (!pDcChargingInfo->ConnectorPlugIn) { SetIDLE(pSysInfo->CurGunSelected); break; } if (pDcChargingInfo->Replug_flag) ShmDcCommonData->LcmPage = _PAGE_PRECHARGE_FAIL; break; case _PAGE_PRECHARGE_FAIL: ShmDcCommonData->LcmPage = _PAGE_ALARM; break; case _PAGE_MAINTAIN: break; case _PAGE_EMG_BTN: break; case _PAGE_DEBUG: ShmDcCommonData->LcmPage = ShmDcCommonData->previousPage; StopSystemTimeoutDet(); break; } } } void RightBtnPress() { struct SysConfigData *pSysConfig = (struct SysConfigData *)GetShmSysConfigData(); struct SysInfoData *pSysInfo = (struct SysInfoData *)GetShmSysInfoData(); DcCommonInfo *ShmDcCommonData = (DcCommonInfo *)GetShmDcCommonData(); if (CheckDispenserGeneration() != _DISPENSER_GENERATION_3_5) { } else { strcpy((char*)pSysConfig->UserId, ""); switch (ShmDcCommonData->LcmPage) { case _PAGE_SELECTGUN: if (!ShmDcCommonData->pGunInfo[RIGHT_GUN_NUM].WaitForPlugit) { ClearDetectPluginFlag(RIGHT_GUN_NUM); strcpy((char*)pSysConfig->UserId, ""); confirmSelGun(RIGHT_GUN_NUM); ShmDcCommonData->LcmPage = _PAGE_SELECT_PAY; } pSysInfo->CurGunSelected = RIGHT_GUN_NUM; break; case _PAGE_SETTING: if (ShmDcCommonData->LcmSetItem == _SET_LANGUAGE) ShmDcCommonData->LcmSetItem = _SET_BACKLIGHT; else ShmDcCommonData->LcmSetItem = _SET_LANGUAGE; StopSystemTimeoutDet(); break; case _PAGE_BACKLIGHT: ShmDcCommonData->MaxBlackLight >= BRIGHTNESS_LEVEL_11 ? (ShmDcCommonData->MaxBlackLight = BRIGHTNESS_LEVEL_11) : (ShmDcCommonData->MaxBlackLight += 2); log_info("Black Light Max Value:%d",ShmDcCommonData->MaxBlackLight); StopSystemTimeoutDet(); break; case _PAGE_LANGUAGE: ShmDcCommonData->language++; if (ShmDcCommonData->language >= ShmDcCommonData->languageCount) { ShmDcCommonData->language = ShmDcCommonData->languageCount; } StopSystemTimeoutDet(); break; //case _PAGE_SELECT_PAY: // SetIDLE(pSysInfo->CurGunSelected); // break; case _PAGE_WAIT_FOR_PLUGIN: case _PAGE_PRECHARGE: case _PAGE_CHARGING: case _PAGE_COMPLETE: case _PAGE_COMPLETE_RECEIPT: (pSysInfo->CurGunSelected == LEFT_GUN_NUM) ? (pSysInfo->CurGunSelected = RIGHT_GUN_NUM) : (pSysInfo->CurGunSelected = LEFT_GUN_NUM); break; } } } void CenterBtnPress() { DcCommonInfo *ShmDcCommonData = (DcCommonInfo *)GetShmDcCommonData(); switch (ShmDcCommonData->LcmPage) { case _PAGE_SELECTGUN: case _PAGE_SELECT_PAY: case _PAGE_WAIT_FOR_PLUGIN: case _PAGE_PRECHARGE: case _PAGE_CHARGING: case _PAGE_COMPLETE: case _PAGE_COMPLETE_RECEIPT: ShmDcCommonData->LcmPage = _PAGE_SETTING; break; case _PAGE_SETTING: StopSystemTimeoutDet(); if (ShmDcCommonData->LcmSetItem == _SET_LANGUAGE) { ShmDcCommonData->LcmPage = _PAGE_LANGUAGE; } else if (ShmDcCommonData->LcmSetItem == _SET_BACKLIGHT) { ShmDcCommonData->LcmPage = _PAGE_BACKLIGHT; } StopSystemTimeoutDet(); break; case _PAGE_BACKLIGHT: ShmDcCommonData->LcmPage = _PAGE_SETTING; StopSystemTimeoutDet(); break; case _PAGE_LANGUAGE: ShmDcCommonData->LcmPage = _PAGE_SETTING; StopSystemTimeoutDet(); break; case _PAGE_AUTHORIZE_FAIL: break; } } void setTouch() { DcCommonInfo *ShmDcCommonData = (DcCommonInfo *)GetShmDcCommonData(); GetClockTime(&ShmDcCommonData->_touch_time); ShmDcCommonData->isTouch = TRUE; } void ChkPrimaryStatus(void) { static bool leftBtnPush = false; static bool rightBtnPush = false; static bool centerBtnPush = false; uint8_t i = 0; uint8_t Rtn = 0; struct SysConfigData *pSysConfig = (struct SysConfigData *)GetShmSysConfigData(); struct SysInfoData *pSysInfo = (struct SysInfoData *)GetShmSysInfoData(); struct WARNING_CODE_INFO *pSysWarning = (struct WARNING_CODE_INFO *)GetShmSysWarningInfo(); struct PrimaryMcuData *ShmPrimaryMcuData = (struct PrimaryMcuData *)GetShmPrimaryMcuData(); struct AlarmCodeData *pAlarmCode = (struct AlarmCodeData *)GetShmAlarmCodeData(); struct ChargingInfoData *pDcChargingInfo = NULL; DcCommonInfo *ShmDcCommonData = (DcCommonInfo *)GetShmDcCommonData(); if (pSysWarning->WarningCount > 0) { Rtn = 0; for (i = 0; i < pSysWarning->WarningCount; i++) { if (memcmp(&pSysWarning->WarningCode[i][0], "042251", 6) == 0) { EmcOccureByString("042251"); ShmDcCommonData->PowerAlarmState.StatusBit.EmergencyStop = YES; Rtn = 1; } else if (memcmp(&pSysWarning->WarningCode[i][0], "042252", 6) == 0) { ShmDcCommonData->PowerAlarmState.StatusBit.DoorOpen = YES; EmcOccureByString("042252"); Rtn = 1; } else if (memcmp(&pSysWarning->WarningCode[i][0], "042327", 6) == 0) { ShmDcCommonData->PowerAlarmState.StatusBit.DcInputOVP = YES; EmcOccureByString("042327"); Rtn = 1; } else if (memcmp(&pSysWarning->WarningCode[i][0], "042328", 6) == 0) { ShmDcCommonData->PowerAlarmState.StatusBit.DcInputUVP = YES; EmcOccureByString("042328"); Rtn = 1; } else if (memcmp(&pSysWarning->WarningCode[i][0], "042200", 6) == 0) { ShmDcCommonData->PowerAlarmState.StatusBit.SystemL1InputOVP = YES; EmcOccureByString("042200"); Rtn = 1; } else if (memcmp(&pSysWarning->WarningCode[i][0], "042201", 6) == 0) { ShmDcCommonData->PowerAlarmState.StatusBit.SystemL2InputOVP = YES; EmcOccureByString("042201"); Rtn = 1; } else if (memcmp(&pSysWarning->WarningCode[i][0], "042202", 6) == 0) { ShmDcCommonData->PowerAlarmState.StatusBit.SystemL3InputOVP = YES; EmcOccureByString("042202"); Rtn = 1; } else if (memcmp(&pSysWarning->WarningCode[i][0], "042267", 6) == 0) { ShmDcCommonData->PowerAlarmState.StatusBit.PsuFailure = YES; EmcOccureByString("042267"); Rtn = 1; } else if (memcmp(&pSysWarning->WarningCode[i][0], "012304", 6) == 0) { EmcOccureByString("012304"); Rtn = 1; } } if (Rtn == 0) { ShmDcCommonData->PowerAlarmState.StatusBit.EmergencyStop = NO; ShmDcCommonData->PowerAlarmState.StatusBit.DoorOpen = NO; ShmDcCommonData->PowerAlarmState.StatusBit.DcInputOVP = NO; ShmDcCommonData->PowerAlarmState.StatusBit.DcInputUVP = NO; ShmDcCommonData->PowerAlarmState.StatusBit.SystemL1InputOVP = NO; ShmDcCommonData->PowerAlarmState.StatusBit.SystemL2InputOVP = NO; ShmDcCommonData->PowerAlarmState.StatusBit.SystemL3InputOVP = NO; ShmDcCommonData->PowerAlarmState.StatusBit.PsuFailure = NO; ReleaseEmsOccureByString(0, "042251"); ReleaseEmsOccureByString(0, "042252"); ReleaseEmsOccureByString(0, "042327"); ReleaseEmsOccureByString(0, "042328"); ReleaseEmsOccureByString(0, "042200"); ReleaseEmsOccureByString(0, "042201"); ReleaseEmsOccureByString(0, "042202"); ReleaseEmsOccureByString(0, "042267"); ReleaseEmsOccureByString(0, "012304"); } } else { ShmDcCommonData->PowerAlarmState.StatusBit.EmergencyStop = NO; ShmDcCommonData->PowerAlarmState.StatusBit.DoorOpen = NO; ShmDcCommonData->PowerAlarmState.StatusBit.DcInputOVP = NO; ShmDcCommonData->PowerAlarmState.StatusBit.DcInputUVP = NO; ShmDcCommonData->PowerAlarmState.StatusBit.SystemL1InputOVP = NO; ShmDcCommonData->PowerAlarmState.StatusBit.SystemL2InputOVP = NO; ShmDcCommonData->PowerAlarmState.StatusBit.SystemL3InputOVP = NO; ShmDcCommonData->PowerAlarmState.StatusBit.PsuFailure = NO; ReleaseEmsOccureByString(0, "042251"); ReleaseEmsOccureByString(0, "042252"); ReleaseEmsOccureByString(0, "042327"); ReleaseEmsOccureByString(0, "042328"); ReleaseEmsOccureByString(0, "042200"); ReleaseEmsOccureByString(0, "042201"); ReleaseEmsOccureByString(0, "042202"); ReleaseEmsOccureByString(0, "042267"); ReleaseEmsOccureByString(0, "012304"); } if (ShmPrimaryMcuData->InputDet.bits.EmergencyButton == ABNORMAL) { pAlarmCode->AlarmEvents.bits.EmergencyStopTrip = YES; EmcOccureByString("012251"); } else { ReleaseEmsOccureByString(0, "012251"); } if (ShmPrimaryMcuData->InputDet.bits.Ac_Drop == ABNORMAL) { pAlarmCode->AlarmEvents.bits.ChillerAlarmFail = YES; EmcOccureByString("012348"); } else { ReleaseEmsOccureByString(0, "012348"); } if (ShmPrimaryMcuData->InputDet.bits.AcMainBreakerDetec == ABNORMAL) { pAlarmCode->AlarmEvents.bits.MainPowerBreakerTrip = YES; EmcOccureByString("012238"); } else { ReleaseEmsOccureByString(0, "012238"); } if (ShmPrimaryMcuData->InputDet.bits.SpdDetec == ABNORMAL) { pAlarmCode->AlarmEvents.bits.SpdTrip = YES; } else { pAlarmCode->AlarmEvents.bits.SpdTrip = NO; } if (ShmPrimaryMcuData->InputDet.bits.DoorOpen == ABNORMAL) { pAlarmCode->AlarmEvents.bits.DoorOpen = YES; EmcOccureByString("012252"); } else { ReleaseEmsOccureByString(0, "012252"); } //DS60-120 add if (ShmPrimaryMcuData->InputDet.bits.Button1 == BTN_PRESS && ShmPrimaryMcuData->InputDet.bits.Button2 == BTN_PRESS) { pSysConfig->ShowInformation = YES; showInfoTimer = time((time_t*)NULL); } else { if ( (time((time_t*)NULL) - showInfoTimer) > 3 ) pSysConfig->ShowInformation = NO; } if (ShmPrimaryMcuData->InputDet.bits.Button1 == BTN_PRESS && !leftBtnPush ) { if (!leftBtnPush && !ShmDcCommonData->isTouch) { leftBtnPush = true; GetClockTime(&ShmDcCommonData->SleepTimer); ShmDcCommonData->BlackLight = ShmDcCommonData->MaxBlackLight; if (!ShmDcCommonData->ScreenSave) LeftBtnPress(); pDcChargingInfo = (struct ChargingInfoData *)GetDcChargingInfoData(pSysInfo->CurGunSelected); log_info("left btn down...............................%d %d %d", pSysInfo->CurGunSelected, pDcChargingInfo->SystemStatus,pSysInfo->SystemPage); ShmDcCommonData->ScreenSave = FALSE; setTouch(); } } else if (ShmPrimaryMcuData->InputDet.bits.Button1 == BTN_RELEASE) { if (leftBtnPush) { leftBtnPush = false; //log_info("left btn up............................... "); } } if (ShmPrimaryMcuData->InputDet.bits.Key3 == BTN_PRESS && !centerBtnPush ) { if (!centerBtnPush && !ShmDcCommonData->isTouch) { centerBtnPush = true; GetClockTime(&ShmDcCommonData->SleepTimer); ShmDcCommonData->BlackLight = ShmDcCommonData->MaxBlackLight; if (!ShmDcCommonData->ScreenSave) CenterBtnPress(); pDcChargingInfo = (struct ChargingInfoData *)GetDcChargingInfoData(pSysInfo->CurGunSelected); log_info("center btn down...............................%d %d %d ", pSysInfo->CurGunSelected, pDcChargingInfo->SystemStatus, ShmDcCommonData->LcmPage); ShmDcCommonData->ScreenSave = FALSE; setTouch(); } } else if (ShmPrimaryMcuData->InputDet.bits.Key3 == BTN_RELEASE) { if (centerBtnPush) { centerBtnPush = false; //log_info("left btn up............................... "); } } bool isCharging = false; if (CheckDispenserGeneration() != _DISPENSER_GENERATION_3_5) { for (uint8_t i = 0; i < pSysConfig->TotalConnectorCount; i++) { pDcChargingInfo = (struct ChargingInfoData *)GetDcChargingInfoData(i); if (IntoChargeProcess(pDcChargingInfo->SystemStatus)) { isCharging = true; } } } if (ShmPrimaryMcuData->InputDet.bits.Button2 == BTN_PRESS && !rightBtnPush) { if (!rightBtnPush && !ShmDcCommonData->isTouch) { rightBtnPush = true; if (CheckDispenserGeneration() != _DISPENSER_GENERATION_3_5) { if (pSysInfo->SystemPage == _LCM_WAIT_FOR_PLUG && !isCharging) { return; } strcpy((char *)pSysConfig->UserId, ""); if (pSysInfo->CurGunSelected + 1 < pSysConfig->TotalConnectorCount) { pSysInfo->CurGunSelected++; } else { pSysInfo->CurGunSelected = 0; } pSysInfo->SystemPage = _LCM_NONE; } else { GetClockTime(&ShmDcCommonData->SleepTimer); ShmDcCommonData->BlackLight = ShmDcCommonData->MaxBlackLight; if (!ShmDcCommonData->ScreenSave) RightBtnPress(); ShmDcCommonData->ScreenSave = FALSE; } setTouch(); pDcChargingInfo = (struct ChargingInfoData *)GetDcChargingInfoData(pSysInfo->CurGunSelected); log_info("right btn down............................... %d %d %d", pSysInfo->CurGunSelected,pDcChargingInfo->SystemStatus, pSysInfo->SystemPage); } } else if (ShmPrimaryMcuData->InputDet.bits.Button2 == BTN_RELEASE) { if (rightBtnPush) { rightBtnPush = false; //log_info("right btn up............................... "); } } }