WebUSB не будет подключаться, потому что другое устройство использует тот же интерфейс - PullRequest
0 голосов
/ 19 июня 2019

Итак, я пытаюсь подключиться к openEEG после запуска функции claimInterface(). Я получаю

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)

Я изначально пытался добавить 255 в качестве classCode на navigator.usb.requestDevice потому что в документации сказано, что я могу это сделать, но у них нет одинаковых идентификаторов, так что это было бессмысленно.Кроме того, после переподключения я могу только lsusb получить на выходе драйвера MSI, хотя Chrome его подхватывает, и я получаю access denied error.

, что странно, потому что я изменил правила 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 ничего не возвращает, когда не подключен, два драйвера поступают с одного входа ???????

1 Ответ

0 голосов
/ 20 июня 2019

При подключении устройства к USB-порту Linux загружает свой драйвер и запрашивает устройство для себя.

Если вы хотите использовать его где-то еще, просто выгрузите драйвер:

$ sudo modprobe -r ftdi_sio

Если вы перезагрузите компьютер, драйвер снова загрузится, и вам придется выгрузить его вручную. Если вы хотите сохранить его без нагрузки, вы можете сделать:

$ echo "ftdi_sio" | sudo tee -a /etc/modules

Я могу понять, почему это вас смутило, учитывая, что вывод lsusb не так понятен, но я думаю, что другой драйвер MSI предназначен для корневого контроллера USB на вашем компьютере. Если вы удалите его, вы не сможете видеть ваши порты или что-либо, связанное с ними.

Если выгрузка драйвера не устранила проблему, возможно, вы не указали правильное устройство. Вы можете узнать больше, прочитав файл журнала, если напишите на панели навигации chrome://device-log/

...