操作系统: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.若读操作时指定长度大于报告描述符规定的长度时,返回实际长度;