一、背景:

最近在做的一个项目需要使用USB传递数据,对USB理解不是很深,USB的系统驱动编写则更是天方

夜谭,因此将设备配置成HID类设备成为了首选。其最大的好处在于,LINUX/Windows系统中均自带HID

设备驱动,免除了USB系统驱动的困扰,同时HID配置为高速设备与全速设备时,其每笔事务传输的最大

字节大小分别为64bytes、1024bytes,亦符合当前开发需求。

二、正文:

安装及使用方法在"HIDAPI"文件夹中的"Readme"有了详细说明,在此仅做个大致说明以及记录在使

用该库函数时所碰到的一些问题。

Windows:

在Windows中,其使用"VS"工具来编译,HIDAPI以两种情况存在在项目中:一种是,将“"hid.c"、    "hid.h"和自己的源码一起编译到项目中;另一种则是将其编译成".dll",".lib",以动态链接库的形式

存在于项目中。推荐第一种,第一种方法你就可以很方便跟"hidapi"源代码。

在Windows中使用        "int hid_write(hid_device *device, const unsigned char *data, size_t length);"

这个函数时,一定要注意!写入的数据大小一定要再加1bytes,首字节用来存放REPORT ID,并且写入

的数据大小"length"只能固定为设备对应ReportID定义的OUT报告的大小!

举个例子,若是USB设备只有一个Report ID,该Reprot ID对应的OUT Report大小配置为OUT_cnt

bytes。那么buf[0]应该保存Report ID,buf的大小应该设置为(OUT_cnt bytes +1bytes(report id)),

写入的字节参数"length"无论多少,用"Bus hound"工具会发现,下传的数据大小一律为Out_cnt bytes,

在下位机读取到的USB数据大小通过串口返回,也可证实,下位机读取到的数据大小也为Out_cnt bytes.

至于原因,该库函数作者Alan也做出了一些回答,意思在Windows系统中系统会根据首字节的Report ID

来寻找正确的发送端口,若有兴趣可以搜索作者在该github中Issues的问答。

同样,在Windows中使用        "int hid_read(hid_device *device, unsigned char *data, size_t length);"

这个函数时,"length"的值一定要为下位机定义的IN Report大小。并且这个函数要和函数   "hid_set_nonblocking(...)"使用,设置为堵塞或者非堵塞。跟进"hid_read(..)"函数内,会发现其   最终调用的函数还是    "int hid_read_timeout(... int milliseconds)"

若是设置为堵塞模式,则参数"milliseconds"设置为"-1",设置为非堵塞模式,则参数"milliseconds"设置

为"0"。      其它的勿用多说,Readme和头文件中已经写的非常详细。

补充一点,已证实"HIDAPI"非线程安全操作,即读和写一定要在一个线程内操作,而不能在两个线程

内操作。2016-12-6   Linux:

在Linux中,其同Windows一致,亦是以两种形式存在,且Linux系统对传输的字节数更加宽容,没有

Windows那么严格,因此"HIDAPI"在Linux系统使用中没有hid_wrte/hid_read在Windows出现的麻烦,写入

低于设备设定字节限定大小的任意字节皆可,读亦如此,不会遭遇读写失败的境遇。

具体的编译方法及使用方法亦在Readme和头文件中已经写的非常详细,在此不再赘述。

三、下载及参考链接:

hidraw设备介绍:

https://www.kernel.org/doc/Documentation/hid/hidraw.txt

