|
@@ -53,6 +53,8 @@
|
|
|
|
|
|
struct SysConfigAndInfo *ShmSysConfigAndInfo;
|
|
|
|
|
|
+//struct WARNING_CODE_INFO LastWarningInfo[GENERAL_GUN_QUANTITY];
|
|
|
+
|
|
|
void PRINTF_FUNC(char *string, ...);
|
|
|
|
|
|
int StoreLogMsg(const char *fmt, ...);
|
|
@@ -974,22 +976,52 @@ void DispenserStatusResponse(int socket, struct PACKET_STRUCTURE *packet, unsign
|
|
|
send(socket, &sendBuffer, sendBuffer.Header.len + 4, 0);
|
|
|
}
|
|
|
|
|
|
+struct ChargingCapabilityResponse ConnectorCapability[GENERAL_GUN_QUANTITY];
|
|
|
+
|
|
|
void ChargingCapabilityResponse(int socket, struct PACKET_STRUCTURE *packet)
|
|
|
{
|
|
|
struct PACKET_STRUCTURE sendBuffer;
|
|
|
unsigned short voltage = 0, current = 0, power = 0;
|
|
|
+ unsigned char currency = 0;
|
|
|
+ unsigned int price = 0, cost = 0, account = 0;
|
|
|
|
|
|
memset(&sendBuffer, 0x00, sizeof(sendBuffer));
|
|
|
voltage = ShmSysConfigAndInfo->SysInfo.ConnectorInfo[packet->Header.id - 1].GeneralChargingData.MaximumChargingVoltage;
|
|
|
current = ShmSysConfigAndInfo->SysInfo.ConnectorInfo[packet->Header.id - 1].GeneralChargingData.AvailableChargingCurrent;
|
|
|
power = ShmSysConfigAndInfo->SysInfo.ConnectorInfo[packet->Header.id - 1].GeneralChargingData.AvailableChargingPower;
|
|
|
|
|
|
- PRINTF_FUNC("Connector %d Capability Voltage: %d, Current: %d, Power: %d", packet->Header.id, (int)(voltage), (int)(current), (int)(power));
|
|
|
+ currency = ShmSysConfigAndInfo->SysInfo.DispenserInfo.Currency;
|
|
|
+ price = ShmSysConfigAndInfo->SysInfo.ConnectorInfo[packet->Header.id - 1].UserPrice;
|
|
|
+ cost = ShmSysConfigAndInfo->SysInfo.ConnectorInfo[packet->Header.id - 1].TotalCost;
|
|
|
+ account = ShmSysConfigAndInfo->SysInfo.ConnectorInfo[packet->Header.id - 1].AccountBalance;
|
|
|
+
|
|
|
+ if(ConnectorCapability[packet->Header.id - 1].MaxOuputVoltage != voltage ||
|
|
|
+ ConnectorCapability[packet->Header.id - 1].MaxOuputCurrent != current ||
|
|
|
+ ConnectorCapability[packet->Header.id - 1].MaxOuputPower != power)
|
|
|
+ {
|
|
|
+ PRINTF_FUNC("Connector %d Capability Voltage: %d, Current: %d, Power: %d", packet->Header.id, (int)(voltage), (int)(current), (int)(power));
|
|
|
+ }
|
|
|
+
|
|
|
+ if(ConnectorCapability[packet->Header.id - 1].Currency != currency ||
|
|
|
+ ConnectorCapability[packet->Header.id - 1].UserPrice != price ||
|
|
|
+ ConnectorCapability[packet->Header.id - 1].TotalCost != cost ||
|
|
|
+ ConnectorCapability[packet->Header.id - 1].AccountBalance != account)
|
|
|
+ {
|
|
|
+ PRINTF_FUNC("Connector %d Currency: %d, UserPrice: %d, Cost: %d, Account: %d", packet->Header.id, (int)(currency), (int)(price), (int)(cost), (int)(account));
|
|
|
+ }
|
|
|
+
|
|
|
+ ConnectorCapability[packet->Header.id - 1].MaxOuputVoltage = voltage;
|
|
|
+ ConnectorCapability[packet->Header.id - 1].MaxOuputCurrent = current;
|
|
|
+ ConnectorCapability[packet->Header.id - 1].MaxOuputPower = power;
|
|
|
+ ConnectorCapability[packet->Header.id - 1].Currency = currency;
|
|
|
+ ConnectorCapability[packet->Header.id - 1].UserPrice = price;
|
|
|
+ ConnectorCapability[packet->Header.id - 1].TotalCost = cost;
|
|
|
+ ConnectorCapability[packet->Header.id - 1].AccountBalance = account;
|
|
|
|
|
|
sendBuffer.Header.se = packet->Header.se;
|
|
|
sendBuffer.Header.id = packet->Header.id;
|
|
|
sendBuffer.Header.op = _Header_Response;
|
|
|
- sendBuffer.Header.len = 8;
|
|
|
+ sendBuffer.Header.len = 21;
|
|
|
sendBuffer.Payload.reg = _Reg_Charging_Capability;
|
|
|
sendBuffer.Payload.data[0] = _R_OK;
|
|
|
sendBuffer.Payload.data[1] = ((voltage >> 8) & 0xFF);
|
|
@@ -998,6 +1030,19 @@ void ChargingCapabilityResponse(int socket, struct PACKET_STRUCTURE *packet)
|
|
|
sendBuffer.Payload.data[4] = (current & 0xFF);
|
|
|
sendBuffer.Payload.data[5] = ((power >> 8) & 0xFF);
|
|
|
sendBuffer.Payload.data[6] = (power & 0xFF);
|
|
|
+ sendBuffer.Payload.data[7] = currency;
|
|
|
+ sendBuffer.Payload.data[8] = ((price >> 24) & 0xFF);
|
|
|
+ sendBuffer.Payload.data[9] = ((price >> 16) & 0xFF);
|
|
|
+ sendBuffer.Payload.data[10] = ((price >> 8) & 0xFF);
|
|
|
+ sendBuffer.Payload.data[11] = (price & 0xFF);
|
|
|
+ sendBuffer.Payload.data[12] = ((cost >> 24) & 0xFF);
|
|
|
+ sendBuffer.Payload.data[13] = ((cost >> 16) & 0xFF);
|
|
|
+ sendBuffer.Payload.data[14] = ((cost >> 8) & 0xFF);
|
|
|
+ sendBuffer.Payload.data[15] = (cost & 0xFF);
|
|
|
+ sendBuffer.Payload.data[16] = ((account >> 24) & 0xFF);
|
|
|
+ sendBuffer.Payload.data[17] = ((account >> 16) & 0xFF);
|
|
|
+ sendBuffer.Payload.data[18] = ((account >> 8) & 0xFF);
|
|
|
+ sendBuffer.Payload.data[19] = (account & 0xFF);
|
|
|
|
|
|
send(socket, &sendBuffer, sendBuffer.Header.len + 4, 0);
|
|
|
}
|
|
@@ -1017,6 +1062,22 @@ void ChargingTargetResponse(int socket, struct PACKET_STRUCTURE *packet, unsigne
|
|
|
send(socket, &sendBuffer, sendBuffer.Header.len + 4, 0);
|
|
|
}
|
|
|
|
|
|
+void FirmwareUpgradeResponse(int socket, struct PACKET_STRUCTURE *packet, unsigned char result)
|
|
|
+{
|
|
|
+ struct PACKET_STRUCTURE sendBuffer;
|
|
|
+
|
|
|
+ memset(&sendBuffer, 0x00, sizeof(sendBuffer));
|
|
|
+ sendBuffer.Header.se = packet->Header.se;
|
|
|
+ sendBuffer.Header.id = packet->Header.id;
|
|
|
+ sendBuffer.Header.op = _Header_Response;
|
|
|
+ sendBuffer.Header.len = 2;
|
|
|
+ sendBuffer.Payload.reg = _Reg_Software_Update;
|
|
|
+ sendBuffer.Payload.data[0] = _R_OK;
|
|
|
+ sendBuffer.Payload.data[1] = result;
|
|
|
+
|
|
|
+ send(socket, &sendBuffer, sendBuffer.Header.len + 4, 0);
|
|
|
+}
|
|
|
+
|
|
|
void PlugInStatusResponse(int socket, struct PACKET_STRUCTURE *packet, unsigned char result)
|
|
|
{
|
|
|
struct PACKET_STRUCTURE sendBuffer;
|
|
@@ -1079,6 +1140,218 @@ void ChargingPermissionResponse(int socket, struct PACKET_STRUCTURE *packet, uns
|
|
|
send(socket, &sendBuffer, sendBuffer.Header.len + 4, 0);
|
|
|
}
|
|
|
|
|
|
+void AddMiscCommand(struct PACKET_STRUCTURE *packet, struct MISC_COMMAND *misc)
|
|
|
+{
|
|
|
+ packet->Payload.data[packet->Header.len - 1 + 0] = ((misc->Command >> 8) & 0xFF);
|
|
|
+ packet->Payload.data[packet->Header.len - 1 + 1] = ((misc->Command >> 0) & 0xFF);
|
|
|
+ packet->Payload.data[packet->Header.len - 1 + 2] = ((misc->Value >> 24) & 0xFF);
|
|
|
+ packet->Payload.data[packet->Header.len - 1 + 3] = ((misc->Value >> 16) & 0xFF);
|
|
|
+ packet->Payload.data[packet->Header.len - 1 + 4] = ((misc->Value >> 8) & 0xFF);
|
|
|
+ packet->Payload.data[packet->Header.len - 1 + 5] = ((misc->Value >> 0) & 0xFF);
|
|
|
+ packet->Header.len += 6;
|
|
|
+}
|
|
|
+
|
|
|
+void MiscControlResponse(int socket, struct PACKET_STRUCTURE *packet, unsigned char dispenserIndex, unsigned char result)
|
|
|
+{
|
|
|
+ struct PACKET_STRUCTURE sendBuffer;
|
|
|
+
|
|
|
+ memset(&sendBuffer, 0x00, sizeof(sendBuffer));
|
|
|
+ sendBuffer.Header.se = packet->Header.se;
|
|
|
+ sendBuffer.Header.id = packet->Header.id;
|
|
|
+ sendBuffer.Header.op = _Header_Response;
|
|
|
+ sendBuffer.Header.len = 2;
|
|
|
+ sendBuffer.Payload.reg = _Reg_Misc_Control;
|
|
|
+ sendBuffer.Payload.data[0] = result;
|
|
|
+
|
|
|
+ if(result == _R_OK)
|
|
|
+ {
|
|
|
+ struct MISC_COMMAND misc;
|
|
|
+
|
|
|
+ if(ShmSysConfigAndInfo->SysInfo.ConnectorInfo[packet->Header.id - 1].Parameter.bits.AvailabilityRequest)
|
|
|
+ {
|
|
|
+ ShmSysConfigAndInfo->SysInfo.ConnectorInfo[packet->Header.id - 1].Parameter.bits.AvailabilityRequest = false;
|
|
|
+ misc.Command = _MiscCmd_ChangeOperative;
|
|
|
+ misc.Value = ShmSysConfigAndInfo->SysInfo.ConnectorInfo[packet->Header.id - 1].GeneralChargingData.IsAvailable;
|
|
|
+
|
|
|
+ PRINTF_FUNC("Announce Connector %d Availability: %d", packet->Header.id, misc.Value);
|
|
|
+ AddMiscCommand(&sendBuffer, &misc);
|
|
|
+ }
|
|
|
+
|
|
|
+ if(ShmSysConfigAndInfo->SysInfo.ConnectorInfo[packet->Header.id - 1].Parameter.bits.RemoteStartRequest)
|
|
|
+ {
|
|
|
+ ShmSysConfigAndInfo->SysInfo.ConnectorInfo[packet->Header.id - 1].Parameter.bits.RemoteStartRequest = false;
|
|
|
+ misc.Command = _MiscCmd_RemoteStart;
|
|
|
+ misc.Value = true;
|
|
|
+
|
|
|
+ PRINTF_FUNC("Announce Connector %d Remote Start: %d", packet->Header.id, misc.Value);
|
|
|
+ AddMiscCommand(&sendBuffer, &misc);
|
|
|
+ }
|
|
|
+
|
|
|
+ if(ShmSysConfigAndInfo->SysInfo.ConnectorInfo[packet->Header.id - 1].Parameter.bits.AccountBalanceRequest)
|
|
|
+ {
|
|
|
+ ShmSysConfigAndInfo->SysInfo.ConnectorInfo[packet->Header.id - 1].Parameter.bits.AccountBalanceRequest = false;
|
|
|
+ misc.Command = _MiscCmd_AccountBalance;
|
|
|
+ misc.Value = ShmSysConfigAndInfo->SysInfo.ConnectorInfo[packet->Header.id - 1].AccountBalance;
|
|
|
+
|
|
|
+ PRINTF_FUNC("Announce Connector %d Account Balance: %d", packet->Header.id, (misc.Value));
|
|
|
+ AddMiscCommand(&sendBuffer, &misc);
|
|
|
+ }
|
|
|
+
|
|
|
+ if(ShmSysConfigAndInfo->SysInfo.DispenserInfo.Dispenser[dispenserIndex].ConnectorID[0] == packet->Header.id)
|
|
|
+ {
|
|
|
+ if(ShmSysConfigAndInfo->SysInfo.DispenserInfo.Dispenser[dispenserIndex].Setting.bits.ConnectorTimeoutConfigRequest)
|
|
|
+ {
|
|
|
+ ShmSysConfigAndInfo->SysInfo.DispenserInfo.Dispenser[dispenserIndex].Setting.bits.ConnectorTimeoutConfigRequest = false;
|
|
|
+ misc.Command = _MiscCmd_ConnectorTimeout;
|
|
|
+ misc.Value = ShmSysConfigAndInfo->SysInfo.DispenserInfo.ConnectorTimeout;
|
|
|
+
|
|
|
+ PRINTF_FUNC("Announce Dispenser %d Connection Timeout: %d", dispenserIndex + 1, misc.Value);
|
|
|
+ AddMiscCommand(&sendBuffer, &misc);
|
|
|
+ }
|
|
|
+
|
|
|
+ if(ShmSysConfigAndInfo->SysInfo.DispenserInfo.Dispenser[dispenserIndex].Setting.bits.DefaultPriceConfigRequest)
|
|
|
+ {
|
|
|
+ ShmSysConfigAndInfo->SysInfo.DispenserInfo.Dispenser[dispenserIndex].Setting.bits.DefaultPriceConfigRequest = false;
|
|
|
+ misc.Command = _MiscCmd_DefaultPrice;
|
|
|
+ misc.Value = ShmSysConfigAndInfo->SysInfo.DispenserInfo.DefaultPrice;
|
|
|
+
|
|
|
+ PRINTF_FUNC("Announce Dispenser %d Default Price: %d", dispenserIndex + 1, misc.Value);
|
|
|
+ AddMiscCommand(&sendBuffer, &misc);
|
|
|
+ }
|
|
|
+
|
|
|
+ if(ShmSysConfigAndInfo->SysInfo.DispenserInfo.Dispenser[dispenserIndex].Setting.bits.CurrencyConfigRequest)
|
|
|
+ {
|
|
|
+ ShmSysConfigAndInfo->SysInfo.DispenserInfo.Dispenser[dispenserIndex].Setting.bits.CurrencyConfigRequest = false;
|
|
|
+ misc.Command = _MiscCmd_Currency;
|
|
|
+ misc.Value = ShmSysConfigAndInfo->SysInfo.DispenserInfo.Currency;
|
|
|
+
|
|
|
+ PRINTF_FUNC("Announce Dispenser %d Currency Index: %d", dispenserIndex + 1, misc.Value);
|
|
|
+ AddMiscCommand(&sendBuffer, &misc);
|
|
|
+ }
|
|
|
+
|
|
|
+ if(ShmSysConfigAndInfo->SysInfo.DispenserInfo.Dispenser[dispenserIndex].Setting.bits.HardwareRebootRequest)
|
|
|
+ {
|
|
|
+ ShmSysConfigAndInfo->SysInfo.DispenserInfo.Dispenser[dispenserIndex].Setting.bits.HardwareRebootRequest = false;
|
|
|
+ ShmSysConfigAndInfo->SysInfo.DispenserInfo.Dispenser[dispenserIndex].Setting.bits.HardwareRebootConfirm = true;
|
|
|
+ misc.Command = _MiscCmd_HardwareReboot;
|
|
|
+ misc.Value = true;
|
|
|
+
|
|
|
+ PRINTF_FUNC("Announce Dispenser %d Hardware Reboot: %d", dispenserIndex + 1, misc.Value);
|
|
|
+ AddMiscCommand(&sendBuffer, &misc);
|
|
|
+ }
|
|
|
+
|
|
|
+ if(ShmSysConfigAndInfo->SysInfo.DispenserInfo.Dispenser[dispenserIndex].Setting.bits.SoftwareResetRequest)
|
|
|
+ {
|
|
|
+ ShmSysConfigAndInfo->SysInfo.DispenserInfo.Dispenser[dispenserIndex].Setting.bits.SoftwareResetRequest = false;
|
|
|
+ ShmSysConfigAndInfo->SysInfo.DispenserInfo.Dispenser[dispenserIndex].Setting.bits.SoftwareResetConfirm = true;
|
|
|
+ misc.Command = _MiscCmd_SoftwareRestart;
|
|
|
+ misc.Value = true;
|
|
|
+
|
|
|
+ PRINTF_FUNC("Announce Dispenser %d Software Reset: %d", dispenserIndex + 1, misc.Value);
|
|
|
+ AddMiscCommand(&sendBuffer, &misc);
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ send(socket, &sendBuffer, sendBuffer.Header.len + 4, 0);
|
|
|
+}
|
|
|
+
|
|
|
+void WriteCsuVersionResponse(int socket, struct PACKET_STRUCTURE *packet, unsigned char result)
|
|
|
+{
|
|
|
+ struct PACKET_STRUCTURE sendBuffer;
|
|
|
+
|
|
|
+ memset(&sendBuffer, 0x00, sizeof(sendBuffer));
|
|
|
+ sendBuffer.Header.se = packet->Header.se;
|
|
|
+ sendBuffer.Header.id = packet->Header.id;
|
|
|
+ sendBuffer.Header.op = _Header_Response;
|
|
|
+ sendBuffer.Header.len = 2;
|
|
|
+ sendBuffer.Payload.reg = _Reg_Report_Csu_Version;
|
|
|
+ sendBuffer.Payload.data[0] = result;
|
|
|
+
|
|
|
+ send(socket, &sendBuffer, sendBuffer.Header.len + 4, 0);
|
|
|
+}
|
|
|
+
|
|
|
+void WriteOtherVersionResponse(int socket, struct PACKET_STRUCTURE *packet, unsigned char result)
|
|
|
+{
|
|
|
+ struct PACKET_STRUCTURE sendBuffer;
|
|
|
+
|
|
|
+ memset(&sendBuffer, 0x00, sizeof(sendBuffer));
|
|
|
+ sendBuffer.Header.se = packet->Header.se;
|
|
|
+ sendBuffer.Header.id = packet->Header.id;
|
|
|
+ sendBuffer.Header.op = _Header_Response;
|
|
|
+ sendBuffer.Header.len = 2;
|
|
|
+ sendBuffer.Payload.reg = _Reg_Report_Other_Version;
|
|
|
+ sendBuffer.Payload.data[0] = result;
|
|
|
+
|
|
|
+ send(socket, &sendBuffer, sendBuffer.Header.len + 4, 0);
|
|
|
+}
|
|
|
+
|
|
|
+void WriteChargingInfoResponse(int socket, struct PACKET_STRUCTURE *packet, unsigned char result)
|
|
|
+{
|
|
|
+ struct PACKET_STRUCTURE sendBuffer;
|
|
|
+
|
|
|
+ memset(&sendBuffer, 0x00, sizeof(sendBuffer));
|
|
|
+ sendBuffer.Header.se = packet->Header.se;
|
|
|
+ sendBuffer.Header.id = packet->Header.id;
|
|
|
+ sendBuffer.Header.op = _Header_Response;
|
|
|
+ sendBuffer.Header.len = 2;
|
|
|
+ sendBuffer.Payload.reg = _Reg_Charging_Info;
|
|
|
+ sendBuffer.Payload.data[0] = result;
|
|
|
+
|
|
|
+ send(socket, &sendBuffer, sendBuffer.Header.len + 4, 0);
|
|
|
+}
|
|
|
+
|
|
|
+void ChargerSystemIdResponse(int socket, struct PACKET_STRUCTURE *packet, unsigned char dispenserIndex, unsigned char result)
|
|
|
+{
|
|
|
+ struct PACKET_STRUCTURE sendBuffer;
|
|
|
+
|
|
|
+ memset(&sendBuffer, 0x00, sizeof(sendBuffer));
|
|
|
+ sendBuffer.Header.se = packet->Header.se;
|
|
|
+ sendBuffer.Header.id = packet->Header.id;
|
|
|
+ sendBuffer.Header.op = _Header_Response;
|
|
|
+ sendBuffer.Header.len = 2;
|
|
|
+ sendBuffer.Payload.reg = _Reg_Charger_System_Id;
|
|
|
+ sendBuffer.Payload.data[0] = result;
|
|
|
+ if(result == _R_OK)
|
|
|
+ {
|
|
|
+ int strLen = 0;
|
|
|
+ strLen = strlen((char *)ShmSysConfigAndInfo->SysConfig.ChargeBoxId);
|
|
|
+ memcpy(&sendBuffer.Payload.data[sendBuffer.Header.len - 1], (char *)ShmSysConfigAndInfo->SysConfig.ChargeBoxId, strLen);
|
|
|
+ sendBuffer.Header.len += strLen + 1;
|
|
|
+
|
|
|
+ char TimeSync[32];
|
|
|
+ struct timeb SeqEndTime;
|
|
|
+ struct tm *tm;
|
|
|
+ ftime(&SeqEndTime);
|
|
|
+ SeqEndTime.time = time(NULL);
|
|
|
+ tm=localtime(&SeqEndTime.time);
|
|
|
+ memset(TimeSync, 0x00, 32);
|
|
|
+
|
|
|
+ sprintf(TimeSync, "%04d-%02d-%02d %02d:%02d:%02d", tm->tm_year + 1900, tm->tm_mon + 1, tm->tm_mday, tm->tm_hour, tm->tm_min, tm->tm_sec);
|
|
|
+ strLen = strlen(TimeSync);
|
|
|
+ memcpy(&sendBuffer.Payload.data[sendBuffer.Header.len - 1], TimeSync, strLen);
|
|
|
+ sendBuffer.Header.len += strLen + 1;
|
|
|
+ //PRINTF_FUNC("Dispenser %d Read System Id: %s", dispenserIndex + 1, ShmSysConfigAndInfo->SysConfig.ChargeBoxId);
|
|
|
+ }
|
|
|
+
|
|
|
+ send(socket, &sendBuffer, sendBuffer.Header.len + 4, 0);
|
|
|
+}
|
|
|
+
|
|
|
+void WriteWaitPlugInResponse(int socket, struct PACKET_STRUCTURE *packet, unsigned char result)
|
|
|
+{
|
|
|
+ struct PACKET_STRUCTURE sendBuffer;
|
|
|
+
|
|
|
+ memset(&sendBuffer, 0x00, sizeof(sendBuffer));
|
|
|
+ sendBuffer.Header.se = packet->Header.se;
|
|
|
+ sendBuffer.Header.id = packet->Header.id;
|
|
|
+ sendBuffer.Header.op = _Header_Response;
|
|
|
+ sendBuffer.Header.len = 2;
|
|
|
+ sendBuffer.Payload.reg = _Reg_WaitPlugIn;
|
|
|
+ sendBuffer.Payload.data[0] = result;
|
|
|
+
|
|
|
+ send(socket, &sendBuffer, sendBuffer.Header.len + 4, 0);
|
|
|
+}
|
|
|
+
|
|
|
BOOL FindConnectorID(unsigned char dispenserIndex, unsigned char id)
|
|
|
{
|
|
|
BOOL find = false;
|
|
@@ -1251,8 +1524,35 @@ BOOL DispenserStatusCodeHandler(struct PACKET_STRUCTURE *packet, unsigned char d
|
|
|
memcpy(&ShmSysConfigAndInfo->SysInfo.ConnectorInfo[packet->Header.id - 1].WarningInfo.WarningCode[i][0],
|
|
|
&packet->Payload.data[i * 6], 6);
|
|
|
}
|
|
|
-
|
|
|
- PRINTF_FUNC("Dispenser %d, Status Code Len: %d", packet->Header.id, ShmSysConfigAndInfo->SysInfo.ConnectorInfo[packet->Header.id - 1].WarningInfo.WarningCount);
|
|
|
+/*
|
|
|
+ BOOL needUpdate = FALSE;
|
|
|
+ // check is there new status code
|
|
|
+ for(int i = 0; i < ShmSysConfigAndInfo->SysInfo.ConnectorInfo[packet->Header.id - 1].WarningInfo.WarningCount; i++)
|
|
|
+ {
|
|
|
+ if(strcmp(&ShmSysConfigAndInfo->SysInfo.ConnectorInfo[packet->Header.id - 1].WarningInfo.WarningCode[i][0],
|
|
|
+ &LastWarningInfo[packet->Header.id - 1].WarningCode[i][0]) == 0)
|
|
|
+ {
|
|
|
+ needUpdate = TRUE;
|
|
|
+ break;
|
|
|
+ }
|
|
|
+ }
|
|
|
+ if(needUpdate)
|
|
|
+ {
|
|
|
+ memcpy(&LastWarningInfo[packet->Header.id - 1], &ShmSysConfigAndInfo->SysInfo.ConnectorInfo[packet->Header.id - 1].WarningInfo, sizeof(struct WARNING_CODE_INFO));
|
|
|
+ }
|
|
|
+*/
|
|
|
+ char strDispenserStatus[128];
|
|
|
+ sprintf(strDispenserStatus, "Dispenser id %d, Status Code Len: %d", packet->Header.id, ShmSysConfigAndInfo->SysInfo.ConnectorInfo[packet->Header.id - 1].WarningInfo.WarningCount);
|
|
|
+ if(ShmSysConfigAndInfo->SysInfo.ConnectorInfo[packet->Header.id - 1].WarningInfo.WarningCount > 0)
|
|
|
+ {
|
|
|
+ for(int i = 0; i < ShmSysConfigAndInfo->SysInfo.ConnectorInfo[packet->Header.id - 1].WarningInfo.WarningCount; i++)
|
|
|
+ {
|
|
|
+ char strTemp[16];
|
|
|
+ sprintf(strTemp, ", %s", ShmSysConfigAndInfo->SysInfo.ConnectorInfo[packet->Header.id - 1].WarningInfo.WarningCode[i]);
|
|
|
+ strcat(strDispenserStatus, strTemp);
|
|
|
+ }
|
|
|
+ }
|
|
|
+ PRINTF_FUNC(strDispenserStatus);
|
|
|
}
|
|
|
else
|
|
|
{
|
|
@@ -1283,8 +1583,6 @@ unsigned long GetTimeoutValue(struct timeval _sour_time)
|
|
|
return 1000000 * (_end_time.tv_sec - _sour_time.tv_sec) + _end_time.tv_usec - _sour_time.tv_usec;
|
|
|
}
|
|
|
|
|
|
-struct timeval _ConnectorCapabilityTime[CONNECTOR_QUANTITY];
|
|
|
-
|
|
|
BOOL ConnectorChargingTargetHandler(struct PACKET_STRUCTURE *packet, unsigned char dispenserIndex)
|
|
|
{
|
|
|
BOOL find = FindConnectorID(dispenserIndex, packet->Header.id);
|
|
@@ -1296,12 +1594,6 @@ BOOL ConnectorChargingTargetHandler(struct PACKET_STRUCTURE *packet, unsigned ch
|
|
|
voltage = (float)((packet->Payload.data[0] << 8) + packet->Payload.data[1]) / 10;
|
|
|
current = (float)((packet->Payload.data[2] << 8) + packet->Payload.data[3]) / 10;
|
|
|
|
|
|
-// if(GetTimeoutValue(_ConnectorCapabilityTime[packet->Header.id - 1]) / 1000 >= 2000)
|
|
|
-// {
|
|
|
-// gettimeofday(&_ConnectorCapabilityTime[packet->Header.id - 1], NULL);
|
|
|
-// ShowSocketData(packet);
|
|
|
-// }
|
|
|
-
|
|
|
if(ShmSysConfigAndInfo->SysInfo.ConnectorInfo[packet->Header.id - 1].GeneralChargingData.SystemStatus == S_CHARGING)
|
|
|
{
|
|
|
if(ShmSysConfigAndInfo->SysInfo.ConnectorInfo[packet->Header.id - 1].GeneralChargingData.EvBatterytargetVoltage != voltage ||
|
|
@@ -1334,6 +1626,11 @@ BOOL ConnectorChargingTargetHandler(struct PACKET_STRUCTURE *packet, unsigned ch
|
|
|
return done;
|
|
|
}
|
|
|
|
|
|
+unsigned char FirmwareUpgradeHandler(struct PACKET_STRUCTURE *packet, unsigned char dispenserIndex)
|
|
|
+{
|
|
|
+ return _R_NoUpgrade;
|
|
|
+}
|
|
|
+
|
|
|
BOOL ConnectorPlugInHandler(struct PACKET_STRUCTURE *packet, unsigned char dispenserIndex)
|
|
|
{
|
|
|
BOOL find = FindConnectorID(dispenserIndex, packet->Header.id);
|
|
@@ -1405,8 +1702,8 @@ unsigned char UserIDHandler(struct PACKET_STRUCTURE *packet, unsigned char dispe
|
|
|
}
|
|
|
else if(ShmSysConfigAndInfo->SysInfo.DispenserInfo.Dispenser[dispenserIndex].AuthorizeStatus == _AuthorizeStatus_Pass)
|
|
|
{
|
|
|
- PRINTF_FUNC("Dispenser id %d user id %s authorizing ok", dispenserIndex + 1, ShmSysConfigAndInfo->SysInfo.DispenserInfo.Dispenser[dispenserIndex].UserId);
|
|
|
- authorize = _DAS_Allowed;
|
|
|
+ PRINTF_FUNC("Dispenser id %d user id %s authorizing ok", dispenserIndex + 1, ShmSysConfigAndInfo->SysInfo.DispenserInfo.Dispenser[dispenserIndex].UserId);
|
|
|
+ authorize = _DAS_Allowed;
|
|
|
}
|
|
|
else
|
|
|
{
|
|
@@ -1425,11 +1722,27 @@ unsigned char ChargingPermissionHandler(struct PACKET_STRUCTURE *packet, unsigne
|
|
|
{
|
|
|
switch(ShmSysConfigAndInfo->SysInfo.ConnectorInfo[packet->Header.id - 1].GeneralChargingData.SystemStatus)
|
|
|
{
|
|
|
+ case S_IDLE:
|
|
|
+ if(ShmSysConfigAndInfo->SysInfo.ConnectorInfo[packet->Header.id - 1].RemoteStatus == _CRS_Idle ||
|
|
|
+ ShmSysConfigAndInfo->SysInfo.ConnectorInfo[packet->Header.id - 1].RemoteStatus == _CRS_Preparing)
|
|
|
+ {
|
|
|
+ permission = _DAS_Wait;
|
|
|
+ }
|
|
|
+ else
|
|
|
+ {
|
|
|
+ permission = _DAS_NotAllowed;
|
|
|
+ PRINTF_FUNC("Cabinet status idle, not allow dispenser id %d connector id %d charging",
|
|
|
+ dispenserIndex + 1, packet->Header.id);
|
|
|
+ PRINTF_FUNC("RemoteStop or UnlockStop, not allow dispenser index %d connector id %d preparing to charge", dispenserIndex, packet->Header.id);
|
|
|
+ }
|
|
|
+ break;
|
|
|
+
|
|
|
case S_PREPARING_FOR_EV:
|
|
|
if(ShmSysConfigAndInfo->SysInfo.ConnectorInfo[packet->Header.id - 1].Parameter.bits.RemoteStopRequest ||
|
|
|
ShmSysConfigAndInfo->SysInfo.ConnectorInfo[packet->Header.id - 1].Parameter.bits.UnlockStopRequest)
|
|
|
{
|
|
|
permission = _DAS_NotAllowed;
|
|
|
+ PRINTF_FUNC("RemoteStop or UnlockStop, not allow dispenser index %d connector id %d preparing to charge", dispenserIndex, packet->Header.id);
|
|
|
}
|
|
|
else if(ShmSysConfigAndInfo->SysInfo.ConnectorInfo[packet->Header.id - 1].RemoteStatus >= _CRS_Preparing &&
|
|
|
ShmSysConfigAndInfo->SysInfo.ConnectorInfo[packet->Header.id - 1].RemoteStatus <= _CRS_Charging)
|
|
@@ -1437,14 +1750,14 @@ unsigned char ChargingPermissionHandler(struct PACKET_STRUCTURE *packet, unsigne
|
|
|
if(!ShmSysConfigAndInfo->SysInfo.ConnectorInfo[packet->Header.id - 1].Parameter.bits.PermissionRequest)
|
|
|
{
|
|
|
ShmSysConfigAndInfo->SysInfo.ConnectorInfo[packet->Header.id - 1].Parameter.bits.PermissionRequest = true;
|
|
|
- PRINTF_FUNC("Allow dispenser index %d connector id %d start to charge", dispenserIndex, packet->Header.id);
|
|
|
+ PRINTF_FUNC("Allow dispenser index %d connector id %d start preparing to charge", dispenserIndex, packet->Header.id);
|
|
|
}
|
|
|
permission = _DAS_Allowed;
|
|
|
}
|
|
|
else if(ShmSysConfigAndInfo->SysInfo.ConnectorInfo[packet->Header.id - 1].RemoteStatus == _CRS_Terminating)
|
|
|
{
|
|
|
permission = _DAS_NotAllowed;
|
|
|
- PRINTF_FUNC("Allow dispenser index %d connector id %d start to charge", dispenserIndex, packet->Header.id);
|
|
|
+ PRINTF_FUNC("Dispenser Terminating, Not allow dispenser index %d connector id %d preparing to charge", dispenserIndex, packet->Header.id);
|
|
|
}
|
|
|
else
|
|
|
{
|
|
@@ -1457,6 +1770,7 @@ unsigned char ChargingPermissionHandler(struct PACKET_STRUCTURE *packet, unsigne
|
|
|
ShmSysConfigAndInfo->SysInfo.ConnectorInfo[packet->Header.id - 1].Parameter.bits.UnlockStopRequest)
|
|
|
{
|
|
|
permission = _DAS_NotAllowed;
|
|
|
+ PRINTF_FUNC("RemoteStop or UnlockStop, not allow dispenser index %d connector id %d charging", dispenserIndex, packet->Header.id);
|
|
|
}
|
|
|
else if(ShmSysConfigAndInfo->SysInfo.ConnectorInfo[packet->Header.id - 1].RemoteStatus == _CRS_Preparing ||
|
|
|
ShmSysConfigAndInfo->SysInfo.ConnectorInfo[packet->Header.id - 1].RemoteStatus == _CRS_Charging)
|
|
@@ -1470,13 +1784,15 @@ unsigned char ChargingPermissionHandler(struct PACKET_STRUCTURE *packet, unsigne
|
|
|
}
|
|
|
break;
|
|
|
|
|
|
- case S_IDLE:
|
|
|
case S_TERMINATING:
|
|
|
case S_COMPLETE:
|
|
|
case S_ALARM:
|
|
|
case S_RESERVATION:
|
|
|
case S_MAINTAIN:
|
|
|
permission = _DAS_NotAllowed;
|
|
|
+ PRINTF_FUNC("Cabinet status(%d) not match, not allow dispenser index %d connector id %d charging",
|
|
|
+ ShmSysConfigAndInfo->SysInfo.ConnectorInfo[packet->Header.id - 1].GeneralChargingData.SystemStatus,
|
|
|
+ dispenserIndex, packet->Header.id);
|
|
|
break;
|
|
|
|
|
|
default:
|
|
@@ -1500,6 +1816,184 @@ unsigned char ChargingPermissionHandler(struct PACKET_STRUCTURE *packet, unsigne
|
|
|
return permission;
|
|
|
}
|
|
|
|
|
|
+BOOL MiscControlHandler(struct PACKET_STRUCTURE *packet, unsigned char dispenserIndex)
|
|
|
+{
|
|
|
+ BOOL find = FindConnectorID(dispenserIndex, packet->Header.id);
|
|
|
+ BOOL done = false;
|
|
|
+
|
|
|
+ if(find)
|
|
|
+ {
|
|
|
+ done = true;
|
|
|
+ }
|
|
|
+
|
|
|
+ return done;
|
|
|
+}
|
|
|
+
|
|
|
+unsigned char DispenserWriteCsuVersionInfoHandler(struct PACKET_STRUCTURE *packet, unsigned char dispenserIndex)
|
|
|
+{
|
|
|
+ char version[32];
|
|
|
+ BOOL writeVersion = FALSE, showVersion = FALSE;;
|
|
|
+
|
|
|
+ memcpy(version, &packet->Payload.data[0], 32);
|
|
|
+ if(strcmp((char *)ShmSysConfigAndInfo->SysInfo.DispenserInfo.Dispenser[dispenserIndex].CsuBootLoadFwRev, version) != 0)
|
|
|
+ {
|
|
|
+ memcpy(ShmSysConfigAndInfo->SysInfo.DispenserInfo.Dispenser[dispenserIndex].CsuBootLoadFwRev, version, 32);
|
|
|
+ showVersion = true;
|
|
|
+ }
|
|
|
+
|
|
|
+ memcpy(version, &packet->Payload.data[32], 32);
|
|
|
+ if(strcmp((char *)ShmSysConfigAndInfo->SysInfo.DispenserInfo.Dispenser[dispenserIndex].CsuKernelFwRev, version) != 0)
|
|
|
+ {
|
|
|
+ memcpy(ShmSysConfigAndInfo->SysInfo.DispenserInfo.Dispenser[dispenserIndex].CsuKernelFwRev, version, 32);
|
|
|
+ showVersion = true;
|
|
|
+ }
|
|
|
+
|
|
|
+ memcpy(version, &packet->Payload.data[64], 32);
|
|
|
+ if(strcmp((char *)ShmSysConfigAndInfo->SysInfo.DispenserInfo.Dispenser[dispenserIndex].CsuRootFsFwRev, version) != 0)
|
|
|
+ {
|
|
|
+ memcpy(ShmSysConfigAndInfo->SysInfo.DispenserInfo.Dispenser[dispenserIndex].CsuRootFsFwRev, version, 32);
|
|
|
+ showVersion = true;
|
|
|
+ }
|
|
|
+
|
|
|
+ memcpy(version, &packet->Payload.data[96], 32);
|
|
|
+ if(strcmp((char *)ShmSysConfigAndInfo->SysInfo.DispenserInfo.Dispenser[dispenserIndex].CsuPrimFwRev, version) != 0)
|
|
|
+ {
|
|
|
+ memcpy(ShmSysConfigAndInfo->SysInfo.DispenserInfo.Dispenser[dispenserIndex].CsuPrimFwRev, version, 32);
|
|
|
+ showVersion = true;
|
|
|
+ }
|
|
|
+
|
|
|
+ if(showVersion)
|
|
|
+ {
|
|
|
+ PRINTF_FUNC("********** Dispenser id %d: Csu Version information **********", dispenserIndex + 1);
|
|
|
+ PRINTF_FUNC("********** CsuBootLoadRev: %32s ***", ShmSysConfigAndInfo->SysInfo.DispenserInfo.Dispenser[dispenserIndex].CsuBootLoadFwRev);
|
|
|
+ PRINTF_FUNC("********** CsuKernelFwRev: %32s ***", ShmSysConfigAndInfo->SysInfo.DispenserInfo.Dispenser[dispenserIndex].CsuKernelFwRev);
|
|
|
+ PRINTF_FUNC("********** CsuRootFsFwRev: %32s ***", ShmSysConfigAndInfo->SysInfo.DispenserInfo.Dispenser[dispenserIndex].CsuRootFsFwRev);
|
|
|
+ PRINTF_FUNC("********** CsuPrimFwRev: %32s ***", ShmSysConfigAndInfo->SysInfo.DispenserInfo.Dispenser[dispenserIndex].CsuPrimFwRev);
|
|
|
+ }
|
|
|
+ writeVersion = TRUE;
|
|
|
+
|
|
|
+ return writeVersion;
|
|
|
+}
|
|
|
+
|
|
|
+unsigned char DispenserWriteOtherVersionInfoHandler(struct PACKET_STRUCTURE *packet, unsigned char dispenserIndex)
|
|
|
+{
|
|
|
+ char version[32];
|
|
|
+ BOOL writeVersion = FALSE, showVersion = FALSE;;
|
|
|
+
|
|
|
+ memcpy(version, &packet->Payload.data[0], 32);
|
|
|
+ if(strcmp((char *)ShmSysConfigAndInfo->SysInfo.DispenserInfo.Dispenser[dispenserIndex].FanModuleFwRev, version) != 0)
|
|
|
+ {
|
|
|
+ memcpy(ShmSysConfigAndInfo->SysInfo.DispenserInfo.Dispenser[dispenserIndex].FanModuleFwRev, version, 32);
|
|
|
+ showVersion = true;
|
|
|
+ }
|
|
|
+
|
|
|
+ memcpy(version, &packet->Payload.data[32], 32);
|
|
|
+ if(strcmp((char *)ShmSysConfigAndInfo->SysInfo.DispenserInfo.Dispenser[dispenserIndex].RelayModuleFwRev, version) != 0)
|
|
|
+ {
|
|
|
+ memcpy(ShmSysConfigAndInfo->SysInfo.DispenserInfo.Dispenser[dispenserIndex].RelayModuleFwRev, version, 32);
|
|
|
+ showVersion = true;
|
|
|
+ }
|
|
|
+
|
|
|
+ memcpy(version, &packet->Payload.data[64], 32);
|
|
|
+ if(strcmp((char *)ShmSysConfigAndInfo->SysInfo.DispenserInfo.Dispenser[dispenserIndex].Connector1FwRev, version) != 0)
|
|
|
+ {
|
|
|
+ memcpy(ShmSysConfigAndInfo->SysInfo.DispenserInfo.Dispenser[dispenserIndex].Connector1FwRev, version, 32);
|
|
|
+ showVersion = true;
|
|
|
+ }
|
|
|
+
|
|
|
+ memcpy(version, &packet->Payload.data[96], 32);
|
|
|
+ if(strcmp((char *)ShmSysConfigAndInfo->SysInfo.DispenserInfo.Dispenser[dispenserIndex].Connector2FwRev, version) != 0)
|
|
|
+ {
|
|
|
+ memcpy(ShmSysConfigAndInfo->SysInfo.DispenserInfo.Dispenser[dispenserIndex].Connector2FwRev, version, 32);
|
|
|
+ showVersion = true;
|
|
|
+ }
|
|
|
+
|
|
|
+ memcpy(version, &packet->Payload.data[128], 32);
|
|
|
+ if(strcmp((char *)ShmSysConfigAndInfo->SysInfo.DispenserInfo.Dispenser[dispenserIndex].LedModuleFwRev, version) != 0)
|
|
|
+ {
|
|
|
+ memcpy(ShmSysConfigAndInfo->SysInfo.DispenserInfo.Dispenser[dispenserIndex].LedModuleFwRev, version, 32);
|
|
|
+ showVersion = true;
|
|
|
+ }
|
|
|
+
|
|
|
+ if(showVersion)
|
|
|
+ {
|
|
|
+ PRINTF_FUNC("********** Dispenser id %d: Other Version information **********", dispenserIndex + 1);
|
|
|
+ PRINTF_FUNC("********** FanModuleFwRev: %32s ***", ShmSysConfigAndInfo->SysInfo.DispenserInfo.Dispenser[dispenserIndex].FanModuleFwRev);
|
|
|
+ PRINTF_FUNC("********** RelayModuleRev: %32s ***", ShmSysConfigAndInfo->SysInfo.DispenserInfo.Dispenser[dispenserIndex].RelayModuleFwRev);
|
|
|
+ PRINTF_FUNC("********** Connector1Rev: %32s ***", ShmSysConfigAndInfo->SysInfo.DispenserInfo.Dispenser[dispenserIndex].Connector1FwRev);
|
|
|
+ PRINTF_FUNC("********** Connector2Rev: %32s ***", ShmSysConfigAndInfo->SysInfo.DispenserInfo.Dispenser[dispenserIndex].Connector2FwRev);
|
|
|
+ PRINTF_FUNC("********** LedModuleFwRev: %32s ***", ShmSysConfigAndInfo->SysInfo.DispenserInfo.Dispenser[dispenserIndex].LedModuleFwRev);
|
|
|
+ }
|
|
|
+ writeVersion = TRUE;
|
|
|
+
|
|
|
+ return writeVersion;
|
|
|
+}
|
|
|
+
|
|
|
+unsigned char DispenserWriteChargingInfoHandler(struct PACKET_STRUCTURE *packet, unsigned char dispenserIndex)
|
|
|
+{
|
|
|
+ BOOL find = FindConnectorID(dispenserIndex, packet->Header.id);
|
|
|
+
|
|
|
+ if(find)
|
|
|
+ {
|
|
|
+ unsigned short voltage = (packet->Payload.data[0] << 8) + (packet->Payload.data[1]);
|
|
|
+ unsigned short current = (packet->Payload.data[2] << 8) + (packet->Payload.data[3]);
|
|
|
+ unsigned int time = (packet->Payload.data[4] << 24) + (packet->Payload.data[5] << 16) + (packet->Payload.data[6] << 8) + (packet->Payload.data[7]);
|
|
|
+ unsigned char soc = (packet->Payload.data[8]);
|
|
|
+
|
|
|
+ ShmSysConfigAndInfo->SysInfo.ConnectorInfo[packet->Header.id - 1].RemoteChargingVoltage = voltage;
|
|
|
+ ShmSysConfigAndInfo->SysInfo.ConnectorInfo[packet->Header.id - 1].RemoteChargingCurrent = current;
|
|
|
+ ShmSysConfigAndInfo->SysInfo.ConnectorInfo[packet->Header.id - 1].RemoteRemainChargingDuration = time;
|
|
|
+ ShmSysConfigAndInfo->SysInfo.ConnectorInfo[packet->Header.id - 1].RemoteSoc = soc;
|
|
|
+ }
|
|
|
+ else
|
|
|
+ {
|
|
|
+
|
|
|
+ }
|
|
|
+
|
|
|
+ return find;
|
|
|
+}
|
|
|
+
|
|
|
+unsigned char ReadChargerSystemIdHandler(struct PACKET_STRUCTURE *packet, unsigned char dispenserIndex)
|
|
|
+{
|
|
|
+ BOOL find = TRUE;
|
|
|
+
|
|
|
+ return find;
|
|
|
+}
|
|
|
+
|
|
|
+unsigned char WriteWaitPlugInHandler(struct PACKET_STRUCTURE *packet, unsigned char dispenserIndex)
|
|
|
+{
|
|
|
+ BOOL find = FindConnectorID(dispenserIndex, packet->Header.id);
|
|
|
+
|
|
|
+ if(find)
|
|
|
+ {
|
|
|
+ unsigned char StartWait = packet->Payload.data[0];
|
|
|
+
|
|
|
+ if(StartWait)
|
|
|
+ {
|
|
|
+ if(!ShmSysConfigAndInfo->SysInfo.ConnectorInfo[packet->Header.id - 1].Parameter.bits.StartWaitPlug)
|
|
|
+ {
|
|
|
+ PRINTF_FUNC("Connector %d Start Wait Plug In", packet->Header.id);
|
|
|
+ }
|
|
|
+ ShmSysConfigAndInfo->SysInfo.ConnectorInfo[packet->Header.id - 1].Parameter.bits.StartWaitPlug = true;
|
|
|
+ }
|
|
|
+ else
|
|
|
+ {
|
|
|
+ if(ShmSysConfigAndInfo->SysInfo.ConnectorInfo[packet->Header.id - 1].Parameter.bits.StartWaitPlug)
|
|
|
+ {
|
|
|
+ PRINTF_FUNC("Connector %d Stop Wait Plug In", packet->Header.id);
|
|
|
+ ShmSysConfigAndInfo->SysInfo.ConnectorInfo[packet->Header.id - 1].Parameter.bits.NeedCleanAuthorizeInfo = true;
|
|
|
+ }
|
|
|
+ ShmSysConfigAndInfo->SysInfo.ConnectorInfo[packet->Header.id - 1].Parameter.bits.StartWaitPlug = false;
|
|
|
+ }
|
|
|
+ }
|
|
|
+ else
|
|
|
+ {
|
|
|
+
|
|
|
+ }
|
|
|
+
|
|
|
+ return find;
|
|
|
+}
|
|
|
+
|
|
|
void DisableConnector(unsigned char dispenserIndex)
|
|
|
{
|
|
|
for(int i = 0; i < ShmSysConfigAndInfo->SysInfo.DispenserInfo.Dispenser[dispenserIndex].ConnectorQuantity; i++)
|
|
@@ -1521,11 +2015,6 @@ void DispenserSocketProcess(int socketFd, struct sockaddr_in clientInfo, unsigne
|
|
|
|
|
|
PRINTF_FUNC("IP %s connection(%d) is established, start dispenser process", (inet_ntoa(clientInfo.sin_addr)), index);
|
|
|
|
|
|
- for(int i = 0; i < CONNECTOR_QUANTITY; i++)
|
|
|
- {
|
|
|
- memset(&_ConnectorCapabilityTime[i], 0x00, sizeof(struct timeval));
|
|
|
- }
|
|
|
-
|
|
|
while(1)
|
|
|
{
|
|
|
if((rxLen = recv(socketFd, &receiveBuffer, sizeof(Packet_Structure), MSG_DONTWAIT )) > 0)
|
|
@@ -1555,6 +2044,7 @@ void DispenserSocketProcess(int socketFd, struct sockaddr_in clientInfo, unsigne
|
|
|
ShmSysConfigAndInfo->SysInfo.DispenserInfo.ConnectionInfo[index].DispenserIndex = dispenserIndex;
|
|
|
ShmSysConfigAndInfo->SysInfo.DispenserInfo.ConnectionInfo[index].Status = _CNS_DispenserMatched;
|
|
|
PRINTF_FUNC("********** Dispenser id %d check in, model name: %s **********\n", dispenserID, modelName);
|
|
|
+ memcpy(ShmSysConfigAndInfo->SysInfo.DispenserInfo.Dispenser[dispenserIndex].ModelName, modelName, 64);
|
|
|
ackResult = _R_OK;
|
|
|
}
|
|
|
else
|
|
@@ -1600,6 +2090,19 @@ void DispenserSocketProcess(int socketFd, struct sockaddr_in clientInfo, unsigne
|
|
|
}
|
|
|
PRINTF_FUNC("Dispenser ID %d Get Connector ID %s", dispenserID, ackResult == _R_OK ? "OK" : "NG");
|
|
|
ConnectorIDResponse(socketFd, &receiveBuffer, ackResult, dispenserIndex);
|
|
|
+
|
|
|
+ if(ackResult == _R_OK)
|
|
|
+ {
|
|
|
+ if(!ShmSysConfigAndInfo->SysInfo.DispenserInfo.Dispenser[dispenserIndex].Setting.bits.DispenserConfigSync)
|
|
|
+ {
|
|
|
+ ShmSysConfigAndInfo->SysInfo.DispenserInfo.Dispenser[dispenserIndex].Setting.bits.DispenserConfigSync = true;
|
|
|
+
|
|
|
+ PRINTF_FUNC("Dispenser ID %d Configuration Need To Synchronize", dispenserID);
|
|
|
+ ShmSysConfigAndInfo->SysInfo.DispenserInfo.Dispenser[dispenserIndex].Setting.bits.ConnectorTimeoutConfigRequest = 1;
|
|
|
+ ShmSysConfigAndInfo->SysInfo.DispenserInfo.Dispenser[dispenserIndex].Setting.bits.DefaultPriceConfigRequest = 1;
|
|
|
+ ShmSysConfigAndInfo->SysInfo.DispenserInfo.Dispenser[dispenserIndex].Setting.bits.CurrencyConfigRequest = 1;
|
|
|
+ }
|
|
|
+ }
|
|
|
}
|
|
|
|
|
|
// Reg: 0x03, Power cabinet status
|
|
@@ -1641,6 +2144,12 @@ void DispenserSocketProcess(int socketFd, struct sockaddr_in clientInfo, unsigne
|
|
|
}
|
|
|
|
|
|
// Reg: 0x07, Software update
|
|
|
+ if(receiveBuffer.Header.op == _Header_Read && receiveBuffer.Payload.reg == _Reg_Software_Update)
|
|
|
+ {
|
|
|
+ unsigned char NeedUpgrade = FirmwareUpgradeHandler(&receiveBuffer, dispenserIndex);
|
|
|
+
|
|
|
+ FirmwareUpgradeResponse(socketFd, &receiveBuffer, NeedUpgrade);
|
|
|
+ }
|
|
|
|
|
|
// Reg: 0x08, Plug-in status
|
|
|
if(receiveBuffer.Header.op == _Header_Write && receiveBuffer.Payload.reg == _Reg_Plug_In_Status)
|
|
@@ -1677,9 +2186,68 @@ void DispenserSocketProcess(int socketFd, struct sockaddr_in clientInfo, unsigne
|
|
|
if(receiveBuffer.Header.op == _Header_Read && receiveBuffer.Payload.reg == _Reg_Charging_Permission)
|
|
|
{
|
|
|
ack = ChargingPermissionHandler(&receiveBuffer, dispenserIndex);
|
|
|
-
|
|
|
ChargingPermissionResponse(socketFd, &receiveBuffer, ack);
|
|
|
}
|
|
|
+
|
|
|
+ // Reg: 0x0C, Misc Control
|
|
|
+ if(receiveBuffer.Header.op == _Header_Read && receiveBuffer.Payload.reg == _Reg_Misc_Control)
|
|
|
+ {
|
|
|
+ if(MiscControlHandler(&receiveBuffer, dispenserIndex))
|
|
|
+ {
|
|
|
+ ackResult = _R_OK;
|
|
|
+ }
|
|
|
+ MiscControlResponse(socketFd, &receiveBuffer, dispenserIndex, ackResult);
|
|
|
+ }
|
|
|
+
|
|
|
+ // Reg: 0x0D, Report csu version
|
|
|
+ if(receiveBuffer.Header.op == _Header_Write && receiveBuffer.Payload.reg == _Reg_Report_Csu_Version)
|
|
|
+ {
|
|
|
+ if(DispenserWriteCsuVersionInfoHandler(&receiveBuffer, dispenserIndex))
|
|
|
+ {
|
|
|
+ ackResult = _R_OK;
|
|
|
+ }
|
|
|
+ WriteCsuVersionResponse(socketFd, &receiveBuffer, ackResult);
|
|
|
+ }
|
|
|
+
|
|
|
+ // Reg: 0x0E, Report other version
|
|
|
+ if(receiveBuffer.Header.op == _Header_Write && receiveBuffer.Payload.reg == _Reg_Report_Other_Version)
|
|
|
+ {
|
|
|
+ if(DispenserWriteOtherVersionInfoHandler(&receiveBuffer, dispenserIndex))
|
|
|
+ {
|
|
|
+ ackResult = _R_OK;
|
|
|
+ }
|
|
|
+ WriteOtherVersionResponse(socketFd, &receiveBuffer, ackResult);
|
|
|
+ }
|
|
|
+
|
|
|
+ // Reg: 0x0F, Charging info
|
|
|
+ if(receiveBuffer.Header.op == _Header_Write && receiveBuffer.Payload.reg == _Reg_Charging_Info)
|
|
|
+ {
|
|
|
+ if(DispenserWriteChargingInfoHandler(&receiveBuffer, dispenserIndex))
|
|
|
+ {
|
|
|
+ ackResult = _R_OK;
|
|
|
+ }
|
|
|
+ WriteChargingInfoResponse(socketFd, &receiveBuffer, ackResult);
|
|
|
+ }
|
|
|
+
|
|
|
+ // Reg: 0x10, Charger system id
|
|
|
+ if(receiveBuffer.Header.op == _Header_Read && receiveBuffer.Payload.reg == _Reg_Charger_System_Id)
|
|
|
+ {
|
|
|
+ if(ReadChargerSystemIdHandler(&receiveBuffer, dispenserIndex))
|
|
|
+ {
|
|
|
+ ackResult = _R_OK;
|
|
|
+ }
|
|
|
+ ChargerSystemIdResponse(socketFd, &receiveBuffer, dispenserIndex, ackResult);
|
|
|
+ }
|
|
|
+
|
|
|
+ // Reg: 0x11, Wait plug in
|
|
|
+ if(receiveBuffer.Header.op == _Header_Write && receiveBuffer.Payload.reg == _Reg_WaitPlugIn)
|
|
|
+ {
|
|
|
+ if(WriteWaitPlugInHandler(&receiveBuffer, dispenserIndex))
|
|
|
+ {
|
|
|
+ ackResult = _R_OK;
|
|
|
+ }
|
|
|
+ WriteWaitPlugInResponse(socketFd, &receiveBuffer, ackResult);
|
|
|
+ }
|
|
|
}
|
|
|
|
|
|
// clean timeout
|
|
@@ -1694,8 +2262,9 @@ void DispenserSocketProcess(int socketFd, struct sockaddr_in clientInfo, unsigne
|
|
|
|
|
|
if(timeout >= DISPENSER_SOCKET_TIMEOUT)
|
|
|
{
|
|
|
- //timeout
|
|
|
- PRINTF_FUNC("IP: %s, Socket %d connection timeout", (inet_ntoa(clientInfo.sin_addr)), index);
|
|
|
+ //timeout
|
|
|
+ PRINTF_FUNC("IP: %s, Socket %d connection timeout", (inet_ntoa(clientInfo.sin_addr)), index);
|
|
|
+
|
|
|
if(ShmSysConfigAndInfo->SysInfo.DispenserInfo.ConnectionInfo[index].Status == _CNS_DispenserMatched)
|
|
|
{
|
|
|
DisableConnector(dispenserIndex);
|
|
@@ -1778,8 +2347,12 @@ void InitDispenserInfo(void)
|
|
|
ShmSysConfigAndInfo->SysInfo.ConnectorInfo[i].Parameter.Value = 0;
|
|
|
ShmSysConfigAndInfo->SysInfo.ConnectorInfo[i].AuthorizeStatus = 0;
|
|
|
memset(&ShmSysConfigAndInfo->SysInfo.ConnectorInfo[i].WarningInfo, 0x00, sizeof(struct WARNING_CODE_INFO));
|
|
|
+
|
|
|
+ //memset(&LastWarningInfo[i], 0x00, sizeof(struct WARNING_CODE_INFO));
|
|
|
}
|
|
|
memset(&ShmSysConfigAndInfo->SysInfo.DispenserInfo, 0x00, sizeof(struct DispenserInfoData));
|
|
|
+
|
|
|
+ ShmSysConfigAndInfo->SysInfo.DispenserInfo.Currency = ShmSysConfigAndInfo->SysConfig.BillingData.Currency;
|
|
|
}
|
|
|
|
|
|
void tcpSocketServerStart(void)
|
|
@@ -1817,7 +2390,28 @@ void tcpSocketServerStart(void)
|
|
|
while(1)
|
|
|
{
|
|
|
clientSockFd = accept(sockFd, (struct sockaddr*) &clientInfo, &addrlen);
|
|
|
- PRINTF_FUNC("\nClient ip: %s is accepted at port: %d", inet_ntoa(clientInfo.sin_addr), clientInfo.sin_port);
|
|
|
+ /*
|
|
|
+ if((errno == EWOULDBLOCK) || (errno == EAGAIN) || (errno == ENONET) ||
|
|
|
+ (errno == EPROTO) || (errno == ENOPROTOOPT) || (errno == EOPNOTSUPP) ||
|
|
|
+ (errno == ENETDOWN) || (errno == ENETUNREACH) || (errno == EHOSTDOWN) ||
|
|
|
+ (errno == EHOSTUNREACH) || (errno == ECONNABORTED))
|
|
|
+ {
|
|
|
+ printf("accept error: %s\n", strerror(errno));
|
|
|
+ //exit(EXIT_FAILURE);
|
|
|
+ //break;
|
|
|
+ }
|
|
|
+ else if ( errno == EINTR)
|
|
|
+ {
|
|
|
+ printf("accept EINTRn");
|
|
|
+ continue;
|
|
|
+ }
|
|
|
+ else
|
|
|
+ {
|
|
|
+ printf("AccepCb: accept error: %s\n", strerror(errno));
|
|
|
+ //break;
|
|
|
+ //exit(EXIT_FAILURE);
|
|
|
+ }*/
|
|
|
+ PRINTF_FUNC("Client ip: %s is accepted at port: %d", inet_ntoa(clientInfo.sin_addr), clientInfo.sin_port);
|
|
|
|
|
|
connectIndex = FindFreeChannel();
|
|
|
if(connectIndex >= 0)
|