int _ss_open(struct ss_device *dev) { /* always try to close the device first */ _ss_close(dev); usb_device_entry dev_entry[SS_MAX_DEV]; unsigned char dev_count = 0; if (USB_GetDeviceList(dev_entry, SS_MAX_DEV, USB_CLASS_HID, &dev_count) < 0) { return -2; } int i; for (i = 0; i < dev_count; ++i) { if ((dev_entry[i].vid == SS_VENDOR_ID) && (dev_entry[i].pid == SS_PRODUCT_ID)) { if (!_ss_dev_id_list_exists(dev_entry[i].device_id)) { int fd; if (USB_OpenDevice(dev_entry[i].device_id, SS_VENDOR_ID, SS_PRODUCT_ID, &fd) < 0) { return -3; } dev->device_id = dev_entry[i].device_id; dev->connected = 1; dev->fd = fd; _ss_set_operational(dev); USB_DeviceRemovalNotifyAsync(dev->fd, &_ss_removal_cb, dev); return 1; } } } return -4; }
int ss_open(struct ss_device *dev) { usb_device_entry dev_entry[8]; unsigned char dev_count; if (!_ss_inited) return -1; if (dev->connected) ss_close(dev); if (USB_GetDeviceList(dev_entry, 8, USB_CLASS_HID, &dev_count) < 0) return -2; int i; for (i = 0; i < dev_count; ++i) { if ((dev_entry[i].vid == SS_VENDOR_ID) && (dev_entry[i].pid == SS_PRODUCT_ID)) { if (!_ss_dev_id_list_exists(dev_entry[i].device_id)) { if (USB_OpenDevice(dev_entry[i].device_id, SS_VENDOR_ID, SS_PRODUCT_ID, &dev->fd) < 0) return -3; dev->device_id = dev_entry[i].device_id; dev->connected = 1; dev->enabled = 0; dev->reading = 0; _ss_set_operational(dev); ss_set_led(dev, _ss_dev_number); _ss_dev_id_list_add(dev_entry[i].device_id); _ss_dev_number++; USB_DeviceRemovalNotifyAsync(dev->fd, &_ss_removal_cb, dev); return 1; } } } return -4; }