# Информация для разработчиков

## KBluetoothD

Раздел описывает способы интеграции kbluetoothd с приложениями сторонних разработчиков и его вызов для поиска имен беспроводных устройств в кэше.

### Кэш имен

Кэш имен отслеживает все запросы имен устройств и сохраняет результаты. Другие приложения, kbluetoothd в том числе, могут найти имя устройства Bluetooth по уникальному адресу, даже если устройство в данный момент не подключено. Работа с кэшем имен позволяет создать дружественный интерфейс. Пользователю легче запомнить имя устройства Bluetooth, а не его MAC адрес (пример MAC адреса: 00:60:AB:13:83:3D).

После выхода BlueZ со встроенным улучшенным кэшем имен потребность в этой функции отпадет.

Кэш имен может быть доступен через dcop. Для запуска поиска адреса устройства в кэше имен из коммандой строки введите команду: `dcop kbluetoothd DeviceNameCache getCachedDeviceName <address>`. Чтобы выяснить, какое устройство использовалось в последний раз, выполните команду: `dcop kbluetoothd DeviceNameCache resolveCachedDeviceName <name>`. Команды не чувствительны к регистру. Помните, что несколько устройств могут быть сконфигурированы под одним именем.

### Мета-сервер

Для подключения поддержки протокола Bluetooth серверным приложением интегрируйте это приложение с kbluetoothd. В этом случае сервер будет запускаться автоматически.

Вам необходим XML-файл с описанием SDP-записи и соответствующий файл desktop. Kbluetoothd автоматически создаст SDP-запись, назначит канал rfcomm и начнет прослушивание выбранного канала. При попытке соединении с сервисом kbluetoothd подхватит соединение и предоставит ему сокет. Номер указателя будет передан как аргумент командной строки.

Пакет программ kdebluetooth состоит из `kbtserialchat` - очень простой пример программы по интеграции приложений с kdebluetooth, которая предназначена для отладки и общения в чатах. Так как kbtserialchat является одновременно и сервером, и клиентом, нет необходимости указывать все аргументы в командной строке, как это делает kbtserialchat, тем более не нужно указывать URL SDP записей.

XML-файл описания записи SDP должен содержать полное описание и соответствовать структуре записи. Рассмотрим подробнее, как параметр выбранного rfcomm канала попадает в SDP запись сервера. Так как kbluetoothd выбирает канал автоматически, нельзя закодировать его в регистрационный файл SDP записи. Вместо этого резервируют место: <uint valref='rfcommchannel' size='8'/> Rfcomm каналы, используемые при подключении, определены в соответствующем ярлыке. В первую очередь тестируются каналы: `X-KDE-KBLUETOOTHD-port`. `X-KDE-KBLUETOOTHD-autoPortRange` содержит номера занятых сервисами каналов в порядке возрастания.

В данный момент kbluetoothd поддерживает только rfcomm, при необходимости может быть добавлена поддержка l2cap или ему подобных.

### Сервис поиска устройств

kbluetoothd осуществляет активный поиск доступных устройств и выполняет все необходимые действия при подключении или отключения устройства. Сервис kbluetoothd может быть настроен в модуле панели управления, вкладка "Поиск устройств".

Список активных заданий поиска представляет собой список исполняемых файлов каталога `$HOME/.kde/share/apps/kbluetoothd/discovery_jobs/`. Вы можете добавить новые скрипты в каталог общих шаблонов `$PREFIX/share/apps/kdebluetooth/job-templates/`. Скрипты с расширением ".template" из этого каталога будут отображены в списке "Добавить новое задание..." . При выборе пользователем скрипта он будет скопирован в каталог активных заданий домашнего каталога пользователя.

Скрипты этого каталога разделены на две части, для того чтобы обновлять их без переустановки. Скрипты с расширением ".template" хранят редактируемые пользователем настройки. Они копируются в домашний каталог пользователя и при запуске вызывают основной скрипт с расширением ".real", который находится в каталоге шаблонов.

Для того чтобы создать собственное задание, щелкните на "Добавить новое задание...", выберите Типовое_Задание. Файл `Custom_Job.template` будет скопирован в ваш домашний каталог. Для изменения параметров запуска скрипта выберите "Настроить...". Скрипт выведет список всех доступных для изменения параметров команды командной строки и список переменных среды, к которым у вас есть доступ.

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

Для выгрузки, загрузки или удаления файлов при выполнении скрипта задания используйте вызов компонента kioclient.

Если вы написали удачный скрипт для поиска устройств, мы с удовольствием включим его в дистрибутив.