Поддерживает ли WebUSB тайм-ауты?

Библиотеки usb всегда поддерживают установку таймаутов при работе с устройством. И это важная функция для программного обеспечения, которое работает с USB-устройствами, потому что именно так вы можете понять, что устройство не отвечает на вашу команду. Я просматриваю WebUSB Api и вижу, что на данный момент он не поддерживает тайм-ауты.

Это правда? Единственный способ - вручную запускать тайм-ауты перед каждой операцией USB и останавливать тайм-аут после успеха операции?


person yankovic    schedule 23.12.2020    source источник


Ответы (1)


WebUSB в настоящее время не поддерживает тайм-ауты передачи или прерывание передачи, потому что после изучения различных API-интерфейсов платформы для USB не показалось возможным реализовать их согласованным образом. В идеале можно было бы отменить передачу, удалив ее из расписания передачи USB-контроллера. Это возможно в Linux с USBDEVFS_DISCARDURB ioctl, а таймауты поддерживаются в macOS с использованием ReadPipeAsyncTO() и подобных функций. Однако в Windows единственный способ отменить передачу - вызвать WinUsb_AbortPipe(), который влияет на все ожидающие передачи в канале, а не только на тот, который истек.

Если вам нужно отреагировать на то, что устройство не отвечает на запрос USB своевременно, лучше всего сделать это вручную с помощью setTimeout() и clearTimeout(). Имейте в виду, что передача по USB останется активной и может быть завершена позже.

person Reilly Grant    schedule 25.01.2021