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 uint16_t adv_str_len = 5;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, 0, sizeof(advdata));memset(&scanrsp, 0, 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, 0, sizeof(adv_params)); //设置广播信道是否开启adv_params.channel_mask.ch_37_off = 0;adv_params.channel_mask.ch_38_off = 0;adv_params.channel_mask.ch_39_off = 0;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)
{for (uint32_t i = 0; 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 动态广播与静态广播
学而时习,稳固而之心 目前推荐使用动态广播,现在已经很就没有使用过静态广播了. 动态广播与静态广播的联系 1 动态广播的速度要快于静态广播 2 静态广播的生存期可以比动态广播的长很多 在Manifes ...
- android动态静态广播,Android BroadcastReceiver实现自定义静态广播和动态广播(黏性广播)...
思维导图: 静态广播: 当广播发出去的时候 如果接收广播的应用程序已经退出,也能接收广播: 发送者代码: package com.example.g160628_android_21_sender; ...
- BroadcastReceiver之动态广播 demo+笔记
在Android中,Broadcast是一种广泛运用在应用程序之间传输信息的机制.而BroadcastReceiver是对发送出来的 Broadcast进行过滤接收并响应的一类组件(任何一个程序都能接 ...
- Android在Service中注册动态广播接收者
Android广播分为动态.静态广播. 广播接收器注册一共有两种形式 : 静态注册和动态注册. 两者及其接收广播的区别: 1.动态注册的广播 永远要快于 静态注册的广播,不管静态注册的优先级设置的多高 ...
- SparkStreaming稽查布控/动态广播变量(处理电信数据)
SparkStreaming稽查布控/动态广播变量 需求: 1. 在mysql中建表 2. 在虚拟机中使用指令:nc -lk 8888 3. 在IDEA中编写代码 数据如下 需求: 1. 在mysql ...
- 【BLE】CC2541之动态广播加密数据
本篇博文最后修改时间:2017年03月30日,16:33. 一.简介 本文以SimpleBLEPeripheral为例,每5S来动态更新广播一次16字节的加密数据,其中有效数据为1个字节的计数值. 二 ...
- Android动态广播添加权限
第一步:自己定义权限,并且使用自定义权限 <uses-permission android:name="com.cn.customview.permissions.MY_BROADCA ...
- android 发送广播 接收广播 动态广播接收
1. 静态广播 见网址: http://www.devdiv.com/forum.php?mod=viewthread&tid=48614 2.同时多个动态广播 private Broadca ...
- Android S动态广播注册流程(广播1)
Android S动态广播注册流程 1. 动态广播注册的流程 2. 新建一个动态广播接收者 3. App部分的registerReceiver 4. system_server侧的广播注册 5. 总结 ...
最新文章
- Go 学习笔记(70)— Go 变量声明、变量初始化、值类型变量赋值、指针类型变量赋值
- 不要过高估计SDN的能力,也善于发现SDN技术的缺陷之美
- 周周有好文2007-10-28 2007-11-3
- 阿里云HBase全新发布X-Pack NoSQL数据库再上新台阶 1
- Coding中遇到的BUG集合~
- 使用 SQL Server 2000 索引视图提高性能1
- java 信息增益_对信息增益(IG,Information Gain)的理解和计算
- 2010夏令营——还孩子快乐成长的空间
- C#LeetCode刷题之#202-快乐数(Happy Number)
- butter滤波器是iir吗_IIR低通滤波器求改
- 产品设计的基本原则是什么
- Stream介绍及简单操作!
- 新手如何快速学习单片机
- rabbitMQ概念详细介绍
- 135编辑器点击换图html,135编辑器如何换图片 135编辑器使用教程
- AI一分钟 | 美媒称中国导弹阵地遭美国AI技术快速识别,人工智能主播将亮相BBC节目
- dosbox 中文操作系统_中兴新支点国产操作系统新版本了,越来越好用了
- 用HTML写一个会员注册、登录界面
- 新手如何自己做网站?
- 罗辑思维2017-2018跨年演讲摘要
热门文章
- Kubernetes健康检查如何做?官方推荐教程
- IT从业者都应关注的软件行业的变化
- Java 面试经典题解析:谈谈你对 Java 平台的理解?
- 操作系统:几种页面置换算法
- 6.MYSQL视图的使用和管理
- java程序死了telnet还有用吗_java实现telnet连接操作 改进
- 网络管理员在预先分配和识别作为_14个网络管理员必备的最佳网络流量分析工具,收藏了...
- oracle cost cardinality,ORACLE 执行计划中cost cardinality bytes cpu_cost io_cost解释
- UpTime:供电、系统、网络、制冷——2020年数据中心宕机四大主因
- 必须重视数据中心的规划设计