我的编程空间,编程开发者的网络收藏夹
学习永远不晚

CarPlay 有线连接流程

短信预约 -IT技能 免费直播动态提醒
省份

北京

  • 北京
  • 上海
  • 天津
  • 重庆
  • 河北
  • 山东
  • 辽宁
  • 黑龙江
  • 吉林
  • 甘肃
  • 青海
  • 河南
  • 江苏
  • 湖北
  • 湖南
  • 江西
  • 浙江
  • 广东
  • 云南
  • 福建
  • 海南
  • 山西
  • 四川
  • 陕西
  • 贵州
  • 安徽
  • 广西
  • 内蒙
  • 西藏
  • 新疆
  • 宁夏
  • 兵团
手机号立即预约

请填写图片验证码后获取短信验证码

看不清楚,换张图片

免费获取短信验证码

CarPlay 有线连接流程

一、引言

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日志分析。

来源地址:https://blog.csdn.net/xiaojian_007/article/details/130421388

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

CarPlay 有线连接流程

下载Word文档到电脑,方便收藏和打印~

下载Word文档

猜你喜欢

win7消除无线连接限定操作流程

win7客户使用无线网络网上的时候察觉自己的网络连接受限制,这种情况要怎么解除呢?方式很简单,你先开启网络和共享中心,然后进到管理无线网络页面,右键wifi网络打开它的属性窗口,以后转换到安全选项卡,点击高级设置按钮,以后将“因此网络启动联
2023-07-11

Java中使用Jedis连接池连接Redis数据库流程

场景Centos中Redis的下载编译与安装(超详细):https://blog.csdn.net/BADAO_LIUMANG_QIZHI/article/details/103967334Redis的启动和关闭(前台启动和后台启动):https://blog
Java中使用Jedis连接池连接Redis数据库流程
2018-02-08

SpringBoot集成FTP与SFTP连接池流程

在项目开发中,一般文件存储很少再使用SFTP服务,但是也不排除合作伙伴使用SFTP来存储项目中的文件或者通过SFTP来实现文件数据的交互,这篇文章主要介绍了SpringBoot集成FTP与SFTP连接池
2022-12-08

windows8系统怎么连接wifi的流程教程

wifi网络热点做为可运动的移动网络是人们平常生活中不可以缺失的,大家都了解Win8系统能够适用WiFi网络热点作用,可是有一部分windows8系统客户不清楚怎么连接,下边就由小编来告知大伙儿.。windows8怎么连接wifi:1.最先
2023-07-11

Linux系统创建TCP连接流程介绍

目录linux创建TCP的步骤服务端客户端TCP建立流程示例代码Linux创建TCP的步骤 TCP编程需要客户端和服务器两套编码,其创建TCP的流程也是不完全一致的 服务端 使用socket函数创建一个套接字 使用setsockopt函数设
2022-06-04

weblogic如何查看最大线程连接数

要查看WebLogic的最大线程连接数,可以按照以下步骤操作:1. 登录到WebLogic控制台。通常可以通过在浏览器中输入http://localhost:7001/console来访问控制台。2. 在控制台的左侧导航栏中,展开"环境"并
2023-09-01

windows8中怎么设置按流量计费的宽带连接(适用于无线网络连接)

1、桌面下单击右下角的网络图标。参见下图2、右键正在连接的无线网络。参见下图3、在弹出菜单里单机选择“设为按流量计费的连接”。参见下图4、然后单机选择“显示预计数据使用”。参见下图5、正在连接
2022-06-04

