Browse Source

[Improve][Modularization][Module_OcppBackend]

2020.10.12 / Folus Wen

Actions:
1. EVSE/Modularization/ocppfiles/JsonParser.c add debug info when receive error packet.
2. EVSE/Modularization/ocppfiles/MessageHandler.c implement 360KW 4 connector logic.
3. EVSE/Modularization/ocppfiles/MessageHandler.c handleGetDiagnosticsRequest() compress log file execution in thread.
4. EVSE/Modularization/ocppfiles/MessageHandler.c Heartbeat resend logic improve.
5. EVSE/rootfs/usr/bin/check_upgrade_byUSB.sh implement upgrade from USB disk function.

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 4 years ago
parent
commit
d8342bd90f

+ 4 - 2
EVSE/Modularization/ocppfiles/JsonParser.c

@@ -113,7 +113,7 @@ void ReceivedMessage(void *in, size_t len)
 
 	if(strcmp((const char *)tempin,"[ ]") == 0)
 	{
-		DEBUG_WARN("Message is empty arrary. \n");
+		DEBUG_WARN("Message is empty array.\n");
 	    return;
 	}
 
@@ -121,11 +121,13 @@ void ReceivedMessage(void *in, size_t len)
 	{
 		if((MsgType != 2) && (MsgType != 3) && (MsgType != 4) )
 		{
+			DEBUG_WARN("Message type not valid.\n");
 			return;
 		}
 
 		if(UniqueId[0] == '\0')
 		{
+			DEBUG_WARN("Message unique id is null.\n");
 			return;
 		}
 
@@ -184,7 +186,7 @@ void ReceivedMessage(void *in, size_t len)
 	}
 	else
 	{
-		DEBUG_WARN("Message is null. cant parse messgae.\n");
+		DEBUG_WARN("Message is null. can't parse message.\n");
 	}
 }
 

File diff suppressed because it is too large
+ 574 - 70
EVSE/Modularization/ocppfiles/MessageHandler.c


+ 9 - 2
EVSE/Modularization/ocppfiles/Module_OcppBackend.c

@@ -1473,18 +1473,25 @@ int main(void)
 				// 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) || (GetInternetConn() == 0))
 				{
 					DEBUG_INFO("GetInternetConn() = %d\n", GetInternetConn());
-					changeChageWebSocketPingInterval = FALSE;
+
+					if(changeChageWebSocketPingInterval)
+					{
+						DEBUG_INFO("Websocket ping interval changed request.\n");
+						changeChageWebSocketPingInterval = FALSE;
+					}
+
 					lws_context_destroy(context);
 					ConnectionEstablished = 0;
 					context = NULL;

+ 34 - 2
EVSE/Modularization/ocppfiles/common.c

@@ -212,7 +212,7 @@ int strpos(char *source, char *substr, int skip)
    return -1;
 }
 
-char * strtrim( char * s )
+char* strtrim( char * s )
 {
     char * p1 = s;
 	char * p2 = s;
@@ -231,7 +231,39 @@ char * strtrim( char * s )
 	return (s);
 }
 
