(四)CarPlay集成开发之无线连接

上一篇写了CarPlay有线开发中的一些依赖,相比有线连接,无线连接的开发工作可能会比较简单一些, 主要的开发工作有如下内容

无线CarPlay连接开发

  • 蓝牙协议栈扩展UUID
    • 配件端蓝牙CarPlay EIR扩展
    • 配件端蓝牙iAP2 EIR扩展
    • 苹果设备端蓝牙EIR扩展
  • hostapd添加IE信息
    • 数据格式
  • 无线iAP2
    • 配置transport信息
    • 无线CarPlay相关Session ID
    • 数据传输通道

蓝牙协议栈扩展UUID

蓝牙协议栈扩展UUID的作用主要是让苹果手机端能够在设置应用的CarPlay设备列表中能够搜索到该车机,进而以进行CarPlay设备的方式进行通信; 以及车机端能够通过扫描蓝牙设备SDP中的128bit UUID来识别该设备支持CarPlay. 这里主要需要增加两个UUID,分别如下:

配件端蓝牙CarPlay EIR扩展

128-bit UUID0xEC884348CD4140A29727575D50BF1FD3

配件端蓝牙iAP2 EIR扩展

128-bit UUID0xFFCACADEAFDECADEDEFACADE00000000

苹果设备端蓝牙EIR扩展

128-bit UUID0x2D8D2466E14D451C88BC7301ABEA291A

android平台中,蓝牙协议栈路径在源码的system/bt目录下,蓝牙协议栈中需要改动的主要有两部分,一个是增加上述配件端的两个EIR,其中iAP2 EIR中的UUID需要同时定义在SDP跟EIR的包中,且iAP2的EIR中本地名称需要与iAP2协议中塞进0x1d00报文中的名称定义一致; 另外一个是需要扩展解析SDP中设备信息,并对扩展对128 bit的UUID的解析,原生协议栈是不支持的,需要自己新增。

hostapd添加IE信息

IE信息在14.5版本之后已经废弃了,但是为了兼容之前的老版本,这里还是介绍一下,主要是作用是在Beacon,Probe reponse, Association response, Re-Association response帧中扩展IE信息

数据格式

IE信息的全结构定义如下:
在这里插入图片描述
基本格式未element id + length + OUI + sub-type + elements, 其中的elements可以看成一个元素集合,集合中的每个element有自己的格式定义如下:
在这里插入图片描述
element ID定义如下表:

Element IDNameFormatDescription
0x00Flagsn:bitsFlags about the accessory: b0-b7, b8-b15, etc. See Table 3-11 (page47).Eachflagisabit.Bitnumberingstartsfromtheleftmost bitofthefirstbyteandusestheminimumnumberofbytesneeded toencodethebits. Forexample: Ifonlybit1isset,itwouldbe0x40. Ifbit1(0x40)andbit7(0x01)areset,itwouldbe0x41. Ifbit1(0x40),bit7(0x01),andbit10(0x0020)areset,itwouldbe 0x41,0x20. Ifonlybit10(0x0020),itwouldbe0x00,0x20.
0x01NameUTF-8Deprecated: Friendly name of the accessory.This should only be provided if the user configured a custom name or the firmware of the accessory has reason to believe it can provide a name that is better than the default name the client software will provide for it based on the model. Due to localization issues,it often better to only provide this element if the user has configured a name.
0x02ManufacturerUTF-8厂商
0x03ModelUTF-8型号
0x04OUI3 bytes0x00 0xA0 0x40
0x06BluetoothMAC6 bytes蓝牙地址
0x07Device ID6 bytes设备唯一ID
0xDDVendor-Specificn bytesvendor-specific IE element

flags又有三种有效的定义,分别是

  • 0x0020 支持无线carplay
  • 0x0002 支持2.4G网络
  • 0x0001 支持5G 网络

所以整个vendor-specific IE的格式为

[Element ID] 0xDD
[length]     0xXX
[OUI]        0x00,0xA0,0x40,
[Sub-Type]   0x00
[flags]      0x00,0x2,0x00,0x23 //支持无线CarPlay, 支持2.4G, 支持5G
[Name]       0X01, 0xXX, UTF-8 Bytes
...

android系统中,这部分的添加可以在hostapd的**hostapd_bss_config**这个结构体里面的vendor_elements中填充即可。

无线iAP2

无线中的iAP2链路的建立,物理层是通过蓝牙来进行的,手机与车机通过蓝牙建立握手与证书,热点信息的交换,然后手机连上车机热点建立CarPlay连接

配置transport信息

