NRF51822之动态广播使用
本教程基于nRF51_SDK_10.0.0_dc26b5e\examples\ble_peripheral\ble_app_uart工程
本教程主要是演示
现在演示通过nus来修改ADV中maufacturer data,在disconnect后我们可以看到广播中maufacturer data更新为我们在nus中配置的
在工程增加新代码
#define APP_COMPANY_IDENTIFIER 0x0059 /**< Company identifier for Nordic Semiconductor ASA. as per www.bluetooth.org. */
#define DEFAULT_ADVDATA "libra"
#define ADVDATA_BUFFER_SIZE 24
// advertisement data string
static uint8_t advert_str[ADVDATA_BUFFER_SIZE] = DEFAULT_ADVDATA;
;
static volatile bool update_request = false;
// configure advertisements
void adverts_init(void)
{
uint32_t err_code;
ble_advdata_t advdata;
ble_advdata_t scanrsp;
ble_advdata_manuf_data_t manuf_data;
memset(&advdata, , sizeof(advdata));
memset(&scanrsp, , sizeof(scanrsp));
manuf_data.company_identifier = APP_COMPANY_IDENTIFIER;
manuf_data.data.p_data = advert_str;
manuf_data.data.size = adv_str_len;
advdata.name_type = BLE_ADVDATA_FULL_NAME;
advdata.include_appearance = false;
advdata.flags = BLE_GAP_ADV_FLAGS_LE_ONLY_LIMITED_DISC_MODE;
advdata.p_manuf_specific_data = &manuf_data;
err_code = ble_advdata_set(&advdata,NULL);
APP_ERROR_CHECK(err_code);
}
// start advertising
void adverts_start(void)
{
uint32_t err_code;
ble_gap_adv_params_t adv_params;
memset(&adv_params, , sizeof(adv_params));
//设置广播信道是否开启
adv_params.channel_mask.ch_37_off = ;
adv_params.channel_mask.ch_38_off = ;
adv_params.channel_mask.ch_39_off = ;
adv_params.type = BLE_GAP_ADV_TYPE_ADV_IND;
adv_params.p_peer_addr = NULL;
adv_params.fp = BLE_GAP_ADV_FP_ANY;
adv_params.interval = APP_ADV_INTERVAL;
adv_params.timeout = APP_ADV_TIMEOUT_IN_SECONDS;
adv_params.p_whitelist = NULL;
err_code = sd_ble_gap_adv_start(&adv_params);
APP_ERROR_CHECK(err_code);
}
// check connection state
bool is_connected(void)
{
return (m_conn_handle != BLE_CONN_HANDLE_INVALID);
}
// update advertised data
void adverts_update(uint8_t * adv_str, uint16_t len)
{
if (len > ADVDATA_BUFFER_SIZE) len = ADVDATA_BUFFER_SIZE;
memcpy(advert_str, adv_str, len);
adv_str_len = len;
update_request = true;
}
void adverts_update_check(void)
{
if((update_request)&&(!is_connected()))
{
update_request = false;
sd_ble_gap_adv_stop();
adverts_init();
adverts_start();
}
}
修改工程原来的代码
static void nus_data_handler(ble_nus_t * p_nus, uint8_t * p_data, uint16_t length)
{
; i < length; i++)
{
while(app_uart_put(p_data[i]) != NRF_SUCCESS);
}
while(app_uart_put('\n') != NRF_SUCCESS);
////////////////////////////////////////////////////////////////////////
adverts_update(p_data,length);
////////////////////////////////////////////////////////////////////////
}
static void on_ble_evt(ble_evt_t * p_ble_evt)
{
...
case BLE_GAP_EVT_DISCONNECTED:
err_code = bsp_indication_set(BSP_INDICATE_IDLE);
APP_ERROR_CHECK(err_code);
m_conn_handle = BLE_CONN_HANDLE_INVALID;
//////////////////////////////////////////////////////////////
adverts_update_check();
/////////////////////////////////////////////////////////////////
break;
...
}
/**@brief Application main function.
*/
int main(void)
{
uint32_t err_code;
bool erase_bonds;
uint8_t start_string[] = START_STRING;
// Initialize.
APP_TIMER_INIT(APP_TIMER_PRESCALER, APP_TIMER_MAX_TIMERS, APP_TIMER_OP_QUEUE_SIZE, false);
uart_init();
buttons_leds_init(&erase_bonds);
ble_stack_init();
gap_params_init();
services_init();
// advertising_init();
adverts_init();
conn_params_init();
printf("%s",start_string);
// err_code = ble_advertising_start(BLE_ADV_MODE_FAST);
// APP_ERROR_CHECK(err_code);
adverts_start();
// Enter main loop.
for (;;)
{
power_manage();
}
}
NRF51822之动态广播使用的更多相关文章
- Android-broadcast静态动态广播
广播的静态和动态类型 静态广播: 1.继承之broadcastreceiver public class MyStaticBroadcastReceiver extends BroadcastRece ...
- Android 静态广播和动态广播接收顺序
Android广播有两个很重要的要素: 1 广播 - 用于发送广播 有序广播 - 被广播接收器接收后,可被终止,无法往下继续传达. 典型代表:短信广播 普通广播 - 发送至每一 ...
- Android笔记(二十七) Android中的动态广播和静态广播
广播接收器注册一共有两种形式 : 静态注册和动态注册. 两者及其接收广播的区别: 1.动态注册的广播 永远要快于 静态注册的广播,不管静态注册的优先级设置的多高,不管动态注册的优先级有多低>\ ...
- Android动态广播的注册与销毁
一个内部类:BroadcastReceiver的子类,并定义收到广播之后的操作: class LockScreenBroadcastReceiver extends BroadcastReceiver ...
- Android中BroadcastReceiver的两种注册方式(静态和动态)详解
今天我们一起来探讨下安卓中BroadcastReceiver组件以及详细分析下它的两种注册方式. BroadcastReceiver也就是"广播接收者"的意思,顾名思义,它就是用来 ...
- Android随笔之——Android广播机制Broadcast详解
在Android中,有一些操作完成以后,会发送广播,比如说发出一条短信,或打出一个电话,如果某个程序接收了这个广播,就会做相应的处理.这个广播跟我们传统意义中的电台广播有些相似之处.之所以叫做广播,就 ...
- Android开发4: Notification编程基础、Broadcast的使用及其静态注册、动态注册方式
前言 啦啦啦~(博主每次开篇都要卖个萌,大家是不是都厌倦了呢~) 本篇博文希望帮助大家掌握 Broadcast 编程基础,实现动态注册 Broadcast 和静态注册 Broadcast 的方式以及学 ...
- 广播Broadcast Receiver
广播的类型: 1.标准广播(Normal broadcat) 完全异步执行的广播,所有广播接收器同一时间接收广播消息. 效率高,但无法被截断. 2.有序广播 同步执行的广播,同一时刻只能有一个广播接收 ...
- Android广播机制的深入学习
部分内容转载自http://www.cnblogs.com/lwbqqyumidi/p/4168017.html 1.Android广播机制概述 Android广播分为两个方面:广播发送者和广播接收者 ...
随机推荐
- &&、||、?:、,四个运算符的求值顺序
C语言中只有四个运算符(&&.||.?:.,)存在规定的求值顺序. 运算符&&和运算符||首先对左侧操作数求值,只在需要时才对右侧操作数求值. 运算符?:有三个操作数: ...
- javascript优化--07模式(对象)02
沙箱模式: 解决空间命名模式的几个缺点: 命名空间模式中无法同时使用一个应用程序或库的两个版本运行在同一个页面中,因为两者需要相同的全局符号: 以点分割,需要输入更长的字符,解析时间也更长: 全局构造 ...
- Jquery操作
一.文档操作 1.内部插入:append(),appendTo(),prepend(): 2.外部插入:after(),before(): 3.删除操作:remove(),empty(): 4.克隆操 ...
- DP(01背包) UESTC 1218 Pick The Sticks (15CCPC C)
题目传送门 题意:长度为L的金条,将n根金棍尽可能放上去,要求重心在L上,使得价值最大,最多有两条可以长度折半的放上去. 分析:首先长度可能为奇数,先*2.然后除了两条特殊的金棍就是01背包,所以dp ...
- Assets/Sciprts/GameSciprt.js(97,46): BCE0044: expecting :, found ','.
function BuildDeck() { var totalRobots:int=4; var card:Object; var i:int; for(i=0;i<totalRobots;i ...
- HDU 4003 (树形DP+背包)
题目链接: http://acm.hdu.edu.cn/showproblem.php?pid=4003 题目大意:有K个机器人,走完树上的全部路径,每条路径有个消费.对于一个点,机器人可以出去再回来 ...
- sql-mode="STRICT_TRANS_TABLES,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION"问题解决
安装一个软件时,遇到这个问题sql-mode="STRICT_TRANS_TABLES,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION" 上网 ...
- CVE-2014-4113 windows通杀本地提权0day
这个0day的发现挺有意思的,是老外CrowdStrike 发现的,被老外监测程序发现显示从WEBSHELL使用Win64.exe来提升权限. 原文地址:http://blog.crowdstrike ...
- Scrum会议2
小组名称:天天向上 项目名称:连连看 参会成员:王森(Master)张金生 张政 栾骄阳 时间:2016.10.17 已完成内容: 1.连连游戏的图片素材选取. 2.连连看具体的功能种类. 计划完成: ...
- HDU 4825 Xor Sum(经典01字典树+贪心)
Xor Sum Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 132768/132768 K (Java/Others) Total ...