iOS Bluetooth dual-mode; подключите BLE (GATT) к уже подключенной стереогарнитуре BR/EDR (A2DP/HFP) одновременно
Я разрабатываю стереогарнитуру с Bluetooth, используя классические профили (HFP, A2DP, AVRCP), как и следовало ожидать, стереогарнитуру Ina. Тем не менее, я хочу развернуть приложение дистанционного управления для iOS и использовать его одновременно с другими классическими ссылками, но двухрежимный чипсет, с которым я работаю в своем дизайне, ведет себя не так, как я ожидал;
гарнитура настроена как периферийная, позволяя устройству iOS действовать как центральное. Таким образом, периферийные рекламируют свои услуги BLE (с моим конкретные 128-битные UUID), и все хорошо. Я могу просматривать периферию из любого центра, но только когда я не связан с классическими профилями (например, при отсутствии потокового аудио).
мое устройство, похоже, не может рекламировать BLE, при подключении к HFP и/или A2DP! Тем не менее, я видел демонстрации того же чипсета, что и BLE central, сканирование и подключение к другим периферийным устройствам BLE, одновременно транслируя аудио через A2DP. Однако в этой настройке устройство действовало как Раковина A2DP подключена к iPhone, при сканировании / подключении через BLE к третьему блоку, действующему как периферийное устройство BLE. Следовательно, не точка-точка с классическим и смарт-Bluetooth на одном устройстве.
существует ли двухрежимное ограничение, которое нельзя использовать в качестве периферийного устройства при поддержке / подключении к классическим профилям Bluetooth? И что в таком случае поддерживается только Central-mode?
FYI, я использую чипсет 8670 CSR.
обновление
новый ответ добавлен. Мои извинения за не уточнение / очистку моего предыдущего ответа до сих пор-время летит!
3 ответов
ну, покопавшись в спецификациях и пытаясь понять вещи более ясно, я нашел ответы, которые я искал, хотя я предпочел бы более оптимистичные ответы... ;(
тем не менее, давайте перейдем к нему; спецификация Bluetooth для 4.0 (BLE) говорит об этом;
двухрежимный гаджеты не может действуйте как периферийное устройство BLE и рекламируйте его присутсвие пока все еще быть connectable в" классицистическом " Bluetooth используя БР/ЭПД.
кроме того, примеры исходного кода CSR для двухрежимного чипсета CSR8670, который я использую, ведут себя одинаково; объявления BLE как периферийные отключены, когда подключена любая классическая BT-ссылка. Вместо этого исходный код CSR продвигает, что устройство должно действовать как BLE central вместо этого, позволяя другим периферийным устройствам BLE рекламировать и подключаться к нему, все полностью выполнимо при потоковой передаче звука (действуя как приемник A2DP).
Это не соответствует моей настройке вообще с тех пор;
- BLE centrals потребляют больше энергии, чем периферийные устройства BLE, и мое устройство должно экономить энергию
- двухрежимная "комбо" - проблема объединения BR / EDR-устройства с периферийной функциональностью BLE просто переместилась на телефон, что не будет работать лучше, так как мы не можем ожидать, что Apple (или кто-либо еще) нарушит спецификацию BLE.
вместо этого рекомендуемый подход позволяет моей стереогарнитуре полностью пропустить BLE и использовать GATT вместо BR / EDR, также известный как реклама через "ваниль", что действительно имеет смысл; я имею в виду, у меня уже есть настройка ACL-link между двумя устройствами, почему мне нужно пинать какой-либо открытие механизм?
опять же, Bluetooth SIG пригодится;
https://developer.bluetooth.org/TechnologyOverview/Pages/GATT.aspx
ГАТТ и АТТ не специфичны для транспорта и могут использоваться как в BR / EDR и ЛЕ. Однако ГАТТ и АТТ являются обязательными для реализации в LE, поскольку он используется для обнаружения услуг
Итак, SIG говорит " Да " использованию BR/EDR в качестве транспорта для GATT, но вместо этого возникает вопрос: как я могу получить доступ к это подключенное устройство BR / EDR из моего iOS-приложения, где типичным сценарием является использование CBCentral для сканирования, обнаружения и подключения к CBPeripheral? Ответ прост; вы не можете, так как iOS 7.0 этого не делает (пока?) поддержка ГАТТ для BR / EDR;
Итак, чтобы подвести итог; если вы хотите иметь одноранговую настройку между двумя двухрежимными устройствами Bluetooth, используя как классические профили Bluetooth, так и интеллектуальные службы/характеристики Bluetooth, вы должны использовать GATT над BR / EDR, который не подходит для Apple-устройств, но может поддерживаться Android (не знаю, будет ли порт приложение для Android в конце концов, хотя, Но независимо от этого, это не имеет большого значения для Android, так как в худшем случае будет означать возврат к SPP и простому байт-протоколу для выполнения работы, которую мне нужно сделать).
вы учитесь, пока живете, я полагаю, и ответ на этот вопрос не в том, что он не поддерживается, на что я утверждал ранее (основываясь на том, что я думал, что знаю).
короткий и чистый ответ на разработку двухрежимных и гарнитур на CSR-чипсетах заключается в том, что это было ограничение в стеке bluetooth CSR на более ранних SDK.
Bluetooth SIG никогда не поддерживал двойной режим, действующий как периферийный при подключении через классические ссылки на то же устройство. На наоборот, это явно спекуляция. как такая совместимость должна выполняться - но это не всегда означает, что все реализации BT-стека способны к такой функциональности.
следовательно; использование последних devtools и последних прошивок/стеков Bluetooth от CSR разрешило все проблемы, и двойной режим теперь полностью, и на самом деле довольно красиво я мог бы добавить, поддерживается на чипсетах CSR8670/75.
Я также использую устройство CSR8670. Это его работа. Как BLE периферийных и аудио.
вам нужно использовать ADK 4.0.0 по CSR.
Bluetooth 4.1 и Bluetooth 4.0 отличаются. То, что вы сказали о Bluetooth 4.0, правильно, но ваш чип может делать Bluetooth 4.1.
4.1 позволяет такие соединения.
Я также добавил флаги "двойного режима" в рекламный пакет.
есть несколько условий, таких как соединение Интервал не менее 90 миллисекунд настоятельно рекомендуется, чтобы вы не возились со звуком.
удачи!