From d5028a12ca539638a6ae5d923e7dba0e4f30a45a Mon Sep 17 00:00:00 2001 From: Sebastian Reichel Date: Mon, 11 Jan 2016 08:41:58 +0100 Subject: all: Switch to libusb-1.0 libusb 0.1 is deprecated. This updates 0xFFFF to use the newer libusb 1.0 API instead. --- src/cold-flash.c | 85 ++++++++++++++++++++++++++++++-------------------------- 1 file changed, 46 insertions(+), 39 deletions(-) (limited to 'src/cold-flash.c') diff --git a/src/cold-flash.c b/src/cold-flash.c index eb2ca67..1c9d95b 100644 --- a/src/cold-flash.c +++ b/src/cold-flash.c @@ -21,10 +21,10 @@ #include #include #include -#include -#include "global.h" +#include +#include "global.h" #include "cold-flash.h" #include "image.h" #include "usb-device.h" @@ -168,37 +168,41 @@ struct xloader_msg xloader_msg_create(uint32_t type, struct image * image) { } -static int read_asic(usb_dev_handle * udev, uint8_t * asic_buffer, int size, int asic_size) { +static int read_asic(libusb_device_handle * udev, uint8_t * asic_buffer, int size, int asic_size) { - int ret; + int ret, transferred; printf("Waiting for ASIC ID...\n"); - ret = usb_bulk_read(udev, READ_DEV, (char *)asic_buffer, size, READ_TIMEOUT); - if ( ret != asic_size ) + ret = libusb_bulk_transfer(udev, READ_DEV, (unsigned char *)asic_buffer, size, &transferred, READ_TIMEOUT); + if ( ret < 0 ) + ERROR_RETURN("Cannot read ASIC ID", -1); + if ( transferred != asic_size ) ERROR_RETURN("Invalid size of ASIC ID", -1); return 0; } -static int send_2nd(usb_dev_handle * udev, struct image * image) { +static int send_2nd(libusb_device_handle * udev, struct image * image) { uint8_t buffer[1024]; uint32_t need, readed; - int ret; + int ret, transferred; printf("Sending OMAP peripheral boot message...\n"); - ret = usb_bulk_write(udev, WRITE_DEV, (char *)&omap_peripheral_msg, sizeof(omap_peripheral_msg), WRITE_TIMEOUT); - SLEEP(5000); - if ( ret != sizeof(omap_peripheral_msg) ) + ret = libusb_bulk_transfer(udev, WRITE_DEV, (unsigned char *)&omap_peripheral_msg, sizeof(omap_peripheral_msg), &transferred, WRITE_TIMEOUT); + if ( ret < 0 || transferred != sizeof(omap_peripheral_msg) ) ERROR_RETURN("Sending OMAP peripheral boot message failed", -1); - printf("Sending 2nd X-Loader image size...\n"); - ret = usb_bulk_write(udev, WRITE_DEV, (char *)&image->size, 4, WRITE_TIMEOUT); SLEEP(5000); - if ( ret != 4 ) + + printf("Sending 2nd X-Loader image size...\n"); + ret = libusb_bulk_transfer(udev, WRITE_DEV, (unsigned char *)&image->size, 4, &transferred, WRITE_TIMEOUT); + if ( ret < 0 || transferred != 4 ) ERROR_RETURN("Sending 2nd X-Loader image size failed", -1); + SLEEP(5000); + printf("Sending 2nd X-Loader image...\n"); printf_progressbar(0, image->size); image_seek(image, 0); @@ -210,35 +214,37 @@ static int send_2nd(usb_dev_handle * udev, struct image * image) { ret = image_read(image, buffer, need); if ( ret == 0 ) break; - if ( usb_bulk_write(udev, WRITE_DEV, (char *)buffer, ret, WRITE_TIMEOUT) != ret ) + if ( libusb_bulk_transfer(udev, WRITE_DEV, (unsigned char *)buffer, ret, &transferred, WRITE_TIMEOUT) < 0 ) PRINTF_ERROR_RETURN("Sending 2nd X-Loader image failed", -1); - readed += ret; + if ( ret != transferred ) + PRINTF_ERROR_RETURN("Sending 2nd X-Loader image failed (incomplete bulk transfer)", -1); + readed += transferred; printf_progressbar(readed, image->size); } - SLEEP(50000); + SLEEP(50000); return 0; } -static int send_secondary(usb_dev_handle * udev, struct image * image) { +static int send_secondary(libusb_device_handle * udev, struct image * image) { struct xloader_msg init_msg; uint8_t buffer[1024]; uint32_t need, readed; - int ret; + int ret, transferred; init_msg = xloader_msg_create(XLOADER_MSG_TYPE_SEND, image); printf("Sending X-Loader init message...\n"); - ret = usb_bulk_write(udev, WRITE_DEV, (char *)&init_msg, sizeof(init_msg), WRITE_TIMEOUT); - SLEEP(5000); - if ( ret != sizeof(init_msg) ) + ret = libusb_bulk_transfer(udev, WRITE_DEV, (unsigned char *)&init_msg, sizeof(init_msg), &transferred, WRITE_TIMEOUT); + if ( ret < 0 || transferred != sizeof(init_msg) ) ERROR_RETURN("Sending X-Loader init message failed", -1); printf("Waiting for X-Loader response...\n"); - ret = usb_bulk_read(udev, READ_DEV, (char *)&buffer, 4, READ_TIMEOUT); /* 4 bytes - dummy value */ - if ( ret != 4 ) + SLEEP(5000); + ret = libusb_bulk_transfer(udev, READ_DEV, (unsigned char *)&buffer, 4, &transferred, READ_TIMEOUT); /* 4 bytes - dummy value */ + if ( ret < 0 || transferred != 4 ) ERROR_RETURN("No response", -1); printf("Sending Secondary image...\n"); @@ -252,25 +258,27 @@ static int send_secondary(usb_dev_handle * udev, struct image * image) { ret = image_read(image, buffer, need); if ( ret == 0 ) break; - if ( usb_bulk_write(udev, WRITE_DEV, (char *)buffer, ret, WRITE_TIMEOUT) != ret ) + if ( libusb_bulk_transfer(udev, WRITE_DEV, (unsigned char *)buffer, ret, &transferred, WRITE_TIMEOUT) < 0 ) PRINTF_ERROR_RETURN("Sending Secondary image failed", -1); - readed += ret; + if ( ret != transferred ) + PRINTF_ERROR_RETURN("Sending Secondary image failed (incomplete bulk transfer)", -1); + readed += transferred; printf_progressbar(readed, image->size); } - SLEEP(5000); printf("Waiting for X-Loader response...\n"); - ret = usb_bulk_read(udev, READ_DEV, (char *)&buffer, 4, READ_TIMEOUT); /* 4 bytes - dummy value */ - if ( ret != 4 ) + SLEEP(5000); + ret = libusb_bulk_transfer(udev, READ_DEV, (unsigned char *)&buffer, 4, &transferred, READ_TIMEOUT); /* 4 bytes - dummy value */ + if ( ret < 0 || transferred != 4 ) ERROR_RETURN("No response", -1); return 0; } -static int ping_timeout(usb_dev_handle * udev) { +static int ping_timeout(libusb_device_handle * udev) { - int ret; + int ret, transferred; int pong = 0; int try_ping = 10; @@ -280,16 +288,16 @@ static int ping_timeout(usb_dev_handle * udev) { int try_read = 4; printf("Sending X-Loader ping message\n"); - ret = usb_bulk_write(udev, WRITE_DEV, (char *)&ping_msg, sizeof(ping_msg), WRITE_TIMEOUT); - if ( ret != sizeof(ping_msg) ) + ret = libusb_bulk_transfer(udev, WRITE_DEV, (unsigned char *)&ping_msg, sizeof(ping_msg), &transferred, WRITE_TIMEOUT); + if ( ret < 0 || transferred != sizeof(ping_msg) ) ERROR_RETURN("Sending X-Loader ping message failed", -1); printf("Waiting for X-Loader pong response...\n"); while ( try_read > 0 ) { uint32_t ping_read; - ret = usb_bulk_read(udev, READ_DEV, (char *)&ping_read, sizeof(ping_read), READ_TIMEOUT); - if ( ret == sizeof(ping_read) ) { + ret = libusb_bulk_transfer(udev, READ_DEV, (unsigned char *)&ping_read, sizeof(ping_read), &transferred, READ_TIMEOUT); + if ( ret == 0 && transferred == sizeof(ping_read) ) { printf("Got it\n"); pong = 1; break; @@ -401,12 +409,11 @@ int cold_flash(struct usb_device_info * dev, struct image * x2nd, struct image * int leave_cold_flash(struct usb_device_info * dev) { - int ret; + int ret, transferred; printf("Sending OMAP memory boot message...\n"); - ret = usb_bulk_write(dev->udev, WRITE_DEV, (char *)&omap_memory_msg, sizeof(omap_memory_msg), WRITE_TIMEOUT); - SLEEP(5000); - if ( ret != sizeof(omap_memory_msg) ) + ret = libusb_bulk_transfer(dev->udev, WRITE_DEV, (unsigned char *)&omap_memory_msg, sizeof(omap_memory_msg), &transferred, WRITE_TIMEOUT); + if ( ret < 0 || transferred != sizeof(omap_memory_msg) ) ERROR_RETURN("Sending OMAP memory boot message failed", -1); SLEEP(250000); -- cgit v1.2.3