本篇博文最后修改时间:2017年03月30日,16:33。


一、简介

本文以SimpleBLEPeripheral为例,每5S来动态更新广播一次16字节的加密数据,其中有效数据为1个字节的计数值。

二、实验平台

协议栈版本:BLE-CC254x-1.4.0

编译软件:IAR 8.20.2

硬件平台:Smart RF开发板(主芯片CC2541)、USB Dongle


版权声明

博主:甜甜的大香瓜

声明:喝水不忘挖井人,转载请注明出处。

原文地址:http://blog.csdn.NET/feilusia

联系方式:897503845@qq.com

香瓜BLE之CC2541群:127442605

香瓜BLE之CC2640群:557278427

香瓜BLE之Android群:541462902

香瓜单片机之STM8/STM32群:164311667
香瓜单片机之Linux群:512598061
香瓜单片机之职场交流群:450154342
甜甜的大香瓜的小店(淘宝店):https://shop217632629.taobao.com/?spm=2013.1.1000126.d21.hd2o8i
四、实验前提
1、在进行本文步骤前,请先阅读以下博文:
1)《CC2541之动态广播》:http://blog.csdn.net/feilusia/article/details/48783259
2、在进行本文步骤前,请先实现以下博文:
1)《CC2541之数据加密与解密(利用MAC形成自定义秘钥)》:http://blog.csdn.net/feilusia/article/details/68070791
五、基础知识
暂无

六、实验步骤
1、添加一个“动态广播”事件
1)定义事件(SimpleBLEPeripheral.c的SimpleBLEPeripheral_ProcessEvent函数中)
//GUA  //定时更新广播事件 if ( events & SBP_GUA_UPDATE_ADV_EVT )         {  uint8 nGUA_Adv_Status;   uint8 nbGUA_AES_Data[16] = {0};             //需要加密的数据        uint8 nbGUA_AES_EncryptedData[16] = {0};    //加密后数据存放区    uint8 nbGUA_Adv_Update[] =  {  //广播类型段0x02,   GAP_ADTYPE_FLAGS,DEFAULT_DISCOVERABLE_MODE | GAP_ADTYPE_FLAGS_BREDR_NOT_SUPPORTED,//服务UUID段0x03,  GAP_ADTYPE_16BIT_MORE,     LO_UINT16( SIMPLEPROFILE_SERV_UUID ),HI_UINT16( SIMPLEPROFILE_SERV_UUID ),//GUA//加密数据段0x11,                                 //1字节类型+16字节自定义加密数据GAP_ADTYPE_MANUFACTURER_SPECIFIC,     //自定义类型0x00,                                 //自定义数据预留0x00,                                 //自定义数据预留  0x00,                                 //自定义数据预留0x00,                                 //自定义数据预留  0x00,                                 //自定义数据预留0x00,                                 //自定义数据预留  0x00,                                 //自定义数据预留0x00,                                 //自定义数据预留    0x00,                                 //自定义数据预留0x00,                                 //自定义数据预留  0x00,                                 //自定义数据预留0x00,                                 //自定义数据预留  0x00,                                 //自定义数据预留0x00,                                 //自定义数据预留  0x00,                                 //自定义数据预留0x00,                                 //自定义数据预留   //GUA };  //关广播nGUA_Adv_Status = FALSE;  GAPRole_SetParameter(GAPROLE_ADVERT_ENABLED, sizeof( uint8 ), &nGUA_Adv_Status);//加密计数值nbGUA_AES_Data[0] = ++sGUA_Count;GUA_AES_Encrypted(nbGUA_AES_Data, nbGUA_AES_EncryptedData);          //修改广播数据osal_memcpy(nbGUA_Adv_Update + 9, nbGUA_AES_EncryptedData, 16);//更新广播数据   GAP_UpdateAdvertisingData(simpleBLEPeripheral_TaskID,   TRUE,  sizeof(nbGUA_Adv_Update),  nbGUA_Adv_Update);       //开广播nGUA_Adv_Status = TRUE;  GAPRole_SetParameter(GAPROLE_ADVERT_ENABLED, sizeof( uint8 ), &nGUA_Adv_Status);//5S启动一次更新广播的事件osal_start_timerEx(simpleBLEPeripheral_TaskID, SBP_GUA_UPDATE_ADV_EVT, 5000);         return (events ^ SBP_GUA_UPDATE_ADV_EVT);  }
//GUA  

2)添加事件的宏定义(SimpleBLEPeripheral.h中)

#define SBP_GUA_UPDATE_ADV_EVT                            0x0008 

2、添加动态广播的部分代码

1)定义一个变量用于计数(SimpleBLEPeripheral.c中)
//GUA
static uint8 sGUA_Count = 1;
//GUA

