projects
/
fw
/
altos
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
'fix' ao-eeprom to read two blocks at once. Work around kernel bugs.
[fw/altos]
/
ao-tools
/
lib
/
cc-usb.c
diff --git
a/ao-tools/lib/cc-usb.c
b/ao-tools/lib/cc-usb.c
index 81309983fd46b7487aaba7cabc005051373322be..17f059117477994458e3296adfb5d9b2ac1be65b 100644
(file)
--- 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
*/
/*
* Flush pending writes, fill pending reads
*/
-void
+
+int
cc_usb_sync(struct cc_usb *cc)
{
int ret;
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)
fds.fd = cc->fd;
for (;;) {
if (cc->read_count || cc->out_count)
- timeout =
-1
;
+ timeout =
5000
;
else
timeout = 0;
fds.events = 0;
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 (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;
break;
+ }
if (ret < 0) {
perror("poll");
break;
if (ret < 0) {
perror("poll");
break;