当前位置: 首页 > article >正文

CarPlay 有线连接流程

一、引言1.1 目的此文档记录CarPlay 开发中有线连接开发部分详细介绍CarPlay有线连接的流程希望可以给开发CarPlay小伙伴一些帮助无线连接后续再梳理。二、架构设计2.1 架构图注此图翻译自苹果官方的开发帮助文档身份认证 AuthenticationCarPlay是一种经过认证的解决方案需要使用通过Apple获得的Apple认 证协处理器。设备只能流向授权的车机。使用Apple认证协处理器的CarPlay配件3.0只能声明与iOS 10.3或更高版本兼容。iAP2iOS 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 DescriptorUSB DescriptorValueDescriptionInterface Number0xNNMust be different from the USB NCM Control interface and USB NCM data interface numbers.Interface Class0xFFVendor-specific interfaceInterface Subclass0xF0MFi accessoryInterface Protocol0x00Interface StringiAP InterfaceNumber of Endpoints21 bulk IN and 1 bulk OUT endpoint descriptor shall be specifiedTable-3.13.1.2 NCM Control Interface DescriptorUSB DescriptorValueDescriptionInterface Number0xNNMust be different from the iAP2 interface and USB NCM data interface numbers. Must match the USBHostTransportCarPlayInterfaceNumber,seeAccessory Identification in the Accessory Interface SpecificationInterface Class0x02USB Communication Interface ClassInterface Subclass0x0DNetwork Control ModelInterface Protocol0x00No encapsulated commands / responsesNumber of Endpoints1Interrupt 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.23.1.3 NCM USB NCM Data Interface DescriptorUSB DescriptorValueDescriptionInterface Number0xNNMust be different from the iAP2 interface and USB NCM control interface numbers.Interface Class0x0AUSB Data Interface ClassInterface Subclass0x00Interface Protocol0x01NCM Data ClassNumber of Endpoints0(for Alternate Setting 0)Number of Endpoints2(for Alternate Setting 1) 1 Bulk IN; and 1 Bulk OUTTable-3.33.2 枚举设备当有USB设备插入时通过USBDevice的PID、VID判断是否是IPhone设备。Apple Vendor ID 0x05ACApple Product ID 0x12nn3.3 检查设备是否支持CarPlay检查到iphone 设备之后通过USB controlTransfer发送 请求查询设备CarPlay是否可用参数值备注bmRequestType0xC0Device-to-Host,数据由Device发给HostbRequest0x53供应商定义的USB获取启用功能请求wValue0x00N/AwIndex0x00N/AwLength4返回的数据长度为4字节Table-3.4当iphone答复0x01 表示iphone支持CarPlay。3.4 Iphone Usb角色切换当IPhone设备通过USB连接到车机时IPhone作为Device设备车机作为Host若想连接CarPlay需要先将IPhone切换为Host参数值备注bmRequestType0x40Device-to-Host,数据由Device发给HostbRequest0x51供应商定义的USB角色切换请求wValue0x010x01为切换到HostwIndex0x00N/AwLength0N/ATable-3.53.5 车机角色切换车机默认是Host模式需要切换成device模式每个车机的切换方法不同在此不做详细说明。3.6 iAP2 身份认证在USB角色切换成功后USB通道就成功建立可以接收/发送iAP2数据按照CarPlay标准流程进行IdentificationAuthentication所需数据较多且无线与有线的身份认证有差异但数据包格式相同。具体参考《Accessory Interface Specification CarPlay Addendum R7》3.7 激活NCM功能激活NCM功能设置IP路由每个项目都有差异需要与Tier 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.1 目的此文档记录CarPlay 开发中有线连接开发部分,详细介绍CarPlay有线连接的流程,希望可以给开发CarPlay小伙伴一些帮助,无线连接后续再梳理。二、架构设计2.1 架构图注:此图翻译自苹果官方的开发帮助文档身份认证 &am…...

java毕业设计——基于JSP+sqlserver的课程教学网站设计与实现(毕业论文+程序源码)——教学网站

基于JSPsqlserver的课程教学网站设计与实现(毕业论文程序源码) 大家好,今天给大家介绍基于JSPsqlserver的课程教学网站设计与实现,文章末尾附有本毕业设计的论文和源码下载地址哦。需要下载开题报告PPT模板及论文答辩PPT模板等的…...

java毕业设计——基于JSP+sqlserver的科研处管理信息系统设计与实现(毕业论文+程序源码)——科研处管理信息系统

基于JSPsqlserver的科研处管理信息系统设计与实现(毕业论文程序源码) 大家好,今天给大家介绍基于JSPsqlserver的科研处管理信息系统设计与实现,文章末尾附有本毕业设计的论文和源码下载地址哦。需要下载开题报告PPT模板及论文答辩…...

使用slack-cleaner,打造清爽的Slack工作环境

使用slack-cleaner,打造清爽的Slack工作环境 【免费下载链接】slack-cleaner :speech_balloon: Bulk delete messages and files on Slack 项目地址: https://gitcode.com/gh_mirrors/sl/slack-cleaner 在现代企业中,Slack是团队协作的重要工具。…...

