Prechádzať zdrojové kódy

[Improve][Modularization][Module_OcppBackend / Module_OcppBackend20]

2021.11.27 / Folus Wen

Actions:
1. Ping packet sent out logic imrpovement.

Files:
1. As follow commit history

Image version: D0.00.XX.XXXX.XX
Image checksum: XXXXXXXX

Hardware PWB P/N : XXXXXXX
Hardware Version : XXXXXXX
FolusWen 3 rokov pred
rodič
commit
e662be3a54

+ 11 - 15
EVSE/Modularization/ocpp20/Module_OcppBackend20.c

@@ -39,6 +39,7 @@ uint8_t	isQueueSendable = 1;
 uint8_t	counterLwsRestart = 0;;
 uint8_t counterQueueSent = 0;
 uint8_t	counterConnect = 0;
+uint8_t counterPingSend = 0;
 
 //=================================
 // Common routine
@@ -253,10 +254,8 @@ static int OCPP20Callback(struct lws *wsi, enum lws_callback_reasons reason, voi
 			ConnectionEstablished=0;
 			break;
 		case LWS_CALLBACK_CLIENT_WRITEABLE://10
-			if((0 < GetWebSocketPingInterval()) && (GetWebSocketPingInterval() <= getDiffSecNow(startTime.pingOn)) && (GetServerSign() == TRUE))
-			{
+			if(isWebsocketSendable && (0 < GetWebSocketPingInterval()) && (GetWebSocketPingInterval() <= getDiffSecNow(startTime.pingOn)) && (GetServerSign() == TRUE))
 				SendPing(wsi);
-			}
 			else
 				SendData(wsi);
 			break;
@@ -305,6 +304,8 @@ static int OCPP20Callback(struct lws *wsi, enum lws_callback_reasons reason, voi
 			DEBUG_INFO("LWS_CALLBACK_CLIENT_RECEIVE_PONG\n");
 			DEBUG_OCPPMESSAGE_INFO("<==== Get PONG packet.\n");
 			refreshStartTimer(&startTime.pingOn);
+			isWebsocketSendable = ON;
+			counterPingSend = 0;
 			break;
 		case LWS_CALLBACK_OPENSSL_PERFORM_SERVER_CERT_VERIFICATION:
 			DEBUG_INFO("LWS_CALLBACK_OPENSSL_PERFORM_SERVER_CERT_VERIFICATION\n");
@@ -977,23 +978,11 @@ void* processWatchdog()
 			system("pkill OcppBackend20");
 		}
 
-		/*
-		if(system("pidof -s Module_PhBackend > /dev/null") != 0)
-		{
-			DEBUG_INFO("Module_PhBackend not running, restart it.\r\n");
-			system("/root/Module_PhBackend &");
-		}*/
-
 		if((0 < GetWebSocketPingInterval()) && ((GetWebSocketPingInterval()+5) <= getDiffSecNow(startTime.pingOn)) && (wsi_client != NULL) && (GetServerSign() == TRUE))
 		{
 			DEBUG_WARN("Pong packet receive timeout.\n");
 			system("pkill OcppBackend20");
 		}
-		else if((0 < GetWebSocketPingInterval()) && (GetWebSocketPingInterval() <= getDiffSecNow(startTime.pingOn)) && (wsi_client != NULL) && (GetServerSign() == TRUE))
-		{
-			lws_callback_on_writable(wsi_client);
-		}
-
 
 		usleep(500000);
 	}
@@ -1189,6 +1178,13 @@ int main(void)
 				// Check System Value
 				CheckSystemValue();
 
