mirror of
https://github.com/Telecominfraproject/OpenCellular.git
synced 2025-12-27 18:25:05 +00:00
usb_updater: report running H1 firmware
Add a command line option which allows to retrieve version currently running on the cr50 device. BRANCH=none BUG=chrome-os-partner:58794 TEST=run the following command: $ sudo ./extra/usb_updater/usb_updater -f open_device 18d1:5014 found interface 4 endpoint 5, chunk_len 64 READY ------- start Target running protocol version 5 Offsets: backup RO at 0, backup RW at 0x4000 Keyids: RO 0x3716ee6b, RW 0xb93d6539 Current versions: RO 0.0.9 RW 0.0.8 Change-Id: Ia34f455d3ca826a24992adf123a07865dccb1d57 Signed-off-by: Aaron Durbin <adurbin@chromium.org> Signed-off-by: Vadim Bendebury <vbendeb@chromium.org> Reviewed-on: https://chromium-review.googlesource.com/400418 Reviewed-by: Furquan Shaikh <furquan@chromium.org>
This commit is contained in:
@@ -197,7 +197,7 @@ struct transfer_descriptor {
|
||||
|
||||
static uint32_t protocol_version;
|
||||
static char *progname;
|
||||
static char *short_opts = ":bd:hsu";
|
||||
static char *short_opts = ":bfd:hsu";
|
||||
static const struct option long_opts[] = {
|
||||
/* name hasarg *flag val */
|
||||
{"binvers", 0, NULL, 'b'},
|
||||
@@ -205,6 +205,7 @@ static const struct option long_opts[] = {
|
||||
{"help", 0, NULL, 'h'},
|
||||
{"spi", 0, NULL, 's'},
|
||||
{"upstart", 0, NULL, 'u'},
|
||||
{"fwver", 0, NULL, 'f'},
|
||||
{NULL, 0, NULL, 0},
|
||||
};
|
||||
|
||||
@@ -303,6 +304,7 @@ static void usage(int errs)
|
||||
" -b,--binvers Report versions of image's "
|
||||
"RW and RO headers, do not update\n"
|
||||
" -d,--device VID:PID USB device (default %04x:%04x)\n"
|
||||
" -f,--fwver Report running firmware versions.\n"
|
||||
" -h,--help Show this message\n"
|
||||
" -s,--spi Use /dev/tmp0 (-d is ignored)\n"
|
||||
" -u,--upstart "
|
||||
@@ -957,8 +959,6 @@ static int transfer_and_reboot(struct transfer_descriptor *td,
|
||||
size_t i;
|
||||
int num_txed_secitons = 0;
|
||||
|
||||
setup_connection(td);
|
||||
|
||||
for (i = 0; i < ARRAY_SIZE(sections); i++)
|
||||
if (sections[i].ustatus == needed) {
|
||||
transfer_section(td,
|
||||
@@ -1040,6 +1040,7 @@ int main(int argc, char *argv[])
|
||||
size_t j;
|
||||
int transferred_sections;
|
||||
int binary_vers = 0;
|
||||
int show_fw_ver = 0;
|
||||
|
||||
progname = strrchr(argv[0], '/');
|
||||
if (progname)
|
||||
@@ -1064,6 +1065,9 @@ int main(int argc, char *argv[])
|
||||
errorcnt++;
|
||||
}
|
||||
break;
|
||||
case 'f':
|
||||
show_fw_ver = 1;
|
||||
break;
|
||||
case 'h':
|
||||
usage(errorcnt);
|
||||
break;
|
||||
@@ -1096,26 +1100,28 @@ int main(int argc, char *argv[])
|
||||
if (errorcnt)
|
||||
usage(errorcnt);
|
||||
|
||||
if (optind >= argc) {
|
||||
fprintf(stderr,
|
||||
"\nERROR: Missing required <binary image>\n\n");
|
||||
usage(1);
|
||||
if (!show_fw_ver) {
|
||||
if (optind >= argc) {
|
||||
fprintf(stderr,
|
||||
"\nERROR: Missing required <binary image>\n\n");
|
||||
usage(1);
|
||||
}
|
||||
|
||||
data = get_file_or_die(argv[optind], &data_len);
|
||||
printf("read %zd(%#zx) bytes from %s\n",
|
||||
data_len, data_len, argv[optind]);
|
||||
if (data_len != CONFIG_FLASH_SIZE) {
|
||||
fprintf(stderr, "Image file is not %d bytes\n",
|
||||
CONFIG_FLASH_SIZE);
|
||||
exit(update_error);
|
||||
}
|
||||
|
||||
fetch_header_versions(data);
|
||||
|
||||
if (binary_vers)
|
||||
exit(show_headers_versions(data));
|
||||
}
|
||||
|
||||
data = get_file_or_die(argv[optind], &data_len);
|
||||
printf("read %zd(%#zx) bytes from %s\n",
|
||||
data_len, data_len, argv[optind]);
|
||||
if (data_len != CONFIG_FLASH_SIZE) {
|
||||
fprintf(stderr, "Image file is not %d bytes\n",
|
||||
CONFIG_FLASH_SIZE);
|
||||
exit(update_error);
|
||||
}
|
||||
|
||||
fetch_header_versions(data);
|
||||
|
||||
if (binary_vers)
|
||||
exit(show_headers_versions(data));
|
||||
|
||||
if (td.ep_type == usb_xfer) {
|
||||
usb_findit(vid, pid, &td.uep);
|
||||
} else {
|
||||
@@ -1126,10 +1132,22 @@ int main(int argc, char *argv[])
|
||||
}
|
||||
}
|
||||
|
||||
transferred_sections = transfer_and_reboot(&td, data, data_len);
|
||||
setup_connection(&td);
|
||||
|
||||
printf("bye\n");
|
||||
free(data);
|
||||
if (show_fw_ver) {
|
||||
printf("Current versions:\n");
|
||||
printf("RO %d.%d.%d\n", targ.shv[0].epoch, targ.shv[0].major,
|
||||
targ.shv[0].minor);
|
||||
printf("RW %d.%d.%d\n", targ.shv[1].epoch, targ.shv[1].major,
|
||||
targ.shv[1].minor);
|
||||
}
|
||||
|
||||
if (data) {
|
||||
transferred_sections = transfer_and_reboot(&td, data, data_len);
|
||||
|
||||
printf("bye\n");
|
||||
free(data);
|
||||
}
|
||||
if (td.ep_type == usb_xfer) {
|
||||
libusb_close(td.uep.devh);
|
||||
libusb_exit(NULL);
|
||||
|
||||
Reference in New Issue
Block a user