問題タブ [virtual-serial-port]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票する
1 に答える
2245 参照

c# - 32 フィート以下に widcomm スタック用の仮想シリアル ポートを作成する

現在、私は、PDA と小さな組み込みデバイス間の Bluetooth 通信のセットアップを含むプロジェクトを行っています。この小さな組み込みデバイスは、Bluetooth リンクを介して仮想シリアル ポートとのみ通信できます。

PDA は Windows Mobile 6 で動作する ipaq で、私は c# を使用しています。

Bluetooth経由でシリアルポートと通信できるプログラムを作成しました。しかし、唯一の問題は、このプログラムを実行するたびに、Bluetooth ラジオをアクティブにし、Bluetooth マネージャーを介してこのデバイスと pda を手動でペアリングする必要があることです。私がやりたいことは、このプログラムを実行するときに、pda と組み込みモジュール間の Bluetooth 接続を確立できることです。

だから私は 32feet プロジェクトの関数を使用しています。これは、32feet プロジェクトがウィンドウ Bluetooth スタック用の仮想シリアル ポートしか作成できず、ipaq が使用している widcomm Bluetooth stact を作成できないため、仮想シリアル ポート部分を作成できないことです。

したがって、Windows Mobile 6 の widcomm で仮想シリアル ポートを作成できる既存の c# クラスまたはスタックはありますか。

ありがとう

0 投票する
2 に答える
11949 参照

linux - LinuxでのFTDI仮想シリアルポートの非標準ボーレートの指定

ftdi_sioカーネルモジュールによって提供される仮想シリアルポートを介して通信しようとしているUSBデバイスがあります。ただし、ポートのボーレートを14400に設定するのに問題があります。

  • termios.h14400の定数を指定していないので、とを使用できませcfsetispeedcfsetospeed
  • ftdi_sioカーネルモジュールのソースでは、ボーベースが24000000に設定されており、それを変更する方法がないようです。これは、TIOCSSERIALioctlでカスタム除数を使用して14400ボーレートを取得することができないことを意味します。
  • alt_speedモジュールソースには、ポートの構造体のメンバーを14400に設定すると私が望むことを実行できるように聞こえるコメントtty_structがありますが、既存のインターフェイスを考えると、14400に設定する方法はないようです。

誰かがこれについて何か考えを持っていますか?カーネルモジュールをハックすることでこれを修正するのはかなり簡単ですが、私はカーネルの変更を必要としないソリューションを本当に探しています。

0 投票する
2 に答える
2406 参照

java - RXTX仮想シリアルポートの読み取りの問題

背景:Windows Server 2003 R2、RealPortソフトウェアで作成されたワイヤーサービス仮想シリアルポート、COM5として構成されたシリアルポート、9600ボー、8データビット、パリティビットなし、1ストップビット、フロー制御なし、RXTX2.1-7を使用。

ポートCOM5が見つかり、シリアルポートはportId.openメソッドを使用して作成され、ポートパラメーターとフロー制御は上記のデバイスドライバー設定と一致するように設定されます。serialPort IntupStreamを取得し、InputStreamReaderでラップして、入力エンコーディングを制御できるようにします。デフォルトのエンコーディングはもちろんCp1252です。8データビットを使用している場合、エンコーディングはISO-8859-1、別名Latin1である必要があることを読みました。そして、InputStreamReaderメソッドを使用しています。intc = isr.read(); ケースSerialPort.Event.DATA_AVAILABLEのwhileループで整数cを出力し、文字((char)c)にキャストします。問題は、数字と結果の文字のシフトが大きすぎることです(範囲は135〜250です)。メッセージはすべて「AllRights Reserved。)」で終わり、各メッセージの最後の文字は同じです。でも、シフトは文字間で一貫していません。他のエンコーディングを試しました:UTF8/UTF-8は数値をさらに高くシフトします。ascii/us-asciiもそうです。Cp1252は、65533、8222、および8240にシフトされる3文字を除いて、数値を130〜350の範囲にシフトします。注:InputStreamReader.getEncoding()の使用UTF8およびUTF-8はUTF8であり、asciiおよびus-asciiはASCIIです。

