*
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; version 2 of the License.
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
*
* This program is distributed in the hope that it will be useful, but
* WITHOUT ANY WARRANTY; without even the implied warranty of
start = image->address;
if (stop > image->address + image->length)
stop = image->address + image->length;
+ memset(block, 0xff, 0x100);
memcpy(block + start - address, image->data + start - image->address, stop - start);
ao_self_block_write(cc, address, block);
ao_self_block_read(cc, address, check);
cc_usb_printf(cc,"a\n");
return 1;
}
+
+/*
+ * Read a 16-bit value from the USB target
+ */
+
+uint16_t
+ao_self_get_uint16(struct cc_usb *cc, uint32_t addr)
+{
+ struct ao_hex_image *hex = ao_self_read(cc, addr, 2);
+ uint16_t v;
+ uint8_t *data;
+
+ if (!hex)
+ return 0;
+ data = hex->data + addr - hex->address;
+ v = data[0] | (data[1] << 8);
+ free(hex);
+ return v;
+}
+
+uint32_t
+ao_self_get_uint32(struct cc_usb *cc, uint32_t addr)
+{
+ struct ao_hex_image *hex = ao_self_read(cc, addr, 4);
+ uint32_t v;
+ uint8_t *data;
+
+ if (!hex)
+ return 0;
+ data = hex->data + addr - hex->address;
+ v = data[0] | (data[1] << 8) | (data[2] << 16) | (data[3] << 24);
+ 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;
+}
+