簡體   English   中英

UWP應用中的多個ble廣告

[英]Multiple ble advertisements in a UWP app

我正在嘗試在C#的UWP應用中發布多個ble廣告。 我可以將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,但這也不能解決問題

我們可以將多個制造商數據放入一個BluetoothLE廣告中。 但是,請注意,廣告有效負載的最大長度為31個字節

參考廣告和掃描響應數據格式 (藍牙規范版本4.0 [第3卷]第375頁)

廣告數據和掃描響應數據的格式如圖11.1所示。 數據由重要部分和非重要部分組成。 重要部分包含一系列AD結構。 每個AD結構應具有一個八位字節的Length字段,其中包含Length值,以及一個Datalength長度八位字節的數據。 數據字段的第一個八位位組包含AD類型字段。 數據字段中剩余的長度-1個八位位組的內容取決於AD類型字段的值,稱為AD數據。 非重要部分在必要時擴展廣告和掃描響應數據,並且應包含全零的八位位組。 在此處輸入圖片說明

BluetoothLEManufacturerData是AD類型為0xFF的這些AD結構之一。
在此處輸入圖片說明

對於您的第一個制造商數據CreateData("Test") ,其長度為1(長度)+1(類型)+2(公司ID)+ 8(您的特定數據),即12個字節。 對於第二個制造商數據,其長度為19(1 + 1 + 2 + 15)字節。 有了這兩個制造商數據,廣告有效載荷已經是31個字節。 這就是為什么當您嘗試添加另一個制造商數據時會出現異常的原因。 實際上,如果您在日期中添加一個字符,例如使用CreateData("Test=")而不是CreateData("Test") ,則還會收到Invalid advertisement payload detected錯誤。

因此,請確保緩沖區長度可以適合廣告有效負載 您可以放置​​多個制造商數據,只要其長度小於31個字節即可。

var publisher = new BluetoothLEAdvertisementPublisher();
publisher.Advertisement.ManufacturerData.Add(CreateData("T"));
publisher.Advertisement.ManufacturerData.Add(CreateData("A"));
publisher.Advertisement.ManufacturerData.Add(CreateData("S")); 
publisher.start();

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM