(二)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.mzph.cn/news/638417.shtml

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

相关文章

42.接雨水 - 力扣(LeetCode)

问题描述 给定 n 个非负整数表示每个宽度为 1 的柱子的高度图,计算按此排列的柱子,下雨之后能接多少雨水。输入格式 height [0,1,0,2,1,0,1,3,2,1,2,1]输出格式 6解释 上面是由数组 [0,1,0,2,1,0,1,3,2,1,2,1] 表示的高度图,在这种情况下…

「优选算法刷题」:查找总价格为目标值的两个商品

一、题目 购物车内的商品价格按照升序记录于数组 price。请在购物车中找到两个商品的价格总和刚好是 target。若存在多种情况,返回任一结果即可。 示例 1: 输入:price [3, 9, 12, 15], target 18 输出:[3,15] 或者 [15,3]示例…

初始RabbitMQ(入门篇)

消息队列(MQ) 本质上就是一个队列,一个先进先出的队列,队列中存放的内容是message(消息),是一种跨进程的通信机制,用于上下游传递消息, 为什么使用MQ: 削峰填谷: MQ可以很好的做一个缓冲机制,例如在一个系统中有A和B两个应用,A是接收用户的请求的,然后A调用B进行处理. 这时…

【2023】java使用WebClient实现chatGPT调用建立web socket连接

💻目录 一、介绍1、使用技术2、效果 二、代码1、前端代码2、后端代码2.1、maven依赖2.2、model2.2.1、请求接口的格式2.2.2、响应数据对象 2.3、工具类2.3.1、🔴使用WebClient调用chatgpt方法2.3.2、🟠 webSocket连接对话方法 2.4、Controlle…

使用 OpenLLM 构建和部署大模型应用

原文:使用 OpenLLM 构建和部署大模型应用 - 知乎 分享主题为:使用 OpenLLM 快速构建和部署大语言模型的应用。OpenLLM 是一个开源的大语言模型(LLM)开发框架。它支持多种开源的 LLM 模型,并且具有内建的两个关键的 LL…

自然语言处理研究的内容

一.基础技术 1.1 词法分析 词法分析(Lexical Analysis),也称为词法扫描或扫描器,是自然语言处理(NLP)中的基础步骤之一,用于将输入的文本分割成词法单元(Token)。词法单…

vulnhub-dc2靶场

DC2 配置环境vmware17 nat网络配置 下载地址:DC and Five86 Series Challenges - DC-1 (似乎从2024/1/18左右找不到这个资源了) 攻击机kali与其在同一网段下 ip:192.168.52.130 信息收集 arp-scan -l #内网探测,扫描目标ip发现目标ip1…

【服务器】搭建一台属于自己的服务器

​🌈个人主页:Sarapines Programmer🔥 系列专栏:【服务器】搭建网站⏰诗赋清音:云生高巅梦远游, 星光点缀碧海愁。 山川深邃情难晤, 剑气凌云志自修。 目录 1. 购买服务器和域名 1.1 购买服务器 1.1.1 阿里云服务器 1.1.2 香草云服务器 1.2 购买域名 2. 安装宝塔…

Blender——将模型及其所有纹理与材质导入unity

前期准备 参考视频:7分钟教会你如何将Blender的模型材质导入unity_哔哩哔哩_bilibili 实验模型官网下载地址:Hoi An Ancient House Model free VR / AR / low-poly 3D model CSDN下载链接: 【免费】Blender三维模型-古代房屋模型&#xff…

【Linux】第三十三站:日志

文章目录 一、实现一个简单的日志1.简介2.可变参数3.错误等级4.时间5.打印每一条参数6.与前面的一些代码搭配使用 二、完整代码 一、实现一个简单的日志 1.简介 我们运行代码的时候,我们希望有各种各样的运行时候的一些信息。这也就是日志 它一半有日志时间&…

【GitHub项目推荐--老照片变清晰】【转载】

先来看一个效果图,这个开源项目能把模糊爆浆的老照片 1 s 内变成清晰、高清的有色照片。 而以上这些效果,无需专业 PS 技能,只用一个网页端的 Demo、点点鼠标上传图片就能搞定。 这个修复神器,由腾讯 PCG ARC 实验室研发&#xf…

结构体大揭秘:代码中的时尚之选(上)

目录 结构结构的声明结构成员的类型结构体变量的定义和初始化结构体成员的访问结构体传参 结构 结构是一些值的集合,这些值被称为成员变量。之前说过数组是相同类型元素的集合。结构的每个成员可以是不同类型的变量,当然也可以是相同类型的。 我们在生活…

【系统调用IO】open、close、read、write、lseek

目录 3 系统调用IO3.1 文件描述符3.1.1 FILE结构体3.2.2 文件描述符 3.3 open、close、read、write、lseek3.3.1 文件权限3.3.2 open3.3.3 close3.3.4 read3.3.5 write3.3.6 lseek3.3.7 代码示例 文件io和标准io的区别 橙色 3 系统调用IO 3.1 文件描述符 3.1.1 FILE结构体 …

多线程编程1

一、线程的引入 上节,我们介绍了进程的概念,以及操作系统内核是如何管理进程的(描述组织),PCB中的核心属性有哪些, 引入进程这个概念,最主要的目的,就是为了解决“并发编程”这样的…

JavaScript语法摘要

JavaScript语法摘要 JavaScript语法通过各种规则和组合,就能创建出丰富多彩的程序呢!它包括了怎么声明和使用变量、如何定义和赋值,还有怎么用运算符和表达式等等。另外,我还发现了一些有趣的概念,比如关键字、注释、…

Python学习从0到1 day7 Python判断语句

路远殊途,祝你得偿所愿 ——24.1.21 前言 进行逻辑判断,是生活中常见的行为,同样,在程序中,进行逻辑判断也是最为基础的功能 一、布尔类型和比较运算符 1.布尔类型 进行判断,有两个结果,True、…

springboot集成COS对象存储

1.申请腾讯云存储桶 新建密钥(后面配置要用到) 2.编写工具类 此处使用工具类进行基本属性配置,也可选择在yml中配置 package com.sfy.util;import com.qcloud.cos.COSClient; import com.qcloud.cos.ClientConfig; import com.qcloud.cos.a…

基于xgboost-LGBM-SVM的病人哮喘病识别检测 数据+代码

基于xgboost-LGBM-SVM的病人哮喘病识别检测-完整代码可直接运行_哔哩哔哩_bilibili 代码: from sklearn import preprocessing import random from sklearn.model_selection import train_test_split from sklearn.preprocessing import MinMaxScaler from sklearn import pr…

声明式注解对XXL-JOB的定时任务代码生效吗?

说明:源于博主的思考,本文验证一下声明式注解,即Transactional注解,对XXL-JOB的定时任务是否生效。 准备 首先,创建一个需要事务的场景。有两张表,一张部门表,一张用户表,用户隶属…

基于YOLOv8的目标识别、计数、电子围栏的项目开发过程

0 前言 用于生产环境中物体检测、识别、跟踪,人、车流量统计,越界安全识别 1 YOLOv8概述 YOLOv8 是Ultralytics的YOLO的最新版本。作为一种前沿、最先进(SOTA)的模型,YOLOv8在之前版本的成功基础上引入了新功能和改进,以提高性…