Browse Source

[Improve][Modularization][Module_Upgrade]

2020.11.19 / Folus Wen

Actions:
1. UART file handle add timeout before start transmmit data.

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
edb707d45d
2 changed files with 21 additions and 11 deletions
  1. 20 10
      EVSE/Modularization/Module_Upgrade.c
  2. 1 1
      EVSE/Modularization/Module_Upgrade.h

+ 20 - 10
EVSE/Modularization/Module_Upgrade.c

@@ -446,22 +446,19 @@ int Upgrade_Flash(unsigned int Type,char *SourcePath,char *ModelName)
 //================================================
 int uart_tranceive(int fd, unsigned char* cmd, unsigned char* rx, int len, unsigned char needErase)
 {
+	uint16_t rxLen = 0;
+
     tcflush(fd,TCIOFLUSH);
     if(write(fd, cmd, len) >= len)
     {
-        len = 0;
-        if (needErase == 0x01)
-            sleep(5);
-        else
-            usleep(500000);
-        len = read(fd, rx, 512);
+    	rxLen = read(fd, rx, 9);
     }
     else
     {
         DEBUG_ERROR("Serial command %s response fail.\n", cmd);
     }
 
-    return len;
+    return rxLen;
 }
 
 unsigned char uart_update_start(unsigned char fd, unsigned char targetAddr, unsigned int crc32)
@@ -627,13 +624,26 @@ unsigned char uart_update_finish(unsigned char fd, unsigned char targetAddr)
     return result;
 }
 
-int Upgrade_UART(unsigned char uartfd,unsigned int Type,unsigned char TargetAddr,char *SourcePath,char *ModelName)
+unsigned char uart_config_timeout(unsigned char uartfd)
+{
+	struct termios tios;
+
+	ioctl (uartfd, TCGETS, &tios);
+	tios.c_cc[VTIME]=(unsigned char)50;		// timeout 5 secod
+	tcflush(uartfd, TCIFLUSH);
+	ioctl (uartfd, TCSETS, &tios);
+
+	return uartfd;
+}
+
+int Upgrade_UART(int uartfdOrd,unsigned int Type,unsigned char TargetAddr,char *SourcePath,char *ModelName)
 {
     int result = FAIL;
     char cmdBuf[128];
     long int MaxLen=48*1024*1024, ImageLen=0;
     unsigned int ImageCRC=0, DataLength=0;
     int fd;
+    int uartfd = uart_config_timeout(uartfdOrd);
 
     fd = open(SourcePath, O_RDONLY);
     if(fd < 0)
@@ -696,9 +706,9 @@ int Upgrade_UART(unsigned char uartfd,unsigned int Type,unsigned char TargetAddr
                             {
                                 DEBUG_WARN("Data transfer fail, retry %d \n", ++CNT_Fail);
                             }
-                        }while(DataLength-(CNT_Trans*1024)>0 && CNT_Fail<3);
+                        }while(DataLength-(CNT_Trans*1024)>0 && CNT_Fail<10);
 
-                        if(CNT_Fail>=3)
+                        if(CNT_Fail>=10)
                         {
                             uart_update_abord(uartfd, TargetAddr);
                             DEBUG_ERROR("UART upgrade retry > limits, aboard upgrade.\n");

+ 1 - 1
EVSE/Modularization/Module_Upgrade.h

@@ -108,7 +108,7 @@ enum Uart_Command
 
 
 int Upgrade_Flash(unsigned int Type,char *SourcePath,char *ModelName);
-int Upgrade_UART(unsigned char uartfd,unsigned int Type,unsigned char TargetAddr,char *SourcePath,char *ModelName);
+int Upgrade_UART(int uartfdOrd,unsigned int Type,unsigned char TargetAddr,char *SourcePath,char *ModelName);
 int Upgrade_CAN(int canfd,unsigned int Type,unsigned char TargetAddr,char *SourcePath,char *ModelName);
 int Upgrade_CCS(int canfd,unsigned int Type,unsigned char TargetAddr,char *SourcePath,char *ModelName);
 extern int runShellCmd(const char*cmd);