int process_device(libusb_device_handle* devh) { int i; int res; for (i=0; i<transfers_nb && res >= 0; ++i) { res = process_transfer(transfers+i); } return res; }
int main(int argc, char *argv[]) { libusb_context* ctx = NULL; int ret = -1; int status; int i; if(read_file() < 0) { return -1; } if(libusb_init(&ctx)) { fprintf(stderr, "Can't initialize libusb.\n"); return -1; } //libusb_set_debug(ctx, 128); devh = libusb_open_device_with_vid_pid(ctx, VENDOR, PRODUCT); if(!devh) { fprintf(stderr, "No device found on USB busses.\n"); #ifdef WIN32 Sleep(2000); #else sleep(2); #endif libusb_exit(ctx); return -1; } #if defined(LIBUSB_API_VERSION) || defined(LIBUSBX_API_VERSION) libusb_set_auto_detach_kernel_driver(devh, 1); #else #ifndef WIN32 ret = libusb_kernel_driver_active(devh, 0); if(ret > 0) { ret = libusb_detach_kernel_driver(devh, 0); if(ret < 0) { fprintf(stderr, "Can't detach kernel driver: %s.\n", libusb_strerror(ret)); libusb_close(devh); libusb_exit(ctx); return -1; } } #endif #endif ret = libusb_claim_interface(devh, 0); if(ret < 0) { fprintf(stderr, "Can't claim interface: %s.\n", libusb_strerror(ret)); libusb_close(devh); libusb_exit(ctx); return -1; } status = process_device(devh); process_transfer(&cleanup); ret = libusb_release_interface(devh, 0); if(ret < 0) { fprintf(stderr, "Can't release interface: %s.\n", libusb_strerror(ret)); } #if !defined(LIBUSB_API_VERSION) && !defined(LIBUSBX_API_VERSION) #ifndef WIN32 ret = libusb_attach_kernel_driver(devh, 0); if(ret < 0) { fprintf(stderr, "Can't attach kernel driver: %s.\n", libusb_strerror(ret)); } #endif #endif free(transfers); libusb_close(devh); libusb_exit(ctx); return ret; }
void* transfer_thread(void* parameters) { struct transfer_thread_parameter_t* real_parameters = (struct transfer_thread_parameter_t*)parameters; process_transfer(real_parameters->from_account, real_parameters->to_account, real_parameters->amount); return NULL; }