summaryrefslogtreecommitdiff
path: root/ao-tools/lib/ao-selfload.c
diff options
context:
space:
mode:
authorKeith Packard <keithp@keithp.com>2016-08-14 15:57:39 -0700
committerKeith Packard <keithp@keithp.com>2016-08-14 15:57:39 -0700
commit462039c769f2db9328b04759807c30691f2b96c2 (patch)
tree95abe520de391e20143baf8e31283de5c6e13fe5 /ao-tools/lib/ao-selfload.c
parentc62816a00b9aa40879a2ea98da2d10667e09b704 (diff)
ao-usbload: Check target device name to avoid mis-flashing
Instead of blindly loading firmware, go get the old device's name and make sure it matches the new firmware. Add --force option to allow this to be overridden. Signed-off-by: Keith Packard <keithp@keithp.com>
Diffstat (limited to 'ao-tools/lib/ao-selfload.c')
-rw-r--r--ao-tools/lib/ao-selfload.c37
1 files changed, 37 insertions, 0 deletions
diff --git a/ao-tools/lib/ao-selfload.c b/ao-tools/lib/ao-selfload.c
index b4b878d1..0a23dfda 100644
--- a/ao-tools/lib/ao-selfload.c
+++ b/ao-tools/lib/ao-selfload.c
@@ -157,3 +157,40 @@ ao_self_get_uint32(struct cc_usb *cc, uint32_t addr)
free(hex);
return v;
}
+
+bool
+ao_self_get_usb_id(struct cc_usb *cc, struct ao_usb_id *id)
+{
+ struct ao_hex_image *hex;
+ bool ret;
+
+ if (!AO_USB_DESCRIPTORS)
+ return false;
+
+ hex = ao_self_read(cc, AO_USB_DESCRIPTORS, 512);
+ if (!hex)
+ return false;
+
+ ret = ao_heximage_usb_id(hex, id);
+ free(hex);
+ return ret;
+}
+
+uint16_t *
+ao_self_get_usb_product(struct cc_usb *cc)
+{
+ struct ao_hex_image *hex;
+ uint16_t *ret;
+
+ if (!AO_USB_DESCRIPTORS)
+ return NULL;
+
+ hex = ao_self_read(cc, AO_USB_DESCRIPTORS, 512);
+ if (!hex)
+ return NULL;
+
+ ret = ao_heximage_usb_product(hex);
+ free(hex);
+ return ret;
+}
+