我正在传输一个最大长度(31B)的广告包。使用3个强制字节的广告标志,似乎我应该能够传输我自己的28个字节,但当我试图发送超过26个字节时,它就不起作用了——它看起来根本就不是广告。不可思议的是,当我收到26 b广告DA14580配置为中心,我可以看到我的数据(\ x06 \ x01)然后空间为两个字节的缓冲区,但当我增加广告27或28字节我一无所获。
这是我的26B广告:
#定义USER_ADVERTISE_DATA " \ x19 \ xff \ x31 \ x01 \ x97 \ x30 \ xcf \ x43 \ xea \ x36 \ x00 \ x12 \ x34 \ x56 \ x78 \ x92 \ x01 \ x02 \ x02 \ x02 \ x02 \ x00 \ x00 \ x00 \ x06 \ x01”
为了尝试28B,我添加了两个'ff'字节(并增加了字段长度字节):
#定义USER_ADVERTISE_DATA " \ x1b \ xff \ x31 \ x01 \ x97 \ x30 \ xcf \ x43 \ xea \ x36 \ x00 \ x12 \ x34 \ x56 \ x78 \ x92 \ x01 \ x02 \ x02 \ x02 \ x02 \ x00 \ x00 \ x00 \ x06 \ x01 \ xff \ xff”
设备:
嗨mark.bloechl,
2个方案已经检查过了,工作正常,请给我更多的信息什么是“配置为一个中心”?你把DA14580设为中心?
谢谢,
STS_DIalog。
你好,
我有2个DA14580:一个配置为外围设备,一个配置为中心设备。两者的代码都取自DSPS示例项目。当我试图从外设配置的单元发布超过26个用户字节,并在中央配置的单元接收它时,它不起作用。当我在26字节或以下时,它会。这两个实例之间的唯一区别是USER_ADVERTISE_DATA的大小。当我将广告长度设置为>26B时,我根本不相信这个单元在做广告,因为我在手机上也看不到它。
谢谢!
马克
嗨,马克,
DA14580堆栈自动为广告数据加上3个字节的标志(length+type+flags = 3个字节),然后只剩下28个字节。对于剩余的数据,您至少需要2个字节来指示有效负载长度和发布数据类型。这就剩下26字节的有效负载。
通过实现SDK内部的工作,可以防止堆栈添加3个字节的标志,但蓝牙规范规定,当外设可连接时,必须在广告中有标志。如果你真的需要控制所有31字节在你的广告,我可以提供变通。
/ MHv
长度和数据类型字段包含在我的广告字符串中(例如,当我说26字节是1B长度+ 1B类型+ 24B有效载荷,同样的28字节字符串)。
很抱歉没有仔细阅读你的帖子。
我只是将您的28字节字符串复制到SDK504的一个干净的提取中(空的外围模板项目),它会毫无问题地发布整个字符串。
///广告服务数据
///广告类型标志,不得在广告数据中设置
#定义USER_ADVERTISE_DATA " \ x1b \ xff \ x31 \ x01 \ x97 \ x30 \ xcf \ x43 \ xea \ x36 \ x00 \ x12 \ x34 \ x56 \ x78 \ x92 \ x01 \ x02 \ x02 \ x02 \ x02 \ x00 \ x00 \ x00 \ x06 \ x01 \ xff \ xff”
///广告数据长度-最大28字节,预留3字节设置
#定义USER_ADVERTISE_DATA_LEN (sizeof (USER_ADVERTISE_DATA) 1)
/ MHv