当前位置: 技术问答>linux和unix
Ubuntu下怎么枚举usb设备信息?
来源: 互联网 发布时间:2016-08-28
本文导语: 小弟初识Linux,在Ubuntu下,不知道有没有函数能够枚举出usb设备,比如我插入一个usb设备A后,怎么通过程序打开A,并对其进行读写操作。小弟是新手,希望前辈们能不吝赐教!谢谢 | http://hi.b...
小弟初识Linux,在Ubuntu下,不知道有没有函数能够枚举出usb设备,比如我插入一个usb设备A后,怎么通过程序打开A,并对其进行读写操作。小弟是新手,希望前辈们能不吝赐教!谢谢
|
http://hi.baidu.com/feifei0730/blog/item/be3c114c24a85bffd62afc16.html
这个应该对lz有帮助:
这个应该对lz有帮助:
转:
枚举USB设备
// DeviceManager.cpp : 定义控制台应用程序的入口点。
#include
#include
#include
#include
#define DIRECTINPUT_VERSION 0x0800
#include
extern "C"
{
#include
}
#include
#pragma comment(lib, "Dinput8.lib")
#pragma comment(lib, "Dinput.lib")
#pragma comment(lib, "Setupapi.lib")
#pragma comment(lib, "hid.lib")
GUID myGuid;
LPDIRECTINPUT8 m_lpDI; // DI8接口指针
LPDIENUMDEVICESCALLBACK DIEnumDevicesCallback(const DIDEVICEINSTANCE* lpddi, VOID* pvRef)
{
*(GUID*) pvRef = lpddi->guidInstance;
return DIENUM_STOP;
}
int main(void)
{
GUID HidGuid;
// 查找本系统中HID类的GUID标识
HidD_GetHidGuid(&HidGuid);
printf("系统中HID类的GUID标识为:%08x-%04x-%04x-%02x%02x-%02x%02x%02x%02x%02x%02xn",
HidGuid.Data1,HidGuid.Data2 ,HidGuid.Data3 ,
HidGuid.Data4[0],HidGuid.Data4[1],HidGuid.Data4[2],
HidGuid.Data4[3],HidGuid.Data4[4],HidGuid.Data4[5],
HidGuid.Data4[6],HidGuid.Data4[7]);
// 准备查找符合HID规范的USB设备
HDEVINFO hDevInfo = SetupDiGetClassDevs(
&HidGuid,
NULL,
NULL,
DIGCF_PRESENT | DIGCF_DEVICEINTERFACE);
if (hDevInfo == INVALID_HANDLE_VALUE)
{
printf("符合HID规范的USB设备发生错误 n");
return 0;
}
printf("正在查找可用的USB设备。。。。 n");
DWORD MemberIndex = 0;
SP_DEVICE_INTERFACE_DATA DeviceInterfaceData;
BOOL bSuccess = FALSE;
DeviceInterfaceData.cbSize = sizeof(SP_DEVICE_INTERFACE_DATA);
do
{
bSuccess = SetupDiEnumDeviceInterfaces(
hDevInfo,
NULL,
&HidGuid,
MemberIndex,
&DeviceInterfaceData);
if ((!bSuccess) && (GetLastError() == ERROR_NO_MORE_ITEMS))
{
if(MemberIndex == 0)
{
printf("抱歉,未找到可用的USB设备! n");
}
else
{
printf("没有更多的可用的USB设备! n");
}
SetupDiDestroyDeviceInfoList(hDevInfo);
return 0;
}
printf("找到了一个USB设备: n");
// 若找到了一个USB设备,则获取该设备的细节信息
PSP_DEVICE_INTERFACE_DETAIL_DATA pDeviceInterfaceDetailData;
DWORD Length = 0;
SetupDiGetDeviceInterfaceDetail(
hDevInfo,
&DeviceInterfaceData,
NULL,
0,
&Length,
NULL);
pDeviceInterfaceDetailData = (PSP_DEVICE_INTERFACE_DETAIL_DATA)malloc(Length);
pDeviceInterfaceDetailData->cbSize = sizeof(SP_DEVICE_INTERFACE_DETAIL_DATA); //MUST BE!!!
if (!SetupDiGetDeviceInterfaceDetail(
hDevInfo,
&DeviceInterfaceData,
pDeviceInterfaceDetailData,
Length,
NULL,
NULL))
{
printf("查找路径设备时出错! n");
}
else
{
printf("设备路径:%s ", pDeviceInterfaceDetailData->DevicePath);
}
//打开设备句柄
HANDLE hDeviceHandle = CreateFile(pDeviceInterfaceDetailData->DevicePath,
GENERIC_READ | GENERIC_WRITE,
FILE_SHARE_READ | FILE_SHARE_WRITE,
NULL,
OPEN_EXISTING,
0,
NULL);
if (hDeviceHandle == INVALID_HANDLE_VALUE)
{
printf("打开设备路径出错! n");
// printf("%d", GetLastError());
}
else
{
HIDD_ATTRIBUTES Attributes;
HidD_GetAttributes(hDeviceHandle,&Attributes);
|
可以看看pci枚举机制
有个hub_scan可以枚举usb口下的级联设备
有个hub_scan可以枚举usb口下的级联设备
|
根据你插入的USB的设备文件名来用程序打开