public inbox for gentoo-commits@lists.gentoo.org
 help / color / mirror / Atom feed
* [gentoo-commits] gentoo-x86 commit in dev-embedded/smdk-dltool/files: smdk-dltool-0.20-libusb-1.0.patch smdk-dltool-0.20-build.patch
@ 2012-01-30 23:35 Mike Frysinger (vapier)
  0 siblings, 0 replies; only message in thread
From: Mike Frysinger (vapier) @ 2012-01-30 23:35 UTC (permalink / raw
  To: gentoo-commits

vapier      12/01/30 23:35:38

  Modified:             smdk-dltool-0.20-build.patch
  Added:                smdk-dltool-0.20-libusb-1.0.patch
  Log:
  Port to libusb-1.0.
  
  (Portage version: 2.2.0_alpha84/cvs/Linux x86_64)

Revision  Changes    Path
1.2                  dev-embedded/smdk-dltool/files/smdk-dltool-0.20-build.patch

file : http://sources.gentoo.org/viewvc.cgi/gentoo-x86/dev-embedded/smdk-dltool/files/smdk-dltool-0.20-build.patch?rev=1.2&view=markup
plain: http://sources.gentoo.org/viewvc.cgi/gentoo-x86/dev-embedded/smdk-dltool/files/smdk-dltool-0.20-build.patch?rev=1.2&content-type=text/plain
diff : http://sources.gentoo.org/viewvc.cgi/gentoo-x86/dev-embedded/smdk-dltool/files/smdk-dltool-0.20-build.patch?r1=1.1&r2=1.2

Index: smdk-dltool-0.20-build.patch
===================================================================
RCS file: /var/cvsroot/gentoo-x86/dev-embedded/smdk-dltool/files/smdk-dltool-0.20-build.patch,v
retrieving revision 1.1
retrieving revision 1.2
diff -u -r1.1 -r1.2
--- smdk-dltool-0.20-build.patch	20 Jan 2012 22:44:16 -0000	1.1
+++ smdk-dltool-0.20-build.patch	30 Jan 2012 23:35:37 -0000	1.2
@@ -2,7 +2,7 @@
 
 --- a/releases/smdk-tools-v0.20/dltool/Makefile
 +++ b/releases/smdk-tools-v0.20/dltool/Makefile
-@@ -7,8 +7,11 @@
+@@ -7,8 +7,13 @@
  
  .PHONY:	clean
  
@@ -10,7 +10,9 @@
 -	$(CC) -O2 -Wall -g -lusb -o smdk-usbdl dltool.c
 +CFLAGS ?= -O2 -g
 +CFLAGS += -Wall
-+LDLIBS = -lusb
++PKG_CONFIG ?= pkg-config
++CPPFLAGS += $(shell $(PKG_CONFIG) --cflags libusb)
++LDLIBS = $(shell $(PKG_CONFIG) --libs libusb)
 +
 +all: dltool
  



1.1                  dev-embedded/smdk-dltool/files/smdk-dltool-0.20-libusb-1.0.patch

file : http://sources.gentoo.org/viewvc.cgi/gentoo-x86/dev-embedded/smdk-dltool/files/smdk-dltool-0.20-libusb-1.0.patch?rev=1.1&view=markup
plain: http://sources.gentoo.org/viewvc.cgi/gentoo-x86/dev-embedded/smdk-dltool/files/smdk-dltool-0.20-libusb-1.0.patch?rev=1.1&content-type=text/plain

Index: smdk-dltool-0.20-libusb-1.0.patch
===================================================================
migrate to libusb-1 by me (Mike Frysinger)

--- a/Makefile
+++ b/Makefile
@@ -10,8 +10,8 @@
 CFLAGS ?= -O2 -g
 CFLAGS += -Wall
 PKG_CONFIG ?= pkg-config
-CPPFLAGS += $(shell $(PKG_CONFIG) --cflags libusb)
-LDLIBS = $(shell $(PKG_CONFIG) --libs libusb)
+CPPFLAGS += $(shell $(PKG_CONFIG) --cflags libusb-1.0)
+LDLIBS = $(shell $(PKG_CONFIG) --libs libusb-1.0)
 
 all: dltool
 
--- a/dltool.c
+++ b/dltool.c
@@ -13,9 +13,11 @@
 #include <stdio.h>
 #include <getopt.h>
 #include <fcntl.h>
+#include <errno.h>
+#include <unistd.h>
 
 
-#include <usb.h>
+#include <libusb.h>
 
 unsigned int   debug   = 0;
 unsigned long  dl_addr = 0x30000000L;
@@ -23,12 +25,22 @@ unsigned long  dl_size = 0L;
 unsigned char *dl_data = NULL;
 
 char *dl_file = "download.dat";
-char *dl_udev = NULL;
-char *dl_ubus = NULL;
+libusb_context *ctx = NULL;
+libusb_device_handle *devh = NULL;
 
 int ep_out = 0;
 
 #define DBG(x) if (debug) { printf x; }
+#define err(fmt, args...) \
+	do { \
+		if (devh) \
+			libusb_close(devh); \
+		if (ctx) \
+			libusb_exit(ctx); \
+		fprintf(stderr, "dltool: " fmt "\n", ## args); \
+		exit(1); \
+	} while (0)
+#define errp(fmt, args...) err(fmt ": %s", ## args, strerror(errno))
 
 void write_u32(unsigned char *dp, unsigned long val)
 {
@@ -108,25 +120,30 @@ void calc_cksum(unsigned char *data, ssize_t len)
 	cp[1] = cksum >> 8;
 }
 
-int verify_device(struct usb_device *dev)
+int verify_device(libusb_device *dev)
 {
+	struct libusb_device_descriptor desc;
+
+	if (libusb_get_device_descriptor(dev, &desc))
+		return 0;
+
 	DBG(("dev %p: configurations %d\n",
-	     dev, dev->descriptor.bNumConfigurations));
+	     dev, desc.bNumConfigurations));
 	
-	if (dev->descriptor.bNumConfigurations != 1)
+	if (desc.bNumConfigurations != 1)
 		return 0;
 
-	DBG(("\t=> bLength %d\n", dev->descriptor.bLength));
-	DBG(("\t=> bType   %d\n", dev->descriptor.bDescriptorType));
-	DBG(("\t=> bcdUSB  %x\n", dev->descriptor.bcdUSB));
-	DBG(("\t=> idVendor %x\n", dev->descriptor.idVendor));
-	DBG(("\t=> idProduct %x\n", dev->descriptor.idProduct));
+	DBG(("\t=> bLength %d\n", desc.bLength));
+	DBG(("\t=> bType   %d\n", desc.bDescriptorType));
+	DBG(("\t=> bcdUSB  %x\n", desc.bcdUSB));
+	DBG(("\t=> idVendor %x\n", desc.idVendor));
+	DBG(("\t=> idProduct %x\n", desc.idProduct));
 
-	if (dev->descriptor.idVendor == 0x5345 && dev->descriptor.idProduct == 0x1234) {
+	if (desc.idVendor == 0x5345 && desc.idProduct == 0x1234) {
 		ep_out = 3;
 		return 1;
 	}
-	else if(dev->descriptor.idVendor == 0x4e8 && dev->descriptor.idProduct == 0x1234){
+	else if(desc.idVendor == 0x4e8 && desc.idProduct == 0x1234){
 		printf("S3C64XX Detected!\n");
 		ep_out = 2;
 		return 1;
@@ -173,6 +190,12 @@ struct option long_opts[] =  {
 		.val		= 'x',
 	},
 	{
+		.name		= "help",
+		.has_arg	= 0,
+		.flag		= NULL,
+		.val		= 'h',
+	},
+	{
 		.name		= NULL
 	}
 };
@@ -181,12 +198,14 @@ int flg_show = 0;
 
 int main(int argc, char **argv)
 {
-	struct usb_bus *bus, *busp;
-	struct usb_device *result = NULL;
-	struct usb_device *found  = NULL;
+	ssize_t num_devs, i;
+	libusb_device **list;
+	libusb_device *found;
+	int dl_ubus = -1;
+	int dl_udev = -1;
+	uint8_t bus_num, dev_num;
 	unsigned long fsize;
-	usb_dev_handle *devh;
-	int ret;
+	int ret, transferred;
 
 	printf("SMDK42XX,S3C64XX USB Download Tool\n");
 	printf("Version 0.20 (c) 2004,2005,2006"
@@ -197,7 +216,7 @@ int main(int argc, char **argv)
 		int index = 0;
 		int c;
 
-		c = getopt_long(argc, argv, "a:b:d:f:s", long_opts, &index);
+		c = getopt_long(argc, argv, "a:b:d:f:shx", long_opts, &index);
 
 		DBG(("option index %d\n",c ));
 
@@ -218,117 +237,116 @@ int main(int argc, char **argv)
 			break;
 
 		case 'b':
-			dl_ubus = optarg;
+			dl_ubus = atoi(optarg);
 			break;
 
 		case 'd':
-			dl_udev = optarg;
+			dl_udev = atoi(optarg);
 			break;
 
 		case 'x':
 			debug = 1;
+			break;
+
+		case 'h':
+			puts(
+				"Usage: dltool [options]\n"
+				"\n"
+				"-a <download addr>\n"
+				"-b <bus #>\n"
+				"-d <dev #>\n"
+				"-f <file>\n"
+				"-s               Show found devices\n"
+				"-x               Enable debug\n"
+			);
+			return 0;
 		}
 	}
 	
-	usb_init();
-	usb_find_busses();
-	usb_find_devices();
-	
-	bus = usb_get_busses();
-
-	DBG(("usb_get_busses: %p\n", bus));
-       
-	for (busp = bus; busp != NULL; busp = busp->next) {	  
-		struct usb_device *dev;
-
-		DBG(("bus %p: dirname %s\n", busp, busp->dirname));
-
-		if (dl_ubus) {
-			if (strcmp(busp->dirname, dl_ubus) != 0)
-				continue;
+	ret = libusb_init(&ctx);
+	if (ret)
+		errp("could not initialize usb stack");
+
+	bus_num = dev_num = 0;
+	found = NULL;
+	num_devs = libusb_get_device_list(ctx, &list);
+	for (i = 0; i < num_devs; ++i) {
+		libusb_device *dev = list[i];
+		bus_num = libusb_get_bus_number(dev);
+		dev_num = libusb_get_device_address(dev);
+
+		DBG(("bus %u; dev %u (%p)\n", bus_num, dev_num, dev));
+
+		if (dl_ubus >= 0 && bus_num != dl_ubus)
+			continue;
+
+		if (!verify_device(dev))
+			continue;
+
+		if (flg_show) {
+			printf("bus %u: device %u\n", bus_num, dev_num);
+			continue;
 		}
 
-		for (dev = busp->devices; dev != NULL; dev = dev->next) {
-			DBG(("dev %p filename %s\n", dev, dev->filename));
+		if (dl_udev >= 0 && dev_num != dl_udev)
+			continue;
 
-			if (!verify_device(dev))
-				continue;
-
-			if (flg_show) {
-				printf("bus %s: device %s\n", 
-				       busp->dirname, dev->filename);
-				continue;
-			}
-
-			found = dev;
-
-			if (dl_udev) {
-				if (strcmp(dev->filename, dl_udev) == 0) {
-					result = dev;
-					break;
-				}
-			}
-		}
-
-		if (result != NULL)
-			break;
+		found = dev;
+		break;
 	}
 
 	if (flg_show)
 		return 0;
 
-	DBG(("device %p, found %p\n", result, found));
+	DBG(("found %p\n", found));
 
-	if (result == NULL && found != NULL)
-		result = found;
-
-	if (result == NULL) {
-		fprintf(stderr, "failed to find device\n");
-		return 1;
-	}
+	if (found == NULL)
+		err("failed to find device\n");
 
-	printf("=> found device: bus %s, dev %s\n",
-	       result->bus->dirname, result->filename);
+	printf("=> found device: bus %u, dev %u\n",
+	       bus_num, dev_num);
 
 	dl_data = load_file(dl_file, &dl_size, &fsize);
-	if (dl_data == NULL) {
-		printf("failed to load %s\n", dl_file);
-		return 1;
-	}
+	if (dl_data == NULL)
+		errp("failed to load %s", dl_file);
 
 	printf("=> loaded %ld bytes from %s\n", fsize, dl_file);
 
-	devh = usb_open(result);
-	if (devh == NULL) {
-		perror("usb_open");
-		return 1;
-	}
+	ret = libusb_open(found, &devh);
+	if (ret == 0) {
+		uint8_t configuration;
+		struct libusb_config_descriptor *config;
+		libusb_get_active_config_descriptor(found, &config);
+		configuration = config->bConfigurationValue;
+		libusb_free_config_descriptor(config);
+		libusb_set_configuration(devh, configuration);
+	} else
+		errp("libusb_open");
 
 	DBG(("claim interface\n"));
 
-	if (usb_claim_interface(devh, 0) < 0) {
-		perror("usb_claim_interface");
-		usb_close(devh);
-		return 1;
-	}
+	ret = libusb_claim_interface(devh, 0);
+	if (ret)
+		errp("libusb_claim_interface");
 
 	printf("=> Downloading %ld bytes to 0x%08lx\n", dl_size, dl_addr);
 
 	write_header(dl_data, dl_addr, dl_size);
 	calc_cksum(dl_data, dl_size);
 
-	//ret = usb_bulk_write(devh, 3, (void *)dl_data, dl_size, 5*1000*1000);
-	ret = usb_bulk_write(devh, ep_out, (void *)dl_data, dl_size, 5*1000*1000);
+	//ret = libusb_bulk_transfer(devh, 3, dl_data, dl_size, &transferred, 5*1000*1000);
+	ret = libusb_bulk_transfer(devh, ep_out, dl_data, dl_size, &transferred, 5*1000*1000);
 	printf("=> usb_bulk_write() returned %d\n", ret);
 
-	if (ret != dl_size) {
-		printf("failed to write %ld bytes\n", dl_size);
+	if (ret || transferred != dl_size) {
+		printf("failed to write %ld bytes (wrote %d)\n", dl_size, transferred);
 	}
 
 	free(dl_data);
 	
-	usb_release_interface(devh, 0);
-	usb_close(devh);
+	libusb_release_interface(devh, 0);
+	libusb_close(devh);
+	libusb_exit(ctx);
 
 	return 0;
 }






^ permalink raw reply	[flat|nested] only message in thread

only message in thread, other threads:[~2012-01-30 23:35 UTC | newest]

Thread overview: (only message) (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2012-01-30 23:35 [gentoo-commits] gentoo-x86 commit in dev-embedded/smdk-dltool/files: smdk-dltool-0.20-libusb-1.0.patch smdk-dltool-0.20-build.patch Mike Frysinger (vapier)

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox