蓝牙设备节点协议栈基础知识

一:TTY(虚拟控制台,串口以及伪终端设备组成的终端设备)
Android/Linux 几乎所有的外设都以”设备节点”的形式存在
例如PC插入串口,会识别成COM1/COM2…在linux下面则以/dev/ttyXXX的形式存在,如/dev/ttyS1
同时,协议栈还可以生成虚拟串口,例如/dev/bw_serial, 操作方式同物理串口/dev/ttyS1一样
在飞易通AT指令版本协议栈中,实际的通讯流程如下,以BT825B为例:

BT825B <–物理节点/dev/ttyS1–> 协议栈blueware <– 虚拟节点/dev/bw_serial –> 客户蓝牙应用

当客户需要拨打电话10086时:

客户蓝牙应用=>发送AT+HFPDIAL=10086\r\n 至 /dev/bw_serial
blueware监听/dev/bw_serial,收到拨号请求
将拨号请求通过HFP协议解析成指定格式HCI数据
将HCI数据通过 /dev/ttyS1 发送至BT825B
注意:
1:虚拟串口的名字可以自定义,如别的蓝牙厂商名字为/dev/goc_serial
2:连接模块的物理串口(如/dev/ttyS1),需要和客户确认,并添加到协议栈的配置文件中

二:GPIO(通用输入输出端口的简称)
协议栈对GPIO的操作一般只会用到BT使能脚(BT_EN)
GPIO的也是以”节点”的形式存在于系统中
例gpio123的路径一般为: /sys/class/gpio/gpio123/value
同物理串口一样,需要和客户确认该gpio并添加到协议栈的配置文件中
注意:
1:特殊的,蓝牙一般用节点rfkill来控制BT_EN,路径为/sys/class/rfkill/rfkill0/state
2:若使用rfkill,需要客户在驱动层,将对该节点的控制映射层对实际GPIO的控制
3:部分客户该节点的路径为非标准路径,如:/sys/bus/platform/drivers/mtc-car/bt_power

三:SOCKET(用来描述IP地址和端口,Socket是支持TCP/IP协议的网络通信的基本操作单元,是对网络通信过程中端点的抽象表示,包含了进行网络通信所必须的五种信息:连接所使用的协议;本地主机的IP地址;本地远程的协议端口;远地主机的IP地址以及远地进程的协议端口)

当出现协议栈和上层应用“大量数据交互”的场景时,一般可以考虑使用socket通讯

socket通讯机制类似于tty,区别是socket有client和server之分

server:负责创建socket节点(如/dev/socket/bw_gatt),并开启监听(listen)

client:连接已经存在的节点,连接成功后则可以互相通讯

协议栈接可以作为socket server,也可以作为client

例:

蓝牙上层应用作为client

协议栈blueware为server

Android studio虚拟机上的蓝牙怎么连接 安卓虚拟机蓝牙_协议栈


总结:这些只是协议栈的很小一部分设置逻辑,想了解更多,可以下面留言,一起学习!