BTLE ServiceData всегда имеет значение null.C#

Место общения программистов C#
Ответить Пред. темаСлед. тема
Anonymous
 BTLE ServiceData всегда имеет значение null.

Сообщение Anonymous »

Я работаю над реагирующим приложением для Android, используя response-native-ble-plx для поддержки BTLE, и Windows 10, используя .NET API Windows.Devices.Bluetooth.GenericAttributeProfile для сервера/периферийного устройства GATT. >
Когда я добавляю какие-либо «ServiceData» к рекламным полезным данным в службе Windows GATT, полезные данные «serviceData» сканируемого устройства всегда имеют значение null в реактивном клиенте.
На сервере Windows 10, если свойство GattServiceProviderAdvertisingParameters.ServiceData не имеет значения NULL, статус объявления службы — GattServiceProviderAdvertisementStatus.StartedWithoutAllAdvertisementData. (Если для параметра ServiceData установлено значение null, это будет GattServiceProviderAdvertisementStatus.Started, как и ожидалось).
Используя приложение Silicon Labs "EFR Connect" в Android, он также не показывает никаких служебных данных для устройства в рекламном пакете.
Используя WireShark с BTVS для проверки пакетов на компьютере с Windows, он показывает Байты служебных данных, и контроллер показывает ответ «Успех».
Вот код, в котором я настраиваю служебные данные в Windows:

Код: Выделить всё

...
GattServiceProviderAdvertisingParameters advParameters = new GattServiceProviderAdvertisingParameters
{
IsConnectable = _peripheralSupported,
IsDiscoverable = true,
ServiceData = GetServiceData().AsBuffer()
};

_serviceProvider.AdvertisementStatusChanged += ServiceProvider_AdvertisementStatusChanged;
_serviceProvider.StartAdvertising(advParameters);
...

private byte[] GetServiceData()
{
var flagsData = new List { 0xFF, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 };
flagsData.AddRange(new List(Encoding.ASCII.GetBytes("ABCDEFGHIJKLMNOP")));
return flagsData.ToArray();
}

Вот код в реагирующем сканере:

Код: Выделить всё

  public scanDevices(
timeoutSeconds: number,
listener: (error: string | null, scannedDevice: IPhoenixDevice | null) => void,
): void {
console.log('Entered PhoenixDeviceManager.scanDevices');

this.isScanning = true;
try {
this.scannedDevices.length = 0; // Clear array of devices

this.bleManager.startDeviceScan(this.serviceUUIDs, null, (error, scannedDevice) => {
console.log('In device scan callback');

if (error) {
console.warn(error);
listener(`Error message: ${error.message}, reason: ${error.reason}`, null);
}

if (!scannedDevice) {
console.log('scannedDevice is null');
} else if (!this.scannedDevices.some((d) => d.id === scannedDevice.id)) {
this.scannedDevices.push(scannedDevice);
listener(null, new PhoenixDevice(scannedDevice.id, scannedDevice.name));
console.log(
`Device discovered, id: ${scannedDevice.id}, name: ${scannedDevice.name}, localName: ${scannedDevice.localName}, serviceData: ${scannedDevice.serviceData}`,
);
}
});

const timeoutMs = timeoutSeconds * 1000;

// stop scanning devices after specified number of seconds
setTimeout(() => {
this.stopScanning();
}, timeoutMs);
} catch (error) {
console.error(error);
this.stopScanning();
}
}
Вот трассировка WireShark, запущенная в Windows 10, показывающая пакет, содержащий ServiceData (и успешный ответ):

Код: Выделить всё

Frame 499: 84 bytes on wire (672 bits), 84 bytes captured (672 bits) on interface TCP@127.0.0.1:24352, id 0
Bluetooth
Bluetooth HCI H4
Bluetooth HCI Command - LE Set Extended Advertising Data
Command Opcode: LE Set Extended Advertising Data (0x2037)
Parameter Total Length: 80
Advertising Handle: 0x02
Data Operation: Complete scan response data (0x03)
Fragment Preference: The Controller should not fragment or should minimize fragmentation of Host data (0x01)
Data Length: 76
Advertising Data
Flags
Length: 2
Type: Flags (0x01)
000. .... = Reserved: 0x0
...1 .... = Simultaneous LE and BR/EDR to Same Device Capable (Host): true (0x1)
.... 1... = Simultaneous LE and BR/EDR to Same Device Capable (Controller): true (0x1)
.... .0.. = BR/EDR Not Supported: false (0x0)
.... ..1.  = LE General Discoverable Mode: true (0x1)
.... ...0 = LE Limited Discoverable Mode: false (0x0)
16-bit Service Class UUIDs
Length: 3
Type: 16-bit Service Class UUIDs (0x03)
UUID 16: Device Information (0x180a)
128-bit Service Class UUIDs
Length: 17
Type: 128-bit Service Class UUIDs (0x07)
Custom UUID: caecface-e1d9-11e6-bf01-fe55135034f0 (Unknown)
Service Data - 128 bit UUID
Length: 50
Type: Service Data - 128 bit UUID (0x21)
Custom UUID: caecface-e1d9-11e6-bf01-fe55135034f0 (Unknown)
Service Data: ffff0000000000000000000000000000004142434445464748494a4b4c4d4e4f50
[Response in frame: 500]
[Command-Response Delta: 1.889ms]

Frame 500: 7 bytes on wire (56 bits), 7 bytes captured (56 bits) on interface TCP@127.0.0.1:24352, id 0
Bluetooth
Bluetooth HCI H4
Bluetooth HCI Event - Command Complete
Event Code: Command Complete (0x0e)
Parameter Total Length: 4
Number of Allowed Command Packets: 1
Command Opcode: LE Set Extended Advertising Data (0x2037)
0010 00.. .... .... = Opcode Group Field: LE Controller Commands (0x08)
.... ..00 0011 0111 = Opcode Command Field: LE Set Extended Advertising Data (0x037)
Status: Success (0x00)
[Command in frame: 499]
[Command-Response Delta: 1.889ms]
Я также пробовал использовать точный код в этом примере, и возникла та же проблема:
https://github.com/ProH4Ck/treadmill-bridge/ blob/98e683e2380178319972af522d9251f44350a448/src/TreadmillBridge/Services/VirtualTreadmill/VirtualTreadmillService.cs#L90
Кто-нибудь знает, в чем может быть проблема?

Подробнее здесь: https://stackoverflow.com/questions/716 ... lways-null
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение
  • Как подключиться к устройству Bluetooth BTLE на Raspberry Pi?
    Anonymous » » в форуме Python
    0 Ответы
    48 Просмотры
    Последнее сообщение Anonymous
  • Время между сканированием BTLE и трансляцией в Android
    Anonymous » » в форуме Android
    0 Ответы
    13 Просмотры
    Последнее сообщение Anonymous
  • Пригодность NRF24l01 для рекламы BTLE
    Anonymous » » в форуме Android
    0 Ответы
    12 Просмотры
    Последнее сообщение Anonymous
  • Время между сканированием BTLE и трансляцией в Android
    Anonymous » » в форуме Android
    0 Ответы
    7 Просмотры
    Последнее сообщение Anonymous
  • EF Core: Почему один конец моего однозначного отношения, допускающего значение NULL, всегда имеет значение NULL?
    Anonymous » » в форуме C#
    0 Ответы
    38 Просмотры
    Последнее сообщение Anonymous

Вернуться в «C#»