duanjong
驱动中牛
驱动中牛
  • 注册日期2003-03-10
  • 最后登录2006-01-18
  • 粉丝0
  • 关注0
  • 积分31分
  • 威望5点
  • 贡献值0点
  • 好评度1点
  • 原创分0分
  • 专家分0分
阅读:1471回复:12

现在终于可以了

楼主#
更多 发布于:2003-07-29 21:00
现在可以打开USB设备,但是要想和 USB设备通信,我们还必须打开相应的USB端口,我上面的程序就是在打开设备的情况下来打开USB端口的,以便我可以对USB设备进行读写,如果没有上面的函数,我们如何对USB设备进行读写呢?我这里的port是指USB端口,比如端口1:PIPE1


 

[编辑 -  7/30/03 by  duanjong]

[编辑 -  7/30/03 by  duanjong]

最新喜欢:

sunmaculasunmac...
duanjong
驱动中牛
驱动中牛
  • 注册日期2003-03-10
  • 最后登录2006-01-18
  • 粉丝0
  • 关注0
  • 积分31分
  • 威望5点
  • 贡献值0点
  • 好评度1点
  • 原创分0分
  • 专家分0分
沙发#
发布于:2003-07-30 15:09
我也是那样用的,现在可以打开USB设备,但是要想和 USB设备通信,我们还必须打开相应的USB端口,我上面的程序就是在打开设备的情况下来打开USB端口的,以便我可以对USB设备进行读写,如果没有上面的函数,我们如何对USB设备进行读写呢?我这里的port是指USB端口,比如端口1:PIPE1
duanjong
驱动中牛
驱动中牛
  • 注册日期2003-03-10
  • 最后登录2006-01-18
  • 粉丝0
  • 关注0
  • 积分31分
  • 威望5点
  • 贡献值0点
  • 好评度1点
  • 原创分0分
  • 专家分0分
板凳#
发布于:2003-07-30 15:06
我也是那样用的,现在可以打开USB设备,但是要想和 USB设备通信,我们还必须打开相应的USB端口,我上面的程序就是在打开设备的情况下来打开USB端口的,以便我可以对USB设备进行读写,如果没有上面的函数,我们如何对USB设备进行读写呢?
jinghuiren
驱动巨牛
驱动巨牛
  • 注册日期2002-06-01
  • 最后登录2008-10-27
  • 粉丝0
  • 关注0
  • 积分291分
  • 威望460点
  • 贡献值0点
  • 好评度428点
  • 原创分0分
  • 专家分0分
地板#
发布于:2003-07-30 14:51
打开设备的路径是functionClassDeviceData->DevicePath,你为什么又加上一个port?port是什么东西,是端口号吗?不是这样用的啦,直接用functionClassDeviceData->DevicePath作为CreatFile()的第一个参数!!!我前面的例程里不是写得很清楚吗
duanjong
驱动中牛
驱动中牛
  • 注册日期2003-03-10
  • 最后登录2006-01-18
  • 粉丝0
  • 关注0
  • 积分31分
  • 威望5点
  • 贡献值0点
  • 好评度1点
  • 原创分0分
  • 专家分0分