+				// PING packet
+				if(isWebsocketSendable && (0 < GetWebSocketPingInterval()) && ((GetWebSocketPingInterval()+counterPingSend) <= getDiffSecNow(startTime.pingOn)))
+				{
+					lws_callback_on_writable(wsi_client);
+					counterPingSend++;
+				}
+
 				if(GetHeartBeatWithNOResponse() >= 30)
 				{
 					lws_context_destroy(context);

+ 10 - 15
EVSE/Modularization/ocppfiles/Module_OcppBackend.c

@@ -39,6 +39,7 @@ uint8_t	isQueueSendable = 1;
 uint8_t	counterLwsRestart = 0;
 uint8_t counterQueueSent = 0;
 uint8_t	counterConnect = 0;
+uint8_t counterPingSend = 0;
 
 sqlite3 *db;
 char *errMsg = NULL;
@@ -309,10 +310,8 @@ static int OCPP16Callback(struct lws *wsi, enum lws_callback_reasons reason, voi
 			ConnectionEstablished=0;
 			break;
 		case LWS_CALLBACK_CLIENT_WRITEABLE://10
-			if((0 < GetWebSocketPingInterval()) && (GetWebSocketPingInterval() <= getDiffSecNow(startTime.pingOn)) && (GetServerSign() == TRUE))
-			{
+			if(isWebsocketSendable && (0 < GetWebSocketPingInterval()) && (GetWebSocketPingInterval() <= getDiffSecNow(startTime.pingOn)) && (GetServerSign() == TRUE))
 				SendPing(wsi);
-			}
 			else
 				SendData(wsi);
 
@@ -363,6 +362,7 @@ static int OCPP16Callback(struct lws *wsi, enum lws_callback_reasons reason, voi
 			DEBUG_OCPPMESSAGE_INFO("<===== Get PONG packet.\n");
 			refreshStartTimer(&startTime.pingOn);
 			isWebsocketSendable = 1;
+			counterPingSend = 0;
 			break;
 		case LWS_CALLBACK_OPENSSL_PERFORM_SERVER_CERT_VERIFICATION:
 			DEBUG_INFO("LWS_CALLBACK_OPENSSL_PERFORM_SERVER_CERT_VERIFICATION\n");
@@ -1261,24 +1261,12 @@ void* processWatchdog()
 			DEBUG_INFO("Connect OCPP server timeout over 3 count.\n");
 			system("pkill OcppBackend");
 		}
-		
-		/*
-		if(system("pidof -s Module_PhBackend > /dev/null") != 0)
-		{
-			DEBUG_INFO("Module_PhBackend not running, restart it.\r\n");
-			system("/root/Module_PhBackend &");
-		}*/
 
 		if((0 < GetWebSocketPingInterval()) && ((GetWebSocketPingInterval()+5) <= getDiffSecNow(startTime.pingOn)) && (wsi_client != NULL) && (GetServerSign() == TRUE))
 		{
 			DEBUG_WARN("Pong packet receive timeout.\n");
 			system("pkill OcppBackend");
 		}
-		else if((0 < GetWebSocketPingInterval()) && (GetWebSocketPingInterval() <= getDiffSecNow(startTime.pingOn)) && (wsi_client != NULL) && (GetServerSign() == TRUE))
-		{
-			lws_callback_on_writable(wsi_client);
-		}
-
 
 		usleep(500000);
 	}
@@ -1531,6 +1519,13 @@ int main(void)
 				// Check System Value
 				CheckSystemValue();
 
+				// PING packet
+				if(isWebsocketSendable && (0 < GetWebSocketPingInterval()) && ((GetWebSocketPingInterval()+counterPingSend) <= getDiffSecNow(startTime.pingOn)))
+				{
+					lws_callback_on_writable(wsi_client);
+					counterPingSend++;
+				}
+
 				if(GetHeartBeatWithNOResponse() >= 30)
 				{
 					lws_context_destroy(context);

+ 9 - 14
EVSE/Modularization/ocppph/Module_OcppBackend.c

@@ -39,6 +39,7 @@ uint8_t	isQueueSendable = 1;
 uint8_t	counterLwsRestart = 0;
 uint8_t counterQueueSent = 0;
 uint8_t	counterConnect = 0;
+uint8_t counterPingSend = 0;
 
 sqlite3 *db;
 char *errMsg = NULL;
@@ -311,10 +312,8 @@ static int OCPP16Callback(struct lws *wsi, enum lws_callback_reasons reason, voi
 			ConnectionEstablished=0;
 			break;
 		case LWS_CALLBACK_CLIENT_WRITEABLE://10
-			if((0 < GetWebSocketPingInterval()) && (GetWebSocketPingInterval() <= getDiffSecNow(startTime.pingOn)) && (GetServerSign() == TRUE))
-			{
+			if(isWebsocketSendable && (0 < GetWebSocketPingInterval()) && (GetWebSocketPingInterval() <= getDiffSecNow(startTime.pingOn)) && (GetServerSign() == TRUE))
 				SendPing(wsi);
-			}
 			else
 				SendData(wsi);
 
@@ -365,6 +364,7 @@ static int OCPP16Callback(struct lws *wsi, enum lws_callback_reasons reason, voi
 			DEBUG_OCPPMESSAGE_INFO("<===== Get PONG packet.\n");
 			refreshStartTimer(&startTime.pingOn);
 			isWebsocketSendable = 1;
+			counterPingSend = 0;
 			break;
 		case LWS_CALLBACK_OPENSSL_PERFORM_SERVER_CERT_VERIFICATION:
 			DEBUG_INFO("LWS_CALLBACK_OPENSSL_PERFORM_SERVER_CERT_VERIFICATION\n");
@@ -1264,23 +1264,12 @@ void* processWatchdog()
 			DEBUG_INFO("Connect OCPP server timeout over 3 count.\n");
 			system("pkill OcppBackend");
 		}
-		
-		/*
-		if(system("pidof -s Module_PhBackend > /dev/null") != 0)
-		{
-			DEBUG_INFO("Module_PhBackend not running, restart it.\r\n");
-			system("/root/Module_PhBackend &");
-		}*/
 
 		if((0 < GetWebSocketPingInterval()) && ((GetWebSocketPingInterval()+5) <= getDiffSecNow(startTime.pingOn)) && (wsi_client != NULL) && (GetServerSign() == TRUE))
 		{
 			DEBUG_WARN("Pong packet receive timeout.\n");
 			system("pkill OcppBackend");
 		}
-		else if((0 < GetWebSocketPingInterval()) && (GetWebSocketPingInterval() <= getDiffSecNow(startTime.pingOn)) && (wsi_client != NULL) && (GetServerSign() == TRUE))
-		{
-			lws_callback_on_writable(wsi_client);
-		}
 
 
 		usleep(500000);
@@ -1535,6 +1524,12 @@ int main(void)
 				// Check System Value
 				CheckSystemValue();
 
+				if(isWebsocketSendable && (0 < GetWebSocketPingInterval()) && ((GetWebSocketPingInterval()+counterPingSend) <= getDiffSecNow(startTime.pingOn)))
+				{
+					lws_callback_on_writable(wsi_client);
+					counterPingSend++;
+				}
+
 				if(GetHeartBeatWithNOResponse() >= 30)
 				{
 					lws_context_destroy(context);