Forráskód Böngészése

Merge branch 'master' into Noodoe

FolusWen 4 éve
szülő
commit
d3386c9b9e

+ 77 - 35
EVSE/Modularization/ocpp20/MessageHandler.c

@@ -1,5 +1,6 @@
 #include "Module_OcppBackend20.h"
 #include "define.h"
+//#define TEST_OCPP20
 
 static char *APNAuthenticationEnumTypeStr[] = {
 	MACROSTR(CHAP),
@@ -7648,7 +7649,6 @@ int sendTransactionEventRequest(int gun_index)
 {
 	mtrace();
 	int result = FAIL;
-	static uint32_t seqNo[CONNECTOR_QUANTITY] = {0};
 	char message[1024*20]={0};
 	char guid[37]={0};
 	char tempdata[128]={0};
@@ -7674,24 +7674,24 @@ int sendTransactionEventRequest(int gun_index)
 		{
 			if((ShmSysConfigAndInfo->SysInfo.ChademoChargingData[index].Index == tempIndex))
 			{
-				memset(&ShmOCPP20Data->TransactionEvent[index], 0x00, sizeof(struct TransactionEvent_20));
-
 				getNowDatetime(ShmOCPP20Data->TransactionEvent[index].timestamp);
 
-				if((seqNo[index]+1) < INT_MAX)
-					seqNo[index]++;
+				if((ShmOCPP20Data->TransactionEvent[index].seqNo + 1) < INT_MAX)
+					ShmOCPP20Data->TransactionEvent[index].seqNo++;
 				else
-					seqNo[index] = 0;
+					ShmOCPP20Data->TransactionEvent[index].seqNo = 0;
 
-				ShmOCPP20Data->TransactionEvent[index].seqNo = seqNo[index];
 				ShmOCPP20Data->TransactionEvent[index].offline = (!ShmOCPP20Data->OcppConnStatus?TRUE:FALSE);
 
 				ShmOCPP20Data->TransactionEvent[index].evse.id = 0;
 				ShmOCPP20Data->TransactionEvent[index].evse.connectorId = (gun_index + 1);
 
-
 				if(ShmSysConfigAndInfo->SysInfo.ChademoChargingData[index].SystemStatus == SYS_MODE_IDLE)//S_IDLE
 				{
+					memset(&ShmOCPP20Data->TransactionEvent[index].transactionInfo, 0x00, sizeof(struct TransactionType));
+					memset(&ShmOCPP20Data->TransactionEvent[index].idToken, 0x00, sizeof(struct IdTokenType));
+					memset(&ShmOCPP20Data->TransactionEvent[index].meterValue, 0x00, sizeof(struct MeterValueType));
+
 					sprintf((char*)ShmOCPP20Data->TransactionEvent[index].eventType, "%s", TransactionEventEnumTypeStr[TransactionEventEnumType_Started]);
 					sprintf((char*)ShmOCPP20Data->TransactionEvent[index].transactionInfo.chargingState, "%s", ChargingStateEnumTypeStr[ChargingStateEnumType_Idle]);
 
@@ -7720,6 +7720,11 @@ int sendTransactionEventRequest(int gun_index)
 				}
 				else if (ShmSysConfigAndInfo->SysInfo.ChademoChargingData[index].SystemStatus == SYS_MODE_CHARGING) //S_CHARGING
 				{
+					if(strlen((char*)ShmOCPP20Data->TransactionEvent[index].transactionInfo.transactionId) == 0)
+						random_uuid(ShmOCPP20Data->TransactionEvent[index].transactionInfo.transactionId);
+
+					sprintf((char*)ShmOCPP20Data->TransactionEvent[index].idToken.idToken, "%s", ShmSysConfigAndInfo->SysInfo.ChademoChargingData[index].StartUserId);
+
 					sprintf((char*)ShmOCPP20Data->TransactionEvent[index].eventType, "%s", TransactionEventEnumTypeStr[TransactionEventEnumType_Updated]);
 					sprintf((char*)ShmOCPP20Data->TransactionEvent[index].transactionInfo.chargingState, "%s", ChargingStateEnumTypeStr[ChargingStateEnumType_Charging]);
 					sprintf((char*)ShmOCPP20Data->TransactionEvent[index].triggerReason, "%s", TriggerReasonEnumTypeStr[TriggerReasonEnumType_ChargingStateChanged]);
@@ -7774,16 +7779,13 @@ int sendTransactionEventRequest(int gun_index)
 		{
 			if(ShmSysConfigAndInfo->SysInfo.CcsChargingData[index].Index == tempIndex)
 			{
-				memset(&ShmOCPP20Data->TransactionEvent[index], 0x00, sizeof(struct TransactionEvent_20));
-
 				getNowDatetime(ShmOCPP20Data->TransactionEvent[index].timestamp);
 
-				if((seqNo[index]+1) < INT_MAX)
-					seqNo[index]++;
+				if((ShmOCPP20Data->TransactionEvent[index].seqNo + 1) < INT_MAX)
+					ShmOCPP20Data->TransactionEvent[index].seqNo++;
 				else
-					seqNo[index] = 0;
+					ShmOCPP20Data->TransactionEvent[index].seqNo = 0;
 
-				ShmOCPP20Data->TransactionEvent[index].seqNo = seqNo[index];
 				ShmOCPP20Data->TransactionEvent[index].offline = (!ShmOCPP20Data->OcppConnStatus?TRUE:FALSE);
 
 				ShmOCPP20Data->TransactionEvent[index].evse.id = 0;
@@ -7791,6 +7793,10 @@ int sendTransactionEventRequest(int gun_index)
 
 				if (ShmSysConfigAndInfo->SysInfo.CcsChargingData[index].SystemStatus == SYS_MODE_IDLE) //S_IDLE
 				{
+					memset(&ShmOCPP20Data->TransactionEvent[index].transactionInfo, 0x00, sizeof(struct TransactionType));
+					memset(&ShmOCPP20Data->TransactionEvent[index].idToken, 0x00, sizeof(struct IdTokenType));
+					memset(&ShmOCPP20Data->TransactionEvent[index].meterValue, 0x00, sizeof(struct MeterValueType));
+
 					sprintf((char*)ShmOCPP20Data->TransactionEvent[index].eventType, "%s", TransactionEventEnumTypeStr[TransactionEventEnumType_Started]);
 					sprintf((char*)ShmOCPP20Data->TransactionEvent[index].transactionInfo.chargingState, "%s", ChargingStateEnumTypeStr[ChargingStateEnumType_Idle]);
 
@@ -7819,6 +7825,11 @@ int sendTransactionEventRequest(int gun_index)
 				}
 				else if (ShmSysConfigAndInfo->SysInfo.CcsChargingData[index].SystemStatus == SYS_MODE_CHARGING) //S_CHARGING
 				{
+					if(strlen((char*)ShmOCPP20Data->TransactionEvent[index].transactionInfo.transactionId) == 0)
+						random_uuid(ShmOCPP20Data->TransactionEvent[index].transactionInfo.transactionId);
+
+					sprintf((char*)ShmOCPP20Data->TransactionEvent[index].idToken.idToken, "%s", ShmSysConfigAndInfo->SysInfo.CcsChargingData[index].StartUserId);
+
 					sprintf((char*)ShmOCPP20Data->TransactionEvent[index].eventType, "%s", TransactionEventEnumTypeStr[TransactionEventEnumType_Updated]);
 					sprintf((char*)ShmOCPP20Data->TransactionEvent[index].transactionInfo.chargingState, "%s", ChargingStateEnumTypeStr[ChargingStateEnumType_Charging]);
 					sprintf((char*)ShmOCPP20Data->TransactionEvent[index].triggerReason, "%s", TriggerReasonEnumTypeStr[TriggerReasonEnumType_ChargingStateChanged]);
@@ -7872,16 +7883,13 @@ int sendTransactionEventRequest(int gun_index)
 		{
 			if(ShmSysConfigAndInfo->SysInfo.GbChargingData[index].Index == tempIndex)
 			{
-				memset(&ShmOCPP20Data->TransactionEvent[index], 0x00, sizeof(struct TransactionEvent_20));
-
 				getNowDatetime(ShmOCPP20Data->TransactionEvent[index].timestamp);
 
-				if((seqNo[index]+1) < INT_MAX)
-					seqNo[index]++;
+				if((ShmOCPP20Data->TransactionEvent[index].seqNo + 1) < INT_MAX)
+					ShmOCPP20Data->TransactionEvent[index].seqNo++;
 				else
-					seqNo[index] = 0;
+					ShmOCPP20Data->TransactionEvent[index].seqNo = 0;
 
-				ShmOCPP20Data->TransactionEvent[index].seqNo = seqNo[index];
 				ShmOCPP20Data->TransactionEvent[index].offline = (!ShmOCPP20Data->OcppConnStatus?TRUE:FALSE);
 
 				ShmOCPP20Data->TransactionEvent[index].evse.id = 0;
@@ -7889,6 +7897,10 @@ int sendTransactionEventRequest(int gun_index)
 
 				if (ShmSysConfigAndInfo->SysInfo.GbChargingData[index].SystemStatus == SYS_MODE_IDLE) //S_IDLE
 				{
+					memset(&ShmOCPP20Data->TransactionEvent[index].transactionInfo, 0x00, sizeof(struct TransactionType));
+					memset(&ShmOCPP20Data->TransactionEvent[index].idToken, 0x00, sizeof(struct IdTokenType));
+					memset(&ShmOCPP20Data->TransactionEvent[index].meterValue, 0x00, sizeof(struct MeterValueType));
+
 					sprintf((char*)ShmOCPP20Data->TransactionEvent[index].eventType, "%s", TransactionEventEnumTypeStr[TransactionEventEnumType_Started]);
 					sprintf((char*)ShmOCPP20Data->TransactionEvent[index].transactionInfo.chargingState, "%s", ChargingStateEnumTypeStr[ChargingStateEnumType_Idle]);
 
@@ -7917,6 +7929,11 @@ int sendTransactionEventRequest(int gun_index)
 				}
 				else if (ShmSysConfigAndInfo->SysInfo.GbChargingData[index].SystemStatus == SYS_MODE_CHARGING) //S_CHARGING
 				{
+					if(strlen((char*)ShmOCPP20Data->TransactionEvent[index].transactionInfo.transactionId) == 0)
+						random_uuid(ShmOCPP20Data->TransactionEvent[index].transactionInfo.transactionId);
+
+					sprintf((char*)ShmOCPP20Data->TransactionEvent[index].idToken.idToken, "%s", ShmSysConfigAndInfo->SysInfo.GbChargingData[index].StartUserId);
+
 					sprintf((char*)ShmOCPP20Data->TransactionEvent[index].eventType, "%s", TransactionEventEnumTypeStr[TransactionEventEnumType_Updated]);
 					sprintf((char*)ShmOCPP20Data->TransactionEvent[index].transactionInfo.chargingState, "%s", ChargingStateEnumTypeStr[ChargingStateEnumType_Charging]);
 					sprintf((char*)ShmOCPP20Data->TransactionEvent[index].triggerReason, "%s", TriggerReasonEnumTypeStr[TriggerReasonEnumType_ChargingStateChanged]);
@@ -7963,16 +7980,13 @@ int sendTransactionEventRequest(int gun_index)
 		{
 			if(ShmSysConfigAndInfo->SysInfo.ConnectorInfo[index].GeneralChargingData.Index == tempIndex)
 			{
-				memset(&ShmOCPP20Data->TransactionEvent[index], 0x00, sizeof(struct TransactionEvent_20));
-
 				getNowDatetime(ShmOCPP20Data->TransactionEvent[index].timestamp);
 
-				if((seqNo[index]+1) < INT_MAX)
-					seqNo[index]++;
+				if((ShmOCPP20Data->TransactionEvent[index].seqNo + 1) < INT_MAX)
+					ShmOCPP20Data->TransactionEvent[index].seqNo++;
 				else
-					seqNo[index] = 0;
+					ShmOCPP20Data->TransactionEvent[index].seqNo = 0;
 
-				ShmOCPP20Data->TransactionEvent[index].seqNo = seqNo[index];
 				ShmOCPP20Data->TransactionEvent[index].offline = (!ShmOCPP20Data->OcppConnStatus?TRUE:FALSE);
 
 				ShmOCPP20Data->TransactionEvent[index].evse.id = 0;
@@ -7980,6 +7994,10 @@ int sendTransactionEventRequest(int gun_index)
 
 				if (ShmSysConfigAndInfo->SysInfo.ConnectorInfo[index].GeneralChargingData.SystemStatus == SYS_MODE_IDLE) //S_IDLE
 				{
+					memset(&ShmOCPP20Data->TransactionEvent[index].transactionInfo, 0x00, sizeof(struct TransactionType));
+					memset(&ShmOCPP20Data->TransactionEvent[index].idToken, 0x00, sizeof(struct IdTokenType));
+					memset(&ShmOCPP20Data->TransactionEvent[index].meterValue, 0x00, sizeof(struct MeterValueType));
+
 					sprintf((char*)ShmOCPP20Data->TransactionEvent[index].eventType, "%s", TransactionEventEnumTypeStr[TransactionEventEnumType_Started]);
 					sprintf((char*)ShmOCPP20Data->TransactionEvent[index].transactionInfo.chargingState, "%s", ChargingStateEnumTypeStr[ChargingStateEnumType_Idle]);
 
@@ -8008,6 +8026,11 @@ int sendTransactionEventRequest(int gun_index)
 				}
 				else if (ShmSysConfigAndInfo->SysInfo.ConnectorInfo[index].GeneralChargingData.SystemStatus == SYS_MODE_CHARGING) //S_CHARGING
 				{
+					if(strlen((char*)ShmOCPP20Data->TransactionEvent[index].transactionInfo.transactionId) == 0)
+						random_uuid(ShmOCPP20Data->TransactionEvent[index].transactionInfo.transactionId);
+
+					sprintf((char*)ShmOCPP20Data->TransactionEvent[index].idToken.idToken, "%s", ShmSysConfigAndInfo->SysInfo.ConnectorInfo[index].GeneralChargingData.StartUserId);
+
 					sprintf((char*)ShmOCPP20Data->TransactionEvent[index].eventType, "%s", TransactionEventEnumTypeStr[TransactionEventEnumType_Updated]);
 					sprintf((char*)ShmOCPP20Data->TransactionEvent[index].transactionInfo.chargingState, "%s", ChargingStateEnumTypeStr[ChargingStateEnumType_Charging]);
 					sprintf((char*)ShmOCPP20Data->TransactionEvent[index].triggerReason, "%s", TriggerReasonEnumTypeStr[TriggerReasonEnumType_ChargingStateChanged]);
@@ -8060,16 +8083,13 @@ int sendTransactionEventRequest(int gun_index)
 		{
 			if(ShmSysConfigAndInfo->SysInfo.AcChargingData[index].Index == tempIndex)
 			{
-				memset(&ShmOCPP20Data->TransactionEvent[index], 0x00, sizeof(struct TransactionEvent_20));
-
 				getNowDatetime(ShmOCPP20Data->TransactionEvent[index].timestamp);
 
-				if((seqNo[index]+1) < INT_MAX)
-					seqNo[index]++;
+				if((ShmOCPP20Data->TransactionEvent[index].seqNo + 1) < INT_MAX)
+					ShmOCPP20Data->TransactionEvent[index].seqNo++;
 				else
-					seqNo[index] = 0;
+					ShmOCPP20Data->TransactionEvent[index].seqNo = 0;
 
-				ShmOCPP20Data->TransactionEvent[index].seqNo = seqNo[index];
 				ShmOCPP20Data->TransactionEvent[index].offline = (!ShmOCPP20Data->OcppConnStatus?TRUE:FALSE);
 
 				ShmOCPP20Data->TransactionEvent[index].evse.id = 0;
@@ -8077,6 +8097,10 @@ int sendTransactionEventRequest(int gun_index)
 
 				if (ShmSysConfigAndInfo->SysInfo.AcChargingData[index].SystemStatus == SYS_MODE_IDLE) //SYS_MODE_IDLE
 				{
+					memset(&ShmOCPP20Data->TransactionEvent[index].transactionInfo, 0x00, sizeof(struct TransactionType));
+					memset(&ShmOCPP20Data->TransactionEvent[index].idToken, 0x00, sizeof(struct IdTokenType));
+					memset(&ShmOCPP20Data->TransactionEvent[index].meterValue, 0x00, sizeof(struct MeterValueType));
+
 					sprintf((char*)ShmOCPP20Data->TransactionEvent[index].eventType, "%s", TransactionEventEnumTypeStr[TransactionEventEnumType_Started]);
 					sprintf((char*)ShmOCPP20Data->TransactionEvent[index].transactionInfo.chargingState, "%s", ChargingStateEnumTypeStr[ChargingStateEnumType_Idle]);
 
@@ -8105,6 +8129,11 @@ int sendTransactionEventRequest(int gun_index)
 				}
 				else if (ShmSysConfigAndInfo->SysInfo.AcChargingData[index].SystemStatus == SYS_MODE_CHARGING) //S_CHARGING
 				{
+					if(strlen((char*)ShmOCPP20Data->TransactionEvent[index].transactionInfo.transactionId) == 0)
+						random_uuid(ShmOCPP20Data->TransactionEvent[index].transactionInfo.transactionId);
+
+					sprintf((char*)ShmOCPP20Data->TransactionEvent[index].idToken.idToken, "%s", ShmSysConfigAndInfo->SysInfo.AcChargingData[index].StartUserId);
+
 					sprintf((char*)ShmOCPP20Data->TransactionEvent[index].eventType, "%s", TransactionEventEnumTypeStr[TransactionEventEnumType_Updated]);
 					sprintf((char*)ShmOCPP20Data->TransactionEvent[index].transactionInfo.chargingState, "%s", ChargingStateEnumTypeStr[ChargingStateEnumType_Charging]);
 					sprintf((char*)ShmOCPP20Data->TransactionEvent[index].triggerReason, "%s", TriggerReasonEnumTypeStr[TriggerReasonEnumType_ChargingStateChanged]);
@@ -15102,6 +15131,9 @@ int GetOcppServerURL()
 	if((ShmSysConfigAndInfo->SysConfig.OcppServerURL != NULL) && (strcmp((const char *)ShmSysConfigAndInfo->SysConfig.OcppServerURL,"") != 0) )
 	{
 		memcpy(urlStr, ShmSysConfigAndInfo->SysConfig.OcppServerURL, ARRAY_SIZE(ShmSysConfigAndInfo->SysConfig.OcppServerURL));
+#ifdef TEST_OCPP20
+		sprintf(urlStr, "ws://172.17.20.19:8080/"); // For test
+#endif
 		if(yuarel_parse(&url, urlStr) != -1)
 		{
 			sprintf(OcppProtocol, "%s", url.scheme);
@@ -15110,7 +15142,16 @@ int GetOcppServerURL()
 			if(url.path == NULL)
 				OcppTempPath[0] = '\0';
 	        else
-			   sprintf(OcppTempPath, "%s", url.path);
+	        {
+				if(url.path[strlen(url.path)-1] != '/')
+				{
+					sprintf(OcppTempPath, "%s/", url.path);
+				}
+				else
+				{
+					sprintf(OcppTempPath, "%s", url.path);
+				}
+	        }
 
 		    if(url.port == 0)
 		    {
@@ -15190,8 +15231,9 @@ int GetOcppPath()
 	{
 		strcpy(OcppPath,"");
 	}
-
-	//sprintf(OcppPath,"/AWLU770001D1P0D19520001A0"); // For test
+#ifdef TEST_OCPP20
+	sprintf(OcppPath,"/AWLU770001D1P0D19520001A0"); // For test
+#endif
 	return result;
 }
 

+ 10 - 1
EVSE/Modularization/ocppfiles/MessageHandler.c

@@ -15088,7 +15088,16 @@ int GetOcppServerURL()
 			if(url.path == NULL)
 				OcppTempPath[0] = '\0';
 			else
-				sprintf(OcppTempPath, "%s", url.path);
+			{
+				if(url.path[strlen(url.path)-1] != '/')
+				{
+					sprintf(OcppTempPath, "%s/", url.path);
+				}
+				else
+				{
+					sprintf(OcppTempPath, "%s", url.path);
+				}
+			}
 
 			if(url.port == 0)
 			{