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; }