要告知手机端当前连接的车机支持CarPlay,需要在iAP2握手阶段在发送0x1d01报文到手机端时,配置BluetoothTransportComponent与WirelessCarPlayTransportCompoenent两个消息参数。参数组格式如下:
在这里插入图片描述在这里插入图片描述
通过0x1d01报文配置该参数组给到手机,手机端才会在鉴权完成后,发送无线AP信息请求的相关Session ID

无线CarPlay相关Session ID

//旧协议
0x5702 : 手机发送到车机,车机收到该报文后,需要回复0x5703报文给到手机
0x5703:车机发送给手机,主要是把车机的AP信息发给手机,让手机来连热点

//新协议
0x4300 : 手机发送到车机,告知车机CarPlay会话是否可用
0x4301:车机发送给手机,告知车机的AP信息,MAC地址等,建立CarPlay连接

数据传输通道

无线的iAP2鉴权的物理传输通道主要是通过蓝牙的Rfcomm协议来完成,车机端监听UUID为0xfecacadeafdecadedefacade00000000, Android系统的BluetoothAdapter类提供了如下函数来实现监听

  public BluetoothServerSocket listenUsingRfcommWithServiceRecord(String name, UUID uuid) throws IOException {
        throw new RuntimeException("Stub!");
    }

建立连接后,可以通过BluetoothServerSocket获取数据的IO流来进行数据的收发

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

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

相关文章

Http基础之http协议、无状态协议、状态码、http报文、跨域-cors

Http基础 HTTP基础HTTP协议请求方法持久连接管线化 无状态协议使用Cookie状态管理 状态码1XX2XX OK200 OK204 NO Content206 Content-Range 3XX 重定向301302304307 4XX400401403404 5XX500503 HTTP报文请求报文响应报文通用首部字段Cache-ControlConnectionDate请求首部字段Ac…

【SpringBoot】测试单元使用多线程

📝个人主页:五敷有你 🔥系列专栏:SpringBoot ⛺️稳重求进,晒太阳 问题产生 今天学习了乐观锁,但在测试单元执行多线程的时候出现了问题,多线程并没有直接结果 在控制台没有任何输出…

Leetcode560. 和为 K 的子数组 -hot100

题目&#xff1a; 代码(首刷看解析 2024年3月2日&#xff09;&#xff1a; class Solution { public:int subarraySum(vector<int>& nums, int k) {// 前缀和 遍历int res 0;unordered_map<int, int> sumPre;int sum 0;// 关键&#xff1a;初始化sumPre[0]…

MyBatis 学习(七)之 缓存

目录 1 MyBatis 缓存介绍 2 一级缓存 3 二级缓存 3.1 二级缓存介绍 3.2 二级缓存配置 3.3 二级缓存测试 4 参考文档 1 MyBatis 缓存介绍 MyBatis 缓存是 MyBatis 中的一个重要特性&#xff0c;用于提高数据库查询的性能。MyBatis 提供了一级缓存和二级缓存两种类型的缓存…

计算机毕业设计分享-SSM课程题库管理系统 18655(赠送源码数据库)JAVA、PHP,node.js,C++、python,大屏数据可视化等

毕业设计&#xff08;论文&#xff09; SSM课程题库管理系统 学 院 专 业 班 级 学 号 学生姓名 指导教师 完成日期…

【.Net 使用阿里云OSS 存储文件】

一、使用NuGet安装【Aliyun.OSS.SDK】 注意&#xff1a;如果有多个项目&#xff0c;需要在具体使用的项目跟启动项目都安装同一版本的Aliyun.OSS.SDK 二、上传代码 using Aliyun.OSS; using System.IO; using System; using CadApplication.Service.Dto; using System.Net; us…

QT绘图

QPainter paintEvent是Qt中一个非常重要的函数&#xff0c;它是QWidget类的一个事件处理函数&#xff0c;用于处理小部件的绘制事件。当Qt认为小部件需要重绘时&#xff08;例如&#xff0c;窗口首次出现时&#xff0c;大小改变时&#xff0c;或者调用了小部件的update()方法时…

【硬件相关】IB网/以太网基础介绍及部署实践

文章目录 一、前言1、Infiniband网络1.1、网络类型1.2、网络拓扑1.3、硬件设备1.3.1、网卡1.3.2、连接线缆a、光模块b、线缆 1.3.4、交换机 2、Ethernet网络 二、部署实践&#xff08;以太网&#xff09;1、Intel E810-XXVDA21.1、网卡信息1.2、检查命令1.2、驱动编译 2、Mella…

SQLPro Studio:数据库管理的革命性工具 mac版

