下面的表显示了每个接口是如何被设置的调用流程。调用流程只显示了串行接口是如何被使能的,但是所有的一些功能

驱动都是以一种相似的方式被使能的。这一连串的操作序列是在一个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 设计相关推荐

  1. Hi3516A开发--USB PCB 设计建议

    USB PCB 设计建议 为了保证良好的信号质量, USB 2.0 端口数据信号线按照差分线方式走线.为了达到USB 2.0 高速 480MHz 的速度要求,建议 PCB 布线设计采用以下原则: 差分 ...

  2. USB Composite 组合设备之多路CDC实现

    USB Composite 组合设备之多路CDC实现 USB复合设备与组合设备区别 效果展示 修改相关配置 修改配置项 修改设备描述符 修改配置.接口.端点描述符 接口修改 FIFO配置 知识点 FI ...

  3. USB OTG设计 (转)

    USB OTG设计 (转) 随着PDA.移动电话.数码相机.打印机等消费类产品的普及,用于这些设备与电脑,或设备与设备之间的高速数据传输技术越来越受到人们的关注, IEEE1394和USB是用于此类传 ...

  4. Usb Composite Device (audio+hid) Descriptor

    近期开发USB Composite Device 撰写的USB 描述符 ,支持 USB speaker + USB Mic,同时支持USB HID 自定义设备.可以作为 开发设备的参考.(此描述符已经 ...

  5. QCC3040 USB Composite Device: Audio+HID+CDC/虚拟串口

    笔记一下USB IAD的用途, 真实体验到了什么叫概念不清,误入歧途. 首先声明一下,笔者没有系统性了解过USB协议,只是按照实际情况,提出需求,发现问题,解决问题. 笔者记录一下在高通QCC3040 ...

  6. 基于高速51单片机的模拟USB接口设计

    基于高速51单片机的模拟USB接口设计 作者:廖颂文 摘要:参照AVRUSB技术给出了51单片机通过模拟USB通信的实现方法.用VC编写了上位机软件,通过libusb驱动实现了PC与ST12LE560 ...

  7. ADI Blackfin DSP处理器-BF533的开发详解25:USB接口设计(含源代码)

    硬件准备 ADSP-EDU-BF533:BF533开发板 AD-HP530ICE:ADI DSP仿真器 软件准备 Visual DSP++软件 硬件链接 硬件设计原理图 功能介绍 跟网口一样,USB这 ...

  8. 计算机硬盘标有红色感叹号咋办,usb composite device黄色感叹号怎么办

    今天一个朋友找我,说电脑不好用,出问题了,让帮忙检查.解决一下.一检查,发现是"usb composite device"前面出现黄色感叹号.这个黄色感叹号是什么意思呢? 通常出现 ...

  9. 基于 STM32的USB万用表设计

    该方案为一个可测量电流和电压的USB万用表. 特征: 主回路电压检测, D+电压检测 D-电压检测,温度检测检测 电源采用DC-DC和LDO 芯片最大耐压40V 最大设计为30V/6.5A 电流检测部 ...

  10. USB Compound Device,USB复合设备 ; USB Composite Device,USB组合设备【转】

    本文转载自:https://blog.csdn.net/autumn20080101/article/details/52776863 科普下USB复合设备和USB组合设备的区别. 关键字 Commu ...

最新文章

  1. LaTeX - 带圈数字
  2. arcgis的python接口_arcgis-Python的ArcGIS API-Esri Screenshots
  3. jsp jquery ajax请求,JSP+jquery使用ajax方式调用json的实现方法
  4. php mutex,go互斥锁Mutex
  5. Ren获得Zcash技术咨询委员会资助,将在币安智能链上启动RenZEC流动性引导计划
  6. ic读卡器设置工具_什么读卡器,是一用过就想揣身上不想丢的?
  7. 手把手带你用react hook撸一遍class组件的特性
  8. 浅谈java实现桌面小程序
  9. 【第三方授权登录】微信授权登录
  10. 收盘:用友软件跌10.02%报13.2元 换手3.26%
  11. dpbs和pbs的区别_PBS与TBS区别
  12. 2022年最新计算机专业毕业设计选题 - 选题推荐 毕设开题 简单易过 题目新颖
  13. html app签名,html5手写签名
  14. Ubuntu进入睡眠模式
  15. 心跳重连机制(登录)
  16. 【笔记】机器视觉 光源篇
  17. linux下PS1、PS2、PS3、PS4最全详解
  18. scribed 安装
  19. Python中变量的基本使用
  20. office/word 2010添加页眉页脚

热门文章

  1. CentOS 7.5 安装Nginx教程
  2. 什么是RFID? 射频识别技术的特点及工作原理!
  3. 沉睡者IT - 月赚几千的创业项目思路,抖音文案号网赚项目
  4. 飞龙在天之DB面试资料
  5. jQuery print 去掉页眉页脚
  6. matlab output()函数,matlab 函数y=f(input,output)该如何实现?
  7. windows10复制粘贴键突然失效 的一个最简单的解决方法
  8. 计算机硬件设备海报高清,海报墙3.0+APP加持—芝杜ZIDOO UHD2000高清播放器体验分享...
  9. linux与RMB的关系,Ghost 与 Linux 的兼容性
  10. 远程桌面连接(远程控制另一电脑)的详细步骤