2013-06-07 4 views
14

Может ли приложение iOS (iPhone или iPad) иметь центральный Bluetooth (BTLE) центральный ящик и периферийные объекты менеджера одновременно?Может ли iOS выполнять центральную и периферийную работу в одном приложении одновременно?

Могут ли они работать как асинхронно, так и при необходимости использовать основной поток приложений (переключение туда и обратно).

Sharing концептуального алгоритм будет: отключить периферийный менеджером, включите центральный менеджер и сделать основные функции, и затем, отключить центральную MGR, включите периферический MGR, и сделать периферийные функции (то есть, отправлять автоматические nofications, и ждать и реагировать на удаленные характерные команды), повтора ...

СПРАВОЧНЫХ окровавленные детали: у нас есть локальная система с несколькими IOS устройств и несколькими устройствами без IOS, которые должны между сообщаться по BTLE. Не-iOS-устройства используют чип Broadcom BCM20732 Bluetooth LE. Но аппаратное обеспечение еще не готово, поэтому я использую устройства iOS для эмуляции не-iOS, для чего требуется одновременная центральная и периферийная функциональность, т.е. 1. действовать как центральное место для периодического опроса нескольких других не-iOS-устройств в системе. 2. действовать как периферийное, чтобы отвечать на запросы данных с устройств пользовательского интерфейса iOS.

+0

Я разрабатываю игровое приложение, и два подключенных устройства BTLE должны автоматически переключаться в качестве центрального и периферийного, любые предложения для этого? –

ответ

13

У меня это работает. Я только начал с Apple «BTLE центральный периферийный перевод», а затем сначала делит ошибку -35 db, которую он имеет (поиск «-35», а затем удалить if() {return}), после чего я объединил как central.m и периферийное устройство.m в один файл UIViewController .m, добавили UISwitch для выбора одного из двух UUID службы и изменили периферийного отправителя, чтобы автоматически увеличивать текстовое поле (после его инициализации до ASCII '0').

У меня было два iPad mini, каждый из которых отправил увеличивающееся число на другую сторону. Он поднялся до 900 переводов, а затем повесил. Но я видел, что Apple «BTLE c p transfer» всегда висит через несколько минут, требуя перезагрузки iPad для продолжения. Я закончил приложение как на iPad, так и на велосипеде, перезапустил приложение, и они получили до 1600 приращений, а затем повесили.

Чтобы решить проблему, я добавлю управление ресурсами, чтобы предотвратить одновременное подключение центральных и периферийных менеджеров по рекомендации Abo.

+4

Обновление в августе 2013 года: связь между несколькими устройствами iOS, каждая из которых использует как центральную, так и периферийную работу без ошибок. Провели тесты на долголетие, и он не прерывается после нескольких часов работы. СОВЕТ. Я делаю небольшую задержку перед переключением с центрального на периферийное и наоборот, в противном случае могут возникнуть проблемы. –

+2

TIP2: NSLOG() и printf() в вашем коде. События обратного вызова Bluetooth раковины вашего корабля. Создайте функцию буферизации, которая хранит эти сообщения, а затем выпустите основной поток. –

+4

Я ошибся: NSLog() и printf() в рамках событий обратного вызова. –

5

Да, они могут, но если ваш телефон сейчас находится в периферийном режиме и подключен, вы должны убедиться, что он отключается перед переключением в центральный режим и пытается подключиться к другим устройствам и наоборот.

+0

Но периферийное устройство не имеет команды для отключения. Только центральный может отключиться. Итак, центры должны всегда отключаться от периферийных устройств, которые будут проводить другие центры? –

+0

Да, вы должны как-то отправить сообщение на центральное устройство, чтобы отключиться. – Aboelseoud