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层还负责连接状态时主从设备的安全信息的初始化。
两个主要的设置函数:
GAPCentralRole_GetParameter 与 GAPCentralRole_SetParameter
GAP central role profile 使用的是回调函数功能区通知事件的发生。使用GAPCentralRole_StartDevice进行初始化设置,且只能被声明一次。
gapCentralRolesCBs_t : 结构体中包涵了两个函数指针,
eventCB:当设备发现或者连接建立或者暂停事件发生的时候会调用此回调函数。
rssiCB:回调当前的RSSI.
在例程中 simpleBLECentralEventCB和 RSSI 回调函数是 simpleBLECentralRssiCB;
两个角色:
GATT Client :在GATT服务端读/ 写数据
GATT Server : 数据被GATT 客户端读写
Mandatory GAP Service :包涵设备和接入信息(设备名,设备识别码等),以库的形式在协议栈中。
Mandatory GATT Service :(自我理解是本协议层的相关服务信息)以库的形式提供。
SimpleGATTProfile Service: 配置文件。( 在simpleGATTProfile.c 和simpleGATTProfile.h中).
特征值(characteristic):是包涵任务属性和配置的类似接口的值。
特征值有以下属性:
1 handle(句柄):服务属性的地址。
2 Type:UUID;
3 Permissions(许可):是否允许从设备得到特征信息。
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 来表示的特征值。
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 则在连接的状态下从设备就可以向主设备发送连接参数,去更新当钱的连接状态。
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中有说明。