aitide
驱动牛犊
驱动牛犊
  • 注册日期2001-05-22
  • 最后登录
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
阅读:1912回复:5

请问:能否对USB端口象PCI总线OR EPP口一样直接读写?

楼主#
更多 发布于:2001-05-24 17:07
请问:能否对USB端口象PCI总线OR EPP口一样直接读写,
如果可以,USB的端口地址如何确定?
谢谢!

最新喜欢:

cyliucyliu
无心化语
禁止发言
禁止发言
  • 注册日期2001-03-23
  • 最后登录2018-06-01
  • 粉丝0
  • 关注0
  • 积分-103分
  • 威望2点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
  • 社区居民
沙发#
发布于:2001-05-24 19:18
用户被禁言,该主题自动屏蔽!
rayyang2000
管理员
管理员
  • 注册日期2001-03-23
  • 最后登录2012-09-13
  • 粉丝3
  • 关注0
  • 积分1036分
  • 威望925点
  • 贡献值3点
  • 好评度823点
  • 原创分0分
  • 专家分0分
板凳#
发布于:2001-05-24 19:25
不可以。
天天coding-debugging中----超稀饭memory dump file ======================================================== [b]Windows Device Driver Development and Consulting Service[/b] [color=blue][url]http://www.ybwork.com[/url][/color] ========================================================
aitide
驱动牛犊
驱动牛犊
  • 注册日期2001-05-22
  • 最后登录
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
地板#
发布于:2001-05-25 09:34
既然不可以直接对USB口直接读写,那我怎么取到从图象传感器采集的数据?谢谢!
lidf
驱动牛犊
驱动牛犊
  • 注册日期2001-04-24
  • 最后登录2010-10-24
  • 粉丝0
  • 关注0
  • 积分10分
  • 威望1点
  • 贡献值0点
  • 好评度1点
  • 原创分0分
  • 专家分0分
地下室#
发布于:2002-02-08 11:28
看书学习。
cisc
plasma
驱动小牛
驱动小牛
  • 注册日期2002-02-19
  • 最后登录2008-02-27
  • 粉丝0
  • 关注0
  • 积分50分
  • 威望5点
  • 贡献值0点
  • 好评度5点
  • 原创分0分
  • 专家分0分
5楼#
发布于:2002-02-20 14:22
如果你想打开一个USB管道,你首先要知道这种USB设备的GUID和管理道名称,
获取句柄以后就可以使用ReadFile/WriteFile进行读写了!
以下是代码,请参考!!

// filename是管道名称,如pipe01等
int CUSBImpObject::open_file( char *filename)
{

 int successOpened = 0,i;
 int NumOpened;
 HANDLE h;
 NumOpened=OpenAllUsbDevices((LPGUID) &GUID_CLASS_I82930_BULK);
    if(NumOpened<=0)
  return 0;
    for(i=0;i<NumOpened;i++){
        strcat (outnamebuf,
       \"\\\\\"
          );

        strcat (outnamebuf,
       filename
       );


     h= CreateFile(outnamebuf,
                  GENERIC_WRITE | GENERIC_READ,
                  FILE_SHARE_WRITE | FILE_SHARE_READ,
                  NULL,
                  OPEN_EXISTING,
                  0,
                  NULL);
     if (h == INVALID_HANDLE_VALUE) {
   handUsbArray=NULL;
  } else {
    handUsbArray=h;
    successOpened++;
  }
 }
 return successOpened;
}


