From c17d30f20466861a244c603665c580feb7758abf Mon Sep 17 00:00:00 2001 From: Amaury Pouly Date: Tue, 4 Feb 2014 00:10:41 +0100 Subject: utils/hwstub: completely rework the protocol, drop unused features The protocol has evolved a lot during the 2.x.y lifetime, bringing more features which later got unused. This commit removes all the unused stuff and simplifies everything: - drop the feature mask: everything is mandatory or stalled on error - remove the info request and put all static information in standard USB descriptors which are part of the configuration descriptor (and can be retrieved using the standard GetDescriptor request). - remove the USB interface, we had only one anyway - remove all endpoint descriptors - remove the exit/atexit stuff, it never worked as intended anyway - update the hwstub library and make it able to handle any device - update the tools (mostly renaming and removing of code) Change-Id: I1872bba7f4177fc3891180e8f944aab88f5bde31 --- utils/hwstub/tools/hwstub_load.cpp | 61 +++++++++++++------------------------- 1 file changed, 20 insertions(+), 41 deletions(-) (limited to 'utils/hwstub/tools/hwstub_load.cpp') diff --git a/utils/hwstub/tools/hwstub_load.cpp b/utils/hwstub/tools/hwstub_load.cpp index 58c8ac726f..8782c158d7 100644 --- a/utils/hwstub/tools/hwstub_load.cpp +++ b/utils/hwstub/tools/hwstub_load.cpp @@ -121,7 +121,7 @@ void usage(void) int main(int argc, char **argv) { bool quiet = false; - struct hwstub_device_t hwdev; + struct hwstub_device_t *hwdev; enum image_type_t type = IT_DETECT; // parse command line @@ -244,73 +244,52 @@ int main(int argc, char **argv) libusb_get_bus_number(mydev), libusb_get_device_address(mydev)); } - hwdev.handle = handle; - if(hwstub_probe(&hwdev)) + hwdev = hwstub_open(handle); + if(hwdev == NULL) { fprintf(stderr, "Cannot probe device!\n"); return 1; } // get hwstub information - struct usb_resp_info_version_t hwdev_ver; - int ret = hwstub_get_info(&hwdev, HWSTUB_INFO_VERSION, &hwdev_ver, sizeof(hwdev_ver)); + struct hwstub_version_desc_t hwdev_ver; + int ret = hwstub_get_desc(hwdev, HWSTUB_DT_VERSION, &hwdev_ver, sizeof(hwdev_ver)); if(ret != sizeof(hwdev_ver)) { fprintf(stderr, "Cannot get version!\n"); goto Lerr; } - if(hwdev_ver.major != HWSTUB_VERSION_MAJOR || hwdev_ver.minor < HWSTUB_VERSION_MINOR) + if(hwdev_ver.bMajor != HWSTUB_VERSION_MAJOR || hwdev_ver.bMinor < HWSTUB_VERSION_MINOR) { printf("Warning: this tool is possibly incompatible with your device:\n"); - printf("Device version: %d.%d.%d\n", hwdev_ver.major, hwdev_ver.minor, hwdev_ver.revision); + printf("Device version: %d.%d.%d\n", hwdev_ver.bMajor, hwdev_ver.bMinor, hwdev_ver.bRevision); printf("Host version: %d.%d.%d\n", HWSTUB_VERSION_MAJOR, HWSTUB_VERSION_MINOR, HWSTUB_VERSION_REV); } - // get features - struct usb_resp_info_features_t hwdev_features; - ret = hwstub_get_info(&hwdev, HWSTUB_INFO_FEATURES, &hwdev_features, sizeof(hwdev_features)); - if(ret != sizeof(hwdev_features)) - { - fprintf(stderr, "Cannot get features: %d\n", ret); - goto Lerr; - } - if(!(hwdev_features.feature_mask & HWSTUB_RW_MEM)) - { - fprintf(stderr, "Device doesn't support R/W commands\n"); - goto Lerr; - } - if(!(hwdev_features.feature_mask & HWSTUB_JUMP)) - { - fprintf(stderr, "Device doesn't support jump commands\n"); - goto Lerr; - } - ret = hwstub_rw_mem(&hwdev, 0, addr, buffer, size); + ret = hwstub_rw_mem(hwdev, 0, addr, buffer, size); if(ret != (int)size) { fprintf(stderr, "Image write failed\n"); goto Lerr; } - hwstub_jump(&hwdev, addr); + hwstub_jump(hwdev, addr); - hwstub_release(&hwdev); + hwstub_release(hwdev); return 0; Lerr: // display log if handled - if(hwdev_features.feature_mask & HWSTUB_FEATURE_LOG) + fprintf(stderr, "Device log:\n"); + do { - fprintf(stderr, "Device log:\n"); - do - { - char buffer[128]; - int length = hwstub_get_log(&hwdev, buffer, sizeof(buffer) - 1); - if(length <= 0) - break; - buffer[length] = 0; - fprintf(stderr, "%s", buffer); - }while(1); - } - hwstub_release(&hwdev); + char buffer[128]; + int length = hwstub_get_log(hwdev, buffer, sizeof(buffer) - 1); + if(length <= 0) + break; + buffer[length] = 0; + fprintf(stderr, "%s", buffer); + }while(1); + hwstub_release(hwdev); return 1; } -- cgit v1.2.3