#include "Module_EvComm.h" #include #include #include #include /*標準輸入輸出定義*/ #include /*標準函數庫定義*/ #include /*Unix 標準函數定義*/ #include /*檔控制定義*/ #include /*PPSIX 終端控制定義*/ #include /*錯誤號定義*/ //================================================ //================================================ // CANBUS send cmd //================================================ //================================================ int PackageIdCmd(int cmd) { return cmd | 0x80000000; } void SendCmdToEvboard(EvFrame cmd, byte *data, byte dataLen) { struct can_frame frame; frame.can_id = cmd.EvMessage; frame.can_dlc = dataLen; memcpy(frame.data, data, sizeof(frame.data)); write(CanFd, &frame, sizeof(struct can_frame)); } void SetTargetAddr(byte *target_number, byte index) { EvFrame EvFrameMsg; EvFrameMsg.EvMessage = 0; EvFrameMsg.EvBdBits.SlaveAddress = index; EvFrameMsg.EvBdBits.MessageID = EV_Command_AddressAssignment; EvFrameMsg.EvMessage = PackageIdCmd(EvFrameMsg.EvMessage); 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(EvFrameMsg, data, 5); } void GetFirmwareVersion(byte gun_index, byte toId) { EvFrame EvFrameMsg; EvFrameMsg.EvMessage = 0; EvFrameMsg.EvBdBits.SlaveAddress = toId; EvFrameMsg.EvBdBits.MessageID = EV_Command_GetFwVersion; EvFrameMsg.EvMessage = PackageIdCmd(EvFrameMsg.EvMessage); byte data[8]; SendCmdToEvboard(EvFrameMsg, data, 0); } void SetConnectInfo(byte type, byte toId) { EvFrame EvFrameMsg; EvFrameMsg.EvMessage = 0; EvFrameMsg.EvBdBits.SlaveAddress = toId; EvFrameMsg.EvBdBits.MessageID = EV_Command_CCSconnectorInfo; EvFrameMsg.EvMessage = PackageIdCmd(EvFrameMsg.EvMessage); byte data[8]; data[0] = type; SendCmdToEvboard(EvFrameMsg, data, 1); } void SyncRtcInfo(byte gun_index, byte toId, int epoch) { EvFrame EvFrameMsg; EvFrameMsg.EvMessage = 0; EvFrameMsg.EvBdBits.SlaveAddress = toId; EvFrameMsg.EvBdBits.MessageID = EV_Command_SyncRtcInfo; EvFrameMsg.EvMessage = PackageIdCmd(EvFrameMsg.EvMessage); byte data[8]; data[0] = epoch & 0xff; data[1] = (epoch >> 8) & 0xff; data[2] = (epoch >> 16) & 0xff; data[3] = (epoch >> 24) & 0xff; SendCmdToEvboard(EvFrameMsg, data, 4); } void GetHardwareVersion(byte gun_index, byte toId) { EvFrame EvFrameMsg; EvFrameMsg.EvMessage = 0; EvFrameMsg.EvBdBits.SlaveAddress = toId; EvFrameMsg.EvBdBits.MessageID = EV_Command_GetHwVersion; EvFrameMsg.EvMessage = PackageIdCmd(EvFrameMsg.EvMessage); byte data[8]; SendCmdToEvboard(EvFrameMsg, data, 0); } void SetChargingPermission(byte gun_index, byte permissionStatus, float aOutputPw, float aOutputCur, short aOutputVol, byte toId) { EvFrame EvFrameMsg; EvFrameMsg.EvMessage = 0; EvFrameMsg.EvBdBits.SlaveAddress = toId; EvFrameMsg.EvBdBits.MessageID = EV_Command_ChargingPermission; EvFrameMsg.EvMessage = PackageIdCmd(EvFrameMsg.EvMessage); byte data[8]; data[0] = permissionStatus; data[1] = (short)aOutputPw & 0xff; data[2] = ((short)aOutputPw >> 8) & 0xff; data[3] = (short)aOutputCur & 0xff; data[4] = ((short)aOutputCur >> 8) & 0xff; data[5] = (short)aOutputVol & 0xff; data[6] = ((short)aOutputVol >> 8) & 0xff; data[7] = 0xf0; SendCmdToEvboard(EvFrameMsg, data, sizeof(data)); } void SetPresentOutputPower(short outputVol_b1, short outputCur_b1, short outputVol_b2, short outputCur_b2) { EvFrame EvFrameMsg; EvFrameMsg.EvMessage = 0; EvFrameMsg.EvBdBits.SlaveAddress = 0; EvFrameMsg.EvBdBits.MessageID = EV_Command_PresentOutputPow; EvFrameMsg.EvMessage = PackageIdCmd(EvFrameMsg.EvMessage); 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; SendCmdToEvboard(EvFrameMsg, data, 8); } void SetPresentOutputCapacity(short aOutputPw_b1, short aOutputCur_b1, short aOutputPw_b2, short aOutputCur_b2) { EvFrame EvFrameMsg; EvFrameMsg.EvMessage = 0; EvFrameMsg.EvBdBits.SlaveAddress = 0; EvFrameMsg.EvBdBits.MessageID = EV_Command_PresentOutputCap; EvFrameMsg.EvMessage = PackageIdCmd(EvFrameMsg.EvMessage); 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] = (aOutputCur_b2 >> 8) & 0xff; SendCmdToEvboard(EvFrameMsg, data, 8); } void GetOutputReq(byte gun_index, byte toId) { EvFrame EvFrameMsg; EvFrameMsg.EvMessage = 0; EvFrameMsg.EvBdBits.SlaveAddress = toId; EvFrameMsg.EvBdBits.MessageID = EV_Command_GetOutputReq; EvFrameMsg.EvMessage = PackageIdCmd(EvFrameMsg.EvMessage); byte data[8]; SendCmdToEvboard(EvFrameMsg, data, 0); } void GetEvccIdReq(byte gun_index, byte toId) { EvFrame EvFrameMsg; EvFrameMsg.EvMessage = 0; EvFrameMsg.EvBdBits.SlaveAddress = toId; EvFrameMsg.EvBdBits.MessageID = EV_Command_EvccidReq; EvFrameMsg.EvMessage = PackageIdCmd(EvFrameMsg.EvMessage); byte data[8]; SendCmdToEvboard(EvFrameMsg, data, 0); } void GetEvBatteryInfo(byte gun_index, byte toId) { EvFrame EvFrameMsg; EvFrameMsg.EvMessage = 0; EvFrameMsg.EvBdBits.SlaveAddress = toId; EvFrameMsg.EvBdBits.MessageID = EV_Command_GetBetteryInfo; EvFrameMsg.EvMessage = PackageIdCmd(EvFrameMsg.EvMessage); byte data[8]; SendCmdToEvboard(EvFrameMsg, data, 0); } void EvseStopChargingEvent(byte stopResult, byte *stopReason, byte toId) { EvFrame EvFrameMsg; EvFrameMsg.EvMessage = 0; EvFrameMsg.EvBdBits.SlaveAddress = toId; EvFrameMsg.EvBdBits.MessageID = EV_Command_EvseStopCharging; EvFrameMsg.EvMessage = PackageIdCmd(EvFrameMsg.EvMessage); 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(EvFrameMsg, data, 7); } void GetMiscellaneousInfo(byte gun_index, byte relayStatus, float power, float voltage, byte toId) { EvFrame EvFrameMsg; EvFrameMsg.EvMessage = 0; EvFrameMsg.EvBdBits.SlaveAddress = toId; EvFrameMsg.EvBdBits.MessageID = EV_Command_GetMiscellaneous; EvFrameMsg.EvMessage = PackageIdCmd(EvFrameMsg.EvMessage); byte data[8]; int _power = power * 10; data[0] = relayStatus; data[1] = (int)_power & 0xff; data[2] = ((int)_power >> 8) & 0xff; data[3] = (int)voltage & 0xff; data[4] = ((int)voltage >> 8) & 0xff; SendCmdToEvboard(EvFrameMsg, data, 5); } void SetIsolationStatus(byte gun_index, byte result, byte toId) { EvFrame EvFrameMsg; EvFrameMsg.EvMessage = 0; EvFrameMsg.EvBdBits.SlaveAddress = toId; EvFrameMsg.EvBdBits.MessageID = EV_Command_IsolationStatus; EvFrameMsg.EvMessage = PackageIdCmd(EvFrameMsg.EvMessage); byte data[8]; data[0] = result; SendCmdToEvboard(EvFrameMsg, data, 1); } void SetEvsePrechargeInfo(byte gun_index, byte result, byte toId) { EvFrame EvFrameMsg; EvFrameMsg.EvMessage = 0; EvFrameMsg.EvBdBits.SlaveAddress = toId; EvFrameMsg.EvBdBits.MessageID = EV_Command_EvsePrechargeInfo; EvFrameMsg.EvMessage = PackageIdCmd(EvFrameMsg.EvMessage); byte data[8]; data[0] = result; SendCmdToEvboard(EvFrameMsg, data, 1); }