estra Опубликовано 10 декабря, 2014 Поделиться Опубликовано 10 декабря, 2014 как узнать уровень сигнала до другого BlueTooth устройства? Цитата Ссылка на комментарий
0 Администраторы Brovin Yaroslav Опубликовано 30 декабря, 2014 Администраторы Поделиться Опубликовано 30 декабря, 2014 Классический TBluetooth не поддерживает эту информацию. Но TBluetoothLE позволяет узнать это. Для этого нужно воспользоваться событием: TBluetoothLE.OnReadRSSI(const Sender: TObject; ARssiValue: Integer; AGattStatus: TBluetoothGattStatus) estra 1 Цитата Ссылка на комментарий
0 estra Опубликовано 3 января, 2015 Автор Поделиться Опубликовано 3 января, 2015 Есть проблема с OnReadRSSI. Есть такой код: unit Unit1; interface uses System.SysUtils, System.Types, System.UITypes, System.Classes, System.Variants, FMX.Types, FMX.Controls, FMX.Forms, FMX.Graphics, FMX.Dialogs, System.Bluetooth, FMX.StdCtrls, System.Bluetooth.Components, FMX.ListBox; type TForm1 = class(TForm) Button1: TButton; ComboBox: TComboBox; Label1: TLabel; Button2: TButton; Timer1: TTimer; procedure Button1Click(Sender: TObject); procedure Button2Click(Sender: TObject); procedure Timer1Timer(Sender: TObject); private FBluetoothManagerLE: TBluetoothLEManager; ADevice: TBluetoothLEDevice; AService: TBluetoothGattService; procedure DevicesDiscoveryLEEnd(const Sender: TObject; const ADevices: TBluetoothLEDeviceList); procedure GetCurrentDevice(var ADevice: TBluetoothLEDevice); procedure BluetoothLEReadRSSI(const Sender: TObject; ARssiValue: Integer; AGattStatus: TBluetoothGattStatus); public { Public declarations } end; var Form1: TForm1; implementation {$R *.fmx} procedure TForm1.BluetoothLEReadRSSI(const Sender: TObject; ARssiValue: Integer; AGattStatus: TBluetoothGattStatus); begin Label1.Text := IntToStr( ARssiValue ); end; procedure TForm1.Button1Click(Sender: TObject); begin FBluetoothManagerLE := TBluetoothLEManager.Current; FBluetoothManagerLE.OnDiscoveryEnd := DevicesDiscoveryLEEnd; FBluetoothManagerLE.StartDiscovery( 2000 ); end; procedure TForm1.Button2Click(Sender: TObject); begin if ComboBox.ItemIndex >= 0 then begin GetCurrentDevice(ADevice); if ADevice <> nil then begin ADevice.OnReadRSSI := BluetoothLEReadRSSI; ADevice.DiscoverServices; Timer1.Enabled := True; end; end; end; procedure TForm1.DevicesDiscoveryLEEnd(const Sender: TObject; const ADevices: TBluetoothLEDeviceList); var i: Integer; begin ComboBox.Items.Clear; for I := 0 to ADevices.Count - 1 do ComboBox.Items.Add(ADevices[i].DeviceName); end; procedure TForm1.GetCurrentDevice(var ADevice: TBluetoothLEDevice); var I: Integer; begin for I := 0 to FBluetoothManagerLE.LastDiscoveredDevices.Count - 1 do begin if FBluetoothManagerLE.LastDiscoveredDevices[I].DeviceName = ComboBox.Items[ComboBox.ItemIndex] then ADevice := FBluetoothManagerLE.LastDiscoveredDevices[I]; end; end; procedure TForm1.Timer1Timer(Sender: TObject); begin ADevice.ReadRemoteRSSI; end; end. В таймере периодически вызывается ReadRemoteRSSI, после чего должно сработать событие BluetoothLEReadRSSI. Проблема в том, что событие вызывается лишь несколько раз после нажатия Button2. Такое ощущение, что есть какой то короткий промежуток времени (примерно 5 секунд), по истечении которого событие отваливается. Косвенно это подтверждает следующий эксперимент: ставим точку останова в событии таймера (Timer1Timer), после ее срабатывания ждем секунд 5, снимаем точку останова и продолжаем выполнение программы (F9), событие BluetoothLEReadRSSI не сработает ни разу. Собственно вопрос, почему так происходит и как заставить работать нормально? Цитата Ссылка на комментарий
0 estra Опубликовано 10 января, 2015 Автор Поделиться Опубликовано 10 января, 2015 Up. Цитата Ссылка на комментарий
0 estra Опубликовано 11 февраля, 2015 Автор Поделиться Опубликовано 11 февраля, 2015 Все еще актуально. Никто не в курсе, как это исправить? Цитата Ссылка на комментарий
Вопрос
estra
как узнать уровень сигнала до другого BlueTooth устройства?
Ссылка на комментарий
4 ответа на этот вопрос
Рекомендуемые сообщения
Присоединяйтесь к обсуждению
Вы можете написать сейчас и зарегистрироваться позже. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.