0

我在 C# 应用程序中使用 libusbdotnet 与 USB 设备进行通信。如何给供应商特定的命令,例如SET DATE TIME使用 libusbdotnet?

4

1 回答 1

0

就 USB 协议供应商而言,特定请求是常见请求(请参阅http://www.cypress.com/file/202971/download - Create your own USB vendor commands using FX2LP ),您可能会为此使用控制传输如果将请求发送到设备的控制端点 EP0就足够了。您必须深入了解设备的内部结构才能使其工作,您必须知道必须向设备结构中的哪个端点发出请求以及必须在请求数据包的字段中放置哪些值: address , 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/Olibusb_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 )

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

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

于 2017-01-03T11:50:07.437 回答