2)初始化阶段关闭广播(修改SimpleBLEPeripheral.c中的SimpleBLEPeripheral_Init函数)

      //GUAuint8 initial_advertising_enable = FALSE;//TRUE;//GUA

3)初始化结束后启动香瓜的定时更新广播事件(SimpleBLEPeripheral.c中的SimpleBLEPeripheral_ProcessEvent函数)

//GUA    //立即启动一次更新广播的事件osal_start_timerEx(simpleBLEPeripheral_TaskID, SBP_GUA_UPDATE_ADV_EVT, 0);
//GUA    

七、注意事项
1、手机可能缓存了之前的代码(在更新过CC2541的代码之后,都需要清除手机端的缓存!!!),因此要清除缓存,清除缓存的方法如下:
方法一:关闭app、关闭蓝牙总开关、打开蓝牙总开关、打开app。
方法二:手机重启。
2、当低功耗模式时,广播广播可能会导致在PM3下睡死,因此低功耗模式时需要注释掉如下两行代码
    //关广播  //nGUA_Adv_Status = FALSE;    //GAPRole_SetParameter(GAPROLE_ADVERT_ENABLED, sizeof( uint8 ), &nGUA_Adv_Status);  

实测不关闭广播方式也能更新广播,并且底层的更新处理时间由5S缩短至1S。

八、实验结果
使用抓包软件Packet Sniffer,来观察CC2541的广播过程。
1、上电广播
主要看广播数据中的自定义数据字段。其中0x11是数据长度,0xFF是类型,后面的16个数据是加密数据。
此时的16个字节真实数据是“0x02、0、0、0、……0”。
注意当前的时间为2.235S。
2、第1次更新广播
见上图,可得以下结论:
1)在12.235S时才更新成功,一共用了10S才更新成功广播数据。
实际上我们的周期事件是5S启动一次,而红框与上一条广播数据相差了5S。
说明广播更新部分的处理执行时间也需要5S。
2)虽然我们的实际数据每次只改动一个字节,但可观测到16个加密数据都变化了。
因此,实验成功。

【BLE】CC2541之动态广播加密数据相关推荐

  1. [Telink][TLSR8251] [泰凌微][SDK3.4] 添加广播内容 和 动态广播 厂商信息

    文章目录 一. 广播类型 实现动态广播的方法是: 广播->停止广播->修改参数->重启广播 二.什么是蓝牙动态广播? 1.1 前导 1.2 接入地址 1.3 报头 1.3.1 广播报 ...

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

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

  3. android ble不配对接收广播数据_蓝牙低功耗(BLE)学习笔记_0

    BLE的体系结构主要由三部分组成,分别是控制器(controller),主机(Host)和应用程序(Application),如下图所示: BLE体系结构 Application layer顾名思义主 ...

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

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

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

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

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

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

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

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

  8. Android动态广播添加权限

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

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

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

最新文章

  1. IntelliJ IDEA 2019从入门到癫狂 图文教程!
  2. loguru log 日志的使用
  3. 一文读懂深度学习:这个AI核心技术被美国掌控,很危险
  4. python request-python-request-各方法使用及格式
  5. SQL Server R2 地图报表制作(四)
  6. 两种参数类型_深入理解Java中方法的参数传递机制
  7. 手机MODEM 开发(32)--VOLTE 信令
  8. 【东软实训】SQL函数
  9. BI工具选型需考虑哪些问题
  10. as5300g2 nas软件功能_浪潮AS5300G2 5500G2存储2U12
  11. UE4运行时交互工具框架
  12. 解决Xcode 9.x 没有代码提示
  13. linux下可执行文件无法执行问题定位排查
  14. 仿网易云手机版代码_网易uu加速器官网下载-网易uu加速器手机版下载
  15. 借助 Lucene.Net 构建站内搜索引擎(下)
  16. 第三章 分布式扩展(一)
  17. 仿真工具打开raw报cannot load library XXX.dll错误
  18. 容器启动失败 ERROR: for log Cannot start service log: OCI runtime create failed: container_linux.go:346
  19. 分析一种简单的提高功率因数的电路——填谷电路
  20. aqs clh java_Java并发编程:AQS对CLH锁的优化

热门文章

  1. PTA 一维数组 7-3 删除指定数据
  2. 计算机打开共享网络连接打印机共享打印机,网络共享打印机连接不上怎么办_电脑连不上共享打印机如何解决-win7之家...
  3. 快来学学爱用建站新功能【Light Press】微单页,超级实用
  4. 2021新网银行金融科技挑战赛 Baseline
  5. Leetcode-1737-满足三条件之一需改变的最少字符数
  6. 初学者用Eclipse和IDEA哪个好用一点?
  7. 51单片机 Proteus仿真 时钟 串口 发送时钟 整点报时
  8. Symbian程序安装不成功的解决方法
  9. javaWeb课程设网上报名系统
  10. CCF认证 201712-4 行车路线(100分)