Перейти к содержанию
Fire Monkey от А до Я
  • 0

чтото барахлит DiscoverServices


chaplin.u@gmail.com

Вопрос

вроде всё путём :

1.BluetoothLE1->DiscoverDevices(ScanningTime); - находит устройство

2.FBLEDevice->Connect(); - подключается 

3. FBLEDevice->DiscoverServices(); - читает сервисы но периодически застревает 

 Кто-то знает что может быть ?

Ссылка на комментарий

Рекомендуемые сообщения

  • 0

что-то тут не ладно с логикой :

function TAndroidBluetoothLEDevice.DoDiscoverServices: Boolean;
const
  BLEDiscoverServicesTimeout = 15000;
begin
  InternalGetGattClient;
  Result := False;
  if GetIsConnected then
  begin
    FServicesEvent.ResetEvent;
    FServices.Clear;
    FLastStatus := TBluetoothGattStatus.Failure;
    if FRefreshMethod and FForceRefreshCachedServices then
      FJGatt.refresh;
    Result := FJGatt.discoverServices;
    if Result then
    begin
      FServicesEvent.WaitFor(BLEDiscoverServicesTimeout);
      Result := FLastStatus = TBluetoothGattStatus.Success;
      if Result then
      begin
        InternalGetServices;
        FReconnected := False;
        DoOnServicesDiscovered(Self, FServices);
      end;
    end;
  end;
end;

---------------

не могу понять зачем задержка на 15000 ?

 

Ссылка на комментарий
  • 0
27 минут назад, chaplin.u@gmail.com сказал:

не могу понять зачем задержка на 15000 ?

ну, это же не гарантированная задержка. Если какой-либо другой поток сделает этому FServicesEvent.SetEvent, то будет выход из WaitFor.

Ссылка на комментарий
  • 0

а если нет - то будет стоять 15 секунд ???? это что за логика ? я поменял на 500 ( полсекунды ) и стало гораздо лучше.

а это что за перл ?

Result := FLastStatus = TBluetoothGattStatus.Success;
Ссылка на комментарий
  • 0
21 минуту назад, chaplin.u@gmail.com сказал:

а если нет - то будет стоять 15 секунд ???? это что за логика ?

да, будет. Вопрос про логику - на quality.embarcadero.com.

21 минуту назад, chaplin.u@gmail.com сказал:

а это что за перл ?

без понятия.

Но с учетом того, что перед этим идет

FLastStatus := TBluetoothGattStatus.Failure;

то другой поток все-таки по мнению авторов кода существует. И в нем статус может (и по идее - должен) поменяться. На основании каких условий - нужно разбираться с классами этого синезуба.

Ссылка на комментарий
  • 0
7 минут назад, chaplin.u@gmail.com сказал:

так можно на дельфях писать ? правописание правильное ?

Да. Сравнение одного значения с другим, получается True или False и записывается в Result. Что ж здесь неправильного?

Ссылка на комментарий
  • 0

Я так понимаю вот уже получен Result := FJGatt.discoverServices;    

и если " if Result then     begin       FServicesEvent.WaitFor(BLEDiscoverServicesTimeout);       Result := FLastStatus = TBluetoothGattStatus.Success;

зачем опять брать Result и сравнивать с  FLastStatus := TBluetoothGattStatus.Failure;

чёто наворотили они.

Ссылка на комментарий
  • 0
56 минут назад, chaplin.u@gmail.com сказал:

чёто наворотили они.

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

читать следует так:

если получилось FJGatt.discoverServices, то пробуем чего-то дождаться. Если дождались успешно - то делаем все остальное. Т.е. до "всего остального" очередь дойдет только если выполнились успешно оба предыдущих условия. При этом второе условие выполнилось только в случае успешного выполнения первого.

Ссылка на комментарий
  • 0
2 часа назад, chaplin.u@gmail.com сказал:

ага и сидим 15 секунд и ждём может чего произойдёт.

ну, это уже ваша задача - выяснить, почему не происходит SetEvent, в результате чего ожидание висит все 15 секунд. И где оно вообще должно происходить. И должно ли.

Ссылка на комментарий

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

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

Гость
Ответить на вопрос...

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

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

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

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

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

  • Последние посетители   0 пользователей онлайн

    • Ни одного зарегистрированного пользователя не просматривает данную страницу
×
×
  • Создать...