Эх сурвалжийг харах

[Improve][Modularization][Module_OcppBackend / Module_OcppBackend20]

2021.09.09 / Folus Wen

Actions:
1. Align websocket RX/TX buffer size to 1024*200.

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 жил өмнө
parent
commit
3d17dc05e2

+ 3 - 3
EVSE/Modularization/ocpp20/JsonParser.c

@@ -157,9 +157,9 @@ static FunCallErrorPtr funcallerror[] = {	handleError	};
 void ReceivedMessage(void *in, size_t len)
 {
 	//DEBUG_INFO("ReceivedMessage\n");
-	char tempin[65536];
+	char tempin[WEBSOCKET_BUFFER_SIZE];
 	int MsgType = 0;
-	char UniqueId[37],Action[33],Payload[64824],ErrorCode[129],ErrorDescription[513];
+	char UniqueId[37],Action[33],Payload[WEBSOCKET_BUFFER_SIZE-712],ErrorCode[129],ErrorDescription[513];
 	char *arr[2]= {};
 	int gun_index = 0;
 	const char *del = ",";
@@ -175,7 +175,7 @@ void ReceivedMessage(void *in, size_t len)
 	memset(Payload, 0, sizeof Payload);
 	memset(ErrorCode, 0, sizeof ErrorCode);
 	memset(ErrorDescription, 0, sizeof ErrorDescription);
-	memset(tempin, 0, 1024*4);
+	memset(tempin, 0, sizeof tempin);
 	strcpy(tempin, (const char *)in);
 	memset( (void *)in, 0, sizeof(char)*len );
 

+ 9 - 6
EVSE/Modularization/ocpp20/Module_OcppBackend20.c

@@ -20,7 +20,7 @@ struct StartTime
 //==========================================
 void ReceivedMessage(void *in, size_t len);
 int SendBufLen=0;//(1024*4);//(1024*3);
-unsigned char SendBuffer[1024*20]={0};
+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;
@@ -73,7 +73,7 @@ int SendData(struct lws *wsi)
 
 static int OCPP20Callback(struct lws *wsi, enum lws_callback_reasons reason, void *user, void *in, size_t len)
 {
-	char 	buf[256]={0}, hash[20]={0}, key_b64[40]={0}, tempin[65536]={0}, sstr[65536]={0};
+	char 	buf[256]={0}, hash[20]={0}, key_b64[40]={0}, tempin[WEBSOCKET_BUFFER_SIZE]={0}, sstr[WEBSOCKET_BUFFER_SIZE]={0};
 	uint8_t auth_b64[256]={0}, boxId[128]={0}, password[64]={0};
 	int 	c = 0;
 	char 	*loc;
@@ -313,6 +313,9 @@ static int OCPP20Callback(struct lws *wsi, enum lws_callback_reasons reason, voi
 		case LWS_CALLBACK_RECEIVE_PONG:
 			DEBUG_INFO("LWS_CALLBACK_RECEIVE_PONG\n");
 			break;
+		case LWS_CALLBACK_WS_PEER_INITIATED_CLOSE:
+			DEBUG_INFO("LWS_CALLBACK_WS_PEER_INITIATED_CLOSE\n");
+			break;
 		default:
 			DEBUG_INFO("Reason = %d\n", reason);
 			break;
@@ -326,14 +329,14 @@ static struct lws_protocols protocols[] =
 	{
 		"ocpp2.0",
 		OCPP20Callback,
-		65536,//65536,//10240,
-		65536,//65536,//10240,
+		WEBSOCKET_BUFFER_SIZE,
+		WEBSOCKET_BUFFER_SIZE,
 	},
 	{
 		"ocpp2.0",
 		OCPP20Callback,
-		65536,//65536,//10240,
-		65536,//65536,//10240,
+		WEBSOCKET_BUFFER_SIZE,
+		WEBSOCKET_BUFFER_SIZE,
 	},
 	{
 		NULL, NULL, 0		/* End of list */

+ 4 - 1
EVSE/Modularization/ocpp20/Module_OcppBackend20.h

@@ -94,6 +94,9 @@ enum GUN_TYPE
 #define QUEUE_OPERATION_STORE		5
 #define QUEUE_MESSAGE_LENGTH		1024*20
 
+// Websocket TX/RX buffer size
+#define WEBSOCKET_BUFFER_SIZE          (1024*200)
+
 struct yuarel {
 	char *scheme; /* scheme, without ":" and "//" */
 	char *username; /* username, default: NULL */
@@ -153,7 +156,7 @@ extern char * strtrim( char * s );
 
 extern struct lws 					*wsi_client;
 extern struct lws_context 			*context;
-extern unsigned char 				SendBuffer[1024*20];
+extern unsigned char 				SendBuffer[WEBSOCKET_BUFFER_SIZE];
 extern int 							SendBufLen;
 extern char 						OcppPath[384];
 extern char 						OcppProtocol[10];

+ 2 - 2
EVSE/Modularization/ocpp20/SystemLogMessage.c

@@ -34,8 +34,8 @@ int StoreLogMsg(const char *fmt, ...)
 
 int StoreOcppMsg(const char *fmt, ...)
 {
-	char Buf[65536+256];
-	char buffer[65536];
+	char Buf[WEBSOCKET_BUFFER_SIZE+256];
+	char buffer[WEBSOCKET_BUFFER_SIZE];
 	//char Buf[4096+256];
 	//char buffer[4096];
 	time_t CurrentTime;

+ 3 - 3
EVSE/Modularization/ocppfiles/JsonParser.c

@@ -108,9 +108,9 @@ static FunCallErrorPtr funcallerror[] = {	handleError	};
 void ReceivedMessage(void *in, size_t len)
 {
 	//DEBUG_INFO("ReceivedMessage\n");
-	char tempin[65536];
+	char tempin[WEBSOCKET_BUFFER_SIZE];
 	int MsgType = 0;
-	char UniqueId[37],Action[33],Payload[64824],ErrorCode[129],ErrorDescription[513];
+	char UniqueId[37],Action[33],Payload[WEBSOCKET_BUFFER_SIZE-712],ErrorCode[129],ErrorDescription[513];
 	char *arr[2]= {};
 	int gun_index = 0;
 	const char *del = ",";
@@ -126,7 +126,7 @@ void ReceivedMessage(void *in, size_t len)
 	memset(Payload, 0, sizeof Payload);
 	memset(ErrorCode, 0, sizeof ErrorCode);
 	memset(ErrorDescription, 0, sizeof ErrorDescription);
-	memset(tempin, 0, 1024*4);
+	memset(tempin, 0, sizeof tempin);
 	strcpy(tempin, (const char *)in);
 	memset( (void *)in, 0, sizeof(char)*len );
 

+ 22 - 22
EVSE/Modularization/ocppfiles/MessageHandler.c

@@ -142,7 +142,7 @@ CpinitiateMsg cpinitateMsg;
 struct StructConfigurationKeyItems staticKeyArray[GetConfigurationMaxKeysNUM]={0};
 struct StructConfigurationKey staticResponseConfigurationKeyArray[GetConfigurationMaxKeysNUM]={0};
 struct StructConfigurationKeyItems staticResponseUnknownKey[10]={0};
-struct StructLocalAuthorizationList staticLocalAuthorizationList[500]={0};
+struct StructLocalAuthorizationList staticLocalAuthorizationList[1]={0};
 
 #if 0
 static char *ChargePointErrorCodeStr[] = {
@@ -11910,20 +11910,20 @@ int handleSendLocalListRequest(char *uuid, char *payload)
 				goto end;
 			}
 
-			memset(ShmOCPP16Data->SendLocalList.LocalAuthorizationList, 0 , sizeof(struct StructLocalAuthorizationList)* 500);
+			memset(ShmOCPP16Data->SendLocalList.LocalAuthorizationList, 0 , sizeof(struct StructLocalAuthorizationList)*1);
 			for(int idx=0;idx<json_object_array_length(json_object_object_get(SendLocalList, "localAuthorizationList"));idx++)
 			{
-				sprintf((char*)ShmOCPP16Data->SendLocalList.LocalAuthorizationList[idx].IdTag, "%s", json_object_get_string(json_object_object_get(json_object_array_get_idx(json_object_object_get(SendLocalList, "localAuthorizationList"), idx), "idTag")));
+				sprintf((char*)ShmOCPP16Data->SendLocalList.LocalAuthorizationList[0].IdTag, "%s", json_object_get_string(json_object_object_get(json_object_array_get_idx(json_object_object_get(SendLocalList, "localAuthorizationList"), idx), "idTag")));
 
 				if(json_object_object_get(json_object_array_get_idx(json_object_object_get(SendLocalList, "localAuthorizationList"), idx), "idTagInfo") != NULL)
 				{
-					sprintf((char*)ShmOCPP16Data->SendLocalList.LocalAuthorizationList[idx].IdTagInfo.Status, "%s", json_object_get_string(json_object_object_get(json_object_object_get(json_object_array_get_idx(json_object_object_get(SendLocalList, "localAuthorizationList"), idx), "idTagInfo"), "status")));
+					sprintf((char*)ShmOCPP16Data->SendLocalList.LocalAuthorizationList[0].IdTagInfo.Status, "%s", json_object_get_string(json_object_object_get(json_object_object_get(json_object_array_get_idx(json_object_object_get(SendLocalList, "localAuthorizationList"), idx), "idTagInfo"), "status")));
 
 					if(json_object_object_get(json_object_object_get(json_object_array_get_idx(json_object_object_get(SendLocalList, "localAuthorizationList"), idx), "idTagInfo"), "expiryDate") != NULL)
-						sprintf((char*)ShmOCPP16Data->SendLocalList.LocalAuthorizationList[idx].IdTagInfo.ExpiryDate, "%s", json_object_get_string(json_object_object_get(json_object_object_get(json_object_array_get_idx(json_object_object_get(SendLocalList, "localAuthorizationList"), idx), "idTagInfo"), "expiryDate")));
+						sprintf((char*)ShmOCPP16Data->SendLocalList.LocalAuthorizationList[0].IdTagInfo.ExpiryDate, "%s", json_object_get_string(json_object_object_get(json_object_object_get(json_object_array_get_idx(json_object_object_get(SendLocalList, "localAuthorizationList"), idx), "idTagInfo"), "expiryDate")));
 
 					if(json_object_object_get(json_object_object_get(json_object_array_get_idx(json_object_object_get(SendLocalList, "localAuthorizationList"), idx), "idTagInfo"), "parentIdTag") != NULL)
-						sprintf((char*)ShmOCPP16Data->SendLocalList.LocalAuthorizationList[idx].IdTagInfo.ParentIdTag, "%s", json_object_get_string(json_object_object_get(json_object_object_get(json_object_array_get_idx(json_object_object_get(SendLocalList, "localAuthorizationList"), idx), "idTagInfo"), "parentIdTag")));
+						sprintf((char*)ShmOCPP16Data->SendLocalList.LocalAuthorizationList[0].IdTagInfo.ParentIdTag, "%s", json_object_get_string(json_object_object_get(json_object_object_get(json_object_array_get_idx(json_object_object_get(SendLocalList, "localAuthorizationList"), idx), "idTagInfo"), "parentIdTag")));
 				}
 
 				// Add to db
@@ -11933,31 +11933,31 @@ int handleSendLocalListRequest(char *uuid, char *payload)
 					DEBUG_INFO("Local list full update item: %d, listVer: %d, %s, %s, %s, %s.\n",
 																				   idx,
 																				   ShmOCPP16Data->SendLocalList.ListVersion,
-																				   ShmOCPP16Data->SendLocalList.LocalAuthorizationList[idx].IdTag,
-																				   ShmOCPP16Data->SendLocalList.LocalAuthorizationList[idx].IdTagInfo.ParentIdTag,
-																				   ShmOCPP16Data->SendLocalList.LocalAuthorizationList[idx].IdTagInfo.ExpiryDate,
-																				   ShmOCPP16Data->SendLocalList.LocalAuthorizationList[idx].IdTagInfo.Status);
+																				   ShmOCPP16Data->SendLocalList.LocalAuthorizationList[0].IdTag,
+																				   ShmOCPP16Data->SendLocalList.LocalAuthorizationList[0].IdTagInfo.ParentIdTag,
+																				   ShmOCPP16Data->SendLocalList.LocalAuthorizationList[0].IdTagInfo.ExpiryDate,
+																				   ShmOCPP16Data->SendLocalList.LocalAuthorizationList[0].IdTagInfo.Status);
 					// update list
 					OCPP_addLocalList(ShmOCPP16Data->SendLocalList.ListVersion,
-									  (char*)ShmOCPP16Data->SendLocalList.LocalAuthorizationList[idx].IdTag,
-									  (char*)ShmOCPP16Data->SendLocalList.LocalAuthorizationList[idx].IdTagInfo.ParentIdTag,
-									  (char*)ShmOCPP16Data->SendLocalList.LocalAuthorizationList[idx].IdTagInfo.ExpiryDate,
-									  (char*)ShmOCPP16Data->SendLocalList.LocalAuthorizationList[idx].IdTagInfo.Status);
+									  (char*)ShmOCPP16Data->SendLocalList.LocalAuthorizationList[0].IdTag,
+									  (char*)ShmOCPP16Data->SendLocalList.LocalAuthorizationList[0].IdTagInfo.ParentIdTag,
+									  (char*)ShmOCPP16Data->SendLocalList.LocalAuthorizationList[0].IdTagInfo.ExpiryDate,
+									  (char*)ShmOCPP16Data->SendLocalList.LocalAuthorizationList[0].IdTagInfo.Status);
 				}
 				else if(strcmp((char*)ShmOCPP16Data->SendLocalList.UpdateType, UpdateTypeStr[Differential]) == 0)
 				{
 					DEBUG_INFO("Local list diff update item: %d,listVer:  %d, %s, %s, %s, %s.\n",
 																					idx,
 																				   ShmOCPP16Data->SendLocalList.ListVersion,
-																				   ShmOCPP16Data->SendLocalList.LocalAuthorizationList[idx].IdTag,
-																				   ShmOCPP16Data->SendLocalList.LocalAuthorizationList[idx].IdTagInfo.ParentIdTag,
-																				   ShmOCPP16Data->SendLocalList.LocalAuthorizationList[idx].IdTagInfo.ExpiryDate,
-																				   ShmOCPP16Data->SendLocalList.LocalAuthorizationList[idx].IdTagInfo.Status);
+																				   ShmOCPP16Data->SendLocalList.LocalAuthorizationList[0].IdTag,
+																				   ShmOCPP16Data->SendLocalList.LocalAuthorizationList[0].IdTagInfo.ParentIdTag,
+																				   ShmOCPP16Data->SendLocalList.LocalAuthorizationList[0].IdTagInfo.ExpiryDate,
+																				   ShmOCPP16Data->SendLocalList.LocalAuthorizationList[0].IdTagInfo.Status);
 					OCPP_addLocalList(ShmOCPP16Data->SendLocalList.ListVersion,
-									  (char*)ShmOCPP16Data->SendLocalList.LocalAuthorizationList[idx].IdTag,
-									  (char*)ShmOCPP16Data->SendLocalList.LocalAuthorizationList[idx].IdTagInfo.ParentIdTag,
-									  (char*)ShmOCPP16Data->SendLocalList.LocalAuthorizationList[idx].IdTagInfo.ExpiryDate,
-									  (char*)ShmOCPP16Data->SendLocalList.LocalAuthorizationList[idx].IdTagInfo.Status);
+									  (char*)ShmOCPP16Data->SendLocalList.LocalAuthorizationList[0].IdTag,
+									  (char*)ShmOCPP16Data->SendLocalList.LocalAuthorizationList[0].IdTagInfo.ParentIdTag,
+									  (char*)ShmOCPP16Data->SendLocalList.LocalAuthorizationList[0].IdTagInfo.ExpiryDate,
+									  (char*)ShmOCPP16Data->SendLocalList.LocalAuthorizationList[0].IdTagInfo.Status);
 				}
 			}
 		}

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

@@ -20,7 +20,7 @@ struct StartTime
 //==========================================
 void ReceivedMessage(void *in, size_t len);
 int SendBufLen=0;//(1024*4);//(1024*3);
-unsigned char SendBuffer[1024*20]={0};
+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;
@@ -127,7 +127,7 @@ int SendData(struct lws *wsi)
 
 static int OCPP16Callback(struct lws *wsi, enum lws_callback_reasons reason, void *user, void *in, size_t len)
 {
-	char 	buf[256]={0}, hash[20]={0}, key_b64[40]={0}, tempin[65536]={0}, sstr[65536]={0};
+	char 	buf[256]={0}, hash[20]={0}, key_b64[40]={0}, tempin[WEBSOCKET_BUFFER_SIZE]={0}, sstr[WEBSOCKET_BUFFER_SIZE]={0};
 	uint8_t auth_b64[256]={0}, boxId[128]={0}, password[64]={0};
 	int 	c = 0;
 	char 	*loc;
@@ -369,6 +369,9 @@ static int OCPP16Callback(struct lws *wsi, enum lws_callback_reasons reason, voi
 		case LWS_CALLBACK_RECEIVE_PONG:
 			DEBUG_INFO("LWS_CALLBACK_RECEIVE_PONG\n");
 			break;
+		case LWS_CALLBACK_WS_PEER_INITIATED_CLOSE:
+			DEBUG_INFO("LWS_CALLBACK_WS_PEER_INITIATED_CLOSE\n");
+			break;
 		default:
 			DEBUG_INFO("Reason = %d\n", reason);
 			break;
@@ -383,20 +386,20 @@ static struct lws_protocols protocols[] =
 	{
 		"ocpp1.6",
 		OCPP16Callback,
-		65536,//65536,//10240,
-		65536,//65536,//10240,
+		WEBSOCKET_BUFFER_SIZE,
+		WEBSOCKET_BUFFER_SIZE,
 	},
 	{
 		"ocpp2.0",
 		OCPP16Callback,
-		65536,//65536,//10240,
-		65536,//65536,//10240,
+		WEBSOCKET_BUFFER_SIZE,
+		WEBSOCKET_BUFFER_SIZE,
 	},
 	{
 		"ocpp1.6,ocpp2.0",
 		OCPP16Callback,
-		65536,//65536,//10240,
-		65536,//65536,//10240,
+		WEBSOCKET_BUFFER_SIZE,
+		WEBSOCKET_BUFFER_SIZE,
 	},
 	{
 		NULL, NULL, 0		/* End of list */

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

@@ -76,6 +76,9 @@
 #define QUEUE_OPERATION_STORE		5
 #define QUEUE_MESSAGE_LENGTH		3584
 
+// Websocket TX/RX buffer size
+#define WEBSOCKET_BUFFER_SIZE		(1024*200)
+
 enum GUN_TYPE
 {
 	GUN_TYPE_UNKNOWN=0,
@@ -142,7 +145,7 @@ extern char * strtrim( char * s );
 
 extern struct lws 					*wsi_client;
 extern struct lws_context 			*context;
-extern unsigned char 				SendBuffer[1024*20];
+extern unsigned char 				SendBuffer[WEBSOCKET_BUFFER_SIZE];
 extern int 							SendBufLen;
 extern char 						OcppPath[384];
 extern char 						OcppProtocol[10];

+ 2 - 2
EVSE/Modularization/ocppfiles/SystemLogMessage.c

@@ -34,8 +34,8 @@ int StoreLogMsg(const char *fmt, ...)
 
 int StoreOcppMsg(const char *fmt, ...)
 {
-	char Buf[65536+256];
-	char buffer[65536];
+	char Buf[WEBSOCKET_BUFFER_SIZE+256];
+	char buffer[WEBSOCKET_BUFFER_SIZE];
 	//char Buf[4096+256];
 	//char buffer[4096];
 	time_t CurrentTime;

+ 3 - 3
EVSE/Modularization/ocppph/JsonParser.c

@@ -108,9 +108,9 @@ static FunCallErrorPtr funcallerror[] = {	handleError	};
 void ReceivedMessage(void *in, size_t len)
 {
 	//DEBUG_INFO("ReceivedMessage\n");
-	char tempin[65536];
+	char tempin[WEBSOCKET_BUFFER_SIZE];
 	int MsgType = 0;
-	char UniqueId[37],Action[33],Payload[64824],ErrorCode[129],ErrorDescription[513];
+	char UniqueId[37],Action[33],Payload[WEBSOCKET_BUFFER_SIZE-712],ErrorCode[129],ErrorDescription[513];
 	char *arr[2]= {};
 	int gun_index = 0;
 	const char *del = ",";
@@ -126,7 +126,7 @@ void ReceivedMessage(void *in, size_t len)
 	memset(Payload, 0, sizeof Payload);
 	memset(ErrorCode, 0, sizeof ErrorCode);
 	memset(ErrorDescription, 0, sizeof ErrorDescription);
-	memset(tempin, 0, 1024*4);
+	memset(tempin, 0, sizeof tempin);
 	strcpy(tempin, (const char *)in);
 	memset( (void *)in, 0, sizeof(char)*len );
 

+ 22 - 22
EVSE/Modularization/ocppph/MessageHandler.c

@@ -144,7 +144,7 @@ CpinitiateMsg cpinitateMsg;
 struct StructConfigurationKeyItems staticKeyArray[GetConfigurationMaxKeysNUM]={0};
 struct StructConfigurationKey staticResponseConfigurationKeyArray[GetConfigurationMaxKeysNUM]={0};
 struct StructConfigurationKeyItems staticResponseUnknownKey[10]={0};
-struct StructLocalAuthorizationList staticLocalAuthorizationList[500]={0};
+struct StructLocalAuthorizationList staticLocalAuthorizationList[1]={0};
 
 #if 0
 static char *ChargePointErrorCodeStr[] = {
@@ -11640,20 +11640,20 @@ int handleSendLocalListRequest(char *uuid, char *payload)
 				goto end;
 			}
 
-			memset(ShmOCPP16DataPH->SendLocalList.LocalAuthorizationList, 0 , sizeof(struct StructLocalAuthorizationList)* 500);
+			memset(ShmOCPP16DataPH->SendLocalList.LocalAuthorizationList, 0 , sizeof(struct StructLocalAuthorizationList)*1);
 			for(int idx=0;idx<json_object_array_length(json_object_object_get(SendLocalList, "localAuthorizationList"));idx++)
 			{
-				sprintf((char*)ShmOCPP16DataPH->SendLocalList.LocalAuthorizationList[idx].IdTag, "%s", json_object_get_string(json_object_object_get(json_object_array_get_idx(json_object_object_get(SendLocalList, "localAuthorizationList"), idx), "idTag")));
+				sprintf((char*)ShmOCPP16DataPH->SendLocalList.LocalAuthorizationList[0].IdTag, "%s", json_object_get_string(json_object_object_get(json_object_array_get_idx(json_object_object_get(SendLocalList, "localAuthorizationList"), idx), "idTag")));
 
 				if(json_object_object_get(json_object_array_get_idx(json_object_object_get(SendLocalList, "localAuthorizationList"), idx), "idTagInfo") != NULL)
 				{
-					sprintf((char*)ShmOCPP16DataPH->SendLocalList.LocalAuthorizationList[idx].IdTagInfo.Status, "%s", json_object_get_string(json_object_object_get(json_object_object_get(json_object_array_get_idx(json_object_object_get(SendLocalList, "localAuthorizationList"), idx), "idTagInfo"), "status")));
+					sprintf((char*)ShmOCPP16DataPH->SendLocalList.LocalAuthorizationList[0].IdTagInfo.Status, "%s", json_object_get_string(json_object_object_get(json_object_object_get(json_object_array_get_idx(json_object_object_get(SendLocalList, "localAuthorizationList"), idx), "idTagInfo"), "status")));
 
 					if(json_object_object_get(json_object_object_get(json_object_array_get_idx(json_object_object_get(SendLocalList, "localAuthorizationList"), idx), "idTagInfo"), "expiryDate") != NULL)
-						sprintf((char*)ShmOCPP16DataPH->SendLocalList.LocalAuthorizationList[idx].IdTagInfo.ExpiryDate, "%s", json_object_get_string(json_object_object_get(json_object_object_get(json_object_array_get_idx(json_object_object_get(SendLocalList, "localAuthorizationList"), idx), "idTagInfo"), "expiryDate")));
+						sprintf((char*)ShmOCPP16DataPH->SendLocalList.LocalAuthorizationList[0].IdTagInfo.ExpiryDate, "%s", json_object_get_string(json_object_object_get(json_object_object_get(json_object_array_get_idx(json_object_object_get(SendLocalList, "localAuthorizationList"), idx), "idTagInfo"), "expiryDate")));
 
 					if(json_object_object_get(json_object_object_get(json_object_array_get_idx(json_object_object_get(SendLocalList, "localAuthorizationList"), idx), "idTagInfo"), "parentIdTag") != NULL)
-						sprintf((char*)ShmOCPP16DataPH->SendLocalList.LocalAuthorizationList[idx].IdTagInfo.ParentIdTag, "%s", json_object_get_string(json_object_object_get(json_object_object_get(json_object_array_get_idx(json_object_object_get(SendLocalList, "localAuthorizationList"), idx), "idTagInfo"), "parentIdTag")));
+						sprintf((char*)ShmOCPP16DataPH->SendLocalList.LocalAuthorizationList[0].IdTagInfo.ParentIdTag, "%s", json_object_get_string(json_object_object_get(json_object_object_get(json_object_array_get_idx(json_object_object_get(SendLocalList, "localAuthorizationList"), idx), "idTagInfo"), "parentIdTag")));
 				}
 
 				// Add to db
@@ -11663,31 +11663,31 @@ int handleSendLocalListRequest(char *uuid, char *payload)
 					DEBUG_INFO("Local list full update item: %d, listVer: %d, %s, %s, %s, %s.\n",
 																				   idx,
 																				   ShmOCPP16DataPH->SendLocalList.ListVersion,
-																				   ShmOCPP16DataPH->SendLocalList.LocalAuthorizationList[idx].IdTag,
-																				   ShmOCPP16DataPH->SendLocalList.LocalAuthorizationList[idx].IdTagInfo.ParentIdTag,
-																				   ShmOCPP16DataPH->SendLocalList.LocalAuthorizationList[idx].IdTagInfo.ExpiryDate,
-																				   ShmOCPP16DataPH->SendLocalList.LocalAuthorizationList[idx].IdTagInfo.Status);
+																				   ShmOCPP16DataPH->SendLocalList.LocalAuthorizationList[0].IdTag,
+																				   ShmOCPP16DataPH->SendLocalList.LocalAuthorizationList[0].IdTagInfo.ParentIdTag,
+																				   ShmOCPP16DataPH->SendLocalList.LocalAuthorizationList[0].IdTagInfo.ExpiryDate,
+																				   ShmOCPP16DataPH->SendLocalList.LocalAuthorizationList[0].IdTagInfo.Status);
 					// update list
 					OCPP_addLocalList(ShmOCPP16DataPH->SendLocalList.ListVersion,
-									  (char*)ShmOCPP16DataPH->SendLocalList.LocalAuthorizationList[idx].IdTag,
-									  (char*)ShmOCPP16DataPH->SendLocalList.LocalAuthorizationList[idx].IdTagInfo.ParentIdTag,
-									  (char*)ShmOCPP16DataPH->SendLocalList.LocalAuthorizationList[idx].IdTagInfo.ExpiryDate,
-									  (char*)ShmOCPP16DataPH->SendLocalList.LocalAuthorizationList[idx].IdTagInfo.Status);
+									  (char*)ShmOCPP16DataPH->SendLocalList.LocalAuthorizationList[0].IdTag,
+									  (char*)ShmOCPP16DataPH->SendLocalList.LocalAuthorizationList[0].IdTagInfo.ParentIdTag,
+									  (char*)ShmOCPP16DataPH->SendLocalList.LocalAuthorizationList[0].IdTagInfo.ExpiryDate,
+									  (char*)ShmOCPP16DataPH->SendLocalList.LocalAuthorizationList[0].IdTagInfo.Status);
 				}
 				else if(strcmp((char*)ShmOCPP16DataPH->SendLocalList.UpdateType, UpdateTypeStr[Differential]) == 0)
 				{
 					DEBUG_INFO("Local list diff update item: %d,listVer:  %d, %s, %s, %s, %s.\n",
 																					idx,
 																				   ShmOCPP16DataPH->SendLocalList.ListVersion,
-																				   ShmOCPP16DataPH->SendLocalList.LocalAuthorizationList[idx].IdTag,
-																				   ShmOCPP16DataPH->SendLocalList.LocalAuthorizationList[idx].IdTagInfo.ParentIdTag,
-																				   ShmOCPP16DataPH->SendLocalList.LocalAuthorizationList[idx].IdTagInfo.ExpiryDate,
-																				   ShmOCPP16DataPH->SendLocalList.LocalAuthorizationList[idx].IdTagInfo.Status);
+																				   ShmOCPP16DataPH->SendLocalList.LocalAuthorizationList[0].IdTag,
+																				   ShmOCPP16DataPH->SendLocalList.LocalAuthorizationList[0].IdTagInfo.ParentIdTag,
+																				   ShmOCPP16DataPH->SendLocalList.LocalAuthorizationList[0].IdTagInfo.ExpiryDate,
+																				   ShmOCPP16DataPH->SendLocalList.LocalAuthorizationList[0].IdTagInfo.Status);
 					OCPP_addLocalList(ShmOCPP16DataPH->SendLocalList.ListVersion,
-									  (char*)ShmOCPP16DataPH->SendLocalList.LocalAuthorizationList[idx].IdTag,
-									  (char*)ShmOCPP16DataPH->SendLocalList.LocalAuthorizationList[idx].IdTagInfo.ParentIdTag,
-									  (char*)ShmOCPP16DataPH->SendLocalList.LocalAuthorizationList[idx].IdTagInfo.ExpiryDate,
-									  (char*)ShmOCPP16DataPH->SendLocalList.LocalAuthorizationList[idx].IdTagInfo.Status);
+									  (char*)ShmOCPP16DataPH->SendLocalList.LocalAuthorizationList[0].IdTag,
+									  (char*)ShmOCPP16DataPH->SendLocalList.LocalAuthorizationList[0].IdTagInfo.ParentIdTag,
+									  (char*)ShmOCPP16DataPH->SendLocalList.LocalAuthorizationList[0].IdTagInfo.ExpiryDate,
+									  (char*)ShmOCPP16DataPH->SendLocalList.LocalAuthorizationList[0].IdTagInfo.Status);
 				}
 			}
 		}

+ 11 - 8
EVSE/Modularization/ocppph/Module_OcppBackend.c

@@ -20,7 +20,7 @@ struct StartTime
 //==========================================
 void ReceivedMessage(void *in, size_t len);
 int SendBufLen=0;//(1024*4);//(1024*3);
-unsigned char SendBuffer[1024*20]={0};
+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;
@@ -127,7 +127,7 @@ int SendData(struct lws *wsi)
 
 static int OCPP16Callback(struct lws *wsi, enum lws_callback_reasons reason, void *user, void *in, size_t len)
 {
-	char 	buf[256]={0}, hash[20]={0}, key_b64[40]={0}, tempin[65536]={0}, sstr[65536]={0};
+	char 	buf[256]={0}, hash[20]={0}, key_b64[40]={0}, tempin[WEBSOCKET_BUFFER_SIZE]={0}, sstr[WEBSOCKET_BUFFER_SIZE]={0};
 	uint8_t auth_b64[256]={0}, boxId[128]={0}, password[64]={0};
 	int 	c = 0;
 	char 	*loc;
@@ -369,6 +369,9 @@ static int OCPP16Callback(struct lws *wsi, enum lws_callback_reasons reason, voi
 		case LWS_CALLBACK_RECEIVE_PONG:
 			DEBUG_INFO("LWS_CALLBACK_RECEIVE_PONG\n");
 			break;
+		case LWS_CALLBACK_WS_PEER_INITIATED_CLOSE:
+			DEBUG_INFO("LWS_CALLBACK_WS_PEER_INITIATED_CLOSE\n");
+			break;
 		default:
 			DEBUG_INFO("Reason = %d\n", reason);
 			break;
@@ -383,20 +386,20 @@ static struct lws_protocols protocols[] =
 	{
 		"ocpp1.6",
 		OCPP16Callback,
-		65536,//65536,//10240,
-		65536,//65536,//10240,
+		WEBSOCKET_BUFFER_SIZE,
+		WEBSOCKET_BUFFER_SIZE,
 	},
 	{
 		"ocpp2.0",
 		OCPP16Callback,
-		65536,//65536,//10240,
-		65536,//65536,//10240,
+		WEBSOCKET_BUFFER_SIZE,
+		WEBSOCKET_BUFFER_SIZE,
 	},
 	{
 		"ocpp1.6,ocpp2.0",
 		OCPP16Callback,
-		65536,//65536,//10240,
-		65536,//65536,//10240,
+		WEBSOCKET_BUFFER_SIZE,
+		WEBSOCKET_BUFFER_SIZE,
 	},
 	{
 		NULL, NULL, 0		/* End of list */

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

@@ -76,6 +76,9 @@
 #define QUEUE_OPERATION_STORE		5
 #define QUEUE_MESSAGE_LENGTH		3584
 
+// Websocket TX/RX buffer size
+#define WEBSOCKET_BUFFER_SIZE          (1024*200)
+
 enum GUN_TYPE
 {
 	GUN_TYPE_UNKNOWN=0,
@@ -142,7 +145,7 @@ extern char * strtrim( char * s );
 
 extern struct lws 					*wsi_client;
 extern struct lws_context 			*context;
-extern unsigned char 				SendBuffer[1024*20];
+extern unsigned char 				SendBuffer[WEBSOCKET_BUFFER_SIZE];
 extern int 							SendBufLen;
 extern char 						OcppPath[384];
 extern char 						OcppProtocol[10];

+ 2 - 2
EVSE/Modularization/ocppph/SystemLogMessage.c

@@ -34,8 +34,8 @@ int StoreLogMsg(const char *fmt, ...)
 
 int StoreOcppMsg(const char *fmt, ...)
 {
-	char Buf[65536+256];
-	char buffer[65536];
+	char Buf[WEBSOCKET_BUFFER_SIZE+256];
+	char buffer[WEBSOCKET_BUFFER_SIZE];
 	//char Buf[4096+256];
 	//char buffer[4096];
 	time_t CurrentTime;

+ 1 - 1
EVSE/rootfs/etc/udhcpd.conf

@@ -33,7 +33,7 @@ interface	uap0
 #pidfile	/var/run/udhcpd.pid
 
 # The location of the leases file
-#lease_file	/var/lib/misc/udhcpd.leases
+lease_file	/var/log/udhcpd.leases
 
 # The time period at which udhcpd will write out leases file.
 # If this is 0, udhcpd will never automatically write leases file.