-char *random_uuid(char* buf)
+char* strtrimc( char * s )
+{
+    char * p1 = s;
+	char * p2 = s;
+	while(*p1 != '\0')
+	{
+		while(*p1 == ' ' || *p1 == '\t' || *p1 == '\"' || *p1 == '\n' || *p1 == '}' || *p1 == '\r')
+		{
+			if(*p1 != ',')
+			{
+				p1 ++;
+			}
+			else
+			{
+				break;
+			}
+		}
+
+		if(*p1 != ',')
+		{
+			* p2 ++ = *p1 ++;
+			//printf("p2=%s\n",p2);
+		}
+		else
+		{
+			break;
+		}
+	}
+	*p2 = '\0';
+	return (s);
+}
+
+char* random_uuid(char* buf)
 {
 	uuid_t uuid;
 

+ 45 - 5
EVSE/Projects/AW-CCS/Apps/LCM/Module_LcmControl.c

@@ -157,6 +157,7 @@ void split(char **arr, char *str, const char *del)
 //==========================================
 void page_booting()
 {
+	DEBUG_INFO("Page booting.\n");
 	switch(ShmSysConfigAndInfo->SysConfig.DefaultLanguage)
 	{
 		case LCD_LANG_CHT:
@@ -182,6 +183,8 @@ void page_booting()
 
 void page_idle()
 {
+	uint8_t qrcontent[196];
+	DEBUG_INFO("Page idle.\n");
 	switch(ShmSysConfigAndInfo->SysConfig.DefaultLanguage)
 	{
 		case LCD_LANG_CHT:
@@ -199,15 +202,30 @@ void page_idle()
 		case LCD_LANG_THAI:
 		case LCD_LANG_ENGLISH:
 		default:
+			// Display QR code by call display picture
 			dispGraphicArea(Uart1Fd, AREAD_ID_0, YES, 4, 8, 64, 64, IMG_ADDR_QRCODE);
-			dispGraphicArea(Uart1Fd, AREAD_ID_1, YES, 70, 18, 70+48, 18+38, IMG_ADDR_TAP_RFID);
 
+			// Display QR code by LCD built-in function
+			if(ShmSysConfigAndInfo->SysConfig.QRCodeMadeMode)
+			{
+				// Customization content
+				qrCodeOperation(Uart1Fd, 4, 8, ShmSysConfigAndInfo->SysConfig.QRCodeContent, strlen((char*)ShmSysConfigAndInfo->SysConfig.QRCodeContent));
+			}
+			else
+			{
+				// Default content model name & serial number
+				sprintf((char*)qrcontent, "%s%s", ShmSysConfigAndInfo->SysConfig.ModelName, ShmSysConfigAndInfo->SysConfig.SerialNumber);
+				qrCodeOperation(Uart1Fd, 4, 8, qrcontent, strlen((char*)qrcontent));
+			}
+
+			dispGraphicArea(Uart1Fd, AREAD_ID_1, YES, 70, 18, 70+48, 18+38, IMG_ADDR_TAP_RFID);
 			break;
 	}
 }
 
 void page_authorizing()
 {
+	DEBUG_INFO("Page authorizing.\n");
 	switch(ShmSysConfigAndInfo->SysConfig.DefaultLanguage)
 	{
 		case LCD_LANG_CHT:
@@ -235,6 +253,7 @@ void page_preparing()
 {
 	static uint8_t idxPage = 0;
 
+	DEBUG_INFO("Page preparing.\n");
 	switch(ShmSysConfigAndInfo->SysConfig.DefaultLanguage)
 	{
 		case LCD_LANG_CHT:
@@ -266,6 +285,7 @@ void page_charging()
 	static uint8_t idxBatt = 0;
 	static uint8_t idxPage = 0;
 
+	DEBUG_INFO("Page charging.\n");
 	switch(ShmSysConfigAndInfo->SysConfig.DefaultLanguage)
 	{
 		case LCD_LANG_CHT:
@@ -329,6 +349,7 @@ void page_complete()
 	uint8_t buf[128];
 	static uint8_t idxPage = 0;
 
+	DEBUG_INFO("Page complete.\n");
 	switch(ShmSysConfigAndInfo->SysConfig.DefaultLanguage)
 	{
 		case LCD_LANG_CHT:
@@ -384,6 +405,7 @@ void page_terminating()
 	uint8_t buf[128];
 	static uint8_t idxPage = 0;
 
+	DEBUG_INFO("Page terminating.\n");
 	switch(ShmSysConfigAndInfo->SysConfig.DefaultLanguage)
 	{
 		case LCD_LANG_CHT:
@@ -438,6 +460,7 @@ void page_alarm()
 {
 	uint8_t buf[128];
 
+	DEBUG_INFO("Page alarm.\n");
 	switch(ShmSysConfigAndInfo->SysConfig.DefaultLanguage)
 	{
 		case LCD_LANG_CHT:
@@ -466,6 +489,7 @@ void page_fault()
 {
 	uint8_t buf[128];
 
+	DEBUG_INFO("Page fault.\n");
 	switch(ShmSysConfigAndInfo->SysConfig.DefaultLanguage)
 	{
 		case LCD_LANG_CHT:
@@ -492,6 +516,7 @@ void page_fault()
 
 void page_maintain()
 {
+	DEBUG_INFO("Page maintain.\n");
 	switch(ShmSysConfigAndInfo->SysConfig.DefaultLanguage)
 	{
 		case LCD_LANG_CHT:
@@ -517,6 +542,7 @@ void page_maintain()
 
 void page_update()
 {
+	DEBUG_INFO("Page update.\n");
 	switch(ShmSysConfigAndInfo->SysConfig.DefaultLanguage)
 	{
 		case LCD_LANG_CHT:
@@ -542,6 +568,7 @@ void page_update()
 
 void page_reservation()
 {
+	DEBUG_INFO("Page reservation.\n");
 	switch(ShmSysConfigAndInfo->SysConfig.DefaultLanguage)
 	{
 		case LCD_LANG_CHT:
@@ -565,6 +592,7 @@ void page_reservation()
 
 void page_booking()
 {
+	DEBUG_INFO("Page booking.\n");
 	switch(ShmSysConfigAndInfo->SysConfig.DefaultLanguage)
 	{
 		case LCD_LANG_CHT:
@@ -588,6 +616,7 @@ void page_booking()
 
 void page_debug()
 {
+	DEBUG_INFO("Page debug.\n");
 	switch(ShmSysConfigAndInfo->SysConfig.DefaultLanguage)
 	{
 		case LCD_LANG_CHT:
@@ -613,6 +642,7 @@ void page_debug()
 
 void page_unknown()
 {
+	DEBUG_INFO("Page unknown.\n");
 	switch(ShmSysConfigAndInfo->SysConfig.DefaultLanguage)
 	{
 		case LCD_LANG_CHT:
@@ -640,6 +670,7 @@ void page_header()
 {
 	uint8_t buf[128];
 
+	DEBUG_INFO("Page heading.\n");
 	if(sysFlag.isEnable4G)
 	{
 		// Drawing 4G signal strength
@@ -719,7 +750,7 @@ void page_header()
 	}
 	else
 	{
-		dispCharacterArea(Uart1Fd, AREAD_ID_HEADER_PRICE, 0, 0, 30, 7, FONT_ASCII_4X6, (uint8_t*)"", strlen(""));
+		dispCharacterArea(Uart1Fd, AREAD_ID_HEADER_PRICE, 0, 0, 30, 7, FONT_ASCII_4X6, (uint8_t*)"  ", strlen("  "));
 	}
 
 	//dispCharacterConfig(Uart1Fd, AREAD_ID_HEADER, YES, 0, 0, 30, 7);
@@ -838,8 +869,18 @@ int InitLcdModule()
 	uint16_t dataMaxLen = 512;
 	uint8_t qrcontent[196];
 
-	sprintf((char*)qrcontent, "%s%s", ShmSysConfigAndInfo->SysConfig.ModelName, ShmSysConfigAndInfo->SysConfig.SerialNumber);
-	qrcode_initText(&qrcode, qrcodeData, SIZE_53X53, 0, (char*)qrcontent);
+	if(ShmSysConfigAndInfo->SysConfig.QRCodeMadeMode)
+	{
+		// Customization content
+		qrcode_initText(&qrcode, qrcodeData, SIZE_53X53, 0, (char*)ShmSysConfigAndInfo->SysConfig.QRCodeContent);
+	}
+	else
+	{
+		// Default content model name & serial number
+		sprintf((char*)qrcontent, "%s%s", ShmSysConfigAndInfo->SysConfig.ModelName, ShmSysConfigAndInfo->SysConfig.SerialNumber);
+		qrcode_initText(&qrcode, qrcodeData, SIZE_53X53, 0, (char*)qrcontent);
+	}
+
 
 	// Power on LCD
 	setPower(Uart1Fd, ON);
@@ -1113,7 +1154,6 @@ int main(void)
 		{
 			// Clear screen
 			clearScreen(Uart1Fd, NO, 0, 0, 128, 64);
-
 			previousMode = ShmSysConfigAndInfo->SysInfo.AcChargingData[ShmCharger->gun_selectd].SystemStatus;
 			previousLan = ShmSysConfigAndInfo->SysConfig.DefaultLanguage;
 		}

+ 33 - 2
EVSE/Projects/AW-CCS/Apps/LCM/lcmComm.c

@@ -358,7 +358,7 @@ int8_t dispGraphicPartial(int32_t fd, uint8_t areaId, uint8_t isCover, uint16_t
 int8_t dispCharacter(int32_t fd, uint16_t startX, uint16_t startY, uint16_t font, uint8_t *data, uint8_t msgLen)
 {
 	int8_t result = FAIL;
-	uint8_t tx[8+msgLen];
+	uint8_t tx[9+msgLen];
 	uint16_t chksum;
 
 	tx[0] = 0xc1;
@@ -369,6 +369,7 @@ int8_t dispCharacter(int32_t fd, uint16_t startX, uint16_t startY, uint16_t font
 	tx[4] = (startY>>8)&0xff;
 	tx[5] = (font>>0)&0xff;
 	memcpy(&tx[6], &data[0], msgLen);
+	tx[ARRAY_SIZE(tx)-3] = 0x00;
 
 	chksum = crc16(&tx[0], ARRAY_SIZE(tx)-2);
 	tx[ARRAY_SIZE(tx)-2] = (chksum>>0)&0xff;
@@ -426,7 +427,7 @@ int8_t dispCharacterConfig(int32_t fd, uint8_t areaId, uint8_t isCover, uint16_t
 int8_t dispCharacterArea(int32_t fd, uint8_t areaId, uint16_t startX, uint16_t startY, uint16_t endX, uint16_t endY, uint16_t font, uint8_t *data, uint8_t msgLen)
 {
 	int8_t result = FAIL;
-	uint8_t tx[29+msgLen];
+	uint8_t tx[30+msgLen];
 	uint16_t chksum;
 
 	tx[0] = 0xc4;
@@ -457,6 +458,7 @@ int8_t dispCharacterArea(int32_t fd, uint8_t areaId, uint16_t startX, uint16_t s
 	tx[25] = 0x00;
 	tx[26] = (font>>0)&0xff;
 	memcpy(&tx[27], &data[0], msgLen);
+	tx[ARRAY_SIZE(tx)-3] = 0x00;
 
 	chksum = crc16(&tx[0], ARRAY_SIZE(tx)-2);
 	tx[ARRAY_SIZE(tx)-2] = (chksum>>0)&0xff;
@@ -853,6 +855,35 @@ int8_t graphicLoad(int32_t fd, uint16_t startX, uint16_t startY)
 	return result;
 }
 
+int8_t qrCodeOperation(int32_t fd, uint16_t startX, uint16_t startY, uint8_t *data, uint16_t msgLen)
+{
+	int8_t result = FAIL;
+	uint8_t tx[15+msgLen];
+	uint16_t chksum;
+
+	tx[0] = 0xdc;
+	tx[1] = 0x01;
+	tx[2] = (startX>>0)&0xff;
+	tx[3] = (startX>>8)&0xff;
+	tx[4] = (startY>>0)&0xff;
+	tx[5] = (startY>>8)&0xff;
+	tx[6] = 0x03;
+	tx[7] = 0x09;
+	tx[8] = 0xff;
+	tx[9] = 0x00;
+	tx[10] = 0x00;
+	tx[11] = (msgLen>>0)&0xff;
+	tx[12] = (msgLen>>8)&0xff;
+	memcpy(&tx[13], &data[0], msgLen);
+
+	chksum = crc16(&tx[0], ARRAY_SIZE(tx)-2);
+	tx[ARRAY_SIZE(tx)-2] = (chksum>>0)&0xff;
+	tx[ARRAY_SIZE(tx)-1] = (chksum>>8)&0xff;
+
+	result = tranceive(fd, tx, ARRAY_SIZE(tx));
+
+	return result;
+}
 
 
 

+ 1 - 0
EVSE/Projects/AW-CCS/Apps/LCM/lcmComm.h

@@ -140,6 +140,7 @@ extern int8_t picUploadStart(int32_t fd, uint16_t imgIdx, uint16_t width, uint16
 extern int8_t picUploadData(int32_t fd, uint16_t imgIdx, uint32_t startAddress, uint8_t *data, uint16_t length);
 extern int8_t graphicSave(int32_t fd, uint16_t startX, uint16_t startY, uint16_t endX, uint16_t endY);
 extern int8_t graphicLoad(int32_t fd, uint16_t startX, uint16_t startY);
+extern int8_t qrCodeOperation(int32_t fd, uint16_t startX, uint16_t startY, uint8_t *data, uint16_t msgLen);
 
 typedef struct SYS_FLAG
 {

+ 5 - 16
EVSE/Projects/AW-CCS/Apps/Module_FactoryConfig.c

@@ -69,22 +69,11 @@ int StoreLogMsg(const char *fmt, ...)
 	tm=localtime(&CurrentTime);
 	gettimeofday(&tv, NULL); // get microseconds, 10^-6
 
-	if((ShmSysConfigAndInfo->SysConfig.ModelName != NULL) && (ShmSysConfigAndInfo->SysConfig.SerialNumber != NULL) && (strlen((char*)ShmSysConfigAndInfo->SysConfig.ModelName) >= 14))
-	{
-		sprintf(Buf,"echo -n \"[%04d.%02d.%02d %02d:%02d:%02d.%06ld]-%s\" >> /Storage/SystemLog/[%04d.%02d]%s_%s_SystemLog",
-					tm->tm_year+1900,tm->tm_mon+1,tm->tm_mday,tm->tm_hour,tm->tm_min,tm->tm_sec,tv.tv_usec,
-					buffer,
-					tm->tm_year+1900,tm->tm_mon+1,
-					ShmSysConfigAndInfo->SysConfig.ModelName,
-					ShmSysConfigAndInfo->SysConfig.SerialNumber);
-	}
-	else
-	{
-		sprintf(Buf,"echo -n \"[%04d.%02d.%02d %02d:%02d:%02d.%06ld]-%s\" >> /Storage/SystemLog/[%04d.%02d]SystemLog",
-					tm->tm_year+1900,tm->tm_mon+1,tm->tm_mday,tm->tm_hour,tm->tm_min,tm->tm_sec,tv.tv_usec,
-					buffer,
-					tm->tm_year+1900,tm->tm_mon+1);
-	}
+	sprintf(Buf,"echo -n \"[%04d.%02d.%02d %02d:%02d:%02d.%06ld]-%s\" >> /Storage/SystemLog/[%04d.%02d]Module_FactoryConfig",
+				tm->tm_year+1900,tm->tm_mon+1,tm->tm_mday,tm->tm_hour,tm->tm_min,tm->tm_sec,tv.tv_usec,
+				buffer,
+				tm->tm_year+1900,tm->tm_mon+1);
+
 
 #ifdef SystemLogMessage
 	system(Buf);

+ 1 - 0
EVSE/rootfs/etc/mdev.conf

@@ -19,3 +19,4 @@ tty6*       0:5 0660
 ttyS*       0:5 0640
 urandom     0:0 0444
 zero        0:0 0666
+sd[a-z][0-9] 0:0 0660 @/usr/bin/check_upgrade_byUSB.sh

+ 43 - 0
EVSE/rootfs/usr/bin/check_upgrade_byUSB.sh

@@ -0,0 +1,43 @@
+#!/bin/sh
+
+case "$ACTION" in
+add|"")
+
+	DATE=`date +%Y-%m-%d_%H:%M:%S`
+	result=1
+#	cat /dev/null > /Storage/SystemLog/check_upgrade_byUSB
+	echo [ $DATE ] /dev/$MDEV detected. >> /Storage/SystemLog/check_upgrade_byUSB
+        mount /dev/$MDEV /UsbFlash
+
+	# Check upgrade image list file exist and process upgrade logic
+	if [ -f "/UsbFlash/upgrade_image_list" ]; then
+		# Copy image file to target     
+	    	while read -r filename; 
+    		do
+			`cp -f /UsbFlash/$filename /mnt`
+			if [ $? -ne 0 ]; then
+				result=0
+				echo [ $DATE ] copy /UsbFlash/$filename to /mnt fail. >> /Storage/SystemLog/check_upgrade_byUSB
+			else
+				echo [ $DATE ] copy /UsbFlash/$filename to /mnt success. >> /Storage/SystemLog/check_upgrade_byUSB
+			fi
+	    	done < /UsbFlash/upgrade_image_list
+
+		# Trigger upgrade event
+		if [ $result -eq 1 ]; then
+			echo [ $DATE ] copy all image list on upgrade_image_list to /mnt success and trigger upgrade event. >> /Storage/SystemLog/check_upgrade_byUSB
+			`/root/WebService upgrade /mnt/`
+		else
+			echo [ $DATE ] copy all image list on upgrade_image_list to /mnt occur error. >> /Storage/SystemLog/check_upgrade_byUSB
+		fi
+	else
+		echo [ $DATE ] USB disk can not find upgrade_image_list file >> /Storage/SystemLog/check_upgrade_byUSB	
+	fi
+	umount /dev/$MDEV
+        ;;
+esac
+
+
+
+
+

Some files were not shown because too many files changed in this diff