Exemple #1
0
int FreeRDPUDEVMANEntry(PFREERDP_URBDRC_SERVICE_ENTRY_POINTS pEntryPoints)
{
	UDEVMAN* udevman;
	uint32   UsbDevice = BASE_USBDEVICE_NUM;
	int return_add = 0, bus_number, dev_number;
	RDP_PLUGIN_DATA * plugin_data = pEntryPoints->plugin_data;
	char * token;
	char * message = "none";
	char hardware_id[16];

	libusb_init(NULL);

	udevman = (PUDEVMAN)malloc(sizeof(UDEVMAN));
	udevman->device_num = 0;
	udevman->idev = NULL;
	udevman->head = NULL;
	udevman->tail = NULL;   
	udevman->sem_timeout = 0;

	pthread_mutex_init(&udevman->devman_loading, NULL);
	sem_init(&udevman->sem_urb_lock, 0, MAX_URB_REQUSET_NUM);

	/* load usb device service management */
	udevman_load_interface(udevman);

	/* set debug flag, to enable Debug message for usb data transfer*/
	if (plugin_data->data[2])
		message = (char *)plugin_data->data[2];

	if (strncmp(message, "debug", 5) == 0)
		libusb_debug = 0;
	else
		libusb_debug = 10;
		

	/* register all usb device */    
	token = strtok((char *)plugin_data->data[1], "#");
	while (token)
	{
		bus_number = 0;
		dev_number = 0;
		strcpy(hardware_id, token);
		token = strtok(NULL, "#");

		udevman_parse_twoIDs_form_str(hardware_id, &bus_number, &dev_number, '_');

		return_add = udevman->iface.register_udevice((IUDEVMAN *)udevman, 
						bus_number, dev_number, UsbDevice, 0, 0, "new");
		if (return_add)
			UsbDevice++;
	}

	udevman->defUsbDevice = UsbDevice;

	pEntryPoints->pRegisterUDEVMAN(pEntryPoints->plugin, (IUDEVMAN*) udevman);

	return 0;
}
int FreeRDPUDEVMANEntry(PFREERDP_URBDRC_SERVICE_ENTRY_POINTS pEntryPoints)
{
	UDEVMAN* udevman;
	RDP_PLUGIN_DATA * plugin_data = pEntryPoints->plugin_data;
	uint32   UsbDevice = BASE_USBDEVICE_NUM;
	char * token;
	char * message = "id";
	char hardware_id[16];
	int idVendor;
	int idProduct;
	int bus_number; 
	int dev_number; 
	int success = 0;

	libusb_init(NULL);

	udevman = (PUDEVMAN)malloc(sizeof(UDEVMAN));
	udevman->device_num = 0;
	udevman->idev = NULL;
	udevman->head = NULL;
	udevman->tail = NULL;   
	udevman->sem_timeout = 0;
	udevman->flags = UDEVMAN_FLAG_ADD_BY_VID_PID;

	pthread_mutex_init(&udevman->devman_loading, NULL);
	sem_init(&udevman->sem_urb_lock, 0, MAX_URB_REQUSET_NUM);

	/* load usb device service management */
	udevman_load_interface(udevman);

	/* set debug flag, to enable Debug message for usb data transfer*/
	if (plugin_data->data[2])
		message = (char *)plugin_data->data[2];

	if (strstr(message, "id"))
		udevman->flags = UDEVMAN_FLAG_ADD_BY_VID_PID;
	else if (strstr(message, "addr"))
		udevman->flags = UDEVMAN_FLAG_ADD_BY_ADDR;

	if (strstr(message, "auto"))
		udevman->flags |= UDEVMAN_FLAG_ADD_BY_AUTO;
	libusb_debug = 10;
	if (strstr(message, "debug"))
	{
		libusb_debug = 0;
		udevman->flags |= UDEVMAN_FLAG_DEBUG;
	}
	/* register all usb device */
	token = strtok((char *)plugin_data->data[1], "#");
	while (token)
	{
		bus_number = 0;
		dev_number = 0;
		idVendor = 0;
		idProduct = 0;

		strcpy(hardware_id, token);
		token = strtok(NULL, "#");
		if (udevman->flags & UDEVMAN_FLAG_ADD_BY_VID_PID)
		{
			udevman_parse_device_pid_vid(hardware_id, &idVendor, 
				&idProduct, 
				'_');
			success = udevman->iface.register_udevice((IUDEVMAN *)udevman, 
				0, 
				0, 
				UsbDevice, 
				(uint16) idVendor, 
				(uint16) idProduct, 
				UDEVMAN_FLAG_ADD_BY_VID_PID);
		}
		else if (udevman->flags & UDEVMAN_FLAG_ADD_BY_ADDR)
		{
			udevman_parse_device_addr(hardware_id, &bus_number, 
				&dev_number, 
				'_');
			success = udevman->iface.register_udevice((IUDEVMAN *)udevman, 
				bus_number, 
				dev_number, 
				UsbDevice, 
				0, 
				0, 
				UDEVMAN_FLAG_ADD_BY_ADDR);
		}

		if (success)
			UsbDevice++;
	}

	udevman->defUsbDevice = UsbDevice;

	pEntryPoints->pRegisterUDEVMAN(pEntryPoints->plugin, (IUDEVMAN*) udevman);

	return 0;
}