From 6ca3d36bcb2e0366402dc9fcbd513d089620b94f Mon Sep 17 00:00:00 2001 From: Tristan Krause Date: Mon, 1 Apr 2019 08:47:55 +0200 Subject: [PATCH] separate timeout read funktio --- drv/usart.cpp | 60 ++++++++++++++++++++++++++++++++------------------ drv/usart.h | 1 + drv/usart.o | Bin 29472 -> 28400 bytes main | Bin 61760 -> 61792 bytes 4 files changed, 39 insertions(+), 22 deletions(-) diff --git a/drv/usart.cpp b/drv/usart.cpp index 8b7809f..964ddfc 100644 --- a/drv/usart.cpp +++ b/drv/usart.cpp @@ -70,11 +70,35 @@ void USART::writeInt(uint16_t d) throw USARTException("Fehler beim Senden: writeInt()"); } + + +int USART::read_timeout(uint8_t* buffer, uint16_t offset, uint8_t len, uint32_t timeout) +{ + buffer += offset; + uint32_t elapsed = 0; + int n_read = -1; + auto start = std::chrono::steady_clock::now(); + auto end = start; + while(elapsed < timeout) + { + n_read = read(file_desc, buffer, len); + if (n_read == len) + return n_read; + + end = std::chrono::steady_clock::now(); + elapsed = std::chrono::duration_cast(end - start).count(); + } + + return n_read; +} + + void USART::writeBlock(uint8_t* buffer, uint16_t offset, uint8_t len) { buffer += offset; uint8_t crc; uint8_t aw; + uint16_t us_per_bit = (1000000 / baudrate) * 16; do { @@ -84,7 +108,7 @@ void USART::writeBlock(uint8_t* buffer, uint16_t offset, uint8_t len) for(uint8_t i = 0; i < len; i++) { writeByte(buffer[i]); - usleep((1000000 / baudrate) * 16); + usleep(us_per_bit); crc ^= buffer[i]; for (uint8_t k = 0; k < 8; k++) @@ -96,40 +120,32 @@ void USART::writeBlock(uint8_t* buffer, uint16_t offset, uint8_t len) } writeByte(crc); - usleep((1000000 / baudrate) * 16); + usleep(us_per_bit); - writeByte(0x80); // Stoppzeichen für Block - - usleep((1000000 / baudrate) * 16); + writeByte(0x80); // Stoppzeichen für Block + usleep(us_per_bit); - int code = read(file_desc, &aw, 1); - if(code < 0) + int n_read = read_timeout(&aw, 0, 1, us_per_bit); + if(n_read < 0) { std::cout << "WARNING: read error, retry..." << std::endl; - usleep(100000); - code = read(file_desc, &aw, 1); + n_read = read_timeout(&aw, 0, 1, us_per_bit); } - if(code == 0) + if(n_read == 0) { std::cout << "timeout info" << std::endl; for(uint8_t i = 0; i < MAX_BLOCK_SIZE; i++) { - std::cout << "i: " << (int) i << std::endl; - sleep(1); writeByte(0x80); // Stoppzeichen für Block - - code = read(file_desc, &aw, 1); - if(code == 1) - { - std::cout << "YO HO" << std::endl; - std::cout << "aw: " << (int) aw << std::endl; - i = 0xFF; - } + + n_read = read_timeout(&aw, 0, 1, us_per_bit * 2); + if(n_read == 1) + break; } } - else if(code != 1) - throw std::runtime_error("fatal: " + std::to_string(code)); + else if(n_read != 1) + throw std::runtime_error("fatal: " + std::to_string(n_read)); clearInputBuffer(); } diff --git a/drv/usart.h b/drv/usart.h index 01c0533..2355f2b 100644 --- a/drv/usart.h +++ b/drv/usart.h @@ -78,6 +78,7 @@ public: */ uint16_t readInt(void); + int read_timeout(uint8_t* buffer, uint16_t offset, uint8_t len, uint32_t timeout); void writeBlock(uint8_t* buffer, uint16_t offset, uint8_t len); bool readBlock(uint8_t* buffer, uint16_t offset); diff --git a/drv/usart.o b/drv/usart.o index 0489533929ce3676ed52c15ecb2d93ebc5a8977d..56837e6147800dded77d22ba5ca55202ff10f44a 100644 GIT binary patch delta 8665 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%0D!{UF_QhJ9DRK9!O8GjS)GmGW8L4p4_d z+9Nkc^r+)f{XwnQ&jUvK}JKe4b6d><%8JI#ZM2=*-@jL0A&q44KHl7wLEcHnJ zPPxwdF9c6E{sGC)_YfrB$#1&wKXRP>w71Kqf3xH-BBd-j^*@L*(SDBlZMNEZEPWzkRPl1YE5v{T(SO8x3RgTj^l#6xL`6Bv5>|oLiR0qqOp0IOEiU>uOZ}>!k$#GWicjIU$of0` z-+}l-zAnztjFfsh__i zAU>!4znA<@`}ZHG{cpM0@4Jz-;a|zwHxWNCMqbrl*-z)SssB0kAC>wGCBM2Ue)T*a z{Mq{dbyEK_Nl5;qxnA)r{pBwD3;Z_Yf2Y69MgP_;`pdHDUoQ32yB3}*{q~c*rHWMh zse8AJ{mUeys;?5@e5Ut6+5A_q)aForBLC4`s`wTDsMKGg6v%tC-_Bg%z^Sb%sXP7u z3zfG^?BDzR{3)Gx(!MD99m7X^Q1Tm8IhK_D3Znm~ku83e$oelsIVGz9EL@6T)t~Hf z>IS482+%M750ZS@N_#)rzdHHp9k5h^TsrNd&Vr=QHQG;^zM}Y)jej6wbL?>xI{o*5 E0Ss*Lxc~qF diff --git a/main b/main index 158b1921793bb41d7d9e1204e6534db4507e2561..25cec96e7f6577d55897277860fa3060b97e2d85 100755 GIT binary patch delta 18523 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 Hr|$m`_d$Yr