瀏覽代碼

2020-01-21 /Kathy Yeh
1. modify error: Unable to get disconnect callback from server

Kathy_Yeh 5 年之前
父節點
當前提交
4cc075e544
共有 2 個文件被更改,包括 53 次插入17 次删除
  1. 33 9
      EVSE/Modularization/ocppfiles/MessageHandler.c
  2. 20 8
      EVSE/Modularization/ocppfiles/Module_OcppBackend.c

+ 33 - 9
EVSE/Modularization/ocppfiles/MessageHandler.c

@@ -45,7 +45,6 @@
 
 
 
-
 #define PASS				1
 #define FAIL				-1
 
@@ -166,6 +165,10 @@ static struct OCPPAuthLocalElemet
 	char idTagstatus[16];
 }idTagQuery;
 
+//=============================================
+// OCPP HeartBeat Response Not Receive Counts
+//============================================
+static int HeartBeatWithNOResponse = 0;
 
 
 extern struct lws 					*wsi_client;
@@ -1181,6 +1184,7 @@ void CheckSystemValue(void)
 		// Reset Waiting Time
 		//==============================================
 		clientTime.Heartbeat=time((time_t*)NULL);
+		HeartBeatWithNOResponse = HeartBeatWithNOResponse + 1;
 
 	}
 
@@ -10207,6 +10211,8 @@ void handleHeartbeatResponse(char *payload, int gun_index)
 		FirstHeartBeat = 1;
 	}
 
+	HeartBeatWithNOResponse = 0;
+
 }
 
 void handleMeterValuesResponse(char *payload, int gun_index)
@@ -12775,10 +12781,10 @@ char *GetOcppServerURL()
 		sscanf((const char *)ShmSysConfigAndInfo->SysConfig.OcppServerURL,
 						"%[^:]:%*2[/]%[^:]:%i/%[a-zA-Z0-9._/-]",
 						OcppProtocol, OcppHost, &OcppPort, OcppTempPath);
-		DEBUG_INFO("OcppProtocol =%s\n",OcppProtocol);
-		DEBUG_INFO("OcppHost =%s\n",OcppHost);
-		DEBUG_INFO("OcppPort =%d\n",OcppPort);
-		DEBUG_INFO("OcppTempPath =%s\n",OcppTempPath);
+	//	DEBUG_INFO("OcppProtocol =%s\n",OcppProtocol);
+	//	DEBUG_INFO("OcppHost =%s\n",OcppHost);
+	//	DEBUG_INFO("OcppPort =%d\n",OcppPort);
+	//	DEBUG_INFO("OcppTempPath =%s\n",OcppTempPath);
 		goto End;
 	}
 	else if((ShmOCPP16Data->OcppServerURL != NULL) && (strcmp((const char *)ShmOCPP16Data->OcppServerURL,"") != 0))
@@ -12787,10 +12793,10 @@ char *GetOcppServerURL()
 		sscanf((const char *)ShmOCPP16Data->OcppServerURL,
 								"%[^:]:%*2[/]%[^:]:%i/%[a-zA-Z0-9._/-]",
 								OcppProtocol, OcppHost, &OcppPort, OcppTempPath);
-		DEBUG_INFO("OcppProtocol =%s\n",OcppProtocol);
-		DEBUG_INFO("OcppHost =%s\n",OcppHost);
-		DEBUG_INFO("OcppPort =%d\n",OcppPort);
-		DEBUG_INFO("OcppTempPath =%s\n",OcppTempPath);
+	//	DEBUG_INFO("OcppProtocol =%s\n",OcppProtocol);
+	//	DEBUG_INFO("OcppHost =%s\n",OcppHost);
+	//	DEBUG_INFO("OcppPort =%d\n",OcppPort);
+	//	DEBUG_INFO("OcppTempPath =%s\n",OcppTempPath);
 		goto End;
 
 	}
@@ -12868,6 +12874,24 @@ void SetOcppConnStatus(uint8_t status)
 	}
 }
 
