Update HID bootloader loader application to support the VID/PID used by the bootloader.

pull/1469/head
Dean Camera 14 years ago
parent cae0fa73d7
commit 7d823d926f

@ -199,6 +199,7 @@ ADEFS += -DBOARD=BOARD_$(BOARD)
ADEFS += -DBOOT_START_ADDR=$(BOOT_START)UL ADEFS += -DBOOT_START_ADDR=$(BOOT_START)UL
ADEFS += $(LUFA_OPTS) ADEFS += $(LUFA_OPTS)
# Place -D or -U options here for C++ sources # Place -D or -U options here for C++ sources
CPPDEFS = -DF_CPU=$(F_CPU)UL CPPDEFS = -DF_CPU=$(F_CPU)UL
CPPDEFS += -DF_CLOCK=$(F_CLOCK)UL CPPDEFS += -DF_CLOCK=$(F_CLOCK)UL

@ -194,6 +194,7 @@ ADEFS += -DBOARD=BOARD_$(BOARD)
ADEFS += -DBOOT_START_ADDR=$(BOOT_START)UL ADEFS += -DBOOT_START_ADDR=$(BOOT_START)UL
ADEFS += $(LUFA_OPTS) ADEFS += $(LUFA_OPTS)
# Place -D or -U options here for C++ sources # Place -D or -U options here for C++ sources
CPPDEFS = -DF_CPU=$(F_CPU)UL CPPDEFS = -DF_CPU=$(F_CPU)UL
CPPDEFS += -DF_CLOCK=$(F_CLOCK)UL CPPDEFS += -DF_CLOCK=$(F_CLOCK)UL

@ -6,34 +6,34 @@ OS ?= LINUX
ifeq ($(OS), LINUX) # also works on FreeBSD ifeq ($(OS), LINUX) # also works on FreeBSD
CC ?= gcc CC ?= gcc
CFLAGS ?= -O2 -Wall CFLAGS ?= -O2 -Wall
teensy_loader_cli: teensy_loader_cli.c hid_bootloader_cli: hid_bootloader_cli.c
$(CC) $(CFLAGS) -s -DUSE_LIBUSB -o teensy_loader_cli teensy_loader_cli.c -lusb $(CC) $(CFLAGS) -s -DUSE_LIBUSB -o hid_bootloader_cli hid_bootloader_cli.c -lusb
else ifeq ($(OS), WINDOWS) else ifeq ($(OS), WINDOWS)
CC = i586-mingw32msvc-gcc CC = i586-mingw32msvc-gcc
CFLAGS ?= -O2 -Wall CFLAGS ?= -O2 -Wall
teensy_loader_cli.exe: teensy_loader_cli.c hid_bootloader_cli.exe: hid_bootloader_cli.c
$(CC) $(CFLAGS) -s -DUSE_WIN32 -o teensy_loader_cli.exe teensy_loader_cli.c -lhid -lsetupapi $(CC) $(CFLAGS) -s -DUSE_WIN32 -o thid_bootloader_cli.exe hid_bootloader_cli.c -lhid -lsetupapi
else ifeq ($(OS), MACOSX) else ifeq ($(OS), MACOSX)
CC ?= gcc CC ?= gcc
SDK ?= /Developer/SDKs/MacOSX10.5.sdk SDK ?= /Developer/SDKs/MacOSX10.5.sdk
CFLAGS ?= -O2 -Wall CFLAGS ?= -O2 -Wall
teensy_loader_cli: teensy_loader_cli.c hid_bootloader_cli: hid_bootloader_cli.c
$(CC) $(CFLAGS) -DUSE_APPLE_IOKIT -isysroot $(SDK) -o teensy_loader_cli teensy_loader_cli.c -Wl,-syslibroot,$(SDK) -framework IOKit -framework CoreFoundation $(CC) $(CFLAGS) -DUSE_APPLE_IOKIT -isysroot $(SDK) -o hid_bootloader_cli hid_bootloader_cli.c -Wl,-syslibroot,$(SDK) -framework IOKit -framework CoreFoundation
else ifeq ($(OS), BSD) # works on NetBSD and OpenBSD else ifeq ($(OS), BSD) # works on NetBSD and OpenBSD
CC ?= gcc CC ?= gcct
CFLAGS ?= -O2 -Wall CFLAGS ?= -O2 -Wall
teensy_loader_cli: teensy_loader_cli.c hid_bootloader_cli: hid_bootloader_cli.c
$(CC) $(CFLAGS) -s -DUSE_UHID -o teensy_loader_cli teensy_loader_cli.c $(CC) $(CFLAGS) -s -DUSE_UHID -o teensy_loader_cli hid_bootloader_cli.c
endif endif
clean: clean:
rm -f teensy_loader_cli teensy_loader_cli.exe rm -f thid_bootloader_cli hid_bootloader_cli.exe

