*/void _stlink_sg_close(stlink_t *sl) {
if (sl) {
struct stlink_libsg *slsg = sl->backend_data;
+ libusb_close(slsg->usb_handle);
+ libusb_exit(slsg->libusb_ctx);
free(slsg);
}
}
uint32_t rsig = read_uint32(csw, 0);
uint32_t rtag = read_uint32(csw, 4);
- uint32_t residue = read_uint32(csw, 8);
+ /* uint32_t residue = read_uint32(csw, 8); */
#define USB_CSW_SIGNATURE 0x53425355 // 'U' 'S' 'B' 'S' (reversed)
if (rsig != USB_CSW_SIGNATURE) {
WLOG("status signature was invalid: %#x\n", rsig);
unsigned char endpoint_in, unsigned char *cbuf, unsigned int length) {
int ret;
int real_transferred;
- int try;
+ int try = 0;
do {
ret = libusb_bulk_transfer(handle, endpoint_out, cbuf, length,
&real_transferred, SG_TIMEOUT_MSEC);
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;