unsigned int USBDeviceFactory_DiscoverDevices( LPSKYETEK_DEVICE** lpDevices ) { SKYETEK_STATUS status; unsigned int deviceCount; PDEVMGR_DEVICE_INFORMATION pDevInfo; HANDLE hSearch; if((lpDevices == NULL) || (*lpDevices != NULL)) return 0; deviceCount = 0; pDevInfo = NULL; hSearch = INVALID_HANDLE_VALUE; pDevInfo = (PDEVMGR_DEVICE_INFORMATION)malloc(sizeof(DEVMGR_DEVICE_INFORMATION)); memset(pDevInfo, 0, sizeof(DEVMGR_DEVICE_INFORMATION)); pDevInfo->dwSize = sizeof(DEVMGR_DEVICE_INFORMATION); hSearch = FindFirstDevice(DeviceSearchByDeviceName, L"SKY*", pDevInfo); if(hSearch == INVALID_HANDLE_VALUE) goto done; for(hSearch = FindFirstDevice(DeviceSearchByDeviceName, L"SKY*", pDevInfo); hSearch != INVALID_HANDLE_VALUE; FindNextDevice(hSearch, pDevInfo)) { status = USBDeviceFactory_CreateDevice(pDevInfo->szLegacyName, &((*lpDevices)[deviceCount])); memset(pDevInfo, 0, sizeof(DEVMGR_DEVICE_INFORMATION)); pDevInfo->dwSize = sizeof(DEVMGR_DEVICE_INFORMATION); if(status != SKYETEK_SUCCESS) continue; deviceCount++; } done: if(hSearch != INVALID_HANDLE_VALUE) FindClose(hSearch); if(pDevInfo) free(pDevInfo); return deviceCount; }
unsigned int USBDeviceFactory_DiscoverDevices( LPSKYETEK_DEVICE** lpDevices ) { struct usb_bus *bus; struct usb_device *dev; unsigned int deviceCount; LPSKYETEK_DEVICE lpDevice; if((lpDevices == NULL) || (*lpDevices != NULL)) return 0; deviceCount = 0; usb_init(); usb_find_busses(); usb_find_devices(); for(bus = usb_busses; bus; bus = bus->next) { for(dev = bus->devices; dev; dev = dev->next) { if((dev->descriptor.idVendor == VID) && (dev->descriptor.idProduct == PID)) { //printf("USB filename: %s\r\n", dev->filename); if(USBDeviceFactory_CreateDevice(dev->filename, &lpDevice) != SKYETEK_SUCCESS) continue; //printf("USB CreateDevice succeded\r\n"); deviceCount++; *lpDevices = (LPSKYETEK_DEVICE*)realloc(*lpDevices, (deviceCount * sizeof(LPSKYETEK_DEVICE))); //printf("USB CreateDevice succeded\r\n"); (*lpDevices)[(deviceCount - 1)] = lpDevice; //printf("deviceCount=%d\r\n", deviceCount); } } } //printf("deviceCount=%d\r\n", deviceCount); return deviceCount; }
unsigned int USBDeviceFactory_DiscoverDevices( LPSKYETEK_DEVICE** lpDevices ) { GUID hidGuid; HDEVINFO deviceInfo; BOOL isSuccess = FALSE; unsigned long bytes = 0; SP_INTERFACE_DEVICE_DATA deviceData; PSP_INTERFACE_DEVICE_DETAIL_DATA deviceInterfaceData = 0; unsigned int ix, deviceCount = 0; size_t size = 0; SKYETEK_STATUS status; if((lpDevices == NULL) || (*lpDevices != NULL)) return 0; g_usbDevCount = 0; HidD_GetHidGuid (&hidGuid); deviceInfo = SetupDiGetClassDevs ( &hidGuid, 0, 0, (DIGCF_PRESENT | DIGCF_DEVICEINTERFACE )); if ( deviceInfo == INVALID_HANDLE_VALUE ) return 0; *lpDevices = (LPSKYETEK_DEVICE*)malloc(20 * sizeof(LPSKYETEK_DEVICE)); memset(*lpDevices,0,(20*sizeof(LPSKYETEK_DEVICE))); size = sizeof(SP_INTERFACE_DEVICE_DETAIL_DATA); for ( ix = 0; ix < 20; ix++ ) { memset( &deviceData, 0, sizeof(SP_INTERFACE_DEVICE_DATA) ); deviceData.cbSize = sizeof (SP_INTERFACE_DEVICE_DATA); isSuccess = SetupDiEnumDeviceInterfaces ( deviceInfo, 0, &hidGuid, ix, &deviceData); if ( !isSuccess ) { if ( ERROR_NO_MORE_ITEMS == GetLastError() ) break; else continue; } SetupDiGetInterfaceDeviceDetail( deviceInfo, &deviceData, 0, 0, &bytes, 0); deviceInterfaceData = (PSP_INTERFACE_DEVICE_DETAIL_DATA)malloc(bytes * sizeof(BYTE)); if ( !deviceInterfaceData ) { SetupDiDestroyDeviceInfoList( deviceInfo ); return deviceCount; } memset( deviceInterfaceData, 0, bytes ); deviceInterfaceData->cbSize = size; isSuccess = SetupDiGetInterfaceDeviceDetail( deviceInfo, &deviceData, deviceInterfaceData, bytes, &bytes, 0); if ( !isSuccess ) { free(deviceInterfaceData); SetupDiDestroyDeviceInfoList( deviceInfo ); return deviceCount; } if((_tcsstr(deviceInterfaceData->DevicePath, _T("vid_afef")) != NULL) && (_tcsstr(deviceInterfaceData->DevicePath, _T("pid_0f01")) != NULL)) { /*printf("DevicePath = %s\r\n", deviceInterfaceData->DevicePath);*/ status = USBDeviceFactory_CreateDevice(deviceInterfaceData->DevicePath, &((*lpDevices)[deviceCount])); if( status != SKYETEK_SUCCESS ) { free(deviceInterfaceData); continue; } deviceCount++; } free(deviceInterfaceData); } return deviceCount; }