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广播分为两个方面:广播发送者和广播接收者 ...
随机推荐
- 属性动画PropertyAnimation
xml实现 <?xml version="1.0" encoding="utf-8"?> <set xmlns:android="h ...
- [LintCode] Continuous Subarray Sum II
Given an integer array, find a continuous rotate subarray where the sum of numbers is the biggest. Y ...
- MVC RenderSection
简要使用介绍 @RenderSection在母版页中占个位,然后让使用此母版页的子页自己去呈现他们的Section. 在母版页_Layout.cshtml中定义@RenderSection(" ...
- cocos2d 创建精灵图
// 在init这个函数当中做一些初始化的事情 bool HelloWorld::init() { ////////////////////////////// // 先构造父级对象 if ( !CC ...
- BZOJ3941 : [Usaco2015 Feb]Fencing the Herd
若所有点同侧则表明将各个点带入直线解析式ax+by-c后得到的值均同号等价于最大值和最小值同号考虑CDQ分治,每一步分治的过程中求出上下凸壳,然后三分答案即可时间复杂度$O(n\log^2n)$ #i ...
- TYVJ P1048 田忌赛马 Label:dp
描述 中国古代的历史故事“田忌赛马”是为大家所熟知的.话说齐王和田忌又要赛马了,他们各派出N匹马,每场比赛,输的一方将要给赢的一方200两黄金,如果是平局的话,双方都不必拿出钱.现在每匹马的速 ...
- 【BZOJ】1878: [SDOI2009]HH的项链(树状数组)
http://www.lydsy.com/JudgeOnline/problem.php?id=1878 我太弱了,看题解才过的. 一开始看到此题,我想了想在线做法,但之后觉得这个想法可能是错的:维护 ...
- Django 1.6.0 正式发布,大幅改进事务处理
Django 1.6.0 正式发布了,查看官方发行说明. 下载地址:Django-1.6.tar.gz ,也可通过 pip 安装: pip install Django==1.6 要求 Python ...
- @JSON(serialize=false),过滤不需要的变量
@JSON(serialize=false),过滤不需要的变量 在用struts2返回json类型的数据时,json会自动转换需要转换成json形式的变量,如果哪个变量不需要的话,则可以在该变量的 ...
- python基础数据类型
整形:(不可变类型) >>> a = 123>>> type(a)<class 'int'> 长整形:(在python3中已经废弃了) >> ...