diff --git a/src/cheerios.c b/src/cheerios.c index 6d27b0e..5ab880f 100644 --- a/src/cheerios.c +++ b/src/cheerios.c @@ -216,17 +216,18 @@ cheerios_insert(const char *buf, size_t len) static void -__xmodem_callback(size_t sent, size_t total) +__xmodem_callback(size_t sent, size_t total, int ack_fails) { char status_str[1024]; snprintf( status_str, sizeof(status_str), - "\r %.02f/%.02fKB (%.01f%%)", + "\r %.02f/%.02fKB (%.01f%%, %d ACK fails)", (sent / 1024.0), (total / 1024.0), - (sent * 100.0 / total) + (sent * 100.0 / total), + ack_fails ); cheerios_insert(status_str, strlen(status_str)); diff --git a/src/xmodem.c b/src/xmodem.c index 8edc8e9..9bf850d 100644 --- a/src/xmodem.c +++ b/src/xmodem.c @@ -20,7 +20,7 @@ xmodem_send( int in_fd, size_t sz, int block_sz, - void (*status_cb)(size_t sent, size_t total) + void (*status_cb)(size_t sent, size_t total, int ack_fails) ) { uint8_t start_byte; @@ -30,6 +30,7 @@ xmodem_send( uint8_t packet_num; int retries; int ret = 0; + int ack_fails = 0; if (block_sz != 128 && block_sz != 1024) { return -1; @@ -120,11 +121,12 @@ xmodem_send( } retries++; + ack_fails++; } sent += read_len; packet_num++; /* expect overflow */ - status_cb(sent, sz); + status_cb(sent, sz, ack_fails); } end_of_transmission: diff --git a/src/xmodem.h b/src/xmodem.h index ecc0092..ac65b02 100644 --- a/src/xmodem.h +++ b/src/xmodem.h @@ -34,7 +34,7 @@ int xmodem_send( int in_fd, size_t sz, int block_sz, - void (*status_cb)(size_t sent, size_t total) + void (*status_cb)(size_t sent, size_t total, int ack_fails) ); #if 0