IOS Bluetooth в двух режимах; подключите BLE (GATT) к уже подключенной стереогарнитуре BR/EDR (A2DP/HFP) одновременно
Я разрабатываю стереогарнитуру с Bluetooth, используя классические профили (HFP, A2DP, AVRCP), как можно было бы ожидать стереогарнитуру Ina. Однако я хочу развернуть приложение для удаленного управления для iOS и использовать его одновременно с другими классическими ссылками, но двухрежимный чипсет, с которым я работаю в своем дизайне, не ведет себя так, как я ожидал;
Гарнитура настроена как периферийная, позволяя устройству iOS действовать как центральное. Таким образом, периферийное устройство рекламирует свои службы BLE (с моими конкретными 128-битными UUID), и все это хорошо. Я могу просматривать периферию из любого центра, но только тогда, когда я не связан с классическими профилями (например, пока не потоковое аудио).
Мое устройство, похоже, не может рекламировать BLE, при подключении к HFP и/или A2DP! Тем не менее, я видел демонстрации того же чипсета, который действует как центральный BLE, сканирует и подключается к другим периферийным устройствам BLE, одновременно передавая аудио через A2DP. Однако в этой настройке устройство действовало как приемник A2DP, подключенный к iPhone, при сканировании/подключении через BLE к третьему устройству, действующему как периферийное устройство BLE. Следовательно, это не точка-точка с классическим и интеллектуальным Bluetooth на одно и то же устройство.
Существует ли двухрежимное ограничение, что нельзя действовать как периферийное, поддерживая/подключая профили Bluetooth Classic? И в этом случае поддерживается только центральный режим?
FYI, я использую чипсет CSR 8670.
UPDATE
Добавлен новый ответ. Мои извинения за то, что я не уточнил/не очистил свой предыдущий ответ до сих пор - время летит!
Ответы
Ответ 1
Вы учитесь, пока живете, я полагаю, и этот вопрос ответ НЕ, что он не поддерживается, о котором я говорил ранее (на основе того, что, как я думал, я знал).
Краткий и чистый ответ на двухрежимную и минигарнитуру на CSR-чипсетах просто заключается в том, что это было ограничение в стеке Bluetooth CSR на более ранних SDK.
Bluetooth SIG никогда не поддерживал двухрежимный режим как периферийный, будучи подключенным через классические ссылки на одно и то же устройство. Напротив, это явно спецификация. как такая интероперабельность должна выполняться, но это не всегда означает, что все реализации BT-стека там могут иметь такую функциональность.
Следовательно; Использование новейших devtools и новейших прошивок Bluetooth/стеков от CSR позволило решить все проблемы, и двухрежимный режим теперь полностью, и на самом деле довольно красиво я могу добавить, поддерживаемый на чипсетах CSR8670/75.
Ответ 2
Хорошо, после того, как я перейду в спецификации и попытаюсь понять вещи более четко, я нашел ответы, которые я искал, хотя я предпочел бы более оптимистичные ответы...; (
Тем не менее, пусть дойдет до него; спецификация Bluetooth для 4.0 (BLE) говорит, что:
Двухрежимные гаджеты не могут выступать в качестве периферийного устройства BLE и рекламировать его наличие при одновременном подключении в "классическом" Bluetooth, используя BR/EDR.
Кроме того, примеры исходного кода CSR для двухрежимного набора микросхем CSR8670, которые я использую, ведут себя одинаково; Рекламные объявления BLE как периферийные устройства отключены, когда подключен какой-либо классический BT-link. Вместо этого исходный код CSR способствует тому, что устройство должно действовать как центральный BLE вместо этого, позволяя другим периферийным устройствам BLE рекламировать и подключаться к нему, все это полностью выполнимо при потоковой передаче звука (действует как приемник A2DP).
Это не включает мою установку вообще, поскольку
- Центры BLE потребляют больше энергии, чем периферийные устройства BLE, и моему устройству необходимо экономить энергию.
- Двухрежимная комбо-проблема объединения BR/EDR-устройства с периферийными функциями BLE просто переместилась на телефон вместо этого, что не будет работать лучше, поскольку мы не можем ожидать, что Apple (или кто-либо другой) нарушит Спецификация BLE.
Вместо этого рекомендуется, чтобы моя стереогарнитура полностью пропускала BLE и вместо этого использовала GATT над BR/EDR, также известную как реклама через "vanilla", что действительно имеет смысл; Я имею в виду, у меня уже есть настройка ACL-link между двумя устройствами, почему мне нужно использовать какой-либо механизм обнаружения?
Опять же, Bluetooth SIG пригодится,
https://developer.bluetooth.org/TechnologyOverview/Pages/GATT.aspx
GATT и ATT не являются специфичными для транспорта и могут использоваться как в BR/EDR и LE. Однако GATT и ATT обязательны для реализации в LE, поскольку он используется для обнаружения служб
Итак, SIG говорит "да" использовать BR/EDR в качестве транспорта для GATT, но вместо этого возникает вопрос; как я могу получить доступ к этому подключенному устройству BR/EDR из моего iOS-приложения, где типичным сценарием является использование CBCentral для сканирования, обнаружения и подключения к CBPeripheral? Ответ прост; вы не можете, так как iOS 7.0 не поддерживает (пока?) поддержку GATT для BR/EDR;
https://www.bluetooth.org/tpg/showDeclaration.cfm?3A000A5A005C5344535D5414403B0C0D0E2405022413010E57503F202A5A72
Итак, чтобы подвести итог; если вы хотите установить одноранговую связь между двумя двухрежимными Bluetooth-устройствами, используя ОБЩИЕ профили Bluetooth Classic и функции/характеристики Bluetooth Smart, вы должны использовать GATT над BR/EDR, что не подходит для Apple-устройств, но может быть поддержана Android (не знаю, в конце концов, будет приложение для порта Android, но, несмотря на это, для Android это не очень важно, поскольку в худшем случае будет подразумеваться отказ от SPP и простой байтовый протокол для выполнения работы что мне нужно сделать).
Что это. Надеюсь, что я помог кому-то;)
/Маркус
Ответ 3
Я также использую устройство CSR8670.
Он работает. И периферийное устройство BLE, и аудио.
Вы должны использовать ADK 4.0.0 для CSR.
Bluetooth 4.1 и Bluetooth 4.0 отличаются. Для того, что вы сказали о Bluetooth 4.0, правильно, но ваш чип может выполнять Bluetooth 4.1.
4.1 допускает такие соединения.
Я также добавил флаги "Двойной режим" в рекламный пакет.
Существует несколько условий, таких как интервал соединения, по крайней мере, 90 миллисекунд, который рекомендуется, поэтому вы не испортите звук.
Удачи!