IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: 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设备支持的状态类型,主从机


这些就是状态,对应的值是0和1,分别表示拔出插入

可以通过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
上一篇文章      下一篇文章      查看所有文章
加:2022-09-21 00:40:23  更:2022-09-21 00:44:16 
 
开发: 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-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码