hidapi против libusb для Linux

#linux #usb #mouse #libusb #hidapi

#linux #usb #мышь #libusb #hidapi

Вопрос:

Пишу некоторый код на C для USB-мыши.

Более конкретно, запись конфигурации и информации на мышь, такой как опрос, чувствительность, действия кнопок, цвета (подсветка), тактильные изменения, OLED и т.д.


Начал с этой старой статьи, где libhid рекомендуется заменить libusb .

Глядя на libhid, кажется, что с тех пор он умер. Последний коммит в этом проекте датирован 2012 годом, и он написан на C . Но я нашел несколько ссылок, в которых говорится, что нужно перейти на hidapi .

Однако hidapi также кажется довольно мертвым. Последний коммит с 2016 года. Или, возможно, это просто стабильно?

Может показаться, что в конце концов лучше использовать один из них libusb . Начать со статьи 15-летней давности — это не такая уж большая натяжка.

Вопрос в том, не упускаю ли я чего-то? Это libusb правильный путь?

Провели несколько быстрых тестов с libusb-1.0.0-dev

 #include <libusb-1.0/libusb.h>
  

и это работает хорошо — по крайней мере, для быстрых тестов, которые я сделал. Но, возможно, библиотека HID была бы лучше?

Из собственных опций пакета у меня есть по крайней мере:

 libhidapi-dev      
libhidapi-libusb0  
libhidrd0-dbg      
libhidapi-hidraw0  
libhidrd0          
libhidrd0-dev
  

И

 libusb-0.1-4                 libusbmuxd4
libusb-1.0-0                 libusbmuxd-dev
libusb-1.0-0-dev             libusbmuxd-tools
libusb-1.0-doc               libusb-ocaml
libusbauth-configparser1     libusb-ocaml-dev
libusbauth-configparser-dev  libusbprog0v5
libusb-dev                   libusbprog-dev
libusbguard0                 libusbredirhost1
libusbhid-common             libusbredirhost-dev
libusb-java                  libusbredirparser1
libusb-java-dbg              libusbredirparser-dev
libusb-java-doc              libusbtc08-1
libusb-java-lib              libusbtc08-dev
  

Ответ №1:

libusb рекомендует использовать hidapi для устройств USB HID. hidapi может использовать другой сервер в зависимости от операционной системы, например, hid.dll в Windows, либо hidraw, либо libusb в Linux, поэтому используются собственные драйверы USB.

Однако имейте в виду, что hidapi не дает вам такого же уровня контроля над отправляемыми вами пакетами. Это более высокий уровень, чем libusb, и некоторые параметры, которые он использует для запросов, фиксированы (например, значение bRequest).

hidapi также в настоящее время не поддерживается, если это вас беспокоит.

Обновление: С 4 июня 2019 года hidapi был перенесен в libusb / hidapi и в настоящее время снова активно поддерживается.

Лично я бы посоветовал использовать hidapi, если он отлично работает для вашего проекта, но если протокол устройства не соответствует стандарту HID, то у вас возникнут проблемы и, вероятно, потребуется контроль, который предоставляет вам libusb.