Сила сигнала Bluetooth - PullRequest
       10

Сила сигнала Bluetooth

6 голосов
/ 16 сентября 2008

Кто-нибудь знает, как лучше отслеживать уровень сигнала соединения Bluetooth в C #?

Я думал об использовании запроса WMI, но не смог отследить класс WMI, инкапсулирующий соединение.

Идея в том, что когда я оставляю свою машину с мобильным телефоном в кармане, сигнал bluetooth ослабевает, и моя машина блокируется, и я не задуваюсь.

1 Ответ

5 голосов
/ 16 сентября 2008

Протокол Link Manager Protocol (LMP), работающий на устройстве Bluetooth, следит за настройкой и настройкой соединения. Все это выполняется двумя устройствами, обменивающимися протокольными блоками данных (PDU). Аппаратные и программные функции RSSI предоставляются на уровне LMP, что позволяет вам управлять данными RSSI. Он позволяет вам считывать уровень RSSI и контролировать выходную мощность TX RF (команды питания LMP) для управления LMP и получать информацию о состоянии.

То, что вы на самом деле ищете, определяется в LMP при использовании стека MS Bluetooth. Интерфейс MS Bluetooth Stack HCI уже поддерживает функции ниже i.e

HCI_READHCIPARAMETERS
HCI_STARTHARDWARE
HCI_STOPHARDWARE
HCI_SETCALLBACK
HCI_OPENCONNECTION
HCI_READPACKET
HCI_WRITEPACKET
HCI_CLOSECONNECTION

Полагаю, Microsoft могла бы реализовать функцию HCI_Read_RSSI, но это не так.

Чтобы получить данные RSSI, вам нужно будет использовать LMP, чтобы получить необходимую информацию.

Пример psuedocode для чтения данных RSSI

// Read HCI Parameters

#include <windows.h>
#include <windev.h>
#include <bt_buffer.h>
#include <bt_hcip.h>
#include <bt_os.h>
#include <bt_debug.h>
#include <svsutil.hxx>
#include <bt_tdbg.h>

unsigned short hci_subversion, lmp_subversion, manufacturer;
unsigned char hci_version, lmp_version, lmp_features[8];

if (BthReadLocalVersion (&hci_version, &hci_subversion, &lmp_version, &lmp_subversion, &manufacturer, lmp_features) != ERROR_SUCCESS) {
            SetUnloadedState ();
            return 0;
      }
WCHAR szLine[MAX_PATH]
unsigned char *pf = lmp_features;

if ((*pf) & 0x02) {
wsprintf (szLine, L"   RSSI");
}

Это будет работать ТОЛЬКО со стеком Microsoft bluetooth. Это также код C ++. Я получил это из поста обмена экспертами (я знаю) внизу страницы. http://www.experts -exchange.com / Программирование / Wireless_Programming / Bluetooth / Q_21267430.html

Нет конкретной функции, которая делает это за вас.

Также есть библиотека, которая может вам помочь, я не полностью просмотрел документацию, но слышал о ней много хорошего. http://inthehand.com/content/32feet.aspx

Человек удачи!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...