- Русские Блоги
- Включение Bluetooth в bluedroid (на основе кода Android)
- BlueZ vs Bluedroid bluetooth stack
- Русские Блоги
- Знакомство с подсистемой Bluetooth Android 5.1 (1) Знакомство с bluedroid и bluetooth apk под Android
- Предисловие
- 1 Введение в структуру прикладного уровня Bluetooth
- 2 Введение в программное обеспечение Bluedroid
- 2.1 Bluedroid к интерфейсу верхнего уровня
- 2.2 Интерфейс уровня HCI в Bluedroid
- 2.2.1 Интерфейс HCI и bt-vendor в Bluedroid
- 2.2.2 Протокол уровня HCI в Bluedroid
- 2.2.3 Интерфейс HCI и уровня ядра в Bluedroid
- 2.2.4 Пример процесса слоя HCI в Bluedroid
- 2.3 Основной слой Bluedroid
- 2.3.1 Запуск основного слоя Bluedroid
- 2.3.2 Основной слой Bluedroid — часть процесса профиля
- 3 Введение в приложение Bluetooth (Bluetooth.apk)
- 3.1 Блок-схема приложения Bluetooth и внешний интерфейс
- 3.2 Интерфейс между приложением Bluetooth и bluedroid
- 3.3 Диаграмма состояний Bluetooth
- 3.4 Блок-схема частичной работы Bluetooth
- 4 Введение в уровень инфраструктуры Bluetooth
Русские Блоги
Включение Bluetooth в bluedroid (на основе кода Android)
Диапазон Bluetooth от уровня приложения до стека протоколов слишком велик. Легко потеряться, просто взглянув на код. Начнем с журнала.
01-18 18: 25: 31.570 D / BluetoothAdapterService (21885): onCreate () // адаптер адаптера запускается
01-18 18:25:31.570 I/BluetoothVendorJni(21885): classInitNative: succeeds
01-18 18:25:31.570 D/BluetoothAdapterState(21885): make() — Creating AdapterState
01-18 18:25:31.580 I/BluetoothAdapterState(21885): Entering OffState
01-18 18: 25: 31.580 I / bt_btif (21885): инициализация и вызов инициализации
01-18 18:25:31.580 D/bt_osi_allocation_tracker(21885): canary initialized
01-18 18:25:31.590 I/bt_osi_thread(21885): run_thread: thread id 21915, thread name stack_manager started
В файле AdapterService сначала вызывается метод classInitNative, определение которого содержится в файле JNI и определяется следующим образом:
Этот метод определит некоторые функции обратного вызова и инициализирует интерфейс sBluetoothInterface. Метод get_bluetooth_interface возвращает интерфейс метода, определенного в стеке протокола. Методы в стеке протокола следующие:
Вызовет метод init в протоколе.
Поток stack_manager создается в init, а затем используется метод thread_post для передачи функции обработки event_init_stack в поток stack_manager. Эта функция в основном используется для инициализации стека протоколов. В функции создаются функции btif_init_bluetooth, btif_init_bluetooth и функция обработки передается в этот поток. Это run_message_loop.
На этом этапе инициализация стека протоколов Bluetooth завершена, и процесс включения описан ниже.
01-18 18:25:31.760 I/bt_btif (21885): enable: start restricted = 0
01-18 18:25:31.760 I/bt_stack_manager(21885): event_start_up_stack is bringing up the stack
Метод enable передает функцию обработки event_start_up_stack в поток stack_manager, и поток bt_workqueue будет создан в функции event_start_up_stack. Метод обработки в этом потоке: btu_task_start_up
01-18 18:25:31.870 I/bt_osi_thread(21885): run_thread: thread id 21934, thread name bt_workqueue started
В методе btu_task_start_up инициализируются BTU, BTM, L2CAP, SDP, создается поток btu message_loop и функция обработки, передаваемая потоку
Функция btu_message_loop_run, эта функция отправляет сообщение о завершении инициализации в поток JNI.
Источник
BlueZ vs Bluedroid bluetooth stack
У BlueZ много документов и всего. И из того же, я понял, что BlueZ поддерживает поддержку A2DP. И в то же время устройство Android может быть сделано как приемник A2DP, изменив файл audio.conf внутри того же самого.
Я также узнал, что с android 4.2 и далее пакет BlueZ был заменен стеком Bluedroid от Broadcom. Я много искал о стеке Bluedroid. Но я не мог найти много деталей об этом.
Надеюсь, кто-то может помочь мне со следующими сомнениями.
1). Поддерживает ли Bluedroid поддержку приемника A2DP?
2). Будет ли файл audio.conf доступен для устройств, имеющих стек bluedroid?
3). Я собираюсь написать поддержку A2DP-приемника для устройства Android, напрямую вызвав API-интерфейс BlueZ-стека. Но мой последний вопрос заключается в том, можно ли использовать его также с стеклом Bluedroid? Надежда Bluedroid – это просто расширение BlueZ.
Bluedroid – это стек, предоставляемый Broadcom и теперь с открытым исходным кодом в Android. Bluedroid не имеет отношения к bluez в любом отношении, он имеет несколько преимуществ по сравнению с bluez (я отличаюсь этим).
[1]. В настоящее время у Bluedroid нет поддержки s2dp-приемника, так как в коде, доступном исходном коде, доступна только поддержка источника a2dp
[2]. Файл Audio.conf предназначен для стека bluez, он не является частью bluedroid
[3]. Прямо называя Bluez API – я думаю, вы будете использовать вызовы dbus, но bluedroid не поддерживает вызовы методов dbus, у него есть механизм обратного вызова, поэтому он не будет работать, bluedroid не является расширением bluez.
Роль A2DP Sink теперь поддерживается в Android Lollipop (5.0). Они модифицировали исходный код Bluedroid для поддержки того же. Чтобы полностью его поддерживать, вам необходимо изменить аудио HAL (audio.h), AudioPolicyManagerBase.cpp и audio_policy.conf, а также Audio Manager, A2DPStateMachine и т. Д.
Как сказал user987500, приемник A2DP поддерживается в android L, только незначительные изменения, вы можете изменить устройство с A2DP src, чтобы потопить его. Но убедитесь, что для одного устройства может поддерживаться только одна роль, которую можно настроить из XML-файла.
Добавляя к вышеуказанным ответам, поскольку Android L, поддержка приемника вводится, но все же часть аудиопотока кода не завершена. Тем не менее, я нашел этот список изменений, в котором реализована реализация раковины a2dp, и медиа можно воспроизводить через приемное устройство, как указано в сообщении фиксации списка изменений:
Источник
Русские Блоги
Знакомство с подсистемой Bluetooth Android 5.1 (1) Знакомство с bluedroid и bluetooth apk под Android
Предисловие
Этот документ в основном знакомит с программным обеспечением уровня приложений Bluetooth на платформе Android, сначала представляет структуру уровня приложений Bluetooth, затем представляет программное обеспечение уровня Bluedroid, приложение Bluetooth (Bluetooth.apk), уровень структуры Bluetooth и, наконец, полный анализ некоторых процедур работы Bluetooth. Основанное на платформе android 5.1, задействованное оборудование bluetooth — bluetooth realtek. Этот документ в основном предназначен для начинающих пользователей Bluetooth и содержит базовые инструкции по обучению.
1 Введение в структуру прикладного уровня Bluetooth
Чтобы представить программное обеспечение уровня приложений Bluetooth на платформе Android, сначала представьте общую структуру уровня приложений Bluetooth.На рисунке 1 показана структура Bluetooth в Android. Чтобы
Рис.1 Структура прикладного уровня Bluetooth
Приложения: Android-приложения Bluetooth — это программы, использующие Bluetooth API;
java Framework: API для приложений, BluetoothAdapter, BluetoothDevice, BluetoothSocket и т. Д., Которые мы обычно используем;
BluetoothAPP: он также должен принадлежать к категории java framework, но поскольку он относительно особенный, он независим, предоставляя все сервисы верхнего уровня и взаимодействуя с нижним уровнем Bluedroid. Среди них btAdapter в основном обеспечивает основные операции Bluetooth, такие как включение, отключение, обнаружение, сопряжение, отключение пары, createRfcomm и т. Д. Остальные — соответствующие службы профиля;
Bluedroid: стек протоколов Bluetooth, обеспечивающий все фактические операции Bluetooth, переключение Bluetooth, управление Bluetooth, управление поиском, управление ссылками, реализацию различных профилей, включая HCI, ACL, SCO, L2CAP, различные профили и т. Д .;
Здесь Bluedroid разделен на три части:
BTIF (интерфейс Bluetooth): предоставляет все API, необходимые для Bluetooth.apk (с использованием HAL)
BTA (приложение Bluetooth): приложение Bluetooth, как правило, относится к реализации профиля Bluetooth на Bluedroid. Чтобы
Стек: реализация всех основных операций Bluetooth, которые делятся на btm (диспетчер Bluetooth), btu (верхний уровень Bluetooth) и т. Д.
2 Введение в программное обеспечение Bluedroid
На схеме структуры уровня приложения Bluetooth в первом разделе можно увидеть архитектуру bluedroid, но не показан интерфейс между bluedroid и нижележащим уровнем. На рис. 2 представлена структурная схема каждого слоя взаимодействия синего типа. Чтобы
Рисунок 2 Схема инфраструктуры Bluedroid
Давайте посмотрим на структуру каталогов в bluedroid и функции каждого каталога. Чтобы
Рис.3 Структура каталогов Bluedroid
audio_a2dp_hw: реализует hal для аудиоустройства bluedroid a2dp. a2dp реализован в слое hal bluedroid. Он связывается со стеком через сокет (механизм связи см. В uipc в каталоге udv);
Прикладной уровень bta: buetooth, который реализует некоторые интерфейсы прикладного уровня, но все они управляются и вызываются уровнем Btif. Чтобы
Ag:audio gateway (AG) subsystem of BTA
Ar:implementation for the audio/video registration module.
Av:implementation of the API for the advanced audio/video (AV)
* subsystem of BTA, Broadcom’s Bluetooth application layer for mobile
* phones.
Dm:API implementation file for the BTA device manager
Fs: implementation file for the file system call-in functions. //phone
Gattr: the GATT server and client implementation
Hh:host hid
btif: все функции BTIF доступны из основного Bluetooth HAL (интерфейс для связи с уровнем jni в Android-apk Bluetooth, который действительно обеспечивает интерфейс для приложения);
conf: Некоторые файлы конфигурации Bluedroid;
embdrv: в основном отвечает за кодирование sbc. SBC — это эффективный метод кодирования, предложенный специальной группой по интересам Bluetooth (SIG) для стандартного аудиокодека устройств Bluetooth. В спецификациях аудиоданных A2DP технологии Bluetooth SBC является очень важным методом кодирования аудиоданных, используемым для поддержания возможностей соединения. Это конкретная опция для MP3 и MPEG-4 AAC;
gki / osi: общий интерфейс ядра / интерфейс операционной системы, нацеленный на уровень портирования операционной системы, включая многозадачность и реализацию таймера, он фактически обеспечивает абстрактную среду многозадачности и контроля времени для кода стека для достижения цели переносимости;
hci: интерфейс управления хостом, который реализует протокол hci и соединяет уровень стека с коммуникацией нижнего уровня;
main: обработка информации о конфигурации, инициализация каждого модуля, подключение btif и hci и обеспечение интерфейса для btif для управления hci;
стек: код стека протоколов, различные профили;
udrv: функция кода состоит в том, чтобы взаимодействовать с концом сокета a2dp, командами обработки и потоком pcm данных a2dp, а медиа-задача вызывает здесь интерфейс, который на самом деле предназначен для связи с аудио-полем audio_a2dp_hw;
utils: разное, очень простое, на данный момент это функция для повышения приоритета задач a2dp;
vnd: vendor specific feature for BLE;
Существует также поставщик bt, который не включен в bluedroid. Для Bluetooth Realtek используется тот же bluedroid, но разные модули Bluetooth имеют разные библиотеки поставщиков bt. Функция этой библиотеки поставщика заключается в включении и выключении модуля Bluetooth. Откройте, закройте, настройте последовательный порт, загрузите прошивку (загрузка прошивки интерфейса USB Bluetooth реализована в драйвере).
2.1 Bluedroid к интерфейсу верхнего уровня
Bluedroid имеет несколько интерфейсов с верхним уровнем, bluedroid \ btif \ src \ bluetooth.c — это основной интерфейс, отвечающий за переключение и базовое управление Bluetooth, bluedroid \ audio_a2dp_hw \ audio_a2dp_hw.c специально для управления a2dp, а некоторые профили также предоставляют некоторые Интерфейсы, эти интерфейсы являются независимыми интерфейсами разных профилей. Среди них bluetooth.c реализует серию интерфейсов, которые вызываются верхним уровнем для управления Bluetooth. В то же время при инициализации верхний уровень передает интерфейс обратного вызова. Когда bluedroid имеет сообщение или результат необходимо уведомить на верхнем уровне, используется интерфейс обратного вызова. Однако данные профилей, таких как opp и hid Bluetooth, не передаются через интерфейс, и для обмена данными создаются интерфейсы сокетов.
2.2 Интерфейс уровня HCI в Bluedroid
Слой Hci находится в нижней части архитектуры bluedroid, взаимодействуя с bt-vendor и ядром вниз и взаимодействуя с уровнем ядра bluedroid вверху.
2.2.1 Интерфейс HCI и bt-vendor в Bluedroid
Интерфейс взаимодействия между Bluedroid и нижним уровнем реализуется кодом в каталоге hci. Загрузите библиотеку bt-vendor в файл vendor.c, используйте интерфейс, предоставляемый bt-vendor, и передайте структуру обратного вызова bt-vendor.
2.2.2 Протокол уровня HCI в Bluedroid
Уровень Hci выполняет две функции: одна — реализовать протокол уровня hci, который представляет собой известные протоколы h4 и h5, а другая — соединить уровень стека и уровень поставщика bt для реализации связи и передачи между уровнем стека и оборудованием. Чтобы
HCI имеет 4 типа пакетов (есть информация о пакете сообщения об ошибке и пакете согласования при передаче через uart, но из текущего кода они не используются, но для отправки ошибок добавляется код операции, определенный производителем. Обмен сообщениями или переговорами и т. Д.), Типы группировки показаны в Таблице 1, а форматы данных четырех групп показаны на Рисунках 4
Таблица 1 Типы пакетов HCI
Сам пакет HCI не имеет заголовка идентификации типа пакета. Во время передачи обе стороны должны иметь возможность идентифицировать тип переданного пакета. Протокол h4 должен добавить байт перед пакетом hci, чтобы различать тип пакета. Он используется сейчас Bluetooth Boardcom использует протокол h4 для передачи через uart. Из вышеупомянутых различных структур пакетов нет уникальной идентификационной метки.При передаче через uart, поскольку он разделяет канал, возникает проблема синхронизации данных, иначе невозможно найти заголовок пакета и проанализировать пакет данных. Следовательно, когда протокол h4 использует передачу uart, требуется механизм восстановления после ошибок.Пока одна из сторон связи теряет синхронизацию, требуется восстановление синхронизации. Если протокол h4 использует для передачи usb, такой проблемы не будет, usb передает разные типы пакетов через разные конечные точки, а протокол usb может гарантировать целостность пакета. Из-за проблемы синхронизации h4 с использованием передачи uart, позже появится протокол h5. Протокол h5 фактически предназначен для повторной инкапсуляции пакета протокола h4, добавления преобразования символов для достижения уникального заголовка пакета и идентификации хвоста пакета, а также добавления проверки целостности. , Даже если один пакет данных идет неправильно, следующий пакет все равно может быть правильно проанализирован без какого-либо механизма восстановления синхронизации. Пакет H5 показан на Рисунке 8
Рисунке 10. Чтобы
Из вышеизложенного видно, что протокол H5 более надежен, чем протокол H4, но в то же время рабочая нагрузка, которую необходимо обработать, также увеличивается, поэтому эффективность передачи H5 будет ниже, чем у H4. Чтобы
Протоколы H4 и H5 предоставляют один и тот же пользовательский интерфейс. Какой протокол фактически используется на уровне HCI? Теперь подход bluedroid исправлен при компиляции кода, как показано в следующем коде.
2.2.3 Интерфейс HCI и уровня ядра в Bluedroid
Интерактивный интерфейс между слоем Hci и базовым слоем bluedroid также предоставляется базовому уровню путем инкапсуляции интерфейса в структуру, а базовый уровень обеспечивает структуру обратного вызова.
2.2.4 Пример процесса слоя HCI в Bluedroid
На рисунке 11 показан процесс инициализации уровня HCI, включая инициализацию интерфейса, включение Bluetooth, открытие последовательного порта и загрузку fw. Поскольку процесс загрузки fw включает в себя несколько обратных вызовов, он не включен в следующую блок-схему.
2.3 Основной слой Bluedroid
Основной уровень Bluedroid отвечает за управление Bluetooth, обработку протокола Bluetooth, управление состоянием и т. Д. Работа всего основного уровня управляется событиями, события отправляются верхним уровнем, события для результатов обработки нижнего уровня, события для нижнего уровня для получения данных и нижнего уровня События изменения состояния, а также события тайм-аута поддерживают нормальную работу всего базового уровня. Поскольку базовый уровень Bluetooth по-прежнему не может прояснить процесс и организовать интуитивно понятную блок-схему, архитектурная диаграмма базового уровня здесь не приводится. Позже мы узнаем об архитектуре базового уровня со стороны потока кода и всего рабочего процесса.
2.3.1 Запуск основного слоя Bluedroid
Вся функция и работа Bluedroid начинается с включения Bluetooth и заканчивается отключением Bluetooth.
Как упоминалось ранее, весь базовый уровень Bluetooth управляется событиями, а обработка всех событий выполняется тремя задачами. Чтобы
btu_task: обрабатывать события, отправленные на верхний уровень, события тайм-аута, некоторые события, отправленные с верхнего уровня, а также передавать некоторые события в btif_task для обработки;
btif_task: в основном используется для обработки протокола Bluetooth, обработки потока состояния протокола и вызова различных функций обработки в соответствии с разными состояниями;
btif_media_task: используется для управления a2dp и обработки звука;
2.3.2 Основной слой Bluedroid — часть процесса профиля
Для процесса A2DP дана только схематическая блок-схема, как показано на рисунке ниже.
Для передачи файлов OPP протокол rfcomm используется на уровне bluedroid. Суть протокола rfcomm заключается в обеспечении логического канала данных между двумя устройствами Bluetooth. Верхнему уровню требуется только соединение, предоставляемое rfcomm, для передачи между двумя устройствами Bluetooth. данные. В процессе передачи файла Opp сначала подключаются два устройства, а затем устанавливается канал rfcomm. В то же время создается сокет для rfcomm и верхний уровень для передачи данных. Передача данных может быть выполнена позже. Подключение устройств и создание канала rfcomm представлены позже. Чтобы
Для устройств ввода, таких как мышь Bluetooth и клавиатура Bluetooth, используется профиль hid (устройство с человеческим интерфейсом). После установления соединения зарегистрируйте устройство uhid (dev_path = «/ dev / uhid») и отправьте данные, отправленные устройством ввода, в uhid. Для устройства за обработку входных событий отвечает драйвер hid ядра.На следующем рисунке показана блок-схема входных данных.
3 Введение в приложение Bluetooth (Bluetooth.apk)
Основная функция приложения Bluetooth — управлять статусом Bluetooth, подключаться к bluedroid и предоставлять различные услуги Bluetooth. Среди них btservice предоставляет базовые службы Bluetooth, и каждый профиль предоставляет свои собственные независимые службы.В дополнение к opp и pabp все остальные профили управляются btservice.
3.1 Блок-схема приложения Bluetooth и внешний интерфейс
Поскольку opp и pbap по сути являются передачей файлов, но включают в себя интерактивные операции пользовательского интерфейса, они существуют как две относительно независимых службы, а структура opp описана позже.
3.2 Интерфейс между приложением Bluetooth и bluedroid
Приложение Bluetooth взаимодействует с bluedroid через интерфейс jni. Приложение Bluetooth загружает библиотеку bluedroid (bluetooth.default.so) вначале, использует рабочий интерфейс, предоставляемый bluedroid, и в то же время передает структуру обратного вызова bluedroid при вызове функции init, предоставляемой интерфейсом bluedroid.
3.3 Диаграмма состояний Bluetooth
Во всем bluetooth есть несколько конечных автоматов. В дополнение к конечному автомату, который поддерживает переключатель Bluetooth и состояние сопряжения устройств, некоторые профили используют конечный автомат для поддержания состояния подключения устройства.
Описание статуса Bluetooth Bond:
Два планшета сопряжены. После завершения сопряжения они находятся в состоянии сопряжения, но еще не подключены. При необходимости передачи файлов устанавливается соединение. После завершения передачи файла соединение будет отключено. Чтобы
Когда планшет сопряжен с гарнитурой Bluetooth или устройством ввода Bluetooth (мышь Bluetooth, клавиатура), соединение будет установлено сразу после завершения сопряжения. Это связано с тем, что гарнитура Bluetooth или устройство ввода могут передавать данные в любое время.
3.4 Блок-схема частичной работы Bluetooth
4 Введение в уровень инфраструктуры Bluetooth
Поскольку роль уровня инфраструктуры Bluetooth заключается в подключении к службе Bluetooth, предоставлении интерфейса для других приложений для использования Bluetooth и выполнении роли соединения верхнего и нижнего уровней, здесь не так много логики. Ниже приводится только схематическая блок-схема, а не слишком подробное описание. Чтобы
Источник