X-Git-Url: https://git.gag.com/?p=fw%2Faltos;a=blobdiff_plain;f=altoslib%2FAltosHexfile.java;fp=altoslib%2FAltosHexfile.java;h=cf99cded5ade7303fb337b299d2613cfc561021d;hp=609d1bcb366f9f3ae747633f1f0a51e8894d04ad;hb=5bdf8eeb1cdc1a50c9abd0f8962533f6970bd7f0;hpb=946faa1541f69c6cf2759c13760fa9bc16e2298e diff --git a/altoslib/AltosHexfile.java b/altoslib/AltosHexfile.java index 609d1bcb..cf99cded 100644 --- a/altoslib/AltosHexfile.java +++ b/altoslib/AltosHexfile.java @@ -295,15 +295,20 @@ public class AltosHexfile { return -1; try { - /* Walk the descriptors looking for the device */ + /* 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; - while (get_u8(a+1) != AO_USB_DESC_DEVICE) { - int delta = get_u8(a); - a += delta; - if (delta == 0 || a >= max_address) - return -1; - } - return a; + + 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; }