Bluetooth адаптер
![]()
Здравствуйте. Подскажите, пожалуйста. Вставляю в USB Bluetooth адаптер, чтоб смотреть тв в беспроводных наушниках, но ничего не происходит (адаптер и наушники были сопряжены до этого на пк). Вообще возможно ли организовать беспроводное аудио на этом телевизоре?
Комментарии 11
![]()
Dangler2013
2 года назад
Изменено модератором
Добрый день. Вы можете попробовать подключить Bluetooth адаптер к тв приставке. Звук должен работать. Во всяком случае у меня все работает и не нужно заморачиваться покупать дорогостоящее доп. оборудование. Как вариант, возьмите у друзей приставку для проверки.
![]()
![]()
Свернуть ответы 1
![]()
Dangler2013
2 года назад
И кстати, если у вас тв со смартом от Samsung или LG, то у них своя ОС и работать адаптер на них не будет. Во всяком случае проверил на своем втором тв от LG, у которого смарт встроенный. У Sony, как и на моей отдельной приставке X2 Cube, стоит Android, т.к. сам Android разработан на ядре Linux и написан на языке С, то такой вариант работает. Но относительно Sony нужно проверять.
Возможна ли работа с bluetooth в Android без местоположения?

Типовой отзыв для андроид приложения, работающего с блютуз устройством.
Статья построена в виде спора с воображаемым пользователем. Для андроид разработчиков рассмотрены как классические способы, так и рекомендумые альтернативы.
От вашей программы требуется только отправить данные на устройство!
Минимально необходимый код (далее МНК) для отправки данных на классическое блютуз устройство с реализаций SPP (Serial Port Protocol)
UUID myUUID = UUID.fromString("00001101-0000-1000-8000-00805F9B34FB"); BluetoothAdapter defaultAdapter = BluetoothAdapter.getDefaultAdapter(); BluetoothDevice remoteDevice = defaultAdapter.getRemoteDevice("DC:0D:30:8A:AD:C8"); BluetoothSocket socketToServiceRecord = remoteDevice.createRfcommSocketToServiceRecord(myUUID); socketToServiceRecord.connect(); DataOutputStream dataOutputStream = new DataOutputStream(socketToServiceRecord.getOutputStream()); dataOutputStream.write("Hello mir!\n\n".getBytes(StandardCharsets.UTF_8)); dataOutputStream.flush(); Thread.sleep(1000); dataOutputStream.close(); socketToServiceRecord.close();
Если мы запустим МНК, то получим:
java.lang.SecurityException: Need BLUETOOTH permission: Neither user 10632 nor current process has android.permission.BLUETOOTH.
Необходимо добавить для работоспособности этого кода в манифесте приложения:
До апи 31 существовали только 2 разрешения:
android.permission.BLUETOOTH и android.permission.BLUETOOTH_ADMIN
В андроид 12 переработали набор пермишенов. Ознакомиться подробнее можно по ссылке.
Главное отличие новых разрешений в том, что их нужно не только добавить в манифест, но и запросить у пользователя явно.
Вот. Сами пишете, что доступ к местоположению не нужен.
Обратите внимание на следующую строку
defaultAdapter.getRemoteDevice("DC:0D:30:8A:AD:C8");
Видите строку с двоеточиями ? Это mac адрес устройства. У каждого устройства он должен быть своим и уникальным. Вы знаете адрес например своего принтера ? Устроит ли вас просто поле ввода для этого значения ?
На моем принтере есть наклейка с QR. Считайте ее.
Это исключения, кроме того нет единого формата для кодирования информации о параметрах подключения.
Я буду сам сопрягать устройства через системные настройки. Дайте мне выбрать нужное из них.
Я могу помочь Вам попасть сразу в нужное место системных настроек:
Intent intentOpenBluetoothSettings = new Intent(); intentOpenBluetoothSettings.setAction(android.provider.Settings.ACTION_BLUETOOTH_SETTINGS); startActivity(intentOpenBluetoothSettings);
и вам не придется долго добираться до него.
Получить список сопряженных:
Set btDevices = mBtAdapter.getBondedDevices();
Казалось бы одна строчка кода, что тут может не работать?
Во первых, всё таки встречаются устройства без BT. Подстраховаться можно строкой в манифесте.
В этом случае приложение нельзя будет поставить на андроид устройство без блютуз адаптера. Если с перефирийным устройством можно общаться еще через USB или сеть, то меняем на required=»false».
Если адаптера нет, то BluetoothAdapter.getDefaultAdapter() вернет null.
Попутно пожалуюсь. Ну зачем ее сделали депрекайтед? Альтернатива ужасно не удобная. Теперь еще контекст в фоновые потоки протаскивать для получения адаптера или сам адаптер. А за столько лет существования андроида так и не сделали, чтобы два и более адаптера поддерживалось одновременно. А еще проблем добавляют .
Во вторых, опять головная боль в 12м андроиде. Нужно учесть, что пермишен BLUETOOTH_CONNECT предоставлен.
Ворчание. Раньше было проще. Автоматом давался по факту наличия в манифесте. Теперь придется аналогично критичными. А еще нельзя попросить один раз и запомнить, что получил. Механизм автоматического отзыва у неиспользуемых приложений появился. Так что здравствуй куча проверок начиная с того, на какой версии андроида запущено.
Совет вместо проверок, лучше обернуть SecurityException в кастомное исключение и обработать его там, где есть возможность позвать запрос на предоставление разрещения иначе там получается большая лапша проверок начиная с того, что версия андроида 12 и выше и далее а дано ли разрешение.
В третьих, getBondedDevices() вернет null при выключенном адаптере.
Действия с получением списка сопряженных и их обработкой вынесем в функцию getBonded() . Вместо тривиального уведомления «Включите» реализуем включение.
if (!mBtAdapter.isEnabled()) < Intent enableIntent = new Intent(BluetoothAdapter.ACTION_REQUEST_ENABLE); btActivityResultLauncher.launch(enableIntent); >else
btActivityResultLauncher = registerForActivityResult( new ActivityResultContracts.StartActivityForResult(), result -> < if (result.getResultCode() == Activity.RESULT_OK) < getBonded(); >>);
Тут вопрос от знатока. Можно же mBtAdapter.enable() использовать, почему так сложно ?
Вариант выше не требует дополнительных разрешений. Метод enabled() становиться депрекайтед в 13-м андроиде. Пример выше основан на рекомендованной альтернативе. Для предыдущих версий в манифесте должен быть еще пермишен BLUETOOTH_ADMIN. Но главное из-за выделенного жирным в документации
Bluetooth should never be enabled without direct user consent.
легко попасть под reject (отклонение обновления или нового приложения) или словить снятие с публикации.
Вернемся к выбору из списка сопряженных.
Мы получили список объектов типа BluetoothDevice, а нам нужно показать имя и узнать mac:
BluetoothDevice d = getItem(position); String name = d.getName(); // требует BLUETOOH_CONNECT String mac = d.getAddress(); // а это удивительно нет
Получается ли , что мы обошлись без необходимости в геолокации?
Так выглядит запрос BLUETOOH_CONNECT в Android 12.

