ソースを参照

[Improve][Modularization][Module_OcppBackend / Module_OcppBackend]

2021.11.05 / Folus Wen

Actions:
1. Queue message retry logic improve.

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 年 前
コミット
6086802c85

+ 41 - 78
EVSE/Modularization/ocpp20/Module_OcppBackend20.c

@@ -18,6 +18,8 @@ struct StartTime
 	struct timespec startTimeQueue;
 }startTime;
 
+struct QueueOpInfo queueOpInfo;
+
 //==========================================
 // Function prototype
 //==========================================
@@ -25,11 +27,7 @@ void ReceivedMessage(void *in, size_t len);
 int SendBufLen=0;//(1024*4);//(1024*3);
 unsigned char SendBuffer[WEBSOCKET_BUFFER_SIZE]={0};
 static int ConnectionEstablished=0;
-static int TransactionMessageResend = 1;  // the number of retry to submit a transaction-related message when the Central System fails to process it.
-static int TransactionQueueNum = 0;
-static int OfflineTransactionQueueNum = 0;  // Number of offline transactions
-static int OfflineTransaction = 0;
-static int IsUsing = FALSE;
+int defaultWaitingTime = 10; //10 second
 
 char OcppPath[384]={0};
 char OcppProtocol[10]={0},OcppHost[128]={0}, OcppTempPath[256]={0};
@@ -46,7 +44,7 @@ uint8_t	counterConnect = 0;
 //=================================
 int GetTransactionQueueNum(void)
 {
-	return TransactionQueueNum;
+	return queueOpInfo.TransactionQueueNum;
 }
 
 //==========================================
@@ -191,26 +189,10 @@ static int OCPP20Callback(struct lws *wsi, enum lws_callback_reasons reason, voi
 		case LWS_CALLBACK_CLIENT_ESTABLISHED: //3
 			DEBUG_INFO("LWS_CALLBACK_CLIENT_ESTABLISHED\n");
 
-			char frontUUID[100] ={0};
-			char frontData[QUEUE_MESSAGE_LENGTH] ={0};
-			int queueNotEmpty = FALSE;
-
 			//connected
 			ConnectionEstablished=1;
 			SetOcppConnStatus(TRUE);
 
-			queueNotEmpty = queue_operation(QUEUE_OPERATION_SHOWFRONT,frontUUID, frontData);
-
-			if(queueNotEmpty == TRUE)
-			{
-				OfflineTransaction = 1; // 0: no packets in queue.     1: There are packets in queue.
-			}
-
-			TransactionMessageResend = 1;
-
-			//get offline number
-			queue_operation(QUEUE_OPERATION_SHOWQUEUE,"","");
-			OfflineTransactionQueueNum =TransactionQueueNum ;
 			break;
 		case LWS_CALLBACK_CLIENT_CONNECTION_ERROR://1
 			DEBUG_ERROR("LWS_CALLBACK_CLIENT_CONNECTION_ERROR %s\n", (char *)in );
@@ -651,11 +633,7 @@ int addq(char *uuid, char *data)
 	fputs(data, outfile);
 	fputs("\n", outfile);
 	fclose (outfile);
-	TransactionQueueNum = TransactionQueueNum + 1;
-	if(OfflineTransaction == 1)  // 0: no offline Transaction      1: offline Transaction
-	{
-		OfflineTransactionQueueNum = OfflineTransactionQueueNum + 1;
-	}
+	queueOpInfo.TransactionQueueNum +=  1;
 	DEBUG_INFO("add queue end\n");
 	system("/bin/fsync -d /dev/mtdblock13;/bin/sync &");
 	return FALSE;
@@ -742,8 +720,8 @@ int delq()
 
 			if(i==0)
 			{
-				TransactionQueueNum = TransactionQueueNum - 1;
-				TransactionMessageResend = 1;
+				queueOpInfo.TransactionQueueNum -= 1;
+				queueOpInfo.TransactionMessageResend = 0;
 				DEBUG_INFO("delete the item\n");
 			}
 
@@ -827,11 +805,11 @@ int showqueue()
 	  return FALSE;
 	}
 
-	TransactionQueueNum = 0;  // the number of packets in queue
+	queueOpInfo.TransactionQueueNum = 0;  // the number of packets in queue
 
 	while(fgets(line, sizeof line, fp) != NULL) {
 		//DEBUG_INFO("%s\n", line);
-		TransactionQueueNum = TransactionQueueNum + 1; //the number of packets in queue
+		queueOpInfo.TransactionQueueNum += 1; //the number of packets in queue
 	}
 
 	fclose(fp);