SQLPro Studio是一款强大的数据库管理和开发工具&#xff0c;它旨在提供高效、便捷和安全的数据库操作体验。无论是数据库管理员、开发人员还是数据分析师&#xff0c;SQLPro Studio都能满足他们在数据库管理、查询、设计和维护方面的需求。 SQLPro Studio mac版软件获取 首先…

低密度奇偶校验码LDPC(八)——QC-LDPC译码器FPGA设计概要

往期博文 低密度奇偶校验码LDPC&#xff08;一&#xff09;——概述_什么是gallager构造-CSDN博客 低密度奇偶校验码LDPC&#xff08;二&#xff09;——LDPC编码方法-CSDN博客 低密度奇偶校验码LDPC&#xff08;三&#xff09;——QC-LDPC码概述-CSDN博客 低密度奇偶校验码…

Python环境搭建:一站式指南

在当前AIGC技术蓬勃发展的背景下&#xff0c;Python作为人工智能领域最受青睐的编程语言之一&#xff0c;成为我们必须掌握的技能。因此&#xff0c;搭建一个适合自己的Python环境成为了每个Python开发者的首要任务。本文将为您提供一站式的Python环境搭建指南&#xff0c;帮助…

JVM(5)

垃圾回收相关 垃圾收集器 警告:纯八股文! 如果说上面我们讲的收集算法是内存回收的方法论,那么垃圾收集器就是内存回收的具体体现. 垃圾收集器的作用:垃圾收集器是为了保证程序能够正常,持久运行的一种技术,它是将程序中不用的死亡对象也就是垃圾对象进行清除,从而保证新的…

Godot自定义控件样式语法解析

前言 本篇原始文章写于2023年8月7日&#xff0c;存储在我的语雀文档中。但是语雀分享有诸多不便&#xff0c;为了让更多Godoter更轻松的搜到和看到&#xff0c;就转过来了。 这个项目我上传了Github&#xff0c;后续会贴上链接。 概述 Godot控件体系存在的问题之一就是样式无…

链表OJ刷题(二)

制作不易&#xff0c;三连支持一下呗&#xff01;&#xff01;&#xff01; 文章目录 前言一、链表的回文结构二、相交链表三、链表中倒数第k个节点四、环形链表Ⅰ和Ⅱ总结 前言 一、链表的回文结构 链表的回文结构_牛客题霸_牛客网 这里我们需要先了解一下什么叫做回文&#…

Rocky Linux 运维工具 dnf

一、dnf的简介 dnf​是用于在基于RPM包管理系统的包管理工具。用户可以通过 ​yum​来搜索、安装、更新和删除软件包&#xff0c;自动处理依赖关系&#xff0c;它是yum的继任者&#xff0c;旨在提供更快速、更现代化的软件包管理体验。。 二、dnf 的参数说明 序号参数描述1in…

django项目 法律法规管理系统

1.项目结构 2.项目需求 1.用户管理模块 2.数据采集模块 3.知识管理模块 4.智能匹配模块 5.个人收藏模块 6.数据分析模块 7.页面展示模块 3.知识点 1.智能匹配模块推荐算法的实现原理 TF (Term Frequency)&#xff1a;词频&#xff0c;表示一个词在文档中出现的频…

LeetCode --- 长度最小的子数组(滑动窗口)

前言 滑动窗口算法是一种用于解决数组或者列表中子数组或者字串问题的方法&#xff0c;通常用于在给定数据上执行连续区间的操作&#xff0c;算法基本思想是维护一个固定大小或不定大小的窗口&#xff0c;通过移动窗口的起始位置和结束位置来遍历整个数据。在每个窗口位置&…

重拾前端基础知识:JavaScript

重拾前端基础知识&#xff1a;JavaScript 前言使用JavaScript输出语法运算符条件语句循环数据类型字符串数字数组对象日期函数 数学正则表达式异常处理类集合模块JSON闭包异步调试DOM&#xff08;文档对象模型&#xff09;事件事件监听器表单 BOM&#xff08;浏览器对象模型&am…

【Linux杂货铺】调试工具gdb的使用

目录 &#x1f308;前言&#x1f308; &#x1f4c1;背景介绍 &#x1f4c1; 使用 list [行号] / [函数名] run/r break/b [行号] / [函数名] info break disable break enable break delete break [断点编号] next/n step/s continue/c finish print/p [变量…

旧的Spring Security OAuth已停止维护,全面拥抱新解决方案Spring SAS

Spring Authorization Server 替换 Shiro 指引 背景 Spring 团队正式宣布 Spring Security OAuth 停止维护&#xff0c;该项目将不会再进行任何的迭代 目前 Spring 生态中的 OAuth2 授权服务器是 Spring Authorization Server 已经可以正式生产使用作为 SpringBoot 3.0 的最新…