• 蓝牙广播数据格式和动态改变


      广播内容的自定义是蓝牙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事件。

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

  • 相关阅读:
    phpStrom添加插件:php文档生成(phpDocumentor)
    apache2.2 虚拟主机配置
    PHP环境(apache,PHP,Mysql)详细配置方法
    PHP设计模式之工厂模式(权限分配)
    PHP的接口类(interface)和抽象类(abstract)的区别
    PHP设计模式之单例模式(数据库访问)
    windows svn 客户端连不上linux svn server
    Xshell6和Xftp下载地址,rzsz的使用
    linux文件删除,剩余空间没变化
    thinkphp的_STORAGE_WRITE_ERROR_问题
  • 原文地址:https://www.cnblogs.com/yueqian-scut/p/6625628.html
Copyright © 2020-2023  润新知