如何将诸如“SET DATE TIME”之类的供应商特定命令发送到USB设备

时间:2017-01-03 07:37:14

标签: c# usb libusbdotnet

我在C#应用程序中使用libusbdotnet与usb设备通信。如何使用libusbdotnet?{/ p>为SET DATE TIME提供特定于供应商的命令

1 个答案:

答案 0 :(得分:0)

从USB协议的意义上讲,供应商的具体请求是常见请求(请参阅http://www.cypress.com/file/202971/download - 使用FX2LP创建您自己的USB供应商命令)并且您可以使用控件如果足以将请求发送到设备的控制端点EP0 ,则转移。您必须深入了解设备的内部结构才能使其工作,您必须知道设备结构中的哪个端点必须发出请求以及您必须在请求数据包的字段中放置哪些值:地址 bmRequestType bRequest ,(端点号),...如果供应商特定请求不能被发送到控制端点,您不能使用控制转移(http://www.beyondlogic.org/usbnutshell/usb4.shtml#Control)。

关于USB请求的一般信息在http://www.beyondlogic.org/usbnutshell/usb6.shtml有关供应商特定请求的信息中,例如http://www.cypress.com/file/202971/download - 使用FX2LP创建您自己的USB供应商命令

用于控件传输的 libusbdotnet 方法是

public virtual bool ControlTransfer( ref UsbSetupPacket setupPacket, Object buffer, int bufferLength, out int lengthTransferred )

您必须自己构建setupPacket,请参阅http://www.beyondlogic.org/usbnutshell/usb6.shtml

http://libusbdotnet.sourceforge.net/V2/html/65fd96b8-6c8f-f877-22a5-15074d922485.htm

您可以使用 libusb 执行如下控件传输:

    同步I / O int libusb_control_transfer (libusb_device_handle *dev_handle, uint8_t bmRequestType, uint8_t bRequest, uint16_t wValue, uint16_t wIndex, unsigned char *data, uint16_t wLength, unsigned int timeout)中的
  • 这不能发送到特定端点,转到EP0

  • 异步I / O libusb_control_setup (libusb_device_handle *dev_handle, uint8_t bmRequestType, uint8_t bRequest, uint16_t wValue, uint16_t wIndex, unsigned char *data, uint16_t wLength, unsigned int timeout)中的
  • 无法寻址到特定端点,转到EP0,并且没有数据部分意味着它只在控制传输中构建设置数据包(控制传输包括设置阶段,数据阶段,状态阶段) (http://libusb.org/static/api-1.0/structlibusb__control__setup.html

如果您必须将请求发送到特定端点(而不是控制端点),则可以使用批量传输 interrupt_transfer

http://libusb.sourceforge.net/api-1.0/group__syncio.htmlhttp://libusb.org/static/api-1.0/group__misc.html中列出了libusb中可用的标准USB请求