这里会显示出您选择的修订版和当前版本之间的差别。
两侧同时换到之前的修订记录 前一修订版 后一修订版 | 前一修订版 | ||
cc2640r2f:gap_role_task [2017/09/01 21:41] long |
cc2640r2f:gap_role_task [2019/08/29 19:56] jaylee ↷ 页面cc2640r2f:ble_stack_app:stack:gap_role_task:gap_role_task被移动至cc2640r2f:gap_role_task |
||
---|---|---|---|
行 1: | 行 1: | ||
< | < | ||
+ | |||
# GAPRole 任务 # | # GAPRole 任务 # | ||
- | GAP层始终处于下面4种角色之一运行: | + | |
+ | GAP 层始终处于下面4种角色之一运行: | ||
- Broadcaster(广播者):设备发送不可连接的广播。 | - Broadcaster(广播者):设备发送不可连接的广播。 | ||
- Observer(观察者):设备扫描广播但无法启动连接。 | - Observer(观察者):设备扫描广播但无法启动连接。 | ||
- | - Peripheral(外围设备):该设备是可连接的广播,并在单一链路层连接中作为从设备运行。 | + | - Peripheral(外围设备):设备是可连接的广播,并在单一链路层连接中作为从设备运行。 |
- Central(中央设备):设备扫描广告并启动连接,并在单个或多个链路层连接中作为主服务器运行。蓝牙低功耗中央协议栈支持多达三个并发连接。 | - Central(中央设备):设备扫描广告并启动连接,并在单个或多个链路层连接中作为主服务器运行。蓝牙低功耗中央协议栈支持多达三个并发连接。 | ||
- | 蓝牙核心规范5.0版允许多角色,这是由蓝牙低功耗协议栈所支持的某些组合。也就是说一个设备可以同时作为中央和外围设备,这其实就是蓝牙组网的基础。 | + | 蓝牙核心规范 5.0 版允许多角色,这是由蓝牙低功耗协议栈所支持的某些组合。也就是说一个设备可以同时作为中央和外围设备,这其实就是蓝牙组网的基础。 |
+ | |||
+ | 注意:一般 Broadcaster 和 Observer 作为一组设备使用,Peripheral 和 Central 作为一组设备使用。比如一个温度计,它作为 Broadcaster 每隔 1s 发送一次温度值,然后一个显示器作为 Observer 不断的接收广播,只显示温度值不进行连接操作。再比如 Peripheral 作为一个计步器,手机作为一个 Central ,他们之间需要建立连接之后再进行数据传输。 | ||
+ | |||
+ | 下面以 Peripheral Role 和 Central Role 来进行说明 | ||
+ | |||
+ | ## Peripheral Role ## | ||
+ | |||
+ | 外设 GAPRole 任务在 peripheral.c 和 peripheral.h 中定义。有关完整的 API 外设角色 API ,请参阅 BLE Stack API 包括命令、可配置参数、事件和回调。 | ||
- | 注意:一般Broadcaster和Observer作为一组设备使用,Peripheral和Central作为一组设备使用。比如一个温度计,它作为broadcaster每隔1S 发送一次温度值,然后一个显示器作为observer不断的接收广播并显示,但是不连接,只显示温度值。或者peripheral作为一个计步器,手机作为一个central,他们之间需要建立连接之后再进行数据传输。 | + | 使用此模块的步骤如下: |
- | 下面我们以peripheral Role和central Role来进行说明 | + | 1. 初始化 |
- | ## peripheral Role ## | + | |
- | 外设GAPRole任务在peripheral.c和peripheral.h中定义。有关完整的API外设角色API,请参阅BLE Stack API参考,包括命令,可配置参数,事件和回调。使用此模块的步骤如下: | + | |
- | 1. 初始化GAPRole参数,这部分代码在simple_peripheral.c的SimpleBLEPeripheral_init中能够找到。 | ||
````C | ````C | ||
// Setup the GAP Peripheral Role Profile | // Setup the GAP Peripheral Role Profile | ||
行 45: | 行 52: | ||
} | } | ||
```` | ```` | ||
- | 上述代码使能了广播,设置了广播关闭时间,这里advertOffTime是0,就是一直进行广播。设置广播响应数据,设置广播数据,设置参数更新请求,设置广播连接间隔,设置广播从机延迟,设置连接超时。 | ||
- | 2. 初始化GAPRole任务并将应用程序回调函数传递给GAPRole。这也应该在simple_peripheral.c的SimpleBLEPeripheral_init中能够找到。其目的是当设备状态改变的时候进行响应,设备一旦改变都会通过这个回调函数改变event。然后SimpleBLEPeripheral_taskFxn里面一直在检测event事件的状态,发现状态改变则进行一些任务处理。 | + | 上述代码对广播使能,设置了广播关闭时间,advertOffTime = 0 表示一直进行广播。上述代码还设置了广播响应数据、广播数据、参数更新请求、广播连接间隔、广播从机延迟、连接超时。 |
+ | |||
+ | 2. 初始化 GAPRole 任务并将应用程序回调函数传递给 GAPRole | ||
````C | ````C | ||
`VOID | `VOID | ||
```` | ```` | ||
- | 3. 回调函数注册并初始化之后我们就能在应用程序接收GAPRole命令了,下面是使用GAPRole_terminateConnection()的程序上下文示意图。 | + | |
+ | 3. 回调函数注册并初始化之后就能在应用程序接收 GAPRole 命令了,图 1 是 GAPRole_terminateConnection() 的程序上下文示意图。 | ||
![](http:// | ![](http:// | ||
- | 上图中可以看出应用程序直接调用GAPRole层API GAPRole_TerminateConnection(),GAPRole负责和协议栈通讯,然后接收到协议栈返回的状态之后又通过回调函数发送给应用程序,应用程序接收到状态之后再进行自己的逻辑处理。 | + | 图1. GAPRole_terminateConnection()上下文示意图 |
+ | |||
+ | 图 1 可以看出应用程序直接调用 GAPRole 层 API GAPRole_TerminateConnection(),GAPRole 负责和协议栈通讯,然后接收到协议栈返回的状态,之后又通过回调函数发送给应用程序,应用程序接收到状态之后再进行自己的逻辑处理。 | ||
注意:返回值仅指示终止连接的尝试是否成功启动。连接终止实际是异步返回,并通过上面注册的回调传递给应用程序。 | 注意:返回值仅指示终止连接的尝试是否成功启动。连接终止实际是异步返回,并通过上面注册的回调传递给应用程序。 | ||
- | 4. GAPRole任务处理从协议栈传递给它的大多数GAP相关事件。GAPRole任务还将一些事件转发到应用程序(例如上面的GAPROLE_WAITING)。当链接终止时,GAPRole会自动重新启动广播。以下代码片段可以在peripheral.c中找到 | + | 4. GAPRole 任务处理从协议栈传递给它的大多数 GAP 相关事件。GAPRole 任务还将一些事件转发到应用程序(例如上面的 GAPROLE_WAITING )。当链接终止时,GAPRole 会自动重新启动广播。 |
+ | |||
+ | 以下代码片段可以在 peripheral.c 中找到 | ||
````C | ````C | ||
case GAP_LINK_TERMINATED_EVENT: | case GAP_LINK_TERMINATED_EVENT: | ||
行 90: | 行 106: | ||
break; | break; | ||
```` | ```` | ||
- | ## central Role ## | ||
- | GAPRole中心任务在central.c和central.h中定义。有关完整的中央角色API,请参阅BLE Stack API参考,包括命令,可配置参数,事件和回调。有关实现中央GAPRole的示例,请参阅simple_central示例项目。使用此模块的步骤如下。 | ||
- | 1. 初始化GAPRole参数。这种初始化应该在应用程序初始化函数中出现(例如in SimpleBLECentral_init)。也可以在此初始化功能中设置GAP参数。 | + | ## Central Role ## |
+ | |||
+ | GAPRole 中心任务在 central.c 和 central.h 中定义。有关完整的中央角色 API ,请参阅 BLE Stack API 参考,包括命令、可配置参数、事件和回调。有关实现中央 GAPRole 的示例,请参阅 simple_central 示例项目。 | ||
+ | |||
+ | 使用此模块的步骤如下: | ||
+ | |||
+ | 1. 初始化 GAPRole 参数。初始化可以在应用程序初始化函数中出现(例如 in SimpleBLECentral_init ),也可以在此初始化功能中设置 GAP 参数。 | ||
````C | ````C | ||
// Setup Central Profile | // Setup Central Profile | ||
行 103: | 行 124: | ||
} | } | ||
```` | ```` | ||
- | 相比较peripheral Role,central Role的参数设置就很少了,只需要设置最大扫描响应数量。在程序中设置的8,也就是最多能接收8个外围设备的广播响应。 | ||
- | 2. 启动GAPRole任务。这涉及将应用程序回调函数的函数指针传递给Central GAPRole。这也应该在应用程序初始化函数中出现。和peripheral | + | 与 Peripheral Role 相比,Central Role 的参数设置就很少了,只需要设置最大扫描响应数量。在程序中设置的 8 ,即最多能接收 8 个外围设备的广播响应。 |
+ | |||
+ | 2. 启动 GAPRole 任务。这涉及将应用程序回调函数的函数指针传递给 Central GAPRole | ||
````C | ````C | ||
`VOID | `VOID | ||
```` | ```` | ||
- | 3. 从应用程序发送GAPRole命令。下图是使用GAPCentralRole_StartDiscovery()的应用程序上下文。 | + | |
+ | 3. 从应用程序发送 GAPRole 命令。图 | ||
![](http:// | ![](http:// | ||
- | 上图中可以看出应用程序直接调用GAPRole层API CAPCrentralRole_StartDiscovery(), | + | 图2. GAPCentralRole_StartDiscovery()上下文示意图 |
- | 注意:返回值仅指示是否启动了设备发现的尝试。发现的实际设备以GAP_DEVICE_INFO_EVENT异步方式返回,并通过上面注册的回调传递给应用程序。 | + | |
- | 请注意,在扫描期间,如蓝牙核心规范版本5.0所定义,单个广播/ | + | 图 2 中应用程序直接调用 GAPRole 层 API CAPCrentralRole_StartDiscovery()。GAPRole 负责和协议栈通讯,然后接收到协议栈返回的状态,之后又通过回调函数发送给应用程序,应用程序接收到状态之后再进行自己的逻辑处理。 |
- | 可以使用GAPCENTRALROLE_MAX_SCAN_RES参数设置在一次扫描期间可以发现的最大扫描响应量。如果在充斥着广播的环境中,这可能会对堆的使用产生重大影响,从而潜在地破坏堆栈。因此,对于在扫描期间发现最大扫描响应量的情况,必须对应用程序进行配置。 | + | 注意:返回值仅指示是否启动了设备发现的尝试。实际设备以 GAP_DEVICE_INFO_EVENT 异步方式返回,并通过上面注册的回调传递给应用程序。 |
- | 在最坏的情况下,在扫描期间发现最大数量的广告/ | + | 请注意,在扫描期间,如蓝牙核心规范版本 5.0 所定义,单个广播/ |
+ | |||
+ | 可以使用 GAPCENTRALROLE_MAX_SCAN_RES 参数设置在一次扫描期间的最大扫描响应量。如果在充斥着广播的环境中,可能会对堆的使用产生重大影响,从而潜在地破坏堆栈。因此,在扫描期间发现最大扫描响应量的情况,必须对应用程序进行配置。最坏情况下,扫描期间发现最大数量的广告/ | ||
+ | |||
+ | 例如,如果 GAPCENTRALROLE_MAX_SCAN_RES 设置为 10,则必须至少有 878 字节可用于从堆分配,包括一个完全填充的 GAP_DEVICE_DISCOVERY_EVENT 。如果分配失败,会尝试分配错误状态的 GAP_DEVICE_DISCOVERY_EVENT 。因此,为了使系统在上述情况下保持运行,堆必须具有至少分配(8 + 79 * n个字节)的空间。 | ||
## 加入我们 ## | ## 加入我们 ## | ||
+ | |||
文章所有代码、工具、文档开源。加入我们[**QQ群 591679055**](http:// | 文章所有代码、工具、文档开源。加入我们[**QQ群 591679055**](http:// | ||
<div> | <div> | ||
行 131: | 行 159: | ||
</ | </ | ||
</ | </ | ||
- |