+int GetHeartBeatWithNOResponse(void)
+{
+	return HeartBeatWithNOResponse;
+}
+
+void SetHeartBeatWithNOResponse(void)
+{
+	HeartBeatWithNOResponse = 0;
+}
+
+int InternetDisconnect(void)
+{
+	//DEBUG_INFO("ShmStatusCodeData->InfoCode.InfoEvents.bits.InternetDisconnectVia4Gi=%d\n",ShmStatusCodeData->InfoCode.InfoEvents.bits.InternetDisconnectVia4Gi);
+	//DEBUG_INFO("ShmStatusCodeData->InfoCode.InfoEvents.bits.InternetDisconnectViaEthernet=%d\n",ShmStatusCodeData->InfoCode.InfoEvents.bits.InternetDisconnectViaEthernet);
+	//DEBUG_INFO("ShmStatusCodeData->InfoCode.InfoEvents.bits.InternetDisconnectViaWiFi=%d\n",ShmStatusCodeData->InfoCode.InfoEvents.bits.InternetDisconnectViaWiFi);
+	return (ShmStatusCodeData->InfoCode.InfoEvents.bits.InternetDisconnectVia4Gi && ShmStatusCodeData->InfoCode.InfoEvents.bits.InternetDisconnectViaEthernet && ShmStatusCodeData->InfoCode.InfoEvents.bits.InternetDisconnectViaWiFi	);
+}
+
 #if 0
 void Send(struct json_object *message)
 {

+ 20 - 8
EVSE/Modularization/ocppfiles/Module_OcppBackend.c

@@ -38,6 +38,7 @@
 
 
 
+
 #if 0
 #define DEBUG_INFO(format, args...) StoreLogMsg("[%s:%d][%s][Info] "format, __FILE__, __LINE__, __FUNCTION__, ##args)
 #define DEBUG_WARN(format, args...) StoreLogMsg("[%s:%d][%s][Warn] "format, __FILE__, __LINE__, __FUNCTION__, ##args)
@@ -68,6 +69,9 @@ extern int TransactionMessageAttemptsGet(void);
 extern int TransactionMessageRetryIntervalGet(void);
 extern int GetOcppConnStatus(void);
 extern void SetOcppConnStatus(uint8_t status);
+extern int GetHeartBeatWithNOResponse(void);
+extern void SetHeartBeatWithNOResponse(void);
+extern int InternetDisconnect(void);
 
 pthread_mutex_t mutex1 = PTHREAD_MUTEX_INITIALIZER;
 pthread_mutex_t lock_sentData = PTHREAD_MUTEX_INITIALIZER;
@@ -354,7 +358,7 @@ int SendData(struct lws *wsi)
 
     memcpy (out + LWS_SEND_BUFFER_PRE_PADDING, SendBuffer, len );
 
-    DEBUG_OCPPMESSAGE_INFO("out + LWS_SEND_BUFFER_PRE_PADDING = %s\n", out + LWS_SEND_BUFFER_PRE_PADDING);
+    DEBUG_OCPPMESSAGE_INFO(" SendData= %s\n", out + LWS_SEND_BUFFER_PRE_PADDING);
     n = lws_write(wsi, out + LWS_SEND_BUFFER_PRE_PADDING, len, LWS_WRITE_TEXT);
 
     memset(SendBuffer, 0, len);
@@ -461,7 +465,7 @@ static int OCPP16Callback(struct lws *wsi, enum lws_callback_reasons reason, voi
 			break;
 		case LWS_CALLBACK_CLIENT_RECEIVE://8
 			((char *)in)[len] = '\0';
-			DEBUG_OCPPMESSAGE_INFO("%s\n", (char *)in);
+			DEBUG_OCPPMESSAGE_INFO("Original Receive %s\n", (char *)in);
 			char tempin[1024*4]={0};
 			int c = 0;
 			char *loc;
@@ -495,22 +499,23 @@ static int OCPP16Callback(struct lws *wsi, enum lws_callback_reasons reason, voi
 
 		  		sstr[c] = '\0';
 		  		strcpy(tempin, sstr);
-		  		DEBUG_INFO("tempin: %s\n", tempin);
+		  		DEBUG_INFO("Final Receive: %s\n", tempin);
 		  	}
 		  	else
 		  	{
 		  		strcpy(tempin,(char *)in);
-		  		DEBUG_INFO("tempin: %s\n", tempin);
+		  		//DEBUG_INFO("tempin: %s\n", tempin);
 		  	}
 
-			#ifdef SystemLogMessage
-			DEBUG_INFO("LWS_CALLBACK_CLIENT_RECEIVE, RX length: %d\n", (int)len);
-			#endif
+			//#ifdef SystemLogMessage
+			//DEBUG_INFO("LWS_CALLBACK_CLIENT_RECEIVE, RX length: %d\n", (int)len);
+			//#endif
 
 			//ReceivedMessage(in, len);  --- remove temporally
 			ReceivedMessage((void *)tempin, len);
 
 			break;
+
 		default:
 			#ifdef Debug
 			DEBUG_INFO("OCPP16Callback:reason=%d\n", reason);
@@ -1502,13 +1507,20 @@ int main(void)
 			SetOcppConnStatus(TRUE);
 			// Check System Value
 			CheckSystemValue();
+			if(GetHeartBeatWithNOResponse() >= 3)
+			{
+				lws_context_destroy(context);
+				ConnectionEstablished=0;
+				context = NULL;
+				SetHeartBeatWithNOResponse();
+			}
 		}
 
 		lws_service(context, 100);//timeout_ms
 	}
 
 
-	pthread_join(t, NULL); // ���ݤl��������槹��
+	pthread_join(t, NULL); //
 	//hashmapForMessageFree();
 	return FAIL;
 }