O3DE引擎全面解析:从基础到高级的开源3D创作平台完全指南

O3DE引擎全面解析:从基础到高级的开源3D创作平台完全指南 【免费下载链接】o3de Open 3D Engine (O3DE) is an Apache 2.0-licensed multi-platform 3D engine that enables developers and content creators to build AAA games, cinema-quality 3D worlds, and hi…...

U8g2常见问题解答:解决OLED/LCD显示开发中的痛点难题

U8g2常见问题解答:解决OLED/LCD显示开发中的痛点难题 【免费下载链接】u8g2 U8glib library for monochrome displays, version 2 项目地址: https://gitcode.com/gh_mirrors/u8/u8g2 U8g2是一款功能强大的单色显示器库,广泛应用于OLED和LCD显示…...

推荐一款开源利器:Linux Router

推荐一款开源利器:Linux Router 【免费下载链接】linux-router Set Linux as router in one command. Support Internet sharing, redsocks, Wifi hotspot, IPv6. Can also be used for routing VM/containers 🛰️ (也欢迎关注B站 https://space.bilibi…...

gRPC协议在TOMs中的应用:跨平台服务通信的高性能实现

gRPC协议在TOMs中的应用:跨平台服务通信的高性能实现 【免费下载链接】TOMs TOMs is a fully open-source, high-performance, systematic, plugin-oriented, and scenario-agnostic general-purpose development framework. 项目地址: https://gitcode.com/gh_m…...

代码截图的高级技巧:gh_mirrors/car/carbon的隐藏功能

代码截图的高级技巧:gh_mirrors/car/carbon的隐藏功能 【免费下载链接】carbon 项目地址: https://gitcode.com/gh_mirrors/car/carbon gh_mirrors/car/carbon是一款功能强大的代码截图工具,能够帮助开发者轻松创建美观、专业的代码图片。无论是…...

pydata-book bitly使用数据:用户行为数据的统计与分析

pydata-book bitly使用数据:用户行为数据的统计与分析 【免费下载链接】pydata-book wesm/pydata-book: 这是Wes McKinney编写的《Python for Data Analysis》一书的源代码仓库,书中涵盖了使用pandas、NumPy和其他相关库进行数据处理和分析的实践案例和技…...

Used-Trading-Platform2开源项目安装与使用指南

Used-Trading-Platform2开源项目安装与使用指南 【免费下载链接】Used-Trading-Platform2 基于Spring Boot的校园二手交易网站 项目地址: https://gitcode.com/gh_mirrors/us/Used-Trading-Platform2 1. 项目目录结构及介绍 Used-Trading-Platform2 是一个基于Spring Bo…...

Python-Fxxk-Spider 开源项目教程

Python-Fxxk-Spider 开源项目教程 【免费下载链接】python-fxxk-spider 收集各种免费的 Python 爬虫项目 项目地址: https://gitcode.com/gh_mirrors/py/python-fxxk-spider 项目介绍 Python-Fxxk-Spider 是一个收集了各种免费 Python 爬虫项目的开源仓库。该项目旨在为…...

Used-Trading-Platform2 开源项目教程

Used-Trading-Platform2 开源项目教程 【免费下载链接】Used-Trading-Platform2 基于Spring Boot的校园二手交易网站 项目地址: https://gitcode.com/gh_mirrors/us/Used-Trading-Platform2 项目介绍 Used-Trading-Platform2 是一个基于 Spring Boot 的校园二手交易网站…...

Bedrock插件开发终极指南:如何在现代化WordPress环境中创建自定义插件

Bedrock插件开发终极指南:如何在现代化WordPress环境中创建自定义插件 【免费下载链接】bedrock WordPress boilerplate with Composer, easier configuration, and an improved folder structure 项目地址: https://gitcode.com/gh_mirrors/be/bedrock Bedr…...

终极指南:如何快速集成Prisma与Astro、SolidStart前端框架

终极指南:如何快速集成Prisma与Astro、SolidStart前端框架 【免费下载链接】prisma-examples 🚀 Ready-to-run Prisma example projects 项目地址: https://gitcode.com/gh_mirrors/pr/prisma-examples Prisma是一个强大的ORM工具,能…...

Win-Debloat-Tools终极指南:快速打造精简高效的Windows系统

Win-Debloat-Tools终极指南:快速打造精简高效的Windows系统 【免费下载链接】Win-Debloat-Tools Re-imagining Windows like a minimal OS install, already debloated with minimal impact for most functionality. 项目地址: https://gitcode.com/gh_mirrors/wi…...

prompttools常见问题解答:从API密钥到实验调试

prompttools常见问题解答:从API密钥到实验调试 【免费下载链接】prompttools Open-source tools for prompt testing and experimentation, with support for both LLMs (e.g. OpenAI, LLaMA) and vector databases (e.g. Chroma, Weaviate, LanceDB). 项目地址: …...

Inputmask数字扩展终极指南:轻松处理货币、百分比和小数输入

Inputmask数字扩展终极指南:轻松处理货币、百分比和小数输入 【免费下载链接】Inputmask Input Mask plugin 项目地址: https://gitcode.com/gh_mirrors/in/Inputmask Inputmask 是一款强大的输入格式化插件,能够帮助用户确保输入内容符合预定义格…...

python里面的pathlib包与路径调整

一、pathlib包 pathlib里的包是处理文件系统的包,有涉及到处理纯路径和window路径。在这个包里面,我们可能用到的是path这个功能。下面是一些具体的函数的介绍。 from pathlib import Path为了获取其父节点,这是一种方法。 p PureWindowsPat…...

PyCaret与Jupyter Notebook集成:交互式ML分析的终极指南

PyCaret与Jupyter Notebook集成:交互式ML分析的终极指南 【免费下载链接】pycaret An open-source, low-code machine learning library in Python 项目地址: https://gitcode.com/gh_mirrors/py/pycaret PyCaret是一个开源的低代码机器学习库,它…...

LikeC4 开源项目使用教程

LikeC4 开源项目使用教程 【免费下载链接】likec4 Visualize, collaborate, and evolve the software architecture with always actual and live diagrams from your code 项目地址: https://gitcode.com/GitHub_Trending/li/likec4 1. 项目的目录结构及介绍 LikeC4 项…...

终极DCGAN训练指南:解决模式崩溃与梯度消失的7个实用技巧

终极DCGAN训练指南:解决模式崩溃与梯度消失的7个实用技巧 【免费下载链接】DCGAN-tensorflow A tensorflow implementation of "Deep Convolutional Generative Adversarial Networks" 项目地址: https://gitcode.com/gh_mirrors/dc/DCGAN-tensorflow …...

消息队列RabbitMQ的配置操作及使用

一、RabbitMQ的体系结构 RabbitMQ是一个基于AMQP(Advanced Message Queuing Protocol,高级消息队列协议)实现的开源消息中间件,主要用于在分布式系统中存储和转发消息。它由Erlang语言编写,以高性能、高可用性以及高扩…...

(论文)一种基于部分欺骗音频检测的基于临时深度伪造位置方法的高效嵌入

AN EFFICIENT TEMPORARY DEEPFAKE LOCATION APPROACH BASED EMBEDDINGS FOR PARTIALLY SPOOFED AUDIO DETECTION摘要:部分伪造音频检测是一项具有挑战性的任务,在于需要在帧级别上准确地定位音频的真实性。时间性深度伪造定位( TDL )可有效地捕获特征和位…...

AE函数讲解大全 附带下载链接

Adobe After Effects(AE)简介Adobe After Effects 是一款由 Adobe 公司开发的专业动态图形和视觉效果合成软件,广泛应用于影视后期、广告制作、动画设计等领域。它支持图层式的非线性编辑,可实现复杂的特效合成、运动追踪、3D 渲染…...

从 transactional contract 读懂 ABAP 事务边界:RAP、Controlled SAP LUW 与一致性设计实践

在 SAP 新一代开发模型里,transactional contract 并不是一个只存在于文档角落里的术语,它实际上定义了 ABAP 代码在事务运行过程中能做什么、不能做什么。这个机制的意义,不只是限制开发者的自由,而是把事务一致性从靠经验推进到靠框架与规则共同保障。SAP 官方将它定义为…...

把 Test Seam 用明白:ABAP Unit 中隔离依赖、驯服遗留代码的实战指南

在日常的 ABAP 开发里,真正让单元测试变难的,往往不是断言怎么写,而是生产代码里那些甩不掉的外部依赖:数据库读写、权限校验、对象实例化、甚至某些系统状态判断。一旦这些依赖直接写死在业务逻辑中,测试就会变得脆弱、缓慢,而且高度依赖运行环境。Test Seam 存在的意义…...

读懂 SAP 中的 tuning object:把性能优化从业务对象中解耦出来

在很多 ABAP 项目里,开发人员一谈性能优化,脑海里浮现的往往是 SQL Trace、索引、Hint 或者代码重写。可是在 SAP 官方的数据建模体系里,还存在一类很容易被忽略、却非常有工程价值的对象,那就是 tuning object。它并不直接承载业务语义,也不是拿来定义字段、关联和行为逻…...

STM32N6570-DK识别STLINK问题,如何解决?

🏆本文收录于 《全栈 Bug 调优(实战版)》 专栏。专栏聚焦真实项目中的各类疑难 Bug,从成因剖析 → 排查路径 → 解决方案 → 预防优化全链路拆解,形成一套可复用、可沉淀的实战知识体系。无论你是初入职场的开发者,还是负责复杂项目的资深工程师,都可以在这里构建一套属…...

Spring Boot 中的 Redisson 分布式锁

Redisson 分布式锁依赖 <dependency><groupId>org.redisson</groupId><artifactId>redisson-spring-boot-starter</artifactId><version>3.23.5</version> </dependency>application.yml 配置 spring:redis:host: localhostpo…...