Невозможно получить огромные данные от периферийных устройств в передаче BLE, с QT 5.14 в Ubuntu 18.04 - PullRequest
0 голосов
/ 24 февраля 2020

Основной выпуск : при получении больших данных в различных чанках. SIGNAL QLowEnergyService :: характеристикаChanged не излучает после получения нескольких порций данных. Поэтому я не могу получить полные данные. Ниже приведены подробности:

Сценарий: Центральный и периферийный случай [Я ищу центральный код]. Периферийное устройство - это мобильное устройство на базе IOS / Android. Центральный ноутбук Linux. [Bluetooth HCI версии 4.2] Central подписался на характеристики c (Свойство: Уведомить) Периферийного устройства. Общий объем передаваемых данных составляет 171520 байт (приблизительно) от периферийных устройств. Размер пакета данных составляет 91 [1 байт заголовка, 90 байт данных].

Проблема: Периферийное устройство обновляет свои характеристики c с небольшими данными.
Центральный получает пакеты данных. Поэтому после получения нескольких пакетов данных (иногда 30, 50 или 100) от периферийного устройства,
Клиент не получает от него все пакеты данных.

Проблема в QT:

    /*-------------------------------------
              CLIENT SIDE CODE SNIPPET
     --------------------------------------*/

    /*
     *  Device: a Class, which handles BLE communication.
     *  m_service: is pointer of type QLowEnergyService
     */
--> connect(m_service, &QLowEnergyService::characteristicChanged, this, &Device::CharatValueUpdated);


    /*
     *  This function gets called when, Peripheral sends data
     */
--> void Device::CharatValueUpdated(const QLowEnergyCharacteristic &c, const QByteArray &value)
    {
        // Do nothing to avoid overhead
        // ...................
        // ...................
    }

fn CharatValueUpdated (QLowEnergyCharacteristic &, QByteArray &) - это моя функция обратного вызова / слота, когда Peripheral обновляет свои характеристики c, эта функция вызывается, и клиент получает обновленные данные в параметре "value".

ISSUE : после нескольких вызовов fn "CharatValueUpdated ()" не вызывается.

его QT, который вызывает этот fn, когда получает данные с периферийной стороны.

Сигнал "QLowEnergyService :: характеристикаChanged" срабатывает случайным образом иногда через 30, 50 или 150 и внезапно прекращает излучать этот сигнал без полной передачи данных.

Примечание : тот же исходный код отлично работает на QT Windows 10.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...