summaryrefslogtreecommitdiff
path: root/ao-tools
diff options
context:
space:
mode:
Diffstat (limited to 'ao-tools')
-rw-r--r--ao-tools/ao-usbload/ao-usbload.c12
-rw-r--r--ao-tools/lib/cc-usb.c12
-rw-r--r--ao-tools/lib/cc-usb.h2
3 files changed, 19 insertions, 7 deletions
diff --git a/ao-tools/ao-usbload/ao-usbload.c b/ao-tools/ao-usbload/ao-usbload.c
index fd34fbdc..1b217e55 100644
--- a/ao-tools/ao-usbload/ao-usbload.c
+++ b/ao-tools/ao-usbload/ao-usbload.c
@@ -86,12 +86,13 @@ static const struct option options[] = {
{ .name = "cal", .has_arg = 1, .val = 'c' },
{ .name = "serial", .has_arg = 1, .val = 's' },
{ .name = "verbose", .has_arg = 1, .val = 'v' },
+ { .name = "wait", .has_arg = 0, .val = 'w' },
{ 0, 0, 0, 0},
};
static void usage(char *program)
{
- fprintf(stderr, "usage: %s [--raw] [--verbose=<verbose>] [--device=<device>] [-tty=<tty>] [--cal=<radio-cal>] [--serial=<serial>] file.{elf,ihx}\n", program);
+ fprintf(stderr, "usage: %s [--raw] [--verbose=<verbose>] [--device=<device>] [-tty=<tty>] [--cal=<radio-cal>] [--serial=<serial>] [--wait] file.{elf,ihx}\n", program);
exit(1);
}
@@ -145,7 +146,7 @@ main (int argc, char **argv)
uint32_t flash_base, flash_bound;
int has_flash_size = 0;
- while ((c = getopt_long(argc, argv, "rT:D:c:s:v:", options, NULL)) != -1) {
+ while ((c = getopt_long(argc, argv, "wrT:D:c:s:v:", options, NULL)) != -1) {
switch (c) {
case 'T':
tty = optarg;
@@ -156,6 +157,9 @@ main (int argc, char **argv)
case 'r':
raw = 1;
break;
+ case 'w':
+ cc_default_timeout = -1;
+ break;
case 'c':
cal = strtoul(optarg, &cal_end, 10);
if (cal_end == optarg || *cal_end != '\0')
@@ -209,6 +213,10 @@ main (int argc, char **argv)
if (!this_tty)
this_tty = cc_usbdevs_find_by_arg(device, "TeleMega");
if (!this_tty)
+ this_tty = cc_usbdevs_find_by_arg(device, "TeleMetrum");
+ if (!this_tty)
+ this_tty = cc_usbdevs_find_by_arg(device, "TeleGPS");
+ if (!this_tty)
this_tty = getenv("ALTOS_TTY");
if (!this_tty)
this_tty="/dev/ttyACM0";
diff --git a/ao-tools/lib/cc-usb.c b/ao-tools/lib/cc-usb.c
index 38dfff04..1a4dc7a1 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
*/
@@ -227,7 +229,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 +270,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 +281,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 +402,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;
}
@@ -459,7 +461,7 @@ cc_usb_open(char *tty)
cc_usb_printf(cc, "\nE 0\nm 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;
}
diff --git a/ao-tools/lib/cc-usb.h b/ao-tools/lib/cc-usb.h
index e08a956b..9ed198cd 100644
--- a/ao-tools/lib/cc-usb.h
+++ b/ao-tools/lib/cc-usb.h
@@ -23,6 +23,8 @@
struct cc_usb;
+extern int cc_default_timeout;
+
struct cc_usb *
cc_usb_open(char *tty);