#include "Module_EvComm.h" #include "VCCU.h" #include #include #include #include /*標準輸入輸出定義*/ #include /*標準函數庫定義*/ #include /*Unix 標準函數定義*/ #include /*檔控制定義*/ #include /*PPSIX 終端控制定義*/ #include /*錯誤號定義*/ //================================================ //================================================ // CANBUS send cmd //================================================ //================================================ int PackageIdCmd(int cmd) { return cmd | 0x80000000; } void SendCmdToEvboard(int canfd, int cmd, byte *data, byte dataLen) { struct can_frame frame; frame.can_id = PackageIdCmd(cmd);//(0x00001000 + cmd) | 0x80000000;//(cmd | 0x80000000); frame.can_dlc = dataLen; memcpy(frame.data, data, sizeof(frame.data)); write(canfd, &frame, sizeof(struct can_frame)); } void SendCmdToEvboard2(int canfd, int cmd, byte *data, byte dataLen) { struct can_frame frame; frame.can_id = PackageIdCmd(cmd);//(0x00001000 + cmd) | 0x80000000;//(cmd | 0x80000000); frame.can_dlc = dataLen; memcpy(frame.data, data, sizeof(frame.data)); write(canfd, &frame, sizeof(struct can_frame)); //printf("%08X %08X ....................\n" , cmd, PackageIdCmd(cmd)); //usleep(2000); } void setBootNotification1(){ byte data[8]; data[0] = 0x02; data[1] = 0x02; data[2] = 0x02; data[3] = 0x02; data[4] = 0x03; data[5] = 0x03; data[6] = 0x03; data[7] = 0x03; int id = PackageIdCmd(bn1); SendCmdToEvboard(CanFd2, id, data, sizeof(data)); } void setBootNotification2(){ byte data[8]; data[0] = 0x04; data[1] = 0x04; data[2] = 0x04; data[3] = 0x04; data[4] = 0x05; data[5] = 0x05; data[6] = 0x05; data[7] = 0x05; int id = PackageIdCmd(bn2); SendCmdToEvboard(CanFd2, id, data, sizeof(data)); } void setEVStatus1(byte evstatus){ byte data[1]; data[0] = evstatus; int id = PackageIdCmd(EVStatus1); SendCmdToEvboard(CanFd2, id, data, sizeof(data)); } void setEVStatus2(byte evstatus){ byte data[1]; data[0] = evstatus; int id = PackageIdCmd(EVStatus2); SendCmdToEvboard(CanFd2, id, data, sizeof(data)); } void GetFirmwareVersion(byte gun_index, byte toId) { int id = PackageIdCmd(Ev_Cmd.get_firmware_ver + toId); byte data[8]; SendCmdToEvboard(CanFd, id, data, 0); } void GetHardwareVersion(byte gun_index, byte toId) { int id = PackageIdCmd(Ev_Cmd.get_hardware_ver + toId); byte data[8]; SendCmdToEvboard(CanFd, id, data, 0); } void SetChargingPermission(byte gun_index, byte permissionStatus, short aOutputPw, short aOutputCur, short aOutputVol, byte toId) { int id = PackageIdCmd(Ev_Cmd.charging_permission + toId); byte data[8]; data[0] = permissionStatus; data[1] = aOutputPw & 0xff; data[2] = (aOutputPw >> 8) & 0xff; data[3] = aOutputCur & 0xff; data[4] = (aOutputCur >> 8) & 0xff; data[5] = aOutputVol & 0xff; data[6] = (aOutputVol >> 8) & 0xff; data[7] = 0xff; //printf(" ChargingPermission Get-Msg : %08X - %02x %02x %02x %02x %02x %02x %02x %02x\n ",(Ev_Cmd.charging_permission + toId), data[0], data[1], data[2], data[3], data[4], data[5], data[6], data[7] ); SendCmdToEvboard(CanFd, id, data, sizeof(data)); } void GetMiscellaneousInfo(byte gun_index, byte toId, short K1K2Status, short soc) { int id = PackageIdCmd(Ev_Cmd.get_miscellaneous_info + toId); byte data[8]; data[0] = 0x01; data[1] = 0x02; data[2] = 0x03; data[3] = 0x04; data[4] = 0x05; data[5] = K1K2Status & 0xff; data[6] = soc & 0xff; data[7] = 0x08; //printf(" Miscellaneous Info Get-Msg : %08X - %02x %02x %02x %02x %02x %02x %02x %02x\n ",Ev_Cmd.get_miscellaneous_info, data[0], data[1], data[2], data[3], data[4], data[5], data[6], data[7] ); /* data[1] = 0x0001; data[2] = 0x0001; data[3] = 0x10; data[4] = 0x10; */ SendCmdToEvboard(CanFd, id, data, sizeof(data)); } //TODO void setMisc(byte toId, float K1K2Status, float soc){ /* float K1K2Status = 0; float soc = 0; K1K2Status = ShmSysConfigAndInfo->ate.chademo.id0D_req.K1K2Status; soc = ShmSysConfigAndInfo->ate.chademo.id0D_req.Soc; */ GetMiscellaneousInfo(0, toId, K1K2Status, soc); } void SetPresentInputPower(short outputVol_b1, short outputCur_b1, byte toId) { int id = PackageIdCmd(Ev_Cmd.present_input_power + toId); byte data[8]; data[0] = outputVol_b1 & 0xff; data[1] = (outputVol_b1 >> 8) & 0xff; data[2] = outputCur_b1 & 0xff; data[3] = (outputCur_b1 >> 8) & 0xff; /* data[4] = outputVol_b2 & 0xff; data[5] = (outputVol_b2 >> 8) & 0xff; data[6] = outputCur_b2 & 0xff; data[7] = (outputCur_b2 >> 8) & 0xff; */ //printf(" PresentInputPower Get-Msg : %08X - %02x %02x %02x %02x %02x %02x %02x %02x\n ",Ev_Cmd.present_input_power, data[0], data[1], data[2], data[3], data[4], data[5], data[6], data[7] ); SendCmdToEvboard(CanFd, id, data, sizeof(data)); } void SetPresentInputRequirement(short aOutputPw_b1, short aOutputCur_b1, short aOutputPw_b2, short aOutputCur_b2, byte toId) { int id = PackageIdCmd(Ev_Cmd.present_input_requirement + toId ); byte data[8]; data[0] = aOutputPw_b1 & 0xff; data[1] = (aOutputPw_b1 >> 8) & 0xff; data[2] = aOutputCur_b1 & 0xff; data[3] = (aOutputCur_b1 >> 8) & 0xff; data[4] = aOutputPw_b2 & 0xff; data[5] = (aOutputPw_b2 >> 8) & 0xff; data[6] = aOutputCur_b2 & 0xff; data[7] = 0x01; /* data[6] = aOutputCur_b2 & 0xff; data[7] = (aOutputCur_b2 >> 8) & 0xff; */ //printf(" Present Input Requirement Get-Msg : %08X - %02x %02x %02x %02x %02x %02x %02x %02x\n ",Ev_Cmd.present_input_requirement, data[0], data[1], data[2], data[3], data[4], data[5], data[6], data[7] ); SendCmdToEvboard(CanFd, id, data, sizeof(data)); } void GetEvseOutputStatus(byte gun_index, byte toId) { int id = PackageIdCmd(Ev_Cmd.get_evse_output_status + toId); byte data[8]; SendCmdToEvboard(CanFd, id, data, 0); } void GetEvseCapacityInfo(byte gun_index, byte toId) { int id = PackageIdCmd(Ev_Cmd.get_evse_capacity_info + toId); byte data[8]; SendCmdToEvboard(CanFd, id, data, 0); } void EvseStopChargingEvent(byte stopResult, byte *stopReason, byte toId) { int id = PackageIdCmd(Ev_Cmd.evse_stop_charging + toId); byte data[8]; data[0] = stopResult; data[1] = *stopReason; data[2] = *(stopReason + 1); data[3] = *(stopReason + 2); data[4] = *(stopReason + 3); data[5] = *(stopReason + 4); data[6] = *(stopReason + 5); SendCmdToEvboard(CanFd, id, data, sizeof(data)); } void SetIsolationStatus(byte gun_index, byte result, byte toId) { int id = PackageIdCmd(Ev_Cmd.isolation_status + toId); byte data[8]; data[0] = result; SendCmdToEvboard(CanFd, id, data, 1); } void SetEvsePrechargeInfo(byte gun_index, byte result, byte toId) { int id = PackageIdCmd(Ev_Cmd.evse_precharge_info + toId); byte data[8]; data[0] = result; SendCmdToEvboard(CanFd, id, data, 1); } void SetTargetAddr(byte *target_number, byte index) { int id = PackageIdCmd(Ev_Cmd.address_assignment + index); //printf("intCmd = %x \n", cmd & CAN_EFF_MASK); //cmd = cmd & CAN_EFF_MASK; byte data[8]; data[0] = *target_number; data[1] = *(target_number + 1); data[2] = *(target_number + 2); data[3] = *(target_number + 3); data[4] = index; SendCmdToEvboard(CanFd2, id, data, sizeof(data)); } void setVCCU_Requests(byte *data, byte dataLen){ SendCmdToEvboard(CanFd, VCCU_RequestsIds, data, dataLen); } void setVCCU_ChargeFromVehicle(byte *data, byte dataLen){ SendCmdToEvboard(CanFd, VCCU_ChargeFromVehicleIds, data, dataLen); } void setVCCU_V2G_EVMaximumVoltageLimit(byte *data, byte dataLen){ SendCmdToEvboard(CanFd, VCCU_V2G_EVMaximumVoltageLimitIds, data, dataLen); } void setVCCU_V2G_RemainingTimeToFullSO(byte *data, byte dataLen){ SendCmdToEvboard(CanFd, VCCU_V2G_RemainingTimeToFullSOIds, data, dataLen); } void setVCCU_V2G_EVMaximumCurrentLimit(byte *data, byte dataLen){ SendCmdToEvboard(CanFd, VCCU_V2G_EVMaximumCurrentLimitIds, data, dataLen); } void setVCCU_V2G_EVTargetVoltage(byte *data, byte dataLen){ SendCmdToEvboard(CanFd, VCCU_V2G_EVTargetVoltageIds, data, dataLen); } void setVCCU_V2G_EVTargetCurrent(byte *data, byte dataLen){ SendCmdToEvboard(CanFd, VCCU_V2G_EVTargetCurrentIds, data, dataLen); } void setVCCU_V2G_VehicleStatus(byte *data, byte dataLen){ SendCmdToEvboard(CanFd, VCCU_V2G_VehicleStatusIds, data, dataLen); } void VCCU_TD(){ byte data[8]; data[0] = 0x00; data[1] = 0x00; data[2] = 0x01; data[3] = 0x01; data[4] = 0x00; data[5] = 0x00; data[6] = 0x42; data[7] = 0x66; SendCmdToEvboard(CanFd, TDId, data, sizeof(data)); }