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. 总结 ...
最新文章
- RRDTool原理简介
- 12×××求职经过-之求职信
- 更改Windows Server Core 2008计算机名字和配置网络连接
- SQL Sever 各版本下载 SQL Server 2012下载SQL Server 2008下载SQL Server 2005 下载SQL Server 2000 下载...
- 屏幕输出语句_第三章 常用输入/输出函数
- .net core redis的全套操作
- C和指针之函数之在数组中找特定元素并返回指向该位置的指针
- Linux实验五:Linux环境下的C语言编程
- android4.4 ssl版本查看,OkHttp在4.4及以下不支持TLS协议的解决方法
- H3C 模拟器 pc与sw直连 登录web
- 收集:Hibernate中常见问题 No row with the given identifier exists问题的原因及解决
- 单机魔域显示服务器未启动,魔域单机版_开始游戏
- 使用阿里云,5分钟搭建私有云盘
- 公司新来了个软件测试工程师,一副毛头小子的样儿,哪想到是新一代卷王...
- 小丁是怎样入门git的
- 剑灵认证服务器系统出错,剑灵手游程序错误怎么办 和服务器断开官方解决
- 1月FOMC会议连连放鹰 现货金转空大跌35美元
- 开发板实战篇3 6位数码管动态显示
- 我的专业我做主计算机演讲稿,我的未来我做主演讲稿
- 【蚁群系统】解决TSP旅行商问题(matlab实现)
热门文章
- java.nio.Buffer flip()方法
- C语言 从指定文件中依次读出字符直至文件结束
- Problems encountered while deleting resources. Could not delete 'E:\MyEclipse file\check\WebRoot\i
- 湖南师范大学c语言作业答案,2017年湖南师范大学物理与信息科学学院845C语言程序设计考研题库...
- 联想v3500存储Linux配置手册,OEL6.X IBM v3500存储多路径配置
- php 登陆 才能查看,WordPress登录后才能查看网站内容,未登录跳转登录页面教程...
- ML之DS:仅需一行代码实现对某字段下的所有数值实现同一机制的改变或转换(比如全部转为str类型/全部取平方值)
- DL之DNN:利用numpy自定义三层结构+softmax函数建立3层完整神经网络全部代码实现(探究BP神经网络的底层思想)
- 成功解决ValueError: attempted relative import beyond top-level package
- 成功解决ModuleNotFoundError: No module named 'dataset'