在对ble进行应用的时候,每个用户的需求可能不尽相同。这里着重介绍从机Broadcaster例程,只广播不连接。

使用该例程时可以在手机使用APP上对Broadcaster进行调试。

安卓端在应用市场搜索BLE调试助手下载使用,使用时要开启提示所需开启的权限。

将Broadcaster例程烧录到DEMO板中。

烧录后发现一个蓝牙名称为abc的设备没有connect(连接)的选项,只能广播我无法连接。

接下来主要的程序拆分讨论:相对于peripheral例程,Broadcaster是比较精简的。这里直接从扫描应答包开始讨论,在APP上我们看到设备的是名称是abc,对比一下peripheral的名称为Simple Peripheral。

此时我们应该会有个疑问Broadcaster扫描应答包中的名称应该是Broadcaster,为什么APP上显示的是abc呢?

这样就可以解释为什么设备名称不是Broadcaster而是abc,这个例程只有广播的功能,所以扫描应答包的设备名是不会显示出来的。

其中对 GAPRole_SetParameter(GAPROLE_ADVERT_ENABLED, sizeof(uint8_t), &initial_advertising_enable);进行更多的讨论

/*-------------------------------------------------------------------
* FUNCTIONS - GAPRole API
*/
/**
* @brief Set a GAP Role parameter.
*
* @note You can call this function with a GAP Parameter ID and it will set a GAP Parameter.
*
* @param param - Profile parameter ID: @ref GAPROLE_PROFILE_PARAMETERS
* @param len - length of data to write
* @param pValue - pointer to data to write. This is dependent on the parameter ID and
* WILL be cast to the appropriate data type (example: data type of uint16_t
* will be cast to uint16_t pointer).
*
* @return SUCCESS or INVALIDPARAMETER (invalid paramID)
*/
extern bStatus_t GAPRole_SetParameter( uint16_t param, uint16_t len, void *pValue );
GAPRole_SetParameter后的三个参数值分别是配置文件参数 ID、要写入的数据长度、指向要写入的数据的指针。
配置文件参数在lib文件里。
#define GAPROLE_PROFILEROLE                     0x300  //!< Reading this parameter will return GAP Role type. Read Only. Size is uint8_t.
#define GAPROLE_IRK 0x301 //!< Identity Resolving Key. Read/Write. Size is uint8_t[KEYLEN]. Default is all 0, which means that the IRK will be randomly generated.
#define GAPROLE_SRK 0x302 //!< Signature Resolving Key. Read/Write. Size is uint8_t[KEYLEN]. Default is all 0, which means that the SRK will be randomly generated.
#define GAPROLE_SIGNCOUNTER 0x303 //!< Sign Counter. Read/Write. Size is uint32_t. Default is 0.
#define GAPROLE_BD_ADDR 0x304 //!< Device's Address. Read Only. Size is uint8_t[B_ADDR_LEN]. This item is read from the controller.
#define GAPROLE_ADVERT_ENABLED 0x305 //!< Enable/Disable Advertising. Read/Write. Size is uint8_t. Default is TRUE=Enabled.
#define GAPROLE_ADVERT_DATA 0x306 //!< Advertisement Data. Read/Write. Max size is B_MAX_ADV_EXT_LEN. Default to all 0.
#define GAPROLE_SCAN_RSP_DATA 0x307 //!< Scan Response Data. Read/Write. Max size is B_MAX_ADV_EXT_LEN. Defaults to all 0.
#define GAPROLE_ADV_EVENT_TYPE 0x308 //!< Advertisement Type. Read/Write. Size is uint8_t. Default is GAP_ADTYPE_ADV_IND.
#define GAPROLE_ADV_DIRECT_TYPE 0x309 //!< Direct Advertisement Address Type. Read/Write. Size is uint8_t. Default is ADDRTYPE_PUBLIC.
#define GAPROLE_ADV_DIRECT_ADDR 0x30A //!< Direct Advertisement Address. Read/Write. Size is uint8_t[B_ADDR_LEN]. Default is NULL.
#define GAPROLE_ADV_CHANNEL_MAP 0x30B //!< Which channels to advertise on. Read/Write Size is uint8_t. Default is GAP_ADVCHAN_ALL
#define GAPROLE_ADV_FILTER_POLICY 0x30C //!< Filter Policy. Ignored when directed advertising is used. Read/Write. Size is uint8_t. Default is GAP_FILTER_POLICY_ALL.
#define GAPROLE_STATE 0x30D //!< Reading this parameter will return GAP Peripheral Role State. Read Only. Size is uint8_t.
#define GAPROLE_MAX_SCAN_RES 0x30E //!< Maximum number of discover scan results to receive. Default is 0 = unlimited.
#define GAPROLE_MIN_CONN_INTERVAL 0x311 //!< Minimum Connection Interval to allow (n * 1.25ms). Range: 7.5 msec to 4 seconds (0x0006 to 0x0C80). Read/Write. Size is uint16_t. Default is 7.5 milliseconds (0x0006).
#define GAPROLE_MAX_CONN_INTERVAL 0x312 //!< Maximum Connection Interval to allow (n * 1.25ms). Range: 7.5 msec to 4 seconds (0x0006 to 0x0C80). Read/Write. Size is uint16_t. Default is 4 seconds (0x0C80).
// v5.x
#define GAPROLE_PHY_TX_SUPPORTED 0x313 //!< The transmitter PHYs that the Host prefers the Controller to use.Default is GAP_PHY_BIT_ALL
#define GAPROLE_PHY_RX_SUPPORTED 0x314 //!< The receiver PHYs that the Host prefers the Controller to use.Default is GAP_PHY_BIT_ALL
#define GAPROLE_PERIODIC_ADVERT_DATA 0x315 //!< Periodic advertisement Data. Read/Write. Max size is B_MAX_ADV_PERIODIC_LEN. Default to all 0.
#define GAPROLE_PERIODIC_ADVERT_ENABLED 0x316 //!< bit0:Enable/Disable Periodic Advertising. Read/Write. Size is uint8_t. Default is FALSE=Disable.
//!< bit1:Include the ADI field in AUX_SYNC_IND PDUs

