diff options
author | Pavel Vymetálek <pavel@vym.cz> | 2024-01-13 10:42:40 +0100 |
---|---|---|
committer | Pavel Vymetálek <pavel@vym.cz> | 2024-01-13 10:42:40 +0100 |
commit | f43be8bee9140a477cf83ced0e1caf877a009008 (patch) | |
tree | 3ae391b70d28288ad5a739a5055cb6d6032c7d73 | |
parent | 9951618476f25d92907510eddd83ab51bbbd58d3 (diff) | |
download | sercp-pc-f43be8bee9140a477cf83ced0e1caf877a009008.tar.gz |
Fixed receiving ACK on Windowsv0.4.0
-rw-r--r-- | sercp.c | 27 |
1 files changed, 15 insertions, 12 deletions
@@ -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 |