hid read c Linux,linux/windows hid相关推荐

  1. Linux下USB HID device driver研究

    首先介绍HID: HID是Human Interface Devices的缩写.翻译成中文即为人机交互设备.这里的人机交互设备是一个宏观上面的概念,任何设备,只要符合HID spec,都可以称之为HI ...

  2. linux远程开机windows,从Linux到Windows的PowerShell远程处理

    原标题:从Linux到Windows的PowerShell远程处理 前提条件 1)后期利用期间可以通过目标NTLM身份验证 2)重启WinRM服务 3)使用此NTLM支持PowerShell Dock ...

  3. windows和linux添加引导文件,Linux与Windows 10用grub引导教程-Go语言中文社区

    前言 去年暑假的时候,写了一篇如何装 Linux 和 Windows 10 双系统的文章发在了简书上,我写这篇文章的原因是当初装双系统确实是折腾了许久,网上也找不到一篇详尽的教程.由于去年对于写教程还 ...

  4. cacti监控linux和windows磁盘IO

    cacti监控linux和windows磁盘IO 标签:cacti linux磁盘IO windows磁盘IO 原创作品,允许转载,转载时请务必以超链接形式标明文章 原始出处 .作者信息和本声明.否则 ...

  5. 安装linux和windows双系统

    很多人一提到安装linux和windows双系统就会想到单独将磁盘划一个分区给linux,如果一块磁盘上已经安装了windows,并且所有分区都有数据,那就麻烦了,即使有了单独的分区,还需要安装gru ...

  6. linux和windows双系统引导,windows和linux双系统引导问题

    1  将Grub装配到ntloader内 Grub 做出了牺牲,成为了ntloader的附庸,由ntloader对Grub加以引导,只因为Grub没有写进MBR! 通过把hdaX分区内的Grub引导扇 ...

  7. linux与windows下开发,Linux 与 Windows下开发感受

    Linux 和 Windows环境下开发各有优点.以下Linux 下使用感受是在Ubuntu11.04,别的发行版还没试过. 至于各自的缺点,都可以通过各种方法,得到或多或少地解决.至于要花费多大的精 ...

  8. Homebrew 1.9发布,将支持Linux与Windows 10

    近日,知名包管理器Homebrew发布1.9版本,开始测试支持Linux和Windows 10(基于Windows 10上的Linux子系统WSL),Homebrew在Linux上将使用Linuxbr ...

  9. 使用 CrossOver 在 Linux运行 Windows 软件(金测OK)

    使用 CrossOver 在 Linux运行 Windows 软件 即便是最忠实的 Linux 用户,有时候也需要运行一下 Windows  软件.有的用户为此保留了一台旧的 Windows PC,有 ...

  10. 在linux和windows下自动备份数据库

    摘要: 详细介绍在windows和linux下自动备份数据库的过程,希望可以让新手立即上手吧! 本文档内容共分为2大部分:linux和windows Linux和windows都分为:准备工作和操作阶 ...

最新文章

  1. Django配置celery执行异步任务和定时任务
  2. 【探讨】javascript事件机制底层实现原理
  3. 第二次打开不是最大_“相亲失败,也许不是坏事”
  4. npm WARN saveError ENOENT: no such file or directory, open ‘/Users/....../package.json‘的解决办法
  5. redis High Availability---Redis Sentinel翻译
  6. DIY Ruby CPU 分析 Part II
  7. C#如何用Graphics画出一幅图表
  8. andriod手机客户端自动化测试工具整理
  9. java 线程 condition_JAVA多线程按指定顺序执行线程 Condition应用
  10. wps linux 在线安装程序,WPS Office 2019 For Linux下载及安装教程
  11. 极致”神话和产品观念
  12. 问题解决:Too many errors! 3 errors were dropped
  13. HCL打开显示当前系统用户怎么解决_iPhone8手机变成白苹果怎么办?
  14. 密码学-->base64隐写
  15. 重庆市涪陵创新计算机学校图片,重庆市涪陵创新计算机学校寝室图片、学校环境好吗...
  16. Windows系统——ATTCK靶场(一)——MSF方式
  17. 【galgame的解包教程】galgame解包及游戏基本信息
  18. RISC-V向量指令扩展(二)
  19. 毕业设计 Spring Boot个人健康信息管理系统(含源码+论文)
  20. itextpdf convert html string to Pdf

热门文章

  1. 【转载】RecycleView使用详解
  2. C# OPC UA 客户端开发
  3. java之字符串转换
  4. 小程序生成统一支付prepay_id相关配置和类介绍
  5. android个人记账软件(附上源码)
  6. OpenWrt 版本发展历史简介
  7. php小数点问题,php--小数点问题 - osc_m4jd02jn的个人空间 - OSCHINA - 中文开源技术交流社区...
  8. java之自定义注解的完整使用
  9. HTML5-定制input元素
  10. Python数据分析实战,,美国总统大选数据可视化分析[基于pandas]