@ -14,8 +14,8 @@ LIBS =
.endif .endif
teensy_loader_cli: teensy_loader_cli.c hid_bootloader_cli: hid_bootloader_cli.c
$(CC) $(CFLAGS) -s -o teensy_loader_cli teensy_loader_cli.c $(LIBS) $(CC) $(CFLAGS) -s -o hid_bootloader_cli hid_bootloader_cli.c $(LIBS)
clean: clean:
rm -f teensy_loader_cli rm -f hid_bootloader_cli

@ -1,8 +1,15 @@
/* Modified for the LUFA HID Bootloader by Dean Camera
* http://www.lufa-lib.org
*
* THIS MODIFIED VERSION IS UNSUPPORTED BY PJRC.
*/
/* Teensy Loader, Command Line Interface /* Teensy Loader, Command Line Interface
* Program and Reboot Teensy Board with HalfKay Bootloader * Program and Reboot Teensy Board with HalfKay Bootloader
* http://www.pjrc.com/teensy/loader_cli.html * http://www.pjrc.com/teensy/loader_cli.html
* Copyright 2008-2010, PJRC.COM, LLC * Copyright 2008-2010, PJRC.COM, LLC
* *
*
* You may redistribute this program and/or modify it under the terms * You may redistribute this program and/or modify it under the terms
* of the GNU General Public License as published by the Free Software * of the GNU General Public License as published by the Free Software
* Foundation, version 3 of the License. * Foundation, version 3 of the License.
@ -25,7 +32,6 @@
* http://www.pjrc.com/teensy/49-teensy.rules * http://www.pjrc.com/teensy/49-teensy.rules
*/ */
#include <stdio.h> #include <stdio.h>
#include <stdlib.h> #include <stdlib.h>
#include <stdint.h> #include <stdint.h>
@ -35,13 +41,17 @@
void usage(void) void usage(void)
{ {
fprintf(stderr, "Usage: teensy_loader_cli -mmcu=<MCU> [-w] [-h] [-n] [-v] <file.hex>\n"); fprintf(stderr, "Usage: hid_bootloader_cli -mmcu=<MCU> [-w] [-h] [-n] [-v] <file.hex>\n");
fprintf(stderr, "\t-w : Wait for device to appear\n"); fprintf(stderr, "\t-w : Wait for device to appear\n");
fprintf(stderr, "\t-r : Use hard reboot if device not online\n"); fprintf(stderr, "\t-r : Use hard reboot if device not online\n");
fprintf(stderr, "\t-n : No reboot after programming\n"); fprintf(stderr, "\t-n : No reboot after programming\n");
fprintf(stderr, "\t-v : Verbose output\n"); fprintf(stderr, "\t-v : Verbose output\n");
fprintf(stderr, "\n<MCU> = atmega32u4 | at90usb162 | at90usb646 | at90usb1286\n"); fprintf(stderr, "\n<MCU> = atmegaXXuY or at90usbXXXY");
fprintf(stderr, "\nFor more information, please visit:\n");
fprintf(stderr, "\nFor support and more information, please visit:\n");
fprintf(stderr, "http://www.lufa-lub.org\n");
fprintf(stderr, "\nBased on the TeensyHID command line programmer software:\n");
fprintf(stderr, "http://www.pjrc.com/teensy/loader_cli.html\n"); fprintf(stderr, "http://www.pjrc.com/teensy/loader_cli.html\n");
exit(1); exit(1);
} }
@ -238,8 +248,13 @@ int teensy_open(void)
{ {
teensy_close(); teensy_close();
libusb_teensy_handle = open_usb_device(0x16C0, 0x0478); libusb_teensy_handle = open_usb_device(0x16C0, 0x0478);
if (libusb_teensy_handle) return 1;
return 0; if (!libusb_teensy_handle) {
libusb_teensy_handle = open_usb_device(0x03eb, 0x2067);
}
if (!libusb_teensy_handle) return 0;
return 1;
} }
int teensy_write(void *buf, int len, double timeout) int teensy_write(void *buf, int len, double timeout)
@ -267,6 +282,11 @@ int hard_reboot(void)
int r; int r;
rebootor = open_usb_device(0x16C0, 0x0477); rebootor = open_usb_device(0x16C0, 0x0477);
if (!rebootor) {
rebootor = open_usb_device(0x03eb, 0x2067);
}
if (!rebootor) return 0; if (!rebootor) return 0;
r = usb_control_msg(rebootor, 0x21, 9, 0x0200, 0, "reboot", 6, 100); r = usb_control_msg(rebootor, 0x21, 9, 0x0200, 0, "reboot", 6, 100);
usb_release_interface(rebootor, 0); usb_release_interface(rebootor, 0);
@ -393,6 +413,11 @@ int teensy_open(void)
{ {
teensy_close(); teensy_close();
win32_teensy_handle = open_usb_device(0x16C0, 0x0478); win32_teensy_handle = open_usb_device(0x16C0, 0x0478);
if (win32_teensy_handle) {
win32_teensy_handle = open_usb_device(0x03eb, 0x2067);
}
if (win32_teensy_handle) return 1; if (win32_teensy_handle) return 1;
return 0; return 0;
} }
@ -402,7 +427,6 @@ int teensy_write(void *buf, int len, double timeout)
int r; int r;
if (!win32_teensy_handle) return 0; if (!win32_teensy_handle) return 0;
r = write_usb_device(win32_teensy_handle, buf, len, (int)(timeout * 1000.0)); r = write_usb_device(win32_teensy_handle, buf, len, (int)(timeout * 1000.0));
//if (!r) print_win32_err();
return r; return r;
} }
@ -419,6 +443,11 @@ int hard_reboot(void)
int r; int r;
rebootor = open_usb_device(0x16C0, 0x0477); rebootor = open_usb_device(0x16C0, 0x0477);
if (!rebootor) {
rebootor = open_usb_device(0x03eb, 0x2067);
}
if (!rebootor) return 0; if (!rebootor) return 0;
r = write_usb_device(rebootor, "reboot", 6, 100); r = write_usb_device(rebootor, "reboot", 6, 100);
CloseHandle(rebootor); CloseHandle(rebootor);
@ -571,6 +600,11 @@ int teensy_open(void)
{ {
teensy_close(); teensy_close();
iokit_teensy_reference = open_usb_device(0x16C0, 0x0478); iokit_teensy_reference = open_usb_device(0x16C0, 0x0478);
if (!iokit_teensy_reference) {
iokit_teensy_reference = open_usb_device(0x03eb, 0x2067);
}
if (iokit_teensy_reference) return 1; if (iokit_teensy_reference) return 1;
return 0; return 0;
} }
@ -603,6 +637,11 @@ int hard_reboot(void)
IOReturn ret; IOReturn ret;
rebootor = open_usb_device(0x16C0, 0x0477); rebootor = open_usb_device(0x16C0, 0x0477);
if (!rebootor) {
rebootor = open_usb_device(0x03eb, 0x2067);
}
if (!rebootor) return 0; if (!rebootor) return 0;
ret = IOHIDDeviceSetReport(rebootor, ret = IOHIDDeviceSetReport(rebootor,
kIOHIDReportTypeOutput, 0, (uint8_t *)("reboot"), 6); kIOHIDReportTypeOutput, 0, (uint8_t *)("reboot"), 6);
@ -704,6 +743,11 @@ int hard_reboot(void)
int r, rebootor_fd; int r, rebootor_fd;
rebootor_fd = open_usb_device(0x16C0, 0x0477); rebootor_fd = open_usb_device(0x16C0, 0x0477);
if (rebootor_fd < 0) {
rebootor_fd = open_usb_device(0x03eb, 0x2067);
}
if (rebootor_fd < 0) return 0; if (rebootor_fd < 0) return 0;
r = write(rebootor_fd, "reboot", 6); r = write(rebootor_fd, "reboot", 6);
delay(0.1); delay(0.1);
@ -925,7 +969,7 @@ void parse_options(int argc, char **argv)
for (i=1; i<argc; i++) { for (i=1; i<argc; i++) {
arg = argv[i]; arg = argv[i];
//printf("arg: %s\n", arg);
if (*arg == '-') { if (*arg == '-') {
if (strcmp(arg, "-w") == 0) { if (strcmp(arg, "-w") == 0) {
wait_for_device_to_appear = 1; wait_for_device_to_appear = 1;
@ -936,18 +980,35 @@ void parse_options(int argc, char **argv)
} else if (strcmp(arg, "-v") == 0) { } else if (strcmp(arg, "-v") == 0) {
verbose = 1; verbose = 1;
} else if (strncmp(arg, "-mmcu=", 6) == 0) { } else if (strncmp(arg, "-mmcu=", 6) == 0) {
if (strcasecmp(arg+6, "at90usb162") == 0) { arg += 6;
code_size = 15872;
block_size = 128; uint8_t valid_prefix = 0;
} else if (strcasecmp(arg+6, "atmega32u4") == 0) {
code_size = 32256; if (strncmp(arg, "at90usb", 7) == 0) {
block_size = 128; valid_prefix = 1;
} else if (strcasecmp(arg+6, "at90usb646") == 0) { arg += 7;
code_size = 64512; } else if (strncmp(arg, "atmega", 6) == 0) {
valid_prefix = 1;
arg += 6;
} else {
die("Unknown MCU type\n");
}
if (strncmp(arg, "128", 3) == 0) {
code_size = 128 * 1024;
block_size = 256; block_size = 256;
} else if (strcasecmp(arg+6, "at90usb1286") == 0) { } else if (strncmp(arg, "64", 2) == 0) {
code_size = 130048; code_size = 64 * 1024;
block_size = 256; block_size = 256;
} else if (strncmp(arg, "32", 2) == 0) {
code_size = 32 * 1024;
block_size = 128;
} else if (strncmp(arg, "16", 2) == 0) {
code_size = 16 * 1024;
block_size = 128;
} else if (strncmp(arg, "8", 1) == 0) {
code_size = 8 * 1024;
block_size = 128;
} else { } else {
die("Unknown MCU type\n"); die("Unknown MCU type\n");
} }

@ -124,12 +124,6 @@ LUFA_OPTS += -D USE_STATIC_OPTIONS="(USB_DEVICE_OPT_FULLSPEED | USB_OPT_REG_ENAB
LUFA_OPTS += -D NO_INTERNAL_SERIAL LUFA_OPTS += -D NO_INTERNAL_SERIAL
LUFA_OPTS += -D NO_DEVICE_SELF_POWER LUFA_OPTS += -D NO_DEVICE_SELF_POWER
LUFA_OPTS += -D NO_DEVICE_REMOTE_WAKEUP LUFA_OPTS += -D NO_DEVICE_REMOTE_WAKEUP
LUFA_OPTS += -D NO_SOF_EVENTS
#LUFA_OPTS += -D NO_BLOCK_SUPPORT
#LUFA_OPTS += -D NO_EEPROM_BYTE_SUPPORT
#LUFA_OPTS += -D NO_FLASH_BYTE_SUPPORT
#LUFA_OPTS += -D NO_LOCK_BYTE_WRITE_SUPPORT
# Create the LUFA source path variables by including the LUFA root makefile # Create the LUFA source path variables by including the LUFA root makefile
@ -199,6 +193,7 @@ ADEFS += -DBOARD=BOARD_$(BOARD)
ADEFS += -DBOOT_START_ADDR=$(BOOT_START)UL ADEFS += -DBOOT_START_ADDR=$(BOOT_START)UL
ADEFS += $(LUFA_OPTS) ADEFS += $(LUFA_OPTS)
# Place -D or -U options here for C++ sources # Place -D or -U options here for C++ sources
CPPDEFS = -DF_CPU=$(F_CPU)UL CPPDEFS = -DF_CPU=$(F_CPU)UL
CPPDEFS += -DF_CLOCK=$(F_CLOCK)UL CPPDEFS += -DF_CLOCK=$(F_CLOCK)UL

File diff suppressed because one or more lines are too long

@ -96,8 +96,9 @@
* - <b>ClassDriver</b> * - <b>ClassDriver</b>
* - <b>MouseHostDevice</b> - Dual role Mouse Host and Mouse Device demo, using the library USB CDC Class driver framework * - <b>MouseHostDevice</b> - Dual role Mouse Host and Mouse Device demo, using the library USB CDC Class driver framework
* - <b>Bootloaders</b> * - <b>Bootloaders</b>
* - <b>DFU</b> - DFU Class USB bootloader, compatible with Atmel's FLIP and the open source dfu-programmer software
* - <b>CDC</b> - CDC Class USB bootloader, compatible with any AVR910 protocol programming software such as AVRDude * - <b>CDC</b> - CDC Class USB bootloader, compatible with any AVR910 protocol programming software such as AVRDude
* - <b>DFU</b> - DFU Class USB bootloader, compatible with Atmel's FLIP and the open source dfu-programmer software
* - <b>HID</b> - HID Class USB bootloader, compatible with a modified PJRC TeensyHID protocol loader application software
* - <b>Projects</b> * - <b>Projects</b>
* - <b>AVRISP-MKII</b> - AVRISP-MKII Programmer Clone project * - <b>AVRISP-MKII</b> - AVRISP-MKII Programmer Clone project
* - <b>Benito</b> - Benito Board Arduino Programmer project * - <b>Benito</b> - Benito Board Arduino Programmer project

Loading…
Cancel
Save