line monitor
http://qiita.com/7of9/items/028556c5a819a6a8de96
http://qiita.com/7of9/items/5e6a8c9f60b758c3e640
にて問題のあった<ACK>
などの扱いを対応。
関連 http://qiita.com/7of9/items/eee48db0127ad68790f2
code (v0.9)
変更前
def comrelay(rcvd, srccom, dstcom):
str1 = srccom.read()
if (len(str1) > 0):
rcvd = rcvd + str1
if "\n" in rcvd or "\r" in rcvd:
print "rcvd=", rcvd
dstcom.write(rcvd)
return rcvd, True # new line = true
return rcvd, False # new line = false
変更後
def isControlCharOtherThanCRLF(code):
if ord(code) == 13 or ord(code) == 10:
return False
return ord(code) < 32
def comrelay(rcvd, srccom, dstcom):
str1 = srccom.read()
if len(str1) > 0 and isControlCharOtherThanCRLF(str1):
print "rcvd:control char:" + str(ord(str1))
dstcom.write(rcvd)
return ".", True # new line = true
if (len(str1) > 0):
rcvd = rcvd + str1
if "\n" in rcvd or "\r" in rcvd:
print "rcvd=", rcvd
dstcom.write(rcvd)
return rcvd, True # new line = true
return rcvd, False # new line = false
備考
-
<ACK>
などを受けたらとりあえず反対側のRS-232Cへ送信するようにしている。 - UDPへの送信は"."という文字にしているが、TODOにあるように
"<ACK>"
などの文字としたい気がする - またはUnity側のソフト対応で""に変換するなども必要かも
とりあえず明日使いたいので上記で対応とする。
fix bug
送信処理が間違っていた。
v0.9タグを付け直した。
以下が動作するコード。
str1を送信するべきところをrcvdを送信していた。
def isControlCharOtherThanCRLF(code):
if ord(code) == 13 or ord(code) == 10:
return False
return ord(code) < 32
def comrelay(rcvd, srccom, dstcom):
str1 = srccom.read()
if len(str1) > 0 and isControlCharOtherThanCRLF(str1):
print "rcvd:control char:" + str(ord(str1))
dstcom.write(str1)
return ".", True # new line = true
if (len(str1) > 0):
rcvd = rcvd + str1
if "\n" in rcvd or "\r" in rcvd:
print "rcvd=", rcvd
dstcom.write(rcvd)
return rcvd, True # new line = true
return rcvd, False # new line = false