技术标签: android 蓝牙 广播
在蓝牙开发中,有些情况是不需要连接的,只要外设广播自己的数据即可,例如苹果的ibeacon。自Android 5.0更新蓝牙API后,手机可以作为外设广播数据。
广播包有两种:
广播包(Advertising Data)
响应包(Scan Response)
其中广播包是每个外设都必须广播的,而响应包是可选的。每个广播包的长度必须是31个字节,如果不到31个字节 ,则剩下的全用0填充 补全,这部分的数据是无效的
image
广播数据单元
广播包中包含若干个广播数据单元,广播数据单元也称为 AD Structure。
广播数据单元 = 长度值Length + AD type + AD Data。
长度值Length只占一个字节,并且位于广播数据单元的第一个字节。
概念的东西有些抽象,先看看下面的广播报文:
image
0x代表这串字符串是十六进制的字符串。两位十六进制数代表一个字节。因为两个字符组成的十六进制字符串最大为FF,即255,而Java中byte类型的取值范围是-128到127,刚好可以表示一个255的大小。所以两个十六进制的字符串表示一个字节。
继续查看报文内容,开始读取第一个广播数据单元。读取第一个字节:0x07,转换为十进制就是7,即表示后面的7个字节是这个广播数据单元的数据内容。超过这7个字节的数据内容后,表示是一个新的广播数据单元。
而第二个广播数据单元,第一个字节的值是0x16,转换为十进制就是22,表示后面22个字节为第二个广播数据单元。
在广播数据单元的数据部分中,第一个字节代表数据类型(AD type),决定数据部分表示的是什么数据。(即广播数据单元第二个字节为AD type)
image
AD Type的类型如下:
Flags:TYPE = 0x01。用来标识设备LE物理连接。
bit 0: LE 有限发现模式
bit 1: LE 普通发现模式
bit 2: 不支持 BR/EDR
bit 3: 对 Same Device Capable(Controller) 同时支持 BLE 和 BR/EDR
bit 4: 对 Same Device Capable(Host) 同时支持 BLE 和 BR/EDR
bit 5..7: 预留
这bit 1~7分别代表着发送该广播的蓝牙芯片的物理连接状态。当bit的值为1时,表示支持该功能。
例:
image
Service UUID。广播数据中可以将设备支持的GATT Service的UUID广播出来,来告知中心设备其支持的Service。对于不同bit的UUID,其对应的类型也有不同:
非完整的16bit UUID: TYPE = 0x02;
完整的16bit UUID 列表: TYPE = 0x03;
非完整的32bit UUID 列表: TYPE = 0x04;
完整的32bit UUID 列表: TYPE = 0x05;
非完整的128bit UUID 列表: TYPE = 0x06;
完整的128bit UUID: TYPE = 0x07;
TX Power Level: TYPE = 0x0A,表示设备发送广播包的信号强度。 数值范围:±127 dBm。
设备名字,DATA 是名字的字符串,可以是设备的全名,也可以是设备名字的缩写。
缩写的设备名称: TYPE = 0x08
完整的设备名称: TYPE = 0x09
Service Data: Service 对应的数据。
16 bit UUID Service: TYPE = 0x16, 前 2 字节是 UUID,后面是 Service 的数据;
32 bit UUID Service: TYPE = 0x20, 前 4 字节是 UUID,后面是 Service 的数据;
128 bit UUID Service: TYPE = 0x21, 前 16 字节是 UUID,后面是 Service 的数据;
厂商自定义数据: TYPE = 0xFF。厂商数据中
普通用户:可以进行最基础的登陆操作,可浏览图书、按类别查询图书、查看图书的详细信息,还可以注册成为会员。会员:需要填写详细信息(真实姓名、性别、手机号、地址、邮箱等),可浏览图书、按类别查询图书、查看图书的详细信息,在此基础上,还可以订购图书、生成订单、查看订单。管理员:可以浏览图书、按类别查询图书、查看图书的详细信息,需要查看订单、处理订单进行发货处理,同时可以查看、修改个人信息,更新图书信息,如增加、删除图书、更新库存量、修改商品名称、增加图书的属性列等。图书:需要管理员进行编排,按图书编号、书名_mysql网上书店数据库设计
传送门解题思路正解好像是什么前缀和+二分,没想到。。就写了个线段树骗分,结果擦着边过了??线段树中维护一个区间和 and 最小值即可。代码#include<iostream>#include<cstdio>#include<cstring>#include<cmath>using namespac
这个问题出在:tvText.setTextColor(R.color.***)这里的int 值不是资源id而是一个十六进制的值改成下面即可 tvText.setTextColor(ContextCompat.getColor(this,R.color.colorAccent));...
mysql 2003登录报错解决个人小记解决上述报错的方式打开mysql数据库文件夹找到配置文件my.ini,用记事本打开在[musqld]下添加skip-grant-tables之后就可以正常登录了。
[摘要]大学计算机导论论文3500字_大学计算机导论毕业论文范文模板 大学计算机导论论文3500字(一):大学计算机导论课程教学改革探索论文 [摘要]大学计算机导论课程是我校面向所有专业学生开设的第一门计算机类公共基础课程。如何更好地提升大学计算机导论课程的教学质量和落实新形势下人才培养的需求?我们应该从课程教学内容的优化整合、实验教学内容的重新设计和考核方式的转变等方面,进行教学改革探索。通过改..._计算机导论论文大一
贝叶斯推理是统计学中的一个主要问题,在许多机器学习方法中也会遇到。例如,用于分类的高斯混合模型或用于主题建模的潜在狄利克雷分配都是在拟合数据时需要解决此类问题的图形模型。
参考rcan的程序在utils.py添加import torchimport mathimport osfrom functools import reduceimport numpy as npimport imageio as miscimport timeimport datetimeimport torch.optim as optim#以上import哪个有用不知道,懒得试 全复制过来加载了class checkpoint(): def __init__(se_ckp.write_log
当按键按得比较快的时候,这里出现了两次中断值,也即产生了抖动。这里产生了“抖动”,按键是机械开关,按下松开时里面的金属弹片可能抖动了好几次。这种抖动产生了多次“脉冲”导致多次中断。方法:使用定时器来防抖动。定时器有两个概念:① 超时时间:② 时间到了之后的“处理函数”。可以在中断处理中,如定时 10ms 后处理确定按键值上报。之后再产生中断:在中断中加定...
ylbtech-杂项:MIME(多用途互联网邮件扩展类型)百科MIME(Multipurpose Internet Mail Extensions)多用途互联网邮件扩展类型。是设定某种扩展名的文件用一种应用程序来打开的方式类型,当该扩展名文件被访问的时候,浏览器会自动使用指定应用程序来打开。多用于指定一些客户端自定义的文件名,以及一些媒体文件打开方式。它是一个互联网..._杂项 邮件码
基于 Spring Web Flow 2.4.5包括 Web Flow本身配置 与Spring MVC集成的配置_web-flow
最新iOS苹果手机迅雷下载安装(Beta)内测企业版当你打开此文章时,你将获得全设备最好用的迅雷!迅雷是苹果不然安装的APP,早就在商店中下架,迅雷借助企业版证书苟活,但苹果依然不会放过,扫到挂迅雷的证书就直接没了,然后大家就会出现未信任打不开迅雷的情况,这时再去信任也没用了,提取文件后删除重下吧。为方便大家,在此给大家专门做了一个iOS迅雷的工具,可以保证大家永久使用到迅雷!到攻重浩:【智网教派...
一、步骤1.引入依赖npm install html2canvas--savenpm install jspdf --save2.在utils文件下创建新文件。可命名为htmlToPdf.js代码如下(示例):// 导出页面为PDF格式import html2Canvas from 'html2canvas'import JsPDF from 'jspdf'export default { install(Vue, options) { Vue.pro..._页面设置a4 vue