当前位置:我的异常网» 热门搜索 » linux hid设备读写

linux hid设备读写

www.myexceptions.net  网友分享于:2013-01-21   搜索量:13次

场景:linux下hid设备读写的有关问题

linux下hid设备读写的问题

#include

#include

#include

#include

#include

#include

#include

#include

#include

#include

int main(int argc,char **argv)

{

int fd;

int rtn,ret=0;

int i,j=0;

struct hiddev_report_info rinfo;

struct hiddev_usage_ref uref;

struct hiddev_field_info finfo;

struct hiddev_usage_ref_multi urefs;

struct hiddev_devinfo dinfo;

struct hiddev_collection_info cinfo;

unsigned char bufw[21]={0x02,0x08,0xce,0,0,0,0,0,0,0};

unsigned char recv[21]={0};

//printf("argc = %d\n",argc);

//打开设备文件

fd=open("/dev/usb/hiddev0",O_RDWR);

if(fd > 0)

{

printf("open hid success!,fd = %d\n",fd);

}

//

rinfo.report_type=HID_REPORT_TYPE_OUTPUT;

rinfo.report_id=HID_REPORT_ID_FIRST;

ret=ioctl(fd,HIDIOCGREPORTINFO,&rinfo);

if(ret != 0)

{

printf("ioctl one failed!\n");

close(fd);

return -1;

}

for(i=0;i

{

finfo.report_type=rinfo.report_type;

finfo.report_id=rinfo.report_id;

finfo.field_index=i;

ret = ioctl(fd,HIDIOCGFIELDINFO,&finfo);

printf("finfo.maxusage %d\n",finfo.maxusage);

if(ret != 0)

{

printf("ioctl two failed\n");

close(fd);

return -1;

}

//for(j=0;j

//{

uref.report_type=finfo.report_type;

uref.report_id=finfo.report_id;

uref.field_index=i;

uref.usage_index=j;//ioctl(fd,HIDIOCGUCODE,&uref);

ret = ioctl(fd,HIDIOCGUSAGE,&uref);

if(ret != 0)

{

printf("ioctl three faile!\n");

close(fd);

return -1;

}

ret = ioctl(fd,HIDIOCGUCODE,&uref);

printf("usage.value:%x\n",uref.value);

printf("usage report_type %d report_id %d field_index %d usage_index %d usage_code %d\n",

uref.report_type, uref.report_id, uref.field_index, uref.usage_index, uref.usage_code);

if(ret != 0)

{

printf("ioctl four failed\n");

close(fd);

return -1;

}

printf("\n");

//}

urefs.uref.report_type=HID_REPORT_TYPE_OUTPUT;

urefs.uref.report_id=finfo.report_id;

urefs.num_values=8;

urefs.uref.field_index=i;

urefs.uref.usage_index=0;

for(j=0;j<21;j++)

{

urefs.uref.usage_code+=4;

urefs.values[j]=bufw[j];

printf("usage report_type:%d,report_id:%d,field_index:%d,usage_index:%d,usage_code:%d\n", urefs.uref.report_id,urefs.uref.report_id,urefs.uref.field_index,urefs.uref.usage_index, urefs.uref.usage_code);

}

ret=ioctl(fd,HIDIOCSUSAGES,&urefs);//写入数据1

if(ret !=0)

{

printf("failed !\n");

close(fd);

return -1;

}

}

rinfo.report_type=HID_REPORT_TYPE_INPUT;

rinfo.report_id=HID_REPORT_ID_FIRST;

for(i=0;i

{

printf("num_field=%d\n",rinfo.num_fields);

finfo.report_type=rinfo.report_type;

finfo.report_id=rinfo.report_id;

finfo.field_index=i;

printf("finfo.report_id:%d\n",finfo.report_id);

ret =ioctl(fd,HIDIOCGFIELDINFO,&finfo);

if(ret !=0)

{

printf("ioctl five faile!\n");

close(fd);

return -1;

}

else

{

printf("finfo.report_id:%d\n",finfo.report_id);

}

}

for(i=0;i<21;i++)//打印结构体中是否有值。运行之后显示正确

{

printf("%3x",urefs.values[i]);

}

printf("\n");

ret=ioctl(fd,HIDIOCINITREPORT,0);

printf("ret = %d\n",ret);

memset(urefs.values,0,sizeof(urefs.values));//将结构体中用来存储数据的urefs.values置空

for(i=0;i<21;i++)

printf("%3x",urefs.values[i]);

ret=ioctl(fd,HIDIOCGUSAGES,&urefs);//接收数据,程序运行正确

printf("ret = %d\n",ret);

for(i=0;i<21;i++)//打印接收的值,运行后结果没有变,还是bufw的值

{

printf("%3x",urefs.values[i]);

}

printf("\n");

close(fd);

return 0;

}

编译通过,同时通过ioctl可以得到设备的相关信息,但是接收数据却是打印出原先bufw的值。如果要是和硬件通信成功,返回的应该是硬件返回到上层的值,在xp下用Bus Hound测得由硬件返回的值是{0x01,0x08,0xc8,0xca,0x00,0xff,0}。请问是错在哪里了?为何用ioctl接收到的值是错的?请各位指导下小弟。谢谢!

------解决方案--------------------

使用libusb很简单

文章评论

linux查看hid设备,linux hid设备读写相关推荐

  1. linux如何查看硬件驱动,linux查看硬件信息及驱动设备相关整理

    该楼层疑似违规已被系统折叠 隐藏此楼查看此楼 联系我登录 首页 业界新闻 技术文章 资源分享 微语 linux查看硬件信息及驱动设备相关整理[转] 蓝猫 发布于:2014-5-30 17:48 分类: ...

  2. linux检测硬件驱动,linux查看硬件信息及驱动设备相关整理

    该楼层疑似违规已被系统折叠 隐藏此楼查看此楼 联系我登录 首页 业界新闻 技术文章 资源分享 微语 linux查看硬件信息及驱动设备相关整理[转] 蓝猫 发布于:2014-5-30 17:48 分类: ...

  3. linux查看设备硬件,linux查看硬件信息及驱动设备相关整理

    该楼层疑似违规已被系统折叠 隐藏此楼查看此楼 联系我登录 首页 业界新闻 技术文章 资源分享 微语 linux查看硬件信息及驱动设备相关整理[转] 蓝猫 发布于:2014-5-30 17:48 分类: ...

  4. linux 查看usb驱动,linux查看硬件信息及驱动设备相关整理

    该楼层疑似违规已被系统折叠 隐藏此楼查看此楼 联系我登录 首页 业界新闻 技术文章 资源分享 微语 linux查看硬件信息及驱动设备相关整理[转] 蓝猫 发布于:2014-5-30 17:48 分类: ...

  5. linux查看硬盘驱动,linux查看硬件信息及驱动设备相关整理

    该楼层疑似违规已被系统折叠 隐藏此楼查看此楼 联系我登录 首页 业界新闻 技术文章 资源分享 微语 linux查看硬件信息及驱动设备相关整理[转] 蓝猫 发布于:2014-5-30 17:48 分类: ...

  6. linux查看usb驱动版本号,linux查看硬件信息及驱动设备相关整理

    该楼层疑似违规已被系统折叠 隐藏此楼查看此楼 联系我登录 首页 业界新闻 技术文章 资源分享 微语 linux查看硬件信息及驱动设备相关整理[转] 蓝猫 发布于:2014-5-30 17:48 分类: ...

  7. linux查看显示器名称命令,linux 查看显示器信息Linux下查看硬件信息命令大全

    /proc 虚拟的目录,是系统内存的映射.可直接访问这个目录来获取系统信息.其中也包含下面的信息: 主机CPU信息:cpuinfo 主机DMA通道信息:dma 文件系统信息:filesystems 主 ...

  8. linux查看显卡核心数,linux查看硬件信息,linux查看硬盘信息,linux查看CPU信息,linux查看显卡,硬件型号信息 | 帮助信息-动天数据...

    linux查看硬件信息,linux查看硬盘信息,linux查看CPU信息,linux查看显卡,硬件型号信息 作者:dthost | 时间:2015-09-30 | 8,325 次阅读 linux服务器 ...

  9. 通过命令查看linux 密码,linux查看用户密码(linux查看用户密码命令)

    linux查看用户密码(linux查看用户密码命令) 2020-05-15 13:18:30 共10个回答 1.用户名和密码的存储位置存储帐号的文件:/etc/passwd存储密码的文件:/etc/s ...

  10. linux中giep命令作用,Linux查看硬件信息以及驱动设备的命令

    用硬件检测程序kuduz探测新硬件:service kudzu start ( or restart) 查看CPU信息:cat /proc/cpuinfo 查看板卡信息:cat /proc/pci 查 ...

最新文章

  1. WPF的二维绘图(二)——几何图形Geometry
  2. R语言广义加性模型(GAMs:Generalized Additive Model)建模:数据加载、划分数据、并分别构建线性回归模型和广义线性加性模型GAMs、并比较线性模型和GAMs模型的性能
  3. python内置函数调用前_python之内置函数(一)
  4. 学python需要记得的单词_学习Python必背的初级单词有哪些?
  5. GIT项目管理工具(part8)--版本控制
  6. 一个.NET Core下的开源插件框架Pluginfactory
  7. 阿里可观测性数据引擎的技术实践
  8. 生成式预训练之MASS
  9. SpringSecurity之权限管理
  10. 植物大战僵尸修改办法
  11. 贪吃蛇小游戏制作(4)
  12. Jmeter:图形界面压力测试工具
  13. 相机的内参会改变吗_关于相机内参中的焦距fx和fy
  14. 胖哈勃杯第十三届CUIT校赛web300短域名工具wp及出题心得
  15. MYSQL中概念模型的基本概念_数据库基本概念
  16. 罗技无线鼠标接收器无法配对的详细解决办法
  17. Oracle项目管理系统之设计任务下达及成果交付
  18. 计网第三章答案(谢希仁 第七版)
  19. Xilinx 7系列FPGA之Kintex-7产品简介
  20. 在Google搜索结果显示原始链接

热门文章

  1. 农村金融大变革,央行要给农民发钱了!
  2. 在Ubuntu 18.04 LTS 入门 ROS Melodic 机器人 操作系统
  3. 新能源维修和计算机应用哪个好,在买新能源车之前 这些事你应该先知道
  4. 零百1.8秒的电动车竟然是威马... | 云逛成都车展
  5. 陌陌宣布启用全新中文名“挚文集团” ,Q2净利润4.6亿元
  6. 社区团购的坑,只有巨头能填?
  7. 京东:不存在显卡售后“金融化”情况 保留追究造谣者法律责任的权利
  8. 禁止电商平台二选一、遛狗必栓绳!5月起有这些新规定
  9. 5G手机将不用流量可免费看电视,网友:流量免费,内容付费?
  10. iPhone 6s不死!支持升级iOS 14,还能再战两年