本教程基于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之动态广播使用的更多相关文章

  1. Android-broadcast静态动态广播

    广播的静态和动态类型 静态广播: 1.继承之broadcastreceiver public class MyStaticBroadcastReceiver extends BroadcastRece ...

  2. Android 静态广播和动态广播接收顺序

    Android广播有两个很重要的要素: 1 广播 - 用于发送广播 有序广播  -  被广播接收器接收后,可被终止,无法往下继续传达.         典型代表:短信广播 普通广播  -  发送至每一 ...

  3. Android笔记(二十七) Android中的动态广播和静态广播

    广播接收器注册一共有两种形式 : 静态注册和动态注册. 两者及其接收广播的区别: 1.动态注册的广播 永远要快于 静态注册的广播,不管静态注册的优先级设置的多高,不管动态注册的优先级有多低>\ ...

  4. Android动态广播的注册与销毁

    一个内部类:BroadcastReceiver的子类,并定义收到广播之后的操作: class LockScreenBroadcastReceiver extends BroadcastReceiver ...

  5. Android中BroadcastReceiver的两种注册方式(静态和动态)详解

    今天我们一起来探讨下安卓中BroadcastReceiver组件以及详细分析下它的两种注册方式. BroadcastReceiver也就是"广播接收者"的意思,顾名思义,它就是用来 ...

  6. Android随笔之——Android广播机制Broadcast详解

    在Android中,有一些操作完成以后,会发送广播,比如说发出一条短信,或打出一个电话,如果某个程序接收了这个广播,就会做相应的处理.这个广播跟我们传统意义中的电台广播有些相似之处.之所以叫做广播,就 ...

  7. Android开发4: Notification编程基础、Broadcast的使用及其静态注册、动态注册方式

    前言 啦啦啦~(博主每次开篇都要卖个萌,大家是不是都厌倦了呢~) 本篇博文希望帮助大家掌握 Broadcast 编程基础,实现动态注册 Broadcast 和静态注册 Broadcast 的方式以及学 ...

  8. 广播Broadcast Receiver

    广播的类型: 1.标准广播(Normal broadcat) 完全异步执行的广播,所有广播接收器同一时间接收广播消息. 效率高,但无法被截断. 2.有序广播 同步执行的广播,同一时刻只能有一个广播接收 ...

  9. Android广播机制的深入学习

    部分内容转载自http://www.cnblogs.com/lwbqqyumidi/p/4168017.html 1.Android广播机制概述 Android广播分为两个方面:广播发送者和广播接收者 ...

随机推荐

  1. Google地图接口API之地图事件(四)

    演示几个地图事件: 1. 点击标记缩放地图 仍然使用上一遍文章使用的英国伦敦的地图.点用户点击标记时实现缩放地图的功能(点击标记时绑定地图缩放事件). 代码如下: <html> <h ...

  2. HDU 4618 Palindrome Sub-Array(DP)

    题目链接 我还是图样啊....比赛的时候没敢暴力去搜... #include <cstdio> #include <cstdlib> #include <cstring& ...

  3. Graph database_neo4j 底层存储结构分析(7)

    3.7  Relationship 的存储 下面是neo4j graph db 中,Relationship数据存储对应的文件: neostore.relationshipgroupstore.db ...

  4. js 字符串中取得第一个字符和最后一个字符

    var str = "Hello World";// 删除第一个字符 H,结果为 ello World alert(str.slice(1));// 删除最后一个字符 d,结果为 ...

  5. td也可以溢出隐藏显示

    或许我这篇文章一取这样的名字,就会有人要问了:你怎么还在关注table啊,那早就过时了…赶紧Xhtml…div好…ul好…ol好…dl好…完了,不知道还有什么好了. table真的过时了么?你真的了解 ...

  6. [ZT] Vim快捷键分类

    一. 移动:    h,j,k,l: 左,下,上,右.    w: 下一个词的词首.    e:下一个词的词尾.    b:上一个词的词首.    <>: v 模式选中后进行缩进.二. 跳 ...

  7. Odoo 二次开发教程【一】 Odoo 的安装

    一,安装的两种方式: 1) deb包安装: 此安装方式适用于简单不需要太多的人工干预,大多数插件都在deb中涵盖了.具体的步骤如下: 1.编辑 /etc/apt/source.list 文件,在末尾添 ...

  8. myeclipse 第一个web project

    创建一个java project. 不行...js文件是javascript代码的文件.应该放在web目录下...java文件是后台管理的程序代码.放在src目录下...不同的...   那是不是把所 ...

  9. 利用openSSL 生成RSA公钥和密钥

    安装openssl for Windows. 之后开管理员控制台,打开openSSL 我的是 C:\OpenSSL-Win32\bin\openssl.exe 生成1024位的私钥,不指定的话默认20 ...

  10. 《GK101任意波发生器》升级固件发布(版本:1.0.2build851)

    一.固件说明: 硬件版本:0,logic.3 固件版本:1.0.2.build851 编译日期:2015-06-26 ====================================== 二. ...