基于libusb的无驱设计(二)
Libusb库的使用使用libusb之前你的linux系统必须装有usb文件系统,这里还介绍了使用hiddev设备文件来访问设备,目的在于不仅可以比较出usb的易用性,还提供了一个转化成libusb驱动的案例。3.1 find设备任何驱动第一步首先是寻找到要操作的设备,我们先来看看HID驱动是怎样寻找到设备的。我们假设寻找设备的函数Device_Find(注:代码只是为了方便解说,不保证代码的健全)/* 我们简单看一下使用hid驱动寻找设备的实现,然后在看一下libusb是如何寻找设备的 */int Device_Find(){char dir_str[100]; /* 这个变量我们用来保存设备文件的目录路径 */char hiddev[100]; /* 这个变量用来保存设备文件的全路径 */DIR dir;
/* 申请的字符串数组清空,这个编程习惯要养成 */memset (dir_str, 0 , sizeof(dir_str));memset (hiddev, 0 , sizeof(hiddev));
/* hiddev 的设备描述符不在/dev/usb/hid下面,就在/dev/usb 下面这里我们使用opendir函数来检验目录的有效性打开目录返回的值保存在变量dir里,dir前面有声明*/dir=opendir(“/dev/usb/hid”);if(dir){/* 程序运行到这里,说明存在 /dev/usb/hid 路径的目录 */sprintf(dir_str,”/dev/usb/hid/”);closedir(dir);}else{/* 如果不存在hid目录,那么设备文件就在/dev/usb下 */sprintf(dir_str,”/dev/usb/”);}
/* DEVICE_MINOR 是指设备数,HID一般是16个 */for(i = 0; i/* 获得全路径的设备文件名,一般hid设备文件名是hiddev0 到 hiddev16 */sprintf(hiddev, “%shiddev%d”, dir_str,i);
/* 打开设备文件,获得文件句柄 */fd = open(hiddev, O_RDWR);if(fd > 0) {
/* 操作设备获得设备信息 */ioctl(fd, [...]
