2017-02-01 6 views
2

Я сейчас разрабатываю приложение BLE в iOS. В моем приложении мне нужно реализовать протокол сегментации для отправки больших данных с использованием BLE. Мое приложение должно иметь центральную роль.[iOS] [BLE] Получить переговоры MTU

Моя проблема в том, что я не могу получить MTU для переговоров. Я могу получить maximumWriteValueLength моего периферийного устройства, но он больше моего и не может найти максимальную длинуWriteValueLength моего центрального объекта.

Кто-нибудь знает способ найти MTU для переговоров или способ доступа к объекту CBCentral моего CBCentralManager?

+0

Я не считаю, что вы можете что-либо сделать с mtu на iOS. Он ограничен 20 байтами – Paulw11

+0

@ Paulw11 Я думаю, что вы правы, я ничего не могу сделать с MTU на iOS, но я надеюсь, что у кого-то есть идея по этому вопросу. Около 20 байт, которые вы мне скажите, я ограничен, я не согласен с вами. Я уже работаю с iOS BLE и paquet размером 150 байт. Я считаю, что ограничение не может превышать 155 байт. Но для этого приложения, которое будет работать на iOS и Android, я бы нашел способ не ограничивать мой MTU, потому что у iOS и Android нет таких же ограничений. –

ответ

0

Я отвечу людям с одинаковой проблемой.

Прямо сейчас (февраль 2017 г.) MTU iPhone в периферийной роли всегда 158. Итак, что я нашел в коротком решении (просто чтобы сделать некоторый тест), сравнить Центральный MTU с 158 и взять меньший , Для решения более стабильной периферии будет записываться размер MTU внутри определенной характеристики, которую я буду читать после подключения.

3

iOS автоматически запускает MTU при подключении.

устройств под управлением IOS < 10 будет запрашивать размер MTU из 158. новых устройств, работающих под управлением IOS 10 будет запрашивать размер MTU на 185.

Предполагая, что устройство, которое вы подключены к опорам этих размеров, то есть то, что вы должны увидеть.

Вы должны быть в состоянии определить максимальный размер полезной нагрузки, оговоренный, глядя на собственность maximumUpdateValueLength объекта CBCentral. (Обратите внимание, что это будет на 3 байта меньше, чем ATT MTU, поскольку это накладные расходы для уведомления/индикации ATT)

+0

Я полностью согласен с вами, когда iPhone находится в периферийном режиме, вы можете получить согласованный MTU, добавив 3 к свойству maximumUpdateValueLength 'CBCentral'. Но мой вопрос состоял в том, что iPhone находится в центральном режиме ... –

+0

Когда мой ipod подключен как периферия моего iPad (iOS10), я получаю 74 для 'maximumUpdateValueLength'. Являются ли эти значения фактически устройствами, а также версией ОС? –

+0

@ Хари Карам Сингх - да, обычно центральная сторона запрашивает значение по умолчанию, а периферийная сторона может согласиться или не согласиться, в зависимости от конкретной реализации BLE. Поэтому вы никогда не сможете быть на 100% уверенным, и не рекомендуется использовать жестко закодированные значения MTU, если вы не собираетесь общаться только с одним конкретным видом периферийного/центрального со 100% известным фиксированным размером MTU. – JustAMartin

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