NODE-USB — как поддерживать горячее отключение устройства
Как поддерживать горячее отключение устройства? Как только я использую функцию startPoll(), приложение вылетает с ошибкой "FATAL ERROR: Polling is not active". Конечная точка, используемая в коде, является конечной точкой Interrupt IN интерфейса связи Cdc Acm.
Код
const usb = require('usb')
const dev = usb.findByIds(0x05f9, 0x4204)
dev.open()
const _if = dev.interface(0)
if (_if.isKernelDriverActive()) _if.detachKernelDriver()
_if.claim()
const _ci = _if.endpoint(0x81)
_ci.startPoll()
_ci.on('data', (...args) => console.log('data', ...args))
_ci.on('end', (...args) => console.log('end', ...args))
_ci.on('error', (...args) => console.log('error', ...args))
Действия по воспроизведению
- Подключите устройство
- Запустить программу
- Отключить устройство
Выход
error [Error: LIBUSB_TRANSFER_NO_DEVICE] { errno: 5 }
error [Error: LIBUSB_TRANSFER_NO_DEVICE] { errno: 5 }
FATAL ERROR: Polling is not active.
1: 0xb09c10 node::Abort() [node]
2: 0xa1c193 node::FatalError(char const*, char const*) [node]
3: 0xa1c19c [node]
4: 0xad1abb napi_fatal_error [node]
5: 0x7f28c8213006 [/home/[...]/node_modules/usb/prebuilds/linux-x64/node.napi.glibc.node]
6: 0x7f28c822193b handleCompletion(Transfer*) [/home/[...]/node_modules/usb/prebuilds/linux-x64/node.napi.glibc.node]
7: 0x7f28c821333d Napi::ThreadSafeFunction::CallJS(napi_env__*, napi_value__*, void*, void*) [/home/[...]/node_modules/usb/prebuilds/linux-x64/node.napi.glibc.node]
8: 0xacfc61 [node]
9: 0x1564956 [node]
10: 0x1577084 [node]
11: 0x15652a8 uv_run [node]
12: 0xa43dd5 node::SpinEventLoop(node::Environment*) [node]
13: 0xb4bdb6 node::NodeMainInstance::Run(node::EnvSerializeInfo const*) [node]
14: 0xacd592 node::Start(int, char**) [node]
15: 0x7f28cad542d0 [/usr/lib/libc.so.6]
16: 0x7f28cad5438a __libc_start_main [/usr/lib/libc.so.6]
17: 0xa4067c [node]
Abandon (core dumped)
Дополнительная информация
- Операционная система: Архлинукс
- Среда выполнения v16.15.1
- Узел USB версии 2.5.1