|
@@ -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");
|