というわけで、FT232RLで上手く動いていない状態
のソース該当部分を貼ってみます。
'*************************************
'***** definition serial port *****
'***** & procedure declaration *****
'*************************************
Delegate Sub AddDataDelegate(ByVal b As Byte)
Private Sub AddData(ByVal b As Byte)
Dim b2hex As String
If ((Me.omit_ACTIVE_SENSING.Checked = True) And (b = &HFE) _
Or (Me.omit_TIMING_CLOCK.Checked = True) And (b = &HF8)) Then
'omit ACTIVE SENSING or TIMING CLOCK
'do noting
Else
If (b >= &H80) Then 'status byte?
If (b <> &HFE And b <> &HF8) Then
input_message.AppendText(ControlChars.CrLf)
Else
input_message.AppendText(" ")
End If
Else
input_message.AppendText(" - ")
End If
b2hex = Microsoft.VisualBasic.Right("0" + Hex(b), 2)
input_message.AppendText(b2hex)
End If
End Sub
Private Sub SerialPort1_DataReceived(ByVal sender As Object, ByVal e As System.IO.Ports.SerialDataReceivedEventArgs) Handles SerialPort1.DataReceived
Dim bDataReceived As Byte
Dim addr As New AddDataDelegate(AddressOf AddData)
Try
bDataReceived = SerialPort1.ReadByte
Catch ex As Exception
bDataReceived = ex.Message
End Try
input_message.Invoke(addr, bDataReceived)
End Sub
簡単な概要を補足。
シリアルからDataReceivedハンドラで1バイト単位
でデータを受け取って、invokeでAddDataサブを
呼び出すようにしておいて、データを受け取った際の
処理実体はAddDataサブ側に記述。AddDataサブ側では
バイナリデータをHEXの文字列にしてテキスト
ボックスに追加してます。
(input_message.AppendTextメソッドね)
特にアヤシイ処理はやってないはずなんだけどなぁ…
invokeとdelegateで別スレッドを立てずに、
DataReceivedを受け取ってそのサブルーチン
側で直接処理しちゃえば何とかなるのかな?
そもそもシリアル入力の処理って別スレで
処理しなくても構わないのかな?その辺の
仕様(?)周りが良くわかんないんだよな…
そもそもinvokeとdelegateの周りが良く解ってない
ってことなのかな?
あとで
http://homepage1.nifty.com/MADIA/vb/vb_bbs2/200710/200710_07100071.html
http://blogs.msdn.com/shozoa/archive/2007/07/09/python-workshop-hands-on.aspx
このへんとか読み直してみようか…。
|