松尾です。 > ttcomtester の期待する(正常な)動作はこうですか? > - r で RTS を設定すると、対向側の l で CTS に反映される 反映される > - send mode で文字を送信すると、対向側に表示される 表示される > - s で文字を送信すると、対向側に表示される 表示される > - 対向側の RTS を 0 にして、send mode で送信すると? 受信しない(送信されない) > - 対向側の RTS を 0 にして、send mode で送信し、その後対向側の RTS を 1 にすると? 1にしたところで受信する(送信される) > - 対向側の RTS を 0 にして、s で送信すると? 受信しない(送信されない) > - 対向側の RTS を 1 にして、s で送信し、送信中に対向側の RTS を 0 にすると? 受信する、RTS=0にしたところで停止する > - 対向側の RTS を 0 にして、s で送信し、送信中に対向側の RTS を 1 にすると? RTS=1にすると受信される 送信しようとしたとき CTS=0(対向側がRTS=0) のとき どうしたらいいのかわからなかったのですが overlapの動作や GetCommProperties() の dwMaxTxQueue が 0 なところから とにかくOSに渡せば、うまくやってくれるつもりのように思います。 (最初はシリアルチップの特性に合わせて 動作を変えるのかなと思っていました。 TCPソケットと同じ雰囲気の動作ですね。) 'L' を押すと送信前にCTSをチェックするコードをenable/disableできます。 デフォルトはチェックしない、OSに任せるとなっています。 device_com.cppの350行目あたりです。 https://osdn.net/projects/ttssh2/svn/view/branches/ttcomtester/tools/ttcomtester/device_com.cpp?view=markup&revision=10532&root=ttssh2#l350 送信側のプログラムからみると、 送信(WriteFile())すれば、すぐ送信が完了します。 (もっと大量に送れば一部送信や送信失敗になるかもしれません。 ドライバによるかも?) そのあと、プログラムから受けたデータを OSがシリアルに送信していきます。 受信側が 'r' で RTSの 0/1 切り替えると、 送信側のCTSに伝わりOSが送信を停止/再開するという動作のはずです。 送信側で大量に送信('s')中(ばらばら文字が出ている途中)に 受信側で 'r' を押すごとに受信を停止/再開できます。 仮想シリアルでテストしていた時はそのような動作で 妥当に思えます。 ただし受信側はRTSをユーザーが制御できる --rts on か off で起動しないといけません。 hs だとRTSをOSが制御するのでおかしくなる (かエラーになる、ドライバによる?) と思います。(たしかAPIの仕様のどこかに書いてあった) > 1) 手元のケーブル > テスターで計測しましたが、1ピンから9ピンまですべて結線され > ほかのピンとの結線がないストレートケーブルでした。 > > 2) 別の変換器を入手してテストしました > 1: Win 8.1 (マザボ) > 2: Win 10 (バッファロー BSUSRC06) ... 前回の環境を2とします > 3: Win 10 (ラトック REX-USB60F) ... 「RTS/CTS対応」と記述あり > 4: Win XP (マザボ) ... ttcomtester を cmake + VS2005 でビルド > > (前回の結果) > - 1 -> 2 > - 2のRTS 1 > - send mode: 表示されない > - big data: 表示 > - 2のRTS 0 > - send mode: 表示されない > - big data: 表示 > - 1 <- 2 > - 1のRTS 1 > - send mode: 表示 > - big data: 表示 > - 1のRTS 0 > - send mode: 表示 > - big data: 表示 > > (今回の結果) > - 1 -> 3 > - 3のRTS 1 > - send mode: 表示されない > - big data: 表示 > - 3のRTS 0 > - send mode: 表示されない > - big data: 表示 > - 1 <- 3 > - 1のRTS 1 > - send mode: 表示 > - big data: 表示 > - 1のRTS 0 > - send mode: 表示 > - big data: 表示 > > (3) ttcomtester を XP (マザボ) に接続 > > - 1 -> 4 > - 4のRTS 1 > - send mode: 表示されない > - big data: 表示 > - 4のRTS 0 > - send mode: 表示されない > - big data: 表示 > - 1 <- 4 > - 1のRTS 1 > - send mode: 表示 > - big data: 表示 > - 1のRTS 0 > - send mode: 表示 > - big data: 表示 > > - 1からの単体キーが表示(送信?)されない > -> ケーブルかリバース変換器か環境1の問題? 単体キーでも送信はできてほしいです。 プログラムの問題かな・・。 > - RTS が 0 でも単体キー、big data が表示(送信)される > -> これは期待する動作ですか? このどうさはおかしいです。受信側は --rts on でしょうか? > (4) 切り分けで1を排除 > > - 3 -> 4 > - 4のRTS 1 > - send mode: 表示されない > - big data: 表示 > - 4のRTS 0 > - send mode: 表示されない > - big data: 表示 > - 3 <- 4 > - 3のRTS 1 > - send mode: 表示されない > - big data: 表示 > - 3のRTS 0 > - send mode: 表示されない > - big data: 表示されない > > - 今までの環境では片道は生きていた send mode が効かなくなった > - 片側だけ RTS 0 が効いている? 双方向でRTS/CTSが伝わってるいるか見てみる (両方--rts on か off で起動、 'r' で切り替えて 'l' で見てみる、を双方で行う) のをやってみるとつながり具合がわかるかもしれません。 1文字送れないのがおかしいですね。 プログラムの問題かパラメータかな。タイムアウト系かな・・