Python 端口扫描(全连接,无多线程

'''这是一个端口全连接扫描的脚本,扫描结果会比较准确,但是比较费时间''''''运行环境 Python3 '''from socket import *def portScanner(host,port): try:
2023-01-31

win10有线网络连接不上如何解决

若Windows 10的有线网络连接无法连接,可以尝试以下解决方法:1. 确保网线连接良好:检查网线是否插好并且没有损坏。可以尝试重新插拔网线试试。2. 重启网络设备:重启路由器、调制解调器和计算机,以确保网络设备正常运行。3. 检查IP地
2023-10-18

ubuntu有线网络连接不上怎么解决

如果Ubuntu的有线网络连接无法连接,可以尝试以下解决方法:检查网线连接:确保网线连接到计算机和路由器或交换机上,并且连接牢固。检查网络设置:在Ubuntu的网络设置中检查IP地址、子网掩码、网关和DNS服务器是否配置正确。重启网络服务:
ubuntu有线网络连接不上怎么解决
2024-03-15

大数据开发phoenix连接hbase流程详解

目录一、安装phoennix添加配置二、启动phoenix服务三、phoenix常用语法四、Java代码集成phoenix一、安装phoennix添加配置1、将phoenix-server-hbase-2.4-5.1.2.jar拷贝至hba
2022-11-20

Oracle数据库ODBC连接故障排查流程

Oracle数据库ODBC连接故障排查流程如下:检查ODBC数据源配置:首先确保ODBC数据源配置正确,包括数据库实例名、用户名、密码等信息。测试连接:使用ODBC数据源配置工具测试连接是否正常,若连接失败可能说明配置有误。检查网络连接:检
Oracle数据库ODBC连接故障排查流程
2024-07-15

编程热搜

  • Android:VolumeShaper
    VolumeShaper(支持版本改一下,minsdkversion:26,android8.0(api26)进一步学习对声音的编辑,可以让音频的声音有变化的播放 VolumeShaper.Configuration的三个参数 durati
    Android:VolumeShaper
  • Android崩溃异常捕获方法
    开发中最让人头疼的是应用突然爆炸,然后跳回到桌面。而且我们常常不知道这种状况会何时出现,在应用调试阶段还好,还可以通过调试工具的日志查看错误出现在哪里。但平时使用的时候给你闹崩溃,那你就欲哭无泪了。 那么今天主要讲一下如何去捕捉系统出现的U
    Android崩溃异常捕获方法
  • android开发教程之获取power_profile.xml文件的方法(android运行时能耗值)
    系统的设置–>电池–>使用情况中,统计的能耗的使用情况也是以power_profile.xml的value作为基础参数的1、我的手机中power_profile.xml的内容: HTC t328w代码如下:
    android开发教程之获取power_profile.xml文件的方法(android运行时能耗值)
  • Android SQLite数据库基本操作方法
    程序的最主要的功能在于对数据进行操作,通过对数据进行操作来实现某个功能。而数据库就是很重要的一个方面的,Android中内置了小巧轻便,功能却很强的一个数据库–SQLite数据库。那么就来看一下在Android程序中怎么去操作SQLite数
    Android SQLite数据库基本操作方法
  • ubuntu21.04怎么创建桌面快捷图标?ubuntu软件放到桌面的技巧
    工作的时候为了方便直接打开编辑文件,一些常用的软件或者文件我们会放在桌面,但是在ubuntu20.04下直接直接拖拽文件到桌面根本没有效果,在进入桌面后发现软件列表中的软件只能收藏到面板,无法复制到桌面使用,不知道为什么会这样,似乎并不是很
    ubuntu21.04怎么创建桌面快捷图标?ubuntu软件放到桌面的技巧
  • android获取当前手机号示例程序
    代码如下: public String getLocalNumber() { TelephonyManager tManager =
    android获取当前手机号示例程序
  • Android音视频开发(三)TextureView
    简介 TextureView与SurfaceView类似,可用于显示视频或OpenGL场景。 与SurfaceView的区别 SurfaceView不能使用变换和缩放等操作,不能叠加(Overlay)两个SurfaceView。 Textu
    Android音视频开发(三)TextureView
  • android获取屏幕高度和宽度的实现方法
    本文实例讲述了android获取屏幕高度和宽度的实现方法。分享给大家供大家参考。具体分析如下: 我们需要获取Android手机或Pad的屏幕的物理尺寸,以便于界面的设计或是其他功能的实现。下面就介绍讲一讲如何获取屏幕的物理尺寸 下面的代码即
    android获取屏幕高度和宽度的实现方法
  • Android自定义popupwindow实例代码
    先来看看效果图:一、布局
  • Android第一次实验
    一、实验原理 1.1实验目标 编程实现用户名与密码的存储与调用。 1.2实验要求 设计用户登录界面、登录成功界面、用户注册界面,用户注册时,将其用户名、密码保存到SharedPreference中,登录时输入用户名、密码,读取SharedP
    Android第一次实验

目录