本教程基于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之动态广播使用相关推荐

  1. Android 动态广播与静态广播

    学而时习,稳固而之心 目前推荐使用动态广播,现在已经很就没有使用过静态广播了. 动态广播与静态广播的联系 1 动态广播的速度要快于静态广播 2 静态广播的生存期可以比动态广播的长很多 在Manifes ...

  2. android动态静态广播,Android BroadcastReceiver实现自定义静态广播和动态广播(黏性广播)...

    思维导图: 静态广播: 当广播发出去的时候 如果接收广播的应用程序已经退出,也能接收广播: 发送者代码: package com.example.g160628_android_21_sender; ...

  3. BroadcastReceiver之动态广播 demo+笔记

    在Android中,Broadcast是一种广泛运用在应用程序之间传输信息的机制.而BroadcastReceiver是对发送出来的 Broadcast进行过滤接收并响应的一类组件(任何一个程序都能接 ...

  4. Android在Service中注册动态广播接收者

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

  5. SparkStreaming稽查布控/动态广播变量(处理电信数据)

    SparkStreaming稽查布控/动态广播变量 需求: 1. 在mysql中建表 2. 在虚拟机中使用指令:nc -lk 8888 3. 在IDEA中编写代码 数据如下 需求: 1. 在mysql ...

  6. 【BLE】CC2541之动态广播加密数据

    本篇博文最后修改时间:2017年03月30日,16:33. 一.简介 本文以SimpleBLEPeripheral为例,每5S来动态更新广播一次16字节的加密数据,其中有效数据为1个字节的计数值. 二 ...

  7. Android动态广播添加权限

    第一步:自己定义权限,并且使用自定义权限 <uses-permission android:name="com.cn.customview.permissions.MY_BROADCA ...

  8. android 发送广播 接收广播 动态广播接收

    1. 静态广播 见网址: http://www.devdiv.com/forum.php?mod=viewthread&tid=48614 2.同时多个动态广播 private Broadca ...

  9. Android S动态广播注册流程(广播1)

    Android S动态广播注册流程 1. 动态广播注册的流程 2. 新建一个动态广播接收者 3. App部分的registerReceiver 4. system_server侧的广播注册 5. 总结 ...

最新文章

  1. Go 学习笔记(70)— Go 变量声明、变量初始化、值类型变量赋值、指针类型变量赋值
  2. 不要过高估计SDN的能力,也善于发现SDN技术的缺陷之美
  3. 周周有好文2007-10-28 2007-11-3
  4. 阿里云HBase全新发布X-Pack NoSQL数据库再上新台阶 1
  5. Coding中遇到的BUG集合~
  6. 使用 SQL Server 2000 索引视图提高性能1
  7. java 信息增益_对信息增益(IG,Information Gain)的理解和计算
  8. 2010夏令营——还孩子快乐成长的空间
  9. C#LeetCode刷题之#202-快乐数(Happy Number)
  10. butter滤波器是iir吗_IIR低通滤波器求改
  11. 产品设计的基本原则是什么
  12. Stream介绍及简单操作!
  13. 新手如何快速学习单片机
  14. rabbitMQ概念详细介绍
  15. 135编辑器点击换图html,135编辑器如何换图片 135编辑器使用教程
  16. AI一分钟 | 美媒称中国导弹阵地遭美国AI技术快速识别,人工智能主播将亮相BBC节目
  17. dosbox 中文操作系统_中兴新支点国产操作系统新版本了,越来越好用了
  18. 用HTML写一个会员注册、登录界面
  19. 新手如何自己做网站?
  20. 罗辑思维2017-2018跨年演讲摘要

热门文章

  1. Kubernetes健康检查如何做?官方推荐教程
  2. IT从业者都应关注的软件行业的变化
  3. Java 面试经典题解析:谈谈你对 Java 平台的理解?
  4. 操作系统:几种页面置换算法
  5. 6.MYSQL视图的使用和管理
  6. java程序死了telnet还有用吗_java实现telnet连接操作 改进
  7. 网络管理员在预先分配和识别作为_14个网络管理员必备的最佳网络流量分析工具,收藏了...
  8. oracle cost cardinality,ORACLE 执行计划中cost cardinality bytes cpu_cost io_cost解释
  9. UpTime:供电、系统、网络、制冷——2020年数据中心宕机四大主因
  10. 必须重视数据中心的规划设计