@@ -893,22 +871,20 @@ int sentqueue(){
 void* processTransactionQueue(void* data)
 {
 	char frontUUID[100] ={0};
-	char frontData[QUEUE_MESSAGE_LENGTH/*1024*4*/] ={0};
+	char frontData[QUEUE_MESSAGE_LENGTH] ={0};
 	int queueNotEmpty = FALSE;
 
 	while(1)
 	{
-		if(!req_SendQueue && ((getDiffSecNow(startTime.startTimeQueue) > (TransactionMessageRetryIntervalGet()>10?TransactionMessageRetryIntervalGet():10)) || (isWebsocketSendable && isQueueSendable && (getDiffSecNow(startTime.startTimeQueue) >= ((counterQueueSent>=20)?5:0)))))
+		if(!req_SendQueue && ((getDiffSecNow(startTime.startTimeQueue) >= ((TransactionMessageRetryIntervalGet()>10?TransactionMessageRetryIntervalGet():10)*(queueOpInfo.TransactionMessageResend>1?2:1))) || (isWebsocketSendable && isQueueSendable && (getDiffSecNow(startTime.startTimeQueue) >= ((counterQueueSent>=20)?5:0)))))
 		{
 			if(FirstHeartBeatResponse() == 1)
 			{
 				memset(frontUUID, 0, ARRAY_SIZE(frontUUID));
 				memset(frontData, 0, ARRAY_SIZE(frontData));
-				queueNotEmpty = FALSE;
-
-				queueNotEmpty = queue_operation(QUEUE_OPERATION_SHOWFRONT,frontUUID, frontData);//showfront(frontUUID, frontData);    ---> remove temporally
 
-				if((queueNotEmpty == TRUE) && (GetOcppConnStatus() == 1)) //OcppConnStatus  0: disconnected, 1: connected
+				queueNotEmpty = queue_operation(QUEUE_OPERATION_SHOWFRONT,frontUUID, frontData);
+				if((queueNotEmpty == TRUE) && (GetOcppConnStatus() == 1))
 				{
 					if(isWebsocketSendable)
 						DEBUG_INFO("isWebsocketSendable on.\n");
@@ -919,48 +895,26 @@ void* processTransactionQueue(void* data)
 					if(((getDiffSecNow(startTime.startTimeQueue) > (TransactionMessageRetryIntervalGet()>10?TransactionMessageRetryIntervalGet():10))))
 						DEBUG_INFO("Queue timer(%d) over spec(%d).\n", getDiffSecNow(startTime.startTimeQueue), TransactionMessageRetryIntervalGet());
 
-					if((OfflineTransaction == 1) && (OfflineTransactionQueueNum != 0))  //OfflineTransaction   0: no offline Transaction     1: offline Transaction
+					if(queueOpInfo.TransactionMessageResend < TransactionMessageAttemptsGet())
 					{
-						DEBUG_INFO("Sent message from queue request off-line first.\n");
-						req_SendQueue 	= 1; // 0: no packets to send    1: send the top packet in queue
+						DEBUG_INFO("Sent message from queue request.\n");
+						DEBUG_INFO("TransactionMessageResend time: %d\n", queueOpInfo.TransactionMessageResend);
 
-						OfflineTransactionQueueNum = OfflineTransactionQueueNum - 1;
+						req_SendQueue = 1;
 
-						if(OfflineTransactionQueueNum == 0)
-						{
-							OfflineTransaction = 0;
-						}
+						queueOpInfo.TransactionMessageResend += 1;
 					}
 					else
 					{
-						if(TransactionMessageResend <= TransactionMessageAttemptsGet()) //
-						{
-							DEBUG_INFO("Sent message from queue request.\n");
-							DEBUG_INFO("TransactionMessageResend = %d\n",TransactionMessageResend);
-
-							req_SendQueue = 1;
+						DEBUG_INFO("Transaction message resend(%d) over spec(%d) message abandon.\n", queueOpInfo.TransactionMessageResend, TransactionMessageAttemptsGet());
 
-							TransactionMessageResend += 1;
-						}
-						else
-						{
-							DEBUG_INFO("Transaction message resend(%d) over spec(%d) message abandon.\n", TransactionMessageResend, TransactionMessageAttemptsGet());
-
-							queue_operation(QUEUE_OPERATION_DEL,"","");   //// delete item
-							TransactionMessageResend = 1;
-						}
+						queue_operation(QUEUE_OPERATION_DEL,"","");
+						queueOpInfo.TransactionMessageResend = 0;
+						req_SendQueue = 0;
 					}
 				}
 			}
 
-			if(GetOcppConnStatus() == 0)
-			{
-				if(queueNotEmpty == TRUE)
-				{
-					OfflineTransaction = 1;  // 0: no offline Transaction      1: offline Transaction
-				}
-			}
-
 			// Refresh queue timer
 			refreshStartTimer(&startTime.startTimeQueue);
 			if((counterQueueSent >= 10) || (queueNotEmpty == FALSE))
@@ -976,7 +930,7 @@ void* processTransactionQueue(void* data)
 		usleep(500000);
 	}
 
-	pthread_exit(NULL); //
+	pthread_exit(NULL);
 	return 0;
 }
 
@@ -1035,7 +989,7 @@ void CheckTransactionPacket(char *uuid)
 		{
 			DEBUG_INFO("Receive queue response match.\n");
 			queue_operation(QUEUE_OPERATION_DEL,"","");//delq(); ---> remove temporally
-			TransactionMessageResend = 1;
+			queueOpInfo.TransactionMessageResend = 0;
 		}
 		else
 			DEBUG_INFO("Receive queue response mismatch.\n");
@@ -1048,9 +1002,9 @@ int queue_operation(int type, char *frontUUID, char *frontData)
 
 	while(1)
 	{
-		if (!IsUsing )
+		if (!queueOpInfo.IsUsing )
 		{
-			IsUsing = TRUE;
+			queueOpInfo.IsUsing = TRUE;
 
 			if(type == QUEUE_OPERATION_SHOWQUEUE)   				// show items in queue
 			{
@@ -1077,7 +1031,7 @@ int queue_operation(int type, char *frontUUID, char *frontData)
 				}
 			}
 
-			IsUsing = FALSE;
+			queueOpInfo.IsUsing = FALSE;
 			break;
 		}
 		usleep(100000);
@@ -1129,6 +1083,8 @@ int main(void)
 {
 	char rmFileCmd[100]={0};
 	struct stat stats;
+	queueOpInfo.IsUsing = FALSE;
+	queueOpInfo.TransactionMessageResend = 0;
 
 	DEBUG_INFO("Module_OcppBackend20 task initialization...\n");
 	//lws_set_log_level(LLL_PARSER | LLL_HEADER | LLL_ERR | LLL_WARN | LLL_NOTICE | LLL_INFO | LLL_DEBUG | LLL_EXT | LLL_CLIENT | LLL_LATENCY  , NULL);
@@ -1167,7 +1123,6 @@ int main(void)
 		refreshStartTimer(&startTime.startTimeDog);
 		counterLwsRestart = 0;
 		// Connect server
-
 		if(ConnectionEstablished==0) // Check InternetConn 0: disconnected, 1: connected
 		{
 			isWebsocketSendable = 1;
@@ -1199,21 +1154,23 @@ int main(void)
 			if(GetServerSign() == TRUE)
 			{
 				// Send message from queue
-				if((req_SendQueue == 1) && isWebsocketSendable)
+				if((req_SendQueue == 1) && (isWebsocketSendable || ((queueOpInfo.TransactionMessageResend > 1) && (queueOpInfo.PreTransactionMessageResend != queueOpInfo.TransactionMessageResend))))
 				{
 					queue_operation(QUEUE_OPERATION_SENT, "", "");
 					req_SendQueue = 0;
+					queueOpInfo.PreTransactionMessageResend = queueOpInfo.TransactionMessageResend;
 				}
 
 				// Check System Value
 				CheckSystemValue();
 
-				if(GetHeartBeatWithNOResponse() >= 3)
+				if(GetHeartBeatWithNOResponse() >= 30)
 				{
 					lws_context_destroy(context);
 					ConnectionEstablished = 0;
 					context = NULL;
 					SetHeartBeatWithNOResponse();
+					DEBUG_WARN("Heartbeat re-send over 30 count.\n");
 				}
 
 				if((changeChageWebSocketPingInterval == TRUE) || (GetOcppConnStatus() == 0))
@@ -1221,7 +1178,13 @@ int main(void)
 					if(getDiffSecNow(startTime.reConnect) >= 3)
 					{
 						DEBUG_INFO("GetOcppConnStatus() = %d\n", GetOcppConnStatus());
-						changeChageWebSocketPingInterval = FALSE;
+
+						if(changeChageWebSocketPingInterval)
+						{
+							DEBUG_INFO("Websocket ping interval changed request.\n");
+							changeChageWebSocketPingInterval = FALSE;
+						}
+
 						lws_context_destroy(context);
 						ConnectionEstablished = 0;
 						context = NULL;
@@ -1237,7 +1200,7 @@ int main(void)
 		do
 		{
 			lws_service(context, 0);//timeout_ms
-		}while((SendBufLen>0) && (context!=NULL) && GetInternetConn());
+		}while((SendBufLen>0) && (context!=NULL) && GetOcppConnStatus());
 
 		refreshProcDogTimer();
 		usleep(100000);

+ 9 - 0
EVSE/Modularization/ocpp20/Module_OcppBackend20.h

@@ -99,6 +99,15 @@ enum GUN_TYPE
 // Websocket TX/RX buffer size
 #define WEBSOCKET_BUFFER_SIZE          (1024*200)
 
+struct QueueOpInfo
+{
+	int TransactionMessageResend;  		// the number of retry to submit a transaction-related message when the Central System fails to process it.
+	int PreTransactionMessageResend;
+	int TransactionQueueNum;
+	int IsUsing;
+	int stopTransactionId;
+};
+
 struct yuarel {
 	char *scheme; /* scheme, without ":" and "//" */
 	char *username; /* username, default: NULL */

+ 4 - 4
EVSE/Modularization/ocpp20/SystemLogMessage.h

@@ -2,10 +2,10 @@
 #define SystemLogMessage_H
 
 #define SystemLogMessage
-#define DEBUG_INFO(format, args...) StoreLogMsg("[%s:%d][%s][Info] "format, (strrchr(__FILE__, '/') ? strrchr(__FILE__, '/') + 1 : __FILE__), __LINE__, __FUNCTION__, ##args)
-#define DEBUG_WARN(format, args...) StoreLogMsg("[%s:%d][%s][Warn] "format, (strrchr(__FILE__, '/') ? strrchr(__FILE__, '/') + 1 : __FILE__), __LINE__, __FUNCTION__, ##args)
-#define DEBUG_ERROR(format, args...) StoreLogMsg("[%s:%d][%s][Error] "format, (strrchr(__FILE__, '/') ? strrchr(__FILE__, '/') + 1 : __FILE__), __LINE__, __FUNCTION__, ##args)
-#define DEBUG_OCPPMESSAGE_INFO(format, args...) StoreOcppMsg("[%s:%d][%s][Info] "format, (strrchr(__FILE__, '/') ? strrchr(__FILE__, '/') + 1 : __FILE__), __LINE__, __FUNCTION__, ##args)
+#define DEBUG_INFO(format, args...) StoreLogMsg("[%s:%d][%s][Info] "format, (strrchr(__FILE__, '/') ? strrchr(__FILE__, '/') + 1 : (strrchr(__FILE__, '\\') ? strrchr(__FILE__, '\\') + 1 : __FILE__)), __LINE__, __FUNCTION__, ##args)
+#define DEBUG_WARN(format, args...) StoreLogMsg("[%s:%d][%s][Warn] "format, (strrchr(__FILE__, '/') ? strrchr(__FILE__, '/') + 1 : (strrchr(__FILE__, '\\') ? strrchr(__FILE__, '\\') + 1 : __FILE__)), __LINE__, __FUNCTION__, ##args)
+#define DEBUG_ERROR(format, args...) StoreLogMsg("[%s:%d][%s][Error] "format, (strrchr(__FILE__, '/') ? strrchr(__FILE__, '/') + 1 : (strrchr(__FILE__, '\\') ? strrchr(__FILE__, '\\') + 1 : __FILE__)), __LINE__, __FUNCTION__, ##args)
+#define DEBUG_OCPPMESSAGE_INFO(format, args...) StoreOcppMsg("[%s:%d][%s][Info] "format, (strrchr(__FILE__, '/') ? strrchr(__FILE__, '/') + 1 : (strrchr(__FILE__, '\\') ? strrchr(__FILE__, '\\') + 1 : __FILE__)), __LINE__, __FUNCTION__, ##args)
 
 int StoreLogMsg(const char *fmt, ...);
 int StoreOcppMsg(const char *fmt, ...);

+ 21 - 62
EVSE/Modularization/ocppfiles/Module_OcppBackend.c

@@ -245,26 +245,11 @@ static int OCPP16Callback(struct lws *wsi, enum lws_callback_reasons reason, voi
 		case LWS_CALLBACK_CLIENT_ESTABLISHED: //3
 			DEBUG_INFO("LWS_CALLBACK_CLIENT_ESTABLISHED\n");
 
-			char frontUUID[100] ={0};
-			char frontData[QUEUE_MESSAGE_LENGTH] ={0};
-			int queueNotEmpty = FALSE;
-
 			//connected
 			ConnectionEstablished=1;
 			SetOcppConnStatus(TRUE);
 
-			queueNotEmpty = queue_operation(QUEUE_OPERATION_SHOWFRONT,frontUUID, frontData);
-
-			if(queueNotEmpty == TRUE)
-			{
-				queueOpInfo.OfflineTransaction = 1; // 0: no packets in queue.     1: There are packets in queue.
-			}
-
-			queueOpInfo.TransactionMessageResend = 1;
-
-			//get offline number
-			queue_operation(QUEUE_OPERATION_SHOWQUEUE,"","");
-			queueOpInfo.OfflineTransactionQueueNum = queueOpInfo.TransactionQueueNum ;
+			queueOpInfo.TransactionMessageResend = 0;
 			break;
 		case LWS_CALLBACK_CLIENT_CONNECTION_ERROR://1
 			DEBUG_ERROR("LWS_CALLBACK_CLIENT_CONNECTION_ERROR %s\n", (char *)in );
@@ -361,6 +346,7 @@ static int OCPP16Callback(struct lws *wsi, enum lws_callback_reasons reason, voi
 		case LWS_CALLBACK_CLIENT_RECEIVE_PONG:
 			DEBUG_INFO("LWS_CALLBACK_CLIENT_RECEIVE_PONG\n");
 			DEBUG_OCPPMESSAGE_INFO("<===== Get PONG packet.\n");
+			isWebsocketSendable = 1;
 			break;
 		case LWS_CALLBACK_OPENSSL_PERFORM_SERVER_CERT_VERIFICATION:
 			DEBUG_INFO("LWS_CALLBACK_OPENSSL_PERFORM_SERVER_CERT_VERIFICATION\n");
@@ -712,10 +698,6 @@ int addq(char *uuid, char *data)
 	fputs("\n", outfile);
 	fclose (outfile);
 	queueOpInfo.TransactionQueueNum +=  1;
-	if(queueOpInfo.OfflineTransaction == 1)  // 0: no offline Transaction      1: offline Transaction
-	{
-		queueOpInfo.OfflineTransactionQueueNum += 1;
-	}
 	DEBUG_INFO("add queue end\n");
 	system("/bin/fsync -d /dev/mtdblock13;/bin/sync &");
 	return FALSE;
@@ -806,7 +788,7 @@ int delq()
 			if(i==0)
 			{
 				queueOpInfo.TransactionQueueNum -= 1;
-				queueOpInfo.TransactionMessageResend = 1;
+				queueOpInfo.TransactionMessageResend = 0;
 				DEBUG_INFO("delete the item\n");
 			}
 
@@ -1174,22 +1156,20 @@ int sentqueue(){
 void* processTransactionQueue(void* data)
 {
 	char frontUUID[100] ={0};
-	char frontData[QUEUE_MESSAGE_LENGTH/*1024*4*/] ={0};
+	char frontData[QUEUE_MESSAGE_LENGTH] ={0};
 	int queueNotEmpty = FALSE;
 
 	while(1)
 	{
-		if(!req_SendQueue && ((getDiffSecNow(startTime.startTimeQueue) > (TransactionMessageRetryIntervalGet()>10?TransactionMessageRetryIntervalGet():10)) || (isWebsocketSendable && isQueueSendable && (getDiffSecNow(startTime.startTimeQueue) >= ((counterQueueSent>=20)?5:0)))))
+		if(!req_SendQueue && ((getDiffSecNow(startTime.startTimeQueue) >= ((TransactionMessageRetryIntervalGet()>10?TransactionMessageRetryIntervalGet():10)*(queueOpInfo.TransactionMessageResend>1?2:1))) || (isWebsocketSendable && isQueueSendable && (getDiffSecNow(startTime.startTimeQueue) >= ((counterQueueSent>=20)?5:0)))))
 		{
 			if(FirstHeartBeatResponse() == 1)
 			{
 				memset(frontUUID, 0, ARRAY_SIZE(frontUUID));
 				memset(frontData, 0, ARRAY_SIZE(frontData));
-				queueNotEmpty = FALSE;
 
-				queueNotEmpty = queue_operation(QUEUE_OPERATION_SHOWFRONT,frontUUID, frontData);//showfront(frontUUID, frontData);    ---> remove temporally
-
-				if((queueNotEmpty == TRUE) && (GetOcppConnStatus() == 1)) //OcppConnStatus  0: disconnected, 1: connected
+				queueNotEmpty = queue_operation(QUEUE_OPERATION_SHOWFRONT,frontUUID, frontData);
+				if((queueNotEmpty == TRUE) && (GetOcppConnStatus() == 1))
 				{
 					if(isWebsocketSendable)
 						DEBUG_INFO("isWebsocketSendable on.\n");
@@ -1200,48 +1180,26 @@ void* processTransactionQueue(void* data)
 					if(((getDiffSecNow(startTime.startTimeQueue) > (TransactionMessageRetryIntervalGet()>10?TransactionMessageRetryIntervalGet():10))))
 						DEBUG_INFO("Queue timer(%d) over spec(%d).\n", getDiffSecNow(startTime.startTimeQueue), TransactionMessageRetryIntervalGet());
 
-					if((queueOpInfo.OfflineTransaction == 1) && (queueOpInfo.OfflineTransactionQueueNum != 0))  //OfflineTransaction   0: no offline Transaction     1: offline Transaction
+					if(queueOpInfo.TransactionMessageResend < TransactionMessageAttemptsGet())
 					{
-						DEBUG_INFO("Sent message from queue request off-line first.\n");
-						req_SendQueue 	= 1; // 0: no packets to send    1: send the top packet in queue
+						DEBUG_INFO("Sent message from queue request.\n");
+						DEBUG_INFO("TransactionMessageResend time: %d\n", queueOpInfo.TransactionMessageResend);
 
-						queueOpInfo.OfflineTransactionQueueNum -= 1;
+						req_SendQueue = 1;
 
-						if(queueOpInfo.OfflineTransactionQueueNum == 0)
-						{
-							queueOpInfo.OfflineTransaction = 0;
-						}
+						queueOpInfo.TransactionMessageResend += 1;
 					}
 					else
 					{
-						if(queueOpInfo.TransactionMessageResend <= TransactionMessageAttemptsGet()) //
-						{
-							DEBUG_INFO("Sent message from queue request.\n");
-							DEBUG_INFO("TransactionMessageResend = %d\n", queueOpInfo.TransactionMessageResend);
-
-							req_SendQueue = 1;
-
-							queueOpInfo.TransactionMessageResend += 1;
-						}
-						else
-						{
-							DEBUG_INFO("Transaction message resend(%d) over spec(%d) message abandon.\n", queueOpInfo.TransactionMessageResend, TransactionMessageAttemptsGet());
+						DEBUG_INFO("Transaction message resend(%d) over spec(%d) message abandon.\n", queueOpInfo.TransactionMessageResend, TransactionMessageAttemptsGet());
 
-							queue_operation(QUEUE_OPERATION_DEL,"","");   //// delete item
-							queueOpInfo.TransactionMessageResend = 1;
-						}
+						queue_operation(QUEUE_OPERATION_DEL,"","");
+						queueOpInfo.TransactionMessageResend = 0;
+						req_SendQueue = 0;
 					}
 				}
 			}
 
-			if(GetOcppConnStatus() == 0)
-			{
-				if(queueNotEmpty == TRUE)
-				{
-					queueOpInfo.OfflineTransaction = 1;  // 0: no offline Transaction      1: offline Transaction
-				}
-			}
-
 			// Refresh queue timer
 			refreshStartTimer(&startTime.startTimeQueue);
 			if((counterQueueSent >= 10) || (queueNotEmpty == FALSE))
@@ -1257,7 +1215,7 @@ void* processTransactionQueue(void* data)
 		usleep(500000);
 	}
 
-	pthread_exit(NULL); //
+	pthread_exit(NULL);
 	return 0;
 }
 
@@ -1316,7 +1274,7 @@ void CheckTransactionPacket(char *uuid)
 		{
 			DEBUG_INFO("Receive queue response match.\n");
 			queue_operation(QUEUE_OPERATION_DEL,"","");//delq(); ---> remove temporally
-			queueOpInfo.TransactionMessageResend = 1;
+			queueOpInfo.TransactionMessageResend = 0;
 		}
 		else
 			DEBUG_INFO("Receive queue response mismatch.\n");
@@ -1412,7 +1370,7 @@ int main(void)
 	char rmFileCmd[100]={0};
 	struct stat stats;
 	queueOpInfo.IsUsing = FALSE;
-	queueOpInfo.TransactionMessageResend = 1;
+	queueOpInfo.TransactionMessageResend = 0;
 
 	DEBUG_INFO("Module_OcppBackend task initialization...\n");
 	//lws_set_log_level(LLL_PARSER | LLL_HEADER | LLL_ERR | LLL_WARN | LLL_NOTICE | LLL_INFO | LLL_DEBUG | LLL_EXT | LLL_CLIENT | LLL_LATENCY  , NULL);
@@ -1540,10 +1498,11 @@ int main(void)
 			if(GetServerSign() == TRUE)
 			{
 				// Send message from queue
-				if((req_SendQueue == 1) && isWebsocketSendable)
+				if((req_SendQueue == 1) && (isWebsocketSendable || ((queueOpInfo.TransactionMessageResend > 1) && (queueOpInfo.PreTransactionMessageResend != queueOpInfo.TransactionMessageResend))))
 				{
 					queue_operation(QUEUE_OPERATION_SENT, "", "");
 					req_SendQueue = 0;
+					queueOpInfo.PreTransactionMessageResend = queueOpInfo.TransactionMessageResend;
 				}
 
 				// Check System Value

+ 1 - 2
EVSE/Modularization/ocppfiles/Module_OcppBackend.h

@@ -94,9 +94,8 @@ enum GUN_TYPE
 struct QueueOpInfo
 {
 	int TransactionMessageResend;  		// the number of retry to submit a transaction-related message when the Central System fails to process it.
+	int PreTransactionMessageResend;
 	int TransactionQueueNum;
-	int OfflineTransactionQueueNum;  	// Number of offline transactions
-	int OfflineTransaction;
 	int IsUsing;
 	int stopTransactionId;
 };

+ 5 - 5
EVSE/Modularization/ocppfiles/SystemLogMessage.h

@@ -2,11 +2,11 @@
 #define SystemLogMessage_H
 
 #define SystemLogMessage
-#define DEBUG_INFO(format, args...) StoreLogMsg("[%s:%d][%s][Info] "format, (strrchr(__FILE__, '/') ? strrchr(__FILE__, '/') + 1 : __FILE__), __LINE__, __FUNCTION__, ##args)
-#define DEBUG_WARN(format, args...) StoreLogMsg("[%s:%d][%s][Warn] "format, (strrchr(__FILE__, '/') ? strrchr(__FILE__, '/') + 1 : __FILE__), __LINE__, __FUNCTION__, ##args)
-#define DEBUG_ERROR(format, args...) StoreLogMsg("[%s:%d][%s][Error] "format, (strrchr(__FILE__, '/') ? strrchr(__FILE__, '/') + 1 : __FILE__), __LINE__, __FUNCTION__, ##args)
-#define DEBUG_OCPPMESSAGE_INFO(format, args...) StoreOcppMsg("[%s:%d][%s][Info] "format, (strrchr(__FILE__, '/') ? strrchr(__FILE__, '/') + 1 : __FILE__), __LINE__, __FUNCTION__, ##args)
-#define DEBUG_TTIA_INFO(format, args...) StoreTTIAMsg("[%s:%d][%s][Info] "format, (strrchr(__FILE__, '/') ? strrchr(__FILE__, '/') + 1 : __FILE__), __LINE__, __FUNCTION__, ##args)
+#define DEBUG_INFO(format, args...) StoreLogMsg("[%s:%d][%s][Info] "format, (strrchr(__FILE__, '/') ? strrchr(__FILE__, '/') + 1 : (strrchr(__FILE__, '\\') ? strrchr(__FILE__, '\\') + 1 : __FILE__)), __LINE__, __FUNCTION__, ##args)
+#define DEBUG_WARN(format, args...) StoreLogMsg("[%s:%d][%s][Warn] "format, (strrchr(__FILE__, '/') ? strrchr(__FILE__, '/') + 1 : (strrchr(__FILE__, '\\') ? strrchr(__FILE__, '\\') + 1 : __FILE__)), __LINE__, __FUNCTION__, ##args)
+#define DEBUG_ERROR(format, args...) StoreLogMsg("[%s:%d][%s][Error] "format, (strrchr(__FILE__, '/') ? strrchr(__FILE__, '/') + 1 : (strrchr(__FILE__, '\\') ? strrchr(__FILE__, '\\') + 1 : __FILE__)), __LINE__, __FUNCTION__, ##args)
+#define DEBUG_OCPPMESSAGE_INFO(format, args...) StoreOcppMsg("[%s:%d][%s][Info] "format, (strrchr(__FILE__, '/') ? strrchr(__FILE__, '/') + 1 : (strrchr(__FILE__, '\\') ? strrchr(__FILE__, '\\') + 1 : __FILE__)), __LINE__, __FUNCTION__, ##args)
+#define DEBUG_TTIA_INFO(format, args...) StoreTTIAMsg("[%s:%d][%s][Info] "format, (strrchr(__FILE__, '/') ? strrchr(__FILE__, '/') + 1 : (strrchr(__FILE__, '\\') ? strrchr(__FILE__, '\\') + 1 : __FILE__)), __LINE__, __FUNCTION__, ##args)
 
 int StoreLogMsg(const char *fmt, ...);
 int StoreOcppMsg(const char *fmt, ...);

+ 21 - 62
EVSE/Modularization/ocppph/Module_OcppBackend.c

@@ -245,26 +245,11 @@ static int OCPP16Callback(struct lws *wsi, enum lws_callback_reasons reason, voi
 		case LWS_CALLBACK_CLIENT_ESTABLISHED: //3
 			DEBUG_INFO("LWS_CALLBACK_CLIENT_ESTABLISHED\n");
 
-			char frontUUID[100] ={0};
-			char frontData[QUEUE_MESSAGE_LENGTH] ={0};
-			int queueNotEmpty = FALSE;
-
 			//connected
 			ConnectionEstablished=1;
 			SetOcppConnStatus(TRUE);
 
-			queueNotEmpty = queue_operation(QUEUE_OPERATION_SHOWFRONT,frontUUID, frontData);
-
-			if(queueNotEmpty == TRUE)
-			{
-				queueOpInfo.OfflineTransaction = 1; // 0: no packets in queue.     1: There are packets in queue.
-			}
-
-			queueOpInfo.TransactionMessageResend = 1;
-
-			//get offline number
-			queue_operation(QUEUE_OPERATION_SHOWQUEUE,"","");
-			queueOpInfo.OfflineTransactionQueueNum = queueOpInfo.TransactionQueueNum ;
+			queueOpInfo.TransactionMessageResend = 0;
 			break;
 		case LWS_CALLBACK_CLIENT_CONNECTION_ERROR://1
 			DEBUG_ERROR("LWS_CALLBACK_CLIENT_CONNECTION_ERROR %s\n", (char *)in );
@@ -361,6 +346,7 @@ static int OCPP16Callback(struct lws *wsi, enum lws_callback_reasons reason, voi
 		case LWS_CALLBACK_CLIENT_RECEIVE_PONG:
 			DEBUG_INFO("LWS_CALLBACK_CLIENT_RECEIVE_PONG\n");
 			DEBUG_OCPPMESSAGE_INFO("<===== Get PONG packet.\n");
+			isWebsocketSendable = 1;
 			break;
 		case LWS_CALLBACK_OPENSSL_PERFORM_SERVER_CERT_VERIFICATION:
 			DEBUG_INFO("LWS_CALLBACK_OPENSSL_PERFORM_SERVER_CERT_VERIFICATION\n");
@@ -713,10 +699,6 @@ int addq(char *uuid, char *data)
 	fputs("\n", outfile);
 	fclose (outfile);
 	queueOpInfo.TransactionQueueNum += 1;
-	if(queueOpInfo.OfflineTransaction == 1)  // 0: no offline Transaction      1: offline Transaction
-	{
-		queueOpInfo.OfflineTransactionQueueNum += 1;
-	}
 	DEBUG_INFO("add queue end\n");
 	system("/bin/fsync -d /dev/mtdblock13;/bin/sync &");
 	return FALSE;
@@ -807,7 +789,7 @@ int delq()
 			if(i==0)
 			{
 				queueOpInfo.TransactionQueueNum -= 1;
-				queueOpInfo.TransactionMessageResend = 1;
+				queueOpInfo.TransactionMessageResend = 0;
 				DEBUG_INFO("delete the item\n");
 			}
 
@@ -1175,22 +1157,20 @@ int sentqueue(){
 void* processTransactionQueue(void* data)
 {
 	char frontUUID[100] ={0};
-	char frontData[QUEUE_MESSAGE_LENGTH/*1024*4*/] ={0};
+	char frontData[QUEUE_MESSAGE_LENGTH] ={0};
 	int queueNotEmpty = FALSE;
 
 	while(1)
 	{
-		if(!req_SendQueue && ((getDiffSecNow(startTime.startTimeQueue) > (TransactionMessageRetryIntervalGet()>10?TransactionMessageRetryIntervalGet():10)) || (isWebsocketSendable && isQueueSendable && (getDiffSecNow(startTime.startTimeQueue) >= ((counterQueueSent>=20)?5:0)))))
+		if(!req_SendQueue && ((getDiffSecNow(startTime.startTimeQueue) >= ((TransactionMessageRetryIntervalGet()>10?TransactionMessageRetryIntervalGet():10)*(queueOpInfo.TransactionMessageResend>1?2:1))) || (isWebsocketSendable && isQueueSendable && (getDiffSecNow(startTime.startTimeQueue) >= ((counterQueueSent>=20)?5:0)))))
 		{
 			if(FirstHeartBeatResponse() == 1)
 			{
 				memset(frontUUID, 0, ARRAY_SIZE(frontUUID));
 				memset(frontData, 0, ARRAY_SIZE(frontData));
-				queueNotEmpty = FALSE;
 
-				queueNotEmpty = queue_operation(QUEUE_OPERATION_SHOWFRONT,frontUUID, frontData);//showfront(frontUUID, frontData);    ---> remove temporally
-
-				if((queueNotEmpty == TRUE) && (GetOcppConnStatus() == 1)) //OcppConnStatus  0: disconnected, 1: connected
+				queueNotEmpty = queue_operation(QUEUE_OPERATION_SHOWFRONT,frontUUID, frontData);
+				if((queueNotEmpty == TRUE) && (GetOcppConnStatus() == 1))
 				{
 					if(isWebsocketSendable)
 						DEBUG_INFO("isWebsocketSendable on.\n");
@@ -1201,48 +1181,26 @@ void* processTransactionQueue(void* data)
 					if(((getDiffSecNow(startTime.startTimeQueue) > (TransactionMessageRetryIntervalGet()>10?TransactionMessageRetryIntervalGet():10))))
 						DEBUG_INFO("Queue timer(%d) over spec(%d).\n", getDiffSecNow(startTime.startTimeQueue), TransactionMessageRetryIntervalGet());
 
-					if((queueOpInfo.OfflineTransaction == 1) && (queueOpInfo.OfflineTransactionQueueNum != 0))  //OfflineTransaction   0: no offline Transaction     1: offline Transaction
+					if(queueOpInfo.TransactionMessageResend < TransactionMessageAttemptsGet())
 					{
-						DEBUG_INFO("Sent message from queue request off-line first.\n");
-						req_SendQueue 	= 1; // 0: no packets to send    1: send the top packet in queue
+						DEBUG_INFO("Sent message from queue request.\n");
+						DEBUG_INFO("TransactionMessageResend time: %d\n", queueOpInfo.TransactionMessageResend);
 
-						queueOpInfo.OfflineTransactionQueueNum -= 1;
+						req_SendQueue = 1;
 
-						if(queueOpInfo.OfflineTransactionQueueNum == 0)
-						{
-							queueOpInfo.OfflineTransaction = 0;
-						}
+						queueOpInfo.TransactionMessageResend += 1;
 					}
 					else
 					{
-						if(queueOpInfo.TransactionMessageResend <= TransactionMessageAttemptsGet()) //
-						{
-							DEBUG_INFO("Sent message from queue request.\n");
-							DEBUG_INFO("TransactionMessageResend = %d\n", queueOpInfo.TransactionMessageResend);
-
-							req_SendQueue = 1;
-
-							queueOpInfo.TransactionMessageResend += 1;
-						}
-						else
-						{
-							DEBUG_INFO("Transaction message resend(%d) over spec(%d) message abandon.\n", queueOpInfo.TransactionMessageResend, TransactionMessageAttemptsGet());
+						DEBUG_INFO("Transaction message resend(%d) over spec(%d) message abandon.\n", queueOpInfo.TransactionMessageResend, TransactionMessageAttemptsGet());
 
-							queue_operation(QUEUE_OPERATION_DEL,"","");   //// delete item
-							queueOpInfo.TransactionMessageResend = 1;
-						}
+						queue_operation(QUEUE_OPERATION_DEL,"","");
+						queueOpInfo.TransactionMessageResend = 0;
+						req_SendQueue = 0;
 					}
 				}
 			}
 
-			if(GetOcppConnStatus() == 0)
-			{
-				if(queueNotEmpty == TRUE)
-				{
-					queueOpInfo.OfflineTransaction = 1;  // 0: no offline Transaction      1: offline Transaction
-				}
-			}
-
 			// Refresh queue timer
 			refreshStartTimer(&startTime.startTimeQueue);
 			if((counterQueueSent >= 10) || (queueNotEmpty == FALSE))
@@ -1258,7 +1216,7 @@ void* processTransactionQueue(void* data)
 		usleep(500000);
 	}
 
-	pthread_exit(NULL); //
+	pthread_exit(NULL);
 	return 0;
 }
 
@@ -1317,7 +1275,7 @@ void CheckTransactionPacket(char *uuid)
 		{
 			DEBUG_INFO("Receive queue response match.\n");
 			queue_operation(QUEUE_OPERATION_DEL,"","");//delq(); ---> remove temporally
-			queueOpInfo.TransactionMessageResend = 1;
+			queueOpInfo.TransactionMessageResend = 0;
 		}
 		else
 			DEBUG_INFO("Receive queue response mismatch.\n");
@@ -1413,7 +1371,7 @@ int main(void)
 	char rmFileCmd[100]={0};
 	struct stat stats;
 	queueOpInfo.IsUsing = FALSE;
-	queueOpInfo.TransactionMessageResend = 1;
+	queueOpInfo.TransactionMessageResend = 0;
 
 	DEBUG_INFO("Module_OcppBackend task initialization...\n");
 	//lws_set_log_level(LLL_PARSER | LLL_HEADER | LLL_ERR | LLL_WARN | LLL_NOTICE | LLL_INFO | LLL_DEBUG | LLL_EXT | LLL_CLIENT | LLL_LATENCY  , NULL);
@@ -1541,10 +1499,11 @@ int main(void)
 			if(GetServerSign() == TRUE)
 			{
 				// Send message from queue
-				if((req_SendQueue == 1) && isWebsocketSendable)
+				if((req_SendQueue == 1) && (isWebsocketSendable || ((queueOpInfo.TransactionMessageResend > 1) && (queueOpInfo.PreTransactionMessageResend != queueOpInfo.TransactionMessageResend))))
 				{
 					queue_operation(QUEUE_OPERATION_SENT, "", "");
 					req_SendQueue = 0;
+					queueOpInfo.PreTransactionMessageResend = queueOpInfo.TransactionMessageResend;
 				}
 
 				// Check System Value

+ 1 - 2
EVSE/Modularization/ocppph/Module_OcppBackend.h

@@ -94,9 +94,8 @@ enum GUN_TYPE
 struct QueueOpInfo
 {
 	int TransactionMessageResend;           // the number of retry to submit a transaction-related message when the
+	int PreTransactionMessageResend;
 	int TransactionQueueNum;
-	int OfflineTransactionQueueNum;         // Number of offline transactions
-	int OfflineTransaction;
 	int IsUsing;
 	int stopTransactionId;
 };

+ 4 - 4
EVSE/Modularization/ocppph/SystemLogMessage.h

@@ -2,10 +2,10 @@
 #define SystemLogMessage_H
 
 #define SystemLogMessage
-#define DEBUG_INFO(format, args...) StoreLogMsg("[%s:%d][%s][Info] "format, (strrchr(__FILE__, '/') ? strrchr(__FILE__, '/') + 1 : __FILE__), __LINE__, __FUNCTION__, ##args)
-#define DEBUG_WARN(format, args...) StoreLogMsg("[%s:%d][%s][Warn] "format, (strrchr(__FILE__, '/') ? strrchr(__FILE__, '/') + 1 : __FILE__), __LINE__, __FUNCTION__, ##args)
-#define DEBUG_ERROR(format, args...) StoreLogMsg("[%s:%d][%s][Error] "format, (strrchr(__FILE__, '/') ? strrchr(__FILE__, '/') + 1 : __FILE__), __LINE__, __FUNCTION__, ##args)
-#define DEBUG_OCPPMESSAGE_INFO(format, args...) StoreOcppMsg("[%s:%d][%s][Info] "format, (strrchr(__FILE__, '/') ? strrchr(__FILE__, '/') + 1 : __FILE__), __LINE__, __FUNCTION__, ##args)
+#define DEBUG_INFO(format, args...) StoreLogMsg("[%s:%d][%s][Info] "format, (strrchr(__FILE__, '/') ? strrchr(__FILE__, '/') + 1 : (strrchr(__FILE__, '\\') ? strrchr(__FILE__, '\\') + 1 : __FILE__)), __LINE__, __FUNCTION__, ##args)
+#define DEBUG_WARN(format, args...) StoreLogMsg("[%s:%d][%s][Warn] "format, (strrchr(__FILE__, '/') ? strrchr(__FILE__, '/') + 1 : (strrchr(__FILE__, '\\') ? strrchr(__FILE__, '\\') + 1 : __FILE__)), __LINE__, __FUNCTION__, ##args)
+#define DEBUG_ERROR(format, args...) StoreLogMsg("[%s:%d][%s][Error] "format, (strrchr(__FILE__, '/') ? strrchr(__FILE__, '/') + 1 : (strrchr(__FILE__, '\\') ? strrchr(__FILE__, '\\') + 1 : __FILE__)), __LINE__, __FUNCTION__, ##args)
+#define DEBUG_OCPPMESSAGE_INFO(format, args...) StoreOcppMsg("[%s:%d][%s][Info] "format, (strrchr(__FILE__, '/') ? strrchr(__FILE__, '/') + 1 : (strrchr(__FILE__, '\\') ? strrchr(__FILE__, '\\') + 1 : __FILE__)), __LINE__, __FUNCTION__, ##args)
 
 int StoreLogMsg(const char *fmt, ...);
 int StoreOcppMsg(const char *fmt, ...);

+ 4 - 4
EVSE/Projects/AX80/Apps/CCS/SystemLogMessage.h

@@ -15,9 +15,9 @@
 
 // Normal debug Message
 #ifdef SAVE_SYS_LOG_MSG_EVCOMM
-	#define DEBUG_INFO(format, args...) StoreLogMsg("[%s:%d][%s][Info] "format, (strrchr(__FILE__, '/') ? strrchr(__FILE__, '/') + 1 : __FILE__), __LINE__, __FUNCTION__, ##args)
-	#define DEBUG_WARN(format, args...) StoreLogMsg("[%s:%d][%s][Warn] "format, (strrchr(__FILE__, '/') ? strrchr(__FILE__, '/') + 1 : __FILE__), __LINE__, __FUNCTION__, ##args)
-	#define DEBUG_ERROR(format, args...) StoreLogMsg("[%s:%d][%s][Error] "format, (strrchr(__FILE__, '/') ? strrchr(__FILE__, '/') + 1 : __FILE__), __LINE__, __FUNCTION__, ##args)
+	#define DEBUG_INFO(format, args...) StoreLogMsg("[%s:%d][%s][Info] "format, (strrchr(__FILE__, '/') ? strrchr(__FILE__, '/') + 1 : (strrchr(__FILE__, '\\') ? strrchr(__FILE__, '\\') + 1 : __FILE__)), __LINE__, __FUNCTION__, ##args)
+	#define DEBUG_WARN(format, args...) StoreLogMsg("[%s:%d][%s][Warn] "format, (strrchr(__FILE__, '/') ? strrchr(__FILE__, '/') + 1 : (strrchr(__FILE__, '\\') ? strrchr(__FILE__, '\\') + 1 : __FILE__)), __LINE__, __FUNCTION__, ##args)
+	#define DEBUG_ERROR(format, args...) StoreLogMsg("[%s:%d][%s][Error] "format, (strrchr(__FILE__, '/') ? strrchr(__FILE__, '/') + 1 : (strrchr(__FILE__, '\\') ? strrchr(__FILE__, '\\') + 1 : __FILE__)), __LINE__, __FUNCTION__, ##args)
 #else
     #define DEBUG_INFO(...)
 	#define DEBUG_WARN(...)
@@ -26,7 +26,7 @@
 
 // Detail debug Message, will effect SLAC if enable
 #ifdef DEBUG_PRINTF_EVCOMM_DETAIL_SHOW
-	#define DEBUG_PRINTF_EVCOMM_DETAIL(format, args...) StoreLogMsg("[%s:%d][%s][Detail] "format, (strrchr(__FILE__, '/') ? strrchr(__FILE__, '/') + 1 : __FILE__), __LINE__, __FUNCTION__, ##args)
+	#define DEBUG_PRINTF_EVCOMM_DETAIL(format, args...) StoreLogMsg("[%s:%d][%s][Detail] "format, (strrchr(__FILE__, '/') ? strrchr(__FILE__, '/') + 1 : (strrchr(__FILE__, '\\') ? strrchr(__FILE__, '\\') + 1 : __FILE__)), __LINE__, __FUNCTION__, ##args)
 #else
 	#define DEBUG_PRINTF_EVCOMM_DETAIL(...)
 #endif

+ 3 - 3
EVSE/Projects/AX80/Apps/LCM/lcmComm_dgus.h

@@ -39,9 +39,9 @@
 #include	<ctype.h>
 #include 	<ifaddrs.h>
 
-#define DEBUG_INFO(format, args...) StoreLogMsg("[%s:%d][%s][Info] "format, (strrchr(__FILE__, '/') ? strrchr(__FILE__, '/') + 1 : __FILE__), __LINE__, __FUNCTION__, ##args)
-#define DEBUG_WARN(format, args...) StoreLogMsg("[%s:%d][%s][Warn] "format, (strrchr(__FILE__, '/') ? strrchr(__FILE__, '/') + 1 : __FILE__), __LINE__, __FUNCTION__, ##args)
-#define DEBUG_ERROR(format, args...) StoreLogMsg("[%s:%d][%s][Error] "format, (strrchr(__FILE__, '/') ? strrchr(__FILE__, '/') + 1 : __FILE__), __LINE__, __FUNCTION__, ##args)
+#define DEBUG_INFO(format, args...) StoreLogMsg("[%s:%d][%s][Info] "format, (strrchr(__FILE__, '/') ? strrchr(__FILE__, '/') + 1 : (strrchr(__FILE__, '\\') ? strrchr(__FILE__, '\\') + 1 : __FILE__)), __LINE__, __FUNCTION__, ##args)
+#define DEBUG_WARN(format, args...) StoreLogMsg("[%s:%d][%s][Warn] "format, (strrchr(__FILE__, '/') ? strrchr(__FILE__, '/') + 1 : (strrchr(__FILE__, '\\') ? strrchr(__FILE__, '\\') + 1 : __FILE__)), __LINE__, __FUNCTION__, ##args)
+#define DEBUG_ERROR(format, args...) StoreLogMsg("[%s:%d][%s][Error] "format, (strrchr(__FILE__, '/') ? strrchr(__FILE__, '/') + 1 : (strrchr(__FILE__, '\\') ? strrchr(__FILE__, '\\') + 1 : __FILE__)), __LINE__, __FUNCTION__, ##args)
 
 #define ARRAY_SIZE(A)			(sizeof(A) / sizeof(A[0]))
 #define PASS					1

+ 4 - 4
EVSE/Projects/AX80/Apps/Module_AlarmDetect.c

@@ -29,9 +29,9 @@
 
 #define FILTER_SPEC			2
 
-#define DEBUG_INFO(format, args...) StoreLogMsg("[%s:%d][%s][Info] "format, (strrchr(__FILE__, '/') ? strrchr(__FILE__, '/') + 1 : __FILE__), __LINE__, __FUNCTION__, ##args)
-#define DEBUG_WARN(format, args...) StoreLogMsg("[%s:%d][%s][Warn] "format, (strrchr(__FILE__, '/') ? strrchr(__FILE__, '/') + 1 : __FILE__), __LINE__, __FUNCTION__, ##args)
-#define DEBUG_ERROR(format, args...) StoreLogMsg("[%s:%d][%s][Error] "format, (strrchr(__FILE__, '/') ? strrchr(__FILE__, '/') + 1 : __FILE__), __LINE__, __FUNCTION__, ##args)
+#define DEBUG_INFO(format, args...) StoreLogMsg("[%s:%d][%s][Info] "format, (strrchr(__FILE__, '/') ? strrchr(__FILE__, '/') + 1 : (strrchr(__FILE__, '\\') ? strrchr(__FILE__, '\\') + 1 : __FILE__)), __LINE__, __FUNCTION__, ##args)
+#define DEBUG_WARN(format, args...) StoreLogMsg("[%s:%d][%s][Warn] "format, (strrchr(__FILE__, '/') ? strrchr(__FILE__, '/') + 1 : (strrchr(__FILE__, '\\') ? strrchr(__FILE__, '\\') + 1 : __FILE__)), __LINE__, __FUNCTION__, ##args)
+#define DEBUG_ERROR(format, args...) StoreLogMsg("[%s:%d][%s][Error] "format, (strrchr(__FILE__, '/') ? strrchr(__FILE__, '/') + 1 : (strrchr(__FILE__, '\\') ? strrchr(__FILE__, '\\') + 1 : __FILE__)), __LINE__, __FUNCTION__, ##args)
 
 #define Debug
 #define ARRAY_SIZE(A)		(sizeof(A) / sizeof(A[0]))
@@ -63,7 +63,7 @@ struct{
 	unsigned short int	Relay_DrivingFault;
 	unsigned short int	CP_LevelFail;
 	unsigned short int	MCU_SelfTestFail;
-}Alarm_Counter[2];
+}Alarm_Counter[3];
 
 void trim(char *s);
 void substr(char *dest, const char* src, unsigned int start, unsigned int cnt);

+ 6 - 6
EVSE/Projects/AX80/Apps/Module_Cabinet.h

@@ -45,12 +45,12 @@
 #include	"define.h"
 #include 	"main.h"
 
-#define DEBUG_SERVER_INFO(format, args...) StoreLogMsgServer("[%s:%d][%s][Info] "format, (strrchr(__FILE__, '/') ? strrchr(__FILE__, '/') + 1 : __FILE__), __LINE__, __FUNCTION__, ##args)
-#define DEBUG_SERVER_WARN(format, args...) StoreLogMsgServer("[%s:%d][%s][Warn] "format, (strrchr(__FILE__, '/') ? strrchr(__FILE__, '/') + 1 : __FILE__), __LINE__, __FUNCTION__, ##args)
-#define DEBUG_SERVER_ERROR(format, args...) StoreLogMsgServer("[%s:%d][%s][Error] "format, (strrchr(__FILE__, '/') ? strrchr(__FILE__, '/') + 1 : __FILE__), __LINE__, __FUNCTION__, ##args)
-#define DEBUG_CLIENT_INFO(format, args...) StoreLogMsgCient("[%s:%d][%s][Info] "format, (strrchr(__FILE__, '/') ? strrchr(__FILE__, '/') + 1 : __FILE__), __LINE__, __FUNCTION__, ##args)
-#define DEBUG_CLIENT_WARN(format, args...) StoreLogMsgCient("[%s:%d][%s][Warn] "format, (strrchr(__FILE__, '/') ? strrchr(__FILE__, '/') + 1 : __FILE__), __LINE__, __FUNCTION__, ##args)
-#define DEBUG_CLIENT_ERROR(format, args...) StoreLogMsgCient("[%s:%d][%s][Error] "format, (strrchr(__FILE__, '/') ? strrchr(__FILE__, '/') + 1 : __FILE__), __LINE__, __FUNCTION__, ##args)
+#define DEBUG_SERVER_INFO(format, args...) StoreLogMsgServer("[%s:%d][%s][Info] "format, (strrchr(__FILE__, '/') ? strrchr(__FILE__, '/') + 1 : (strrchr(__FILE__, '\\') ? strrchr(__FILE__, '\\') + 1 : __FILE__)), __LINE__, __FUNCTION__, ##args)
+#define DEBUG_SERVER_WARN(format, args...) StoreLogMsgServer("[%s:%d][%s][Warn] "format, (strrchr(__FILE__, '/') ? strrchr(__FILE__, '/') + 1 : (strrchr(__FILE__, '\\') ? strrchr(__FILE__, '\\') + 1 : __FILE__)), __LINE__, __FUNCTION__, ##args)
+#define DEBUG_SERVER_ERROR(format, args...) StoreLogMsgServer("[%s:%d][%s][Error] "format, (strrchr(__FILE__, '/') ? strrchr(__FILE__, '/') + 1 : (strrchr(__FILE__, '\\') ? strrchr(__FILE__, '\\') + 1 : __FILE__)), __LINE__, __FUNCTION__, ##args)
+#define DEBUG_CLIENT_INFO(format, args...) StoreLogMsgCient("[%s:%d][%s][Info] "format, (strrchr(__FILE__, '/') ? strrchr(__FILE__, '/') + 1 : (strrchr(__FILE__, '\\') ? strrchr(__FILE__, '\\') + 1 : __FILE__)), __LINE__, __FUNCTION__, ##args)
+#define DEBUG_CLIENT_WARN(format, args...) StoreLogMsgCient("[%s:%d][%s][Warn] "format, (strrchr(__FILE__, '/') ? strrchr(__FILE__, '/') + 1 : (strrchr(__FILE__, '\\') ? strrchr(__FILE__, '\\') + 1 : __FILE__)), __LINE__, __FUNCTION__, ##args)
+#define DEBUG_CLIENT_ERROR(format, args...) StoreLogMsgCient("[%s:%d][%s][Error] "format, (strrchr(__FILE__, '/') ? strrchr(__FILE__, '/') + 1 : (strrchr(__FILE__, '\\') ? strrchr(__FILE__, '\\') + 1 : __FILE__)), __LINE__, __FUNCTION__, ##args)
 
 extern int StoreLogMsg(const char *fmt, ...);
 

+ 3 - 3
EVSE/Projects/AX80/Apps/Module_Dispenser.h

@@ -46,9 +46,9 @@
 #include	"define.h"
 #include 	"main.h"
 
-#define DEBUG_INFO(format, args...) StoreLogMsg("[%s:%d][%s][Info] "format, (strrchr(__FILE__, '/') ? strrchr(__FILE__, '/') + 1 : __FILE__), __LINE__, __FUNCTION__, ##args)
-#define DEBUG_WARN(format, args...) StoreLogMsg("[%s:%d][%s][Warn] "format, (strrchr(__FILE__, '/') ? strrchr(__FILE__, '/') + 1 : __FILE__), __LINE__, __FUNCTION__, ##args)
-#define DEBUG_ERROR(format, args...) StoreLogMsg("[%s:%d][%s][Error] "format, (strrchr(__FILE__, '/') ? strrchr(__FILE__, '/') + 1 : __FILE__), __LINE__, __FUNCTION__, ##args)
+#define DEBUG_INFO(format, args...) StoreLogMsg("[%s:%d][%s][Info] "format, (strrchr(__FILE__, '/') ? strrchr(__FILE__, '/') + 1 : (strrchr(__FILE__, '\\') ? strrchr(__FILE__, '\\') + 1 : __FILE__)), __LINE__, __FUNCTION__, ##args)
+#define DEBUG_WARN(format, args...) StoreLogMsg("[%s:%d][%s][Warn] "format, (strrchr(__FILE__, '/') ? strrchr(__FILE__, '/') + 1 : (strrchr(__FILE__, '\\') ? strrchr(__FILE__, '\\') + 1 : __FILE__)), __LINE__, __FUNCTION__, ##args)
+#define DEBUG_ERROR(format, args...) StoreLogMsg("[%s:%d][%s][Error] "format, (strrchr(__FILE__, '/') ? strrchr(__FILE__, '/') + 1 : (strrchr(__FILE__, '\\') ? strrchr(__FILE__, '\\') + 1 : __FILE__)), __LINE__, __FUNCTION__, ##args)
 
 extern int StoreLogMsg(const char *fmt, ...);
 

+ 3 - 3
EVSE/Projects/AX80/Apps/Module_InternalComm.h

@@ -6,9 +6,9 @@
 #ifndef MODULE_INTERNALCOMM_H_
 #define MODULE_INTERNALCOMM_H_
 
-#define DEBUG_INFO(format, args...) StoreLogMsg("[%s:%d][%s][Info] "format, (strrchr(__FILE__, '/') ? strrchr(__FILE__, '/') + 1 : __FILE__), __LINE__, __FUNCTION__, ##args)
-#define DEBUG_WARN(format, args...) StoreLogMsg("[%s:%d][%s][Warn] "format, (strrchr(__FILE__, '/') ? strrchr(__FILE__, '/') + 1 : __FILE__), __LINE__, __FUNCTION__, ##args)
-#define DEBUG_ERROR(format, args...) StoreLogMsg("[%s:%d][%s][Error] "format, (strrchr(__FILE__, '/') ? strrchr(__FILE__, '/') + 1 : __FILE__), __LINE__, __FUNCTION__, ##args)
+#define DEBUG_INFO(format, args...) StoreLogMsg("[%s:%d][%s][Info] "format, (strrchr(__FILE__, '/') ? strrchr(__FILE__, '/') + 1 : (strrchr(__FILE__, '\\') ? strrchr(__FILE__, '\\') + 1 : __FILE__)), __LINE__, __FUNCTION__, ##args)
+#define DEBUG_WARN(format, args...) StoreLogMsg("[%s:%d][%s][Warn] "format, (strrchr(__FILE__, '/') ? strrchr(__FILE__, '/') + 1 : (strrchr(__FILE__, '\\') ? strrchr(__FILE__, '\\') + 1 : __FILE__)), __LINE__, __FUNCTION__, ##args)
+#define DEBUG_ERROR(format, args...) StoreLogMsg("[%s:%d][%s][Error] "format, (strrchr(__FILE__, '/') ? strrchr(__FILE__, '/') + 1 : (strrchr(__FILE__, '\\') ? strrchr(__FILE__, '\\') + 1 : __FILE__)), __LINE__, __FUNCTION__, ##args)
 
 extern int StoreLogMsg(const char *fmt, ...);
 

+ 4 - 4
EVSE/Projects/AX80/Apps/Module_Speaker.c

@@ -36,10 +36,10 @@
 #include	"define.h"
 #include	"main.h"
 
-#define DEBUG_INFO(format, args...) StoreLogMsg("[%s:%d][%s][Info] "format, (strrchr(__FILE__, '/') ? strrchr(__FILE__, '/') + 1 : __FILE__), __LINE__, __FUNCTION__, ##args)
-#define DEBUG_WARN(format, args...) StoreLogMsg("[%s:%d][%s][Warn] "format, (strrchr(__FILE__, '/') ? strrchr(__FILE__, '/') + 1 : __FILE__), __LINE__, __FUNCTION__, ##args)
-#define DEBUG_ERROR(format, args...) StoreLogMsg("[%s:%d][%s][Error] "format, (strrchr(__FILE__, '/') ? strrchr(__FILE__, '/') + 1 : __FILE__), __LINE__, __FUNCTION__, ##args)
-#define EVENT_INFO(format, args...) StoreEventLogMsg("[%s:%d][%s][Info] "format, (strrchr(__FILE__, '/') ? strrchr(__FILE__, '/') + 1 : __FILE__), __LINE__, __FUNCTION__, ##args)
+#define DEBUG_INFO(format, args...) StoreLogMsg("[%s:%d][%s][Info] "format, (strrchr(__FILE__, '/') ? strrchr(__FILE__, '/') + 1 : (strrchr(__FILE__, '\\') ? strrchr(__FILE__, '\\') + 1 : __FILE__)), __LINE__, __FUNCTION__, ##args)
+#define DEBUG_WARN(format, args...) StoreLogMsg("[%s:%d][%s][Warn] "format, (strrchr(__FILE__, '/') ? strrchr(__FILE__, '/') + 1 : (strrchr(__FILE__, '\\') ? strrchr(__FILE__, '\\') + 1 : __FILE__)), __LINE__, __FUNCTION__, ##args)
+#define DEBUG_ERROR(format, args...) StoreLogMsg("[%s:%d][%s][Error] "format, (strrchr(__FILE__, '/') ? strrchr(__FILE__, '/') + 1 : (strrchr(__FILE__, '\\') ? strrchr(__FILE__, '\\') + 1 : __FILE__)), __LINE__, __FUNCTION__, ##args)
+#define EVENT_INFO(format, args...) StoreEventLogMsg("[%s:%d][%s][Info] "format, (strrchr(__FILE__, '/') ? strrchr(__FILE__, '/') + 1 : (strrchr(__FILE__, '\\') ? strrchr(__FILE__, '\\') + 1 : __FILE__)), __LINE__, __FUNCTION__, ##args)
 
 #define Debug
 #define ARRAY_SIZE(A)		(sizeof(A) / sizeof(A[0]))

+ 116 - 102
EVSE/Projects/AX80/Apps/main.c

@@ -2357,42 +2357,13 @@ void InitEthernet()
 	{
 		for(;;)
 		{
-			if(isRouteFail())
+			if(ShmDispenser->gun_info.primaryMcuState.rotatory_switch != ROTARY_SWITCH_E_DISPENSER)
 			{
-				//DEBUG_ERROR("eth0 not in route, restart eth0.\n");
-				system("/sbin/ifconfig eth0 down;/sbin/ifconfig eth0 up");
-
-				if((ShmSysConfigAndInfo->SysConfig.Eth0Interface.EthDhcpClient==0))
-				{
-					system("pgrep -f \"udhcpc -i eth0\" | xargs kill");
-					sprintf(tmpbuf, "/sbin/udhcpc -i eth0 -x hostname:CSU3_%s -s /root/dhcp_script/eth0.script > /dev/null &", ShmSysConfigAndInfo->SysConfig.SystemId);
-					system(tmpbuf);
-				}
-				else
+				if(isRouteFail())
 				{
-					system("pgrep -f \"udhcpc -i eth0\" | xargs kill");
-					memset(tmpbuf,0,256);
-					sprintf(tmpbuf,"/sbin/ifconfig eth0 %s netmask %s up &",
-							ShmSysConfigAndInfo->SysConfig.Eth0Interface.EthIpAddress,
-							ShmSysConfigAndInfo->SysConfig.Eth0Interface.EthSubmaskAddress);
-					system(tmpbuf);
-					memset(tmpbuf,0,256);
-					sprintf(tmpbuf,"route add default gw %s eth0 &",
-					ShmSysConfigAndInfo->SysConfig.Eth0Interface.EthGatewayAddress);
-					system(tmpbuf);
-				}
-			}
+					//DEBUG_ERROR("eth0 not in route, restart eth0.\n");
+					system("/sbin/ifconfig eth0 down;/sbin/ifconfig eth0 up");
 
-			if(isReachableInternet() == PASS)
-			{
-				ShmStatusCodeData->InfoCode.InfoEvents.bits.InternetDisconnectViaEthernet=OFF;
-				cnt_pingDNS_Fail = 0;
-			}
-			else
-			{
-				if(cnt_pingDNS_Fail >= 3)
-				{
-					ShmStatusCodeData->InfoCode.InfoEvents.bits.InternetDisconnectViaEthernet=ON;
 					if((ShmSysConfigAndInfo->SysConfig.Eth0Interface.EthDhcpClient==0))
 					{
 						system("pgrep -f \"udhcpc -i eth0\" | xargs kill");
@@ -2412,111 +2383,154 @@ void InitEthernet()
 						ShmSysConfigAndInfo->SysConfig.Eth0Interface.EthGatewayAddress);
 						system(tmpbuf);
 					}
+				}
+
+				if(isReachableInternet() == PASS)
+				{
+					ShmStatusCodeData->InfoCode.InfoEvents.bits.InternetDisconnectViaEthernet=OFF;
 					cnt_pingDNS_Fail = 0;
 				}
 				else
 				{
-					cnt_pingDNS_Fail++;
+					if(cnt_pingDNS_Fail >= 3)
+					{
+						ShmStatusCodeData->InfoCode.InfoEvents.bits.InternetDisconnectViaEthernet=ON;
+						if((ShmSysConfigAndInfo->SysConfig.Eth0Interface.EthDhcpClient==0))
+						{
+							system("pgrep -f \"udhcpc -i eth0\" | xargs kill");
+							sprintf(tmpbuf, "/sbin/udhcpc -i eth0 -x hostname:CSU3_%s -s /root/dhcp_script/eth0.script > /dev/null &", ShmSysConfigAndInfo->SysConfig.SystemId);
+							system(tmpbuf);
+						}
+						else
+						{
+							system("pgrep -f \"udhcpc -i eth0\" | xargs kill");
+							memset(tmpbuf,0,256);
+							sprintf(tmpbuf,"/sbin/ifconfig eth0 %s netmask %s up &",
+									ShmSysConfigAndInfo->SysConfig.Eth0Interface.EthIpAddress,
+									ShmSysConfigAndInfo->SysConfig.Eth0Interface.EthSubmaskAddress);
+							system(tmpbuf);
+							memset(tmpbuf,0,256);
+							sprintf(tmpbuf,"route add default gw %s eth0 &",
+							ShmSysConfigAndInfo->SysConfig.Eth0Interface.EthGatewayAddress);
+							system(tmpbuf);
+						}
+						cnt_pingDNS_Fail = 0;
+					}
+					else
+					{
+						cnt_pingDNS_Fail++;
+					}
 				}
-			}
-
-			if(ShmStatusCodeData->InfoCode.InfoEvents.bits.InternetDisconnectViaEthernet &&
-			   ((ShmSysConfigAndInfo->SysConfig.AthInterface.WifiMode == 0) || ShmStatusCodeData->InfoCode.InfoEvents.bits.InternetDisconnectViaWiFi) &&
-			   ((ShmSysConfigAndInfo->SysConfig.TelecomInterface.TelcomEnabled == 0) || ShmStatusCodeData->InfoCode.InfoEvents.bits.InternetDisconnectVia4Gi))
-			{
-				ShmSysConfigAndInfo->SysInfo.InternetConn = OFF;
-			}
-			else
-			{
-				ShmSysConfigAndInfo->SysInfo.InternetConn = ON;
-			}
 
-			//============================================================
-			// Priority for internet  0 : First / 1 : Second / 2: Third
-			//============================================================
-			if(!ShmStatusCodeData->InfoCode.InfoEvents.bits.InternetDisconnectViaEthernet)
-			{
-				system("/sbin/ifmetric eth0 0");
-
-				if((ShmSysConfigAndInfo->SysConfig.ModelName[10] == 'W') || (ShmSysConfigAndInfo->SysConfig.ModelName[10] == 'D'))
+				if(ShmStatusCodeData->InfoCode.InfoEvents.bits.InternetDisconnectViaEthernet &&
+				   ((ShmSysConfigAndInfo->SysConfig.AthInterface.WifiMode == 0) || ShmStatusCodeData->InfoCode.InfoEvents.bits.InternetDisconnectViaWiFi) &&
+				   ((ShmSysConfigAndInfo->SysConfig.TelecomInterface.TelcomEnabled == 0) || ShmStatusCodeData->InfoCode.InfoEvents.bits.InternetDisconnectVia4Gi))
 				{
-					system("/sbin/ifmetric mlan0 1");
+					ShmSysConfigAndInfo->SysInfo.InternetConn = OFF;
 				}
-
-				if((ShmSysConfigAndInfo->SysConfig.ModelName[10] == 'T') || (ShmSysConfigAndInfo->SysConfig.ModelName[10] == 'D'))
+				else
 				{
-					system("/sbin/ifmetric ppp0 2");
+					ShmSysConfigAndInfo->SysInfo.InternetConn = ON;
 				}
 
-				if(isKernelSupportNAT() == YES)
+				//============================================================
+				// Priority for internet  0 : First / 1 : Second / 2: Third
+				//============================================================
+				if(!ShmStatusCodeData->InfoCode.InfoEvents.bits.InternetDisconnectViaEthernet)
 				{
-					if(ShmSysConfigAndInfo->SysConfig.AthInterface.WifiMode == 2)
+					system("/sbin/ifmetric eth0 0");
+
+					if((ShmSysConfigAndInfo->SysConfig.ModelName[10] == 'W') || (ShmSysConfigAndInfo->SysConfig.ModelName[10] == 'D'))
+					{
+						system("/sbin/ifmetric mlan0 1");
+					}
+
+					if((ShmSysConfigAndInfo->SysConfig.ModelName[10] == 'T') || (ShmSysConfigAndInfo->SysConfig.ModelName[10] == 'D'))
+					{
+						system("/sbin/ifmetric ppp0 2");
+					}
+
+					if(isKernelSupportNAT() == YES)
 					{
-						if(natInterface != 1)
+						if(ShmSysConfigAndInfo->SysConfig.AthInterface.WifiMode == 2)
+						{
+							if(natInterface != 1)
+							{
+								system("/sbin/iptables -t nat -F");
+								system("/sbin/iptables -A POSTROUTING -t nat -s 192.168.10.0/24 -o eth0 -j MASQUERADE");
+								natInterface = 1;
+							}
+						}
+						else
 						{
 							system("/sbin/iptables -t nat -F");
-							system("/sbin/iptables -A POSTROUTING -t nat -s 192.168.10.0/24 -o eth0 -j MASQUERADE");
-							natInterface = 1;
 						}
 					}
-					else
-					{
-						system("/sbin/iptables -t nat -F");
-					}
 				}
-			}
-			else if(!ShmStatusCodeData->InfoCode.InfoEvents.bits.InternetDisconnectViaWiFi)
-			{
-				if((ShmSysConfigAndInfo->SysConfig.ModelName[10] == 'W') || (ShmSysConfigAndInfo->SysConfig.ModelName[10] == 'D'))
+				else if(!ShmStatusCodeData->InfoCode.InfoEvents.bits.InternetDisconnectViaWiFi)
 				{
-					system("/sbin/ifmetric eth0 1");
-					system("/sbin/ifmetric mlan0 0");
-				}
+					if((ShmSysConfigAndInfo->SysConfig.ModelName[10] == 'W') || (ShmSysConfigAndInfo->SysConfig.ModelName[10] == 'D'))
+					{
+						system("/sbin/ifmetric eth0 1");
+						system("/sbin/ifmetric mlan0 0");
+					}
 
-				if((ShmSysConfigAndInfo->SysConfig.ModelName[10] == 'T') || (ShmSysConfigAndInfo->SysConfig.ModelName[10] == 'D'))
-				{
-					system("/sbin/ifmetric ppp0 2");
+					if((ShmSysConfigAndInfo->SysConfig.ModelName[10] == 'T') || (ShmSysConfigAndInfo->SysConfig.ModelName[10] == 'D'))
+					{
+						system("/sbin/ifmetric ppp0 2");
+					}
 				}
-			}
-			else if(!ShmStatusCodeData->InfoCode.InfoEvents.bits.InternetDisconnectVia4Gi)
-			{
-				if((ShmSysConfigAndInfo->SysConfig.ModelName[10] == 'W') || (ShmSysConfigAndInfo->SysConfig.ModelName[10] == 'D'))
+				else if(!ShmStatusCodeData->InfoCode.InfoEvents.bits.InternetDisconnectVia4Gi)
 				{
-					system("/sbin/ifmetric mlan0 2");
-				}
+					if((ShmSysConfigAndInfo->SysConfig.ModelName[10] == 'W') || (ShmSysConfigAndInfo->SysConfig.ModelName[10] == 'D'))
+					{
+						system("/sbin/ifmetric mlan0 2");
+					}
 
-				if((ShmSysConfigAndInfo->SysConfig.ModelName[10] == 'T') || (ShmSysConfigAndInfo->SysConfig.ModelName[10] == 'D'))
-				{
-					system("/sbin/ifmetric eth0 1");
-					system("/sbin/ifmetric ppp0 0");
-				}
+					if((ShmSysConfigAndInfo->SysConfig.ModelName[10] == 'T') || (ShmSysConfigAndInfo->SysConfig.ModelName[10] == 'D'))
+					{
+						system("/sbin/ifmetric eth0 1");
+						system("/sbin/ifmetric ppp0 0");
+					}
 
-				if(isKernelSupportNAT() == YES)
-				{
-					if(ShmSysConfigAndInfo->SysConfig.AthInterface.WifiMode == 2)
+					if(isKernelSupportNAT() == YES)
 					{
-						if(natInterface != 2)
+						if(ShmSysConfigAndInfo->SysConfig.AthInterface.WifiMode == 2)
+						{
+							if(natInterface != 2)
+							{
+								system("/sbin/iptables -t nat -F");
+								system("/sbin/iptables -A POSTROUTING -t nat -s 192.168.10.0/24 -o ppp0 -j MASQUERADE");
+								natInterface = 2;
+							}
+						}
+						else
 						{
 							system("/sbin/iptables -t nat -F");
-							system("/sbin/iptables -A POSTROUTING -t nat -s 192.168.10.0/24 -o ppp0 -j MASQUERADE");
-							natInterface = 2;
 						}
 					}
-					else
+				}
+				else
+				{
+					if(isKernelSupportNAT() == YES)
 					{
-						system("/sbin/iptables -t nat -F");
+						if(ShmSysConfigAndInfo->SysConfig.AthInterface.WifiMode == 2)
+						{
+							system("/sbin/iptables -t nat -F");
+							natInterface = 0;
+						}
 					}
 				}
 			}
 			else
 			{
-				if(isKernelSupportNAT() == YES)
+				if(ShmDispenser->gun_info.mcuFlag.isReadFwVerPass ||
+				      ShmDispenser->gun_info.mcuFlag.isSetModelNamePass ||
+				      ShmDispenser->gun_info.mcuFlag.isSetSerialNumberPass)
 				{
-					if(ShmSysConfigAndInfo->SysConfig.AthInterface.WifiMode == 2)
-					{
-						system("/sbin/iptables -t nat -F");
-						natInterface = 0;
-					}
+
+					system("pgrep -f \"udhcpc -i eth0\" | xargs kill");
+					system("/sbin/ifconfig eth0:1 192.168.201.202 netmask 255.255.255.248 up &");
 				}
 			}
 

+ 3 - 3
EVSE/Projects/AX80/Apps/main.h

@@ -277,9 +277,9 @@ enum ROTARY_SWITCH
 	ROTARY_SWITCH_F_POWERSHARING_SLAVE
 };
 
-#define DEBUG_INFO(format, args...) StoreLogMsg("[%s:%d][%s][Info] "format, (strrchr(__FILE__, '/') ? strrchr(__FILE__, '/') + 1 : __FILE__), __LINE__, __FUNCTION__, ##args)
-#define DEBUG_WARN(format, args...) StoreLogMsg("[%s:%d][%s][Warn] "format, (strrchr(__FILE__, '/') ? strrchr(__FILE__, '/') + 1 : __FILE__), __LINE__, __FUNCTION__, ##args)
-#define DEBUG_ERROR(format, args...) StoreLogMsg("[%s:%d][%s][Error] "format, (strrchr(__FILE__, '/') ? strrchr(__FILE__, '/') + 1 : __FILE__), __LINE__, __FUNCTION__, ##args)
+#define DEBUG_INFO(format, args...) StoreLogMsg("[%s:%d][%s][Info] "format, (strrchr(__FILE__, '/') ? strrchr(__FILE__, '/') + 1 : (strrchr(__FILE__, '\\') ? strrchr(__FILE__, '\\') + 1 : __FILE__)), __LINE__, __FUNCTION__, ##args)
+#define DEBUG_WARN(format, args...) StoreLogMsg("[%s:%d][%s][Warn] "format, (strrchr(__FILE__, '/') ? strrchr(__FILE__, '/') + 1 : (strrchr(__FILE__, '\\') ? strrchr(__FILE__, '\\') + 1 : __FILE__)), __LINE__, __FUNCTION__, ##args)
+#define DEBUG_ERROR(format, args...) StoreLogMsg("[%s:%d][%s][Error] "format, (strrchr(__FILE__, '/') ? strrchr(__FILE__, '/') + 1 : (strrchr(__FILE__, '\\') ? strrchr(__FILE__, '\\') + 1 : __FILE__)), __LINE__, __FUNCTION__, ##args)
 
 extern int StoreLogMsg(const char *fmt, ...);