一、引言

1.1 目的

此文档记录CarPlay 开发中有线连接开发部分,详细介绍CarPlay有线连接的流程,希望可以给开发CarPlay小伙伴一些帮助,无线连接后续再梳理。

二、架构设计

2.1 架构图

注:此图翻译自苹果官方的开发帮助文档

身份认证 (Authentication):CarPlay是一种经过认证的解决方案,需要使用通过Apple获得的Apple认 证协处理器。设备只能流向授权的车机。使用Apple认证协处理器的CarPlay配件3.0只能声明与iOS 10.3或更高版本兼容。iAP2(iOS Accessory Protocol II)和CarPlay接口上的通信都需要身份验证,每个接口都提供一个具体的身份验证API。为了加快这些双重身份验证步骤,提供了X.509证书的本地缓存苹果认证协处理器。所有经过认证的配件都需要根据Apple MFi计划进行认证。CarPlay车机必须成功通过符合性测试,以确保来自设备的所有数字内容将被正确解码和播放,并且满足本规范中描述的所有电气要求。

会话建立 (Session Establishment):车机检测到连接的设备上有CarPlay后,必须请求会话启动并在“CarPlayStartSession”(《Accessory Interface Specification CarPlay Addendum R7》第241页)消息中提供所需参数。一旦建立了连接,在车机通过CarPlay接口完成认证后,将开始设置和内容传输。连接启用CarPlay的设备时,车机不得自动发送播放命令。请参阅媒体库:车机接口规范中的播放要求。有关设置CarPlay会话的更多信息,请参阅“ Setup and Control”(《Accessory Interface Specification CarPlay Addendum R7》第98页)。车机必须能够在设备连接后3秒内建立CarPlay会话。

三、连接流程

3.1 配置接口描述符

此功能最为复杂,需要驱动层配置iAP2接口描述符和NCM接口描述符,如果作为项目Tire 2的角色开发CarPlay的话这个步骤不需要自己完成,将需求提给Tire 1,让他们进行适配。

3.1.1 iAP2 Interface Descriptor

USB Descriptor

Value

Description

Interface Number

0xNN

Must be different from the USB NCM Control interface and USB NCM data interface numbers.

Interface Class

0xFF

Vendor-specific interface

Interface Subclass

0xF0

MFi accessory

Interface Protocol

0x00

Interface String

'iAP Interface'

Number of Endpoints

2

1 bulk IN and 1 bulk OUT endpoint descriptor shall be specified

Table-3.1

3.1.2 NCM Control Interface Descriptor

USB Descriptor

Value

Description

Interface Number

0xNN

Must be different from the iAP2 interface and USB NCM data interface numbers. Must match the USBHostTransportCarPlayInterfaceNumber,see Accessory Identification in the Accessory Interface Specification

Interface Class

0x02

USB Communication Interface Class

Interface Subclass

0x0D

Network Control Model

Interface Protocol

0x00

No encapsulated commands / responses

Number of Endpoints

1

Interrupt IN (optional): This is typically used to convey changes in link status. Since link is expected to be maintained at all times, we will synthesize link up if there is a read completion via the data interface.

Table-3.2

3.1.3 NCM USB NCM Data Interface Descriptor

USB Descriptor

Value

Description

Interface Number

0xNN

Must be different from the iAP2 interface and USB NCM control interface numbers.

Interface Class

0x0A

USB Data Interface Class

Interface Subclass

0x00

Interface Protocol

0x01

NCM Data Class

Number of Endpoints

0

(for Alternate Setting 0)

Number of Endpoints

2

(for Alternate Setting 1) 1 Bulk IN; and 1 Bulk OUT

Table-3.3

3.2 枚举设备

当有USB设备插入时,通过USBDevice的PID、VID判断是否是IPhone设备。

Apple Vendor ID = 0x05AC

Apple Product ID = 0x12nn

3.3 检查设备是否支持CarPlay

检查到iphone 设备之后,通过USB controlTransfer发送 请求,查询设备CarPlay是否可用

参数

备注

bmRequestType

0xC0

Device-to-Host,数据由Device发给Host

bRequest

0x53

供应商定义的USB获取启用功能请求

wValue

0x00

N/A

wIndex

0x00

N/A

wLength

4

返回的数据长度为4字节

Table-3.4

当iphone答复0x01 表示iphone支持CarPlay。

3.4 Iphone Usb角色切换

当IPhone设备通过USB连接到车机时,IPhone作为Device设备,车机作为Host,若想连接CarPlay需要先将IPhone切换为Host

参数

备注

bmRequestType

0x40

Device-to-Host,数据由Device发给Host

bRequest

0x51

供应商定义的USB角色切换请求

wValue

0x01

0x01为切换到Host

wIndex

0x00

N/A

wLength

0

N/A

Table-3.5

3.5 车机角色切换

车机默认是Host模式,需要切换成device模式,每个车机的切换方法不同,在此不做详细说明。

3.6 iAP2 身份认证

在USB角色切换成功后USB通道就成功建立,可以接收/发送iAP2数据,按照CarPlay标准流程进行Identification,Authentication,所需数据较多,且无线与有线的身份认证有差异,但数据包格式相同。具体参考《Accessory Interface Specification CarPlay Addendum R7》

3.7 激活NCM功能

激活NCM功能,设置IP路由,每个项目都有差异,需要与Tire 1提出此需求,NCM功能激活后通过网络协议便正式开启CarPlay 会话,CarPlay Session相关数据传输则通过苹果官方插件库中提供的方法进行。

四、总结

4.1 经验总结

