void aw_fel_get_version(libusb_device_handle *usb) { struct aw_fel_version { char signature[8]; uint32_t soc_id; /* 0x00162300 */ uint32_t unknown_0a; /* 1 */ uint16_t protocol; /* 1 */ uint8_t unknown_12; /* 0x44 */ uint8_t unknown_13; /* 0x08 */ uint32_t scratchpad; /* 0x7e00 */ uint32_t pad[2]; /* unused */ } __attribute__((packed)) buf; aw_send_fel_request(usb, AW_FEL_VERSION, 0, 0); aw_usb_read(usb, &buf, sizeof(buf)); aw_read_fel_status(usb); buf.soc_id = le32toh(buf.soc_id); buf.unknown_0a = le32toh(buf.unknown_0a); buf.protocol = le32toh(buf.protocol); buf.scratchpad = le16toh(buf.scratchpad); buf.pad[0] = le32toh(buf.pad[0]); buf.pad[1] = le32toh(buf.pad[1]); const char *soc_name="unknown"; switch ((buf.soc_id >> 8) & 0xFFFF) { case 0x1623: soc_name="A10";break; case 0x1625: soc_name="A13";break; case 0x1633: soc_name="A31";break; case 0x1651: soc_name="A20";break; } printf("%.8s soc=%08x(%s) %08x ver=%04x %02x %02x scratchpad=%08x %08x %08x\n", buf.signature, buf.soc_id, soc_name, buf.unknown_0a, buf.protocol, buf.unknown_12, buf.unknown_13, buf.scratchpad, buf.pad[0], buf.pad[1]); }
void aw_fel_get_version(libusb_device_handle *usb) { struct aw_fel_version { char signature[8]; uint32_t unknown_08; /* 0x00162300 */ uint32_t unknown_0a; /* 1 */ uint16_t protocol; /* 1 */ uint8_t unknown_12; /* 0x44 */ uint8_t unknown_13; /* 0x08 */ uint32_t scratchpad; /* 0x7e00 */ uint32_t pad[2]; /* unused */ } __attribute__((packed)) buf; aw_send_fel_request(usb, AW_FEL_VERSION, 0, 0); aw_usb_read(usb, &buf, sizeof(buf)); aw_read_fel_status(usb); buf.unknown_08 = le32toh(buf.unknown_08); buf.unknown_0a = le32toh(buf.unknown_0a); buf.protocol = le32toh(buf.protocol); buf.scratchpad = le16toh(buf.scratchpad); buf.pad[0] = le32toh(buf.pad[0]); buf.pad[1] = le32toh(buf.pad[1]); printf("%.8s %08x %08x ver=%04x %02x %02x scratchpad=%08x %08x %08x\n", buf.signature, buf.unknown_08, buf.unknown_0a, buf.protocol, buf.unknown_12, buf.unknown_13, buf.scratchpad, buf.pad[0], buf.pad[1]); }
void aw_fel_get_version(libusb_device_handle *usb) { struct aw_fel_version { char signature[8]; uint16_t unknown1; uint16_t unknown2; uint32_t unknown3; uint16_t protocol; uint16_t unknown4; uint16_t unknown5; uint16_t unknown6; uint16_t unknown7; uint16_t unknown8; uint16_t unknown9; uint16_t unknown10; } __attribute__((packed)) buf; aw_send_fel_request(usb, AW_FEL_VERSION, 0, 0); aw_usb_read(usb, &buf, sizeof(buf)); aw_read_fel_status(usb); buf.unknown1 = le16toh(buf.unknown1); buf.unknown2 = le16toh(buf.unknown2); buf.unknown3 = le16toh(buf.unknown3); buf.protocol = le32toh(buf.protocol); buf.unknown4 = le16toh(buf.unknown4); buf.unknown5 = le16toh(buf.unknown5); buf.unknown6 = le16toh(buf.unknown6); buf.unknown7 = le16toh(buf.unknown7); buf.unknown8 = le16toh(buf.unknown8); buf.unknown9 = le16toh(buf.unknown9); buf.unknown10 = le16toh(buf.unknown10); printf("%.8s %04x %04x %08x ver=%04x %04x %04x %04x %04x %04x %04x %04x\n", buf.signature, le16toh(buf.unknown1), le16toh(buf.unknown2), le16toh(buf.unknown3), buf.protocol, buf.unknown4, buf.unknown5, buf.unknown6, buf.unknown7, buf.unknown8, buf.unknown9, buf.unknown10); }
void aw_fel_read(libusb_device_handle *usb, uint32_t offset, void *buf, size_t len) { aw_send_fel_request(usb, AW_FEL_1_READ, offset, len); aw_usb_read(usb, buf, len); aw_read_fel_status(usb); }
void aw_read_fel_status(libusb_device_handle *usb) { char buf[8]; aw_usb_read(usb, &buf, sizeof(buf)); }