博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
android的usb作为从设备的程序流程
阅读量:4284 次
发布时间:2019-05-27

本文共 1635 字,大约阅读时间需要 5 分钟。

android手机或着平板,作为从设置的时候,也就是链接PC电脑的时候,这时PC机是主设备,android手机或平板是从设备。作为从设备,是不主动发送命令或数据的;

只是被动的接收命令或者数据,接收命令的代码是作为一个中断程序来处理的;代码入口如下:

1、代码位置:/kernel/cht/drivers/usb/dwc3/gadget.c

        初始化中断函数:

           

1668     irq = platform_get_irq(to_platform_device(dwc->dev), 0);1669     ret = request_threaded_irq(irq, dwc3_interrupt, dwc3_thread_interrupt,1670             IRQF_SHARED, "dwc3", dwc);1671     if (ret) {1672         dev_err(dwc->dev, "failed to request irq #%d --> %d\n",1673                 irq, ret);1674         goto err0;1675     }1676
          当主机有命令来后,触发中断,首先触发下面中断函数:

           

2820 static irqreturn_t dwc3_interrupt(int irq, void *_dwc)2821 {2822     struct dwc3         *dwc = _dwc;2823     int             i;2824     irqreturn_t         ret = IRQ_NONE;2825 2826     spin_lock(&dwc->lock);2827 2828     for (i = 0; i < dwc->num_event_buffers; i++) {2829         irqreturn_t status;2830 2831         status = dwc3_check_event_buf(dwc, i);2832         if (status == IRQ_WAKE_THREAD)2833             ret = status;2834     }2835 2836     spin_unlock(&dwc->lock);2837 2838     return ret;2839 }2840

            当上面的中断函数执行完后,会触发下面的线程中断函数,代码如下:

             

2779 static irqreturn_t dwc3_thread_interrupt(int irq, void *_dwc)2780 {2781     struct dwc3 *dwc = _dwc;2782     unsigned long flags;2783     irqreturn_t ret = IRQ_NONE;2784     int i;2785 2786     spin_lock_irqsave(&dwc->lock, flags);2787 2788     for (i = 0; i < dwc->num_event_buffers; i++)2789         ret |= dwc3_process_event_buf(dwc, i);2790 2791     spin_unlock_irqrestore(&dwc->lock, flags);2792 2793     return ret;2794 }2795
            在上面的中断函数中,实际处理,接收到的usb Event命令,例如枚举等命令。处理完命令后,重新打开使能中断的寄存器;以保证下一次,中断可以正常触发。

下一步的动作,可以根据不同的Event来处理。

转载地址:http://rjngi.baihongyu.com/

你可能感兴趣的文章
Xamarin.Forms.Xaml.XamlParseException: No embeddedresource found for
查看>>
如何 禁掉 Hyper-V && 如何解决禁不掉 Hyper-V 的问题
查看>>
杂记 7/30
查看>>
杂记 7/31
查看>>
了解 内核、操作系统 的一些链接
查看>>
Linux 学习笔记 (九) 软件安装
查看>>
Linux 学习笔记 (十) shell 脚本初探
查看>>
关于移动开发的一些思考
查看>>
Java 进阶 -- final 解析
查看>>
VS 2013 Professional 安装问题
查看>>
Xamarin.Forms.Xaml.XamlParseException: No embeddedresource found for
查看>>
error: Mono.Android could not be found
查看>>
使用 RDCMan
查看>>
Xamarin 实现 Button LongClick 和 Touch
查看>>
Xamarin 进阶文档
查看>>
在 Xamarin Forms 中实现 Banner
查看>>
Android 加载本地图片路径
查看>>
Android CPU 架构详解
查看>>
Android
查看>>
Android UncaughtExceptionHandler 原理分析
查看>>