USB composite 设计
下面的表显示了每个接口是如何被设置的调用流程。调用流程只显示了串行接口是如何被使能的,但是所有的一些功能
驱动都是以一种相似的方式被使能的。这一连串的操作序列是在一个1被写入到使能系统文件中后被唤醒的。
USB接口调用流程
8.1 安卓USB composition框架
从Linux内核3.0开始,主要的变化包括USB composition是如何被定义的和使能的。在更早些时候,USB composition信息,例如, PID/VID ,功能列表,等被定义在内核空间。在linux内核3.0以后,这些都是通过执行用户空间的命令来完成的。因此,定义是在用户空间的文件中被处理的。
下面是一个从<apps root>/system/core/rootdir/etc/init.qcom.usb.rc文件中捕获的片段
on
property:sys.usb.config=diag,serial_smd,serial_tty,rmnet_bam,mass_storage,adb
write /sys/class/android_usb/android0/enable 0
write /sys/class/android_usb/android0/idVendor 05C6
write /sys/class/android_usb/android0/idProduct 9025
write /sys/class/android_usb/android0/f_diag/clients diag
write /sys/class/android_usb/android0/f_serial/transports smd,tty
write /sys/class/android_usb/android0/f_rmnet/transports smd,bam
write /sys/class/android_usb/android0/functions diag,adb,serial,rmnet,mass_storage
write /sys/class/android_usb/android0/enable 1
start adbd
setprop sys.usb.state $sys.usb.config
Init.qcom.usb.rc 包含每个USB composition的声明。当setprop命令被传递时,这一套顺序命令被执行。安卓用户现在通过adb shell可以轻易的执行setprop命令来改变composition;例如:
>adb shell
# setprop persist.sys.usb.config “diag,serial_smd,serial_tty,rmnet_bam,mass_storage,adb”
注意:System.setProperty()不能被从Java应用那里唤醒来改变USB composition。System.setProperty()只会影响正在运行的进程并且不能修改实际的系统属性。
为了设置默认的启动时间USB配置,参考<apps root>/system/core/rootdir/etc/init.qcom.usb.sh文件。你将会看到一些调用,例如setprop persist.sys.usb.config diag,serial_smd,serial_tty, rmnet_bam, mass_storage, adb,等。
设置默认的启动composition取决于socinfo和基带。如果persist.sys.usb.config已经被设置了,socinfo和基带过滤器不会被执行。
Persist.sys.usb.config 在电源 电量周期/重启后仍然是之前设置的值。如果你修改了sys.usb.config,这个只是暂时的修改,它会在下一次电源重启或者电量周期cycle后丢失。
8.2 LE composition 框架
LE 编译有一个可执行的二进制文件来帮助管理可以得到的在系统里的USB compositions
/usr/bin/usb_composition
通过这个可执行的文件用户可以设置默认的composition 例如:
boot hsusb composition: 9025
boot hsic composition: empty
Choose Composition by Pid:
901D - DIAG + ADB
9021 - DIAG + QMI_RMNET (Android)
9022 - DIAG + ADB + QMI_RMNET (android)
9024 - RNDIS + ADB [Android]
9025 - DIAG + ADB + MODEM + NMEA + QMI_RMNET + Mass Storage (Android)
902B - RNDIS + ADB + Mass Storage
902D - RNDIS + DIAG + ADB [Android]
9049 - DIAG + ADB + DUN + RMNET + Mass Storage + QDSS [Android]
904A - DIAG + QDSS [Android]
9056 - DIAG + ADB + SERIAL + RMNET + Mass Storage + Audio [Android]
9057 - RNDIS : ECM
9059 - DIAG+ADB+RNDIS : ECM
905B - MBIM
9060 - DIAG + QDSS + ADB
9063 - RNDIS : ECM : MBIM
9064 - DIAG + ADB + MODEM + QMI_RMNET : ECM : MBIM
9067 - Mass storage + QMI_RMNET : Mass Storage + MBIM
9084 - DIAG + QDSS + ADB + RMNET
9085 - DIAG+ADB+MBIM+GNSS
9091 - DIAG + MODEM + QMI_RMNET + ADB
90A1 - DIAG + ADB + (multiplexed) QMI_RMNET (Android)
90A9 - DIAG + ADB + MODEM + NMEA + QDSS (bulk in) + RMNET : ECM : MBIM
90AD - DIAG + ADB + MODEM + NMEA + QMI_RMNET + Mass Storage + DPL
90B1 - ECM
F000 - Mass Storage
empty -这个被用来允许hsic和hsusb都完全没有composition(必须重启后才能生效).
hsic_next -
hsusb_next -
Pid number : 901D
Choose core: y - hsic , n - hsusb ?(y/n)n
Would you like it to be the default composition ? (y/n)y
Would you like the composition to change immediately? (y/n)y
Are you performing the composition switch from adbd? (y/n)n
Switching to composition number 0x901D
这个可执行的二进制文件从一个目录里读出系统里所有可得到的compositions并列出来。这些位于目录里的文件都是一些bash脚本,这些脚本执行文件系统写操作到安卓USB文件以设置composition,PID,VID,等。
Composition 目录
在编译目录 ---- <apps root>/system/core/usb/compositions/
在设备这边 ---- /usr/bin/usb/compositions
9025:
Run_9x25( ){
if [ $from_adb = "n" ]
then
pkill -x `which adbd`
fi
echo 0 > /sys/class/android_usb/android$num/enable
echo 9024 > /sys/class/android_usb/android$num/idProduct
echo 05C6 > /sys/class/android_usb/android$num/idVendor
echo rndis,adb > /sys/class/android_usb/android$num/functions
echo 1 > /sys/class/android_usb/android$num/remote_wakeup
echo 1 > /sys/class/android_usb/android0/f_rndis/wceis
sleep $delay
echo 1 > /sys/class/android_usb/android$num/enable
if [ $from_adb = "n" ]
then
/etc/init.d/adbd start
fi
}
用户能够通过创建一个bash脚本使用之前存在的composition作为一个框架或者指南来创建他们自己的compositions。在定义了composition后,用户能够添加这个composition到<apps root>/system/core/usb/
compositions/ 来编译包含最新添加的composition的系统镜像。
8.3 USB composition 系统文件
8-1 系统文件和可能的值
8.4 默认的USB compositions
默认的USB composition被用于每个平台。看8-2,8-3,8-4来获得详细的信息。
8-2 接口字符串到transport的变换表(只对MSM)
8.4.1基于MSM的产品
8.4.2 基于MDM LE的产品
Rmnet_gsi是一个完全不同的USB功能驱动。在这个case中没有要求Echo’ing到transports文件
USB composite 设计相关推荐
- Hi3516A开发--USB PCB 设计建议
USB PCB 设计建议 为了保证良好的信号质量, USB 2.0 端口数据信号线按照差分线方式走线.为了达到USB 2.0 高速 480MHz 的速度要求,建议 PCB 布线设计采用以下原则: 差分 ...
- USB Composite 组合设备之多路CDC实现
USB Composite 组合设备之多路CDC实现 USB复合设备与组合设备区别 效果展示 修改相关配置 修改配置项 修改设备描述符 修改配置.接口.端点描述符 接口修改 FIFO配置 知识点 FI ...
- USB OTG设计 (转)
USB OTG设计 (转) 随着PDA.移动电话.数码相机.打印机等消费类产品的普及,用于这些设备与电脑,或设备与设备之间的高速数据传输技术越来越受到人们的关注, IEEE1394和USB是用于此类传 ...
- Usb Composite Device (audio+hid) Descriptor
近期开发USB Composite Device 撰写的USB 描述符 ,支持 USB speaker + USB Mic,同时支持USB HID 自定义设备.可以作为 开发设备的参考.(此描述符已经 ...
- QCC3040 USB Composite Device: Audio+HID+CDC/虚拟串口
笔记一下USB IAD的用途, 真实体验到了什么叫概念不清,误入歧途. 首先声明一下,笔者没有系统性了解过USB协议,只是按照实际情况,提出需求,发现问题,解决问题. 笔者记录一下在高通QCC3040 ...
- 基于高速51单片机的模拟USB接口设计
基于高速51单片机的模拟USB接口设计 作者:廖颂文 摘要:参照AVRUSB技术给出了51单片机通过模拟USB通信的实现方法.用VC编写了上位机软件,通过libusb驱动实现了PC与ST12LE560 ...
- ADI Blackfin DSP处理器-BF533的开发详解25:USB接口设计(含源代码)
硬件准备 ADSP-EDU-BF533:BF533开发板 AD-HP530ICE:ADI DSP仿真器 软件准备 Visual DSP++软件 硬件链接 硬件设计原理图 功能介绍 跟网口一样,USB这 ...
- 计算机硬盘标有红色感叹号咋办,usb composite device黄色感叹号怎么办
今天一个朋友找我,说电脑不好用,出问题了,让帮忙检查.解决一下.一检查,发现是"usb composite device"前面出现黄色感叹号.这个黄色感叹号是什么意思呢? 通常出现 ...
- 基于 STM32的USB万用表设计
该方案为一个可测量电流和电压的USB万用表. 特征: 主回路电压检测, D+电压检测 D-电压检测,温度检测检测 电源采用DC-DC和LDO 芯片最大耐压40V 最大设计为30V/6.5A 电流检测部 ...
- USB Compound Device,USB复合设备 ; USB Composite Device,USB组合设备【转】
本文转载自:https://blog.csdn.net/autumn20080101/article/details/52776863 科普下USB复合设备和USB组合设备的区别. 关键字 Commu ...
最新文章
- LaTeX - 带圈数字
- arcgis的python接口_arcgis-Python的ArcGIS API-Esri Screenshots
- jsp jquery ajax请求,JSP+jquery使用ajax方式调用json的实现方法
- php mutex,go互斥锁Mutex
- Ren获得Zcash技术咨询委员会资助,将在币安智能链上启动RenZEC流动性引导计划
- ic读卡器设置工具_什么读卡器,是一用过就想揣身上不想丢的?
- 手把手带你用react hook撸一遍class组件的特性
- 浅谈java实现桌面小程序
- 【第三方授权登录】微信授权登录
- 收盘:用友软件跌10.02%报13.2元 换手3.26%
- dpbs和pbs的区别_PBS与TBS区别
- 2022年最新计算机专业毕业设计选题 - 选题推荐 毕设开题 简单易过 题目新颖
- html app签名,html5手写签名
- Ubuntu进入睡眠模式
- 心跳重连机制(登录)
- 【笔记】机器视觉 光源篇
- linux下PS1、PS2、PS3、PS4最全详解
- scribed 安装
- Python中变量的基本使用
- office/word 2010添加页眉页脚
热门文章
- CentOS 7.5 安装Nginx教程
- 什么是RFID? 射频识别技术的特点及工作原理!
- 沉睡者IT - 月赚几千的创业项目思路,抖音文案号网赚项目
- 飞龙在天之DB面试资料
- jQuery print 去掉页眉页脚
- matlab output()函数,matlab 函数y=f(input,output)该如何实现?
- windows10复制粘贴键突然失效 的一个最简单的解决方法
- 计算机硬件设备海报高清,海报墙3.0+APP加持—芝杜ZIDOO UHD2000高清播放器体验分享...
- linux与RMB的关系,Ghost 与 Linux 的兼容性
- 远程桌面连接(远程控制另一电脑)的详细步骤