summaryrefslogtreecommitdiffstats
path: root/src/cold-flash.c
diff options
context:
space:
mode:
authorPali Rohár <pali.rohar@gmail.com>2016-12-06 22:39:44 +0100
committerPali Rohár <pali.rohar@gmail.com>2016-12-06 22:39:44 +0100
commit676da477510cb1966a74273f89c8aa64654a1d49 (patch)
tree6b494e6129e9908f5e7ad33290f92f257560dd2d /src/cold-flash.c
parentea7f2a441a68bc4496733a2fcabc6bf8d2962d04 (diff)
download0xFFFF-676da477510cb1966a74273f89c8aa64654a1d49.tar.bz2
all: Revert libusb-1.0 support
Listing of usb devices with libusb-1.0 is too slow and not usable for flashing or cold-flashing Nokia N900. Old libusb (0.1) does not have this problem and works perfectly. Problem for libusb-1.0 was reported at least two times into libusb-devel mailing list, but upstream developers are totally ignore it. One message is in archive: https://sourceforge.net/p/libusb/mailman/message/34985373/ Because of that there is just one option: use tested and working libusb 0.1 library instead some experimental and non-working libusb-1.0.
Diffstat (limited to 'src/cold-flash.c')
-rw-r--r--src/cold-flash.c70
1 files changed, 32 insertions, 38 deletions
diff --git a/src/cold-flash.c b/src/cold-flash.c
index a6a11b6..b4fe4e6 100644
--- a/src/cold-flash.c
+++ b/src/cold-flash.c
@@ -22,7 +22,7 @@
#include <string.h>
#include <errno.h>
-#include <libusb-1.0/libusb.h>
+#include <usb.h>
#include "global.h"
#include "cold-flash.h"
@@ -169,37 +169,35 @@ struct xloader_msg xloader_msg_create(uint32_t type, struct image * image) {
}
-static int read_asic(libusb_device_handle * udev, uint8_t * asic_buffer, int size, int asic_size) {
+static int read_asic(usb_dev_handle * udev, uint8_t * asic_buffer, int size, int asic_size) {
- int ret, transferred;
+ int ret;
printf("Waiting for ASIC ID...\n");
- ret = libusb_bulk_transfer(udev, USB_READ_EP, (unsigned char *)asic_buffer, size, &transferred, READ_TIMEOUT);
- if ( ret < 0 )
- ERROR_RETURN("Cannot read ASIC ID", -1);
- if ( transferred != asic_size )
+ ret = usb_bulk_read(udev, USB_READ_EP, (char *)asic_buffer, size, READ_TIMEOUT);
+ if ( ret != asic_size )
ERROR_RETURN("Invalid size of ASIC ID", -1);
return 0;
}
-static int send_2nd(libusb_device_handle * udev, struct image * image) {
+static int send_2nd(usb_dev_handle * udev, struct image * image) {
uint8_t buffer[1024];
uint32_t need, sent;
- int ret, transferred;
+ int ret;
printf("Sending OMAP peripheral boot message...\n");
- ret = libusb_bulk_transfer(udev, USB_WRITE_EP, (unsigned char *)&omap_peripheral_msg, sizeof(omap_peripheral_msg), &transferred, WRITE_TIMEOUT);
- if ( ret < 0 || transferred != sizeof(omap_peripheral_msg) )
+ ret = usb_bulk_write(udev, USB_WRITE_EP, (char *)&omap_peripheral_msg, sizeof(omap_peripheral_msg), WRITE_TIMEOUT);
+ if ( ret != sizeof(omap_peripheral_msg) )
ERROR_RETURN("Sending OMAP peripheral boot message failed", -1);
SLEEP(5000);
printf("Sending 2nd X-Loader image size...\n");
- ret = libusb_bulk_transfer(udev, USB_WRITE_EP, (unsigned char *)&image->size, 4, &transferred, WRITE_TIMEOUT);
- if ( ret < 0 || transferred != 4 )
+ ret = usb_bulk_write(udev, USB_WRITE_EP, (char *)&image->size, 4, WRITE_TIMEOUT);
+ if ( ret != 4 )
ERROR_RETURN("Sending 2nd X-Loader image size failed", -1);
SLEEP(5000);
@@ -215,11 +213,9 @@ static int send_2nd(libusb_device_handle * udev, struct image * image) {
ret = image_read(image, buffer, need);
if ( ret == 0 )
break;
- if ( libusb_bulk_transfer(udev, USB_WRITE_EP, (unsigned char *)buffer, ret, &transferred, WRITE_TIMEOUT) < 0 )
+ if ( usb_bulk_write(udev, USB_WRITE_EP, (char *)buffer, ret, WRITE_TIMEOUT) != ret )
PRINTF_ERROR_RETURN("Sending 2nd X-Loader image failed", -1);
- if ( ret != transferred )
- PRINTF_ERROR_RETURN("Sending 2nd X-Loader image failed (incomplete bulk transfer)", -1);
- sent += transferred;
+ sent += ret;
printf_progressbar(sent, image->size);
}
@@ -228,24 +224,24 @@ static int send_2nd(libusb_device_handle * udev, struct image * image) {
}
-static int send_secondary(libusb_device_handle * udev, struct image * image) {
+static int send_secondary(usb_dev_handle * udev, struct image * image) {
struct xloader_msg init_msg;
uint8_t buffer[1024];
uint32_t need, sent;
- int ret, transferred;
+ int ret;
init_msg = xloader_msg_create(XLOADER_MSG_TYPE_SEND, image);
printf("Sending X-Loader init message...\n");
- ret = libusb_bulk_transfer(udev, USB_WRITE_EP, (unsigned char *)&init_msg, sizeof(init_msg), &transferred, WRITE_TIMEOUT);
- if ( ret < 0 || transferred != sizeof(init_msg) )
+ ret = usb_bulk_write(udev, USB_WRITE_EP, (char *)&init_msg, sizeof(init_msg), WRITE_TIMEOUT);
+ if ( ret != sizeof(init_msg) )
ERROR_RETURN("Sending X-Loader init message failed", -1);
printf("Waiting for X-Loader response...\n");
SLEEP(5000);
- ret = libusb_bulk_transfer(udev, USB_READ_EP, (unsigned char *)&buffer, 4, &transferred, READ_TIMEOUT); /* 4 bytes - dummy value */
- if ( ret < 0 || transferred != 4 )
+ ret = usb_bulk_read(udev, USB_READ_EP, (char *)&buffer, 4, READ_TIMEOUT); /* 4 bytes - dummy value */
+ if ( ret != 4 )
ERROR_RETURN("No response", -1);
printf("Sending Secondary image...\n");
@@ -259,27 +255,25 @@ static int send_secondary(libusb_device_handle * udev, struct image * image) {
ret = image_read(image, buffer, need);
if ( ret == 0 )
break;
- if ( libusb_bulk_transfer(udev, USB_WRITE_EP, (unsigned char *)buffer, ret, &transferred, WRITE_TIMEOUT) < 0 )
+ if ( usb_bulk_write(udev, USB_WRITE_EP, (char *)buffer, ret, WRITE_TIMEOUT) != ret )
PRINTF_ERROR_RETURN("Sending Secondary image failed", -1);
- if ( ret != transferred )
- PRINTF_ERROR_RETURN("Sending Secondary image failed (incomplete bulk transfer)", -1);
- sent += transferred;
+ sent += ret;
printf_progressbar(sent, image->size);
}
printf("Waiting for X-Loader response...\n");
SLEEP(5000);
- ret = libusb_bulk_transfer(udev, USB_READ_EP, (unsigned char *)&buffer, 4, &transferred, READ_TIMEOUT); /* 4 bytes - dummy value */
- if ( ret < 0 || transferred != 4 )
+ ret = usb_bulk_read(udev, USB_READ_EP, (char *)&buffer, 4, READ_TIMEOUT); /* 4 bytes - dummy value */
+ if ( ret != 4 )
ERROR_RETURN("No response", -1);
return 0;
}
-static int ping_timeout(libusb_device_handle * udev) {
+static int ping_timeout(usb_dev_handle * udev) {
- int ret, transferred;
+ int ret;
int pong = 0;
int try_ping = 10;
@@ -289,16 +283,16 @@ static int ping_timeout(libusb_device_handle * udev) {
int try_read = 4;
printf("Sending X-Loader ping message\n");
- ret = libusb_bulk_transfer(udev, USB_WRITE_EP, (unsigned char *)&ping_msg, sizeof(ping_msg), &transferred, WRITE_TIMEOUT);
- if ( ret < 0 || transferred != sizeof(ping_msg) )
+ ret = usb_bulk_write(udev, USB_WRITE_EP, (char *)&ping_msg, sizeof(ping_msg), WRITE_TIMEOUT);
+ if ( ret != 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 = libusb_bulk_transfer(udev, USB_READ_EP, (unsigned char *)&ping_read, sizeof(ping_read), &transferred, READ_TIMEOUT);
- if ( ret == 0 && transferred == sizeof(ping_read) ) {
+ ret = usb_bulk_read(udev, USB_READ_EP, (char *)&ping_read, sizeof(ping_read), READ_TIMEOUT);
+ if ( ret == sizeof(ping_read) ) {
printf("Got it\n");
pong = 1;
break;
@@ -410,11 +404,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, transferred;
+ int ret;
printf("Sending OMAP memory boot message...\n");
- ret = libusb_bulk_transfer(dev->udev, USB_WRITE_EP, (unsigned char *)&omap_memory_msg, sizeof(omap_memory_msg), &transferred, WRITE_TIMEOUT);
- if ( ret < 0 || transferred != sizeof(omap_memory_msg) )
+ ret = usb_bulk_write(dev->udev, USB_WRITE_EP, (char *)&omap_memory_msg, sizeof(omap_memory_msg), WRITE_TIMEOUT);
+ if ( ret != sizeof(omap_memory_msg) )
ERROR_RETURN("Sending OMAP memory boot message failed", -1);
SLEEP(250000);