Some cleanup patches (crashes on bad command lines, freeing of buffers, compiling dependancies...)
*.log
example/*/*.bin
example/*/*.elf
+example/*/*/*.bin
+example/*/*/*/*.bin
+example/*/*/*.a
+example/*/*/*/*.a
all: $(NAME)
-$(NAME): $(OBJS)
+$(NAME): $(OBJS) ../libstlink.a
$(CC) $(CFLAGS) -o $(NAME) $(OBJS) $(LDFLAGS)
%.o: %.c
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)
{
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)
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,
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;
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;
/* 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;
/* 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;
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;
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) {
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;