(二)CarPlay集成开发之苹果的iAP协议

文章目录

    • 概要
    • 协议格式
    • 鉴权流程
    • CarPlay中的iAP2协议应用
    • 小结

概要

iAP2协议是由苹果公司定义的一种数据通信协议,主要用于苹果设备认证外设,以及与外设数据交换的一种协议

协议格式

协议格式一共分为三种类型,分别为握手包,链路包,会话包

  • 握手包
    握手包的主要作用是外设向苹果设备发起握手,开启iAP2通讯流程
    报文格式:固定为 FF 55 02 00 EE 10
    
  • 链路包
    链路包主要指的是还未鉴权完成之前的iAP2的包,链路包的主要作用是外设与苹果设备间交换证书,车机信息,从而让苹果设备清楚外设是合法设备,允许连接。
    报文格式:
    	Byte0: Start of Packet MSB (0xFF)
    	Byte1: Start of Packet LSB (0x5A)
    	Byte2: Packet Length MSB
    	Byte3: Packet Length LSB
    	Byte4: Control Byte
    	Byte5: Packet Sequence Number
    	Byte6: Packet Acknowledgement Number
    	Byte7: Session Identifier
    	Byte8: Header Checksum
    	…
    	Payload Data
    	…
    	Payload Checksum
    
  • 会话包
    会话包的主要作用是外设与苹果设备交换业务数据,如歌曲信息,当前播放状态,车机端AP信息分享,拉起CarPlay等
    报文格式:链路包 + 0x40, 0x40, Msg Len MSB, MSG Len LSB, MSG ID MSB, MSG ID LSB, param0, param1 ...  paramN
    ---------------------------------------------------------
    0x40, 0x40 是代表此帧为会话帧
    Msg Len: 整个会话帧的长度,从第一个0x40到paramN的最后一个字节的长度
    MSG ID: 会话ID
    param: 参数帧,每个参数帧也有自己的帧格式,为 param len MSB, param len LSB, param ID MSB, param ID LSB, data...
          param len : 参数帧的长度,从param len MSB 到 data的最后一个字节的长度
          param ID: 参数帧ID
          data : 参数帧承载的数据
    

鉴权流程

提示:这里的流程只介绍iAP2协议的,低版本的不考虑

以下是一个正常的鉴权流程中,iAP2协议的通信流程
请添加图片描述

CarPlay中的iAP2协议应用

CarPlay主要使用iAP2会话包来在无线连接过程中进行AP信息的交换。以及手机端CarPlay会话可用状态的检测,主要应用到的会话ID如下:

Accessory -> Apple Device

- 0x5703 : 发送车机端AP信息(主要用于旧协议CarPlay无线连接)
- 0x4301 : 发送车机端网络信息 (主要用于新协议的CarPlay无线连接)

Apple Device -> Accessory

- 0x4e0d : CarPlay可用状态通知 (旧协议)
- 0x4e0e : 设备传输通道ID,这个报文主要用来获取传输通道ID用于无线与有线的切换  (旧协议)
- 0x4300 : CarPlay可用状态,以及设备传输通道ID信息 (新协议)

小结

这一篇文章主要简单介绍了iAP2协议的包协议,鉴权流程,以及CarPlay通信过程中所用到的几个iAP2 Message ID的功能,了解iAP2协议是开发苹果外设的基础。当然实际开发过程中,我们不需要去自己做拼包与解析的逻辑了,苹果提供了一个iAP2 Link的插件,这个插件已经把这些逻辑都做了,了解协议格式,只是为了更好的Debug.

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mfbz.cn/a/345670.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

「 典型安全漏洞系列 」06.路径遍历(Path Traversal)详解

引言:什么是路径遍历?如何进行路径遍历攻击并规避常见防御?如何防止路径遍历漏洞。 1. 简介 路径遍历(Path Traversal)是一种安全漏洞,也被称为目录遍历或目录穿越、文件路径遍历。它发生在应用程序未正确…

