X-Git-Url: https://git.gag.com/?a=blobdiff_plain;f=altoslib%2FAltosHexfile.java;h=14f660a0bbcb0c4d38f406d31d2029d3fea3c711;hb=c1b754c12ac32ed38a561d8b35dcbdf82beea896;hp=609d1bcb366f9f3ae747633f1f0a51e8894d04ad;hpb=3c48b0fd504ae97dfaca91d2064b5822ca6e1344;p=fw%2Faltos diff --git a/altoslib/AltosHexfile.java b/altoslib/AltosHexfile.java index 609d1bcb..14f660a0 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_13; +package org.altusmetrum.altoslib_14; import java.io.*; import java.util.LinkedList; @@ -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; }