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;
}
示例#2
0
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;
}