Linux HID API类似于Windows HID API

Linux HID API类似于Windows HID API,linux,api,hid,Linux,Api,Hid,我正在寻找相应的Linux HID API,类似于Microsoft本页上提到的内容: 基本上与数据移动对应的功能: Data Movement The following list identifies HID API that an application can use to move data back and forth between the app and a selected device. HidD_GetInputReport HidD_SetFeature HidD_

我正在寻找相应的Linux HID API,类似于Microsoft本页上提到的内容:

基本上与数据移动对应的功能:

Data Movement
The following list identifies HID API that an application can use to move data back and forth  between the app and a selected device.

HidD_GetInputReport
HidD_SetFeature
HidD_SetOutputReport
ReadFile
WriteFile 
我目前有两个方向:

->安装wine框架并尝试使用Windows应用程序(利用HID API)

->第二种方法是使用相应的Linux HID API(对我来说是黑暗区域)


谢谢,

一个跨平台的HID API库(在后台,它使用了Windows的ReadFile/WriteFile和Linux的libusb)。我从来没有用过它,所以我不能为它担保

如果您只需要SetReport和GetReport,那么在Linux的hidraw设备上操作可能会更容易。我使用这种技术来进行测试。通过查询sysfs(),您可以发现哪个
/dev/hidrawX
设备属于某个设备

一旦有了设备(比如,
/dev/hidraw0
),就可以打开它进行读写操作,并使用POSIX
read()
write()
函数。您可能会遇到权限问题,但可以通过手动(
setfacl-mu:$USER:rw/dev/hidraw0
)或使用udev规则(例如)更改设备的权限来解决


由于您需要同时支持Windows和Linux平台,我认为您最好使用前面提到的HIDAPI库。

一个跨平台的HIDAPI库是(在后台,它使用Windows的ReadFile/WriteFile和Linux的libusb)。我从来没有用过它,所以我不能为它担保

如果您只需要SetReport和GetReport,那么在Linux的hidraw设备上操作可能会更容易。我使用这种技术来进行测试。通过查询sysfs(),您可以发现哪个
/dev/hidrawX
设备属于某个设备

一旦有了设备(比如,
/dev/hidraw0
),就可以打开它进行读写操作,并使用POSIX
read()
write()
函数。您可能会遇到权限问题,但可以通过手动(
setfacl-mu:$USER:rw/dev/hidraw0
)或使用udev规则(例如)更改设备的权限来解决


由于您需要同时支持Windows和Linux平台,我认为您最好使用前面提到的HIDAPI库。

一个跨平台的HIDAPI库是(在后台,它使用Windows的ReadFile/WriteFile和Linux的libusb)。我从来没有用过它,所以我不能为它担保

如果您只需要SetReport和GetReport,那么在Linux的hidraw设备上操作可能会更容易。我使用这种技术来进行测试。通过查询sysfs(),您可以发现哪个
/dev/hidrawX
设备属于某个设备

一旦有了设备(比如,
/dev/hidraw0
),就可以打开它进行读写操作,并使用POSIX
read()
write()
函数。您可能会遇到权限问题,但可以通过手动(
setfacl-mu:$USER:rw/dev/hidraw0
)或使用udev规则(例如)更改设备的权限来解决


由于您需要同时支持Windows和Linux平台,我认为您最好使用前面提到的HIDAPI库。

一个跨平台的HIDAPI库是(在后台,它使用Windows的ReadFile/WriteFile和Linux的libusb)。我从来没有用过它,所以我不能为它担保

如果您只需要SetReport和GetReport,那么在Linux的hidraw设备上操作可能会更容易。我使用这种技术来进行测试。通过查询sysfs(),您可以发现哪个
/dev/hidrawX
设备属于某个设备

一旦有了设备(比如,
/dev/hidraw0
),就可以打开它进行读写操作,并使用POSIX
read()
write()
函数。您可能会遇到权限问题,但可以通过手动(
setfacl-mu:$USER:rw/dev/hidraw0
)或使用udev规则(例如)更改设备的权限来解决


由于您需要同时支持Windows和Linux平台,我认为您最好使用前面提到的HIDAPI库。

如何知道我的设备是否在Linux中是hidraw?注册到HID子系统的每个设备都会获得一个hidraw设备(除非在内核配置中禁用了配置hidraw功能)。您是否成功地发送了输出报告,然后获得了相应的输入报告。我尝试了您提到的第一个链接(来自signal-HIDAPI),但输入报告始终会生成在先前发送的输出报告的缓冲区中发送的数据元素。奇怪@Raulp我没有使用HIDAPI,所以无论这是否是预期的,您都应该阅读它的文档(记住检查错误条件,如果有)。使用wireshark和usbmon来确定数据包是否是预期的。有关限制输出的一些筛选器,请参阅。如何知道我的设备在Linux中是否为hidraw?注册到HID子系统的每个设备都会获得一个hidraw设备(除非在内核配置中禁用了CONFIG_hidraw功能)。您是否成功地发送了输出报告,然后获得了相应的输入报告。我尝试了您提到的第一个链接(来自signal-HIDAPI),但输入报告始终会生成在先前发送的输出报告的缓冲区中发送的数据元素。奇怪@Raulp我没有使用HIDAPI,所以无论这是否是预期的,您都应该阅读它的文档(记住检查错误条件,如果有)。使用wireshark和usbmon来确定数据包是否是预期的。有关限制输出的一些筛选器,请参阅。我如何知道我的设备在Linux中是否为hidraw?注册到HID子系统的每个设备都会获得一个hidraw设备(除非在内核配置中禁用了CONFIG_hidraw功能)。您是否成功发送了hidraw设备