我正在尝试在c#中的UWP应用中发布多个播放广告。我可以将2个制造商数据添加到一个发布者,这些数据将被传输。但是,如果我想发布更多数据是不可能的。这甚至可能吗?
到目前为止的示例代码:
var publisher = new BluetoothLEAdvertisementPublisher();
publisher.Advertisement.ManufacturerData.Add(CreateData("Test");
publisher.Advertisement.ManufacturerData.Add(CreateData("AnotherTest");
publisher.start();
BluetoothLEManufacturerData CreateData(string data)
{
var dataWriter = new DataWriter();
dataWriter.WriteInt32(data.Length);
dataWriter.WriteString(data);
return new BluetoothLEManufacturerData(0xFFFE, dataWriter.DetachBuffer());
}
试图添加另一个制造商数据,但我得到一个例外 尝试了多个蓝牙适配器,但Windows似乎没有启动第二个适配器。 还尝试了多个Windows.Devices.Bluetooth.Advertisement.BluetoothLEAdvertisementPublisher,但也没有做到这一点
答案 0 :(得分:1)
我们可以将多个制造商数据放在一个BluetoothLE广告中。但请注意,广告有效负载的最大长度为 31字节。
参考广告和扫描响应数据格式(蓝牙规范4.0版[第3卷]第375页)
广告数据和扫描响应数据的格式如图所示 11.1。数据由重要部分和非重要部分组成。该 重要部分包含一系列AD结构。每个AD结构都应该 具有一个八位字节的长度字段,其中包含长度值和数据 长度八位字节的字段。数据字段的第一个八位字节包含AD类型字段。数据字段中剩余长度 - 1个八位字节的内容取决于AD类型字段的值,称为AD数据。非必要部分在必要时扩展广告和扫描响应数据 包含全零八位字节。
BluetoothLEManufacturerData是AD类型为0xFF
的AD结构之一
对于您的第一个制造商数据("idb[splitline.pop(1)] = splitline")
,其长度为1(长度)+ 1(类型)+ 2(公司ID)+ 8(您的特定数据),即12个字节。对于第二个制造商数据,其长度为19(1 + 1 + 2 + 15)字节。利用这两个制造商数据,广告有效载荷已经是31个字节。当您尝试添加其他制造商数据时,这就是您获得例外的原因。实际上,如果您在日期中添加一个字符,例如使用CreateData("Test")
而不是CreateData("Test=")
,则还会出现CreateData("Test")
错误。
请确保缓冲区长度符合广告有效负载。只要长度小于31个字节,就可以放置多个制造商数据。
Invalid advertisement payload detected