From e85c52f1eeaa594e1c2466bf39b5e5af2fecb30d Mon Sep 17 00:00:00 2001 From: Frank Voorburg Date: Mon, 14 Nov 2016 15:25:16 +0000 Subject: [PATCH] Refs #165. Fixed communication problem with UART interface DLL where XCP response packets are sometimes received in multiple chunks instead of one byte stream. This can happen when a USB-UART adapter is used instead of a hardware COM port. git-svn-id: https://svn.code.sf.net/p/openblt/code/trunk@176 5dc33758-31d5-4daf-9ae8-b24bf3d40d73 --- .../interfaces/uart/XcpTransport.pas | 35 ++++++++++++++++-- .../MicroBoot/interfaces/usb/XcpTransport.pas | 3 -- Host/openblt_uart.dll | Bin 2445824 -> 2445824 bytes Host/openblt_uart.ini | 2 +- 4 files changed, 33 insertions(+), 7 deletions(-) diff --git a/Host/Source/MicroBoot/interfaces/uart/XcpTransport.pas b/Host/Source/MicroBoot/interfaces/uart/XcpTransport.pas index 2f7222d2..90db84dc 100644 --- a/Host/Source/MicroBoot/interfaces/uart/XcpTransport.pas +++ b/Host/Source/MicroBoot/interfaces/uart/XcpTransport.pas @@ -195,6 +195,8 @@ var msgData : array of Byte; resLen : byte; cnt : byte; + rxCnt : byte; + dwEnd : DWord; begin // init the return value result := false; @@ -228,15 +230,42 @@ begin Exit; end; - // configure reception timeout. timeout = (MULTIPLIER) * number_of_bytes + CONSTANT + // give application the opportunity to process the messages + Application.ProcessMessages; + + // confgure the reception timeout. timeout = (MULTIPLIER) * number_of_bytes + CONSTANT sciDriver.Timeouts.ReadTotalConstant := timeOutms; sciDriver.Timeouts.ReadTotalMultiplier := 0; + // compute timeout time for receiving the response + dwEnd := GetTickCount + timeOutms; + // receive the first byte which should hold the packet length if sciDriver.Read(resLen, 1) = 1 then begin - // receive the actual packet data - if sciDriver.Read(packetData[0], resLen) = resLen then + // init the number of received bytes to 0 + rxCnt := 0; + packetLen := 0; + + // re-confgure the reception timeout now that the total packet length is known. + // timeout = (MULTIPLIER) * number_of_bytes + CONSTANT + sciDriver.Timeouts.ReadTotalConstant := 0; + sciDriver.Timeouts.ReadTotalMultiplier := timeOutms div resLen; + + // attempt to receive the bytes of the response packet one by one + while (rxCnt < resLen) and (GetTickCount < dwEnd) do + begin + // receive the next byte + if sciDriver.Read(packetData[rxCnt], 1) = 1 then + begin + // increment counter + rxCnt := rxCnt + 1; + end; + end; + + // check to see if all bytes were received. if not, then a timeout must have + // happened. + if rxCnt = resLen then begin packetLen := resLen; result := true; diff --git a/Host/Source/MicroBoot/interfaces/usb/XcpTransport.pas b/Host/Source/MicroBoot/interfaces/usb/XcpTransport.pas index 1ac833f1..c5e3cdb2 100644 --- a/Host/Source/MicroBoot/interfaces/usb/XcpTransport.pas +++ b/Host/Source/MicroBoot/interfaces/usb/XcpTransport.pas @@ -188,9 +188,6 @@ begin // compute timeout time dwEnd := GetTickCount + timeOutms; - // configure timeout for first byte - //sciDriver.InputTimeout := timeOutms; - // receive the first byte which holds the packet length if UblReceive(Addr(resLen), 1, timeOutms) = UBL_OKAY then begin diff --git a/Host/openblt_uart.dll b/Host/openblt_uart.dll index 77ac705c3bd2c41b0595293c5b96f2a1d17a0ee0..e456b858217cf79e4a2219b1b50cce1f6745bbae 100644 GIT binary patch delta 29272 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 q*7FFeTM+ns@{EwwqUu`^*q=w>D|@1c1