3.6 iAP2 身份认证阶段中的iAP2数据包内容较多,数据拼接极容易出错,若在此步骤时出错,可能会出现以下几种情况:发送Identification/Authentication消息后未收到响应;发送Identification后收到Reject消息。出现第一种情况九成概率是因为数据包拼接有问题,重点检查数据包checksum。后者需要解析回复的reject中的MSG ID,查看是具体是哪些信息被拒绝。

4.2 辅助工具

建议开发过程中使用MAC + ATS软件+USB分析仪辅助,若没有专业工具则通过爱思助手抓取IPhone日志分析。

CarPlay 有线连接流程相关推荐

  1. CarPlay 有线连接(USB)方案详解

    首先,CarPlay的wired(USB)的连接方案要求车载设备至少要支持USB2.0 Hi-Speed,能够同时处理bulk IN和bulk OUT传输.该方案还要求车载设备必须支持USB Host ...

  2. AndroidAuto连接流程及代码实现

    AndroidAuto连接流程及代码实现 文章目录 AndroidAuto连接流程及代码实现 AndroidAuto介绍 有线连接流程 AOA协议 AAP协议 USB连接 蓝牙连接 无线连接流程 代码 ...

  3. CarPlay 无线连接(蓝牙+WIFI)

    一.引言 1.1 目的 此文档记录CarPlay 开发中无线连接开发部分,详细介绍CarPlay无线连接的流程. 1.2 简介 Carplay的无线连接,需要用户手动先连蓝牙,蓝牙连接上后,系统会自动 ...

  4. kali linux有线连接不见网络图标不见(解决方案)

    kali linux有线连接不见&&网络图标不见(解决方案) 参考文章: (1)kali linux有线连接不见&&网络图标不见(解决方案) (2)https://ww ...

  5. carlife android 无线,carlife无线连接流程是什么

    [太平洋汽车网]carlife无线连接流程:首先在手机上安装CarLife的APP,在手机设置中启用蜂窝移动数据,然后打开手机 WiFi 开启个人热点,同时车机开启 WiFi,在车机WiFi上连接手机 ...

  6. Android wifi carlife,carlife可以无线连接吗?carlife蓝牙连接流程

    Carlife可以无线连接.目前无线连接支持iPhone手机使用,而安卓手机只有少部分可以使用.连接方法如下: 1.打开手机设置启用蜂窝移动数据,再打开手机WiFi,并且开一个无线热点. 2.找到车机 ...

  7. win10开机自动有线连接拨号上网

    实验室台式机win10安装后连接有线网总是频繁自己断开,根据博客方法解决问题后希望设置每次开机自动有线连接拨号上网,供参考 win+x键打开选项目录,点击计算机管理: 在管理窗口中左侧,点击选中&qu ...

  8. 同一局域网下,一台电脑连接另一台电脑的虚拟机(从属机(window)连接主机(window)虚拟机(Linux)的连接流程)

    同一局域网下,一台电脑连接另一台电脑的虚拟机(从属机(window)连接主机(window)虚拟机(Linux)的连接流程) 一. 通过NET网络模式连接 查看主机本身ip: win+r 输入cmd, ...

  9. [问题解决]电脑有线 连接天翼光猫 不分配ip 电脑有线无法上网

    家里更换了电信天翼宽带,做了几个水晶头,想用有线连接光猫路由器,直接上网,稳定,还少辐射. 也问了安装师傅,送的光猫是自带路由功能的,还有WIFI功能. 问题: 一切准备就绪,接上台式电脑,发现网口灯 ...

最新文章

  1. Nexus Repository Manager 3 远程命令执行漏洞 CVE-2019-7238
  2. C++静态成员函数小结
  3. Geany整体增加减少缩进快捷键
  4. nodejs实现一个简单的 HTTP静态文件服务器(一)
  5. JAVA中深拷贝与浅拷贝(在网上找到的) 希望对于理解深拷贝与浅拷贝有帮助...
  6. MFC用PostMessage传递消息
  7. mysql hash切分_轻松优化MySQL-之数据库切分1
  8. PHPCMS V9.6.0 SQL注入漏洞EXP
  9. BZOJ1007[HNOI2008] 水平可见直线
  10. 话单分析账单分析行踪分析综合数据研判软件
  11. 埃森哲互动并购了56家广告公司
  12. Ubuntu下载anaconda教程(全过程)
  13. 浅谈某定设计网站非会员去除水印
  14. Blob和File对象API与兼容性问题
  15. CentOS下搭建Frp内网穿透服务
  16. mysql 枚举字段,MySQL字段中的枚举是什么意思 | 学步园
  17. 项目经理?项目成员?
  18. How to Pronounce PROBABLY
  19. 【Ubuntu 16.04中为Chromium、Chrome、Firefox安装Flash播放器插件教程】
  20. Installing OpenCV 2.4.9 in Ubuntu 14.04 LTS(好文章)

热门文章

  1. 个性主张:玩转你的86400秒
  2. websocket自动断开连接问题
  3. 如何用开源组件“攒”出一个大数据建模平台?
  4. 概率论常用公式(期末版)
  5. 小学生图片_这家水果店不得了!每天几波小学生轮流打卡只是为了……
  6. 一篇好文,以在迷茫时阅读
  7. YOLOv5改进系列(8)——添加SOCA注意力机制
  8. LightningChart解决方案:XY和3D图表(Polymer Char GPC-IR®-工程案例)
  9. leetcode/加减的目标值,给数组元素添加+或-号组成的表达式值=target的方案数
  10. 使用php吧excel数据存到数据库,php导入excel表,保存进数据库,使用phpexcel插件