小弟在做一个软件,实现PC端通过usb与移动设备的通信,修改、读取设备的文件系统等。
之前对usb通信没接触过,不知道流程应该是怎样的,希望大家能告诉我一个框架。
还有对设备端通过usb接口发送命令是否需要自己该驱动
我目前有获取到设备的一些信息,如路径,guid等,但不知后面该如何整,期待大家指教。

解决方案 »

  1.   

    http://www.pudn.com/downloads113/sourcecode/delphi_control/detail470795.html
    下载这个程序研究一下,D12Test
      

  2.   

    ::DeviceIoControl(hDevice, // 设备句柄

    ATST2004_IOCTL_READ,
    &Query, sizeof(STORAGE_PROPERTY_QUERY), // 输入数据缓冲区
    dwOutbuf, sizeof(dwOutbuf), // 输出数据缓冲区
    &dwOutBytes, // 输出数据长度
      (LPOVERLAPPED)NULL); // 用同步I/O这里输入数据 需要输入什么呢
      

  3.   

    我用 WriteFile(hDevice,   "password",   9,   &dwOutBytes,   NULL)尝试传数据时
    getlasterro返回信息说参数不正确,请问该如何传递参数
      

  4.   

    “实现PC端通过usb与移动设备的通信,修改、读取设备的文件系统等”,关注中.........
      

  5.   

    主机对USB设备的识别过程叫做枚举,一个完整的Windows对USB设备枚举的过程为(不同设备可能稍微有些不同):
    1) Get Device Descriptor。主机的第一个命令要求得到设备描述符,此SETUP包为8个字节数据(80,06,00,01,00,00,40,00),其具体含义请参考表5-1和5-2。“40”表示返回数据长度最大为40H个字节。实际上,只返回一个包,即数组DEV_DESC[ ]中的前8个字节,用于说明设备的描述符的真实长度和设备的类型。
    2) Set Address。接着是设置设备地址处理事件,主机发送一个含有指定地址的数据包(00,05,02,00,00,00,00,00),在主机只有一个USB设备的时候,这个地址一般会是2,最大地址127,USB协议中可以连接127个设备。设置地址事件处理结束后,设备进入地址状态,主机以后会在新的指定地址处访问设备。
    3) Get Device Descriptor。主机再次发送请求得到设备描述符的数据包(80,06,00,01,00,00,12,00),与上次不同的是,要求的数据的长度是实际的数据长度。
    4) Get Configuration Descriptor。接着主机要求得到设备的配置描述符(80,06,00,02,00,00,09,00),包中数据“09”指定设备发送9个字节,这正是设备配置描述符的长度。
    5) 读取全部Configuration Descriptor。接着主机要求得到设备全部的配置描述符、接口描述符和节点描述符(80,06,00,02,00,00,FF,00),由于主机不知道设备描述符的真实长度,因此它要求得到256个字节。
    6) 如果以上步骤都正确,主机将找到新设备,提示安装驱动程序;否则找到未知设备,不可用。 如果驱动程序安装成功,主机会再次以描述符的实际长度要求设备重新发送设备描述符和配置描述符;接着主机发送设置设备配置SETUP包,设备处理此事件,将允许所有节点进入工作状态;最后主机请求得到设备和接口的配置,如果设备成功应答,枚举过程结束。
    到http://blog.csdn.net/lujunql去看看
      

  6.   

    要有通信协议吧,不然无从操作。USB操作不是你想发什么命令就发什么命令的,你不可能通过USB获得所有移动设备内部的状况,有些数据,需要事先将通信协议定好,移动设备先要有这个功能,才能通过上位机按通信协议向移动设备获取。有时也要涉及到驱动。
      

  7.   

    usb设备不同,其读写方式也不同。