Linux应用程序--基于hidraw模式的HID设备访问
操作系统:Debian 8
硬件设备:IC卡读写器
HID报告长度:21字节
读写测试
#include <stdio.h>
#include <stdlib.h>
#include <fcntl.h>
#include <linux/hidraw.h>
#inclde <sys/ioctl.h>
#define DEVNAME "/dev/hidraw3"
int main(int argc, char** argv)
{
char wbuf[30] = {0x06, 0x03, 0x01, 0x00};
char rbuf[30];
int rxlen;
int fd;
int i;
fd = open(DEVNAME, O_RDWR);
if(fd < 0)
{
printf("Can not Open Device.\r\n");
exit(1);
}
// 获取设备信息,主要是pid,vid
struct hidraw_devinfo devinfo;
ret = ioctl(fd,HIDIOCGRAWINFO,&devinfo);
if(ret == 0)
{
printf("VID = %04x, PID = %04X\r\n",
(unsigned short)devinfo.vendor,
(unsigned short)devinfo.product);
}
else
{
perror("HIDIOCGRAWINFO");
}
write(fd, wbuf, 21);
rxlen = read(fd, rbuf, 21);
for(i = 0; i < rxlen; i++)
{
printf("%d ",rbuf[i]);
}
printf("\r\n");
close(fd);
return 0;
}
注意事项:
1.读操作时,如果无数据,则会阻塞至数据到达;
2.一般规定读写操作的长度应该等于报告描述符规定的长度;
3.若读操作时指定长度小于报告描述符规定的长度时,自动舍弃其余字节;
4.若读操作时指定长度大于报告描述符规定的长度时,返回实际长度;