| |
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
-> 移动开发 -> extcon学习记录 -> 正文阅读 |
|
[移动开发]extcon学习记录 |
【理解】 对于usb的应用来说,extcon的活就是要给usb控制器驱动提供外部连接器的状态,外部连接器就是充电器头,u盘,另外一台手机那样的东西;而状态就是主从机,谁给谁充电这些,所以extcon还有个很重要的活就是去考虑如何得到这些状态,得到这些状态就要涉及到外部链接器和我这台机器之间连接的线了,也就是type-c,micro-b这些; 因为不同的线的接口的引脚不一样,判断主从机的机制也不一样,这应该就是extcon驱动里最主要的活了; 得到状态后,是通过内核notify机制去通知其他的模块的,比如把检测到的状态通知给usb?phy模块; 综上得出, 【最主要的活】根据不同的usb线的判断机制去判断外部连接器的状态 【目的】给usb控制器驱动提供这些状态,对usb控制器而言,它只管外部连接器的状态 (1)什么是状态呢?每一个状态就是一个struct?extcon_cable 线类型:struct extcon_cable *cables; 具体指什么,通过adb shell?看到cable就是对应了这个extcon设备支持的状态类型,主从机
可以通过extcon_get_state来获取对应cable的值,这个值就表示有没有插入主从设备 (2)别的驱动怎么使用extcon呢? 内核通知链 记录一下notify传过去的参数, raw_notifier_call_chain(&edev->nh[index], state, edev); state:对应的cable的状态,插入或者拔出 edev:ectcon_dev外部连接的设备 val?= state v?= edev 所以最后传入回调函数的参数就是 state?和 edev 在别的驱动中通过下面的方法得到exrcon_dev,再得到extcon_dev对应cable的状态 ?写个extcon = <&extcon_gpio>; 这里取自反编译的dts,可以看到每一个设备树节点都会有个phandle?,像身份证一样的标识了一个节点 然后对应的.c里去得到对应的of_node,再去得到对应的dev,再得到ectcon_dev 通过of_parse_phandle 这个函数去获取对应的节点 "extcon" :名字 0 :?是extcon后面第一个<> 里的,1的话就是第二个<><>,如果有的话 (3)这里以/drivers/extcon/extcon_usb_gpio.c?为例看一下它是怎么获取外部连接器的状态的 【背景】这个extcon_usb_gpio.c?是针对Micro-B?口,它的引脚是vbus?d+?d-?gnd?,有的会以gnd引脚作为id引脚,有的是直接多了一个id引脚,Micro-B?口是通过VBUS和ID两个脚的状态来识别是否接入了USB主机或USB外设的, 也就是对应了EXTCON_USB_HOST、EXTCON_USB,插入对应的值就会是1; 【实现】 主要代码如下: 分配和注册extcon_dev,其中写好了这个extcon_dev的状态; 给vbus和id这两个引脚申请中断,跑的是同一个中断处理函数,在这个中断处理函数里去跑上面那个delay_work 在中断处理函数里去根据id和vbus的值设置对应状态(EXTCON_USB_HOST、EXTCON_USB)的值,并同步,同步就是唤醒他的通知链,跑挂在上面的函数 |
|
移动开发 最新文章 |
Vue3装载axios和element-ui |
android adb cmd |
【xcode】Xcode常用快捷键与技巧 |
Android开发中的线程池使用 |
Java 和 Android 的 Base64 |
Android 测试文字编码格式 |
微信小程序支付 |
安卓权限记录 |
知乎之自动养号 |
【Android Jetpack】DataStore |
|
上一篇文章 下一篇文章 查看所有文章 |
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 | -2024/11/25 5:40:23- |
|
网站联系: qq:121756557 email:121756557@qq.com IT数码 |