地下室#
发布于:2003-07-30 14:41
现在可以打开USB设备,其实我的GUID 是对的,主要是程序的问题,缺少一条关键语句,谢谢你,给你20分以致鼓励,但现在打开USB端口失败,函数如下:
void CUSB_RD_WRDlg::OpenUsbPort(CString port)
{
      char completeDeviceName[256] =\"\" ;

      if(functionClassDeviceData->DevicePath != NULL)
 {
    
    strcat(completeDeviceName,functionClassDeviceData->DevicePath);
         strcat(completeDeviceName,port);

         hUsbPort = CreateFile(completeDeviceName,
GENERIC_READ|GENERIC_WRITE,      //Specifies the type of access to the object
FILE_SHARE_READ|FILE_SHARE_WRITE,//Specifies how the object can be shared
NULL,                            //Ignored; set to NULL
OPEN_EXISTING,                   //Specifies which action to take on files that exist
0,                               //Specifies the file attributes and flags for the file
NULL);
if(hUsbPort==INVALID_HANDLE_VALUE)
{
   AfxMessageBox(\"打开USB端口失败,请确认各项参数设置是否正确???\");
        
      // return false;
}

 }
       else
            AfxMessageBox(\"获得设备端口失败,请检查USB设备或端口是否连接正确???\");
}

[编辑 -  7/30/03 by  duanjong]
duanjong
驱动中牛
驱动中牛
  • 注册日期2003-03-10
  • 最后登录2006-01-18
  • 粉丝0
  • 关注0
  • 积分31分
  • 威望5点
  • 贡献值0点
  • 好评度1点
  • 原创分0分
  • 专家分0分
5楼#
发布于:2003-07-30 14:38
现在可以打开USB设备,但打开USB端口失败,函数如下:
void CUSB_RD_WRDlg::OpenUsbPort(CString port)
{
      char completeDeviceName[256] =\"\" ;

      if(functionClassDeviceData->DevicePath != NULL)
 {
    
    strcat(completeDeviceName,functionClassDeviceData->DevicePath);
         strcat(completeDeviceName,port);

         hUsbPort = CreateFile(completeDeviceName,
GENERIC_READ|GENERIC_WRITE,      //Specifies the type of access to the object
FILE_SHARE_READ|FILE_SHARE_WRITE,//Specifies how the object can be shared
NULL,                            //Ignored; set to NULL
OPEN_EXISTING,                   //Specifies which action to take on files that exist
0,                               //Specifies the file attributes and flags for the file
NULL);
if(hUsbPort==INVALID_HANDLE_VALUE)
{
   AfxMessageBox(\"打开USB端口失败,请确认各项参数设置是否正确???\");
        
      // return false;
}

 }
       else
            AfxMessageBox(\"获得设备端口失败,请检查USB设备或端口是否连接正确???\");
}
jinghuiren
驱动巨牛
驱动巨牛
  • 注册日期2002-06-01
  • 最后登录2008-10-27
  • 粉丝0
  • 关注0
  • 积分291分
  • 威望460点
  • 贡献值0点
  • 好评度428点
  • 原创分0分
  • 专家分0分
6楼#
发布于:2003-07-30 13:57
你用2里面的guid不能打开设备吗?
你用我给你的那个里成把两个guid都试试!
duanjong
驱动中牛
驱动中牛
  • 注册日期2003-03-10
  • 最后登录2006-01-18
  • 粉丝0
  • 关注0
  • 积分31分
  • 威望5点
  • 贡献值0点
  • 好评度1点
  • 原创分0分
  • 专家分0分
7楼#
发布于:2003-07-30 12:25
附件2,我觉得应该是附件2对应的GUID

[编辑 -  7/30/03 by  duanjong]
duanjong
驱动中牛
驱动中牛
  • 注册日期2003-03-10
  • 最后登录2006-01-18
  • 粉丝0
  • 关注0
  • 积分31分
  • 威望5点
  • 贡献值0点
  • 好评度1点
  • 原创分0分
  • 专家分0分
8楼#
发布于:2003-07-30 12:24
通过DEFINE_GUID定义的PGUID 是注册表中的symbolicname对应的PGUID还是classguid,应该是附件中的哪一个?
jinghuiren
驱动巨牛
驱动巨牛
  • 注册日期2002-06-01
  • 最后登录2008-10-27
  • 粉丝0
  • 关注0
  • 积分291分
  • 威望460点
  • 贡献值0点
  • 好评度428点
  • 原创分0分
  • 专家分0分
9楼#
发布于:2003-07-30 10:59
如下图右边框里的driver下里面的guid,你可以试试,如果不行的话我就没办法了:
jinghuiren
驱动巨牛
驱动巨牛
  • 注册日期2002-06-01
  • 最后登录2008-10-27
  • 粉丝0
  • 关注0
  • 积分291分
  • 威望460点
  • 贡献值0点
  • 好评度428点
  • 原创分0分
  • 专家分0分
10楼#
发布于:2003-07-30 10:46
下面我给你个完整的例程,我的设备就是用这个函数打开的,但是前提是你必须知道驱动里用来生成symbollinkname的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;
}


里面的guid:DEFINE_GUID(GUID_CLASS_D12_BULK,
0x36FC9E60, 0xC465, 0x11CF, 0x80, 0x56, 0x44, 0x45, 0x53, 0x54, 0x00, 0x00);

这个guid可以通过vc里有一个guid产生工具产生一个,可是如过你没有源代码的话我就不知道如何获得设备guid了,好像他们一般是从注册表中得到的!。
duanjong
驱动中牛
驱动中牛
  • 注册日期2003-03-10
  • 最后登录2006-01-18
  • 粉丝0
  • 关注0
  • 积分31分
  • 威望5点
  • 贡献值0点
  • 好评度1点
  • 原创分0分
  • 专家分0分
11楼#
发布于:2003-07-29 22:30
那INF文件中的classguid 是你指的设备的guid吗?在注册表中的哪个位置?是symbolicname 吗?是附件中的那一个?
jinghuiren
驱动巨牛
驱动巨牛
  • 注册日期2002-06-01
  • 最后登录2008-10-27
  • 粉丝0
  • 关注0
  • 积分291分
  • 威望460点
  • 贡献值0点
  • 好评度428点
  • 原创分0分
  • 专家分0分
12楼#
发布于:2003-07-29 22:12
不是classGUID,应该是你设备的guid。
没有usb设备你怎么调app呀?
所有的usb传输都是要由硬件参与的,没有硬件还有什么玩的?
游客

返回顶部