- BlueZ 5.49及其运行需要的组建
- 百度语音识别及其运行需要的依赖库
-
Controller的驱动
BLE VS Wifi VS ZigBee
BLE属于Personal network, 工作距离近, 一般在10m内。
BLE协议架构
Core Specification 与 application Specification
协议架构主要是指从蓝牙协议层次结构。对应的文档位于SIG Core Spce中, 大家可以到SIG下载。
https://www.bluetooth.com/specifications/bluetooth-core-specification :
对于应用层的GATT Profile, 这个位于application Specification中:
https://www.bluetooth.com/specifications/gatt
Layers
下面这个图片是BLE stack的Layers:
PHY层
在最底层的是PHY, 这个layer属于射频硬件相关, 在2.4G频段分成了40个channel:
频点分别是‘f=2402+k*2 MHz, k=0, … ,39’,带宽为2MHz”的40个RF Channel。
其中有三个ADV channel,剩下的37个为数据channel。
之外,还有:
RF发射相关的特性(Transmitter Characteristics),包括发射功率(Transmission power、调制方式(Modulation),高斯频移键控(Gaussian Frequency Shift Keying ,GFSK)、Spurious Emissions、Radio Frequency Tolerance等等。RF接收相关的特性(Receiver Characteristics),包括接收灵敏度等。 其中RSSI与此相关。
Link Layer
有了PHY层后就有了物理的连接通道,接下来就需要有层来收发数据了,以及控制RF功能,物理层的复用,重传。
Link Layer中的数据的传送有两种: ADV 与 Connection。
对于多对一,且数据量小的,使用ADV, 对于要求时严格,且数据量大的用Connection。
因为涉及到两种方式, 因此这里又有多种状态:
• Standby State
• Advertising State
• Scanning State
• Initiating State
• Connection State具体这些位于:
HCI
接下来是HCI层, 我们的BlueZ userspace的是位于HCI之上。
L2CAP
这一层主要完成Protocol/channel multiplexing, 可以简单的认为就是将物理多个通道,划分为多个逻辑通道。为不同的层specify不同的通道。这个叫做Channel ID,即CID:
ATT layer
前面的L2CAP相当于联通并指定了对应的通道, 如同有两个网线连接了, 并且create了socket用于谁, 接下来就需要端口号了。 这个端口号可以类似与ATT。
ATT根据数据的提供与获取分为了server与client。 同时还有对属性与数据的权限管理支持。例如某些数据只能读不能写。
GATT Layer
GATT可以理解为对ATT进行了特定的规定,从而为Application的Profile制定一个framework。
下面是一个Profile的层次结构:
从Profile到service, 然后是Charactristic, Char又由value/Proprity/Descriptor组成。
我们一般都是在这个层次进行编程处理。
遥控器上面的Service
我们连接后可以看到所有被找到的primary service:
可以看到共有七个Priamry service, 其中有个HID, 有一个GAP,Battary。
而语音部分是位于Vendor Primary Service中。