Единственное чего мы достигли, пользователи более ранних версий останутся в неведении. Напомню, что пермишен нужен и для работы МНК ( .getRemoteDevice(), .connect() ).
Почему же так?
У вас сопряжен с телефоном телевизор, колонки . Программа это увидела и если у нее есть биг дата по пользователям, то как минимум она вычислит Ваш город. Если мало мобильное устройство в зоне досягаемости (удалось к нему подключиться), то можно местоположение сузить до 100 метров.
Именно о таком теоретическом возможном риске Вас предупреждают.
У меня Android 6-11. Почему же я вижу запрос к местоположению?
Мы рассмотрели вариант, когда Вы предварительно сделали сопряжение, не все пользователи могут сделать этот шаг самостоятельно. Часто для простоты даже не смотрят в список сопряженных, а начинают опрос эфира.
До 6-го андроида разрешения предоставлялись автоматически по факту упоминания в манифесте. Потом разрешения решили поделить, условно безопасные так и остались, а остальные стало требоваться запрашивать явно. В коде программ появился костыль вида:
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) < if (checkSelfPermission(Manifest.permission. …) != PackageManager.PERMISSION_GRANTED )< … >>
Пользователи стали видеть запросы.
Процесс опроса эфира асинхронный.
1) Создаем слушателя
private final BroadcastReceiver mReceiver = new BroadcastReceiver() < public void onReceive(Context context, Intent intent) < String action = intent.getAction(); if (BluetoothDevice.ACTION_FOUND.equals(action)) < // Найдено BluetoothDevice device = intent.getParcelableExtra(BluetoothDevice.EXTRA_DEVICE); …… делаем с ним что нужно >else if (BluetoothAdapter.ACTION_DISCOVERY_FINISHED.equals(action)) < // процесс поиска завершен >> >;
2) Регистрируем слушателя сообщений.
IntentFilter filter = new IntentFilter(); filter.addAction(BluetoothDevice.ACTION_FOUND); filter.addAction(BluetoothAdapter.ACTION_DISCOVERY_FINISHED); registerReceiver(mReceiver, filter);
3) Запускаем процесс
mBtAdapter.startDiscovery();
Прочитать документацию Вы можете самостоятельно.
Выскажу свое мнение почему там сбоку прикрутили геолокацию. Так у нас два пермишена BLUETOOTH слишком общий, BLUETOOTH_ADMIN нужен для изменения статуса и позволяет сканировать. Сделать его явно запрашиваемым, поломается много программ. У нас тут еще есть ACCESS_FINE_LOCATION, ACCESS_COARSE_LOCATION, которые нужно явно запрашивать. Так может скрестим и по смыслу подходят.
И вот пошли шатания от версии к версии. Нужно ли именно FINE или хватит COARSE.
В 12м нужна связка BLUETOOTH_SCAN & ACCESS_FINE_LOCATION.
В андроиде есть неудобная для программистов практика без ошибки игнорировать действия, которые потом решили запретить и/или возвращать пустой/фиктивный результат. Делается это для того, чтобы устаревшие программы не завершились аварийно с ошибкой. Да еще вендоры могут внести свое видение того как правильно.
Кроме того в момент первоначальной настройки нового телефона/приставки можно запретить всем приложениям доступ к местоположению. После этого узнать, что всем или конкретно нам запрещено нет возможности. Все методы отрабатывают без ошибок, а бродкаст не приходит ;(
Вопрос от знатока. А почему не написали про Companion Device Manager (CDM)?
Когда я про неё прочитал, тоже подумал, что вот оно. Именно это решит проблему с пользователями. А вот реальность подкачала.
К сожалению документация, а конкретно примеры для java немного устарели (использованы депрекейтед StartIntentSenderForResult и onActivityResult), поэтому приведу уже поправленные коды.
Код поправлен на поиск всех устройств поблизости. Не важно есть у них имя или нет и какие типы интерфейсов поддерживают. В данном случае нас интересуют только само поведение «подружить» . Также для простоты minSDK поставлен от 8.0.
Если мы посмотрим в исходные коды операционной системы (Android SDK), то увидем:
public final class CompanionDeviceManager
так нелюбимое мною умирание молча . Что мешало сперва проверить callback, и если не работает вызвать failure ? Даже если это исправят, в предыдущих версиях андроида проблема останется 🙁
А причина ? В функции проверяется, что внутренняя переменная mService не null.
Конструктор принимает параметр службы как @Nullable. Получаем мы этот объект уже готовым:
CompanionDeviceManager deviceManager = context.getSystemService(CompanionDeviceManager.class);
Наш объект существует, но на практике часто приходит не работоспособным. И получается нажали на кнопку «подружить с новым» и никакой реакции. Это первое мое разочарование.
Failure вообще оказался неинформативным. Вызывается только при отказе выбора. Текст ошибки всегда один и тот же.
Запустите предложенный демо пример.

Работает правильно, только если определение местоположения включено .
Если что-то из показанных стрелками выключено, диалог просто не показывается. Никаких ошибок в callback не передается.
И пришли мы к тому, что должны пользователю показать диалог
Включи! Определение местоположения.
Это меня окончательно разочаровало.
Выводы
Блютуз не может работать без геолокации. Ничего не поменялось с появлением альтернатив.
Внедрять их все же придется, чтобы приложение соответствовало правилам Google Play.
Как минимум учесть новые разрешения для работы с блуютуз.
Как из простого телевизора сделать телевизор Smart TV?
Достаточно часто решение о смене техники принимается из-за того, что на телевизоре нет поддержки Smart TV. Совершенно необязательно тратить денежные средства на такое обновление. Можно обычный телевизор превратить в «умное» устройство.
Технология Smart TV позволяет пользоваться интернетом посредством телевизора. Благодаря ей становится доступным просмотр любых фильмов из сети, онлайн-игры и другой контент. Новые модели цифровой техники выпускаются уже с внедренной технологией, однако, и пользователи более старых моделей телевизоров имеют шанс получить доступ к инновационной разработке. Поэтому, если у вас старая модель телевизора без Смарт-функций, не расстраивайтесь – идти в магазин за дорогой Smart 4K панелью не придется. «Умное» телевидение вполне может уместиться на маленькой флешке или даже консоли. Сделать телевизор «умным»довольно просто.
Существует несколько способов, как из простого телевизора сделать телевизор Smart TV:
- Через приставку Smart TV Box.
- Через приставку Smart TV Stick.
- С помощью телефона через Miracast адаптер.
- С помощью смартфона и ноутбука.
- Подключить игровую консоль.
Smart TV Box. Самый оптимальный вариант – приобрести отдельную Смарт ТВ приставку для телевизора. Они работают на операционной системе Android и разработанной Apple, а, значит, ее установка позволит превратить любую, даже самую старую модель телевизора, в полноценный медиацентр со всеми функциями «умных» аналогов.
Существует большое количество моделей и разновидностей Смарт приставок для телевизора. Исходить нужно из поставленных перед ней задач, что именно вы хотите делать на своем устройстве:
- Воспроизводить потоковое видео или онлайн фильмы.
- Смотреть электронную почту.
- Общаться с друзьями в социальных сетях по видеосвязи.
- Загружать игры и приложения через сервисы Play Market, App Store или Google Play.
- Играть в онлайн-игры.
- Слушать музыку и многое другое.
Поскольку Smart TV Box представляет собой мини-компьютер со встроенной операционной системой, Wi-Fi-модулем и рядом других компонентов, к нему можно подключить внешний диск, клавиатуру, мышь, пульт управления, интернет-кабель. Такая приставка легко заменит персональный компьютер, его возможностей хватит для работы с приложениями и воспроизведения качественного видео в разрешении 4К.
Также перед приобретением необходимо понять, какие разъёмы присутствуют на вашем телевизоре, чтобы Смарт приставка имела возможность к нему подключиться. Лучше всего, если есть обычный разъём HDMI, так как с этим портом работает большинство приставок. Если же телевизор совсем старый, тогда необходимо искать такую Смарт ТВ приставку, у которой есть разъём RCA.
Стоимость приставок Smart TV может быть значительной: у самых навороченных моделей она может доходить до нескольких тысяч рублей. Однако даже среди бюджетных китайских моделей можно подобрать что-то стоящее.
Самые популярные модели Смарт приставки – это Xiaomi Mi Box и Apple TV 4. Устройство от Apple стоит дороже, но и обладает самой большой производительностью. Его пульт управления имеет встроенный гироскоп, что позволяет использовать его в качестве контроллера для компьютерных игр. А плюсом устройства Xiaomi Mi является то, что платформа Android очень гибкая и регулярно получает обновления, а значит, обычный телевизор сможет работать как Smart TV без замены приставки в течение продолжительного времени.
TV Stick. Smart TV Stick является немного упрощенной версией приставки для телевизора. Главное отличие Smart TV Stick от TV Box – ее размер и функциональность. Выглядит она как флешка, которая подключается к HDMI разъёму. Из-за небольшого размера в TV Stick есть ряд ограничений: на ней невозможно разместить порты для подключения других устройств. То есть совместно с ней можно будет использовать только беспроводные устройства – мышь, клавиатуру, наушники или колонку, которые возможно соединить по Bluetooth.
В таких устройствах устанавливают 1 Гигабайт операционной памяти. Такого объема будет хватать только для выполнения не слишком сложных задач по просмотру видео через интернет приложения для Android. Smart TV Stick работает с разрешениями 2К/4К.
Miracast адаптер. Чтобы превратить простой телевизор в Смарт, необходимо установить беспроводный Миракаст адаптер при помощи телефона или ноутбука. Это дополнительное устройство, напоминающее флешку, которое подключается в USB-порт на телевизоре, однако со значительно меньшими способностями. По сути, все его предназначение заключается в том, чтобы обеспечить телевизор функцией приема Wi-Fi сигнала от роутера и других устройств. После подключения у пользователя появляется возможность транслировать видео или целый экран ноутбука, компьютера или телефона на экран телевизора.
Данный способ полностью зависит от подключения к телевизору другого устройства, что не совсем удобно. Во-первых, ноутбук или смартфон может быть разряжен или в любой момент понадобиться, в результате чего экран телевизора со Смарт функциями перестанет работать. Во-вторых, процессор смартфона не всегда настолько мощный, чтобы «потянуть» такой тип связи. В результате чего могут быть зависания, и просмотр видео не будет таким удобным.
Смартфон или ноутбук. Если нет желания тратить деньги на покупку дополнительных устройств, тогда превратить обычный телевизор в Смарт поможет смартфон или планшет. Но они должны быть достаточно мощными, чтобы не «подвисать» при воспроизведении контента и обладать емким аккумулятором.Подсоединить смартфон или планшет к телевизору можно несколькими способами:
- С помощью разъёма USB.
- Используя порт HDMI. Для этого нужен специальный кабель HDMI. При подключении кабеля необходимо выбрать на телевизоре тип сигнала HDMI.
- Используя разъём VGA. Для этого также нужен кабель. Плюс такого решения заключается в том, что можно подключить смартфон к любым телевизорам и мониторам. Минус – невозможность воспроизводить через телевизор звук – к смартфону придется подключать колонки.
- С помощью Wi-Fi. Подходит только для тех телевизоров, которые оборудованы таким модулем.
Игровая консоль для игр. Производители современных игровых устройств значительно расширили функции техники. Теперь на консолях можно не только играть, но и пользоваться большинством сервисов, которые разработаны под Android. На некоторых моделях возможно даже подключение пульта управления, чтобы управлять не джойстиком.
Вариант с игровой консолью не самый удачный из-за специфики самого устройства. Основная задача такого устройства — это игровые действия.
Bluetooth для андроида. Портируем с Linux на Android драйвер USB-адаптера

Не все USB-устройства начинают работать на Android сразу после подключения. В этой статье я покажу, как решить проблему, на примере широко распространенного Bluetooth-адаптера CSR 4.0. Нам понадобится собрать из исходников ядро Linux и покопаться в интерфейсной библиотеке Android.
Современное железо редко предполагает что‑то доделывать руками или допиливать в прошивках. Однако есть целый класс устройств «ноунейм», которые просто‑таки взывают к умелым рукам и пытливым умам. Немного смекалки, и можно заставить их работать не хуже именитых аналогов.
Вот, например, ничем не примечательная ТВ‑приставка в виде черной квадратной пластиковой коробки с надписью «MXQ Pro 4K» на крышке и бюджетной начинкой: SOC RK3229, 1 Гбайт RAM и 8 Гбайт NAND. У меня она уже около года почти бесперебойно транслировала на телевизор YouTube и каналы интернет‑телевидения, музицировала и сообщала свежие новости.
В самом начале ее мультимедийной жизни характер у приставки был строптивый, и при каждом удобном случае она норовила зависнуть или перезагрузиться. Эту проблему удалось решить, установив сглаживающий фильтр в цепи питания и заменив комплектный блок питания более качественным.
В какой‑то момент я подумал, не использовать ли мне эту приставку еще и для игр. Беспроводной контроллер подошел бы для этого как нельзя лучше.
В целом контроллеры можно разделить на две категории: RF (Radio Frequency, радиочастотные) и BT (Bluetooth), оба в итоге работают по радиоканалу. Вариант с RF требует использовать проприетарный донгл (и занимать им порт USB), а Bluetooth должен поддерживаться на стороне приставки.
Зато Bluetooth универсален и, помимо подключения устройств ввода, может быть использован для вывода звука на беспроводные колонки, файлового обмена со смартфоном и так далее. Мой выбор был предопределен тем, что в ближайшем магазине нашелся лишь BT-контроллер VR-PARK. Не образец изящного дизайна, но не любоваться же на него!
К сожалению, на плате ТВ‑приставки отсутствует аппаратный BT-модуль, однако в настройках ее операционной системы Android 7.1.2 я видел пункт включения Bluetooth, что вроде бы позволяло надеяться на поддержку стека протоколов. Возможно, после подключения модуля Bluetooth в USB сработает магия и сразу представится возможность насладиться игрой?
С этими мыслями я прикупил USB-адаптер Bluetooth с лаконичной надписью «CSR 4.0» на корпусе. Вернувшись домой, я вставил его в порт приставки, и тот весело замигал светодиодом. А после включения Bluetooth в настройках. ничего не произошло. То есть почти ничего, если не считать возникновения задачи, решению которой посвящена эта статья: настроить ТВ‑приставку на использование адаптера USB Bluetooth.
Когда возникает проблема, исследователь первым делом идет в интернет, чтобы собрать сведения о ней. На удивление, материалов оказалось немного. То ли никто не подключал USB-адаптер к приставке, то ли у всех он работал из коробки, но последние содержательные обсуждения датировались 2013 годом и относились к автомобильной системе мультимедиа.
Результат бессистемных попыток отыскать работающие настройки не порадовал: я только потерял несколько часов и осознал, что придется искать собственный путь. А для этого необходимо понимать, как подсистема Bluetooth встроена в Android.
Архитектура подсистемы Bluetooth в Android
С точки зрения программиста, центральный компонент подсистемы Bluetooth в Android — системная служба Bluetooth (представляющая собой приложение для Android), которая через Binder IPC дает приложениям доступ к услугам Bluetooth-профилей, а сама использует при этом JNI-интерфейсы, реализованные на уровне HAL и ведущие к компонентам стека Bluetooth и расширениям поставщика (в двоичных библиотеках).

Эту схему можно продолжить вниз по системной иерархии, и тогда станет видно, что библиотеки HAL используют интерфейс hci0 для доступа к HCI-сокетам ядра операционной системы, которые через драйвер позволяют взаимодействовать с аппаратным Bluetooth-модулем, подключенным к системной плате шиной SDIO, UART или USB.

Осталось выяснить, на каком именно уровне у нас проблема, которая мешает адаптеру взять и заработать.
Операционная система Android — это ядро Linux, поверх которого работает гипервизор виртуальных машин Dalvik. Начинать анализ разумно с нижнего уровня, последовательно убеждаясь в том, что есть физическое подключение, операционная система и драйвер видят адаптер, он доступен на уровне HAL и так далее — до момента, когда он должен работать.
Чтобы исследовать ОС и вносить в нее изменения, нужен доступ к командной оболочке с правами суперпользователя. Об основах использования консоли Android можно прочитать в статье «Консольный Android».
warning
Вмешательство в операционную систему с правами суперпользователя может нарушить работоспособность устройства и вывести его из строя. Принимая решение выполнить описанные в статье рекомендации, исследователь берет на себя полную ответственность за возможные негативные последствия своих действий.
Рекогносцировка
В системных сообщениях dmesg упоминания о Bluetooth встречаются в следующих контекстах:
[ 1] Bluetooth: Core ver 2. 16
[ 2] NET: Registered protocol family 31
[ 3] Bluetooth: HCI device and connection manager initialized
[ 4] Bluetooth: HCI socket layer initialized
[ 5] Bluetooth: L2CAP socket layer initialized
[ 6] Bluetooth: SCO socket layer initialized
. . .
[ 7] Bluetooth: HCI UART driver ver 2. 2
[ 8] Bluetooth: HCI H4 protocol initialized
[ 9] Bluetooth: HCILL protocol initialized
[ 10] rtk_btusb: RTKBT_RELEASE_NAME: 20170109_TV_ANDROID_6. x
[ 11] rtk_btusb: Realtek Bluetooth USB driver module init, version 4. 1. 2
[ 12] rtk_btusb: Register usb char device interface for BT driver
[ 13] usbcore: registered new interface driver rtk_btusb
. . .
[ 14] Bluetooth: RFCOMM TTY layer initialized
[ 15] Bluetooth: RFCOMM socket layer initialized
[ 16] Bluetooth: RFCOMM ver 1. 11
[ 17] Bluetooth: BNEP ( Ethernet Emulation) ver 1. 3
[ 18] Bluetooth: BNEP filters: protocol multicast
[ 19] Bluetooth: BNEP socket layer initialized
[ 20] Bluetooth: HIDP ( Human Interface Emulation) ver 1. 2
[ 21] Bluetooth: HIDP socket layer initialized
. . .
[ 23] usb 5-1: New USB device found, idVendor=0a12, idProduct=0001
[ 24] usb 5-1: New USB device strings: Mfr=0, Product=2, SerialNumber=0
[ 25] usb 5-1: Product: CSR8510 A10
Строка 1 говорит о том, что ядро Linux собрано с поддержкой стека Bluetooth, строка 2 сообщает о регистрации в ядре семейства протоколов Bluetooth. Сразу после этого инициализируются слои сокетов HCI, L2CAP и SCO (3–6).
Затем активируются драйверы, предназначенные для взаимодействия с адаптерами Bluetooth, подключаемыми по шинам UART и USB (7–13). К сожалению, последний «понимает» только контроллеры Realtek, а наш адаптер CSR этим драйвером не поддерживается.
Последний блок сообщений (14–21) информирует об инициализации высокоуровневых протоколов RFCOMM, BNEP и HIDP стека Bluetooth. Строки 23–25 соответствуют реакции операционной системы на подключение USB-адаптера и говорят о том, что на физическом уровне он опознается шиной USB.
Интересно, где же находится драйвер адаптера? Команда lsmod выдала список из двух модулей, среди которых rtk_btusb не оказалось. Значит, он интегрирован в ядро Linux. Но список непустой, а значит, ядро собрано с поддержкой модулей. Запомним это на будущее.
Я изучил файловую систему ТВ‑приставки и нашел следующие компоненты, имеющие отношение к подсистеме Bluetooth: