BLE 协议栈之GAP与GATT层小小一瞥

转载自:https://blog.csdn.net/xiaoleiacmer/article/details/41723707

Generic Access Profile (GAP)
GAP 一共有四种角色:
Broadcaster ,Observer,Peripheral ,Central

Connection Interval  (主从设备连接间隔)    最小7.5ms 最大4.0s

Slave Latency  (从设备延迟): 忽略主设备的应答 继续处于睡眠状态

Supervision Timeout (检测时间超时) : 最大可连接时间。

 有效连接时间:

Effective Connection Interval = (Connection Interval) * ( 1 + (Slave Latency) ) ;

从设备可以通过Connection Parameter Update Request去要求主设备改变连接的设置,同时对于主设备的应答采取接受或者拒绝。解决函数在L2CAP层中。

改变的连接设置包括四种: 

1 minimum connection interval 

2 maximum connection Interval 

3  slave latency  

4  timeout

GAP层还负责连接状态时主从设备的安全信息的初始化。 

GAP Central Role Profile 
   两个主要的设置函数:

GAPCentralRole_GetParameter 与 GAPCentralRole_SetParameter 

GAP central role profile 使用的是回调函数功能区通知事件的发生。使用GAPCentralRole_StartDevice进行初始化设置,且只能被声明一次。 

gapCentralRolesCBs_t : 结构体中包涵了两个函数指针,

       eventCB:当设备发现或者连接建立或者暂停事件发生的时候会调用此回调函数。

       rssiCB:回调当前的RSSI.

 在例程中 simpleBLECentralEventCB和 RSSI 回调函数是 simpleBLECentralRssiCB;

Generic Attribute Profile (GATT)
 两个角色:

    GATT Client  :在GATT服务端读/ 写数据

    GATT Server  :  数据被GATT 客户端读写

GATT层所提供的服务:
Mandatory GAP Service :包涵设备和接入信息(设备名,设备识别码等),以库的形式在协议栈中。

Mandatory GATT Service :(自我理解是本协议层的相关服务信息)以库的形式提供。

SimpleGATTProfile Service: 配置文件。( 在simpleGATTProfile.c 和simpleGATTProfile.h中). 

特征值(characteristic):是包涵任务属性和配置的类似接口的值。

特征值有以下属性:

     1 handle(句柄):服务属性的地址。

     2 Type:UUID;

     3 Permissions(许可):是否允许从设备得到特征信息。

   GATT提供的子服务(部分):
           Read Characteristic Value

           Read Using Characteristic UUID

           Read Multiple Characteristic Values

           Read Characteristic Descriptor

           Discover Characteristic by UUID 

           Write Characteristic Value 

           Write Characteristic Descriptor

           Characteristic Value Notification 

四个特殊的特征值:
GATT_PRIMARY_SERVICE_UUID:由服务端提供的特征值。自我理解是此项服务的ID

GATT_CHARACTER_UUID: 紧随特征值后面的声明值。自我理解是特征值在GATT层的另一种表达。

GATT_CLIENT_CHAR_CFG_UUID:允许GATT client使能通知功能的特征值。

GATT_CHAR_USER_DESC_UUID : 用ASCII 来表示的特征值。

GATT层API主要功能:
  1 从GATT层服务器注册或者撤销服务属性以及回调。

  2 加入或删除GATT服务。 

GAP层API  相关参数:

GAPROLE_PARAM_UPDATE_ENABLE        使能或失能自动连接功能。

GAPROLE_MIN_CONN_INTERVAL               最小连接时间间隔

GAPROLE_MAX_CONN_INTERVAL              最大连接时间间隔

GAPROLE_SLAVE_LATENCY                         从设备延时( 默认 0)

GAPROLE_TIMEOUT_MULTIPLIER              最大连接等待时间

GAPROLE_ADVERT_ENABLED                    使能或使能广播功能

GAPROLE_ADVERT_DATA                             改变其值可以限制发现的模式

GAPROLE_SCAN_RSP_DATA                      设备名称

GAPROLE_ADVERT_OFF_TIME                   未建立连接时,启动第二次连接的间隔

GAP层的API应该使用回调函数来通知应用程序发生了事件,并使用 GAPRole_StartDevice(外面没找到到,估计在库里)进行初始化设置。

gapRolesCBs_t:结构体有两个非常重要的内部指针:

   pfnStateChange :得到当前的链接状态

    pfnRssiRead: 得到当前的RSSI(信号强度)

 在例程中, peripheralStateNotificationCB是返回当前状态的回调函数,但是无法得到信号强度 ,因为指针被指向了NULL.

 同时,在 peripheral profile 中包涵了一个自动连接参数:

 GAPROLE_PARAM_UPDATE_ENABLE(在SimpleBLEPeripheral_Init中进行初始化) 

如果它的值是TRUE 则在连接的状态下从设备就可以向主设备发送连接参数,去更新当钱的连接状态。

Simple GATT Profile (是用来储存和处理与GATT 服务器的数据文件) 
SimpleProfile_AddService          初始化程序将属性加入到属性列表里。 在GATT serive中注册和读写回调函数

SimpleProfile_SetParameter     设置GATT层参数函数

SimpleProfile_GetParameter     得到GATT层参数函数

SimpleProfile_RegisterAppCBs 应用程序注册的一个回调函数  目的是在GATT client一个服务中可以写一个新值给特征值。

利用simpleProfileCBs_t结构体中的函数指针指向一个回调函数来实现此操作。

simpleProfile_ReadAttrCB 当GATT client 在profile中想读取属性值时,调用次函数。

simpleProfile_WriteAttrCB 当GATTclient  在profile中想写新的特征值时,调用此函数。

simpleProfile_HandleConnStatusCB  当连接状态发生变化时,回调函数将会受到此函数的信息,如果一个连接暂停,它会改变所有特征值配置值。通常这个函数用来查看特

征值配置,读写值,或者处理一个特征值的通知。

The simple GATT profile 中有5个特征值:

SIMPLEPROFILE_CHAR1:读写

SIMPLEPROFILE_CHAR2:读

SIMPLEPROFILE_CHAR3:写

SIMPLEPROFILE_CHAR4:给client一个通知

SIMPLEPROFILE_CHAR5:当连接时可以写5个字节的数据给client

为了能接收到GATT serive 发来的通知(notification),GATT client 必须打开通知功能

方法:GATT_CLIENT_CFG_NOTIFY写入0x0001  {每当设置新值使用SimpleProfile_SetParameter}

两个single-device 的project说明在TI CC254x Bluetooth Low Energy Software Developer’s Guide中有说明。
--------------------- 
作者:xiaoleiacm 
来源:CSDN 
原文:https://blog.csdn.net/xiaoleiacmer/article/details/41723707 
版权声明:本文为博主原创文章,转载请附上博文链接!

猜你喜欢

转载自blog.csdn.net/parasoft/article/details/83624511