Skip to content
Open
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
27 changes: 26 additions & 1 deletion teensy_loader_cli.c
Original file line number Diff line number Diff line change
Expand Up @@ -37,7 +37,7 @@ void usage(const char *err)
{
if(err != NULL) fprintf(stderr, "%s\n\n", err);
fprintf(stderr,
"Usage: teensy_loader_cli --mcu=<MCU> [-w] [-h] [-n] [-b] [-v] <file.hex>\n"
"Usage: teensy_loader_cli --mcu=<MCU> [-w] [-h] [-n] [-b] [-v] [--serial=<serial>] <file.hex>\n"
"\t-w : Wait for device to appear\n"
"\t-r : Use hard reboot if device not online\n"
"\t-s : Use soft reboot if device not online (Teensy3.x only)\n"
Expand Down Expand Up @@ -79,6 +79,7 @@ int verbose = 0;
int boot_only = 0;
int code_size = 0, block_size = 0;
const char *filename=NULL;
long int serial = -1;


/****************************************************************/
Expand Down Expand Up @@ -240,6 +241,17 @@ usb_dev_handle * open_usb_device(int vid, int pid)
printf_verbose("Found device but unable to open\n");
continue;
}
if ( serial != -1 ) {
if (dev->descriptor.iSerialNumber) {
r = usb_get_string_simple(h, dev->descriptor.iSerialNumber, buf, sizeof(buf));
if (r > 0) {
long int serial_ = atoi(buf);
printf_verbose("Serial Number: %s\n", buf);
if ( serial_ != serial ) continue;
else serial = -1;
}
}
}
#ifdef LIBUSB_HAS_GET_DRIVER_NP
r = usb_get_driver_np(h, 0, buf, sizeof(buf));
if (r >= 0) {
Expand Down Expand Up @@ -1076,6 +1088,18 @@ void read_mcu(char *name)
}


void read_serial(char *name)
{
if(name == NULL) {
fprintf(stderr, "No serial specified.\n");
exit(1);
}

serial = atoi(name);
printf("requested serial: %ld\n", serial);
}


void parse_flag(char *arg)
{
int i;
Expand Down Expand Up @@ -1125,6 +1149,7 @@ void parse_options(int argc, char **argv)
if(strcasecmp(name, "help") == 0) usage(NULL);
else if(strcasecmp(name, "mcu") == 0) read_mcu(val);
else if(strcasecmp(name, "list-mcus") == 0) list_mcus();
else if(strcasecmp(name, "serial") == 0) read_serial(val);
else {
fprintf(stderr, "Unknown option \"%s\"\n\n", arg);
usage(NULL);
Expand Down