summaryrefslogtreecommitdiff
path: root/ao-tools/lib
diff options
context:
space:
mode:
Diffstat (limited to 'ao-tools/lib')
-rw-r--r--ao-tools/lib/cc-usb.c12
-rw-r--r--ao-tools/lib/cc-usb.h2
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