2016-02-10 2 views
3

Я пытаюсь рекламировать маяк Eddystone, но мой код не в advertisementData.Data с ArgumentException:BluetoothLEAdvertisementDataSection (ArgumentException)

Значение не попадает в ожидаемый диапазон.

Любые идеи о том, что происходит?

// ... 
using (var memoryStream = new MemoryStream()) 
{ 
    byte messageLengthByte = Convert.ToByte(message.Length); 
    memoryStream.WriteByte(messageLengthByte); 

    memoryStream.Write(message, 0, message.Length); 

    fullMessage = memoryStream.ToArray(); 
} 

while (fullMessage.Length < 32) 
{ 
    byte[] newArray = new byte[fullMessage.Length + 1]; 
    fullMessage.CopyTo(newArray, 0); 
    newArray[fullMessage.Length] = 0x00; 
    fullMessage = newArray; 
} 

var writer = new DataWriter(); 
writer.WriteBytes(fullMessage); 

var advertisementData = new BluetoothLEAdvertisementDataSection(); 
advertisementData.Data = writer.DetachBuffer(); // Error! 
publisher.Advertisement.DataSections.Add(advertisementData); 
publisher.Start(); 

ответ

3

Скорее всего, вы пытаетесь вписаться в большее количество байтов, чем позволяет пакет BLE. Максимальный размер составляет 32 байт, но это в том числе:

  • 3 байта для секции данных «флаги», которые я считаю является обязательным и может быть автоматически установлен в ОС Windows 10 BLE API
  • для каждой дополнительной секции , 1 байт для длины раздела и 1 байт для типа раздела

Если вы передаете только один раздел, который оставит вам 27 байт для фактической полезной нагрузки этого раздела.

Смежные вопросы