#include <stdlib.h>
#include <limits.h>
#include <stdint.h>
+#include <unistd.h>
+#include <getopt.h>
#include "ccdbg.h"
+#include "cc.h"
#define AO_USB_DESC_STRING 3
-void
-usage(char *program)
-{
- fprintf(stderr, "usage: %s <filename.ihx> <serial>\n", program);
- exit(1);
-}
-
struct sym {
unsigned addr;
char *name;
memcpy(image->data + addr - image->address, data, len);
}
+static const struct option options[] = {
+ { .name = "tty", .has_arg = 1, .val = 'T' },
+ { .name = "device", .has_arg = 1, .val = 'D' },
+ { 0, 0, 0, 0},
+};
+
+static void usage(char *program)
+{
+ fprintf(stderr, "usage: %s [--tty <tty-name>] [--device <device-name>] file.ihx serial-number\n", program);
+ exit(1);
+}
+
int
main (int argc, char **argv)
{
uint16_t pc;
struct hex_file *hex;
struct hex_image *image;
- char *filename;
- FILE *file;
- FILE *map;
- char *serial_string;
- unsigned int serial;
- char *mapname, *dot;
+ char *filename;
+ FILE *file;
+ FILE *map;
+ char *serial_string;
+ unsigned int serial;
+ char *mapname, *dot;
char *serial_ucs2;
int serial_ucs2_len;
char serial_int[2];
int i;
unsigned usb_descriptors;
int string_num;
+ char *tty = NULL;
+ char *device = NULL;
+ int c;
- filename = argv[1];
+ while ((c = getopt_long(argc, argv, "T:D:", options, NULL)) != -1) {
+ switch (c) {
+ case 'T':
+ tty = optarg;
+ break;
+ case 'D':
+ device = optarg;
+ break;
+ default:
+ usage(argv[0]);
+ break;
+ }
+ }
+ filename = argv[optind];
if (filename == NULL)
usage(argv[0]);
mapname = strdup(filename);
usage(argv[0]);
strcpy(dot, ".map");
- serial_string = argv[2];
+ serial_string = argv[optind + 1];
if (serial_string == NULL)
usage(argv[0]);
serial = strtoul(serial_string, NULL, 0);
if (!serial)
- usage(argv[0]);
+(argv[0]);
serial_int[0] = serial & 0xff;
serial_int[1] = (serial >> 8) & 0xff;
if (!rewrite(image, usb_descriptors + 2 + image->address, serial_ucs2, serial_ucs2_len))
usage(argv[0]);
- dbg = ccdbg_open();
+ if (!tty)
+ tty = cc_usbdevs_find_by_arg(device, "TIDongle");
+ dbg = ccdbg_open(tty);
if (!dbg)
exit (1);