Перейти к содержанию
    

Сопряжение с Bluetooth

Господа, может не в тему и не в этом форуме, но все же.

Пишу приложение под Андроид для работы с блютус модулем.

Пишу в среде Embarcadero 10, использую VCL компонент TBluetooth

TBluetoothDeviceList *BL = new  TBluetoothDeviceList;
TBluetoothAdapter *BTAdapter;
TBluetoothManager *BTManager;
BL=Bluetooth1->LastDiscoveredDevices; // Создаем список найденых устройств (МЫ ИХ ИСКАЛИ РАНЬШЕ, В ДРУГОЙ ФУНКЦИИ)
for (int i=0;i<BL->Count;i++)
{
Memo1->Lines->Add(BL->List[i]->DeviceName+" "+AnsiString(BL->List[i]->IsPaired));  // ВЫВОДИМ ИНФОРМАЦИЮ О КАЖДОМ НАЙДЕННОМ УСТРОЙСТВЕ
Memo1->Lines->Add(BL->List[i]->Address);
if (BL->List[i]->DeviceName.SubString(1,5)=="MyBTH") // ЕСЛИ ПЕРВЫЕ 5 БУКВ СОВПАДАЮТ С ИСКОМЫМ, то..
{
       n=i;
       Application->ProcessMessages();
          Bluetooth1->Pair(BL->List[i]);  // СОПРЯГАЕМ
          if (BL->List[i]->IsPaired==1) ShowMessage("SUCCESS");  // ТУТ Ж ПРОВЕРЯЕМ, СОПРЯЖЕНО ЛИ
}
          if (BL->List[n]->IsPaired==1) ShowMessage("SUCCESS 1");  // ПРОВЕРЯЕМ, СОПРЯЖЕНО ЛИ ПО ОКОНЧАНИЮ, А  ВДРУГ?
}

Не сопрягает. При последующих выовах BL->List->IsPaired возвращает "0".

 

 

Вот собственно дока

http://docwiki.embarcadero.com/Libraries/B...TBluetooth.Pair

 

Что меня смущает - а как же обмен пин кодом? Судя по описанию, досаточно лишь дать команду и все образуется, но это ведь не так. Может еще какую процедуру нужно выполнить перед Pair() ???

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

Изменено пользователем zheka

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

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

пин-код - это опционально. И где-то там в настройках у Вас должно определяться - использовать его или нет, и его тип - статический или динамический.

А как Вы думали работают к примеру устройства без кнопок и дисплеев? Как на таких пин вводить?

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

пин-код - это опционально. И где-то там в настройках у Вас должно определяться - использовать его или нет, и его тип - статический или динамический.

А как Вы думали работают к примеру устройства без кнопок и дисплеев? Как на таких пин вводить?

 

Не совсем вас понял.

Смотрите, я намеренно на блютус модуле конечного устройства настроил пин-код. Чтобы "враг" не смог подключиться. И при этом я не хочу создавать проблемы с пин-кодом для пользователя, поэтому мин-код известен блютус-модулю и софту на телефоне. Я бы хотел, чтобы этот процесс проходил автоматически, то есть посылается запрос на сопряжение, блютус-модуль запрашивает пинкод, программа на телефоне сама отвечает на этот запрос, отправляя заложенный в нее пин-код.

 

Начнем с вопроса - чисто технически, такое возможно?

Или же необходимо заставлять пользователя сопрягать устройства средствами операционной системы, а потом запускать софт и подключаться к уже сопряженному девайсу?

Изменено пользователем zheka

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Я бы хотел, чтобы этот процесс проходил автоматически, то есть посылается запрос на сопряжение, блютус-модуль запрашивает пинкод, программа на телефоне сама отвечает на этот запрос, отправляя заложенный в нее пин-код.Начнем с вопроса - чисто технически, такое возможно?

Возможно. Возможно и не запрашивать ничего, так как при запросе спаривания на конечное устройство приходит ID запрашивающего. Конечное устройство может его опознать и дать разрешение автоматом.

Я так делал. Но деталей уже не помню - было это несколько лет назад. У меня был BT-модуль bluegiga WT12. Там можно было AT-командами получив запрос спаривания, записать полученный ID спаривания в память модуля сказав чтобы разрешать соединения с ним автоматически.

Как-то так. Но деталей не помню уж. Помню что был отдельный ключ конфигурации, который и задавал алгоритм спаривания: использовать-ли интерактивное спаривание с запросом пользователя о пин-коде или не использовать; и там были ещё другие варианты.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Что меня смущает - а как же обмен пин кодом? Судя по описанию, досаточно лишь дать команду и все образуется, но это ведь не так. Может еще какую процедуру нужно выполнить перед Pair() ???

 

На самом деле в этом дот.нете Pair() - это вызов процедуры идентификации.

function TWinBluetoothAdapter.DoPair(const ADevice: TBluetoothDevice): Boolean;
begin
  Result := BluetoothAuthenticateDeviceEx(0 , FRadioHandle, TWinBluetoothDevice(ADevice).FDeviceInfo, nil,
     MITMProtectionRequiredGeneralBonding) = ERROR_SUCCESS;
end;

 

Параметр nil указывает, что должна быть вызвана callback-функция, если она уже была зарегистрирована (BluetoothRegisterForAuthenticationEx),

либо диалоговое окно для ввода вручную.

 

Вы напрасно смотрите справку делфи: времена более-менее вменяемого хелпа уже прошли.

Смотрите функции API у майкрософта и затем обычным файловым поиском - по каталогу у делфи.

 

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

http://docwiki.embarcadero.com/RADStudio/B...assic_Bluetooth

To start a pairing request, call TBluetooth.Pair. The actual pairing operation is handled by the operating system, which guides your user through the pairing process.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Присоединяйтесь к обсуждению

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

Гость
Ответить в этой теме...

×   Вставлено с форматированием.   Вставить как обычный текст

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отображать как обычную ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.

×
×
  • Создать...