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


Вступление

В первой части статьи мы научились получать список локальных радиомодулей 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(PBLUETOOTH_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.

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



Дополнительно

Нашли ошибку на сайте? Выделите текст и нажмите Shift+Enter

Код для блога бета

Выделите HTML-код в поле, скопируйте его в буфер и вставьте в свой блог.