HIDAPI0.8.0接口函数说明

从头文件说明翻译,仅供参考。

HIDAPI接口函数说明

1、初始化HIDAPI库。

int HID_API_EXPORT HID_API_CALL hid_init(void);

这个函数不是一定要调用的,在调用hid_enumerate()或者hid_open_*()函数时会自动调用。但如果是在不同线程打开的HIDAPI句柄,则应该调用本函数。

成功返回0, 失败返回-1。

2、结束HIDAPI库。

int HID_API_EXPORT HID_API_CALL hid_exit(void);

释放和HIDAPI关联的所有静态变量,避免程序结束后造成内存泄漏。

3、枚举HID设备。

struct hid_device_info HID_API_EXPORT * HID_API_CALL hid_enumerate(

unsigned short vendor_id,

unsigned short product_id);

返回一个hid_device_info类型的链表,保存所有VID和PID匹配的设备。执行hid_free_enumeration()函数释放这个链表。

如果vendor_id为0,则匹配任意vendor_id,如果product_id为0,则匹配任意product_id。如果都设置为0,则返回所有的HID设备。

4、释放枚举链表

void  HID_API_EXPORT HID_API_CALL hid_free_enumeration(struct hid_device_info *devs);

5、使用VID和PID打开HID设备

HID_API_EXPORT hid_device * HID_API_CALL hid_open(unsigned short vendor_id, unsigned short product_id, const wchar_t *serial_number);

使用PID、VID和一个可选的序列号打开对应的HID设备。如果可选序列号为NULL,则打开第一个和PID、VID匹配的设备。

函数执行成功返回#hid_device的指针,失败返回NULL。

6、使用设备路径打开HID设备

HID_API_EXPORT hid_device * HID_API_CALL hid_open_path(const char *path);

路径名由调用hid_enumerate()时确定,后者使用平台提供的形式,比如在linux下使用/dev/hidraw0等。

执行成功返回#hid_device指针,失败返回NULL。

7、向HID设备写一个输出报告

int  HID_API_EXPORT HID_API_CALL hid_write(hid_device *device, const unsigned char *data, size_t length);

data参数的第一个字节必须是报告ID。如果设备只支持单一的报告,则填入0X0。其余字节填入报告数据。因为报告ID是必须的,在调用hid_write时实际的字节数总是要比报告字节数多一个字节。例如一个hid报告是16个字节,必须给hid_write函数传递17个字节,报告ID跟随着报告数据。在这个例子中,length参数值应该是17。

如果第一输出端点存在,则本函数从第一输出端点输出数据,如果第一输出端点不存在,则从控制端点输出数据。

参数说明:

device:从hid_open()函数返回的设备句柄。

data:要发送的数据,第一个字节为报告编号。

length:发送数据的总字节数。

发送成功返回实际发送的字节数,失败返回-1。

8、从具有超时特性的HID设备读取数据

int HID_API_EXPORT HID_API_CALL hid_read_timeout(hid_device *dev, unsigned char *data, size_t length, int milliseconds);

返回一个输入报告。

从主机的中断输入端点接收数据。如果设备使用编号的报告,第一个字节包含报告编号。

参数:

device:从hid_open()获得的设备句柄。

data:读取数据缓冲区。

length:读取的字节数。如果设备具有多个报告,确保为报告编号多留一个额外的字节。

milliseconds:超时的毫秒数。如果指定-1,则阻塞等待。

函数返回实际读取的字节数,如果失败则返回-1。

9、从HID设备读取一个输入报告

int  HID_API_EXPORT HID_API_CALL hid_read(hid_device *device, unsigned char *data, size_t length);

通过主机的中断输入端点读取一个输入报告,如果设备有多个编号报告,则第一个字节包含报告编号。

device:从hid_open()获得的设备句柄。

data:读取数据缓冲区。

length:读取的字节数。如果设备具有多个报告,确保为报告编号多留一个额外的字节。

milliseconds:超时的毫秒数。如果指定-1,则阻塞等待。

函数返回实际读取的字节数,如果失败则返回-1。

10、设置设备为非阻塞方式

int  HID_API_EXPORT HID_API_CALL hid_set_nonblocking(hid_device *device, int nonblock);

如果设置为非阻塞方式,hid_read()函数在设备没有数据可读时直接返回0值。如果在阻塞方式,hid_read将等待,直到读取到一个可用数据。

任何时候都可以切换阻塞和非阻塞状态。

参数:

device:从hid_open()函数返回的设备句柄。

nonblock:1-设置为非阻塞状态。0-设置为阻塞状态。

成功返回0,失败返回-1。

10、给设备发送一个特征报告

int HID_API_EXPORT HID_API_CALL hid_send_feature_report(hid_device *device, const unsigned char *data, size_t length);

通过控制端点发送特征报告。data参数的第一个字节必须是报告ID,如果设备仅支持一个报告,这个字节设置为0x0,其余字节为报告内容。由于报告ID是必须的,所以传送的数据总是比报告内容多一个字节。

参数:

device:从hid_open()获得的设备句柄。

data:读取数据缓冲区。

length:读取的字节数。如果设备具有多个报告,确保为报告编号多留一个额外的字节。

milliseconds:超时的毫秒数。如果指定-1,则阻塞等待。

函数返回实际读取的字节数,如果失败则返回-1。

11、从HID设备获取特征报告

int HID_API_EXPORT HID_API_CALL hid_get_feature_report(hid_device *device, unsigned char *data, size_t length);

确保data参数的第一个字节为要读取的特征报告ID,并且data中有足够的空间存放附加的数据。

参数:

device:从hid_open()获取的设备句柄。

data:读取数据的缓冲区,第一个字节放入要读取的报告ID。

length:读取的数据长度,包括报告ID字节。

函数返回实际读取的字节数,如果失败则返回-1。

12、关闭HID设备

void HID_API_EXPORT HID_API_CALL hid_close(hid_device *device);

13、获取厂商字符串

int HID_API_EXPORT_CALL hid_get_manufacturer_string(hid_device *device, wchar_t *string, size_t maxlen);

14、获取产品描述字符串

int HID_API_EXPORT_CALL hid_get_product_string(hid_device *device, wchar_t *string, size_t maxlen);

15、获取序列号

int HID_API_EXPORT_CALL hid_get_serial_number_string(hid_device *device, wchar_t *string, size_t maxlen);

16、获取索引字符串

int HID_API_EXPORT_CALL hid_get_indexed_string(hid_device *device, int string_index, wchar_t *string, size_t maxlen);

17、获取最后一次出现的错误信息

HID_API_EXPORT const wchar_t* HID_API_CALL hid_error(hid_device *device);

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值