CH573 CH582 CH579蓝牙从机(peripheral)例程讲解四(蓝牙动态广播)
动态广播有两种实现方式:
1.关闭广播,更改广播包数据,等待关闭上报状态后,开启广播。
uint8_t initial_advertising_enable = FALSE;
GAPRole_SetParameter(GAPROLE_ADVERT_ENABLED, sizeof(uint8_t), &initial_advertising_enable);//关闭广播
GAPRole_SetParameter(GAPROLE_SCAN_RSP_DATA, sizeof(scanRspData), scanRspData);//修改扫描应答包数据
GAPRole_SetParameter(GAPROLE_ADVERT_DATA, sizeof(advertData), advertData);//修改广播包数据
uint8_t initial_advertising_enable = TRUE;
GAPRole_SetParameter(GAPROLE_ADVERT_ENABLED, sizeof(uint8_t), &initial_advertising_enable);//开启广播
可以用tmos写个1s的定时任务,在任务中关闭广播,填写新数据,数据要符合广播包格式:
if(events & SBP_PERIODIC_EVT)
{
uint8_t initial_advertising_enable = FALSE;
uint16_t advInt = DEFAULT_ADVERTISING_INTERVAL;
GAP_SetParamValue(TGAP_DISC_ADV_INT_MIN, advInt);
GAP_SetParamValue(TGAP_DISC_ADV_INT_MAX, advInt);
GAPRole_SetParameter(GAPROLE_ADVERT_ENABLED, sizeof(uint8_t), &initial_advertising_enable);//关闭广播
advertData[2]=advertData[2]+1;
GAPRole_SetParameter(GAPROLE_SCAN_RSP_DATA, sizeof(scanRspData), scanRspData);//修改扫描应答包数据
GAPRole_SetParameter(GAPROLE_ADVERT_DATA, sizeof(advertData), advertData);//修改广播包数据
tmos_start_task(Peripheral_TaskID, SBP_PERIODIC_EVT, SBP_PERIODIC_EVT_PERIOD);
return (events ^ SBP_PERIODIC_EVT);
}
在等待广播处开启广播:
if(pEvent->gap.opcode == GAP_END_DISCOVERABLE_DONE_EVENT)
{
PRINT("Waiting for advertising..\n");
uint8_t initial_advertising_enable = TRUE;
GAPRole_SetParameter(GAPROLE_ADVERT_ENABLED, sizeof(uint8_t), &initial_advertising_enable);开启广播
}
PS:一定不要修改完数据就开启广播,需要在报等待广播后开启广播,使用方式一也可以修改广播间隔。
2.调用更新广播包函数进行更新。
extern bStatus_t GAP_UpdateAdvertisingData( uint8_t taskID, uint8_t adType, uint16_t dataLen, uint8_t *pAdvertData );
GAP_UpdateAdvertisingData( 0,TRUE ,sizeof( advertData ),advertData ); // 广播包
GAP_UpdateAdvertisingData( 0,FALSE ,sizeof( scanRspData ),scanRspData ); // 扫描应答包
写个周期性的任务调用就可以了:
if(events & SBP_PERIODIC_EVT)
{
advertData[2]=advertData[2]+1;
GAP_UpdateAdvertisingData( 0,TRUE ,sizeof( advertData ),advertData ); // 广播包
GAP_UpdateAdvertisingData( 0,FALSE ,sizeof( scanRspData ),scanRspData ); // 扫描应答包
tmos_start_task(Peripheral_TaskID, SBP_PERIODIC_EVT, SBP_PERIODIC_EVT_PERIOD);
return (events ^ SBP_PERIODIC_EVT);
}
CH573 CH582 CH579蓝牙从机(peripheral)例程讲解四(蓝牙动态广播)的更多相关文章
- CH58X/CH57X/V208的Broadcaster(广播者)例程讲解
在对ble进行应用的时候,每个用户的需求可能不尽相同.这里着重介绍从机Broadcaster例程,只广播不连接. 使用该例程时可以在手机使用APP上对Broadcaster进行调试. 安卓端在应用市场 ...
- Android5.0(Lollipop) BLE蓝牙4.0+浅析概念(四)
作者:Bgwan链接:https://zhuanlan.zhihu.com/p/23679793来源:知乎著作权归作者所有.商业转载请联系作者获得授权,非商业转载请注明出处. 置顶:此文转载CSDN博 ...
- 蓝牙核心技术概述(五):蓝牙协议规范(irOBEX、BNEP、AVDTP、AVCTP)
关键词:蓝牙核心技术协议 irDA BNEP AVDTP AVCTP 作者:xubin341719(欢迎转载,请注明作者,请尊重版权,谢谢! )欢迎指正错误,共同学习.共同进步!! 下载链接:Bl ...
- [蓝牙前沿应用] 照明即平台 —— 通过蓝牙增强服务提高照明投资回报率(蓝牙MESH、定位AoA、AoD)
1.照明即平台(LAAP) 随着照明设施向LED转型,他们也在利用类似于蓝牙MESH的技术,创建一个可连接的照明平台,作为他们建筑的中枢神经系统.这些系统除了提供先进的照明控制,还建立了一个增强版 ...
- 蓝牙 BLE 协议学习: 3种蓝牙架构实现方案(蓝牙协议栈方案)
导言 不同的蓝牙架构可以用在不同的场景中.从而协议帧的架构方案也会不同. 转载自:<三种蓝牙架构实现方案(蓝牙协议栈方案)> 蓝牙架构实现方案有哪几种?我们一般把整个蓝牙实现方案叫做蓝牙协 ...
- 【刷机】Google Nexus s 蓝牙点击异常,无法启动,刷机解决方案
1 问题详述 手头上有一部Google Nexus S ,本机自带的输入法不好用,想下载其他的输入法,想用蓝牙传输一下apk文件,点了一下蓝牙开关想要打开蓝牙功能,但奇怪的情况出现了,手机一直重启, ...
- 小米笔记本装MAC(黑苹果),外接USB蓝牙,禁止笔记本自带的蓝牙方法
https://blog.daliansky.net/ 解决插入耳机没有声音问题,每次开机需要重新插拔一次:https://github.com/daliansky/XiaoMi-Pro/blob/m ...
- 蓝牙版本V4.2特征讲解说明
2014年12月4日,最新的蓝牙4.2标准颁布,改善了数据传输速度和隐私保护程度,并接入了该设备将可直接通过IPv6和6LoWPAN接入互联网.在新的标准下蓝牙信号想要连接或者追踪用户设备必须经过用户 ...
- 低功耗蓝牙4.0BLE编程-nrf51822开发(11)-蓝牙串口代码分析
代码实例:点击打开链接 实现的功能是从uart口发送数据至另一个蓝牙串口,或是从蓝牙读取数据通过uart打印出数据. int main(void) { // Initialize leds_init( ...
- 说说M451例程讲解之LED
/**************************************************************************//** * @file main.c * @ve ...
随机推荐
- java技术系列(二) 反射
能够分析类能力的程序称为反射. 反射能力: 在运行中分析类的能力. 在运行中查看对象,例如:编写一个toString方法供所有类使用. 实现通用的数组操作代码. 利用Method对象.
- 嵌入式Qt中实现串口读取的事件驱动方法
在嵌入式Linux系统的UI设计中,比较常见的是使用Qt库来实现.而在Qt中进行程序设计时,也经常会用到串口(UART)通信.现在基于Qt5.1以上的版本中,集成有串口模块(如QSerialPort) ...
- 1255. 得分最高的单词集合 (Hard)
问题描述 1255. 得分最高的单词集合 (Hard) 你将会得到一份单词表 words,一个字母表 letters (可能会有重复字母),以及每个字母对应的得分情况表 score. 请你帮忙计算玩家 ...
- Color the ball HDU - 1556 _差分
N名同学拍成一排,编号为1,2,3,4 -- N.现在有一位老师需要检查所有同学的出勤情况,他会进行点名,每次给出两个数a,b,并且保证a小于等于b,这个区间内的所有同学都会被点名一次,老师会进行N次 ...
- (jmeter笔记)jmeter远程启用服务器(分布式)
1.在负载机上安装jmeter,修改jmeter\bin\jmeter.properties配置: 1)server.rmi.ssl.disable=false 改 server.rmi.ssl.di ...
- Java 一次操作多条数据
//新增 <insert id="insertSelectiveList" useGeneratedKeys="true" parameterType=& ...
- 【Java】时间类型
Date 转 timeStamp long time = System.currentTimeMillis(); // 秒级 long time = System.currentTimeMillis( ...
- 解决通配符的匹配很全面, 但无法找到元素 'aop:config' 的声明
这是因为在applicationContext.xml文件中没有添加对应的地址 http://www.springframework.org/schema/aop http://www.springf ...
- NOI1994 删数问题
[问题描述]键盘输入一个高精度的正整数n(≤240位),去掉其中任意s个数字后剩下的数字按原左右次序将组成一个新的正整数.编程对给定的n和s,寻找一种方案,使得剩下的数字组成的新数最小. 输入 两行第 ...
- 「SOL」NOI2017Day2 T1T2
就当我没做过这套题 而且 T3 也不会 Day2 A. 游戏 > Link 游戏 - LOJ 做过 2-sat 的读者应该能够一眼秒出这道题的正解 -- \(\mathcal O(2^d)\) ...