首页 > 编程知识 正文

串口空闲中断加dma接收,hal库dma传输完成中断函数

时间:2023-05-03 10:16:34 阅读:58850 作者:4591

原文链接:添加链接说明

根据libusbx-1.0.18-rc1,libusbx已重新merage到libusb。

初始化

使用libusb_init初始化libusb。 对于单设备通信,ctx参数可以传递NULL,表示使用默认Context .注册hotplug事件侦听器

从1.0.16开始,libusb支持hotplug事件侦听器,并且可以使用接口libusb _ hot plug _ register _ callback注册基于filter的回调函数,例如

libusb_hotplug_event:分钟libusb _ hot plug _ event _ device _ arrived和libusb _ hot plug _ event _ device _ left 2

vendor_id:仅允许与指定的vendor id匹配的设备启动回调,或者设置为LIBUSB_HOTPLUG_MATCH_ANY,以便任何vendor id的设备启动回调

product_id:仅允许与指定产品id匹配的设备启动回调,或设置LIBUSB_HOTPLUG_MATCH_ANY以允许任何产品id的设备启动回调

dev_class:表示只有与指定设备类匹配的设备才能启动回调,或设置LIBUSB_HOTPLUG_MATCH_ANY,以便任何设备类的设备都可以调用回调

这些过滤器之间可以用“与”的方法组合作用。 获取文件描述符

使用libusb_get_pollfds,可以获取当前上下文的软盘列表,并将其放置在主事件loop中进行轮询操作。 参考《基于glib的单线程多事件源处理》这篇文章,可以使用GSource实现。 检测到事件发生后,使用libusb_handle_events_completed触发下面介绍的事件处理程序。 此外,还必须使用libusb_set_pollfd_notifiers注册两个回调函数,以处理访问或删除设备后对软盘列表的更改。 设备访问

当设备被访问时,libusb_set_pollfd_notifiers注册的回调函数将启动,通知您APP应用程序中有新的软盘。 在这种情况下,必须将新软盘添加到轮询的队列中。 libusb还会触发在libusb _ hot plug _ register _ callback中注册的回调函数,以通知您对APP应用程序具有设备的访问权限。 hotplug回调函数需要根据传递的libusb_device调用libusb_open接口来创建基于此设备的handle。 然后,根据需要使用libusb_reset_device重置设备。 某些受linux标准支持的设备,如HID设备。 您可能需要使用libusb_detach_kernel_driver或libusb _ set _ auto _ detach _ kernel _ driver支持多个配置然后调用libusb_claim_interface并选择要使用的接口。 建立通信

调用libusb_alloc_transfer创建空的transfer数据结构,并使用libusb_fill_interrupt_transfer填充此数据结构。 参数包括基于通信的endpoint number、数据到达的buffer,然后调用libusb_submit_transfer并将此transfer提交给libusb以检索数据到达事件数据到达

数据到达时,将触发回调函数并传递以前的传输数据结构。 首先,确定传输器的status字段是否为LIBUSB_TRANSFER_COMPLETED。 否则,执行适当的异常处理。 传输完成的数据可以在传输器的缓冲区字段中获取。 数据的长度用actual_length表示。 处理完成后,使用libusb_submit_transfer重新发送此传输。

这样,libusb的异步通信建立,libusb异步通信对同步通信具有更好的性能,不需要多线程应对,能够更好地控制程序的执行定时。

————————————————

这是CSDN博客“coroutines”的原创文章,符合CC 4.0 BY-SA版权协议。 请附上原文来源的链接和本声明。

原文链接: https://blog.csdn.net/coroutines/article/details/38436725

版权声明:该文观点仅代表作者本人。处理文章:请发送邮件至 三1五14八八95#扣扣.com 举报,一经查实,本站将立刻删除。