X-Git-Url: https://git.gag.com/?p=fw%2Faltos;a=blobdiff_plain;f=ao-tools%2Flib%2Fcc-usb.c;h=1e023c7ebe8f7b37e99eeef7b044d294a5f531dd;hp=38dfff04936c87e6fbed2b8df73b5286edd92987;hb=HEAD;hpb=d63319f6f29ef714bb1d5c359c2448f63e7a4534 diff --git a/ao-tools/lib/cc-usb.c b/ao-tools/lib/cc-usb.c index 38dfff04..65a4cbad 100644 --- a/ao-tools/lib/cc-usb.c +++ b/ao-tools/lib/cc-usb.c @@ -152,6 +152,8 @@ cc_usb_dbg(int indent, uint8_t *bytes, int len) } } +int cc_default_timeout = 5000; + /* * Flush pending writes, fill pending reads */ @@ -205,8 +207,10 @@ _cc_usb_sync(struct cc_usb *cc, int wait_for_input, int write_timeout) write(2, cc->in_buf, cc->in_count); cc->in_count = 0; } - } else if (ret < 0) + } else if (ret <= 0) { perror("read"); + return -1; + } } if (fds.revents & POLLOUT) { ret = write(cc->fd, cc->out_buf, @@ -227,7 +231,7 @@ _cc_usb_sync(struct cc_usb *cc, int wait_for_input, int write_timeout) void cc_usb_sync(struct cc_usb *cc) { - if (_cc_usb_sync(cc, 0, 5000) < 0) { + if (_cc_usb_sync(cc, 0, cc_default_timeout) < 0) { fprintf(stderr, "USB link timeout\n"); exit(1); } @@ -268,7 +272,7 @@ int cc_usb_getchar_timeout(struct cc_usb *cc, int timeout) { while (cc->in_pos == cc->in_count) { - if (_cc_usb_sync(cc, timeout, 5000) < 0) { + if (_cc_usb_sync(cc, timeout, cc_default_timeout) < 0) { fprintf(stderr, "USB link timeout\n"); exit(1); } @@ -279,7 +283,7 @@ cc_usb_getchar_timeout(struct cc_usb *cc, int timeout) int cc_usb_getchar(struct cc_usb *cc) { - return cc_usb_getchar_timeout(cc, 5000); + return cc_usb_getchar_timeout(cc, cc_default_timeout); } void @@ -400,7 +404,7 @@ cc_usb_open_remote(struct cc_usb *cc, int freq, char *call) cc_usb_printf(cc, "\nc F %d\nc c %s\np\nE 0\n", freq, call); do { cc->in_count = cc->in_pos = 0; - _cc_usb_sync(cc, 100, 5000); + _cc_usb_sync(cc, 100, cc_default_timeout); } while (cc->in_count > 0); cc->remote = 1; } @@ -456,10 +460,10 @@ cc_usb_open(char *tty) cfsetospeed(&termios, B9600); cfsetispeed(&termios, B9600); tcsetattr(cc->fd, TCSAFLUSH, &termios); - cc_usb_printf(cc, "\nE 0\nm 0\n"); + cc_usb_printf(cc, "\nE 0\n"); do { cc->in_count = cc->in_pos = 0; - _cc_usb_sync(cc, 100, 5000); + _cc_usb_sync(cc, 100, cc_default_timeout); } while (cc->in_count > 0); return cc; }