問題タブ [rxtx]
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.
linux - RxTx SerialEvent.DATA_AVAILABLE イベントを処理するスレッドはどれですか?
Linuxディストリビューションでusbserial経由でRxTxライブラリを使用しています。RxTx ライブラリは、シリアル経由での動作とは (悪い意味で) まったく異なる動作をしているようです。
私のアプリケーションには複数のスレッドがあり、私の最大の問題の 1 つは、どこからともなく、ストリームで 1 ~ 2 バイト余分に取得しているように見えることです。それらがどこから来たのか、なぜなのかわかりません。この問題は、別のスレッドを使用して RxTx ストリームに書き込むと、より頻繁に発生するようです。
そのため、DATA_AVAILABLE イベントを取得したときに、現在の RxTx スレッドで読み取りを処理する必要があるのか、それとも別のスレッドで読み取りを処理する必要があるのか 疑問に思いました。
誰かが何らかの方法でそれを行うための良い理由または悪い理由を持っていることを願っています.
linux - usbserial を使用して RxTx 経由でデータを書き込みますか?
Linuxディストリビューションでusbserial経由でRxTxライブラリを使用しています。RxTx ライブラリは、シリアル経由での動作とは (悪い意味で) まったく異なる動作をしているようです。
私の最大の問題の 1 つは、RxTx SerialPortEvent.OUTPUT_BUFFER_EMPTY
USB シリアル経由で Linux で動作しないことです。
いつストリームに書き込む必要があるかを知るにはどうすればよいですか? 私が見逃した可能性のある指標はありますか?
これまでのところ、書き込みと読み取りを同時に行った経験はあまりありませんでした。DATA_AVAILABLE
ストリームへの書き込み中にハンドラーが呼び出されないようにロックする必要があるかどうかは誰にもわかりませんか? または、RxTx
同時読み取り/書き込みを受け入れますか?
java - WindowsでRXTX Javaライブラリを使用してNoSuchPortException?
http://www.jcontrol.org/download/readme_rxtx_en.htmlから Windows で rxtx をセットアップする手順に従いました。
私が正確に行ったことは、rxtxSerial.dll を「C:\Program Files\Java\jdk1.6.0_07\jre\bin」にコピーし、RXTXcomm.jar を「C:\Program Files\Java\jdk1.6.0_07\jre\」にコピーすることでした。 lib\ext" (私の JAVA_HOME 変数は C:\Program Files\Java\jdk1.6.0_07\jre に設定されています)
RXTXcomm.jar も eclipse プロジェクトに追加しました。
しかし、実行すると、まだ「NoSuchPortException」と表示されます
私のJavaファイルでは、次のように伝えています。
また、Java Comm API も試しました。どちらもシリアルポートを認識できませんが、指示に正しく従ったことは確かです。そこにファイルがあります。
誰かがそれが何であるか考えていますか?
java - 不満足なリンク: Windows XP で rxtx を使用して Java 通信 API を置き換える SolarisParallel
rxtx 2.0 jar と dll を使用して、Windows XP で Java 通信 API を使用しようとしています。RXTXcomm.jar を jre\ext にコピーし、rxtxSerial.dll と rxtxParallel.dll を jre\bin にコピーしました。
プログラムを実行すると、次のエラーが発生しました。
SolarisSerial のロード中にエラーが発生しました: java.lang.UnsatisfiedLinkError: java.library.path に SolarisSerialParallel がありませんドライバ com.sun.comm.SolarisDriver をロードしています
なぜsolarisドライバをロードしようとしていますか?? 前もって感謝します
java - Java InputStream ブロッキング読み取り
Java api によると、次のInputStream.read()
ように記述されています。
ストリームの終わりに達したために使用できるバイトがない場合は、値 -1 が返されます。このメソッドは、入力データが利用可能になるか、ストリームの終わりが検出されるか、例外がスローされるまでブロックされます。
読み取りを行うwhile(true)
ループがあり、ストリームを介して何も送信されていない場合は常に -1 になります。それは予想されます。
私の質問は、 read() がブロックされるのはいつですか? データを取得しない場合は -1 を返します。データが受信されるまでブロッキング読み取りが待機することを期待します。入力ストリームの最後に到達した場合、read() は -1 を返すのではなく、単にデータを待つべきではありませんか?
または、ストリームにアクセスする別のスレッドがあり、read() がストリームにアクセスできない場合にのみ read() がブロックされますか?
それが私の次の質問につながります。以前は、データが利用可能になったときに通知するイベント リスナー (ライブラリによって提供される) を使用していました。通知を受けたときwhile((aByte = read()) > -1)
、ストアをバイトと呼びました。非常に近い時間に 2 つのイベントを取得し、すべてのデータが表示されていないことに戸惑いました。2 番目のイベントのデータの末尾のみが表示され、残りが欠落しているように見えました。
最終的にコードを変更して、呼び出したイベントが発生したときにif(inputStream.available() > 0) while((aByte = read()) > -1)
バイトを格納するようにしました。今では正常に機能し、すべてのデータが表示されました。
誰かがこの動作を説明できますか? はInputStream.available()
、(ストリームの) 次の呼び出し元をブロックする前に読み取ることができるバイト数を返すと言われています。.available() を使用しない場合でも、最初のイベントの読み取りが 2 番目のイベントの読み取りをブロックするだけで、大量のストリーム データを消去したり消費したりしないと予想されます。これを行うと、すべてのデータが表示されないのはなぜですか?
java - Java アプレット内でネイティブ ライブラリを動的にロードする
ユーザーのシリアル ポートから読み取る Java アプレットを作成しようとしています。このために、RXTX ライブラリと組み合わせてJava Comm APIを使用しています。ローカル Java アプリケーションを介してデータを読み取ることに成功しましたが、アプレット内から同じことを行うことができないようです。問題は、RXTX ライブラリがネイティブ ライブラリであり、このライブラリを Java アプレット内にロードする方法が見つからないことです。興味深い記事を 2 つ見つけました (Using JNI in Appletsはこの記事を参照しています) が、どちらも 10 年以上前のものであり、新しい解決策があるかどうか疑問に思っています。または、代替案を提案できる場合は、ぜひお聞かせください。
java - SerialEvent.RI が機能しないのはなぜですか?
このコードを実行している 2 台のコンピューターがあります。
これは最終バージョンではありません。私はそれがどのように機能するかを見ているだけです。問題は、このコードを使用して携帯電話などの電話番号にダイヤルすると、機能しますが、その逆は機能しません。つまり、自分の番号から電話をかけ、プログラムをリスナーとして動作させます。2台のコンピューターでも試しましたが、どちらも相手から電話を受けませんでした。私は何か間違ったことをしていますか?助けていただければ幸いです。
java - rxtx COM ポート
rxtx api を使用して、com ポート経由で GPS デバイスからデータを読み取ります。現在、構成ファイルを読み取り、リストされているポートを探して、正しいcomポートを見つけています。私が抱えている問題は、デバイスが取り外された場合、com ポートが変更される可能性があるため、ユーザーは構成ファイルを変更する必要があることです。これに似たアプリを C# で作成し、com ポートの代わりに Windows デバイス名をリストすることができ、デバイス名が構成ファイルの名前と一致するまで、com ポートを繰り返しました。その方法を使用すると、使用されているcomポートが変更されても、構成ファイルで何も変更する必要はありません。rxtx APIでそれを行う方法はありますか?
前もって感謝します!
java - シリアル ポートが閉じていません。COMポートを解放したい
シリアル ポートが閉じていません。COMポートを開放したい…
以下は私のコードです....
java - RXTX での受信に関する問題
RXTX を約 1 年間使用していますが、あまり問題はありません。新しいハードウェアと対話する新しいプログラムを開始したばかりなので、他のプロジェクトで使用した connect() メソッドを再利用しましたが、これまでに見たことのない奇妙な問題があります。
問題
デバイスは正常に動作します。ハイパーターミナルに接続すると、期待どおりのものが送信され、受信され、シリアル ポート モニター(SPM) がこれを反映するためです。
ただし、メインアプリで発生している問題を診断するために書いた単純な HyperTerminal-clone を実行すると、SPM に従ってバイトが送信されますが、何も受信されず、SerialPortEventListener が起動しません。メインループで利用可能なデータをチェックしても、reader.ready()
が返されますfalse
。このチェックを無視すると、例外が発生します。詳細は以下をご覧ください。
connect() メソッドの関連セクション
例外
大きな問題 (再び)
考えられるすべてのハードウェアの問題を排除したと思いますが、私のコードまたは RXTX ライブラリのどこが悪いのでしょうか?
編集:何か面白い
応答を取得するはずの Java から一連のコマンドを送信した後にハイパーターミナルを開くと、すべての応答がすぐに表示されます。まるでバッファのどこかに置かれているかのように見えますが、使用できません。
編集2:何か新しいことを試してみましたが、同じ結果
ここにあるコード例を実行しましたが、結果は同じでした。データは入ってこなかったのですが、新しいプログラムに切り替えたら一気に入ってきました。
編集 3
ハードウェアは問題なく、別のコンピューターでも同じ問題が発生します。私は、いかなる種類の USB アダプタも使用していません。
私もPortMonを使い始めましたが、興味深い結果が得られています。HyperTerminal と RXTX は同じ設定を使用しておらず、HyperTerminal とは異なり、RXTX は常にポートをポーリングしますが、どの設定がこれに影響するかはまだわかりません。定期的なポーリングから構成を切り離すことができ次第、PortMon ログを投稿します。
編集 4
過去 3 か月間の何らかの Windows 更新プログラムが原因である可能性はありますか? 私のMATLAB mexベースのプログラムの1つが一度台無しになりました。
編集 5
また、HyperTerminal、RXTX、およびデバイスと通信するために見つけた別のプログラムの間でいくつかの違いがあることに気付きました (しかし、私が望むことをしないので、私は自分のプログラムを展開しています)
- ハイパーターミナル - フロー制御なしに設定されていますが、シリアル ポート モニターの RTS および DTR インジケーターは緑色です。
- 他のプログラム - どの設定を使用していると思われるかは不明ですが、SPM の RTS インジケータのみが緑色です
- RXTX - どのようなフロー制御を設定しても、SPM の CTS および DTR インジケータのみがオンになります。
Serial Port Monitor のヘルプ ファイルから (言い換え):