#include <sys/time.h> #include <sys/timeb.h> #include <sys/types.h> #include <sys/stat.h> #include <sys/types.h> #include <sys/ioctl.h> #include <sys/socket.h> #include <sys/ipc.h> #include <sys/shm.h> #include <sys/shm.h> #include <sys/mman.h> #include <linux/can.h> #include <linux/can/raw.h> #include <linux/wireless.h> #include <arpa/inet.h> #include <netinet/in.h> #include <unistd.h> #include <stdarg.h> #include <stdio.h> /*標準輸入輸出定義*/ #include <stdlib.h> /*標準函數庫定義*/ #include <unistd.h> /*Unix 標準函數定義*/ #include <fcntl.h> /*檔控制定義*/ #include <termios.h> /*PPSIX 終端控制定義*/ #include <errno.h> /*錯誤號定義*/ #include <errno.h> #include <string.h> #include <time.h> #include <ctype.h> #include <ifaddrs.h> #include "../../define.h" #include "Config.h" #include "Module_EvComm.h" #include "VCCU.h" #define Debug #define ARRAY_SIZE(A) (sizeof(A) / sizeof(A[0])) #define PASS 1 #define FAIL -1 #define START 1 #define STOP 0 #define YES 1 #define NO 0 #define DEMO 0 struct SysConfigAndInfo *ShmSysConfigAndInfo; struct StatusCodeData *ShmStatusCodeData; struct FanModuleData *ShmFanModuleData; struct RelayModuleData *ShmRelayModuleData; struct LedModuleData *ShmLedModuleData; struct PsuData *ShmPsuData; struct OCPP16Data *ShmOCPP16Data; byte gunCount; byte gun_count = CHAdeMO_QUANTITY + CCS_QUANTITY + GB_QUANTITY; int chargingTime[CHAdeMO_QUANTITY + CCS_QUANTITY + GB_QUANTITY]; float maxChargingVol = 5000; // 限制最大充電電壓,如依照模塊則填上 0 float maxChargingCur = 100; // 限制最大充電電流,如依照模塊則填上 0 int maxValue = 950; int gbmaxValue = 7500; int whileLoopTime = 500000;//45000;//500ms//10000; // 10 ms int soc = 70; // 槍資訊 struct ChargingInfoData *_chargingData[CHAdeMO_QUANTITY + CCS_QUANTITY + GB_QUANTITY]; byte normalStop = 0x01; byte stopReason[6] = { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 }; byte evstaus[5] = { 0x01, 0x02, 0x03, 0x04, 0x05 }; struct Ev_Board_Cmd Ev_Cmd={ 0, 0x00000200, 0x00000400, 0x00000500, 0x00000600, 0x00000700, 0x00000800, 0x00000900, 0x00000A00, 0x00000C00, 0x00000D00, 0x00000E00, 0x00000F00, 0x00001000, 0x00001100, 0x00001200, 0x00001500, }; //========================================== // Init all share memory //========================================== int InitShareMemory() { int result = PASS; int MeterSMId; if ((MeterSMId = shmget(ShmSysConfigAndInfoKey, sizeof(struct SysConfigAndInfo), IPC_CREAT | 0777)) < 0) { #ifdef SystemLogMessage printf("EV shmget ShmSysConfigAndInfo NG\n"); #endif result = FAIL; } else if ((ShmSysConfigAndInfo = shmat(MeterSMId, NULL, 0)) == (void *) -1) { #ifdef SystemLogMessage printf("[shmat ShmSysConfigAndInfo NG\n"); #endif result = FAIL; } if ((MeterSMId = shmget(ShmStatusCodeKey, sizeof(struct StatusCodeData), IPC_CREAT | 0777)) < 0) { #ifdef SystemLogMessage printf("shmget ShmStatusCodeData NG\n"); #endif result = FAIL; } else if ((ShmStatusCodeData = shmat(MeterSMId, NULL, 0)) == (void *) -1) { #ifdef SystemLogMessage printf("shmat ShmStatusCodeData NG\n"); #endif result = FAIL; } if ((MeterSMId = shmget(ShmFanBdKey, sizeof(struct FanModuleData), IPC_CREAT | 0777)) < 0) { #ifdef SystemLogMessage printf("shmget ShmFanModuleData NG\n"); #endif result = FAIL; } else if ((ShmFanModuleData = shmat(MeterSMId, NULL, 0)) == (void *) -1) { #ifdef SystemLogMessage printf("shmat ShmFanModuleData NG\n"); #endif result = FAIL; } memset(ShmFanModuleData,0,sizeof(struct FanModuleData)); if ((MeterSMId = shmget(ShmRelayBdKey, sizeof(struct RelayModuleData), IPC_CREAT | 0777)) < 0) { #ifdef SystemLogMessage printf("shmget ShmRelayModuleData NG\n"); #endif result = FAIL; } else if ((ShmRelayModuleData = shmat(MeterSMId, NULL, 0)) == (void *) -1) { #ifdef SystemLogMessage printf("shmat ShmRelayModuleData NG\n"); #endif result = FAIL; } memset(ShmRelayModuleData,0,sizeof(struct RelayModuleData)); if ((MeterSMId = shmget(ShmLedBdKey, sizeof(struct LedModuleData), IPC_CREAT | 0777)) < 0) { #ifdef SystemLogMessage printf("shmget ShmLedModuleData NG\n"); #endif result = FAIL; } else if ((ShmLedModuleData = shmat(MeterSMId, NULL, 0)) == (void *) -1) { #ifdef SystemLogMessage printf("shmat ShmLedModuleData NG\n"); #endif result = FAIL; } memset(ShmLedModuleData,0,sizeof(struct LedModuleData)); if ((MeterSMId = shmget(ShmPsuKey, sizeof(struct PsuData), IPC_CREAT | 0777)) < 0) { #ifdef SystemLogMessage printf("shmget ShmPsuData NG \n"); #endif result = FAIL; } else if ((ShmPsuData = shmat(MeterSMId, NULL, 0)) == (void *) -1) { #ifdef SystemLogMessage printf("shmat ShmPsuData NG \n"); #endif result = FAIL; } return result; } int InitCanBus() { int s0, nbytes; struct timeval tv; struct ifreq ifr0; struct sockaddr_can addr0; /* //can0 system("/sbin/ip link set can0 down");//先將interface disable system("/sbin/ip link set can0 type can bitrate 500000 restart-ms 100"); system("/sbin/ip link set can0 up"); */ //can1 system("/sbin/ip link set can0 down");//先將interface disable system("/sbin/ip link set can0 type can bitrate 250000 restart-ms 100"); system("/sbin/ip link set can0 up"); s0 = socket(PF_CAN, SOCK_RAW, CAN_RAW); tv.tv_sec = 0; tv.tv_usec = 10000; if(setsockopt(s0, SOL_SOCKET, SO_RCVTIMEO, (char *)&tv, sizeof(struct timeval)) < 0) { #ifdef SystemLogMessage //StoreLogMsg("[CsuComm]InitCanBus:Set SO_RCVTIMEO NG"); #endif } nbytes = 40960; if(setsockopt(s0, SOL_SOCKET, SO_RCVBUF, &nbytes, sizeof(int)) < 0) { #ifdef SystemLogMessage //StoreLogMsg("[CsuComm]InitCanBus:Set SO_RCVBUF NG"); #endif } nbytes = 40960; if(setsockopt(s0, SOL_SOCKET, SO_SNDBUF, &nbytes, sizeof(int)) < 0) { #ifdef SystemLogMessage //StoreLogMsg("[CsuComm]InitCanBus:Set SO_SNDBUF NG"); #endif } //strcpy(ifr0.ifr_name, "can0" ); strcpy(ifr0.ifr_name, "can0" ); ioctl(s0, SIOCGIFINDEX, &ifr0); /* ifr.ifr_ifindex gets filled with that device's index */ addr0.can_family = AF_CAN; addr0.can_ifindex = ifr0.ifr_ifindex; bind(s0, (struct sockaddr *)&addr0, sizeof(addr0)); return s0; } int CHROMAInitCanBus() { int s0,nbytes; struct timeval tv; struct ifreq ifr0; struct sockaddr_can addr0; system("/sbin/ip link set can1 down"); system("/sbin/ip link set can1 type can bitrate 500000 restart-ms 100"); system("/sbin/ip link set can1 up"); s0 = socket(PF_CAN, SOCK_RAW, CAN_RAW); tv.tv_sec = 0; tv.tv_usec = 10000; if (setsockopt(s0, SOL_SOCKET, SO_RCVTIMEO, (char *)&tv, sizeof(struct timeval)) < 0) { #ifdef SystemLogMessage //DEBUG_ERROR("Set SO_RCVTIMEO NG"); #endif } nbytes=40960; if (setsockopt(s0, SOL_SOCKET, SO_RCVBUF, &nbytes, sizeof(int)) < 0) { #ifdef SystemLogMessage //DEBUG_ERROR("Set SO_RCVBUF NG"); #endif } nbytes=40960; if (setsockopt(s0, SOL_SOCKET, SO_SNDBUF, &nbytes, sizeof(int)) < 0) { #ifdef SystemLogMessage //DEBUG_ERROR("Set SO_SNDBUF NG"); #endif } strcpy(ifr0.ifr_name, "can1" ); ioctl(s0, SIOCGIFINDEX, &ifr0); /* ifr.ifr_ifindex gets filled with that device's index */ addr0.can_family = AF_CAN; addr0.can_ifindex = ifr0.ifr_ifindex; bind(s0, (struct sockaddr *)&addr0, sizeof(addr0)); return s0; } bool CheckUniqNumber(byte value) { for (byte index = 0; index < gun_count; index++) { if (_chargingData[index]->Evboard_id == value) { struct timeval _end_time; gettimeofday(&_end_time, NULL); unsigned long diff = 1000000 * (_end_time.tv_sec - _id_assign_time.tv_sec) + _end_time.tv_usec - _id_assign_time.tv_usec; if (diff >= 3000000) { gettimeofday(&_id_assign_time, NULL); return true; } else { return false; } } } gettimeofday(&_id_assign_time, NULL); return true; } void AddrAssignment(byte *data) { byte target_number[8]; byte index = 0x00; memcpy(target_number, data, sizeof(target_number)); index = *(data + 4); if (CheckUniqNumber(index)) { //printf("EV board id = %x \n", index); if (index < 1) return; printf("SetTargetAddr \n"); SetTargetAddr(target_number, index); } } void setATEMode(byte gun_index, byte mode) { _chargingData[gun_index]->ATEStatus = mode; } void setStatusMode(byte gun_index, byte mode) { _chargingData[gun_index]->ATEStatus = mode; } unsigned char isStatusChange(unsigned char gun_index) { unsigned char result = NO; if(_chargingData[gun_index]->ATEStatus != _chargingData[gun_index]->PreviousATEStatus) { result = YES; _chargingData[gun_index]->PreviousATEStatus = _chargingData[gun_index]->ATEStatus; } return result; } int bitExtracted(byte number, int k, int p) { return (((1 << k) - 1) & (number >> (p - 1))); } unsigned short bitextract(unsigned short value, int begin, int end) { unsigned short mask = (1 << (end - begin)) - 1; return (value >> begin) & mask; } //接收can void CANReceiver() { pid_t canRecPid; canRecPid = fork(); if(canRecPid > 0){ int nbytes; struct can_frame frame; int intCmd; while (1){ if(ShmSysConfigAndInfo->ate.ATEState == 1){ //清空 canbus recever buf memset(&frame, 0, sizeof(struct can_frame)); //讀取 canbus 是否有接收到封包 nbytes = read(CanFd, &frame, sizeof(struct can_frame)); //如果有收到 canbus 封包 if (nbytes > 0){ intCmd = (int) (frame.can_id & CAN_EFF_MASK);//extended frame format #ifdef Debug //printf("hsout0StatusChange Get-INFYPWR-Msg : %08x - %02x %02x %02x %02x %02x %02x %02x %02x\n ", intCmd, frame.data[0], frame.data[1], frame.data[2], frame.data[3],frame.data[4], frame.data[5], frame.data[6], frame.data[7] ); //printf(" Get-Msg : %08X - %02x %02x %02x %02x %02x %02x %02x %02x\n ", frame.can_id, frame.data[0], frame.data[1], frame.data[2], frame.data[3],frame.data[4], frame.data[5], frame.data[6], frame.data[7] ); #endif switch (intCmd){ case VCCU_ChargeFromVehicleId:{ //memcpy(&ShmSysConfigAndInfo->ate.vccu.chargeFromVehicle, &frame.data, frame.can_dlc); ShmSysConfigAndInfo->ate.vccu.chargeFromVehicle.VCCU_Vehicle_ContactorVoltage = ((short) frame.data[1] << 8) + (short) frame.data[0]; ShmSysConfigAndInfo->ate.vccu.chargeFromVehicle.VCCU_Vehicle_LinkVoltage = ((short) frame.data[3] << 8) + (short) frame.data[2]; ShmSysConfigAndInfo->ate.vccu.chargeFromVehicle.DATA.bits.VCCU_Vehicle_IsolationMeasurem = bitextract(frame.data[4],0, 2);//((short) frame.data[4] >> 0)+((short) frame.data[4] >> 1);//((short) frame.data[4] << 2); ShmSysConfigAndInfo->ate.vccu.chargeFromVehicle.DATA.bits.VCCU_Vehicle_PlugLockPermissio = bitextract(frame.data[4],2, 4);//((short) frame.data[4] >> 2)+((short) frame.data[4] >> 3); ShmSysConfigAndInfo->ate.vccu.chargeFromVehicle.DATA.bits.VCCU_Vehicle_PlugUnlockPermiss = bitextract(frame.data[4],4, 6);//((short) frame.data[4] >> 4)+((short) frame.data[4] >> 5); ShmSysConfigAndInfo->ate.vccu.chargeFromVehicle.DATA.bits.VCCU_Vehicle_ChargePermission = bitextract(frame.data[4],6, 8);//((short) frame.data[4] >> 6)+((short) frame.data[4] >> 7); ShmSysConfigAndInfo->ate.vccu.chargeFromVehicle.bits.VCCU_Vehicle_ContactorStatus = bitextract(frame.data[5],0, 2); //memset(&ShmSysConfigAndInfo->ate.vccu.chargeFromVehicle,*frame.data, frame.can_dlc); break; } case VCCU_ControlPilotStatusId:{ //memcpy(&ShmSysConfigAndInfo->ate.vccu.controlPilotStatus, &frame.data, frame.can_dlc); ShmSysConfigAndInfo->ate.vccu.controlPilotStatus.ControlPilot_Frequency.bits.VCCU_ControlPilot_Frequency = ((short) frame.data[1] << 8) + (short) frame.data[0]; ShmSysConfigAndInfo->ate.vccu.controlPilotStatus.ControlPilot_DutyCycle.bits.value = ((short) frame.data[2] ) ; ShmSysConfigAndInfo->ate.vccu.controlPilotStatus.ControlPilot_Voltage.bits.value = ((short) frame.data[4] << 8) + (short) frame.data[3]; ShmSysConfigAndInfo->ate.vccu.controlPilotStatus.DATA.bits.VCCU_ControlPilot_Wakeup = bitextract(((short) (frame.data[5])), 0, 2); ShmSysConfigAndInfo->ate.vccu.controlPilotStatus.DATA.bits.VCCU_ChargeUnit_Mode = bitextract(frame.data[5],2, 5); ShmSysConfigAndInfo->ate.vccu.controlPilotStatus.DATA.bits.VCCU_ChargeUnit_State = bitextract(((short) (frame.data[5])), 5, 8); ShmSysConfigAndInfo->ate.vccu.controlPilotStatus.ChargeUnit_MaxCurrent = ((short) frame.data[6] ); //printf("ControlPilot_Voltage===== %d %02x %02x\n", (32000-ShmSysConfigAndInfo->ate.vccu.controlPilotStatus.ControlPilot_Voltage.bits.value), frame.data[4], frame.data[3]); //memset(&ShmSysConfigAndInfo->ate.vccu.controlPilotStatus.ControlPilot_Voltage,frame.data[5], frame.can_dlc); break; } case VCCU_V2G_StateMId:{ //memcpy(&ShmSysConfigAndInfo->ate.vccu.v2g_StateM, &frame.data, frame.can_dlc); ShmSysConfigAndInfo->ate.vccu.v2g_StateM.VCCU_V2G_StateM_EnergyTransfer = (short) frame.data[0]; ShmSysConfigAndInfo->ate.vccu.v2g_StateM.VCCU_V2G_StateM_StateMachineEr = (short) frame.data[1]; ShmSysConfigAndInfo->ate.vccu.v2g_StateM.VCCU_V2G_StateM_StateMachineMe = (short) frame.data[2]; ShmSysConfigAndInfo->ate.vccu.v2g_StateM.VCCU_V2G_StateM_StateMachineSt = (short) frame.data[3]; ShmSysConfigAndInfo->ate.vccu.v2g_StateM.DATA.bits.VCCU_V2G_StateM_InternetAvaila = bitextract(frame.data[4],0, 1); ShmSysConfigAndInfo->ate.vccu.v2g_StateM.DATA.bits.VCCU_V2G_Appl_SccChargeModeReq = bitextract(frame.data[4],1, 4); ShmSysConfigAndInfo->ate.vccu.v2g_StateM.DATA.bits.VCCU_V2G_Appl_SccFuncModeReq = bitextract(frame.data[4],4, 6); //memset(&ShmSysConfigAndInfo->ate.vccu.v2g_StateM.VCCU_V2G_StateM_StateMachineSt,*frame.data, frame.can_dlc); break; } case VCCU_InletStatusId:{ //memcpy(&ShmSysConfigAndInfo->ate.vccu.inletStatus, &frame.data, frame.can_dlc); ShmSysConfigAndInfo->ate.vccu.inletStatus.VCCU_POSFeedback_Voltage = ((short) frame.data[1] << 8) + (short) frame.data[0]; ShmSysConfigAndInfo->ate.vccu.inletStatus.DATA2.VCCU_PlugPresent_SelfDiagnosti = bitextract(frame.data[2],0, 3); ShmSysConfigAndInfo->ate.vccu.inletStatus.DATA2.VCCU_PlugPresent_Resistance = bitextract(frame.data[2],3, 6); ShmSysConfigAndInfo->ate.vccu.inletStatus.DATA2.VCCU_PlugPresent_Status = bitextract(frame.data[2],6, 8); ShmSysConfigAndInfo->ate.vccu.inletStatus.DATA3.VCCU_PlugPresent_Wakeup = bitextract(frame.data[3],0, 2); ShmSysConfigAndInfo->ate.vccu.inletStatus.DATA3.VCCU_POSFeedback_SelfDiagnosti = bitextract(frame.data[3],2, 5); ShmSysConfigAndInfo->ate.vccu.inletStatus.DATA3.VCCU_PlugLock_MotorStatus = bitextract(frame.data[3],5, 8); ShmSysConfigAndInfo->ate.vccu.inletStatus.DATA4.VCCU_PlugLock_Output0_SelfDiag = bitextract(frame.data[4],0, 3); ShmSysConfigAndInfo->ate.vccu.inletStatus.DATA4.VCCU_PlugLock_Output1_SelfDiag = bitextract(frame.data[4],3, 6); ShmSysConfigAndInfo->ate.vccu.inletStatus.DATA4.VCCU_Inlet_HWVariant = bitextract(frame.data[4],6, 8); ShmSysConfigAndInfo->ate.vccu.inletStatus.DATA5.bits.VCCU_DigitalInput_Status = bitextract(frame.data[5],0, 2); ShmSysConfigAndInfo->ate.vccu.inletStatus.DATA5.bits.VCCU_DigitalInput_Wakeup = bitextract(frame.data[5],2, 4); ShmSysConfigAndInfo->ate.vccu.inletStatus.DATA5.bits.VCCU_Inlet_MotorStatus = bitextract(frame.data[5],4, 7); ShmSysConfigAndInfo->ate.vccu.inletStatus.VCCU_Inlet_MaxCurrent = (short) frame.data[6]; ShmSysConfigAndInfo->ate.vccu.inletStatus.DATA7.bits.VCCU_DigitalInput_DebouncedSta = bitextract(frame.data[7],0, 2); ShmSysConfigAndInfo->ate.vccu.inletStatus.DATA7.bits.VCCU_Inlet_ConnectionStatus = bitextract(frame.data[7],2, 4); ShmSysConfigAndInfo->ate.vccu.inletStatus.DATA7.bits.VCCU_S3Switch_Status = bitextract(frame.data[7],4, 6); ShmSysConfigAndInfo->ate.vccu.inletStatus.DATA7.bits.VCCU_S3Switch_DebouncedStatus = bitextract(frame.data[7],6, 8); //memset(&ShmSysConfigAndInfo->ate.vccu.inletStatus,*frame.data, frame.can_dlc); //printf("VCCU_ControlPilotStatus Get-INFYPWR-Msg : %08x - %02x %02x %02x %02x %02x %02x %02x %02x\n ", intCmd, frame.data[0], frame.data[1], frame.data[2], frame.data[3],frame.data[4], frame.data[5], frame.data[6], frame.data[7] ); break; } case VCCU_ChargeToVehicleId:{ //memcpy(&ShmSysConfigAndInfo->ate.vccu.chargeToVehicle, &frame.data, frame.can_dlc); //ShmSysConfigAndInfo->ate.vccu.chargeToVehicle.Data.bits.VCCU_Vehicle_IsolationMea_0000 = bitextract(frame.data[0],0, 2); ShmSysConfigAndInfo->ate.vccu.chargeToVehicle.bits.VCCU_Vehicle_IsolationMea_0000 = bitextract(frame.data[0],0, 2); ShmSysConfigAndInfo->ate.vccu.chargeToVehicle.bits.VCCU_Vehicle_ContactorRequest = bitextract(frame.data[0],2, 4); //memset(&ShmSysConfigAndInfo->ate.vccu.chargeToVehicle,*frame.data, frame.can_dlc); //printf("VCCU_ControlPilotStatus Get-INFYPWR-Msg : %08x - %02x %02x %02x %02x %02x %02x %02x %02x\n ", intCmd, frame.data[0], frame.data[1], frame.data[2], frame.data[3],frame.data[4], frame.data[5], frame.data[6], frame.data[7] ); break; } case VCCU_V2G_EVMaximumVoltageLimitId:{ //memcpy(&ShmSysConfigAndInfo->ate.vccu.v2g_EVMaximumVoltageLimit, &frame.data, frame.can_dlc); //memset(&ShmSysConfigAndInfo->ate.vccu.v2g_EVMaximumVoltageLimit,*frame.data, frame.can_dlc); break; } case VCCU_V2G_EVSEMaximumCurrentLimId:{ ShmSysConfigAndInfo->ate.vccu.v2g_EVSEMaximumCurrentLim.DATA.VCCU_V2G_EVSEMaximumCurre_0002 = bitextract(frame.data[0],0, 4); ShmSysConfigAndInfo->ate.vccu.v2g_EVSEMaximumCurrentLim.DATA.VCCU_V2G_EVSEMaximumCurrentLim = bitextract(frame.data[0],4, 6); ShmSysConfigAndInfo->ate.vccu.v2g_EVSEMaximumCurrentLim.VCCU_V2G_EVSEMaximumCurre_0003 = (short) frame.data[1]; ShmSysConfigAndInfo->ate.vccu.v2g_EVSEMaximumCurrentLim.VCCU_V2G_EVSEMaximumCurre_0000 = ((short) frame.data[3] << 8) + (short) frame.data[2]; ShmSysConfigAndInfo->ate.vccu.v2g_EVSEMaximumCurrentLim.VCCU_V2G_EVSEMaximumCurre_0001 = (short) frame.data[4];//樁的電流 //printf("VCCU_V2G_EVSEMaximumCurrentLimId Get-INFYPWR-Msg : VCCU_V2G_EVSEMaximumCurre_0000 = %d \n ", ShmSysConfigAndInfo->ate.vccu.v2g_EVSEMaximumCurrentLim.VCCU_V2G_EVSEMaximumCurre_0000); //memcpy(&ShmSysConfigAndInfo->ate.vccu.v2g_EVMaximumCurrentLimit, &frame.data, frame.can_dlc); //memset(&ShmSysConfigAndInfo->ate.vccu.v2g_EVMaximumCurrentLimit,*frame.data, frame.can_dlc); break; } case VCCU_V2G_EVTargetCurrentId:{ //memcpy(&ShmSysConfigAndInfo->ate.vccu.v2g_EVTargetCurrent, &frame.data, frame.can_dlc); //memset(&ShmSysConfigAndInfo->ate.vccu.v2g_EVTargetCurrent,*frame.data, frame.can_dlc); break; } case VCCU_V2G_EVTargetVoltageId:{ //memcpy(&ShmSysConfigAndInfo->ate.vccu.v2g_EVTargetVoltage, &frame.data, frame.can_dlc); //memset(&ShmSysConfigAndInfo->ate.vccu.v2g_EVTargetVoltage,*frame.data, frame.can_dlc); break; } case VCCU_V2G_EVSEPresentVoltageId:{ ShmSysConfigAndInfo->ate.vccu.v2g_EVSEPresentVoltage.VCCU_V2G_EVSEPresentVoltage_Va = ((short) frame.data[3] << 8) + (short) frame.data[2]; //printf("EVSEPresentVoltage = %d\n ", ShmSysConfigAndInfo->ate.vccu.v2g_EVSEPresentVoltage.VCCU_V2G_EVSEPresentVoltage_Va ); ShmSysConfigAndInfo->ate.vccu.v2g_EVSEPresentVoltage.VCCU_V2G_EVSEPresentVoltage_Va = ShmSysConfigAndInfo->ate.vccu.v2g_EVSEPresentVoltage.VCCU_V2G_EVSEPresentVoltage_Va / 10; //printf("EVSEPresentVoltage = %d\n ", ShmSysConfigAndInfo->ate.vccu.v2g_EVSEPresentVoltage.VCCU_V2G_EVSEPresentVoltage_Va ); /* if(ShmSysConfigAndInfo->ate.vccu.v2g_EVSEPresentVoltage.VCCU_V2G_EVSEPresentVoltage_Va != 0){ ShmSysConfigAndInfo->ate.targetVoltage_Value = ShmSysConfigAndInfo->ate.vccu.v2g_EVSEPresentVoltage.VCCU_V2G_EVSEPresentVoltage_Va; } */ break; } default: break; } } usleep(2000); }else if(ShmSysConfigAndInfo->ate.ATEState == 2){ memset(&frame, 0, sizeof(struct can_frame)); nbytes = read(CanFd, &frame, sizeof(struct can_frame)); if (nbytes > 0) { intCmd = (int) (frame.can_id & CAN_EFF_MASK); #ifdef Debug //printf("hsout0StatusChange Get-INFYPWR-Msg : %08x - %02x %02x %02x %02x %02x %02x %02x %02x\n ", intCmd, frame.data[0], frame.data[1], frame.data[2], frame.data[3],frame.data[4], frame.data[5], frame.data[6], frame.data[7] ); //printf(" Get-Msg2 : %08X - %02x %02x %02x %02x %02x %02x %02x %02x\n ", frame.can_id, frame.data[0], frame.data[1], frame.data[2], frame.data[3],frame.data[4], frame.data[5], frame.data[6], frame.data[7] ); #endif if (intCmd == ADDRESS_REQ) { AddrAssignment(frame.data); continue; } intCmd = (int) (frame.can_id & CAN_EFF_MASK & 0xFFFFFF00); if(intCmd == 256) { continue; } //gettimeofday(&_cmd_ack_timeout[targetGun], NULL); //printf ("intCmd = %x \n", intCmd); switch (intCmd) { case EV_BOARD_STATUS_NOTIFICATION: { //printf(" EV_BOARD_STATUS_NOTIFICATION\n "); ShmSysConfigAndInfo->ate.chademo.id03.ProximitySignal = frame.data[2]; ShmSysConfigAndInfo->ate.chademo.id03.state = frame.data[3]; //printf(" EV_BOARD_STATUS_NOTIFICATION %d \n ", ShmSysConfigAndInfo->ate.chademo.id03.state); //printf(" EV_BOARD_STATUS_NOTIFICATION Get-Msg : %08X - %02x %02x %02x %02x %02x %02x %02x %02x\n ", frame.can_id, frame.data[0], frame.data[1], frame.data[2], frame.data[3],frame.data[4], frame.data[5], frame.data[6], frame.data[7] ); //printf("EVBoardStatusNotification Get-Msg : %08X - %02x %02x %02x %02x %02x %02x %02x %02x\n ", frame.can_id, frame.data[0], frame.data[1], frame.data[2], frame.data[3],frame.data[4], frame.data[5], frame.data[6], frame.data[7] ); //printf("ConnectorPlugIn = %x, data[0] = %x \n", _chargingData[target]->ConnectorPlugIn, frame.data[0]); //printf("ConnectorPlugIn = %x \n", (-120 + frame.data[1]) / 10); } break; case ACK_EV_FW_VERSION: { printf(" ACK_EV_FW_VERSION\n "); /* if (_chargingData[targetGun]->Type == _Type_Chademo) { memcpy(ShmCHAdeMOData->evse[_chargingData[targetGun]->type_index].version, frame.data, ARRAY_SIZE(frame.data)); ShmCHAdeMOData->evse[_chargingData[targetGun]->type_index].SelfTest_Comp = PASS; } else if (_chargingData[targetGun]->Type == _Type_CCS) { if (ShmCcsData->CommProtocol == 0x01) { memcpy(&ShmCcsData->V2GMessage_DIN70121[_chargingData[targetGun]->type_index].version, frame.data, ARRAY_SIZE(frame.data)); ShmCcsData->V2GMessage_DIN70121[_chargingData[targetGun]->type_index].SelfTest_Comp = PASS; } } */ } break; case ACK_EV_HW_VERSION: { printf("Get EV HW = %s \n", frame.data); } break; case ACK__GET_EVSE_OUTPUT_STATUS: { //printf(" ACK__GET_EVSE_OUTPUT_STATUS\n "); //printf(" ACK__GET_EVSE_OUTPUT_STATUS\n "); //printf(" Get EVSE output status Get-Msg : %08X - %02x %02x %02x %02x %02x %02x %02x %02x\n ", frame.can_id, frame.data[0], frame.data[1], frame.data[2], frame.data[3],frame.data[4], frame.data[5], frame.data[6], frame.data[7] ); ShmSysConfigAndInfo->ate.chademo.id09_ack.DcEvState = frame.data[0];//EV模擬器 ShmSysConfigAndInfo->ate.chademo.id09_ack.ChargingMode = frame.data[1]; ShmSysConfigAndInfo->ate.chademo.id09_ack.EvsePresentOutputVoltage = ((short) frame.data[3] << 8) + (short) frame.data[2];//充電樁輸出電壓 ShmSysConfigAndInfo->ate.chademo.id09_ack.EvsePresentOutputCurrent = ((short) frame.data[5] << 8) + (short) frame.data[4];//充電樁輸出電流 ShmSysConfigAndInfo->ate.chademo.id09_ack.RemainingTimeSec = ((short) frame.data[7] << 8) + (short) frame.data[6];//剩餘時間 /* _chargingData[targetGun]->EvBatterySoc = frame.data[1]; _chargingData[targetGun]->EvBatterytargetVoltage = ((short) frame.data[3] << 8) + (short) frame.data[2]; _chargingData[targetGun]->EvBatterytargetCurrent = ((short) frame.data[5] << 8) + (short) frame.data[4]; _chargingData[targetGun]->PresentChargedDuration = ((short) frame.data[7] << 8) + (short) frame.data[6]; if (_chargingData[targetGun]->Type == _Type_Chademo) { if (ShmCHAdeMOData->ev[_chargingData[targetGun]->type_index].EvDetection != frame.data[0]) { // log } ShmCHAdeMOData->ev[_chargingData[targetGun]->type_index].EvDetection = frame.data[0]; ShmCHAdeMOData->ev[_chargingData[targetGun]->type_index].SOC = _chargingData[targetGun]->EvBatterySoc; ShmCHAdeMOData->ev[_chargingData[targetGun]->type_index].TargetBatteryVoltage = _chargingData[targetGun]->EvBatterytargetVoltage; ShmCHAdeMOData->ev[_chargingData[targetGun]->type_index].ChargingCurrentRequest = _chargingData[targetGun]->EvBatterytargetCurrent; } else if (_chargingData[targetGun]->Type == _Type_CCS) { if(ShmCcsData->CommProtocol == 0x01) { ShmCcsData->V2GMessage_DIN70121[_chargingData[targetGun]->type_index].PresentMsgFlowStatus = frame.data[0]; } } */ //printf("frame.data_2 = %x, frame.data_3 = %x \n", frame.data[2], frame.data[3]); //printf("EvBatterytargetVoltage = %f \n", _chargingData[targetGun]->EvBatterytargetVoltage); //printf("EvBatterytargetCurrent = %f \n", _chargingData[targetGun]->EvBatterytargetCurrent); //printf("BatteryVoltage = %d \n", ShmCHAdeMOData->ev[_chargingData[target]->type_index].TargetBatteryVoltage); //printf("CurrentRequest = %d \n", ShmCHAdeMOData->ev[_chargingData[target]->type_index].ChargingCurrentRequest); } break; case ACK_GET_EVSE_Capacity_INFO: { ShmSysConfigAndInfo->ate.chademo.id0A_ack.EvseMaxChargeVoltage = ((short) frame.data[1] << 8) + (short) frame.data[0];//樁的最大電壓 ShmSysConfigAndInfo->ate.chademo.id0A_ack.EvseMaxChargeCurrent = ((short) frame.data[3] << 8) + (short) frame.data[2];//樁的最大電流 ShmSysConfigAndInfo->ate.chademo.id0A_ack.EvseMinChargeVoltage = ((short) frame.data[5] << 8) + (short) frame.data[4]; ShmSysConfigAndInfo->ate.chademo.id0A_ack.EvseMinChargeCurrent = ((short) frame.data[7] << 8) + (short) frame.data[6]; /* //_chargingData[target].EvACorDCcharging = frame.data[0]; //_chargingData[target]->TotalBatteryCap = ((float) frame.data[4] << 8) + (short) frame.data[3]; _chargingData[targetGun]->EvBatteryMaxVoltage = ((short) frame.data[4] << 8) + (short) frame.data[3]; //_chargingData[target]->EvBatteryMaxCurrent = ((float) frame.data[4] << 8) + (short) frame.data[3]; //_chargingData[target].MaxiBatteryCurrent = ((short) frame.data[6] << 8) + (short) frame.data[5]; if (_chargingData[targetGun]->Type == _Type_Chademo) { ShmCHAdeMOData->ev[_chargingData[targetGun]->type_index].TotalBatteryCapacity = ((short) frame.data[2] << 8) + (short) frame.data[1]; ShmCHAdeMOData->ev[_chargingData[targetGun]->type_index].MaxiBatteryVoltage = _chargingData[targetGun]->EvBatteryMaxVoltage; //printf("EvBatteryMaxVoltage = %f \n", _chargingData[target]->EvBatteryMaxVoltage); //printf("TotalBatteryCapacity = %d \n", ShmCHAdeMOData->ev[_chargingData[target]->type_index].TotalBatteryCapacity); //printf("MaxiBatteryVoltage = %d \n", ShmCHAdeMOData->ev[_chargingData[target]->type_index].MaxiBatteryVoltage); } else if (_chargingData[targetGun]->Type == _Type_CCS) { if(ShmCcsData->CommProtocol == 0x01) { } } */ } break; case ACK_GET_MISCELLANEOUS_INFO: { //printf(" ACK_GET_MISCELLANEOUS_INFO\n "); //printf(" ACK_GET_MISCELLANEOUS_INFO\n "); ShmSysConfigAndInfo->ate.chademo.id0D_ack.K1K2OnOff = frame.data[5]; if(ShmSysConfigAndInfo->ate.chademo.relaystatus == 0){ ShmSysConfigAndInfo->ate.chademo.id0D_req.K1K2Status = ShmSysConfigAndInfo->ate.chademo.id0D_ack.K1K2OnOff; setStatusMode(CCS_QUANTITY, ShmSysConfigAndInfo->ate.chademo.id0D_req.K1K2Status); int status = isStatusChange(CCS_QUANTITY); if(status){ /* if(ShmSysConfigAndInfo->ate.chademo.id0D_req.K1K2Status == 1){ if(ShmSysConfigAndInfo->ate.ATEState == 1){ //usleep(whileLoopTime); //outputRelay.relay_event.bits.Gun1_Parallel_N = 0x00; //outputRelay.relay_event.bits.Gun1_Parallel_P = 0x00; //Config_Relay_Output(Uart5Fd, Addr.Relay, &outputRelay); }else if(ShmSysConfigAndInfo->ate.ATEState == 2){ //outputRelay.relay_event.bits.Gun1_Parallel_N = 0x01; //outputRelay.relay_event.bits.Gun1_Parallel_P = 0x01; //Config_Relay_Output(Uart5Fd, Addr.Relay, &outputRelay); } }else{ } */ } } //memcpy(&ShmSysConfigAndInfo->ate.chademo.id0D_ack, &frame.data, frame.can_dlc); //printf("%d %d\n", ShmSysConfigAndInfo->ate.chademo.id0D_ack.K1K2OnOff, ShmSysConfigAndInfo->ate.chademo.id0D_ack.EvBoardState); //printf(" Get-Msg : %08X - %02x %02x %02x %02x %02x %02x %02x %02x\n ", frame.can_id, frame.data[0], frame.data[1], frame.data[2], frame.data[3],frame.data[4], frame.data[5], frame.data[6], frame.data[7] ); /* float pilotVol = (float)(-120 + frame.data[3]) / 10; // if (pilotVol != _chargingData[targetGun]->PilotVoltage) // DEBUG_INFO("PilotVoltage = %f \n", _chargingData[targetGun]->PilotVoltage); if (_chargingData[targetGun]->Type == _Type_Chademo) { _chargingData[targetGun]->GunLocked = frame.data[0]; ShmCHAdeMOData->evse[_chargingData[targetGun]->type_index].ConnectorTemperatureP = frame.data[1]; ShmCHAdeMOData->evse[_chargingData[targetGun]->type_index].ConnectorTemperatureN = frame.data[2]; _chargingData[targetGun]->PilotVoltage = pilotVol; ShmCHAdeMOData->evse[_chargingData[targetGun]->type_index].EvboardStatus = frame.data[7]; } else if (_chargingData[targetGun]->Type == _Type_CCS) { if (ShmCcsData->CommProtocol == 0x01) { _chargingData[targetGun]->GunLocked = frame.data[0]; //ShmCcsData->V2GMessage_DIN70121[_chargingData[targetGun]->type_index]. .ConnectorTemperatureP = frame.data[1]; //ShmCcsData->V2GMessage_DIN70121[_chargingData[targetGun]->type_index]. .ConnectorTemperatureN = frame.data[2]; _chargingData[targetGun]->PilotVoltage = pilotVol; } } */ //printf("ConnectorPlug locked = %x \n", frame.data[0]); //printf("ConnectorTemp 0= %d \n", ShmCHAdeMOData->evse[_chargingData[target]->type_index].ConnectorTemperatureP); //printf("ConnectorTemp 1= %d \n", ShmCHAdeMOData->evse[_chargingData[target]->type_index].ConnectorTemperatureN); } break; case ACK_EVSE_ISOLATION_STATUS: { } break; case ACK_EVSE_PRECHAGE_INFO: { //_chargingData[targetGun]->PrechargeStatus = frame.data[0]; } break; case NOTIFICATION_EV_STOP: { printf(" ACK_GET_MISCELLANEOUS_INFO\n "); ShmSysConfigAndInfo->ate.chademo.id0B.EvStopReason = frame.data[0]; ShmSysConfigAndInfo->ate.chademo.id0B.AlarmCode1 = frame.data[1]; ShmSysConfigAndInfo->ate.chademo.id0B.AlarmCode2 = frame.data[2]; ShmSysConfigAndInfo->ate.chademo.id0B.AlarmCode3 = frame.data[3]; ShmSysConfigAndInfo->ate.chademo.id0B.AlarmCode4 = frame.data[4]; ShmSysConfigAndInfo->ate.chademo.id0B.AlarmCode5 = frame.data[5]; ShmSysConfigAndInfo->ate.chademo.id0B.AlarmCode6 = frame.data[6]; printf("EvStopReason = %d %d %d %d %d %d %d \n", ShmSysConfigAndInfo->ate.chademo.id0B.EvStopReason, ShmSysConfigAndInfo->ate.chademo.id0B.AlarmCode1, ShmSysConfigAndInfo->ate.chademo.id0B.AlarmCode2, ShmSysConfigAndInfo->ate.chademo.id0B.AlarmCode3, ShmSysConfigAndInfo->ate.chademo.id0B.AlarmCode4, ShmSysConfigAndInfo->ate.chademo.id0B.AlarmCode5, ShmSysConfigAndInfo->ate.chademo.id0B.AlarmCode6); //byte normalStop = 0x01; //byte stopReason[6] = { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 }; //byte evstaus[5] = { 0x01, 0x02, 0x03, 0x04, 0x05 }; //ShmSysConfigAndInfo->ate.Permission = STOP; //setChargerMode(CCS_QUANTITY, ShmSysConfigAndInfo->ate.Permission); //ShmSysConfigAndInfo->ate.ATEStatus = 0x00; //SetChargingPermission(CCS_QUANTITY, ShmSysConfigAndInfo->ate.Permission, ShmSysConfigAndInfo->ate.TotalBatteryCap, ShmSysConfigAndInfo->ate.MaxBatteryCurrent, ShmSysConfigAndInfo->ate.MaxBatteryVoltage, 1); //EvseStopChargingEvent(normalStop, stopReason, 1); setEVStatus1(evstaus[4]); ShmSysConfigAndInfo->ate.Permission = STOP; setStatusMode(CCS_QUANTITY, ShmSysConfigAndInfo->ate.Permission); ShmSysConfigAndInfo->ate.ATEStatus = 0x00; SetChargingPermission(CCS_QUANTITY, ShmSysConfigAndInfo->ate.Permission, ShmSysConfigAndInfo->ate.TotalBatteryCap, ShmSysConfigAndInfo->ate.MaxBatteryCurrent, ShmSysConfigAndInfo->ate.MaxBatteryVoltage, 1); EvseStopChargingEvent(normalStop, stopReason, 1); /* ShmSysConfigAndInfo->ate.Permission = STOP; setChargerMode(CCS_QUANTITY, ShmSysConfigAndInfo->ate.Permission); ShmSysConfigAndInfo->ate.ATEStatus = 0x00; SetChargingPermission(CCS_QUANTITY, ShmSysConfigAndInfo->ate.Permission, ShmSysConfigAndInfo->ate.TotalBatteryCap, ShmSysConfigAndInfo->ate.MaxBatteryCurrent, ShmSysConfigAndInfo->ate.MaxBatteryVoltage, 1); */ /* time_t CurrentTime; struct tm *tm; CurrentTime = time(NULL); tm = localtime(& CurrentTime); printf(" Get-Msg : %08X - %02x %02x %02x %02x %02x %02x %02x %02x\n ", frame.can_id, frame.data[0], frame.data[1], frame.data[2], frame.data[3],frame.data[4], frame.data[5], frame.data[6], frame.data[7] ); printf("NOTIFICATION_EV_STOP : %04d-%02d-%02d %02d:%02d:%02d \n", tm->tm_year+1900,tm->tm_mon+1,tm->tm_mday,tm->tm_hour,tm->tm_min,tm->tm_sec); // 車端要求停止 // frame.data[0] : 0x01 => normal stop, 0x02 => ev emergency stop if (frame.data[0] == 0x02) { //printf("NOTIFICATION_EV_STOP -----------------------------\n"); AbnormalStopAnalysis(targetGun, frame.data + 1); } _chargingData[targetGun]->StopChargeFlag = YES; */ } break; default: //printf("Ack none defined. intCmd = %d \n", intCmd); break; } } usleep(10000); } } } } //接收can void CHROMACANReceiver() { pid_t canRecPid; canRecPid = fork(); if(canRecPid > 0){ int nbytes; struct can_frame frame; int intCmd; while (1){ //清空 canbus recever buf memset(&frame, 0, sizeof(struct can_frame)); //讀取 canbus 是否有接收到封包 nbytes = read(CanFd2, &frame, sizeof(struct can_frame)); //如果有收到 canbus 封包 if (nbytes > 0){ intCmd = (int) (frame.can_id & CAN_EFF_MASK);//extended frame format #ifdef Debug //printf("hsout0StatusChange Get-INFYPWR-Msg : %08x - %02x %02x %02x %02x %02x %02x %02x %02x\n ", intCmd, frame.data[0], frame.data[1], frame.data[2], frame.data[3],frame.data[4], frame.data[5], frame.data[6], frame.data[7] ); //printf(" Get-Msg : %08X - %02x %02x %02x %02x %02x %02x %02x %02x\n ", frame.can_id, frame.data[0], frame.data[1], frame.data[2], frame.data[3],frame.data[4], frame.data[5], frame.data[6], frame.data[7] ); #endif //printf("hsout0StatusChange Get-INFYPWR-Msg : %08x - %02x %02x %02x %02x %02x %02x %02x %02x\n ", frame.can_id, frame.data[0], frame.data[1], frame.data[2], frame.data[3],frame.data[4], frame.data[5], frame.data[6], frame.data[7] ); //printf("Ack none defined. intCmd = %08x \n", intCmd); switch (intCmd){ case bn_res1:{ /* ShmSysConfigAndInfo->ate.ATEState = (short) frame.data[0]; setATEMode(CCS_QUANTITY, ShmSysConfigAndInfo->ate.ATEState); printf("00010102 Get-Msg : %d %08X - %02x %02x %02x %02x %02x %02x %02x %02x\n ", ShmSysConfigAndInfo->ate.ATEState, frame.can_id, frame.data[0], frame.data[1], frame.data[2], frame.data[3],frame.data[4], frame.data[5], frame.data[6], frame.data[7] ); */ break; } case bn_res2:{ //printf(" Get-Msg : %08X - %02x %02x %02x %02x %02x %02x %02x %02x\n ", frame.can_id, frame.data[0], frame.data[1], frame.data[2], frame.data[3],frame.data[4], frame.data[5], frame.data[6], frame.data[7] ); break; } case ATE_Connector2:{ /* ShmSysConfigAndInfo->ate.chroma.ate_Connector_2.TargetVoltage = ((short) frame.data[1] << 8) + (short) frame.data[0];// ShmSysConfigAndInfo->ate.chroma.ate_Connector_2.TargetCurrent = ((short) frame.data[3] << 8) + (short) frame.data[2];// ShmSysConfigAndInfo->ate.chroma.ate_Connector_2.PresentVoltage = ((short) frame.data[5] << 8) + (short) frame.data[4]; ShmSysConfigAndInfo->ate.chroma.ate_Connector_2.PresentCurrent = ((short) frame.data[7] << 8) + (short) frame.data[6]; //ShmSysConfigAndInfo->ate.linkVoltage = ShmSysConfigAndInfo->ate.chroma.ate_Connector_2.PresentVoltage; ShmSysConfigAndInfo->ate.targetVoltage_Value = ((short) frame.data[1] << 8) + (short) frame.data[0]; ShmSysConfigAndInfo->ate.targetCurrent_Value = ((short) frame.data[3] << 8) + (short) frame.data[2]; //ShmSysConfigAndInfo->ate.maximumVoltage_value = ShmSysConfigAndInfo->ate.targetVoltage_Value+(ShmSysConfigAndInfo->ate.targetVoltage_Value*0.1); ShmSysConfigAndInfo->ate.maximumVoltage_value = ShmSysConfigAndInfo->ate.targetVoltage_Value+10; ShmSysConfigAndInfo->ate.linkVoltage = ShmSysConfigAndInfo->ate.targetVoltage_Value; */ //printf("targetVoltage_Value= %d targetCurrent_Value =%d maximumVoltage_value = %d linkVoltage = %d \n",ShmSysConfigAndInfo->ate.targetVoltage_Value, ShmSysConfigAndInfo->ate.targetCurrent_Value, ShmSysConfigAndInfo->ate.maximumVoltage_value, ShmSysConfigAndInfo->ate.linkVoltage); //printf("ATE_Connector2 Get-Msg : %08X - %02x %02x %02x %02x %02x %02x %02x %02x %d %d %d %d %d %d \n ", frame.can_id, frame.data[0], frame.data[1], frame.data[2], frame.data[3],frame.data[4], frame.data[5], frame.data[6], frame.data[7], ShmSysConfigAndInfo->ate.chroma.ate_Connector_2.TargetVoltage, ShmSysConfigAndInfo->ate.chroma.ate_Connector_2.TargetCurrent, ShmSysConfigAndInfo->ate.chroma.ate_Connector_2.PresentVoltage, ShmSysConfigAndInfo->ate.chroma.ate_Connector_2.PresentCurrent, ShmSysConfigAndInfo->ate.targetVoltage_Value, ShmSysConfigAndInfo->ate.targetCurrent_Value); break; } case ATE_Connector1:{ if(ShmSysConfigAndInfo->ate.ATEState == 1){//ccs ShmSysConfigAndInfo->ate.chroma.ate_Connector_1.TargetVoltage = ((short) frame.data[1] << 8) + (short) frame.data[0];// ShmSysConfigAndInfo->ate.chroma.ate_Connector_1.TargetCurrent = ((short) frame.data[3] << 8) + (short) frame.data[2];// ShmSysConfigAndInfo->ate.chroma.ate_Connector_1.PresentVoltage = ((short) frame.data[5] << 8) + (short) frame.data[4]; ShmSysConfigAndInfo->ate.chroma.ate_Connector_1.PresentCurrent = ((short) frame.data[7] << 8) + (short) frame.data[6]; //ShmSysConfigAndInfo->ate.linkVoltage = ShmSysConfigAndInfo->ate.chroma.ate_Connector_1.PresentVoltage; //ShmSysConfigAndInfo->ate.targetVoltage_Value = ((short) frame.data[1] << 8) + (short) frame.data[0]; int voltage = ((short) frame.data[1] << 8) + (short) frame.data[0]; int evseMaxCurrent = ShmSysConfigAndInfo->ate.vccu.v2g_EVSEMaximumCurrentLim.VCCU_V2G_EVSEMaximumCurre_0000 / 10; //int evseMaxvoltage = ShmSysConfigAndInfo->ate.vccu.v2g_EVSEPresentVoltage.VCCU_V2G_EVSEPresentVoltage_Va / 10; ShmSysConfigAndInfo->ate.targetCurrent_Value = ((short) frame.data[3] << 8) + (short) frame.data[2]; //ShmSysConfigAndInfo->ate.maximumVoltage_value = ShmSysConfigAndInfo->ate.targetVoltage_Value+(ShmSysConfigAndInfo->ate.targetVoltage_Value*0.1); //ShmSysConfigAndInfo->ate.maximumVoltage_value = ShmSysConfigAndInfo->ate.targetVoltage_Value+10; //ShmSysConfigAndInfo->ate.maximumVoltage_value = 0; //ShmSysConfigAndInfo->ate.targetVoltage_Value = 0; if(voltage > (maxValue - 10)){ ShmSysConfigAndInfo->ate.maximumVoltage_value = maxValue; ShmSysConfigAndInfo->ate.targetVoltage_Value = maxValue - 20; ShmSysConfigAndInfo->ate.linkVoltage = maxValue - 20; }else{ ShmSysConfigAndInfo->ate.maximumVoltage_value = voltage + 10; ShmSysConfigAndInfo->ate.targetVoltage_Value = voltage - 10; ShmSysConfigAndInfo->ate.linkVoltage = voltage - 10; } if((ShmSysConfigAndInfo->ate.targetCurrent_Value > evseMaxCurrent) && (evseMaxCurrent > 0)){ ShmSysConfigAndInfo->ate.targetCurrent_Value = evseMaxCurrent; } }else if (ShmSysConfigAndInfo->ate.ATEState == 2){//gb ShmSysConfigAndInfo->ate.chroma.ate_Connector_2.TargetVoltage = ((short) frame.data[1] << 8) + (short) frame.data[0];// ShmSysConfigAndInfo->ate.chroma.ate_Connector_2.TargetCurrent = ((short) frame.data[3] << 8) + (short) frame.data[2];// ShmSysConfigAndInfo->ate.chroma.ate_Connector_2.PresentVoltage = ((short) frame.data[5] << 8) + (short) frame.data[4]; ShmSysConfigAndInfo->ate.chroma.ate_Connector_2.PresentCurrent = ((short) frame.data[7] << 8) + (short) frame.data[6]; int voltage = ShmSysConfigAndInfo->ate.chroma.ate_Connector_2.TargetVoltage * 10; int current = ShmSysConfigAndInfo->ate.chroma.ate_Connector_2.TargetCurrent * 10; if(voltage > (gbmaxValue - 100)){ //ShmSysConfigAndInfo->ate.targetVoltage_Value = maxValue - 100; ShmSysConfigAndInfo->ate.chademoTargetVoltage_Value = gbmaxValue - 100; ShmSysConfigAndInfo->ate.RequireVoltage = gbmaxValue -100; ShmSysConfigAndInfo->ate.MaxBatteryVoltage = gbmaxValue; }else{ ShmSysConfigAndInfo->ate.chademoTargetVoltage_Value = voltage; ShmSysConfigAndInfo->ate.RequireVoltage = voltage; ShmSysConfigAndInfo->ate.MaxBatteryVoltage = gbmaxValue; } //ShmSysConfigAndInfo->ate.targetVoltage_Value = voltage; ShmSysConfigAndInfo->ate.chademoTargetCurrent_Value = current; ShmSysConfigAndInfo->ate.RequireCurrent = current; //printf("voltage= %d cstatus = %d current= %d voltage =%d %02x %02x \n", ShmSysConfigAndInfo->ate.targetVoltage_Value, ShmSysConfigAndInfo->ate.chademo.id03.state , current, voltage, frame.data[1], frame.data[0]); }else if (ShmSysConfigAndInfo->ate.ATEState == 3){//chademo } //printf("targetVoltage_Value= %d targetCurrent_Value =%d maximumVoltage_value = %d linkVoltage = %d \n",ShmSysConfigAndInfo->ate.targetVoltage_Value, ShmSysConfigAndInfo->ate.targetCurrent_Value, ShmSysConfigAndInfo->ate.maximumVoltage_value, ShmSysConfigAndInfo->ate.linkVoltage); //printf("ATE_Connector1 Get-Msg : %08X - %02x %02x %02x %02x %02x %02x %02x %02x %d %d %d %d %d %d \n ", frame.can_id, frame.data[0], frame.data[1], frame.data[2], frame.data[3],frame.data[4], frame.data[5], frame.data[6], frame.data[7], ShmSysConfigAndInfo->ate.chroma.ate_Connector_1.TargetVoltage, ShmSysConfigAndInfo->ate.chroma.ate_Connector_1.TargetCurrent, ShmSysConfigAndInfo->ate.chroma.ate_Connector_1.PresentVoltage, ShmSysConfigAndInfo->ate.chroma.ate_Connector_1.PresentCurrent, ShmSysConfigAndInfo->ate.targetVoltage_Value, ShmSysConfigAndInfo->ate.targetCurrent_Value ); break; } default: break; } } usleep(2000); //usleep(100000); } } } int DiffTimeb(struct timeb ST, struct timeb ET) { //return milli-second unsigned int StartTime,StopTime; StartTime=(unsigned int)ST.time; StopTime=(unsigned int)ET.time; //return (StopTime-StartTime)*1000+ET.millitm-ST.millitm; return (StopTime-StartTime); } unsigned short MaxValue(unsigned short value1, unsigned short value2) { return value1 >= value2 ? value1 : value2; } void Initialization() { _chargingData[CCS_QUANTITY] = &ShmSysConfigAndInfo->SysInfo.CcsChargingData[CCS_QUANTITY]; } void VCCU_Requests(int LED0, int LED1, int LED2, int HighSideOut0, int HighSideOut1, int HighSideOut2, int HighSideOut3, int HighSideOut4, int RTC_TimerRequest, int PlugLock, int RTC_TimerValue, int ControlPilot, int ChargeUnit, int Inlet){ struct VCCU_Requests obj; obj.VCCU_LED0_Request = LED0;//0.0 obj.VCCU_LED1_Request = LED1;//0.0 obj.VCCU_LED2_Request = LED2;//0.0 obj.byte3.VCCU_HighSideOut0_Request = HighSideOut0;//3 obj.byte3.VCCU_HighSideOut1_Request = HighSideOut1;//3 obj.byte3.VCCU_HighSideOut2_Request = HighSideOut2;//3 obj.byte3.VCCU_HighSideOut3_Request = HighSideOut3;//3 obj.byte4.VCCU_HighSideOut4_Request = HighSideOut4;//3 obj.byte4.VCCU_RTC_TimerRequest = RTC_TimerRequest;//3 obj.byte4.VCCU_PlugLock_MotorRequest = PlugLock;//7 obj.VCCU_RTC_TimerValue= RTC_TimerValue;//0 obj.byte6.VCCU_ControlPilot_ChargeModeRe = ControlPilot;//7 obj.byte6.VCCU_ChargeUnit_Request = ChargeUnit;//3 obj.byte6.VCCU_Inlet_MotorRequest = Inlet;//3 byte data[7]; data[0] = *((UBYTE *) &obj.VCCU_LED0_Request); data[1] = *((UBYTE *) &obj.VCCU_LED1_Request); data[2] = *((UBYTE *) &obj.VCCU_LED2_Request); data[3] = *((UBYTE *) &obj.byte3); data[4] = *((UBYTE *) &obj.byte4); data[5] = *((UBYTE *) &obj.VCCU_RTC_TimerValue); data[6] = *((UBYTE *) &obj.byte6); //printf("%02x %02x %02x %02x %02x %02x %02x \n", data[0], data[1], data[2], data[3], data[4], data[5] , data[6]); setVCCU_Requests(data, sizeof(data)); } void VCCU_ChargeFromVehicle(int canfd, int linkVoltage, int contactorVoltage, int chargePermission, int isolationMeasurem, int plugLockPermissio, int plugUnlockPermiss, int contactorStatus){ struct VCCU_ChargeFromVehicle obj; obj.VCCU_Vehicle_LinkVoltage= linkVoltage;//500 obj.VCCU_Vehicle_ContactorVoltage = contactorVoltage;//0 obj.DATA.bits.VCCU_Vehicle_ChargePermission = chargePermission;//Not_allowed obj.DATA.bits.VCCU_Vehicle_IsolationMeasurem = isolationMeasurem;//Active obj.DATA.bits.VCCU_Vehicle_PlugLockPermissio = plugLockPermissio;//Allowed//Not_allowed; obj.DATA.bits.VCCU_Vehicle_PlugUnlockPermiss = plugUnlockPermiss;//Not_allowed obj.bits.VCCU_Vehicle_ContactorStatus = contactorStatus;//Open obj.bits.VCCU_Vehicle_StopCharge = 3;//Open obj.bits.VCCU_Vehicle_ChargeSelection = 3;//Open byte* data1; data1 = (byte*) &(*((UWORD *) &obj.VCCU_Vehicle_ContactorVoltage)); byte* data2; data2 = (byte*) &(*((UWORD *) &obj.VCCU_Vehicle_LinkVoltage)); byte data[6]; data[0] = data1[0]; data[1] = data1[1]; data[2] = data2[0]; data[3] = data2[1]; data[4] = *((UBYTE *) &obj.DATA); data[5] = *((UBYTE *) &obj.bits); setVCCU_ChargeFromVehicle(data, sizeof(data)); } void VCVCCU_V2G_RemainingTimeToFullSO(int remainingTime){ struct VCCU_V2G_RemainingTimeToFullSO obj; obj.VCCU_V2G_RemainingTimeToB_0000.value = remainingTime; obj.DATA.VCCU_V2G_RemainingTimeToFullSO = 1; obj.DATA.VCCU_V2G_RemainingTimeToF_0002 = 0;//520 obj.VCCU_V2G_RemainingTimeToB_0001.value = 0;//1 obj.VCCU_V2G_RemainingTimeToB_0003.value = 0;//0 byte* data1; data1 = (byte*) &(*((UWORD *) &obj.VCCU_V2G_RemainingTimeToB_0000)); byte data[5]; data[0] = data1[0]; data[1] = data1[1]; data[2] = *((UBYTE *) &obj.VCCU_V2G_RemainingTimeToB_0003); data[3] = *((UBYTE *) &obj.VCCU_V2G_RemainingTimeToB_0001); data[4] = *((UBYTE *) &obj.DATA); setVCCU_V2G_RemainingTimeToFullSO(data, sizeof(data)); } void VCCU_V2G_EVMaximumVoltageLimit(int VMaximumVoltageLimit, int EVMaximumVoltage_0002, int EVMaximumVoltage_0000, int EVMaximumVoltage_0001, int EVMaximumVoltage_0003){ struct VCCU_V2G_EVMaximumVoltageLimit obj; obj.DATA1.VCCU_V2G_EVMaximumVoltageLimit = VMaximumVoltageLimit;//1 obj.DATA1.VCCU_V2G_EVMaximumVoltage_0002 = EVMaximumVoltage_0002;//5 obj.VCCU_V2G_EVMaximumVoltage_0000.value = EVMaximumVoltage_0000;//520 obj.VCCU_V2G_EVMaximumVoltage_0001.value = EVMaximumVoltage_0001;//1 obj.VCCU_V2G_EVMaximumVoltage_0003.value = EVMaximumVoltage_0003;//0 byte* data1; data1 = (byte*) &(*((UWORD *) &obj.VCCU_V2G_EVMaximumVoltage_0000)); byte data[5]; data[0] = *((UBYTE *) &obj.DATA1); data[1] = *((UBYTE *) &obj.VCCU_V2G_EVMaximumVoltage_0003); data[2] = data1[0]; data[3] = data1[1]; data[4] = *((UBYTE *) &obj.VCCU_V2G_EVMaximumVoltage_0001); //printf("%02x %02x %02x %02x %02x \n", data[0], data[1], data[2], data[3], data[4]); setVCCU_V2G_EVMaximumVoltageLimit(data, sizeof(data)); } void VCCU_V2G_EVMaximumCurrentLimit(int EVMaximumCurrentLimit, int EVMaximumCurrent_0000, int EVMaximumCurrent_0001, int EVMaximumCurrent_0002, int EVMaximumCurrent_0003){ struct VCCU_V2G_EVMaximumCurrentLimit obj; obj.DATA1.VCCU_V2G_EVMaximumCurrentLimit = EVMaximumCurrentLimit;//1 obj.DATA1.VCCU_V2G_EVMaximumCurrent_0000 = EVMaximumCurrent_0000;//3 obj.VCCU_V2G_EVMaximumCurrent_0001.value = EVMaximumCurrent_0001;//1 obj.VCCU_V2G_EVMaximumCurrent_0002.value = EVMaximumCurrent_0002;//0 obj.VCCU_V2G_EVMaximumCurrent_0003.value = EVMaximumCurrent_0003;//10 byte* data1; data1 = (byte*) &(*((UWORD *) &obj.VCCU_V2G_EVMaximumCurrent_0003)); byte data[5]; data[0] = *((UBYTE *) &obj.DATA1); data[1] = *((UBYTE *) &obj.VCCU_V2G_EVMaximumCurrent_0002); data[2] = data1[0]; data[3] = data1[1]; data[4] = *((UBYTE *) &obj.VCCU_V2G_EVMaximumCurrent_0001); //printf("%02x %02x %02x %02x %02x \n", data[0], data[1], data[2], data[3], data[4]); setVCCU_V2G_EVMaximumCurrentLimit(data, sizeof(data)); } void VCCU_V2G_EVTargetVoltage(int EVTargetVoltage_Value, int EVTargetVoltage_Unit, int EVTargetVoltage_UnitF, int EVTargetVoltage_Multi){//C2 01 00 01 05 struct VCCU_V2G_EVTargetVoltage obj; obj.VCCU_V2G_EVTargetVoltage_Value.value = EVTargetVoltage_Value;//450 obj.VCCU_V2G_EVTargetVoltage_Unit.value = EVTargetVoltage_Unit;//5 obj.VCCU_V2G_EVTargetVoltage_UnitF.value = EVTargetVoltage_UnitF;//1 obj.VCCU_V2G_EVTargetVoltage_Multi.value = EVTargetVoltage_Multi;//0 byte* data1; data1 = (byte*) &(*((UWORD *) &obj.VCCU_V2G_EVTargetVoltage_Value)); byte data[5]; data[0] = data1[0]; data[1] = data1[1]; data[2] = *((UBYTE *) &obj.VCCU_V2G_EVTargetVoltage_Multi); data[3] = *((UBYTE *) &obj.VCCU_V2G_EVTargetVoltage_UnitF); data[4] = *((UBYTE *) &obj.VCCU_V2G_EVTargetVoltage_Unit); //printf("%d %02x %02x \n",obj.VCCU_V2G_EVTargetVoltage_Value.value, data[0], data[1]); //printf("%02x %02x %02x %02x %02x \n", data[0], data[1], data[2], data[3], data[4]); setVCCU_V2G_EVTargetVoltage(data, sizeof(data)); } void VCCU_V2G_EVTargetCurrent(int EVTargetCurrent_Unit, int EVTargetCurrent_Value, int EVTargetCurrent_UnitF, int EVTargetCurrent_Multi){//05 00 00 01 03 struct VCCU_V2G_EVTargetCurrent obj; obj.VCCU_V2G_EVTargetCurrent_Unit.value = EVTargetCurrent_Unit;//3 obj.VCCU_V2G_EVTargetCurrent_Value.value = EVTargetCurrent_Value;//5 obj.VCCU_V2G_EVTargetCurrent_UnitF.value = EVTargetCurrent_UnitF;//1 obj.VCCU_V2G_EVTargetCurrent_Multi.value = EVTargetCurrent_Multi;//0 byte* data1; data1 = (byte*) &(*((UWORD *) &obj.VCCU_V2G_EVTargetCurrent_Value)); byte data[5]; data[0] = data1[0]; data[1] = data1[1]; data[2] = *((UBYTE *) &obj.VCCU_V2G_EVTargetCurrent_Multi); data[3] = *((UBYTE *) &obj.VCCU_V2G_EVTargetCurrent_UnitF); data[4] = *((UBYTE *) &obj.VCCU_V2G_EVTargetCurrent_Unit); //printf("%02x %02x %02x %02x %02x \n", data[0], data[1], data[2], data[3], data[4]); setVCCU_V2G_EVTargetCurrent(data, sizeof(data)); } void VCCU_V2G_VehicleStatus(int canfd, int EnergyTra, int EVErrorCode, int EVPowerDeliveryParame, int EVRESSSOC, int EVRESSConditioningFla, int EVRESSConditionin, int EVReady, int BulkChargingCompleteF, int EVCabinConditioningFl, int EVCabinConditioning, int ChargingComplete, int FullSOCFlag, int FullSOC, int BulkSOCFlag, int BulkSOC, int BulkChargingComplete, int BulkChargingCompleteFValue){ struct VCCU_V2G_VehicleStatus obj; obj.DATA4.VCCU_V2G_StateM_EnergyTra_0000 = EnergyTra;//VCCU_V2G_StateM_EnergyTra_0000_DC_DC_extended; obj.DATA1.VCCU_V2G_EVErrorCode = EVErrorCode;//0; obj.DATA4.VCCU_V2G_EVPowerDeliveryParame = EVPowerDeliveryParame;//3; obj.VCCU_V2G_EVRESSSOC.value = EVRESSSOC;//0; obj.DATA3.VCCU_V2G_EVRESSConditioningFla = EVRESSConditioningFla;//3; obj.DATA3.VCCU_V2G_EVRESSConditioning = EVRESSConditionin;//3; obj.DATA3.VCCU_V2G_EVReady = EVReady;//3; obj.DATA1.VCCU_V2G_BulkChargingCompleteF = BulkChargingCompleteF;//3; obj.DATA3.VCCU_V2G_EVCabinConditioningFl = EVCabinConditioningFl;//3; obj.DATA2.VCCU_V2G_EVCabinConditioning = EVCabinConditioning;//3; obj.DATA2.VCCU_V2G_ChargingComplete = ChargingComplete;//3; obj.DATA2.VCCU_V2G_FullSOCFlag = FullSOCFlag;//0; obj.VCCU_V2G_FullSOC.value = FullSOC;//3; obj.DATA2.VCCU_V2G_BulkSOCFlag = BulkSOCFlag;//3; obj.VCCU_V2G_BulkSOC.value = BulkSOC;//0; obj.DATA1.VCCU_V2G_BulkChargingComplete = BulkChargingComplete;//3; obj.DATA1.VCCU_V2G_BulkChargingCompleteF = BulkChargingCompleteFValue;//3; byte data[7]; data[0] = *((UBYTE *) &obj.DATA1); data[1] = *((UBYTE *) &obj.DATA2); data[2] = *((UBYTE *) &obj.DATA3); data[3] = *((UBYTE *) &obj.DATA4); data[4] = *((UBYTE *) &obj.VCCU_V2G_BulkSOC); data[5] = *((UBYTE *) &obj.VCCU_V2G_FullSOC); data[6] = *((UBYTE *) &obj.VCCU_V2G_EVRESSSOC); setVCCU_V2G_VehicleStatus(data, sizeof(data)); } unsigned char isModeChange(unsigned char gun_index) { unsigned char result = NO; if(_chargingData[gun_index]->SystemStatus != _chargingData[gun_index]->PreviousSystemStatus) { result = YES; _chargingData[gun_index]->PreviousSystemStatus = _chargingData[gun_index]->SystemStatus; } return result; } void setChargerMode(byte gun_index, byte mode) { _chargingData[gun_index]->SystemStatus = mode; } void handleEmulatorFaultStatus(){ setEVStatus1(evstaus[4]); ShmSysConfigAndInfo->ate.Permission = STOP; setStatusMode(CCS_QUANTITY, ShmSysConfigAndInfo->ate.Permission); ShmSysConfigAndInfo->ate.ATEStatus = 0x00; SetChargingPermission(CCS_QUANTITY, ShmSysConfigAndInfo->ate.Permission, ShmSysConfigAndInfo->ate.TotalBatteryCap, ShmSysConfigAndInfo->ate.MaxBatteryCurrent, ShmSysConfigAndInfo->ate.MaxBatteryVoltage, 1); EvseStopChargingEvent(normalStop, stopReason, 1); } int main(int argc, char *argv[]) { if(InitShareMemory() == FAIL) { #ifdef SystemLogMessage printf("InitShareMemory NG\n"); #endif if(ShmStatusCodeData != NULL) { ShmStatusCodeData->AlarmCode.AlarmEvents.bits.FailToCreateShareMemory=1; } sleep(5); return 0; } Initialization(); CanFd = InitCanBus(); CanFd2 = CHROMAInitCanBus(); CANReceiver(); CHROMACANReceiver(); //printf("%08X %08X %d %d %d ....................\n" , bn1, (bn1 | 0x80000000), CanFd, CanFd2, ShmSysConfigAndInfo->ate.ATEState); /* sleep(2); system("killall Module_InternalComm"); system("killall Module_EvComm"); return 0; */ printf("EvComm %d....................\n" , ShmSysConfigAndInfo->ate.ATEState); while(true){ if(ShmSysConfigAndInfo->ate.ATEState == 1){//VCCU setBootNotification1(); VCCU_TD(); VCCU_Requests(0, 0, 0, 3, 3, 3, 3, 3, 3, 7, 0, 7, 3, 3); int status = isModeChange(CCS_QUANTITY); VCVCCU_V2G_RemainingTimeToFullSO(8000); switch(_chargingData[CCS_QUANTITY]->SystemStatus){ case V_IDLE:{ if (status){ printf("CCS IDLE Processing 1....................\n"); } setEVStatus1(evstaus[0]); break; } case V_UNMATEDPLUG:{ if (status){ printf("CCS UNMATEDPLUG Processing 2....................\n"); } setEVStatus1(evstaus[0]); VCCU_ChargeFromVehicle(CanFd, ShmSysConfigAndInfo->ate.linkVoltage, 0, Not_allowed, Active, Not_allowed, Not_allowed, Opened); break; } case V_MATED_PLUG_INLET_UNLOCKED:{ if (status){ if(ShmSysConfigAndInfo->ate.vccu.inletStatus.DATA2.VCCU_PlugPresent_Status == VCCU_InletStatus_Connected){ } printf("CCS MATED_PLUG_INLET_UNLOCKED Processing 3....................\n"); } setEVStatus1(evstaus[0]); VCCU_ChargeFromVehicle(CanFd, ShmSysConfigAndInfo->ate.linkVoltage, 0, Not_allowed, Active, Allowed, Not_allowed, Opened); //VCCU_ChargeFromVehicle(CanFd, ShmSysConfigAndInfo->ate.linkVoltage, 0, Not_allowed, Active, Allowed, Not_allowed, Opened); break; } case V_INLETLOCKING:{ if (status){ printf("CCS INLETLOCKING Processing 4....................\n"); } setEVStatus1(evstaus[0]); break; } case V_INLETLOCKED:{ if (status){ printf("CCS INLETLOCKED Processing 5....................\n"); } setEVStatus1(evstaus[1]); VCCU_ChargeFromVehicle(CanFd, ShmSysConfigAndInfo->ate.linkVoltage, 0, Not_allowed, Active, Allowed, Not_allowed, Opened); VCCU_V2G_EVMaximumVoltageLimit(TRUE, U_V, ShmSysConfigAndInfo->ate.maximumVoltage_value, TRUE, 0); VCCU_V2G_EVMaximumCurrentLimit(TRUE, U_A, TRUE, 0, ShmSysConfigAndInfo->ate.maximumCurrent_value); VCCU_V2G_EVTargetVoltage(ShmSysConfigAndInfo->ate.targetVoltage_Value, U_V, TRUE, 0); VCCU_V2G_EVTargetCurrent(U_A, ShmSysConfigAndInfo->ate.targetCurrent_Value, TRUE, 0); VCCU_V2G_VehicleStatus(CanFd, VCCU_V2G_StateM_EnergyTra_0000_DC_DC_extended, 0, 3, soc, 3, 3, TRUE, 3, 3, 3, 3, 3, 0, 3, 0, 3, 3); /* VCCU_V2G_EVMaximumVoltageLimit(TRUE, U_V, ShmSysConfigAndInfo->ate.maximumVoltage_value, TRUE, 0); VCCU_V2G_EVMaximumCurrentLimit(TRUE, U_A, TRUE, 0, ShmSysConfigAndInfo->ate.maximumCurrent_value); */ break; } case V_SLAC:{ if (status){ printf("CCS SLAC Processing 6....................\n"); } setEVStatus1(evstaus[1]); VCCU_ChargeFromVehicle(CanFd, ShmSysConfigAndInfo->ate.linkVoltage, 0, Not_allowed, Active, Allowed, Not_allowed, Opened); /* VCCU_V2G_EVMaximumVoltageLimit(TRUE, U_V, ShmSysConfigAndInfo->ate.maximumVoltage_value, TRUE, 0); VCCU_V2G_EVMaximumCurrentLimit(TRUE, U_A, TRUE, 0, ShmSysConfigAndInfo->ate.maximumCurrent_value); */ VCCU_V2G_VehicleStatus(CanFd, VCCU_V2G_StateM_EnergyTra_0000_DC_DC_extended, 0, 3, soc, 3, 3, TRUE, 3, 3, 3, 3, 3, 0, 3, 0, 3, 3); VCCU_V2G_EVMaximumVoltageLimit(TRUE, U_V, ShmSysConfigAndInfo->ate.maximumVoltage_value, TRUE, 0); VCCU_V2G_EVMaximumCurrentLimit(TRUE, U_A, TRUE, 0, ShmSysConfigAndInfo->ate.maximumCurrent_value); VCCU_V2G_EVTargetVoltage(ShmSysConfigAndInfo->ate.targetVoltage_Value, U_V, TRUE, 0); VCCU_V2G_EVTargetCurrent(U_A, ShmSysConfigAndInfo->ate.targetCurrent_Value, TRUE, 0); break; } case V_DEFINITION:{ if (status){ printf("CCS DEFINITION Processing 7....................\n"); } setEVStatus1(evstaus[1]); /* VCCU_V2G_VehicleStatus(CanFd, VCCU_V2G_StateM_EnergyTra_0000_DC_DC_extended, 0, 3, 0, 3, 3, TRUE, 3, 3, 3, 3, 3, 0, 3, 0, 3, 3); */ /* VCCU_V2G_EVMaximumVoltageLimit(TRUE, U_V, 500, TRUE, 0); VCCU_V2G_EVMaximumCurrentLimit(TRUE, U_A, TRUE, 0, 10); VCCU_V2G_EVMaximumVoltageLimit(TRUE, U_V, ShmSysConfigAndInfo->ate.maximumVoltage_value, TRUE, 0); VCCU_V2G_EVMaximumCurrentLimit(TRUE, U_A, TRUE, 0, ShmSysConfigAndInfo->ate.maximumCurrent_value); */ VCCU_ChargeFromVehicle(CanFd, ShmSysConfigAndInfo->ate.linkVoltage, 0, Not_allowed, Active, Allowed, Not_allowed, Opened); VCCU_V2G_VehicleStatus(CanFd, VCCU_V2G_StateM_EnergyTra_0000_DC_DC_extended, 0, 3, soc, 3, 3, TRUE, 3, 3, 3, 3, 3, 0, 3, 0, 3, 3); VCCU_V2G_EVMaximumVoltageLimit(TRUE, U_V, ShmSysConfigAndInfo->ate.maximumVoltage_value, TRUE, 0); VCCU_V2G_EVMaximumCurrentLimit(TRUE, U_A, TRUE, 0, ShmSysConfigAndInfo->ate.maximumCurrent_value); VCCU_V2G_EVTargetVoltage(ShmSysConfigAndInfo->ate.targetVoltage_Value, U_V, TRUE, 0); VCCU_V2G_EVTargetCurrent(U_A, ShmSysConfigAndInfo->ate.targetCurrent_Value, TRUE, 0); break; } case V_CABLECHECK:{ if (status){ printf("CCS CABLECHECK Processing 8....................\n"); } setEVStatus1(evstaus[1]); VCCU_ChargeFromVehicle(CanFd, ShmSysConfigAndInfo->ate.linkVoltage, 0, Allowed, Active, Allowed, Not_allowed, Opened); VCCU_V2G_VehicleStatus(CanFd, VCCU_V2G_StateM_EnergyTra_0000_DC_DC_extended, 0, 3, soc, 3, 3, TRUE, 3, 3, 3, 3, 3, 0, 3, 0, 3, 3); VCCU_V2G_EVMaximumVoltageLimit(TRUE, U_V, ShmSysConfigAndInfo->ate.maximumVoltage_value, TRUE, 0); VCCU_V2G_EVMaximumCurrentLimit(TRUE, U_A, TRUE, 0, ShmSysConfigAndInfo->ate.maximumCurrent_value); VCCU_V2G_EVTargetVoltage(ShmSysConfigAndInfo->ate.targetVoltage_Value, U_V, TRUE, 0); VCCU_V2G_EVTargetCurrent(U_A, ShmSysConfigAndInfo->ate.targetCurrent_Value, TRUE, 0); break; } case V_ISOLATION:{ if (status){ printf("CCS ISOLATION Processing 9....................\n"); } setEVStatus1(evstaus[1]); VCCU_ChargeFromVehicle(CanFd, ShmSysConfigAndInfo->ate.linkVoltage, 0, Allowed, Not_Active, Allowed, Not_allowed, Opened); VCCU_V2G_VehicleStatus(CanFd, VCCU_V2G_StateM_EnergyTra_0000_DC_DC_extended, 0, 3, soc, 3, 3, TRUE, 3, 3, 3, 3, 3, 0, 3, 0, 3, 3); VCCU_V2G_EVMaximumVoltageLimit(TRUE, U_V, ShmSysConfigAndInfo->ate.maximumVoltage_value, TRUE, 0); VCCU_V2G_EVMaximumCurrentLimit(TRUE, U_A, TRUE, 0, ShmSysConfigAndInfo->ate.maximumCurrent_value); VCCU_V2G_EVTargetVoltage(ShmSysConfigAndInfo->ate.targetVoltage_Value, U_V, TRUE, 0); VCCU_V2G_EVTargetCurrent(U_A, ShmSysConfigAndInfo->ate.targetCurrent_Value, TRUE, 0); break; } case V_VOLTAGEDIFFERENCE:{ if (status){ printf("CCS VOLTAGEDIFFERENCE Processing 10 VCCU_V2G_EVSEPresentVoltage_Va = %d ....................\n", ShmSysConfigAndInfo->ate.vccu.v2g_EVSEPresentVoltage.VCCU_V2G_EVSEPresentVoltage_Va); } setEVStatus1(evstaus[1]); /* int val = (ShmSysConfigAndInfo->ate.linkVoltage - ShmSysConfigAndInfo->ate.vccu.v2g_EVSEPresentVoltage.VCCU_V2G_EVSEPresentVoltage_Va); printf("linkVoltage = %d v2g_EVSEPresentVoltage = %d val = %d RemainChargingDuration = %d....................\n", ShmSysConfigAndInfo->ate.linkVoltage, ShmSysConfigAndInfo->ate.vccu.v2g_EVSEPresentVoltage.VCCU_V2G_EVSEPresentVoltage_Va, val, _chargingData[CCS_QUANTITY]->RemainChargingDuration); */ VCCU_ChargeFromVehicle(CanFd, ShmSysConfigAndInfo->ate.linkVoltage, ShmSysConfigAndInfo->ate.vccu.v2g_EVSEPresentVoltage.VCCU_V2G_EVSEPresentVoltage_Va, Allowed, Not_Active, Allowed, Not_allowed, Opened); //VCCU_V2G_EVTargetCurrent(U_A, ShmSysConfigAndInfo->ate.targetCurrent_Value, TRUE, 0); VCCU_V2G_VehicleStatus(CanFd, VCCU_V2G_StateM_EnergyTra_0000_DC_DC_extended, 0, 3, soc, 3, 3, TRUE, 3, 3, 3, 3, 3, 0, 3, 0, 3, 3); VCCU_V2G_EVMaximumVoltageLimit(TRUE, U_V, ShmSysConfigAndInfo->ate.maximumVoltage_value, TRUE, 0); VCCU_V2G_EVMaximumCurrentLimit(TRUE, U_A, TRUE, 0, ShmSysConfigAndInfo->ate.maximumCurrent_value); VCCU_V2G_EVTargetVoltage(ShmSysConfigAndInfo->ate.targetVoltage_Value, U_V, TRUE, 0); VCCU_V2G_EVTargetCurrent(U_A, ShmSysConfigAndInfo->ate.targetCurrent_Value, TRUE, 0); break; } case V_CONTACTORSCLOSED:{ if (status){ printf("CCS CONTACTORSCLOSED Processing 11....................\n"); //printf("EVSEPresentVoltage = %d\n ", ShmSysConfigAndInfo->ate.vccu.v2g_EVSEPresentVoltage.VCCU_V2G_EVSEPresentVoltage_Va ); } // setEVStatus1(evstaus[1]); if(ShmSysConfigAndInfo->ate.vccu.chargeToVehicle.bits.VCCU_Vehicle_ContactorRequest == Closed){ VCCU_ChargeFromVehicle(CanFd, ShmSysConfigAndInfo->ate.linkVoltage, ShmSysConfigAndInfo->ate.vccu.v2g_EVSEPresentVoltage.VCCU_V2G_EVSEPresentVoltage_Va, Allowed, Not_Active, Allowed, Not_allowed, Closed); }else{ VCCU_ChargeFromVehicle(CanFd, ShmSysConfigAndInfo->ate.linkVoltage, ShmSysConfigAndInfo->ate.vccu.v2g_EVSEPresentVoltage.VCCU_V2G_EVSEPresentVoltage_Va, Allowed, Not_Active, Allowed, Not_allowed, Opened); } VCCU_V2G_VehicleStatus(CanFd, VCCU_V2G_StateM_EnergyTra_0000_DC_DC_extended, 0, 3, soc, 3, 3, TRUE, 3, 3, 3, 3, 3, 0, 3, 0, 3, 3); VCCU_V2G_EVMaximumVoltageLimit(TRUE, U_V, ShmSysConfigAndInfo->ate.maximumVoltage_value, TRUE, 0); VCCU_V2G_EVMaximumCurrentLimit(TRUE, U_A, TRUE, 0, ShmSysConfigAndInfo->ate.maximumCurrent_value); VCCU_V2G_EVTargetVoltage(ShmSysConfigAndInfo->ate.targetVoltage_Value, U_V, TRUE, 0); VCCU_V2G_EVTargetCurrent(U_A, ShmSysConfigAndInfo->ate.targetCurrent_Value, TRUE, 0); break; } case V_POWERDELIVERY:{ if (status){ printf("CCS POWERDELIVERY Processing 12....................\n"); //usleep(50000); } VCCU_ChargeFromVehicle(CanFd, ShmSysConfigAndInfo->ate.linkVoltage, ShmSysConfigAndInfo->ate.vccu.v2g_EVSEPresentVoltage.VCCU_V2G_EVSEPresentVoltage_Va, Allowed, Not_Active, Allowed, Not_allowed, Closed); /* if(ShmSysConfigAndInfo->ate.ATEStatus == 0){ VCCU_ChargeFromVehicle(CanFd, ShmSysConfigAndInfo->ate.linkVoltage, ShmSysConfigAndInfo->ate.vccu.v2g_EVSEPresentVoltage.VCCU_V2G_EVSEPresentVoltage_Va, Allowed, Not_Active, Allowed, Not_allowed, Closed); }else{ VCCU_ChargeFromVehicle(CanFd, ShmSysConfigAndInfo->ate.linkVoltage, ShmSysConfigAndInfo->ate.vccu.v2g_EVSEPresentVoltage.VCCU_V2G_EVSEPresentVoltage_Va, Not_allowed, Not_Active, Allowed, Not_allowed, Opened); } */ //VCCU_V2G_EVTargetVoltage(400, U_V, TRUE, 0); VCCU_V2G_VehicleStatus(CanFd, VCCU_V2G_StateM_EnergyTra_0000_DC_DC_extended, 0, 3, soc, 3, 3, TRUE, 3, 3, 3, 3, 3, 0, 3, 0, 3, 3); VCCU_V2G_EVMaximumVoltageLimit(TRUE, U_V, ShmSysConfigAndInfo->ate.maximumVoltage_value, TRUE, 0); VCCU_V2G_EVMaximumCurrentLimit(TRUE, U_A, TRUE, 0, ShmSysConfigAndInfo->ate.maximumCurrent_value); VCCU_V2G_EVTargetVoltage(ShmSysConfigAndInfo->ate.targetVoltage_Value, U_V, TRUE, 0); VCCU_V2G_EVTargetCurrent(U_A, ShmSysConfigAndInfo->ate.targetCurrent_Value, TRUE, 0); setEVStatus1(evstaus[1]); break; } case V_CURRENTDEMAND:{ if (status){ printf("CCS CURRENTDEMAND Processing 13 %d %d %d %d....................\n", ShmSysConfigAndInfo->ate.targetCurrent_Value, ShmSysConfigAndInfo->ate.targetVoltage_Value, ShmSysConfigAndInfo->ate.linkVoltage, ShmSysConfigAndInfo->ate.vccu.v2g_EVSEPresentVoltage.VCCU_V2G_EVSEPresentVoltage_Va); //ShmSysConfigAndInfo->ate.linkVoltage = ShmSysConfigAndInfo->ate.vccu.v2g_EVSEPresentVoltage.VCCU_V2G_EVSEPresentVoltage_Va; //printf("maximumVoltage_value = %d Voltage = %d maximumCurrent_value = %d Current = %d....................\n", ShmSysConfigAndInfo->ate.maximumVoltage_value, ShmSysConfigAndInfo->ate.targetVoltage_Value, ShmSysConfigAndInfo->ate.maximumCurrent_value, ShmSysConfigAndInfo->ate.targetCurrent_Value); //usleep(50000); } setEVStatus1(evstaus[2]); if(ShmSysConfigAndInfo->ate.vccu.chargeToVehicle.bits.VCCU_Vehicle_ContactorRequest == Opened){ printf("CCS CURRENTDEMAND Processing %d %d %d %d....................\n", ShmSysConfigAndInfo->ate.targetCurrent_Value, ShmSysConfigAndInfo->ate.targetVoltage_Value, ShmSysConfigAndInfo->ate.linkVoltage, ShmSysConfigAndInfo->ate.vccu.v2g_EVSEPresentVoltage.VCCU_V2G_EVSEPresentVoltage_Va); //VCCU_ChargeFromVehicle(CanFd, ShmSysConfigAndInfo->ate.linkVoltage, ShmSysConfigAndInfo->ate.vccu.v2g_EVSEPresentVoltage.VCCU_V2G_EVSEPresentVoltage_Va, Not_allowed, Not_Active, Allowed, Not_allowed, Opened); }else{ //VCCU_ChargeFromVehicle(CanFd, ShmSysConfigAndInfo->ate.linkVoltage, ShmSysConfigAndInfo->ate.vccu.v2g_EVSEPresentVoltage.VCCU_V2G_EVSEPresentVoltage_Va, Allowed, Not_Active, Allowed, Not_allowed, Closed); } VCCU_ChargeFromVehicle(CanFd, ShmSysConfigAndInfo->ate.linkVoltage, ShmSysConfigAndInfo->ate.vccu.v2g_EVSEPresentVoltage.VCCU_V2G_EVSEPresentVoltage_Va, Allowed, Not_Active, Allowed, Not_allowed, Closed); /* if(ShmSysConfigAndInfo->ate.ATEStatus == 0){ //VCCU_ChargeFromVehicle(CanFd, 500, 500, Allowed, Not_Active, Allowed, Not_allowed, Closed); VCCU_ChargeFromVehicle(CanFd, ShmSysConfigAndInfo->ate.linkVoltage, ShmSysConfigAndInfo->ate.vccu.v2g_EVSEPresentVoltage.VCCU_V2G_EVSEPresentVoltage_Va, Allowed, Not_Active, Allowed, Not_allowed, Closed); }else{ //VCCU_ChargeFromVehicle(CanFd, 500, 500, Not_allowed, Not_Active, Allowed, Not_allowed, Closed); VCCU_ChargeFromVehicle(CanFd, ShmSysConfigAndInfo->ate.linkVoltage, ShmSysConfigAndInfo->ate.vccu.v2g_EVSEPresentVoltage.VCCU_V2G_EVSEPresentVoltage_Va, Not_allowed, Not_Active, Allowed, Not_allowed, Closed); } */ VCCU_V2G_VehicleStatus(CanFd, VCCU_V2G_StateM_EnergyTra_0000_DC_DC_extended, 0, 3, soc, 3, 3, TRUE, 3, 3, 3, 3, 3, 0, 3, 0, 3, 3); VCCU_V2G_EVMaximumVoltageLimit(TRUE, U_V, ShmSysConfigAndInfo->ate.maximumVoltage_value, TRUE, 0); VCCU_V2G_EVMaximumCurrentLimit(TRUE, U_A, TRUE, 0, ShmSysConfigAndInfo->ate.maximumCurrent_value); VCCU_V2G_EVTargetVoltage(ShmSysConfigAndInfo->ate.targetVoltage_Value, U_V, TRUE, 0); VCCU_V2G_EVTargetCurrent(U_A, ShmSysConfigAndInfo->ate.targetCurrent_Value, TRUE, 0); break; } case V_POWERDELIVERYFALSE:{ if (status){ printf("CCS POWERDELIVERYFALSE Processing 14....................\n"); } setEVStatus1(evstaus[3]); VCCU_ChargeFromVehicle(CanFd, ShmSysConfigAndInfo->ate.linkVoltage, ShmSysConfigAndInfo->ate.linkVoltage, Not_allowed, Not_Active, Allowed, Not_allowed, Opened); break; } case V_DETECTION:{ if (status){ printf("CCS DETECTION Processing 15....................\n"); } setEVStatus1(evstaus[3]); VCCU_ChargeFromVehicle(CanFd, ShmSysConfigAndInfo->ate.linkVoltage, 0, Not_allowed, Active, Allowed, Not_allowed, Opened); break; } case V_SESSION_STOP:{ if (status){ printf("CCS SESSION_STOP Processing 16....................\n"); } setEVStatus1(evstaus[3]); VCCU_ChargeFromVehicle(CanFd, ShmSysConfigAndInfo->ate.linkVoltage, 0, Not_allowed, Active, Allowed, Not_allowed, Opened); break; } case V_STOP_COMMUNICATION_SESSION:{ if (status){ printf("CCS STOP_COMMUNICATION_SESSION Processing 17....................\n"); } setEVStatus1(evstaus[3]); VCCU_ChargeFromVehicle(CanFd, ShmSysConfigAndInfo->ate.linkVoltage, 0, Not_allowed, Active, Allowed, Not_allowed, Opened); break; } case V_FINISHED:{ if (status){ printf("CCS FINISHED Processing 18....................\n"); } setEVStatus1(evstaus[3]); VCCU_ChargeFromVehicle(CanFd, ShmSysConfigAndInfo->ate.linkVoltage, 0, Not_allowed, Active, Allowed, Not_allowed, Opened); break; } default:{ break; } } //usleep(25000); usleep(40000); //setBootNotification1(); }else if(ShmSysConfigAndInfo->ate.ATEState == 2){//GB if(ShmSysConfigAndInfo->ate.status == 0){ int status = isModeChange(CCS_QUANTITY); setBootNotification1(); usleep(1000); setMisc(1, ShmSysConfigAndInfo->ate.chademo.id0D_req.K1K2Status, ShmSysConfigAndInfo->ate.chademo.id0D_req.Soc); if(ShmSysConfigAndInfo->ate.ATEStatus == 1){ ShmSysConfigAndInfo->ate.Permission = START; setChargerMode(CCS_QUANTITY, ShmSysConfigAndInfo->ate.Permission); //ShmSysConfigAndInfo->ate.Permission = START; //setChargerMode(CCS_QUANTITY, ShmSysConfigAndInfo->ate.Permission); //printf("ATEStatus == 1 %d \n",ShmSysConfigAndInfo->ate.ATEStatus); }else if(ShmSysConfigAndInfo->ate.ATEStatus == 2){ ShmSysConfigAndInfo->ate.Permission = STOP; setChargerMode(CCS_QUANTITY, ShmSysConfigAndInfo->ate.Permission); //printf("ATEStatus == 2 %d \n",ShmSysConfigAndInfo->ate.ATEStatus); ShmSysConfigAndInfo->ate.ATEStatus = 0; }else if(ShmSysConfigAndInfo->ate.ATEStatus == 3){ //setEVStatus1(evstaus[4]); ShmSysConfigAndInfo->ate.Permission = STOP; setChargerMode(CCS_QUANTITY, ShmSysConfigAndInfo->ate.Permission); ShmSysConfigAndInfo->ate.ATEStatus = 0x00; SetChargingPermission(CCS_QUANTITY, ShmSysConfigAndInfo->ate.Permission, ShmSysConfigAndInfo->ate.TotalBatteryCap, ShmSysConfigAndInfo->ate.MaxBatteryCurrent, ShmSysConfigAndInfo->ate.MaxBatteryVoltage, 1); EvseStopChargingEvent(normalStop, stopReason, 1); }else{ } //printf("state == %d permission = %d \n",ShmSysConfigAndInfo->ate.chademo.id03.state, ShmSysConfigAndInfo->ate.Permission); if(ShmSysConfigAndInfo->ate.chademo.id03.state == 0 && ShmSysConfigAndInfo->ate.Permission == 0){ //SetChargingPermission(CCS_QUANTITY, START, 1000, 1200, 6000, 1); //setChargerMode(CCS_QUANTITY, ShmSysConfigAndInfo->ate.Permission); ShmSysConfigAndInfo->ate.Permission = START; setChargerMode(CCS_QUANTITY, ShmSysConfigAndInfo->ate.Permission); SetChargingPermission(CCS_QUANTITY, ShmSysConfigAndInfo->ate.Permission, ShmSysConfigAndInfo->ate.TotalBatteryCap, ShmSysConfigAndInfo->ate.MaxBatteryCurrent, ShmSysConfigAndInfo->ate.MaxBatteryVoltage, 1); setEVStatus1(evstaus[0]); }else if(ShmSysConfigAndInfo->ate.chademo.id03.state ==1){ ShmSysConfigAndInfo->ate.Permission = STOP; setEVStatus1(evstaus[0]); }else if(ShmSysConfigAndInfo->ate.chademo.id03.state ==2){ ShmSysConfigAndInfo->ate.Permission = STOP; setEVStatus1(evstaus[1]); }else if(ShmSysConfigAndInfo->ate.chademo.id03.state ==3){ ShmSysConfigAndInfo->ate.Permission = STOP; //setEVStatus1(evstaus[1]); setEVStatus1(evstaus[1]); }else if(ShmSysConfigAndInfo->ate.chademo.id03.state ==4){ ShmSysConfigAndInfo->ate.Permission = STOP; //setEVStatus1(evstaus[1]); setEVStatus1(evstaus[1]); }else if(ShmSysConfigAndInfo->ate.chademo.id03.state == 5){ ShmSysConfigAndInfo->ate.Permission = STOP; setEVStatus1(evstaus[1]); }else if(ShmSysConfigAndInfo->ate.chademo.id03.state == 6){ ShmSysConfigAndInfo->ate.Permission = STOP; setEVStatus1(evstaus[1]); }else if(ShmSysConfigAndInfo->ate.chademo.id03.state == 7){ ShmSysConfigAndInfo->ate.Permission = STOP; setEVStatus1(evstaus[2]); //setEVStatus2(evstaus[2]); }else if(ShmSysConfigAndInfo->ate.chademo.id03.state == 8){ ShmSysConfigAndInfo->ate.Permission = STOP; //outputRelay.relay_event.bits.Gun1_Parallel_N = 0x00; //outputRelay.relay_event.bits.Gun1_Parallel_P = 0x00; setEVStatus1(evstaus[2]); //setEVStatus2(evstaus[2]); }//else if(ShmSysConfigAndInfo->ate.chademo.id03.state == 16 ){ else if(ShmSysConfigAndInfo->ate.chademo.id03.state >= 13 ){ handleEmulatorFaultStatus(); //setEVStatus1(evstaus[3]); }else if(ShmSysConfigAndInfo->ate.chademo.id03.state == 14 ){ handleEmulatorFaultStatus(); //setEVStatus1(evstaus[3]); }else if(ShmSysConfigAndInfo->ate.chademo.id03.state == 9 || ShmSysConfigAndInfo->ate.chademo.id03.state == 10 || ShmSysConfigAndInfo->ate.chademo.id03.state == 11 || ShmSysConfigAndInfo->ate.chademo.id03.state == 12 //|| ShmSysConfigAndInfo->ate.chademo.id03.state == 13 //|| ShmSysConfigAndInfo->ate.chademo.id03.state == 15 ){ ShmSysConfigAndInfo->ate.Permission = STOP; setEVStatus1(evstaus[3]); //setEVStatus1(evstaus[3]); handleEmulatorFaultStatus(); }else{ setEVStatus1(evstaus[0]); //printf("4 %d %d\n",ShmSysConfigAndInfo->ate.chademo.id03.state,ShmSysConfigAndInfo->ate.chademo.id0D_req.K1K2Status); } if(ShmSysConfigAndInfo->ate.chademo.id03.ProximitySignal == 0){ //printf("1 %d ===== \n", ShmSysConfigAndInfo->ate.chademo.id03.ProximitySignal); //printf("ProximitySignal=====%d \n", ShmSysConfigAndInfo->ate.chademo.id03.ProximitySignal); setEVStatus1(evstaus[3]); }else if(ShmSysConfigAndInfo->ate.chademo.id03.ProximitySignal == 1 && ShmSysConfigAndInfo->ate.chademo.id03.state != 7 && ShmSysConfigAndInfo->ate.chademo.id03.state != 9 && ShmSysConfigAndInfo->ate.chademo.id03.state != 10 && ShmSysConfigAndInfo->ate.chademo.id03.state != 11 && ShmSysConfigAndInfo->ate.chademo.id03.state != 12 && ShmSysConfigAndInfo->ate.chademo.id03.state != 13 && ShmSysConfigAndInfo->ate.chademo.id03.state != 15){ //printf("2 %d ===== \n", ShmSysConfigAndInfo->ate.chademo.id03.ProximitySignal); setEVStatus1(evstaus[1]); } if(status){ //printf("status change1 %d ===== \n", status); SetChargingPermission(CCS_QUANTITY, ShmSysConfigAndInfo->ate.Permission, ShmSysConfigAndInfo->ate.TotalBatteryCap, ShmSysConfigAndInfo->ate.MaxBatteryCurrent, ShmSysConfigAndInfo->ate.MaxBatteryVoltage, 1); }else{ if(ShmSysConfigAndInfo->ate.Permission == STOP ){ if(ShmSysConfigAndInfo->ate.chademo.id03.state == 0){ //printf("status change0 %d ===== \n", status); //SetChargingPermission(CCS_QUANTITY, ShmSysConfigAndInfo->ate.Permission, ShmSysConfigAndInfo->ate.TotalBatteryCap, ShmSysConfigAndInfo->ate.MaxBatteryCurrent, ShmSysConfigAndInfo->ate.MaxBatteryVoltage, 1); SetChargingPermission(CCS_QUANTITY, ShmSysConfigAndInfo->ate.Permission, ShmSysConfigAndInfo->ate.TotalBatteryCap, ShmSysConfigAndInfo->ate.MaxBatteryCurrent, ShmSysConfigAndInfo->ate.MaxBatteryVoltage, 1); } } } //SetChargingPermission(CCS_QUANTITY, ShmSysConfigAndInfo->ate.Permission, ShmSysConfigAndInfo->ate.TotalBatteryCap, ShmSysConfigAndInfo->ate.MaxBatteryCurrent, ShmSysConfigAndInfo->ate.MaxBatteryVoltage, 1); //SetChargingPermission(CCS_QUANTITY, START, 1000, 1200, 6000, 1); usleep(1000); //給火線電壓 //07 SetPresentInputPower(ShmSysConfigAndInfo->ate.RequireVoltage, ShmSysConfigAndInfo->ate.RequireCurrent, 1); usleep(1000); //SetPresentInputRequirement(4800, 6000, 1920, 20); SetPresentInputRequirement(ShmSysConfigAndInfo->ate.RequireVoltage, ShmSysConfigAndInfo->ate.RequireCurrent, ShmSysConfigAndInfo->ate.PresentBattVoltage, ShmSysConfigAndInfo->ate.MinimumChargeCurrent, 1); } }else if(ShmSysConfigAndInfo->ate.ATEState == 3){//chademo } } #if (!DEMO) #else #endif return FAIL; }