所以我试图在运行claimInterface()
函数时连接到openEEG
NetworkError:无法声明界面
lsusb显示此问题很可能是因为某些MSI驱动程序正在同一驱动程序上运行
lsusb -v -s4的输出
Bus 002 Device 004: ID 1770:ff00
Device Descriptor:
bLength 18
bDescriptorType 1
bcdUSB 1.10
bDeviceClass 0 (Defined at Interface level)
bDeviceSubClass 0
bDeviceProtocol 0
bMaxPacketSize0 8
idVendor 0x1770
idProduct 0xff00
bcdDevice 1.10
iManufacturer 1 MSI EPF USB
iProduct 1 MSI EPF USB
iSerial 1 MSI EPF USB
bNumConfigurations 1
Configuration Descriptor:
bLength 9
bDescriptorType 2
wTotalLength 34
bNumInterfaces 1
bConfigurationValue 1
iConfiguration 0
bmAttributes 0xa0
(Bus Powered)
Remote Wakeup
MaxPower 2mA
Interface Descriptor:
bLength 9
bDescriptorType 4
bInterfaceNumber 0
bAlternateSetting 0
bNumEndpoints 1
bInterfaceClass 3 Human Interface Device
bInterfaceSubClass 0 No Subclass
bInterfaceProtocol 0 None
iInterface 0
HID Device Descriptor:
bLength 9
bDescriptorType 33
bcdHID 1.10
bCountryCode 33 US
bNumDescriptors 1
bDescriptorType 34 Report
wDescriptorLength 57
Report Descriptors:
** UNAVAILABLE **
Endpoint Descriptor:
bLength 7
bDescriptorType 5
bEndpointAddress 0x81 EP 1 IN
bmAttributes 3
Transfer Type Interrupt
Synch Type None
Usage Type Data
wMaxPacketSize 0x0008 1x 8 bytes
bInterval 10
Device Status: 0xa630
(Bus Powered)
Bus 001 Device 004: ID 0403:6001 Future Technology Devices International, Ltd FT232 USB-Serial (UART) IC
Device Descriptor:
bLength 18
bDescriptorType 1
bcdUSB 2.00
bDeviceClass 0 (Defined at Interface level)
bDeviceSubClass 0
bDeviceProtocol 0
bMaxPacketSize0 8
idVendor 0x0403 Future Technology Devices International, Ltd
idProduct 0x6001 FT232 USB-Serial (UART) IC
bcdDevice 6.00
iManufacturer 1 FTDI
iProduct 2 FT232R USB UART
iSerial 3 A105XV9J
bNumConfigurations 1
Configuration Descriptor:
bLength 9
bDescriptorType 2
wTotalLength 32
bNumInterfaces 1
bConfigurationValue 1
iConfiguration 0
bmAttributes 0xa0
(Bus Powered)
Remote Wakeup
MaxPower 90mA
Interface Descriptor:
bLength 9
bDescriptorType 4
bInterfaceNumber 0
bAlternateSetting 0
bNumEndpoints 2
bInterfaceClass 255 Vendor Specific Class
bInterfaceSubClass 255 Vendor Specific Subclass
bInterfaceProtocol 255 Vendor Specific Protocol
iInterface 2 FT232R USB UART
Endpoint Descriptor:
bLength 7
bDescriptorType 5
bEndpointAddress 0x81 EP 1 IN
bmAttributes 2
Transfer Type Bulk
Synch Type None
Usage Type Data
wMaxPacketSize 0x0040 1x 64 bytes
bInterval 0
Endpoint Descriptor:
bLength 7
bDescriptorType 5
bEndpointAddress 0x02 EP 2 OUT
bmAttributes 2
Transfer Type Bulk
Synch Type None
Usage Type Data
wMaxPacketSize 0x0040 1x 64 bytes
bInterval 0
Device Status: 0x0000
(Bus Powered)
我最初尝试在navigator.usb.requestDevice
上添加255作为classCode,因为文档说我可以做到这一点,但是它们没有相同的ID,因此毫无意义。同样,重新连接后,即使Chrome将其拾取,并且我得到了lsusb
,我也只能得到access denied error
到MSI驱动程序的输出。
这很奇怪,因为我更改了udev规则并在sudo chmod -R 777 *
中使用了dev/bus/usb
然后我在文件夹“ 001”中找到了一个文件,该文件以前必须手动更改以为它是MSI驱动程序的权限,但是这次删除了原始文件,而不是一个名为“ 007”而不是“ 005”的文件。 (可能是因为我尝试将设备插入两次)
因此这必须是MSI安全功能的组合?和OpenEEG在每次加载时创建一个新文件?
我唯一想到的解决方案是删除一个我不理解的文件,并在每次插入文件时更改其权限。这两种方法都禁止使用,特别是因为我希望我的网站能够在广泛的范围内正常工作设备和操作系统范围
PS:如果需要的话,请使用Linux Mint,这是在本地node.js服务器上运行的我的代码(我认为这不是问题)
document.addEventListener('DOMContentLoaded', event => {
let button = document.getElementById('connect')
button.addEventListener('click', async() => {
var device
const VENDOR_ID = 0x0403
const PRODUCT_ID = 0x6001
const CLASS_CODE = 255
device = await navigator.usb.requestDevice({
filters: [{
vendorId: VENDOR_ID,
productId: PRODUCT_ID,
classCode: CLASS_CODE
}]
})
console.log('opening..')
await device.open()
console.log('open!')
.then(() => device.selectConfiguration(1))
.then(() => device.claimInterface(0)).catch(error => { console.log(error + 'eeeeeeerrrr ' + device.configuration.interfaces[0].interfaceNumber); });
console.log(device);
await device.close().catch(error => { console.log(error + 'eeeeeeerrrr'); });
});
})
编辑/更新:当未连接时,两个驱动程序来自同一输入时lsusb不返回任何内容?
答案 0 :(得分:0)
在USB端口上连接设备时,Linux会加载其驱动程序并为设备声明所有权。
如果要在其他地方使用它,只需卸载驱动程序:
$ sudo modprobe -r ftdi_sio
如果重新启动计算机,则驱动程序将再次加载,您必须手动将其卸载。如果要使其卸载,可以执行以下操作:
$ echo "ftdi_sio" | sudo tee -a /etc/modules
考虑到lsusb
的输出尚不清楚,我可以理解它为什么使您感到困惑,但是我认为其他MSI驱动程序用于计算机上的根USB控制器。如果将其删除,将无法看到您的端口或与其连接的任何东西。
如果卸载驱动程序不能解决问题,则可能是您未要求使用正确的设备。如果您在导航栏chrome://device-log/