私が試すべき他のエンコーディングはありますか?他の誰かがこの種のものを見ましたか?

0 投票する
2 に答える
1525 参照

windows-mobile - 起動時にデバイスドライバをロードする際の問題-WM6.1

私たちの組み込みシステムプログラマーは、モバイルハードウェア用の仮想シリアルポートドライバーのシェルを開発しました。私はそれを機能させるための方法を入力してきました。ドライバーは期待どおりに機能し、NMEA文字列(GPSデータ)を吐き出すUSBデバイスのCOMポートをシミュレートします。

略してWM6と入力しますが、違いがあればOSはWM6.1です。

私が抱えている問題は、WM6でのみデバイスの起動時にドライバーがロードされないことです。ドライバーはCE5とWM6の両方用に開発されましたが、CE5では、ドライバーは起動時に「ロード」されます。これは、WM6構成の問題を示しています。この時点で、ActivateDevice()メソッドを使用してドライバーがWM6とCE5に読み込まれることに注意してください。これは、少なくともドライバーをテストできるように、ドライバーを起動するための小さなテストアプリであるWM6にこれまで使用してきたものです。 WM6に取り組んでいます。

レジストリには、ドライバの起動に必要なキーがすでに入力されています。したがって、ドライバは起動時に問題なくロードされるはずです。HKEY_LOCAL_MACHINE \ Drivers \ BuiltInにはサブキーA36D_GPS_COMが含まれており、そのキーには含まれています。

DeviceArrayIndex:0

DeviceType:0

Dll:A36D.dll

フラグ:0

わかりやすい名前:A36DGPSCOMポート

インデックス:8

注文:3

プレフィックス:COM

優先度:0

優先度:256

私が言えることから、私がすでに調査したこの問題に対する一般的な2つの一般的な答えがあります。これらのアイデアは組み込みプログラマーによって私に与えられましたが、私はそれらを自分で行う方法を研究しました。

1)デバイスがロードされるとCOMポートが最終的に解放された場合でも、ドライバーがロードしようとしたときにCOMポートはすでに使用されています。レジストリのインデックス値を1から20に変更し、デバイスを再起動しましたが、ドライバーが指定されたCOMポートにロードされません。したがって、これをより徹底的にテストするために、別のデバイスをCOM9からCOM8に移動し、ドライバーをCOM9に移動しました(上記のレジストリ設定を使用)。他のデバイスドライバーはCOM8で起動時に非常にうまくロードされますが、私のデバイスドライバーはCOM9で起動しません。他の設定を微調整しようとしましたが、それでも起動時にロードされません。

2)CE5とWM6のもう1つの考えられる問題と違いは、セキュリティです。したがって、MSDNの記事http://msdn.microsoft.com/en-us/library/bb737570.aspxを使用します。私は署名とXMLプロビジョニングに取り組んできました。特権キー(有効期限が切れていない)を使用して、A36D.dllはVisual Studioで署名され、作成されたインストールCABファイルも同じキーで署名されます。_setup.xmlファイルが作成され、cabファイルに追加されるため、署名されたキーが証明書ストアに追加されます。CABファイルは、それがまだ有効であることを確認するために、同じキーで再度署名されます。さらに、_setup.xmlは独自の.CPFファイルにパッケージ化されています。CABファイルとCPFファイルはどちらも、証明書ストア「HKEY_LOCAL_MACHINE \ Comm \ Security \ SystemCertificates」にキーを追加するので、これが機能していることを確認してください。注意の問題として、私はそれを特権、非特権、ROOTおよびSPC証明書ストアにインストールしました。ただし、モバイルデバイスの起動時にデバイスドライバーがdevice.exeに読み込まれません。

ドライバーでActivateDevice()を呼び出すスタートアップアプリケーションの回避策以外に、スタートアップ時にこのドライバーをロードする方法に困惑しています。

