zoukankan      html  css  js  c++  java
  • 蓝牙广播数据格式和动态改变

      广播内容的自定义是蓝牙BLE开发的基本技能,用户最多能够设置31字节。但是用户定义是必须要遵循BLE协议的。另外,ibeacon应用和一些特定的应用要利用广播来传递数据,而且不同时间段的广播内容还会改变,如ibeacon的major/minor和电量显示等待。本文即阐述蓝牙的广播数据格式和动态改变。

      参考文档:bluetooth specification version 4.0, p1735-p1738

    一、广播数据格式

    总共31字节,由一个或者多个广播结构单元组成,每个单元由长度Length、广播内容类型AD Type、广播数据AD Data组成;长度为AD Type加上AD Data的长度,不包括长度自身所占字节。

    二、常见广播内容类型AD Type

    1.flag

    AD Type是0x1,代表广播模式。LElimited Discoverable(AD data是0x0)是有限时间广播,而General Discoverable(AD data是0x1)是无限广播,直到被主动停止广播。

     

    2. Manufacture specific data

    AD Type是0xff,代表厂商数据,自定义的数据可以写到这里。很多第三方场景应用都是利用这个字段来进一步定义应用协议格式,如微信的airsync协议和ibeacon协议。

    3. service

    代表服务的UUID,一般用16bit的UUID。如微信airsync协议的ServiceUUID是0xFEE7。

     

    4. TX POWER LEVEL

    发射功率,主机根据它和RSSI就可以计算主机到从机的距离,ibeacon室内定位即是利用这点。

    5. local name

    设备名称

    常见的广播内容类型就是上面五种,其他的不常见就不讲了。

    三、广播动态改变

    动态改变其实跟各个蓝牙单芯片的sdk事件处理机制有关,但是对于CC2541、DA14580和nrf52832等平台来说,他们的处理基本是一样的:

    1)要想改变广播内容,必须先停止广播,再进行广播内容更新,然后重新广播生效。

    2)必须要等到底层BLE协议栈完全停止广播后,发送确认信息给应用层之后,才能改变广播内容并重新广播。

    以DA14580来举例,其在一直广播过程中,在需要改变广播内容时,要先向GAPM(广播属于GAP层管理)发送GAPM_CANCEL_CMD取消广播,底层处理完会受到一个GAPM_CMP_EVT完成的事件,在该事件处理中修改广播内容,并重新发送GAPM_START_ADVERTISE_CMD命令开始广播。

    四、广播TIMEOUT

           对于DA14580来说,其默认是一直广播下去的,直到被取消或者转到连接状态。如果希望只广播一定时间就进入睡眠,则需要定义一个timer。

           对于nrf52832来说,其接口内置一个定时器,可以设置无线广播,也可以设置一个时间,时间到了就会收到一个TIMEOUT事件。

        关注微信公众号:嵌入式企鹅圈,获得上百篇物联网技术原创。

  • 相关阅读:
    开源文档管理系统LogicalDOC测试报告---安装篇
    QualityCenter的备份
    hudson任务配置说明
    windows server 2003断开远程之后自动注销用户
    使用javaservice 将jboss 注册为服务
    mysql主从同步配置(windows环境)
    更改MYSQL数据库不区分大小写表名
    MySQL的mysqldump工具的基本用法
    MySql中delimiter的作用是什么?
    Ubuntu安装配置Mysql
  • 原文地址:https://www.cnblogs.com/yueqian-scut/p/6625628.html
Copyright © 2011-2022 走看看