fprintf(stderr, "\n<MCU> = atmegaXXuY or at90usbXXXY");
fprintf(stderr, "\nFor support and more information, please visit:\n");
- fprintf(stderr, "http://www.lufa-lub.org\n");
+ fprintf(stderr, "http://www.lufa-lib.org\n");
fprintf(stderr, "\nBased on the TeensyHID command line programmer software:\n");
fprintf(stderr, "http://www.pjrc.com/teensy/loader_cli.html\n");
struct usb_bus *bus;
struct usb_device *dev;
usb_dev_handle *h;
+ #ifdef LIBUSB_HAS_GET_DRIVER_NP
char buf[128];
+ #endif
int r;
usb_init();
teensy_close();
libusb_teensy_handle = open_usb_device(0x16C0, 0x0478);
- if (!libusb_teensy_handle) {
+ if (!libusb_teensy_handle)
libusb_teensy_handle = open_usb_device(0x03eb, 0x2067);
- }
if (!libusb_teensy_handle) return 0;
return 1;
rebootor = open_usb_device(0x16C0, 0x0477);
- if (!rebootor) {
+ if (!rebootor)
rebootor = open_usb_device(0x03eb, 0x2067);
- }
if (!rebootor) return 0;
r = usb_control_msg(rebootor, 0x21, 9, 0x0200, 0, "reboot", 6, 100);
if (r != WAIT_OBJECT_0) return 0;
}
if (!GetOverlappedResult(h, &ov, &n, FALSE)) return 0;
- if (n <= 0) return 0;
return 1;
}
-void print_win32_err(void)
-{
- char buf[256];
- DWORD err;
-
- err = GetLastError();
- FormatMessage(FORMAT_MESSAGE_FROM_SYSTEM, NULL, err,
- 0, buf, sizeof(buf), NULL);
- printf("err %ld: %s\n", err, buf);
-}
-
static HANDLE win32_teensy_handle = NULL;
int teensy_open(void)
teensy_close();
win32_teensy_handle = open_usb_device(0x16C0, 0x0478);
- if (win32_teensy_handle) {
+ if (!win32_teensy_handle)
win32_teensy_handle = open_usb_device(0x03eb, 0x2067);
- }
- if (win32_teensy_handle) return 1;
- return 0;
+ if (!win32_teensy_handle) return 0;
+ return 1;
}
int teensy_write(void *buf, int len, double timeout)
rebootor = open_usb_device(0x16C0, 0x0477);
- if (!rebootor) {
+ if (!rebootor)
rebootor = open_usb_device(0x03eb, 0x2067);
- }
if (!rebootor) return 0;
r = write_usb_device(rebootor, "reboot", 6, 100);
teensy_close();
iokit_teensy_reference = open_usb_device(0x16C0, 0x0478);
- if (!iokit_teensy_reference) {
+ if (!iokit_teensy_reference)
iokit_teensy_reference = open_usb_device(0x03eb, 0x2067);
- }
- if (iokit_teensy_reference) return 1;
- return 0;
+ if (!iokit_teensy_reference) return 0;
+ return 1;
}
int teensy_write(void *buf, int len, double timeout)
rebootor = open_usb_device(0x16C0, 0x0477);
- if (!rebootor) {
+ if (!rebootor)
rebootor = open_usb_device(0x03eb, 0x2067);
- }
if (!rebootor) return 0;
ret = IOHIDDeviceSetReport(rebootor,
#include <dev/usb/usb_ioctl.h>
#endif
+#ifndef USB_GET_DEVICEINFO
+# define USB_GET_DEVICEINFO 0
+# error The USB_GET_DEVICEINFO ioctl() value is not defined for your system.
+#endif
+
int open_usb_device(int vid, int pid)
{
int r, fd;
{
teensy_close();
uhid_teensy_fd = open_usb_device(0x16C0, 0x0478);
+
+ if (uhid_teensy_fd < 0)
+ uhid_teensy_fd = open_usb_device(0x03eb, 0x2067);
+
if (uhid_teensy_fd < 0) return 0;
return 1;
}
{
int r;
- // TODO: imeplement timeout... how??
+ // TODO: implement timeout... how??
r = write(uhid_teensy_fd, buf, len);
if (r == len) return 1;
return 0;
rebootor_fd = open_usb_device(0x16C0, 0x0477);
- if (rebootor_fd < 0) {
+ if (rebootor_fd < 0)
rebootor_fd = open_usb_device(0x03eb, 0x2067);
- }
if (rebootor_fd < 0) return 0;
r = write(rebootor_fd, "reboot", 6);
if (*buf) {
if (parse_hex_line(buf) == 0) {
//printf("Warning, parse error line %d\n", lineno);
+ fclose(fp);
return -2;
}
}
/* parses a line of intel hex code, stores the data in bytes[] */
/* and the beginning address in addr, and returns a 1 if the */
-/* line was valid, or a 0 if an error occured. The variable */
+/* line was valid, or a 0 if an error occurred. The variable */
/* num gets the number of bytes that were stored into bytes[] */
int addr, code, num;
int sum, len, cksum, i;
char *ptr;
-
+
num = 0;
if (line[0] != ':') return 0;
if (strlen(line) < 11) return 0;
} else if (strncmp(arg, "-mmcu=", 6) == 0) {
arg += 6;
- uint8_t valid_prefix = 0;
-
if (strncmp(arg, "at90usb", 7) == 0) {
- valid_prefix = 1;
arg += 7;
} else if (strncmp(arg, "atmega", 6) == 0) {
- valid_prefix = 1;
arg += 6;
} else {
die("Unknown MCU type\n");