这段代码为TMOS事件,TMOS的讲解可以参照这篇博客WCH TMOS用法详解 - debugdabiaoge - 博客园 (cnblogs.com)

广播流程与状态函数,

GAPROLE_STARTED的定义可以在lib库中看到

#define GAPROLE_STATE_ADV_MASK             (0xF)    //!< advertising states mask
#define GAPROLE_STATE_ADV_SHIFT (0x0) //!< advertising states shift
#define GAPROLE_INIT 0 //!< Waiting to be started
#define GAPROLE_STARTED 1 //!< Started but not advertising
#define GAPROLE_ADVERTISING 2 //!< Currently Advertising
#define GAPROLE_WAITING 3 //!< Device is started but not advertising, is in waiting period before advertising again
#define GAPROLE_CONNECTED 4 //!< In a connection
#define GAPROLE_CONNECTED_ADV 5 //!< In a connection + advertising
#define GAPROLE_ERROR 6 //!< Error occurred - invalid state

这只是最基础的讨论,如有问题请指正!

如转载请标明出处!文章可能被无良网站搬运。某些网站拿着别人的文章写着“我的编程学习分享”。

禁止写着我的编程学习分享的网站转载。

CH58X/CH57X/V208的Broadcaster(广播者)例程讲解的更多相关文章

  1. CH58X/CH57X/V208 Observer(观察者)例程讨论讲解

    使用的是沁恒的CH582M的Observer例程与官方的demo板. 本例程的功能是主机扫描到从机的MAC地址并打印出来. 先对宏定义进行理解讨论. 最大响应扫描数为8,在串口调试助手那里可以看到打印 ...

  2. 6、CC2541修改按键调节广播发送功率例程为持续发送4DB的蓝牙基站

    一.目的 在 OSAL操作系统-实验31 从机广播功率修改-(20141029更新).zip 基础上进行修改,该工程是通过5向按键的上下按键来控制广播功率的加减,总共有4个档位.我们的目的是直接用最高 ...

  3. 说说M451例程讲解之LED

    /**************************************************************************//** * @file main.c * @ve ...

  4. 说说M451例程讲解之串口

    /**************************************************************************//** * @file main.c * @ve ...

  5. 说说M451例程讲解之定时器

    关于定时器 相信很多人都不会陌生,无论是51还是32,任何微控制器,都会有定时器 定时器控制器包含 4 组 32-位定时器,TIMER0~TIMER3,提供用户便捷的计数定时功能.定时器可执行很多功能 ...

  6. M451例程讲解之GPIO.H

    到了CORTEX-M4,几乎每一快都有很大的知识量,单单GPIO库文件这一项就有很长的章节要描述,加油吧 GPIO.h.是最基础的一个库文件,下面结合数据手册来一一进行讲解: 先把库文件粘上,方便一一 ...

  7. M451例程讲解之按键

    /**************************************************************************//** * @file main.c * @ve ...

  8. Rocket - util - Broadcaster

    https://mp.weixin.qq.com/s/ohBVNAXZUA538qSxfBGMKA   简单介绍Broadcaster的实现.   ​​   1. Broadcaster   广播即是 ...

  9. 【iCore2 模块相关资料】iM_LAN 100M 以太网模块UDP例程

    ============================== 技术论坛:http://www.eeschool.org 博客地址:http://xiaomagee.cnblogs.com 官方网店:h ...

随机推荐

  1. wallpaperPKG文件提取

    简单粗暴 下载这个ZIP文件链接: 下载地址戳我 提取码: ag43 解压后双击打开如下文件 我们在解压一下repkg-master.zip解压后如下,注意我的路径进入到这些很多文件的页面 返回首页复 ...

  2. mydodo协议

    mydodo协议 目录 数据帧结构 命令 协议 代码样例 数据帧结构 帧头1 帧头2 设备号 命令 数据长度 数据 0x4D 0x59 xxx cmd nByte data 例子:设备my01 的继电 ...

  3. 《吐血整理》进阶系列教程-拿捏Fiddler抓包教程(18)-Fiddler如何接口测试,妈妈再也不担心我不会接口测试了

    1.简介 Fiddler最大的优势在于抓包,我们大部分使用的功能也在抓包的功能上,fiddler做接口测试也是非常方便的. 领导或者开发给你安排接口测试的工作任务,但是没有给你接口文档(由于开发周期没 ...

  4. web前端小知识 —— 【HTML,CSS,JS】集锦 【第一期】 { }

    1.获取元素样式属性的方法 第 一 种 : 较灵活,能获取传进来想获取的元素的样式属性,返回的是[字符串] function getStyle(obj, name) { // IE // 主流 ret ...

  5. LFS(Linux From Scratch)构建过程全记录(一):准备工作

    写在前面 本人修学了一门课,名曰<操作系统课程设计>,其任务为基于LFS以编译源代码的方式制作一个基本的Linux操作系统,并且编写在linux下的GUI软件. 本操作系统构建的全过程将分 ...

  6. 关于thinkphp5.1(tp5.1)中sum计算结果不精确、不准确的问题

    使用sprintf函数处理,虽然原理没搞懂,但是问题解决了 复现: test表中有两列,值分别是-0.33和10,数据类型是float SELECT SUM(`val`) AS tp_sum FROM ...

  7. 【疑难杂症】if __name__ == '__main__'的理解

    今天进行小批量梯度下降时,代码给我报错,具体代码如下 import torch import numpy as np from torch.utils.data import Dataset from ...

  8. kubectl top命令

    kubectl top命令可显⽰节点和Pod对象的资源使⽤信息,它依赖于集群中的资源指标API来收集各项指标数据.它包含有node和pod两个⼦命令,可分别⽤于显⽰Node对象和Pod对象的相关资源占 ...

  9. CentOS7下的lvm(逻辑卷)在线扩容

    扩展前该lvm分区为14GB 关闭系统,给sdb硬盘扩展6GB,然后重新进入CentOS.(或者是原有磁盘还有剩余未使用的空间) 对sdb进行分区: [root@converter ~]# fdisk ...

  10. MySQL 中 datetime 和 timestamp 的区别与选择

    MySQL 中常用的两种时间储存类型分别是datetime和 timestamp.如何在它们之间选择是建表时必要的考虑.下面就谈谈他们的区别和怎么选择. 1 区别 1.1 占用空间 类型 占据字节 表 ...