bool UP3DCOMM_Open() { int r; r = libusb_init( &_libusb_ctx ); if( r < 0 ) { printf( "[ERROR] USB Init: %d\n", r ); return false; } libusb_set_debug( _libusb_ctx, 0 ); //set verbosity level to 0 _libusb_dev_handle = libusb_open_device_with_vid_pid( _libusb_ctx, VID, PID_MINI_A ); if( !_libusb_dev_handle ) _libusb_dev_handle = libusb_open_device_with_vid_pid( _libusb_ctx, VID, PID_MINI_M ); if( !_libusb_dev_handle ) { fprintf(stderr, "[ERROR] USB Open Device (%04X:%04X/%04X) not found\n", VID, PID_MINI_A, PID_MINI_M ); UP3DCOMM_Close(); return false; } if( 1 == libusb_kernel_driver_active( _libusb_dev_handle, 0 ) ) libusb_detach_kernel_driver( _libusb_dev_handle, 0 ); if( libusb_claim_interface( _libusb_dev_handle, 0 ) < 0 ) { fprintf(stderr,"[ERROR] USB Claim Interface\n"); UP3DCOMM_Close(); return false; } //clean all outstanding printer responses (left from previous sessions) for( ;; ) { int read; uint8_t buf[2048]; if( (0 != libusb_bulk_transfer( _libusb_dev_handle, (EP_IN | LIBUSB_ENDPOINT_IN), buf, sizeof(buf), &read, 10)) || (!read) ) break; } return true; }
void UP3D_Close() { UP3DCOMM_Close(); }