Как я могу рекламировать через BLE 100 байт?

Как я могу рекламировать через BLE 100 байт?
SDK> = 26
Я могу рекламировать 20 байт, но когда я рекламирую более 20 байт, я получаю исключение.

Я уже читал эти статьи:
Android: отправка данных> 20 байт на BLE
Как отправить более 20 байт данных в android?

Как я правильно понимаю, упомянутые ссылки не являются решением для рекламы, но для P2P-соединений, я прав?

Мой код:

     private fun startAdvertising() {
        goForeground()

        Log.d(tag, "Service: Starting Advertising")

        if (mAdvertiseCallback == null) {
            val settings = buildAdvertiseSettings()
            mAdvertiseCallback = SampleAdvertiseCallback()

            if (mBluetoothLeAdvertiser != null) {
                mBluetoothLeAdvertiser!!.startAdvertising(settings, data, mAdvertiseCallback)
            }
        }
    } 

private fun buildAdvertiseData(): AdvertiseData {
        val advertisingData = AdvertiseData.Builder()
        val uuid = BeaconWiliot.manufactureUuid
        advertisingData.addServiceUuid(uuid)
        advertisingData.setIncludeDeviceName(false)
        advertisingData.addServiceData(uuid, ByteArray(20))
        return advertisingData.build()
    }

person Ponomarenko Oleh    schedule 05.02.2019    source источник
comment
возможно потому, что рекламный пакет не поддерживает более 20 байтов пользовательских данных.   -  person Vladyslav Matviienko    schedule 05.02.2019
comment
Вам нужно рекламировать 100 байт в одном пакете или, возможно, рекламировать 100 байт сразу, но в нескольких пакетах?   -  person Valentin    schedule 05.02.2019
comment
@Valentin Возможна реклама в нескольких пакетах, знаете дорогу?   -  person Ponomarenko Oleh    schedule 05.02.2019
comment
Вы путаете рекламу (процедура уровня GAP) с пакетами GATT (процедура уровня GATT). Пакеты рекламы / сканирования всегда имеют длину 31 байт (спецификация Bluetooth 4.2, GAP, РЕКЛАМА И ДАННЫЕ ОТВЕТА НА СКАНИРОВАНИЕ). Пакеты данных GATT могут быть больше, если изменить их MTU. ФОРМАТ).   -  person bavaza    schedule 06.02.2019


Ответы (1)


Ты не можешь.

Максимальная длина рекламного пакета - 31 байт. Дополнительно вы можете реализовать ответ на сканирование.
Размер MTU пакетов BLE согласовывается после установления соединения и не имеет ничего общего с размером объявления.

Этот ответ сканирования похож на расширение данных рекламы:
Ваше устройство транслирует рекламу. Если сканирующее устройство заинтересовано, оно может запросить ответ на сканирование. Ответ на сканирование может содержать более или менее те же данные, что и в рекламном объявлении, а также может иметь 31 байт.
Как правило, отправка данных в ответ на сканирование происходит немного медленнее, так как должен быть сделан новый запрос. С точки зрения пользователя это почти не имеет значения.

Всего это составляет 62 байта. Обычно эти 62 байта содержат такие данные, как имя и некоторые флаги, такие как «BLE_FLAGS_GENERAL_DISCOVERABLE_MODE» (имя зависит от реализации) плюс некоторые служебные данные для обозначения типа и длины данных.

(Кстати: я не знаю, почему 31 и обычные пакеты 20 байт полезной нагрузки ...)

Конечно, вы можете изменять рекламные данные во время выполнения и передавать новые данные в каждом рекламном объявлении. Сканирующее устройство пропустит большую часть рекламы, поэтому вы можете регулярно выполнять ретрансляцию и т. Д. И т. Д. Но это не то, для чего предназначена реклама.

Как я правильно понимаю, упомянутые ссылки не являются решением для рекламы, но для P2P-соединений, я прав?

да. В P2P-соединении вы можете фрагментировать данные на несколько пакетов или, что лучше, увеличить размер MTU для отправки более крупных блоков данных.

person maze    schedule 07.02.2019
comment
... вы можете изменять рекламные данные во время выполнения и передавать новые данные в каждом рекламном объявлении. Сканирующее устройство пропустит большую часть рекламы, поэтому вы можете регулярно осуществлять ретрансляцию и т. Д. И т. Д. - вы можете привести какой-нибудь пример? Потому что мне нужно отправить 100 пустых байтов, и не имеет значения, получат ли это устройства. Другое решение может быть таким: Начать рекламу 20 байт .. тайм-аут в 1 мс ... Начать рекламу 20 байт ... тайм-аут в 1 мс ... Сделать это 5 раз, а затем подождать порог 20 секунд. Но я не знаю, как это реализовать. - person Ponomarenko Oleh; 07.02.2019
comment
Извините, я мог бы сказать вам для контроллеров CSR ... Как вы регистрируете данные рекламы? Таким же образом вы можете время от времени регистрировать новые данные. Обратите внимание, что реклама идет по нескольким каналам один за другим. И телефон одновременно слушает только один канал. Оба будут время от времени попадать в один и тот же канал. Вот почему большая часть рекламных данных будет потеряна. - person maze; 08.02.2019