Public Class Form1
    Dim m_caoEng As CAOLib.CaoEngine
    Dim m_caoCtrl As CAOLib.CaoController

    Dim m_bLED1 As Boolean
    Dim m_bLED2 As Boolean
    Dim m_bHeater As Boolean

    Private Sub Form1_FormClosed(ByVal sender As Object, ByVal e As System.Windows.Forms.FormClosedEventArgs) Handles Me.FormClosed
        On Error Resume Next

        If Not (m_caoCtrl Is Nothing) Then
            m_caoEng.Workspaces.Item(0).Controllers.Remove(m_caoCtrl.Index)
            m_caoCtrl = Nothing
        End If
        m_caoEng = Nothing
        Exit Sub
    End Sub

    Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
        On Error GoTo ErrorProc

        ' エンジンの作成
        m_caoEng = New CAOLib.CaoEngine

        ' タイマーはとめておこう
        cmdMeasure.Text = "Start"
        Timer1.Enabled = False

        ' ボタンの無効化
        cmdConnect.Enabled = True
        cmdDisconnect.Enabled = False
        cmdMeasure.Enabled = False
        cmdLED1.Enabled = False
        cmdLED2.Enabled = False
        cmdHeater.Enabled = False
        
        Exit Sub
ErrorProc:
        MsgBox(Hex(Err.Number) & ":" & Err.Description)
    End Sub

    Private Sub cmdConnect_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles cmdConnect.Click
        On Error GoTo ErrorProc

        ' コントローラの作成
        m_caoCtrl = m_caoEng.Workspaces.Item(0).AddController("USBRH", "CaoProv.StrawberryLinux.USBRH", "", "Num=" & txtNum.Text)

        ' LEDの初期設定
        Dim lParam(1) As Integer
        m_bLED1 = False
        m_bLED2 = False
        lParam(0) = 0
        lParam(1) = 0
        m_caoCtrl.Execute("ControlIO", lParam)
        lParam(0) = 1
        m_caoCtrl.Execute("ControlIO", lParam)

        ' ヒーターの初期設定
        m_bHeater = False
        cmdHeater.Text = "Heater On"
        m_caoCtrl.Execute("SetHeater", 0)

        ' ボタンのEnalbe
        cmdConnect.Enabled = False
        cmdDisconnect.Enabled = True
        cmdMeasure.Enabled = True
        cmdLED1.Enabled = True
        cmdLED2.Enabled = True
        cmdHeater.Enabled = True

        Exit Sub
ErrorProc:
        MsgBox(Hex(Err.Number) & ":" & Err.Description)

        ' 途中でこけた場合あるはずのないコントローラを作成しているので、消しておく
        If Not (m_caoCtrl Is Nothing) Then
            m_caoEng.Workspaces.Item(0).Controllers.Remove(m_caoCtrl.Index)
            m_caoCtrl = Nothing
        End If
    End Sub

    Private Sub cmdDisconnect_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles cmdDisconnect.Click
        On Error GoTo ErrorProc

        ' タイマーはとめておこう
        cmdMeasure.Text = "Start"
        Timer1.Enabled = False

        ' LEDの初期設定
        Dim lParam(1) As Integer
        m_bLED1 = False
        m_bLED2 = False
        lParam(0) = 0
        lParam(1) = 0
        m_caoCtrl.Execute("ControlIO", lParam)
        lParam(0) = 1
        m_caoCtrl.Execute("ControlIO", lParam)

        ' ヒーターの初期設定
        m_bHeater = False
        cmdHeater.Text = "Heater On"
        m_caoCtrl.Execute("SetHeater", 0)

        ' オブジェクトの削除
        m_caoEng.Workspaces.Item(0).Controllers.Remove(m_caoCtrl.Index)
        m_caoCtrl = Nothing

        ' ボタンの無効化
        cmdConnect.Enabled = True
        cmdDisconnect.Enabled = False
        cmdMeasure.Enabled = False
        cmdLED1.Enabled = False
        cmdLED2.Enabled = False
        cmdHeater.Enabled = False

        Exit Sub
ErrorProc:
        MsgBox(Hex(Err.Number) & ":" & Err.Description)
    End Sub

    Private Sub cmdLED1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles cmdLED1.Click
        On Error GoTo ErrorProc

        Dim lParams(1) As Integer
        lParams(0) = 0

        If (m_bLED1) Then
            lParams(1) = 0
            m_bLED1 = False
        Else
            lParams(1) = 1
            m_bLED1 = True
        End If
        m_caoCtrl.Execute("ControlIO", lParams)

        Exit Sub
ErrorProc:
        MsgBox(Hex(Err.Number) & ":" & Err.Description)
    End Sub

    Private Sub cmdLED2_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles cmdLED2.Click
        On Error GoTo ErrorProc

        Dim lParams(1) As Integer
        lParams(0) = 1

        If (m_bLED2) Then
            lParams(1) = 0
            m_bLED2 = False
        Else
            lParams(1) = 1
            m_bLED2 = True
        End If
        m_caoCtrl.Execute("ControlIO", lParams)

        Exit Sub
ErrorProc:
        MsgBox(Hex(Err.Number) & ":" & Err.Description)
    End Sub


    Private Sub Timer1_Tick(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Timer1.Tick
        On Error GoTo ErrorProc

        Dim vntVal As Object
        vntVal = m_caoCtrl.Execute("GetTempHumidTrue")

        txtTemperature.Text = vntVal(0).ToString
        txtHumidity.Text = vntVal(1).ToString

        Exit Sub
ErrorProc:
        MsgBox(Hex(Err.Number) & ":" & Err.Description)
    End Sub

    Private Sub cmdMeasure_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles cmdMeasure.Click
        If (Timer1.Enabled) Then
            Timer1.Enabled = False
            cmdMeasure.Text = "Start"
        Else
            Timer1.Enabled = True
            cmdMeasure.Text = "Stop"
        End If
    End Sub

    Private Sub cmdHeater_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles cmdHeater.Click
        On Error GoTo ErrorProc
        Dim lVal As Integer

        If (m_bHeater) Then
            m_bHeater = False
            lVal = 0
            cmdHeater.Text = "Heater On"
        Else
            m_bHeater = True
            lVal = 1
            cmdHeater.Text = "Heater OFF"
        End If
        m_caoCtrl.Execute("SetHeater", lVal)

        Exit Sub
ErrorProc:
        MsgBox(Hex(Err.Number) & ":" & Err.Description)
    End Sub
End Class
