我在C#应用程序中使用libusbdotnet与usb设备通信。如何使用libusbdotnet?{/ p>为SET DATE TIME
提供特定于供应商的命令
答案 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 执行如下控件传输:
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
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.html 在http://libusb.org/static/api-1.0/group__misc.html中列出了libusb中可用的标准USB请求