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

news2024/9/22 11:35:44

文章目录

    • 概要
    • 协议格式
    • 鉴权流程
    • 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.coloradmin.cn/o/1398287.html

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

相关文章

lattice Diamond Programmer程序下载

Lattice Diamond Programmer Diamond Programmer程序下载1 Diamond Programmer启动2 Diamond Programmer程序烧写3 Cannot Identify Device错误解决 Diamond Programmer程序下载 Diamond Programmer适用于Lattice公司的FPGA器件与CPLD器件的程序下载,其下载步骤如下…

如何才能拥有比特币 - 01 ?

如何才能拥有BTC 在拥有 BTC 之前我们要先搞明白 BTC到底保存在哪里?我的钱是存在银行卡里的,那我的BTC是存在哪里的呢? BTC到底在哪里? 一句话概括,BTC是存储在BTC地址中,而且地址是公开的,…

Python项目——搞怪小程序(PySide6+Pyinstaller)

1、介绍 使用python编写一个小程序,回答你是猪吗。 点击“是”提交,弹窗并退出。 点击“不是”提交,等待5秒,重新选择。 并且隐藏了关闭按钮。 2、实现 新建一个项目。 2.1、设计UI 使用Qt designer设计一个UI界面&#xff0c…

android 开发 W/TextToSpeech: speak failed: not bound to TTS engine

问题 笔者使用TTS(TextToSpeech)对于文本内容进行语音播报,控制台报错 android 开发 speak failed:not bound to TTS engine详细问题 笔者核心代码: import android.os.Bundle; import android.speech.tts.TextToSpeech; import android.speech.tts.…

react native Gradle的原国外地址、本地下载、国内阿里腾讯镜像三种下载配置

一、国外地址:(初始项目默认) 下载地址:https://services.gradle.org/distributions/ 文件地址见下图: 注意:这个地址下载十次就有九次是连接超时,建议换另外两种方法 二、下载到本地&#x…

LLM:ALiBi - 给注意力加上线性偏置

论文:https://arxiv.org/pdf/2108.12409.pdf 代码:https://github.com/ofirpress/attention_with_linear_biases 发表:2021 长度外推 参考:https://spaces.ac.cn/archives/9431#ALIBI 长度外推性是一个训练和预测的长度不一致…

tomcat原理模拟和tomcat优化

1、tomcat实现原理 servlet 没有主方法main,依赖tomcat才能运行,因为tomcat 有主方法main,由java编写 servlet中doGet和doPost方法属于非静态方法,只能依托new对象存在,tomcat无法new出来对象,因此tomcat…

手机与电脑更改IP地址怎么使用代理IP?

在现代互联网时代,代理IP已成为许多人日常生活和工作中不可或缺的一部分。通过代理IP,用户可以隐藏自己的真实IP地址,并获得更好的网络体验。本文将详细介绍如何在手机和电脑上更改IP地址并使用代理IP。 一、手机使用代理IP 1. 打开手机设置&…

1.C语言——基础知识

C语言基础知识 1.第一个C语言程序2.注释3.标识符4.关键字5.数据类型6.变量7.常量8.运算符9.输入输出输入输出 1.第一个C语言程序 C语言的编程框架 #include <stdio.h> int main() {/* 我的第一个 C 程序 */printf("Hello, World! \n");return 0; }2.注释 单行…

MySQL面试题 | 18.精选MySQL面试题

&#x1f90d; 前端开发工程师&#xff08;主业&#xff09;、技术博主&#xff08;副业&#xff09;、已过CET6 &#x1f368; 阿珊和她的猫_CSDN个人主页 &#x1f560; 牛客高级专题作者、在牛客打造高质量专栏《前端面试必备》 &#x1f35a; 蓝桥云课签约作者、已在蓝桥云…

Vue3前端开发,如何获取组件内dom对象以及子组件的属性和方法

Vue3前端开发,借助Ref来获取组件内dom对象&#xff0c;借助defineExpose编译宏可以获取到子组件的属性和方法。 <script setup> import {onMounted, ref} from vue import Base from ./components/Base.vue import SetupDemo from ./components/SetupDemo.vue import Rea…

探索C++中std::string的弱点:你可能未曾注意到的缺点

C中std::string的弱点&#xff1a;你可能未曾注意到的缺点 一、背景二、性能方面的局限三、可变性带来的问题四、内存管理和指针操作五、Unicode和多字节字符集的支持六、其他替代方案七、总结 一、背景 C中std::string是一个非常重要的类&#xff0c;用于表示和处理字符串数据…

无偿分享一个很有用的看源码小技巧

怎么在 idea 里面查看 git 提交记录呢&#xff1f;这个界面是藏在哪里的呢&#xff0c;我的 idea 里面怎么没有呢&#xff1f; 好的&#xff0c;是我疏忽了&#xff0c;我先入为主的认为这个大家应该都知道是怎么来的。 但是确实是有一些同学是不太清楚的&#xff0c;那我这篇…

Java设计模式-单例模式(2)

大家好&#xff0c;我是馆长&#xff01;从今天开始馆长开始对java设计模式的创建型模式中的单例、原型、工厂方法、抽象工厂、建造者的单例模式进行讲解和说明。 单例模式&#xff08;Singleton&#xff09; 定义 某个类只能生成一个实例&#xff0c;该类提供了一个全局访问…

Docker技巧汇总

Docker技巧汇总 前言使用流程安装配置镜像管理创建并运行容器使用容器/常用命令导出和导入查看元数据挂载数据卷端口映射/转发VS Code连接Docker 前言 Docker 是一个开源的应用容器引擎&#xff0c;可以让开发者打包他们的应用以及依赖包到一个轻量级、可移植的容器中&#xf…

2024年第十五届机械与智能制造技术国际会议(ICMIMT 2024)

2024年第十五届机械与智能制造技术国际会议(ICMIMT 2024)2024年5月17-19日 南非 开普敦会议官网&#xff1a; 15TH IEEE-ICMIMT 2024http://www.mimt.us/ 近年来&#xff0c;机械和智能制造技术取得了重大进展。先进计算和传感技术的集成带来了更精确、更高效和自动化的制造过…

Pymol-电子密度图展示方法-PDB数据库已发表结构和自己晶体解析得到的结构密度图

简单来说&#xff0c;想要用PyMol展示电子密度图可以归为以下两种&#xff1a; 一是展示PDB数据库中已发表数据的结构和Map的方式 以6sps.pdb为例&#xff0c;在pymol中导入该数据密度图时&#xff0c;可以无需下载对应的密度文件&#xff0c;直接用fetch即可&#xff1a; Py…

Spring 事务管理 @Transactional

事务 Spring 的声明式事务是采用声明的方式来处理事务。这里所说的声明&#xff0c;就是指在配置文件中声明&#xff0c;用在 Spring 配置文件中声明式的处理事务来代替代码式的处理事务。 事务管理不侵入开发的组件。具体来说&#xff0c;业务逻辑对象就不会意识到正在事务管…

CentOS安装Flume

CentOS安装Flume 一、简介二、安装1、下载2、解压3、创建配置文件4、启动flume agent5、验证 一、简介 Flume is a distributed, reliable, and available service for efficiently collecting, aggregating, and moving large amounts of log data. It has a simple and flexi…

2024年南京等保测评机构名单看这里!

时光流逝&#xff0c;已经到了2024年。不少小伙伴在问&#xff0c;2024年南京等保测评机构有哪些&#xff1f;跟2023年一样吗&#xff1f;这里我们小编就给大家汇总了一下&#xff0c;具体地址以及名称看这里就可以啦&#xff01; 2024年南京等保测评机构名单看这里&#xff0…