zheka 1 20 февраля, 2017 Опубликовано 20 февраля, 2017 (изменено) · Жалоба Господа, может не в тему и не в этом форуме, но все же. Пишу приложение под Андроид для работы с блютус модулем. Пишу в среде 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() ??? Рылся в указанной доке - нет там ничего про пин-код. Изменено 20 февраля, 2017 пользователем zheka Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
jcxz 184 21 февраля, 2017 Опубликовано 21 февраля, 2017 · Жалоба Рылся в указанной доке - нет там ничего про пин-код. пин-код - это опционально. И где-то там в настройках у Вас должно определяться - использовать его или нет, и его тип - статический или динамический. А как Вы думали работают к примеру устройства без кнопок и дисплеев? Как на таких пин вводить? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
zheka 1 21 февраля, 2017 Опубликовано 21 февраля, 2017 (изменено) · Жалоба пин-код - это опционально. И где-то там в настройках у Вас должно определяться - использовать его или нет, и его тип - статический или динамический. А как Вы думали работают к примеру устройства без кнопок и дисплеев? Как на таких пин вводить? Не совсем вас понял. Смотрите, я намеренно на блютус модуле конечного устройства настроил пин-код. Чтобы "враг" не смог подключиться. И при этом я не хочу создавать проблемы с пин-кодом для пользователя, поэтому мин-код известен блютус-модулю и софту на телефоне. Я бы хотел, чтобы этот процесс проходил автоматически, то есть посылается запрос на сопряжение, блютус-модуль запрашивает пинкод, программа на телефоне сама отвечает на этот запрос, отправляя заложенный в нее пин-код. Начнем с вопроса - чисто технически, такое возможно? Или же необходимо заставлять пользователя сопрягать устройства средствами операционной системы, а потом запускать софт и подключаться к уже сопряженному девайсу? Изменено 21 февраля, 2017 пользователем zheka Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
jcxz 184 21 февраля, 2017 Опубликовано 21 февраля, 2017 · Жалоба Я бы хотел, чтобы этот процесс проходил автоматически, то есть посылается запрос на сопряжение, блютус-модуль запрашивает пинкод, программа на телефоне сама отвечает на этот запрос, отправляя заложенный в нее пин-код.Начнем с вопроса - чисто технически, такое возможно? Возможно. Возможно и не запрашивать ничего, так как при запросе спаривания на конечное устройство приходит ID запрашивающего. Конечное устройство может его опознать и дать разрешение автоматом. Я так делал. Но деталей уже не помню - было это несколько лет назад. У меня был BT-модуль bluegiga WT12. Там можно было AT-командами получив запрос спаривания, записать полученный ID спаривания в память модуля сказав чтобы разрешать соединения с ним автоматически. Как-то так. Но деталей не помню уж. Помню что был отдельный ключ конфигурации, который и задавал алгоритм спаривания: использовать-ли интерактивное спаривание с запросом пользователя о пин-коде или не использовать; и там были ещё другие варианты. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
aiwa 0 21 февраля, 2017 Опубликовано 21 февраля, 2017 · Жалоба Что меня смущает - а как же обмен пин кодом? Судя по описанию, досаточно лишь дать команду и все образуется, но это ведь не так. Может еще какую процедуру нужно выполнить перед 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 у майкрософта и затем обычным файловым поиском - по каталогу у делфи. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Lagman 1 21 февраля, 2017 Опубликовано 21 февраля, 2017 · Жалоба 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. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться