首页 > 解决方案 > libusb 如何理解开始阅读?

问题描述

在主机端,如何理解设备想要使用 libusb-1.0 发送数据?我的意思是除了轮询或设置时间间隔之外的方法。有什么方法可以根据信号、中断等来获取它吗?

标签: clibusbdata-transferlibusb-1.0

解决方案


您可以使用“glibusb”,在此处阅读文档: https ://github.com/apmasell/vapis

"glibusb.h" 包含 "libusb"* 的所有功能,这个库是由https://github.com/apmasell的大胡子家伙制作的

依赖项:

  • 焦2.0
  • libusb-1.0

代码:

[CCode (cheader_filename = "glibusb.h")]
namespace LibUSB {
    /**
     * Create a source so that a context can be monitored using {@link GLib.MainLoop}.
     *
     * Once created, call {@link GLib.Source.attach} to attach it to a context.
     */
    [CCode (cname = "glibusb_create_gsource")]
    public GLib.Source create_source (owned Context ctx);

    /**
     * Initiate a USB control transfer on a device.
     *
     * @param dev the device to perform the transfer
     * @param timeout return if no data has been provided after the specified number of milliseconds
     * @param buffer the data to transfer
     * @param actual_length the number of bytes transferred
     */
    [CCode (cname = "glibusb_control_transfer")]
    public async TransferStatus control_transfer (DeviceHandle dev, uint timeout, uint8[] buffer, out int actual_length);

    /**
     * Initiate a USB interrupt transfer on a device.
     *
     * @param dev the device to perform the transfer
     * @param endpoint the target on the device
     * @param timeout return if no data has been provided after the specified number of milliseconds
     * @param buffer the data to transfer
     * @param actual_length the number of bytes transferred
     */
    [CCode (cname = "glibusb_interrupt_transfer")]
    public async TransferStatus interrupt_transfer (DeviceHandle dev, uint8 endpoint, uint timeout, uint8[] buffer, out int actual_length);

    /**
     * Initiate a USB bulk transfer on a device.
     *
     * @param dev the device to perform the transfer
     * @param endpoint the target on the device
     * @param timeout return if no data has been provided after the specified number of milliseconds
     * @param buffer the data to transfer
     * @param actual_length the number of bytes transferred
     */
    [CCode (cname = "glibusb_bulk_transfer")]
    public async TransferStatus bulk_transfer (DeviceHandle dev, uint8 endpoint, uint timeout, uint8[] buffer, out int actual_length);
}

推荐阅读