C++ 确定HID设备的系统路径
我正在寻找一种动态查找HID(USB)设备的系统路径的方法 在我的Ubuntu机器上,它是/dev/usb/hiddevX,但我想有一些发行版可以在其他地方安装hiddevices 更具体地说:我需要在一个C程序中使用它来打开一个HID设备-这应该在每个系统上都能工作,无论设备安装在哪里 当前功能:C++ 确定HID设备的系统路径,c++,linux,usb,hid,mount-point,C++,Linux,Usb,Hid,Mount Point,我正在寻找一种动态查找HID(USB)设备的系统路径的方法 在我的Ubuntu机器上,它是/dev/usb/hiddevX,但我想有一些发行版可以在其他地方安装hiddevices 更具体地说:我需要在一个C程序中使用它来打开一个HID设备-这应该在每个系统上都能工作,无论设备安装在哪里 当前功能: int openDevice(int vendorId, int productId) { char devicePath[24]; unsigned int numIterati
int openDevice(int vendorId, int productId) {
char devicePath[24];
unsigned int numIterations = 10, i, handle;
for (i = 0; i < numIterations; i++) {
sprintf(devicePath, "/dev/usb/hiddev%d", i);
if((handle = open(devicePath, O_RDONLY)) >= 0) {
if(isDesiredDevice(handle, vendorId, productId))
break;
close(handle);
}
}
if (i >= numIterations) {
ThrowException(Exception::TypeError(String::New("Could not find device")));
}
return handle;
}
int-openDevice(int-vendorId,int-productId){
char设备路径[24];
无符号整数=10,i,句柄;
对于(i=0;i=0){
if(isDesiredDevice(句柄、供应商ID、产品ID))
打破
关闭(手柄);
}
}
如果(i>=numIterations){
ThroweException(Exception::TypeError(String::New(“找不到设备”));
}
返回手柄;
}
它工作得很好,但我不喜欢硬编码的/dev/usb/hiddev
编辑:事实证明,有些人使用/dev/usb/hid/hiddevX和/dev/hiddevX的回退,所以我也构建了这些回退
更新方法:
/**
* Returns the correct handle (file descriptor) on success
*
* @param int vendorId
* @param int productId
* @return int
*/
int IO::openDevice(int vendorId, int productId) {
char devicePath[24];
const char *devicePaths[] = {
"/dev/usb/hiddev\%d",
"/dev/usb/hid/hiddev\%d",
"/dev/hiddev\%d",
NULL
};
unsigned int numIterations = 15, i, j, handle;
for (i = 0; devicePaths[i]; i++) {
for (j = 0; j < numIterations; j++) {
sprintf(devicePath, devicePaths[i], j);
if((handle = open(devicePath, O_RDONLY)) >= 0) {
if(isDesiredDevice(handle, vendorId, productId))
return handle;
close(handle);
}
}
};
ThrowException(Exception::Error(String::New("Couldn't find device!")));
return 0;
};
/**
*成功返回正确的句柄(文件描述符)
*
*@param int vendorId
*@param int productId
*@return int
*/
intIO::openDevice(intVendorID、intProductID){
char设备路径[24];
常量字符*设备路径[]={
“/dev/usb/hiddev\%d”,
“/dev/usb/hid/hiddev\%d”,
“/dev/hiddev\%d”,
无效的
};
无符号整数=15,i,j,句柄;
对于(i=0;设备路径[i];i++){
对于(j=0;j=0){
if(isDesiredDevice(句柄、供应商ID、产品ID))
返回手柄;
关闭(手柄);
}
}
};
ThroweException(异常::错误(字符串::新建(“找不到设备!”));
返回0;
};
<代码> C还是C++?这些是不同的语言。请删除其中一个标签。实际上,我现在在C++程序中使用它,但我以前在C程序中使用它。如果这总是Linux,它总是<代码> /DEV/USB /HIDEVX 。所以没有点猜测。真正地这是100%确定的吗?我几乎不敢相信:-)是的,它将永远在linux上。根据,是的。但是,我找不到关于3.x内核的HID设备的文档:(我知道他们引入了一个新的hidraw
驱动程序,该驱动程序绑定到/dev/hidrawX
,但我不知道与该驱动程序通信的细节(也找不到该驱动程序的文档)。