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

发布时间:2024年01月20日

概要

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.

文章来源:https://blog.csdn.net/zjfengdou30/article/details/135702231
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。