0

次の機能を(順番に)実行するC#/ Visual Studio 2010を使用してWindowsアプリケーションを構築しようとしています。Bluetooth操作では、32feet.Netライブラリ関数を使用しています。

  1. Bluetoothデバイスを見つけて、ユーザーが選択できるようにリスト/コンボボックスにリストします。(ユーザーが複数のデバイスを選択できるようにしたいので、SelectBluetoothDeviceDialogクラスオプションは使用しません。)デバイスのリストは経由BluetoothClient.DiscoverDevices()で取得できますが、非同期操作ではありません。できれば非同期操作をしたいと思います。BluetoothComponentイベントとメソッドを含むクラスDiscoverDevicesProgressについてDiscoverDevicesComplete読みましたDiscoverDevicesAsyncが、機能させることができませんでした。可能であれば、このためのサンプルコードを共有してください。

  2. ユーザーはリストからデバイスを選択し、「ペアリング」ボタンをクリックします。これまでのところ、を介してデバイスを正常にペアリングできますBluetoothSecurity.PairRequest。ここでは問題はありません。

  3. ユーザーは、「ペアリング済み」リストから1つまたは複数のデバイスを選択し、「接続」をクリックします。BeginConnectここでは、 (非同期操作の場合)クラスConnectedのメソッドを使用してデバイスに接続しようとしましたBluetoothClientが、次の例外が発生しました。

System.Net.Sockets.SocketsException:{"無効な引数が指定されました000319002CC6:0000110100001000800000805f9b34fb"}。

上記の例外の番号は、Connectedを使用して渡したメソッドに必要なGUID番号ですBluetoothService.SerialPort。デバイスがCOM7ポートに接続されていることを想定しているため、これは失敗します。特定のCOMポートでデバイスを接続/ペアリングするにはどうすればよいですか?32feet.Netライブラリ関数でも可能ですか?その場合は、コードサンプルを提供してください。

参考資料注:StackOverflowの以下の記事で説明されているコードをすでに読んで、実装しようとしました。ただし、要件(ユーザーがCOMポートで複数のデバイスをペアリングして接続できるようにする)のため、同じコードを実行できません。しかし、それは概念を理解するのに役立ちました。 32feet.net c#で非同期の近くのBluetoothデバイスを検出する方法

この状況に対処するための最善の方法をアドバイスするように依頼してください。32feet.Net以外のライブラリ/関数を使用してみる必要がある場合は、お知らせください。

私の最終的な目標は、接続されたデバイスとの間でデータの読み取りと書き込みの両方を行うことです。そのため、現時点では、Bluetoothを介して特定のCOMポートに接続しようとしています。

よろしく、ルミット

===========================編集:回答1の情報を更新しました:

TOSHIBA VIRTUAL BT COMポートに接続されているはずのBluetoothデバイス(パッチ)を受け取りました。ご質問にお答えするために東芝の情報が必要でしたことをお詫び申し上げます。ポートとの通信は初めてです。これまでのところ、COM7を使用する必要があることはわかっています。Bluetooth経由でCOM7の同じパッチに接続するC++で構築されたアプリケーションがあります。ただし、ソースコードがなく、C#で同じユーティリティを実装するように求められました。あなたの回答から、C++アプリケーションが万が一WindowsSockets 2を使用している可能性があると思いますか?

また、ポート(整数値)の値を指定するオプションが表示されましBluetoothEndClientたが、それも機能しませんでした。したがって、ポートはCOMではなく、他のタイプのポートであると思います。

よろしく、ルミット

4

2 に答える 2

0

たった今、簡単に。あなたはほとんど正しい方向に進んでいるようです。

1) そのエラーはおそらく、名前が「InvalidArgument」でコードが 10022 のエラーです (check SocketException.SocketErrorCode)。

したがって、MSFT Bluetooth スタックには意味があります ( http://32feet.codeplex.com/wikipage?title=Errorsを参照)。

"Plug and Play, driver-stack event, or other error caused failure." 

つまり、ハードウェア レベルで、ドングル自体またはデバイスのペアの通信に問題があることを意味します。接続しているのは Parani モジュールではありませんか?

Bluetooth UI で手動でペアリングし、接続が機能するかどうかを確認します。

2)本当にCOM ポートが必要ですか? 私は Sockets と System.IO.Streams を使用することを非常に好みます。COM ポートは、セットアップが難しく、保守が非常に難しく、使いにくいものです。COM ポートのみを使用するサードパーティ プログラムがある場合にのみ、それらを使用する必要があります。

BluetoothClient は COM ポートを作成せず、Sockets を使用して Stream を返し、読み取りと書き込みを行います。

于 2013-03-13T15:36:09.740 に答える
0

以下で説明するように、WCL ライブラリを使用して Bluetooth デバイスに正常に接続するための解決策を見つけました。

Step1: wclClient の Transpport プロパティを ctSerial にします。

client.Transport = wclClientTransport.ctSerial; //This makes the wclClient to listen to the COM ports.

ステップ 2: client.SerialParams.Port プロパティを設定して、COM ポート番号を指定します。例えば、

client.SerialParams.Port = 5; // For COM5

よろしく、ルミット

于 2013-03-14T18:11:20.857 に答える