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

© 2006 Петриченко Михаил,
MobileServiceSoft

Вступление

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

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

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

Для получения списка устройств Bluetooth нам понадобятся следующие функции (они очень похожи на функции, используемые для получения списка локальных радиомодулей).

BluetoothFindFirstDevice - начинает перечисление устройств Bluetooth.

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

function BluetoothFindFirstDevice(
   const pbtsp : BLUETOOTH_DEVICE_SEARCH_PARAMS;
   var pbtdi : BLUETOOTH_DEVICE_INFO): HBLUETOOTH_DEVICE_FIND; stdcall;
Параметры:
Pbtsp Указатель на структуру BLUETOOTH_DEVICE_SEARCH_PARAMS. Член dwSize этой структуры должен содержать размер структуры (устанавливается посредством SizeOf(BLUETOOTH_DEVICE_SEARCH_PARAMS)). Член hRadio должен содержать описатель локального радиомодуля, полученный вызовом функции BluetoothFindFirstRadio.
Pbtdi Структура BLUETOOTH_DEVICE_INFO в которую будет возвращена информации об устройстве Bluetooth.
Возвращаемые значения:
  • В случае успешного выполнения функция вернет корректный описатель в качестве результата.
  • В случае ошибки будет возвращен 0. Для получения кода ошибки используйте функцию GetLastError

 

BluetoothFindNextDevice - находит следующее устройство Bluetooth.

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

function BluetoothFindNextDevice(
   hFind : HBLUETOOTH_DEVICE_FIND;
   var pbtdi : BLUETOOTH_DEVICE_INFO): BOOL; stdcall;
Параметры:
hFind Описатель, который вернула функция BluetoothFindFirstDevice
pbtdi Структура BLUETOOTH_DEVICE_INFO, в которую будет помещена информацию об устройстве
Возвращаемые значения:
  • Вернет TRUE, если устройство найдено.
  • Вернет FALSE в случае отсутствия устройства. Используйте GetLastError для получения кода ошибки.

 

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

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

function BluetoothFindDeviceClose(
   hFind : HBLUETOOTH_DEVICE_FIND): BOOL; stdcall;
 
Параметры:
hFind Описатель, который вернула функция BluetoothFindFirstDevice
Возвращаемые значения:
  • Вернет TRUE если описатель успешно закрыт.
  • Вернет FALSE в случае ошибки. Для получения кода ошибки используйте GetLastError.

 

BluetoothGetDeviceInfo - возвращает информацию об указанном устройстве Bluetooth.

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

function BluetoothGetDeviceInfo(
   hRadio : THandle;
   var pbtdi : BLUETOOTH_DEVICE_INFO): DWORD; stdcall;
Параметры:
hRadio Описатель локального радиомодуля Bluetooth
pbtdi Структура BLUETOOTH_DEVICE_INFO, в которую возвразается информация об устройстве. dwSize должен быть равен размеру структуры. addreess должен содержать адрес устройства, о котором хотим получить информацию.
Возвращаемые значения:
  • Вернет ERROR_SUCCESS если выполнено успешно и информация занесена в структуру pbtdi. Остальные значения – код ошибки.

 

Обладая этими знаниями, можно написать процедуру получения информации об устройствах Bluetooth:

procedure GetDevices(_hRadio: THandle);
var
   DeviceInfo: PBLUETOOTH_DEVICE_INFO;
   DeviceSearchParams: BLUETOOTH_DEVICE_SEARCH_PARAMS;
   DeviceFind: HBLUETOOTH_DEVICE_FIND;
begin
   // Инициализация структуры BLUETOOTH_DEVICE_SEARCH_PARAMS
   with DeviceSearchParams do
     begin
       dwSize := SizeOf(BLUETOOTH_DEVICE_SEARCH_PARAMS);
       fReturnRemembered := true; // Вернуть запомненные
       hRadio := _hRadio;
     end;

   // Инициализация структуры BLUETOOTH_DEVICE_INFO
   FillChar(DeviceInfo, SizeOf(BLUETOOTH_DEVICE_INFO), 0);
   DeviceInfo.dwSize := SizeOf(PBLUETOOTH_DEVICE_INFO);

   // Начинаем поиск
   DeviceFind := BluetoothFindFirstDevice(DeviceSearchParams, DeviceInfo);
   if (DeviceFind <> 0) then      begin
       repeat
         // Что-то сделать с полученными данными

         // Инициализация структуры BLUETOOTH_DEVICE_INFO
         FillChar(DeviceInfo, SizeOf(BLUETOOTH_DEVICE_INFO), 0);
         DeviceInfo.dwSize := SizeOf(PBLUETOOTH_DEVICE_INFO);
         // Находим следующее устройство
       until (not BluetoothFindNextDevice(DeviceFind, DeviceInfo));

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

 

Заключение

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

Готовый рабочий пример использования указанных функций вы можете найти здесь.

Желающие могут скачать набор классов для работы с Bluetooth API (21.1K).

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



Опубликовал admin
14 Май, Воскресенье 2006г.



Программирование для чайников.