Merge pull request #35 from UweBonnes/master
authortexane <texane@gmail.com>
Mon, 12 Dec 2011 17:05:14 +0000 (09:05 -0800)
committertexane <texane@gmail.com>
Mon, 12 Dec 2011 17:05:14 +0000 (09:05 -0800)
Some cleanup patches (crashes on bad command lines, freeing of buffers, compiling dependancies...)

.gitignore
flash/Makefile
flash/main.c
src/stlink-common.c
src/stlink-sg.c
src/stlink-usb.c

index c23c60a36dfb48acea330814c28e2e7d7daf2c03..8e974b74bbd575209f80cbb05750e867e9343bea 100644 (file)
@@ -11,3 +11,7 @@ flash/flash
 *.log
 example/*/*.bin
 example/*/*.elf
+example/*/*/*.bin
+example/*/*/*/*.bin
+example/*/*/*.a
+example/*/*/*/*.a
index 412c366e5a6cd736ce4d65194a31108a7c95d89d..cb7dcd2c27491ed9ac0daa5c4891acae3f23b160 100644 (file)
@@ -13,7 +13,7 @@ NAME=flash
 
 all: $(NAME)
 
-$(NAME): $(OBJS)
+$(NAME): $(OBJS) ../libstlink.a
        $(CC) $(CFLAGS) -o $(NAME) $(OBJS) $(LDFLAGS)
 
 %.o: %.c
index 8781941cc780a4074917e9685d5ec8ab6ede2a77..9033b17b6069828817cad513a70516108b17a804 100644 (file)
@@ -48,8 +48,8 @@ static int get_opts(struct opts* o, int ac, char** av)
       o->devname = av[1];
       i = 1;
     }
-
-    o->size = strtoul(av[i + 3], NULL, 16);
+    if (ac > 3)
+       o->size = strtoul(av[i + 3], NULL, 16);
   }
   else if (strcmp(av[0], "write") == 0)
   {
@@ -91,14 +91,14 @@ int main(int ac, char** av)
   if (o.devname != NULL) /* stlinkv1 */
   {
     sl = stlink_v1_open(50);
-    sl->verbose = 50;
     if (sl == NULL) goto on_error;
+    sl->verbose = 50;
   }
   else /* stlinkv2 */
   {
     sl = stlink_open_usb(50);
-    sl->verbose = 50;
     if (sl == NULL) goto on_error;
+    sl->verbose = 50;
   }
 
   if (stlink_current_mode(sl) == STLINK_DEV_DFU_MODE)
index aafd9d29f193314ab4db0722cac44c155ba19b55..ab145104c039962457e80a1a258e3aa77382471f 100644 (file)
@@ -457,7 +457,7 @@ int stlink_load_device_params(stlink_t *sl) {
     sl->sys_base = params->bootrom_base;
     sl->sys_size = params->bootrom_size;
     
-    ILOG("Device connected is: %s\n", params->description);
+    ILOG("Device connected is: %s, id %#x\n", params->description, chip_id);
     // TODO make note of variable page size here.....
     ILOG("SRAM size: %#x bytes (%d KiB), Flash: %#x bytes (%d KiB) in pages of %zd bytes\n",
         sl->sram_size, sl->sram_size / 1024, sl->flash_size, sl->flash_size / 1024, 
index 50c0db50555b621b99b81e5fb2f1b5c5929ee606..394417b1819f4e6075b7f5060cd8021fab128008 100644 (file)
@@ -857,6 +857,7 @@ static stlink_t* stlink_open(const int verbose) {
     if (slsg->usb_handle == NULL) {
         WLOG("Failed to find an stlink v1 by VID:PID\n");
         libusb_close(slsg->usb_handle);
+        libusb_exit(slsg->libusb_ctx);
         free(sl);
         free(slsg);
         return NULL;
@@ -871,6 +872,7 @@ static stlink_t* stlink_open(const int verbose) {
         if (r < 0) {
             WLOG("libusb_detach_kernel_driver(() error %s\n", strerror(-r));
             libusb_close(slsg->usb_handle);
+            libusb_exit(slsg->libusb_ctx);
             free(sl);
             free(slsg);
             return NULL;
@@ -883,6 +885,7 @@ static stlink_t* stlink_open(const int verbose) {
         /* this may fail for a previous configured device */
         WLOG("libusb_get_configuration()\n");
         libusb_close(slsg->usb_handle);
+        libusb_exit(slsg->libusb_ctx);
         free(sl);
         free(slsg);
         return NULL;
@@ -897,6 +900,7 @@ static stlink_t* stlink_open(const int verbose) {
             /* this may fail for a previous configured device */
             WLOG("libusb_set_configuration() failed\n");
             libusb_close(slsg->usb_handle);
+            libusb_exit(slsg->libusb_ctx);
             free(sl);
             free(slsg);
             return NULL;
@@ -906,6 +910,7 @@ static stlink_t* stlink_open(const int verbose) {
     if (libusb_claim_interface(slsg->usb_handle, 0)) {
         WLOG("libusb_claim_interface() failed\n");
         libusb_close(slsg->usb_handle);
+        libusb_exit(slsg->libusb_ctx);
         free(sl);
         free(slsg);
         return NULL;
index 58c4e1d334f3733b8565afe0f4ed85b25334309c..1320831d1ff3b0e1143a5641f375f037eef8f876 100644 (file)
@@ -576,9 +576,8 @@ stlink_t* stlink_open_usb(const int verbose) {
     slu->usb_handle = libusb_open_device_with_vid_pid(slu->libusb_ctx, USB_ST_VID, USB_STLINK_32L_PID);
     if (slu->usb_handle == NULL) {
                // TODO - free usb context too...
-        free(slu);
                WLOG("Couldn't find any ST-Link/V2 devices");
-        return NULL;
+        goto on_error;
     }
     
     if (libusb_kernel_driver_active(slu->usb_handle, 0) == 1) {
@@ -660,6 +659,8 @@ on_libusb_error:
     return sl;
 
 on_error:
+    if( slu->libusb_ctx)
+       libusb_exit(slu->libusb_ctx);
     if (sl != NULL) free(sl);
     if (slu != NULL) free(slu);
     return 0;