CE5では機能しますがWM6では機能しないのは非常に奇妙だと思います。問題を引き起こしている可能性のあるものは他にありません。

誰かが試すことができるさらなる提案がありますか?

すべての助けに感謝します。

0 投票する
6 に答える
5046 参照

delphi - 反対側のソフトウェア/仮想 COM ポートとコンソール/ターミナルを使用して、COM ポートの読み取り/書き込みをデバッグします。

大きなハードウェア デバイスに接続された COM ポートに対して読み取り/書き込みを行う Delphi アプリケーションを使用しているため、通常、開発中にハードウェアを使用することはできません。とはいえ、通信プロトコルはかなり単純なので、通常は私が開発を行い、オンサイトで誰かにテストしてもらうことができ、通常は機能します。しかし、時折、より難しい問題に遭遇します。これを解決するために、COM ポートの一方の側がアプリケーションであり、もう一方の側が非常に単純な COM ポート デバッグ コンソール (古いモデム ターミナル プログラムと同様) である仮想 COM ポートをセットアップしたいと思います。アプリの送信は画面に記録され、ASCII コマンドを入力してアプリケーションに送信し、ハードウェア デバイスをシミュレートできます。仮想/ソフトウェア COM ポートとデバッグ用のコンソール/端末を提供するツールを見つけることができませんでした。

ソフトウェア/仮想 COM ポートとターミナルは、Windows 7 64 ビット (または必要に応じて Vista 32) をサポートする必要があります。

0 投票する
2 に答える
885 参照

c++ - 読み取り機能がハングしないようにするにはどうすればよいですか?

私はsocatを使用して、次の仮想シリアルポートを作成しています。

C ++で書かれた私のプログラムでは、ttySV1ポートを開いて、読み取りを開始します。

読み取り機能はしばらくありますが、ポートにデータを送信するまで読み取り機能がハングするという問題があります。バッファにデータがない場合にハングせずに終了するようにtaht関数を作成する方法を知っていますか?

編集:私は以下を使用してポートにデータを送信します:

0 投票する
2 に答える
4076 参照

c++ - C++ を使用して接続された USB デバイスのローカル Windows システムをスキャンする

C++ を使用して接続された USB デバイスのローカル Windows システムをスキャンする最良の方法は何ですか? デバイスの ID と照合するために、ベンダー ID と製品 ID のリストを取得する必要があります。特定の VID/PID の組み合わせをスキャンする方法があれば、さらに良いでしょう。私の最終的な目標は、Windows がデバイスに割り当てた仮想 COM ポートを取得することです。それをすべて行う方法があれば、それは素晴らしいことです。いつものように、例は大歓迎です。ありがとう。

0 投票する
4 に答える
49624 参照

c++ - C++ を使用した Windows での USB 挿入/取り外しイベントの検出

USB の挿入/取り外しイベントを処理する必要がある既存のアプリケーションの拡張機能を作成しています。対象のデバイスの VID/PID を知っています。RegisterDeviceNotificationただし、ウィンドウ ハンドルにアクセスできないため、 を介してハンドルを取得する方法がない限り、あまり役立つかどうかわかりませんWINAPI。C++ で USB の挿入/取り外しイベントを検出する最良の方法は何ですか?

Microsoft の Web サイトにあるこのサンプル コードは、 WMI 経由でイベント通知を受信する方法を示しています。

USB の挿入/取り外しイベントを受け取るように変更するにはどうすればよいですか? または、これについて別の方法がありますか?Visual Studio 2008 を使用しています。ありがとうございます。

追加情報

これは私がこれまでに持っているものです(エラー処理を除く):

PC は に入りますWndProcが、USB デバイスを取り外したり挿入したりしても入りません。PC が に入ることがないようですOnDeviceChange。ヒントをいただければ幸いです。USB デバイスの予期しない挿入/取り外しに対処する必要があります。違いがある場合、USB デバイスは Windows に対して仮想 COM ポートとして表示されます。ありがとう。

追加情報:によって返されCreateWindowExたクラスを使用して呼び出すと、「ウィンドウ クラスが見つかりません」というエラー メッセージが表示されて失敗します。atomRegisterClassEx

