diff options
Diffstat (limited to 'ao-tools/lib')
-rw-r--r-- | ao-tools/lib/cc-usb.c | 12 | ||||
-rw-r--r-- | ao-tools/lib/cc-usb.h | 2 |
2 files changed, 10 insertions, 4 deletions
diff --git a/ao-tools/lib/cc-usb.c b/ao-tools/lib/cc-usb.c index 81309983..17f05911 100644 --- a/ao-tools/lib/cc-usb.c +++ b/ao-tools/lib/cc-usb.c @@ -157,7 +157,8 @@ cc_usb_dbg(int indent, uint8_t *bytes, int len) /* * Flush pending writes, fill pending reads */ -void + +int cc_usb_sync(struct cc_usb *cc) { int ret; @@ -167,7 +168,7 @@ cc_usb_sync(struct cc_usb *cc) fds.fd = cc->fd; for (;;) { if (cc->read_count || cc->out_count) - timeout = -1; + timeout = 5000; else timeout = 0; fds.events = 0; @@ -176,8 +177,13 @@ cc_usb_sync(struct cc_usb *cc) if (cc->out_count) fds.events |= POLLOUT; ret = poll(&fds, 1, timeout); - if (ret == 0) + if (ret == 0) { + if (timeout) { + fprintf(stderr, "USB link timeout\n"); + exit(1); + } break; + } if (ret < 0) { perror("poll"); break; diff --git a/ao-tools/lib/cc-usb.h b/ao-tools/lib/cc-usb.h index d7acfbd2..9baabd95 100644 --- a/ao-tools/lib/cc-usb.h +++ b/ao-tools/lib/cc-usb.h @@ -47,7 +47,7 @@ cc_usb_debug_mode(struct cc_usb *cc); int cc_usb_reset(struct cc_usb *cc); -void +int cc_usb_sync(struct cc_usb *cc); void |