CarPlay 有线连接流程

这篇具有很好参考价值的文章主要介绍了CarPlay 有线连接流程。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

一、引言

1.1 目的

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

二、架构设计

2.1 架构图

carplay ncm,ios,java,c++

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

身份认证 (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日志分析。文章来源地址https://www.toymoban.com/news/detail-552298.html

到了这里,关于CarPlay 有线连接流程的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 笔记本电脑连接有线路由器具体方法

    有线网络生活网由器设置方法:一: 您需要设置的是您的笔记本,如下: 1.打开您的IE游览器--点击工具--连接--点“从不使用拨号连接”, 2,点局域网(LAN)设置--点“自动检测设置(A),然后点击应用,确认就可以了。 问题补充: 如果您的网络生活网由器设置限制了使用地址的

    2024年02月06日
    浏览(117)
  • 2个或多个路由器有线连接设置技巧分享

    某些情况下,我们会用网线将多台路由器连接在一起用,而且只用一个网络。比如不同型号的路由器不便用无线桥接、或路由器本身没有无线桥接WDS功能时。 yii666小编特将下面的两个比较典型的情况分别说明下,具体的设置方法可以看下面的图文教程。 第一种情况: 一条线

    2024年02月06日
    浏览(57)
  • 无线路由器连接有线路由器的两种方案

    无线路由器连接有线路由器设置 描述:无线路由器tp-link tl-wr841n 连接有线路由器tp-link(具体型号不清)下面的设置都是以这两个路由器为例进行设置 目的:想从有线路由器接到无线路由器,实现无线上网功能 说明:无线连接有线两种方案: 1.无线wan口连接有线lan口 2.无线lan口

    2024年02月07日
    浏览(60)
  • 虚拟机 CentOS 有线连接图标直接消失,网络连接不上,网络连接失败的解决方案(亲测有效)

    目录 一、方法1:centos右上角有线连接直接消失,centos连接不上网络,导致远程SSH连接失败,改变NetworkManager文件 1.1 终端命令行输入如下命令改变NetworkManager文件 1.2 重启虚拟机,查看是否恢复 1.3 还没恢复,终端再输入下一个重启网络命令,查看是否恢复 二、方法2:虚拟机

    2024年02月07日
    浏览(60)
  • 2个或多个路由器怎么有线连接以保证可以正常上网

    某些情况下,我们会用网线将多台路由器连接在一起用,而且只用一个网络。比如不同型号的路由器不便用无线桥接、或路由器本身没有无线桥接WDS功能时。 很多同学在问在说第二台能否连上问题,实际上WDS桥接的目的就是要让第二台或者第三台甚至更多桥接上的路由器能够

    2024年02月07日
    浏览(46)
  • 电脑同时连接有线和无线网络怎么设置网络的优先级

    电脑同时连接有线和无线网络怎么设置网络的优先级: 我们知道在 笔记本电脑系统 中,可以通过有线或无线网络进行联网。如果电脑在有线网络和无线网络同时存在的情况,应该怎么设置有线网络优先连接呢?对此我们提供下面的方法可以让电脑在有WiFi的条件下设置优先使

    2024年02月09日
    浏览(57)
  • 银河麒麟V10(内核Linux)设置有线连接IP地址以及查看

    设置有线连接的IP地址步骤如下:   查看IP地址: hostname -i  得到回环地址127.0.1.1   hostname -I  得到具体的网卡IP ifconfig -a 查看所有 如图:  

    2024年02月11日
    浏览(72)
  • 如何判断电脑当前连接的网络是WiFi无线网络还是有线网络?

    1. wifi无线网络 wifi无线网络: 一般情况下电脑右下角如 图1 所示,则代表当前连接的网络是 wifi无线网络 。 图1: wifi无线网络 如果是平时家里用的,则只能查看或者登录公司以外的网站 或者 软件。如果想登录公司的网站 或 公司的软件,则必须连接上公司的内网。 【连接公

    2024年02月16日
    浏览(48)
  • windows 11同时保持有线内网和无线外网连接设置

    进入组策略编辑器(仅专业版系统支持) 更改组策略-计算机配置-管理模板-网络-Windows连接管理器-最小化到 Internet 或 Windows 域的同时连接数:更改状态为已启用,值为0-允许同时连接。 更改有线网络适配器跃点数 更改无线网络适配器跃点数

    2024年02月11日
    浏览(47)
  • Ubuntu18.04有线连接后,无法设置ip地址以及显示网口设置

    前提:首先测试过网线是完全没问题的 桌面端找不到设置网口 终端输入: ifconfig 没有找到网口设置和对应IP 然后查询网口驱动是否正常安装,输入: lspci | grep Ethernet 有输出说明网口驱动正常安装 然后查询电脑的ip地址,输入: ip addr show 然后可以看到网口的名称是enp4s0 然

    2024年02月20日
    浏览(45)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包