6

誰かがC#でBluetooth接続の信号強度を適切に追跡する方法を知っていますか?

WMIクエリを使用することを考えていましたが、接続をカプセル化するWMIクラスを追跡できませんでした。

アイデアは、携帯電話をポケットに入れたままマシンを離れると、Bluetooth信号が弱まり、マシンがロックされて、うんざりすることはありません。

4

1 に答える 1

5

Bluetooth デバイスで実行されているリンク マネージャー プロトコル (LMP) は、リンクのセットアップと構成を管理します。これはすべて、プロトコル データ ユニット(PDU)を交換する 2 つのデバイスによって行われます。RSSI のハードウェアおよびソフトウェア機能は、RSSI データの管理を可能にする LMP レベルで提供されます。これにより、RSSI レベルを読み取り、TX RF 出力電力 (LMP 電力コマンド) を制御して LMP を制御し、ステータス情報を取得できます。

したがって、実際に探しているものは、MS Bluetooth スタックを使用するときに LMP で定義されます。MS Bluetooth スタック HCI インターフェイスは、次の機能を既にサポートしています。

HCI_READHCIPARAMETERS
HCI_STARTHARDWARE
HCI_STOPHARDWARE
HCI_SETCALLBACK
HCI_OPENCONNECTION
HCI_READPACKET
HCI_WRITEPACKET
HCI_CLOSECONNECTION

マイクロソフトは HCI_Read_RSSI という関数を実装できたはずですが、実装していませんでした。

RSSI データを取得するには、LMP を使用して必要な情報を取得する必要があります。

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/Programming/Wireless_Programming/Bluetooth/Q_21267430.html

あなたのためにそれを行う特定の機能はありません。

また、あなたを助けるかもしれないこのライブラリがあります.私はドキュメントを完全に見ていませんが、それについて良いことを聞いています. http://inthehand.com/content/32feet.aspx

がんばれ!

于 2008-09-15T20:53:23.667 に答える