新しいアプローチ

私もこの新しいアプローチを試みています。USB デバイスのデバイス変更通知メッセージを受信するメッセージのみのウィンドウを作成しようとしています。私は MFC、C++、および Visual Studio 2008 を使用しています。すべてがコンパイルされ、クラッシュまたはロックアップすることなく実行されますが、イベント ハンドラーがトリガーされることはありません。目的のデバイスは、仮想 COM ポートとして Windows にインストールされます。

私のメイン アプリケーションは、次に説明するクラスをインスタンス化し、while ループを使用してキーボード ポーリングからの文字入力を待ちます。この待機時間中に、イベントが発生することを期待して USB デバイスを取り外して挿入します。

簡単にするために、クリーンアップとエラー処理をすべて削除しました。

ご意見やご提案をいただければ幸いです。詳細が不足している場合はお知らせください。喜んで追加します。ありがとう。

メッセージのみのウィンドウを新しいスレッドで開始する必要がありますか?それとも、新しいウィンドウを作成すると、新しいスレッドが自動的にスピンオフしますか?

0 投票する
1 に答える
805 参照

gps - GPS中間ドライバー仮想シリアルポートドライバーからのデータの速度を低下させる

から続く-GPS中間ドライバーの問題

上記はうまく答えられず、私は新しい質問に行くために問題に関する新しい情報を持っていると感じています。

私が直面している問題は、GPS中間ドライバーによってデータが配信される速度です。

Pocket Puttyを使用してシリアルポートを読み取り、公開された正確な情報を確認しました。

COM1-GPS中間ドライバー

COM 6-PCへのシリアルポート(データを手動で入力)

COM8-GPSハードウェア用の仮想シリアルポート。

COM 8を読むと、約3秒ごとに約18個のNMEAストリングが表示されることがわかります。これは、制限されたUSB接続を介してプッシュできるのと同じくらい高速です。そして、それはディスプレイにすばやく表示されます。COM 6(PCから手動でデータを送信する)を読み取る場合、同じようにすばやく表示されます。したがって、利用可能なデータに問題はありません。

GPS中間ドライバーを入力します。GPS中間ドライバーがCOM1(ソフトウェア)およびCOM6(ハードウェア)に設定されている場合。COM6に入力されたデータは、GPS中間ドライバーがない場合と同じようにCOM1に表示されます。データは変更されていないため、COM6で「JON」を送信すると、有効なNMEAデータではありませんが、COM1に表示されます。これは問題ありません。

問題はCOM8にあります。GPS中間ドライバーがCOM1(ソフトウェア)およびCOM8(ハードウェア)に設定されている場合。COM1のPocketPuttyに表示されるデータは本当に遅いです。画面の出力は毎秒約5文字で、データは有効ですが、配信が非常に遅いだけです。これは、仮想シリアルポートの実装における問題を指摘しています。これは、問題を仮想シリアルポートに限定しているため、GPS中間ドライバーが一度に1文字だけすべてのデータを読み取っていないかのようです。

COM8がGPSソフトウェアとPocketPuttyアプリケーションと直接連携し、データが利用可能で、読み取られており、正しいことを示しているため、これを改善するために何を変更できるかわからないため、仮想シリアルポートの実装の明確な例を誰かが提供できますか? 。

0 投票する
1 に答える
908 参照

c++ - USB デバイスが取り外されたときにシリアル I/O をプログラムで中断する - C++

仮想 COM ポートを介して接続された USB デバイスでシリアル I/O が実行されるアプリケーションがあります。デバイスの突然の取り外しが検出された場合、シリアル I/O を停止する最善の方法は何でしょうか。ポートを閉じるだけですか?または、デバイスの存在を示すために維持されるグローバル変数が必要であり、データの送受信を試みる前に各シリアル I/O 関数でチェックする必要がありますか? それとも、2 つを組み合わせたものにするべきでしょうか、それとも別のものにするべきでしょうか? ありがとう。