From f43be8bee9140a477cf83ced0e1caf877a009008 Mon Sep 17 00:00:00 2001 From: Pavel Vymetálek Date: Sat, 13 Jan 2024 10:42:40 +0100 Subject: Fixed receiving ACK on Windows --- sercp.c | 27 +++++++++++++++------------ 1 file changed, 15 insertions(+), 12 deletions(-) diff --git a/sercp.c b/sercp.c index fdc9fb8..683ec00 100644 --- a/sercp.c +++ b/sercp.c @@ -73,7 +73,7 @@ const char* _version = "v0.4.0"; FILE *tapout_fd = NULL; int is_outfile = 0; int baud_rate = 0; -int wait_ms = 800 +int wait_ms = 800; char *path; char sercp_file[FILENAME_MAX]; unsigned char buff[32768]; @@ -402,7 +402,7 @@ uint8_t fi_ack_buffer[] = {'A','c','k',0, 0x49, 0x0F}; unsigned long ulNumBytes; WriteFile(serial_fd, (void*)fi_ack_buffer, sizeof(fi_ack_buffer), &ulNumBytes, NULL); #else - size_t odeslano; + size_t odeslano; odeslano = write (serial_fd, (void*)fi_ack_buffer, sizeof(fi_ack_buffer)); if (tcdrain(serial_fd) == -1) { perror("tcdrain err1: "); @@ -443,15 +443,18 @@ void sendBlockAck(uint8_t block_num) { uint8_t buf_ack[8]; uint8_t* WaitReadAck(void) { -int result; -int x; -size_t len = 0; - -#ifdef _WIN32 - unsigned long ulNumBytes; - sleep_ms(10); - ReadFile(serial_fd, buf_ack, 6, &ulNumBytes, NULL); + size_t len = 0; + #ifdef _WIN32 + unsigned long ulNumBytes =0; + while (1) { + sleep_ms(10); + ReadFile(serial_fd, &buf_ack[len], 6, &ulNumBytes, NULL); + len += (size_t) ulNumBytes; + if (len == 6) break; + } #else + // int x; + int result; memset(buf_ack, 0, 8); while (1) { result = poll (spolfd_serial, 1, 300); // 200ms timeout @@ -525,7 +528,7 @@ void sercpRecv(void) { #ifdef _WIN32 sleep_ms(10); ReadFile(serial_fd, p_buff, sizeof(fileinfo), &ulNumBytes, NULL); - len = (uint16_t) ulNumBytes; + len = (size_t) ulNumBytes; #else sleep_ms(10); len = read (serial_fd, p_buff, sizeof(fileinfo)-length); @@ -580,7 +583,7 @@ void sercpRecv(void) { // receive of data block - max. length 16kiB #ifdef _WIN32 ReadFile(serial_fd, p_buff, expected_len, &ulNumBytes, NULL); - len = (uint16_t)ulNumBytes; + len = (size_t)ulNumBytes; #else len = read (serial_fd, p_buff, expected_len); #endif -- cgit