magma
驱动牛犊
驱动牛犊
  • 注册日期2003-06-10
  • 最后登录2003-08-29
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
阅读:1617回复:3

怎么从usb口读取数据?

楼主#
更多 发布于:2003-07-01 09:46
怎么能通过usb口读数据(假设usb的驱动已经装好了),应该是通过createfile,readfile函数吧?但是createfile函数的第一个参数是什么?应该怎么写?最好能举个例子解释一下

最新喜欢:

idlemanidlema...
biqingshui
驱动牛犊
驱动牛犊
  • 注册日期2003-06-22
  • 最后登录2004-12-01
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
沙发#
发布于:2003-07-03 10:30
那怎么知道自己的GUID呢?
jinghuiren
驱动巨牛
驱动巨牛
  • 注册日期2002-06-01
  • 最后登录2008-10-27
  • 粉丝0
  • 关注0
  • 积分291分
  • 威望460点
  • 贡献值0点
  • 好评度428点
  • 原创分0分
  • 专家分0分
板凳#
发布于:2003-07-01 11:26
下面是个通过guid打开设备的完整历程,里面的guid要改成你自己的:
HANDLE
open_dev()
{
PSP_INTERFACE_DEVICE_DETAIL_DATA     functionClassDeviceData = NULL;
    SP_INTERFACE_DEVICE_DATA     deviceInfoData;
    ULONG                                predictedLength = 0;
    ULONG                                requiredLength = 0;
HANDLE hOut = INVALID_HANDLE_VALUE;
    HDEVINFO                 hardwareDeviceInfo = NULL;
    PUSB_DEVICE_DESCRIPTOR UsbDevices;

    deviceInfoData.cbSize = sizeof (SP_INTERFACE_DEVICE_DATA);
    UsbDevices = (PUSB_DEVICE_DESCRIPTOR)malloc (sizeof (USB_DEVICE_DESCRIPTOR));
    if (NULL == UsbDevices)
{
    SetupDiDestroyDeviceInfoList (hardwareDeviceInfo);
return hOut;
      }

hardwareDeviceInfo = SetupDiGetClassDevs(
                           (LPGUID)&GUID_CLASS_D12_BULK,
                           NULL, // Define no enumerator (global)
                           NULL, // Define no
                           (DIGCF_PRESENT | // Only Devices present
                            DIGCF_INTERFACEDEVICE));
if(hardwareDeviceInfo == NULL)
{
   SetupDiDestroyDeviceInfoList (hardwareDeviceInfo);
if(UsbDevices)
free(UsbDevices);
}

SetupDiEnumDeviceInterfaces (hardwareDeviceInfo,
                                 0, // We don\'t care about specific PDOs
(LPGUID) &GUID_CLASS_D12_BULK,
                                 0,
                                 &deviceInfoData);

    SetupDiGetDeviceInterfaceDetail(
            hardwareDeviceInfo,
            &deviceInfoData,
            NULL, // probing so no output buffer yet
            0, // probing so output buffer length of zero
            &requiredLength,
            NULL); // not interested in the specific dev-node


    predictedLength = requiredLength;
if(predictedLength)
{
functionClassDeviceData = (PSP_INTERFACE_DEVICE_DETAIL_DATA)malloc (predictedLength);
functionClassDeviceData->cbSize = sizeof (SP_INTERFACE_DEVICE_DETAIL_DATA);
    }
//
    // Retrieve the information from Plug and Play.
    //
    if (!SetupDiGetDeviceInterfaceDetail (
               hardwareDeviceInfo,
               &deviceInfoData,
               functionClassDeviceData,
               predictedLength,
               &requiredLength,
               NULL))
{
   SetupDiDestroyDeviceInfoList (hardwareDeviceInfo);
if(functionClassDeviceData)
free(functionClassDeviceData);
if(UsbDevices)
free(UsbDevices);
return hOut;
    }

    hOut = CreateFile (
                  functionClassDeviceData->DevicePath,
                  GENERIC_READ | GENERIC_WRITE,
                  FILE_SHARE_READ | FILE_SHARE_WRITE,
                  NULL, // no SECURITY_ATTRIBUTES structure
                  OPEN_EXISTING, // No special create flags
                  0, // No special attributes
                  NULL); // No template file
    SetupDiDestroyDeviceInfoList (hardwareDeviceInfo);
    free(functionClassDeviceData);
if(UsbDevices)
free(UsbDevices);
return hOut;
}
jinghuiren
驱动巨牛
驱动巨牛
  • 注册日期2002-06-01
  • 最后登录2008-10-27
  • 粉丝0
  • 关注0
  • 积分291分
  • 威望460点
  • 贡献值0点
  • 好评度428点
  • 原创分0分
  • 专家分0分
地板#
发布于:2003-07-01 11:24
第一个参数是设备句柄吧
如果你的设备是通过guid实现的,那就用几个setupdiXXX函数获得设备名的路径,然后用creatfile打开设备得到句柄
如果是自己命名的,那就用设备名可以直接用creatfile打开。
游客

返回顶部