

Public Class Form1

    '投げるコマンドのリスト。2次元配列がうまくいかなかった。
    Public Code1() As Byte = {&HEF, &HFF, &HFF, &HFF, &HFF, &HEF, &HEF, &HEF, &HEF}     'hello	0000    1
    Public Code2() As Byte = {&HEF, &HFF, &HFF, &HFF, &HEF, &HEF, &HEF, &HEF, &HFF}     'Sneeze	0001    2
    Public Code3() As Byte = {&HEF, &HFF, &HFF, &HEF, &HFF, &HEF, &HEF, &HFF, &HEF}     'Party	0010    3
    Public Code4() As Byte = {&HEF, &HFF, &HFF, &HEF, &HEF, &HEF, &HEF, &HFF, &HFF}     'Hide	0011    4
    Public Code5() As Byte = {&HEF, &HFF, &HEF, &HFF, &HFF, &HEF, &HFF, &HEF, &HEF}     'hello2	0100    
    Public Code6() As Byte = {&HEF, &HFF, &HEF, &HFF, &HEF, &HEF, &HFF, &HEF, &HFF}     'Joke	0101    5
    Public Code7() As Byte = {&HEF, &HFF, &HEF, &HEF, &HFF, &HEF, &HFF, &HFF, &HEF}     'Mmm.OK	0110    6
    Public Code8() As Byte = {&HEF, &HFF, &HEF, &HEF, &HEF, &HEF, &HFF, &HFF, &HFF}     'Tired	0111    7
    Public Code9() As Byte = {&HEF, &HEF, &HFF, &HFF, &HFF, &HFF, &HEF, &HEF, &HEF}     'hello3 1000
    Public Code10() As Byte = {&HEF, &HEF, &HFF, &HFF, &HEF, &HFF, &HEF, &HEF, &HFF}    'Sing   1001    8
    Public Code11() As Byte = {&HEF, &HEF, &HFF, &HEF, &HFF, &HFF, &HEF, &HFF, &HEF}    'Dance  1010
    Public Code12() As Byte = {&HEF, &HEF, &HFF, &HEF, &HEF, &HFF, &HEF, &HFF, &HFF}    'Hide2  1011    9
    Public Code13() As Byte = {&HEF, &HEF, &HEF, &HFF, &HFF, &HFF, &HFF, &HEF, &HEF}    'Hello4 1100
    Public Code14() As Byte = {&HEF, &HEF, &HEF, &HFF, &HEF, &HFF, &HFF, &HEF, &HFF}    'Twinkl 1101    0    
    Public Code15() As Byte = {&HEF, &HEF, &HEF, &HEF, &HFF, &HFF, &HFF, &HFF, &HEF}    'Dance2 1110
    Public Code16() As Byte = {&HEF, &HEF, &HEF, &HEF, &HEF, &HFF, &HFF, &HFF, &HFF}    'Sleep  1111    #

    Private Sub Form1_Shown(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Shown
        SerialPort1.NewLine = vbCr  'これ、初期設定できないの？
        'SerialPort1Open()
        'SerialPort2Open()
    End Sub

    'COMポートを変更した場合の処理1
    Private Sub TextBox1_TextChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles TextBox1.TextChanged
        SerialPort1Open()
    End Sub

    'COMポートを変更した場合の処理2
    Private Sub TextBox2_TextChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles TextBox2.TextChanged
        SerialPort2Open()
    End Sub

    'COMポートを開きます1
    Private Sub SerialPort1Open()
        Control.CheckForIllegalCrossThreadCalls = False
        If SerialPort1.IsOpen = True Then
            'If SerialPort& port & .IsOpen = True Then
            SerialPort1.Close()
        End If
        Try
            SerialPort1.PortName = TextBox1.Text
            SerialPort1.Open()
            Label1.Enabled = True
        Catch ex As Exception
            Label1.Enabled = False
        End Try
    End Sub

    'COMポートを開きます2
    Private Sub SerialPort2Open()
        Label2.Enabled = True
        'If SerialPort2.IsOpen = True Then
        '    SerialPort2.Close()
        'End If
        Try
            SerialPort2.PortName = TextBox2.Text
            Control.CheckForIllegalCrossThreadCalls = False
            SerialPort2.Open()
            SerialPort2.BaudRate = 4800
            SerialPort2.RtsEnable = True
            CheckBox1.Checked = True

            'CheckBox1.Enabled = True
        Catch ex As Exception
            Label2.Enabled = False
            Debug.Print("S2E")
            'CheckBox1.Enabled = False
        End Try
    End Sub

    '終了時にはCOMポートを閉じます。
    Private Sub Form1_FormClosed(ByVal sender As System.Object, ByVal e As System.Windows.Forms.FormClosedEventArgs) Handles MyBase.FormClosed
        If SerialPort1.IsOpen = True Then
            SerialPort1.Close()
        End If
        If SerialPort2.IsOpen = True Then
            SerialPort2.Close()
        End If
    End Sub

    'Phone->Furby
    Private Sub SerialPort1_DataReceived(ByVal sender As System.Object, ByVal e As System.IO.Ports.SerialDataReceivedEventArgs) Handles SerialPort1.DataReceived
        Dim ModemBuff As String
        ModemBuff = SerialPort1.ReadExisting
        Debug.Print("Mod:" & ModemBuff & ";")
        If InStr(ModemBuff, "RING") > 0 Then
            Control.CheckForIllegalCrossThreadCalls = False
            Label1.Text = "RING"
            SerialPort1.WriteLine("ATA")    '着信
            FurbyCode("*")
        Else
            Debug.Print("ataって送ってないよ")
        End If
    End Sub

    'DTMFを受信してコマンドを投げます。
    Private Sub SerialPort2_DataReceived(ByVal sender As System.Object, ByVal e As System.IO.Ports.SerialDataReceivedEventArgs) Handles SerialPort2.DataReceived
        Dim readBuff As String
        readBuff = SerialPort2.ReadExisting
        FurbyCode(readBuff)
        Debug.Print("rb:" & readBuff)

    End Sub

    Sub FurbyCode(ByVal codes As String)
        Dim SendCode() As Byte
        If SerialPort2.IsOpen = False Then
            SerialPort2Open()
        End If
        Debug.Print("FC:" & codes)
        'Control.CheckForIllegalCrossThreadCalls = False
        '配列投げるのも "Code" & codesもうまくいかないので。
        Select Case codes
            Case "1"
                SendCode = Code1
                Label3.Text = "Hello"
            Case "2"
                SendCode = Code2
                Label3.Text = "Sneeze"
            Case "3"
                SendCode = Code3
                Label3.Text = "Party"
            Case "4"
                SendCode = Code4
                Label3.Text = "Hide"
            Case "5"
                SendCode = Code6
                Label3.Text = "Joke"
            Case "6"
                SendCode = Code7
                Label3.Text = "Mmm.OK"
            Case "7"
                SendCode = Code8
                Label3.Text = "Tired"
            Case "8"
                SendCode = Code10
                Label3.Text = "Sing"
            Case "9"
                SendCode = Code11
                Label3.Text = "Dance"
            Case "0"
                SendCode = Code14
                Label3.Text = "Twinkl"
            Case "a"
                SendCode = Code11
            Case "b"
                SendCode = Code12
            Case "c"
                SendCode = Code13
            Case "d"
                SendCode = Code14
            Case "*"
                SendCode = Code15
                SerialPort2.RtsEnable = False
                CheckBox1.Checked = False
                System.Threading.Thread.Sleep(500)
                SerialPort2.RtsEnable = True
                CheckBox1.Checked = True
                Label3.Text = "RTS"

            Case "#", "+"
                SendCode = Code16
                Label3.Text = "Sleep"
                If SerialPort1.IsOpen = True Then
                    System.Threading.Thread.Sleep(3000)
                    SerialPort1.WriteLine("ATH")
                End If
            Case Else
                SendCode = Code15
                Label3.Text = "Unknown"
        End Select

        For i = 0 To 6
            SerialPort2.Write(SendCode, 0, 9)
        Next

    End Sub
    'WakeUpFurby
    Private Sub CheckBox1_CheckedChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles CheckBox1.CheckedChanged
        If CheckBox1.Checked = True Then
            If SerialPort2.IsOpen = False Then
                SerialPort2Open()
            End If
            Debug.Print("ON")
            SerialPort2.RtsEnable = True
        Else
            SerialPort2.RtsEnable = False
            Debug.Print("OFF")
        End If
    End Sub



    Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
        FurbyCode("1")
    End Sub
    Private Sub Button2_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button2.Click
        FurbyCode("2")
    End Sub
    Private Sub Button3_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button3.Click
        FurbyCode("3")
    End Sub
    Private Sub Button4_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button4.Click
        FurbyCode("4")
    End Sub
    Private Sub Button5_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button5.Click
        FurbyCode("5")
    End Sub
    Private Sub Button6_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button6.Click
        FurbyCode("6")
    End Sub
    Private Sub Button7_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button7.Click
        FurbyCode("7")
    End Sub
    Private Sub Button8_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button8.Click
        FurbyCode("8")
    End Sub
    Private Sub Button9_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button9.Click
        FurbyCode("9")
    End Sub
    Private Sub Button10_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button10.Click
        FurbyCode("0")
    End Sub
    Private Sub Button11_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button11.BClick
        FurbyCode("*")
    End Sub
    Private Sub Button12_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button12.Click
        FurbyCode("#")
    End Sub
    Private Sub Button13_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button13.Click
        FurbyCode("a")
    End Sub
    Private Sub Button14_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button14.Click
        FurbyCode("b")
    End Sub
    Private Sub Button15_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button15.Click
        FurbyCode("c")
    End Sub
    Private Sub Button16_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button16.Click
        FurbyCode("d")
    End Sub

    Private Sub Form1_KeyPress(ByVal sender As System.Object, ByVal e As System.Windows.Forms.KeyPressEventArgs) Handles MyBase.KeyPress
        Debug.Print(e.KeyChar)
    End Sub

    Private Sub TextBox3_KeyPress(ByVal sender As System.Object, ByVal e As System.Windows.Forms.KeyPressEventArgs) Handles TextBox3.KeyPress
        TextBox3.Text = ""
        FurbyCode(e.KeyChar)
    End Sub
End Class