mac电脑安卓文件传输工具:Android File Transfer直装版

Android File Transfer(AFT)是一款用于在Mac操作系统上与Android设备之间传输文件。它允许用户将照片、音乐、视频和其他文件从他们的Android手机或平板电脑传输到Mac电脑,以及将文件从Mac上传到Android设备。 下载地址:https://w…

【立创EDA-PCB设计基础完结】7.DRC设计规则检查+优化与丝印调整+打样与PCB生产进度跟踪

前言:本文为PCB设计基础的最后一讲,在本专栏中【立创EDA-PCB设计基础】前面已经将所有网络布线铺铜好了,接下来进行DRC设计规则检查优化与丝印调整打样与PCB生产进度跟踪 目录 1.DRC设计规则检查 2.优化与丝印调整 1.过孔连接优化 2.泪滴…

如何做好一个信息系统项目经理,一个项目经理的个人体会和经验总结(四)

前言 说完了在 项目开发阶段 我的一些个人体会和经验总结,最后我们聊聊在 项目验收阶段 我们需要关注哪些方面的内容…… 项目验收阶段 系统开发告一段落后,就进入客户培训、系统验收阶段,这个阶段,我一般会注意以下几个问题&a…

NAT配置

目录 静态NAT配置配置抓包测试 动态NAT配置配置测试 Easy IP配置配置测试 静态NAT配置 配置 nat static global { global-address} inside {host-address } 命令用于创建静态NAT。 global参数用于配置外部公网地址。 inside参数用于配置内部私有地址。 AR1-NAT <Huawei&g…

Effective C++——关于重载赋值运算

令operator返回一个*this的引用 在重载,,*等运算符时&#xff0c;令其返回一个指向this的引用。 class MyClass {int* val; public:MyClass(int i) : val(new int(i)){}MyClass():val(new int(0)){}void print() {cout << *val << endl;}MyClass& operator(co…

基于SpringBoot Vue美食网站系统

大家好✌&#xff01;我是Dwzun。很高兴你能来阅读我&#xff0c;我会陆续更新Java后端、前端、数据库、项目案例等相关知识点总结&#xff0c;还为大家分享优质的实战项目&#xff0c;本人在Java项目开发领域有多年的经验&#xff0c;陆续会更新更多优质的Java实战项目&#x…

Django入门,十分钟学会登录网页

我们假定你已经阅读了 安装 Django。你能知道 Django 已被安装&#xff0c;且安装的是哪个版本&#xff0c;通过在命令提示行输入命令 cmd黑窗口运行&#xff0c;不懂cmd百度一下 python -m django --version 如果没出现版本&#xff0c;就是没安装&#xff0c;那么用pip安装…

什么叫特征分解?

特征分解&#xff08;Eigenvalue Decomposition&#xff09;是将一个方阵分解为特征向量和特征值的过程。对于一个 nn 的方阵A&#xff0c;其特征向量&#xff08;Eigenvector&#xff09;v 和特征值&#xff08;Eigenvalue&#xff09; λ 满足以下关系&#xff1a; 这可以写…

vp9协议笔记

vp9协议笔记&#x1f4d2; 本文主要是对vp9协议的梳理&#xff0c;协议的细节参考官方文档&#xff1a;VP9协议链接&#xff08;需要加速器&#xff09; vp9协议笔记 vp9协议笔记&#x1f4d2;1. 视频编码概述2. 超级帧superframe&#xff08;sz&#xff09;&#xff1a;2. fr…

【码农新闻】浏览器上有趣的 Console 命令,VSCode 插件 FreeWindow......

目录 【码农新闻】浏览器上有趣的 Console 命令,VSCode 插件 FreeWindow...... 浏览器上有趣的 Console 命令VSCode 插件 FreeWindow拖拽竟然还能这样玩!阮一峰 ES6 教程总结学习网站总结与整理买临期食品的年轻人,在向“吃喝内卷”低头文章所属专区 码农新闻 欢迎各位编程大…

