(二)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 MSBByte3: Packet Length LSBByte4: Control ByteByte5: Packet Sequence NumberByte6: Packet Acknowledgement NumberByte7: Session IdentifierByte8: 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: 参数帧IDdata : 参数帧承载的数据
    

鉴权流程

提示:这里的流程只介绍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.hqwc.cn/news/418348.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【服务器数据恢复】服务器迁移数据时lun数据丢失的数据恢复案例

服务器数据恢复环境&服务器故障: 一台安装Windows操作系统的服务器。工作人员在迁移该服务器中数据时突然无法读取数据,服务器管理界面出现报错。经过检查发现服务器中一个lun的数据丢失。 服务器数据恢复过程: 1、将故障服务器中所有磁盘…

【LeetCode】141. 环形链表

leetcode题目链接 141. 环形链表 #include <stdio.h> #include <stdbool.h>struct ListNode {int val;struct ListNode* next; }; typedef struct ListNode ListNode;bool hasCycle(ListNode* head) {ListNode* slow head, * fast head;while (fast &&…

【c++笔记】用c++解决一系列质数问题!

质数是c语言和c中比较常见的数学问题&#xff0c;本篇文章将带你走进有关质数的一系列基础问题&#xff0c;其中包含常见的思路总结&#xff0c;本篇文章过后&#xff0c;将会持续更新c算法系列&#xff0c;感兴趣的话麻烦点个关注吧&#xff01; 希望能给您带来帮助&#xff…

Python武器库开发-武器库篇之Fofa-API使用(四十六)

Python武器库开发-武器库篇之Fofa-API使用(四十六) FOFA&#xff08;FOcus Observation of Futures Assets&#xff09;是一款专业的网络资产搜索引擎&#xff0c;旨在帮助企业发现和评估网络上的潜在安全风险。FOFA的基本原理是通过搜索引擎的方式&#xff0c;按照关键词对互…

【Linux上创建一个LVM卷组,将多个物理卷添加到卷组中使用】

Linux上创建一个LVM卷组&#xff0c;将多个物理卷添加到卷组中使用 目录1.列出当前系统中所有的块设备信息&#xff0c;包括磁盘、分区、逻辑卷等2.对磁盘进行分区操作3.创建了一个名为 vg_data 的卷组4.将物理卷添加到已经存在的卷组5.在卷组中创建一个逻辑卷6.查看已创建的 L…

2023:既是结束也是开始

2023年注定是不平凡的一年&#xff0c;这一年真的经历了很多事&#xff0c;包括学习、生活、工作等等&#xff0c;上半年忙着毕业以及一些其他的事情&#xff0c;很多挖的坑都没来得及填&#xff0c;下半年研一开学以后终于有了足够的时间学习&#xff0c;接下来就用这篇文章来…

cs231n assignment1——SVM

整体思路 加载CIFAR-10数据集并展示部分数据数据图像归一化&#xff0c;减去均值&#xff08;也可以再除以方差&#xff09;svm_loss_naive和svm_loss_vectorized计算hinge损失&#xff0c;用拉格朗日法列hinge损失函数利用随机梯度下降法优化SVM在训练集和验证集计算准确率&a…

VueCli-自定义创建项目

参考 1.安装脚手架 (已安装可以跳过) npm i vue/cli -g2.创建项目 vue create 项目名 // 如&#xff1a; vue create dn-demo键盘上下键 - 选择自定义选型 Vue CLI v5.0.8 ? Please pick a preset:Default ([Vue 3] babel, eslint)Default ([Vue 2] babel, eslint) > M…

文本处理方法:教你如何轻松批量删除多个文本文件中的空白行

在处理大量文本数据时&#xff0c;空白行可能会成为一个问题。这些无用的行不仅会使文本文件显得混乱&#xff0c;还可能影响数据的准确性和分析。幸运的是&#xff0c;有许多简单的方法可以批量删除多个文本文件中的空白行。下面来看“办公提效工具”如何批量操作的方法&#…

肌营养不良患者生活质量的“提升”

肌营养不良患者基本上是生活无法自理的&#xff0c;那么作为肌营养不良患者的家属&#xff0c;提升病人的生活质量就迫在眉睫。看了这篇文章你就知道该怎么做了。 ①保持生活环境整洁 肌营养不良患者本身体质较弱&#xff0c;而且后期会卧病在床&#xff0c;为了防止并发症的发…

强网杯2023 crypto

speed up 当时看到这个题目 也是觉得易懂 并且可以解出来的 但是数字实在是过大了兄弟 题目意思是计算2^27的阶乘,并获取得到每一位数的数字之和,flag即为该数字的sha256编码 2^27为134217728 gmpy2包是支持大数运算的,故利用其fac方法进行尝试,在等待一段时间后可以得到对…

范围运算between...and和空判断

目录 between...and 空判断 Oracle从入门到总裁:https://blog.csdn.net/weixin_67859959/article/details/135209645 between...and between...and的主要功能是用户进行范围查询,语法如下: select 字段 | 数值 between 最小值 and 最大值; 1.查询工资在 1500 ~ 3000 的所…