int CUSBImpObject::OpenAllUsbDevices(LPGUID pGuid)     //打开所有的GUID为
pGuid的USB器件
{                //输出名存在outnamebuf中
 ULONG NumberDevices;
 HANDLE hOut = INVALID_HANDLE_VALUE;       //HANDLE Phout[8];
 HDEVINFO                 hardwareDeviceInfo;
 SP_INTERFACE_DEVICE_DATA deviceInfoData;
 ULONG                    i,flag=1,j;
 ULONG       NumDevicesOpened=0;
 BOOLEAN                  done;
 PUSB_DEVICE_DESCRIPTOR   usbDeviceInst;
 PUSB_DEVICE_DESCRIPTOR *UsbDevices = &usbDeviceInst;
 char DeviceName[256]=\"\";         //器件名

 *UsbDevices = NULL;
    UsbDevicesOpened = 0;          //打开器件数置零

 hardwareDeviceInfo = SetupDiGetClassDevs (
  pGuid,
  NULL,             // Define no enumerator (global)
  NULL,             // Define no
  (DIGCF_PRESENT |          // Only Devices present
  DIGCF_INTERFACEDEVICE));        // Function class devices.

 NumberDevices = 4;
 done = FALSE;
 deviceInfoData.cbSize = sizeof (SP_INTERFACE_DEVICE_DATA);
 i=0  ;
 while (!done) {
  NumberDevices *= 2;

  if (*UsbDevices) {
   *UsbDevices =
    (struct _USB_DEVICE_DESCRIPTOR *)realloc (*UsbDevices, (NumberDevices *
sizeof (USB_DEVICE_DESCRIPTOR)));
  } else {
   *UsbDevices = (struct _USB_DEVICE_DESCRIPTOR *)calloc (NumberDevices,
sizeof (USB_DEVICE_DESCRIPTOR));
  }

  if (NULL == *UsbDevices) {
   SetupDiDestroyDeviceInfoList (hardwareDeviceInfo);
   return 0 ;
  }

  usbDeviceInst = *UsbDevices + i;

  for (; i < NumberDevices; i++) {
   if (SetupDiEnumDeviceInterfaces (hardwareDeviceInfo,
    0,
    pGuid,
    i,
    &deviceInfoData))
   {
    hOut = OpenOneDevice (hardwareDeviceInfo, &deviceInfoData, DeviceName);
    if ( hOut != INVALID_HANDLE_VALUE )
    {
     handUsbArray[UsbDevicesOpened]=hOut;

     if(!outnamebuf[UsbDevicesOpened])
     {
      return 0;
     }
     for(j=0;j<256;j++)
     {
      *(outnamebuf[UsbDevicesOpened]+j)=*(DeviceName+j);
      *(DeviceName+j)=0;
     }
     UsbDevicesOpened++;
    }
   }
   else
   {
    if(ERROR_NO_MORE_ITEMS == GetLastError())
    {
     done = TRUE;
     break;
    }
   }

  }    //end for
 }       //end while
 SetupDiDestroyDeviceInfoList (hardwareDeviceInfo);
 free ( *UsbDevices );
 return UsbDevicesOpened ;

 }

//--------------------------------------------------------------------
//
//
//
//--------------------------------------------------------------------
HANDLE CUSBImpObject::OpenOneDevice (
    IN       HDEVINFO                    HardwareDeviceInfo,
    IN       PSP_INTERFACE_DEVICE_DATA   DeviceInfoData,
 IN   char *devName
    )
{
    PSP_INTERFACE_DEVICE_DETAIL_DATA     functionClassDeviceData = NULL;
    ULONG                                predictedLength = 0;
    ULONG                                requiredLength = 0;
    HANDLE              hOut = INVALID_HANDLE_VALUE;
    SetupDiGetInterfaceDeviceDetail (
            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;

    functionClassDeviceData =(struct _SP_DEVICE_INTERFACE_DETAIL_DATA_A *)
malloc (predictedLength);
    functionClassDeviceData->cbSize = sizeof
(SP_INTERFACE_DEVICE_DETAIL_DATA);

    if (! SetupDiGetInterfaceDeviceDetail (
               HardwareDeviceInfo,
               DeviceInfoData,
               functionClassDeviceData,
               predictedLength,
               &requiredLength,
               NULL)) {
  free( functionClassDeviceData );
        return INVALID_HANDLE_VALUE;
    }

 strcpy( devName,functionClassDeviceData->DevicePath) ;

    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

    if (INVALID_HANDLE_VALUE == hOut) {

    }
 free( functionClassDeviceData );
 return hOut;
}

游客

返回顶部