Отправка более 20 байт по BLE

#c# #winapi #windows-runtime #bluetooth-lowenergy #bluetooth-gatt

#c# #winapi #windows-среда выполнения #bluetooth -низкое энергопотребление #bluetooth-gatt

Вопрос:

Еще раз я прошу поддержки по поводу низкого энергопотребления BlueTooth. Моя цель — отправить 79 байт через BLE. Отправляющим устройством является TI CC2650LP, а принимающим устройством является компьютер Win10, использующий WinRT API. После некоторых исследований я обнаружил, что лучшим решением является разделение сообщения на 20-байтовые фрагменты и отправка их с небольшой задержкой по той же характеристике. Похоже, это не проблема. Теперь мой вопрос таков: как я могу получить эти разделенные данные и снова объединить их в сообщение объемом 79 байт? Есть ли способ просто подождать, пока все не будет передано? Как я могу заставить код знать, когда начинать и когда останавливаться? Мой код для чтения одной характеристики работает с событиями с переменными значениями и средством чтения данных:

         public void currentSelectedCharacteristic_ValueChanged(GattCharacteristic sender, GattValueChangedEventArgs args)
    {
        var reader = DataReader.FromBuffer(args.CharacteristicValue);
        reader.ReadBytes(ret);           
    }
  

Кажется, что в Интернете очень мало документации по этой проблеме, и большая ее часть предназначена для устройств Android.

Другим подходом было бы использование 4 разных характеристик, ожидание 1 уведомления и одновременное их считывание. Но часть чтения в этом сценарии кажется сложной, потому что событие valuechanged срабатывает только для 1 характеристики

Комментарии:

1. Что это за язык программирования? Это, конечно, не C .

2. Вы абсолютно правы, это C #. Моя ошибка.

Ответ №1:

Если значение слишком длинное, чтобы его можно было прочитать за один раз, большинство библиотек позволяют отправлять смещение вместе с дескриптором в запросе, чтобы характеристическое значение можно было считывать последовательными порциями. Может потребоваться несколько пар запрос / ответ, в зависимости от длины считываемого значения атрибута.

Я не знаком с API WinRT или TI.

Быстрый просмотр документации WinRT, кажется, показывает, что класс GattReadRequestedEventArgs имеет класс GattReadRequest, который обладает свойством, называемым offset. Так вы узнаете, какой это фрагмент.

На стороне TI, похоже, это GATT_WriteLongCharValue() и GATT_ReadLongCharValue()

Комментарии:

1. @ ukBaz Функция GATT_WriteLongCharValue(), похоже, это то, что я искал. Существует очень мало документации о том, как работает вызов функции в деталях, поэтому я собираюсь спросить здесь: как мне получить connhandle и параметры задачи? Для параметра задачи я видел, что используется ‘selfEntity’. Это универсально для использования? Фрагмент кода тоже был бы хорош

2. Я бы ожидал, что вы получите дополнительную помощь на форуме поддержки TI: e2e.ti.com/search?q=GATT_WriteLongCharValueamp;category=forum