Четверг, 02.05.2024
Королевство Delphi
Главное меню
Статьи
Наш опрос
Нужен форум на сайте?
Всего ответов: 90
Статистика
Онлайн всего: 1
Гостей: 1
Пользователей: 0
Форма входа
Главная » Статьи » Система » Работа с Bluetooth

Работа с Bluetooth в Delphi. Часть 1

Вступление

Этой статьей хочу начать серию по работе с Bluetooth в Delphi под Microsoft Windows XP. Так как тема весьма сложная, прошу внимательно читать. Повторяться не буду.

Все программы написаны на Delphi 6 и тестировались со стандартным стеком Bluetooth от Microsoft под Windows XP + SP2.

Все необходимые библиотеки прилагаются. Так что дополнительно ничего качать не нужно. При разработке использовал только API функции с JEDI.

Описание функций будут даны в стиле Object Pascal. Сионистов просьба обращаться к MSDN и Microsoft Platform SDK.

Получение списка установленных радиомодулей Bluetooth

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

BluetoothFindFirstRadio - начинает перечисление локальных радиомодулей Bluetooth.

Объявление функции:

function BluetoothFindFirstRadio(
 const pbtfrp : PBlueToothFindRadioParams;
 var phRadio : THandle): HBLUETOOTH_RADIO_FIND; stdcall; 

Параметры:

pbtfrp указатель на структуру BLUETOOTH_FIND_RADIO_PARAMS. Член dwSize этой структуры должен содержать размер структуры (устанавливается посредством SizeOf(BLUETOOTH_FIND_RADIO_PARAMS)).
phRadio описатель (Handle) найденного устройства.

Возвращаемые значения:

  • В случае успешного выполнения функция вернет корректный описатель в phRadio и корректный описатель в качестве результата
  • В случае ошибки будет возвращен 0. Для получения кода ошибки используйте функцию GetLastError

BluetoothFindNextRadio - находит следующий установленный радиомодуль Bluetooth.

Объявление функции:

function BluetoothFindNextRadio(
 hFind : HBLUETOOTH_RADIO_FIND;
 var phRadio : THandle): BOOL; stdcall; 

Параметры:

hFind Описатель, который вернула функция BluetoothFindFirstRadio
phRadio Сюда будет помещен описатель следующего найденного радиомодуля

Возвращаемые значения:

  • Вернет TRUE, если устройство найдено. В phRadio корректный описатель на найденный радиомодуль.
  • Вернет FALSE в случае отсутствия устройства. phRadio содержит некорректный описатель. Используйте GetLastError для получения кода ошибки.

BluetoothFindRadioClose - закрывает описатель перечисления радиомодулей Bluetooth.

Объявление функции:

function BluetoothFindRadioClose(
 hFind : HBLUETOOTH_RADIO_FIND): BOOL; stdcall; 

Параметры:

hFind Описатель, который вернула функция BluetoothFindFirstRadio

Возвращаемые значения:

  • Вернет TRUE если описатель успешно закрыт.
  • Вернет FALSE в случае ошибки. Для получения кода ошибки используйте GetLastError.

 

Теперь у нас достаточно знаний, чтобы получить список установленных радиомодулей Bluetooth.

Напишем вот такую процедуру:

procedure EnumRadio;
var
 hRadio: THandle;
 BFRP: BLUETOOTH_FIND_RADIO_PARAMS;
 hFind: HBLUETOOTH_RADIO_FIND;
begin
 // Инициализация структуры BLUETOOTH_FIND_RADIO_PARAMS
 BFRP.dwSize := SizeOf(BFRP);

 // Начинаем поиск
 hFind := BluetoothFindFirstRadio(@BFRP, hRadio);
 if (hFind <> 0) then
 begin
 repeat
 // Что-то сделать с полученным описателем

 // Закрыть описатель устройства
 CloseHandle(hRadio);

 // Находим следующее устройство
 until (not BluetoothFindNextRadio(hFind, hRadio));

 // Закрываем поиск
 BluetoothFindRadioClose(hFind);
 end;
end; 

Это, конечно, все здорово, но в принципе бесполезно. Давайте что-нибудь сделаем еще. Например, получим информацию о радиомодуле Bluetooth.

Получение информации о радиомодуле Bluetooth

Для получения информации о радиомодуле Bluetooth используется функция

BluetoothGetRadioInfo - возвращает информацию о радиомодуле, который представлен описателем.

Объявление функции:

function BluetoothGetRadioInfo(
 hRadio : THandle;
 var pRadioInfo : BLUETOOTH_RADIO_INFO): DWORD; stdcall; 

Параметры:

hRadio Описатель локального радиомодуля, который получен функцией BluetoothFindRadioFirst или BluetoothFindRadioNext
pRadioInfo Структура, в которую записывается информация об указанном радиомодуле. Член dwSize должен быть равен размеру структуры

Возвращаемые значения:

  • Вернет ERROR_SUCCESS если информация получена, в противном случае код ошибки.

Структура BLUETOOTH_RADIO_INFO выгляди вот так:

_BLUETOOTH_RADIO_INFO = record
 dwSize : dword;
 address : BLUETOOTH_ADDRESS;
 szName : array [0..BLUETOOTH_MAX_NAME_SIZE - 1] of widechar;
 ulClassofDevice : ulong;
 lmpSubversion : word;
 manufacturer : word;
end;
 
dwSize Размер структуры в байтах
address Адрес локального радиомодуля
szName Имя радиомодуля
ulClassofDevice Класс устройства
lmpSubversion Устанавливается производителем
manufacturer Код производителя (константы BTH_MFG_Xxx). Для получения новых кодов обратитесь к сайту спецификаций Bluetooth

Это уже что-то. Воспользуемся этой информацией и напишем вот такую процедуру.

procedure GetRadioInfo(hRadio: THandle);
var
 RadioInfo: BLUETOOTH_RADIO_INFO;
begin
 // Инициализация структуры BLUETOOTH_RADIO_INFO
 FillChar(RadioInfo, 0, SizeOf(RadioInfo));
 RadioInfo.dwSize := SizeOf(RadioInfo);

 // Получаем информацию
 if (BluetoothGetRadioInfo(hRadio, RadioInfo) = ERROR_SUCCESS) then begin
 // Используем полученную информацию

 end;
end; 

Заключение

Вот пока и все. В следующей статье рассмотрим, как получить список присоединенных устройств и опросить сервисы, которые они представляют.

Внимание! Запрещается перепечатка данной статьи или ее части без согласования с автором. Если вы хотите разместить эту статью на своем сайте или издать в печатном виде, свяжитесь с автором.

Получить ссылку на материал

Категория: Работа с Bluetooth | Добавил: Барон (08.12.2011)
Просмотров: 1835 | Теги: delphi, Bluetooth | Рейтинг: 0.0/0
[ Пожертвования для сайта ] [ Пожаловаться на материал ]

Если вам помог материал сайта кликните по оплаченной рекламе размещенной в центре

Поиск
Категории раздела
ActiveX [10]
CORBA и COM [16]
Kol и MCK [23]
WinAPI [28]
Компоненты [27]
Работа с Bluetooth [4]
Железо [8]
Текст [18]
Разное [98]
Королевство Delphi © 2010-2024
Яндекс цитирования