[ttssh2-dev 553] Re: ticket #45271 / Serial Hard Flow

Back to archive index
matsuo zmats****@gmail*****
2023年 1月 26日 (木) 00:47:27 JST


松尾です。

 > 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文字送れないのがおかしいですね。
プログラムの問題かパラメータかな。タイムアウト系かな・・



ttssh2-dev メーリングリストの案内
Back to archive index