X-Git-Url: https://git.gag.com/?a=blobdiff_plain;f=altoslib%2FAltosHexfile.java;h=cf99cded5ade7303fb337b299d2613cfc561021d;hb=695dba4e37ccca9a2dc06e1656699a13406002c1;hp=6aa98383e9fc38d92d93b928a97d4990c6fc8258;hpb=ee79a205e118ea8730a02cc327d8fb79cc5f74ff;p=fw%2Faltos diff --git a/altoslib/AltosHexfile.java b/altoslib/AltosHexfile.java index 6aa98383..cf99cded 100644 --- a/altoslib/AltosHexfile.java +++ b/altoslib/AltosHexfile.java @@ -16,7 +16,7 @@ * 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. */ -package org.altusmetrum.altoslib_12; +package org.altusmetrum.altoslib_13; import java.io.*; import java.util.LinkedList; @@ -294,15 +294,24 @@ public class AltosHexfile { if (usb_descriptors == null) return -1; - /* Walk the descriptors looking for the device */ - a = usb_descriptors.address; - while (get_u8(a+1) != AO_USB_DESC_DEVICE) { - int delta = get_u8(a); - a += delta; - if (delta == 0 || a >= max_address) - return -1; + try { + /* The address of this has moved depending on + * padding in the linker script. Look forward + * and backwards two bytes to see if we can find it + */ + a = usb_descriptors.address; + + if (get_u8(a) == 0x12 && get_u8(a+1) == AO_USB_DESC_DEVICE) + return a; + else if (get_u8(a+1) == 0x12 && get_u8(a+3) == AO_USB_DESC_DEVICE) + return a + 2; + else if (get_u8(a-2) == 0x12 && get_u8(a-1) == AO_USB_DESC_DEVICE) + return a - 2; + + return -1; + } catch (ArrayIndexOutOfBoundsException ae) { + return -1; } - return a; } public AltosUsbId find_usb_id() { @@ -350,11 +359,6 @@ public class AltosHexfile { int product_len = get_u8(a); - System.out.printf("Product is at %x length %d\n", a, product_len); - - for (int i = 0; i < product_len; i++) - System.out.printf(" %2d: %02x\n", i, get_u8(a+i)); - if (product_len <= 0) return null; @@ -363,12 +367,11 @@ public class AltosHexfile { for (int i = 0; i < product_len - 2; i += 2) { int c = get_u16(a + 2 + i); - System.out.printf("character %x\n", c); - product += Character.toString((char) c); } - System.out.printf("product %s\n", product); + if (AltosLink.debug) + System.out.printf("product %s\n", product); return product; }