100T数据存进服务器分几步?

大家好&#xff0c;我是豆小匠。 这期来聊聊数据存储相关的问题&#xff0c;包括&#xff1a; 容量评估。技术选型。容灾处理。 另外&#xff0c;文末赠送免费定制红包封面哦&#xff01; 1. 容量评估 通过对容量&性能的评估&#xff0c;可以把业务需求转化成技术语言描…

Mysql数据库DQL查询语言之表连接(联合查询)

表连接 关系字段&#xff1a;两表中有关联关系的字段 \关系字段&#xff1a;两表之间存在关系的字段 什么是表连接&#xff1f; 当我们的查询结果需要从多张表中获取时&#xff0c;此时应该让表之间建立连接&#xff0c;同时获取数据 内连接 特点&#xff1a;同时对连接双方做…

SpringBoot集成mybatis时idea控制台中文乱码问题解决

在application.yml中配置好映射文件打印数据库日志文件时&#xff0c;控制台出现乱码的情况解决如下 问题 在执行查询操作的时候&#xff0c;查询时可以查看是没有问题的&#xff0c;但是控制台乱码了 解决 在File-Setting-Editor-File Encodings中设置如图所示就可以了 现在…

打 jar 包运行 在windows 平台控制台和日志 乱码解决

--拒絕鷄巴囉嗦&#xff0c;直接解決問題 我们在Windows下运行jar包时&#xff0c;常常会出现乱码&#xff0c;主要分为dos窗口输出的日志中出现乱码和程序返回数据出现乱码。 dos窗口输出的日志中出现乱码 执行如下命令&#xff0c;将控制台输出编码改为UTF8&#xff1a; ch…

c++文件操作(2)-- 按照指定格式读写文件

目录 按照指定格式写文件 代码说明: 按照指定格式读文件 -- 解析一定格式的字符串 代码说明&#xff1a; 注意&#xff1a; 问: 为什么使用getline()? 按照指定格式写文件 在实际开发中&#xff0c;我们以一定的格式写入文件当中。 其实就是使用stringstream类对…

【vite】找不到模块“vite”或其相应的类型声明

今天在用vite搭建项目时&#xff0c;在vite.config.ts文件中 ts报错找不到模块“vitejs/plugin-vue”或其相应的类型声明。 原因&#xff1a;项目中缺少了相应的依赖包或 TypeScript 类型声明。可以按照以下步骤进行检查&#xff1a; 1. 确保安装了相应的依赖包 如果在pack…

Unity中URP下获取额外灯数量

文章目录 前言一、SimpleLit下额外灯数量的获取1、在 SimpleLit 下&#xff0c;先获取了额外灯的数量2、对其进行循环计算每一个额外灯3、GetAdditionalLightsCount在这里插入图片描述 二、GetAdditionalLightsCount实现了什么1、_AdditionalLightsCount.x2、unity_LightData.y…

Tarjan 算法(超详细!!)

推荐在 cnblogs 上阅读 Tarjan 算法 前言 说来惭愧&#xff0c;这个模板仅是绿的算法至今我才学会。 我还记得去年 CSP2023 坐大巴路上拿着书背 Tarjan 的模板。虽然那年没有考连通分量类似的题目。 现在做题遇到了 Tarjan&#xff0c;那么&#xff0c;重学&#xff0c;开…

防御课程—华为USG6000V1的配置实验(一)

实验拓扑&#xff1a; 实验分析 由实验拓扑图需求分析可知我们在生产区和办公区需要用到子接口技术 实验配置 在Cloud1上配置 在DMZ区域配置 在server1上配置在server2上配置在防火墙上进行的配置 由实验拓扑图可知防火墙与DMZ区域相连的接口为GigabitEthernet1/0/0接口 …
最新文章