void DVS128Interface::startReading(){ CUsbIo dev; USB_DEVICE_DESCRIPTOR devDesc; DWORD status; bool found = false; devList = CUsbIo::CreateDeviceList(&usbIoID); if (devList == NULL){ printf("Unable to build a device list!\n"); } // Open and query usb devices to find the right one for (int i = 0; i < 127; i++){ status = dev.Open(i,devList,&usbIoID); if ( status != USBIO_ERR_SUCCESS ) { if ( status != USBIO_ERR_NO_SUCH_DEVICE_INSTANCE ){ fprintf(stdout,"UsbDev.Open returned with error 0x%08X\n",status); } break; } // Query device descriptor for comparison with PID and VID status = dev.GetDeviceDescriptor(&devDesc); if ( status == USBIO_ERR_SUCCESS ){ found = true; if ( devDesc.iSerialNumber!=0 ){ dev.Close(); if (devDesc.idVendor == VID && devDesc.idProduct == PID){ fprintf(stdout,"Device found, starting reader.\n"); devIndex = i; startReaderThread(devIndex); break; } else { fprintf(stdout,"Device not recognized\n"); } } else { fprintf(stdout,"Querying device descriptor failed, status:0x%08X\n",status); dev.Close(); } } if ( !found ) { fprintf(stdout,"There are no USB devices attached to the USBIO driver.\n"); } else fprintf(stdout,"Device found..."); CUsbIo::DestroyDeviceList(devList); } }
void DVS128Interface::sendVendorRequest(UCHAR req, const char *buf, DWORD bufSize){ CUsbIo dev; DWORD status; // open the device if(!dev.IsOpen()){ status = dev.Open(devIndex,devList,&usbIoID); if ( status != USBIO_ERR_SUCCESS ) { printf("Could not open device: %x",status); return; } } printf("Sending Vendor Request: %x\n", req); USBIO_CLASS_OR_VENDOR_REQUEST request; ZeroMemory(&request,sizeof(request)); request.Flags = 0; request.Type = RequestTypeVendor; request.Recipient = RecipientDevice; request.RequestTypeReservedBits = 0; request.Request = req; request.Value = 4; request.Index = 0; status = dev.ClassOrVendorOutRequest( buf, bufSize, &request ); printf("Status: %x\n",status); dev.Close(); }
static void CloseUsbDevice() { // Close the device g_UsbDev.Close(); PRINT_IF_VERBOSE("CUsbIo::Close called\n"); }