Imports System.IO.Ports

Public Class Frm_Menu
    Private Delegate Sub CambiaTesto(ByVal dato As String)

    Private Funzione As String = ""

    Private Sub Inizializza()
        Dim i As Integer = 0
        Dim val As String = ""
        Aggiorna_COM()
        Me.BT_Refresh.Enabled = True
        Me.CMB_Baud.SelectedIndex = 2
        'Me.CMB_Data.SelectedIndex = 3
        'Me.CMB_Flow.SelectedIndex = 2
        'Me.CMB_Stop.SelectedIndex = 0
        'Me.CMB_Parità.SelectedIndex = 2
        Me.StatusBar_COM.Text = "Porta COM Chiusa"
        Me.StatusBar_Connessione.Text = "Nessun dispositivo rilevato"

        '------------ U S C I T E -------------
        Me.CMB_Uscite_ManualeRele.Items.Clear()
        For i = 1 To 2
            Me.CMB_Uscite_ManualeRele.Items.Add(i)
        Next
        Me.CMB_Uscite_ManualeRele.SelectedIndex = 0

        Me.CMB_Uscite_ManualeTempo.Items.Clear()
        For i = 1 To 59
            If i < 10 Then
                val = "0" & i
            Else
                val = i
            End If
            Me.CMB_Uscite_ManualeTempo.Items.Add(val)
        Next
        Me.CMB_Uscite_ManualeTempo.SelectedIndex = 0

        Me.CMB_Uscite_ApricancelloTempo.Items.Clear()
        For i = 0 To 59
            Select Case i
                Case 0
                    val = "Bistabile"
                Case Else
                    If i < 10 Then
                        val = "0" & i
                    Else
                        val = i
                    End If
            End Select           
            Me.CMB_Uscite_ApricancelloTempo.Items.Add(val)
        Next
        Me.CMB_Uscite_ApricancelloTempo.SelectedIndex = 2

        '---------- I N G R E S S I -------------

        Me.CMB_Ingressi_AllarmeIngresso.Items.Clear()
        Me.CMB_Ingressi_TempoIngresso.Items.Clear()
        Me.CMB_Ingressi_SMSIngresso.Items.Clear()
        For i = 1 To 2
            Me.CMB_Ingressi_AllarmeIngresso.Items.Add(i)
            Me.CMB_Ingressi_TempoIngresso.Items.Add(i)
            Me.CMB_Ingressi_SMSIngresso.Items.Add(i)
        Next
        Me.CMB_Ingressi_AllarmeIngresso.SelectedIndex = 0
        Me.CMB_Ingressi_TempoIngresso.SelectedIndex = 0
        Me.CMB_Ingressi_SMSIngresso.SelectedIndex = 0


        Me.CMB_Ingressi_TempoTempo.Items.Clear()
        For i = 0 To 59            
            If i < 10 Then
                val = "0" & i
            Else
                val = i
            End If
            Me.CMB_Ingressi_TempoTempo.Items.Add(val)
        Next
        Me.CMB_Ingressi_TempoTempo.SelectedIndex = 1

        Me.CMB_Ingressi_SMSLivello.Items.Clear()
        Me.CMB_Ingressi_SMSLivello.Items.Add("Alto")
        Me.CMB_Ingressi_SMSLivello.Items.Add("Basso")
        Me.CMB_Ingressi_SMSLivello.SelectedIndex = 0

        '----------- N U M E R I  D I  T E L E F O N O --------------
        Me.CMB_NumeriTelefono_MasterPos.Items.Clear()
        For i = 1 To 8            
            val = i
            Me.CMB_NumeriTelefono_MasterPos.Items.Add(val)
        Next
        Me.CMB_NumeriTelefono_MasterPos.SelectedIndex = 0

        '------------ A L L A R M I  T E M P E R A T U R E ---------
        Me.CMB_Allarmi_TemperaturaMAX.Items.Clear()
        For i = 99 To 1 Step -1
            val = i
            If val <= 9 Then
                Me.CMB_Allarmi_TemperaturaMIN.Items.Add("-0" & val & " °C")
                Me.CMB_Allarmi_TemperaturaMAX.Items.Add("-0" & val & " °C")
            Else
                Me.CMB_Allarmi_TemperaturaMIN.Items.Add("-" & val & " °C")
                Me.CMB_Allarmi_TemperaturaMAX.Items.Add("-" & val & " °C")
            End If
        Next
        Me.CMB_Allarmi_TemperaturaMAX.Items.Add(" 00 °C")
        For i = 1 To 99
            val = i
            If val <= 9 Then
                Me.CMB_Allarmi_TemperaturaMIN.Items.Add("+0" & val & " °C")
                Me.CMB_Allarmi_TemperaturaMAX.Items.Add("+0" & val & " °C")
            Else
                Me.CMB_Allarmi_TemperaturaMIN.Items.Add("+" & val & " °C")
                Me.CMB_Allarmi_TemperaturaMAX.Items.Add("+" & val & " °C")
            End If
        Next
        Me.CMB_Allarmi_TemperaturaMIN.SelectedIndex = 106
        Me.CMB_Allarmi_TemperaturaMAX.SelectedIndex = 120

        Me.CMB_Funzionamento_Modalita_Modo.SelectedIndex = 0

        Me.CMB_Funzionamento_Inibizione_Caldaia.Items.Clear()
        Me.CMB_Funzionamento_Inibizione_Temp.Items.Clear()
        For i = 0 To 59
            If i <= 9 Then
                val = "0" & i
            Else
                val = i
            End If
            Me.CMB_Funzionamento_Inibizione_Caldaia.Items.Add(val)
            Me.CMB_Funzionamento_Inibizione_Temp.Items.Add(val)
        Next
        Me.CMB_Funzionamento_Inibizione_Caldaia.SelectedIndex = 5
        Me.CMB_Funzionamento_Inibizione_Temp.SelectedIndex = 5

        For i = 0 To 99
            If i <= 9 Then
                val = "0" & i
            Else
                val = i
            End If
            Me.CMB_Funzionamento_Temperature_Mantenere.Items.Add(val)
        Next
        Me.CMB_Funzionamento_Temperature_Mantenere.SelectedIndex = 21

        Me.TDG139.SelectedIndex = 0

        '------------------------ D T M F --------------------------
        Me.CMB_DTMF_Attivazione_Tempo1.Items.Clear()
        Me.CMB_DTMF_Attivazione_Tempo2.Items.Clear()
        For i = 0 To 59
            If i <= 9 Then
                val = "0" & i
            Else
                val = i
            End If
            Me.CMB_DTMF_Attivazione_Tempo1.Items.Add(val)
            Me.CMB_DTMF_Attivazione_Tempo2.Items.Add(val)
        Next
        Me.CMB_DTMF_Attivazione_Tempo1.SelectedIndex = 5
        Me.CMB_DTMF_Attivazione_Tempo2.SelectedIndex = 5

        '--------------- M A S T E R / S L A V E -------------------
        Me.CMB_MasterSlave_Tipo.SelectedIndex = 0
        Me.CMB_MasterSlave_Tempo.Items.Clear()
        For i = 1 To 99
            If i < 10 Then
                Me.CMB_MasterSlave_Tempo.Items.Add("0" & i)
                Me.CMB_MasterSlave_TempoUscita.Items.Add("0" & i)
            Else
                Me.CMB_MasterSlave_Tempo.Items.Add(i)
                Me.CMB_MasterSlave_TempoUscita.Items.Add(i)
            End If
        Next
        Me.CMB_MasterSlave_Tempo.SelectedIndex = 49
        Me.CMB_MasterSlave_TempoUscita.SelectedIndex = 0

        '-------------------- A V V I S I --------------------------
        For i = 2 To 8
            Me.CMB_Avvisi_Echo_Numero.Items.Add(i)
        Next
        Me.CMB_Avvisi_Echo_Numero.SelectedIndex = 0


        '----------- C A R T E L L E _ I M P O S T A Z -------------
        Elimina_Tab()

        '-------------------- D A T A B A S E ----------------------
        'Conn_Crea(CONN)
        'Conn_Percorso(CONN, Path_Database)
        Path_Software = Percorso_Software()
        Path_Database = Percorso_Database()
        Conn_Crea(CONN)
        Conn_Percorso(CONN, Path_Database)
    End Sub

    Private Sub Elimina_Tab()
        Me.TabControl1.TabPages.Remove(Me.Tab_Ingressi)
        Me.TabControl1.TabPages.Remove(Me.Tab_Uscite)
        Me.TabControl1.TabPages.Remove(Me.Tab_Avvisi)
        Me.TabControl1.TabPages.Remove(Me.Tab_Numeri)
        Me.TabControl1.TabPages.Remove(Me.Tab_Funz)
        Me.TabControl1.TabPages.Remove(Me.Tab_DTMF)
        Me.TabControl1.TabPages.Remove(Me.Tab_TestoSMS)
        Me.TabControl1.TabPages.Remove(Me.Tab_MasterSlave)
        Me.TabControl2.TabPages.Remove(Me.Tab_Apricancello)
        If MONITOR_STATO = False Then
            Me.TXT_IMEI.Text = ""
            Me.TXT_Firmware.Text = ""
            Me.TXT_Modello.Text = ""
            Me.TabControl2.TabPages.Remove(Me.Tab_Stato)
        Else
            Me.BT_AttivaMonitor.Enabled = False
        End If
        Me.GroupBox_Ripristino.Visible = False
        Me.GroupBox_Password.Visible = False
        Me.GroupBox_PasswordConfig.Visible = False
        Me.List_Apricancello.Items.Clear()
        Me.List_Master.Items.Clear()

        '****** PULIZIA CAMPI **********
        Me.TXT_Allarme.Text = ""
        Me.TXT_AllarmeMAX.Text = ""
        Me.TXT_AllarmeMIN.Text = ""
        Me.TXT_Attuale.Text = ""
        Me.TXT_Massima.Text = ""
        Me.TXT_Minima.Text = ""
        Me.TXT_Modalita.Text = ""
        Me.TXT_SogliaTemp.Text = ""

        Me.TXT_Avvisi_StartupTesto.Text = ""
        Me.TXT_Ingressi_SMSTesto.Text = ""
        Me.TXT_NumeriTelefono_ApricancelloNome.Text = ""
        Me.TXT_NumeriTelefono_ApricancelloNumero.Text = ""
        Me.TXT_NumeriTelefono_MasterNome.Text = ""
        Me.TXT_NumeriTelefono_MasterNumero.Text = ""
        Me.TXT_PasswordNEW.Text = "12345"
        Me.TXT_PasswordOLD.Text = "12345"
        password = "12345"
        Me.TXT_PasswordConfig.Text = password
        Me.TXT_SMSAllarmi_Testo.Text = ""
    End Sub

    Private Sub Aggiorna_COM()
        On Error Resume Next
        Dim testo As String
        Dim i As Integer = 1
        Dim max As Integer = 30
        testo = Me.CMB_COM.Text
        Me.CMB_COM.Items.Clear()
        For i = 1 To max
            On Error Resume Next
            Me.SerialPort1.PortName = "COM" & i
            Me.SerialPort1.Open()
            If Me.SerialPort1.IsOpen = True Then
                Me.SerialPort1.Close()
                Me.CMB_COM.Items.Add("COM" & i)
            End If
        Next
        If Me.CMB_COM.Items.Count > 0 Then
            Me.CMB_COM.SelectedIndex = 0
            Me.BT_ApriCOM.Enabled = True
        Else
            Me.BT_ApriCOM.Enabled = False
        End If

        Me.CMB_COM.Text = testo
    End Sub


    Private Sub SerialPort1_DataReceived(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles SerialPort1.DataReceived
        Dim dato As String = ""
        On Error GoTo fine

        dato = Me.SerialPort1.ReadLine

        If InvokeRequired Then
            Me.TXT_LOG.Invoke(New CambiaTesto(AddressOf Controlla_Dato_Seriale), dato)
        End If
fine:
    End Sub

    Private Sub Operazione_In_Corso(ByVal InCorso As Boolean)
        Select Case InCorso
            Case True
                Me.Timer_ProgressBar.Enabled = True
                Me.Timer_Invio.Enabled = True
                ora_avvio_comando = Now
            Case False
                Me.Timer_Invio.Enabled = False
                Me.Timer_ProgressBar.Enabled = False
                comando = ""
                id_comando = 0
                Me.ProgressBar.Value = 0
        End Select
    End Sub

    Private Sub Timer_ProgressBar_Tick(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Timer_ProgressBar.Tick
        If Me.ProgressBar.Value < 200 Then
            Me.ProgressBar.Value = Me.ProgressBar.Value + 1
        Else
            Me.ProgressBar.Value = 1
        End If
        If DateDiff(DateInterval.Second, ora_avvio_comando, Now) > TIMEOUT Then  'timout
            CMD_Login = id_comando
            Operazione_In_Corso(False)
            LoginForm.ShowDialog()
            Me.TXT_PasswordConfig.Text = password
            'MsgBox("Unità di telecontrollo non disponibile." & Chr(13) & "Verificare che sia collegata e in funzione. L'unità potrebbe anche essere occupata in altre operazione, quindi riprovare tra qualche secondo.", MsgBoxStyle.Exclamation + MsgBoxStyle.Question, "Attenzione...")
        End If
    End Sub


    Private Sub Timer_Invio_Tick(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Timer_Invio.Tick
        Invio_Comando_Seriale(comando)
    End Sub

    Private Sub Controlla_Dato_Seriale(ByVal dato As String)
        On Error Resume Next
        Dim i As Integer
        Dim numero As String = ""
        Dim posizione As String
        rx_seriale = dato
        Me.TXT_LOG.AppendText(dato & Chr(10) & Chr(13))
        If LOG_Esteso = True Then
            Frm_LOG.TXT_LOG.AppendText(dato & Chr(10) & Chr(13))
        End If
        If rx_seriale.Length >= 4 Then
            If Mid(rx_seriale, 1, 4) = "*/PC" Then
                MEX_PC += 1
                If MEX_PC >= 5 Then
                    MEX_PC = 0
                    If richiesto_nome = False Then
                        Me.SerialPort1.Write("*/A")
                        Aggiorna_LOG(0, "")
                        Operazione_In_Corso(True)
                        'richiesto_nome = False
                    End If
                End If
            End If
            If Mid(rx_seriale, 1, 7) = "FARE SQ" Then
                Aggiorna_LOG(21, "")
                memorizza_master_chiamata = True
            End If
            If memorizza_master_chiamata = True Then
                If Mid(rx_seriale, 1, 9) = "CERCA -> " Then
                    numero = Mid(rx_seriale, 10)
                    Aggiorna_LOG(22, numero)
                    memorizza_master_chiamata = False
                End If
            End If
            If Mid(rx_seriale, 1, 4) = "*/OK" Then
                Me.StatusBar_Connessione.Text = "Dispositivo rilevato e connesso"
                If richiesto_nome = False Then
                    Richiedi_Credenziali()
                End If
            End If
        End If
        If MONITOR_STATO = True Then
            Select Case Mid(rx_seriale, 1, 15)
                Case "TEMPERATURA DEC"
                    Me.TXT_Attuale.Text = Mid(rx_seriale, 18, rx_seriale.Length - 24) & " °C"
                Case "TEMPERATURA MIN"
                    Me.TXT_Minima.Text = Mid(rx_seriale, 17) & " °C"
                Case "TEMPERATURA MAX"
                    Me.TXT_Massima.Text = Mid(rx_seriale, 17) & " °C"
                Case "TEMP DA RAGGIUN"
                    Me.TXT_SogliaTemp.Text = "+" & Mid(rx_seriale, 20) & " °C"
                Case "TIMEINIBIZIONE1"
                    num_inib = 0
                    Me.TXT_Allarme.Text = "Soglia Temperatura"
                Case "TIMEINIBIZIONE2"
                    num_inib = 0
                    Me.TXT_Allarme.Text = "Ingresso Caldaia"
            End Select
            num_inib += 1
            If num_inib > 50 Then   'Se non ho ricevuto il messaggio di inibizioni entro 50 frasi
                Me.TXT_Allarme.Text = "Nessun Allarme"
                num_inib = 0
            End If
            If Mid(rx_seriale, 1, 4) = "MOD " Then
                Select Case Mid(rx_seriale, 5, 1)
                    Case "A"
                        Me.TXT_Modalita.Text = "Automatica"
                    Case "M"
                        Me.TXT_Modalita.Text = "Manuale"
                    Case "T"
                        Me.TXT_Modalita.Text = "Termostato"
                End Select
            End If
            If Mid(rx_seriale, 1, 13) = "TEMP ALL MIN " Then
                Me.TXT_AllarmeMIN.Text = Mid(rx_seriale, 14) & " °C"
            End If
            If Mid(rx_seriale, 1, 13) = "TEMP ALL MAX " Then
                Me.TXT_AllarmeMAX.Text = Mid(rx_seriale, 14) & " °C"
            End If
        End If


        Select Case id_comando
            Case 3
                If rx_seriale.Length >= 12 Then
                    If Mid(rx_seriale, 2, 12) = "Stato uscite" Then
                        Operazione_In_Corso(False)
                    End If
                    If Mid(rx_seriale, 2, 12) = "Commutazione" Then
                        Operazione_In_Corso(False)
                    End If
                End If
                If rx_seriale.Length >= 18 Then
                    If Mid(rx_seriale, 1, 15) = "(MESSAGGIO: OUT" Then
                        Operazione_In_Corso(False)
                    End If
                End If
            Case 4
                If rx_seriale.Length >= 30 Then
                    If Mid(rx_seriale, 2, 30) = "Tempo di attivazione impostato" Then
                        Operazione_In_Corso(False)
                    End If
                End If
            Case 5
                If rx_seriale.Length >= 15 Then
                    If Mid(rx_seriale, 1, 15) = "Ripristino rele" Or Mid(rx_seriale, 1, 15) = "Ripristino RELE" Then
                        Operazione_In_Corso(False)
                    End If
                End If
            Case 6
                If rx_seriale.Length >= 15 Then
                    If Mid(rx_seriale, 2, 5) = "Reset" Then
                        Operazione_In_Corso(False)
                    End If
                End If
            Case 7
                If rx_seriale.Length >= 6 Then
                    If Mid(rx_seriale, 1, 6) = "CAMBIO" Then
                        password = PWD_TEMP
                        Me.TXT_PasswordConfig.Text = PWD_TEMP
                        PWD_TEMP = ""
                        Operazione_In_Corso(False)
                        MsgBox("Da ora in poi verrà utilizzata la password '" & Me.TXT_PasswordConfig.Text & "' per configurare il sitema.", MsgBoxStyle.Exclamation + MsgBoxStyle.OkOnly, "Password...")
                    End If
                End If
            Case 8
                If rx_seriale.Length >= 4 Then
                    If Mid(rx_seriale, 1, 1) = ")" Then
                        Operazione_In_Corso(False)
                    End If
                End If
            Case 9
                If rx_seriale.Length >= 5 Then
                    Select Case Mid(rx_seriale, 1, 5)
                        Case "(IN 1"
                            T_IN = 1
                        Case "IN 2:"
                            T_IN = 2
                        Case "T ini"
                            Select Case T_IN
                                Case 1
                                    T_IN1 = Mid(rx_seriale, 7, rx_seriale.Length - 11)
                                Case 2
                                    T_IN2 = Mid(rx_seriale, 7, rx_seriale.Length - 11)
                            End Select
                        Case "T oss"
                            Select Case T_IN
                                Case 1
                                    T_OS1 = Mid(rx_seriale, 7, rx_seriale.Length - 11)
                                Case 2
                                    T_OS2 = Mid(rx_seriale, 7, rx_seriale.Length - 11)
                            End Select
                        Case "Allar"
                            Select Case T_IN
                                Case 1
                                    T_LIV1 = Mid(rx_seriale, 1, rx_seriale.Length - 1)
                                Case 2
                                    T_LIV2 = Mid(rx_seriale, 1, rx_seriale.Length - 1)
                            End Select
                    End Select
                End If
                If rx_seriale.Length >= 4 Then
                    If Mid(rx_seriale, 1, 1) = ")" Then
                        Operazione_In_Corso(False)
                        T_IN = 0
                        If T_Richiesta = True Then
                            T_Richiesta = False
                            MsgBox("Livelli di allarme impostati su Ingresso 1:" & Chr(13) & "Livello logico: " & T_LIV1 & ";" & Chr(13) & "Tempo Inibizione: " & T_IN1 & " minuti;" & Chr(13) & "Tempo Osservazione: " & T_OS1 & " minuti;" & Chr(13) & Chr(13) & "Livelli di allarme impostati su Ingresso 2:" & Chr(13) & "Livello logico: " & T_LIV2 & ";" & Chr(13) & "Tempo Inibizione: " & T_IN2 & " minuti;" & Chr(13) & "Tempo Osservazione: " & T_OS2 & " minuti;", MsgBoxStyle.Information + MsgBoxStyle.OkOnly, "Info...")
                        End If

                    End If
                End If
            Case 10
                If rx_seriale.Length >= 4 Then
                    If Mid(rx_seriale, 1, 1) = ")" Then
                        Operazione_In_Corso(False)
                    End If
                End If
            Case 11
                If rx_seriale.Length >= 4 Then
                    If Mid(rx_seriale, 1, 1) = ")" Then
                        Operazione_In_Corso(False)
                    End If
                End If
            Case 12
                If rx_seriale.Length >= 4 Then
                    If Mid(rx_seriale, 1, 1) = ")" Then
                        Operazione_In_Corso(False)
                    End If
                End If
            Case 13
                If rx_seriale.Length >= 30 Then
                    If Mid(rx_seriale, 2, 30) = "Invio messaggio all'accensione" Then
                        Operazione_In_Corso(False)
                    End If
                End If
            Case 14
                If rx_seriale.Length >= 4 Then
                    If Mid(rx_seriale, 1, 1) = ")" Then
                        Operazione_In_Corso(False)
                    End If
                End If
            Case 15, 16, 19
                If rx_seriale.Length >= 5 Then
                    If Mid(rx_seriale, 1, 3) = "Pos" Then
                        posizione = Mid(rx_seriale, 4, 1)
                        Select Case Val(posizione)
                            Case 1  'Pulisco la lista dei numeri se devo inserire i numeri a partire dal primo
                                Me.List_Master.Items.Clear()
                                'Case 8  'Ultimo numero da inserire nella lista quindi comando eseguito
                                'Operazione_In_Corso(False)
                        End Select
                        For i = 1 To rx_seriale.Length
                            numero = ""
                            If Mid(rx_seriale, i, 1) = "+" Then
                                numero = Mid(rx_seriale, i, rx_seriale.Length - i)
                                i = rx_seriale.Length
                            End If
                        Next
                        Dim nome As String = ""
                        Dim lista As ListViewItem
                        Cerca_Database(numero, nome)
                        lista = Me.List_Master.Items.Add(posizione)
                        lista.SubItems.Add(numero)
                        lista.SubItems.Add(nome)
                        'Me.List_Master.Items.Add(posizione).SubItems().Add(numero)
                    End If
                End If
                If rx_seriale.Length >= 4 Then
                    If Mid(rx_seriale, 1, 1) = ")" Then
                        Operazione_In_Corso(False)
                    End If
                End If
            Case 17
                If rx_seriale.Length >= 13 Then
                    If Mid(rx_seriale, 1, 17) = "AGGIUNTA ESEGUITA" Or Mid(rx_seriale, 1, 13) = "GIA' PRESENTE" Then
                        Operazione_In_Corso(False)
                    End If
                End If
            Case 18
                If rx_seriale.Length >= 11 Then
                    If Mid(rx_seriale, 1, 21) = "CANCELLAZIONE SINGOLA" Then
                        Operazione_In_Corso(False)
                    End If
                    If Mid(rx_seriale, 1, 11) = "NON TROVATO" Then
                        Operazione_In_Corso(False)
                    End If
                End If
            Case 20
                If rx_seriale.Length >= 7 Then
                    If Mid(rx_seriale, 2, 17) = "DOWNLOAD INIZIATO" Then
                        Me.List_Apricancello.Items.Clear()
                    End If
                    If Mid(rx_seriale, rx_seriale.Length - 1, 1) = ";" Then
                        Dim nome As String = ""
                        Dim lista As ListViewItem
                        numero = "+" & Mid(rx_seriale, 1, rx_seriale.Length - 2)
                        Cerca_Database(numero, nome)
                        lista = Me.List_Apricancello.Items.Add(numero)
                        lista.SubItems.Add(nome)
                    End If
                    If Mid(rx_seriale, 1, 15) = "DOWNLOAD FINITO" Then
                        Operazione_In_Corso(False)
                    End If
                End If
            Case 23
                Dim dispositivo As String = ""
                If rx_seriale.Length >= 7 Then
                    If Mid(rx_seriale, 1, 3) = "TDG" Or Mid(rx_seriale, 1, 4) = "(TDG" Then
                        MEX_PC = 0
                        dispositivo = Mid(rx_seriale, 1)
                        Operazione_In_Corso(False)
                        Aggiorna_Dispositivo(dispositivo)
                    End If
                End If
            Case 24
                If rx_seriale.Length >= 4 Then
                    If Mid(rx_seriale, 1, 1) = ")" Then
                        Operazione_In_Corso(False)
                    End If
                End If
            Case 25
                If rx_seriale.Length >= 4 Then
                    If Mid(rx_seriale, 1, 1) = ")" Then
                        Operazione_In_Corso(False)
                    End If
                End If
            Case 26
                If rx_seriale.Length >= 4 Then
                    If Mid(rx_seriale, 1, 1) = ")" Then
                        Operazione_In_Corso(False)
                    End If
                End If
            Case 27
                If rx_seriale.Length >= 15 Then
                    If Mid(rx_seriale, 2, 13) = "Funzionamento" Then
                        Select Case Mid(rx_seriale, 16, 1)
                            Case "A"
                                Me.CMB_Funzionamento_Modalita_Modo.SelectedIndex = 0
                            Case "M"
                                Me.CMB_Funzionamento_Modalita_Modo.SelectedIndex = 1
                            Case "T"
                                Me.CMB_Funzionamento_Modalita_Modo.SelectedIndex = 2
                        End Select

                        Operazione_In_Corso(False)
                    End If
                End If
            Case 28
                If rx_seriale.Length >= 15 Then
                    If Mid(rx_seriale, 2, 16) = "Tempo inibizione" Then
                        Operazione_In_Corso(False)
                    End If
                End If
            Case 29
                If rx_seriale.Length >= 15 Then
                    If Mid(rx_seriale, 2, 16) = "Tempo inibizione" Then
                        Operazione_In_Corso(False)
                    End If
                End If
            Case 30
                If rx_seriale.Length >= 30 Then
                    If Mid(rx_seriale, 2, 34) = "Temperature memorizzate cancellate" Then
                        Operazione_In_Corso(False)
                    End If
                End If
            Case 31
                If rx_seriale.Length >= 21 Then
                    If Mid(rx_seriale, 2, 21) = "Temperatura impostata" Then
                        Operazione_In_Corso(False)
                    End If
                End If
            Case 32
                If rx_seriale.Length >= 20 Then
                    If Mid(rx_seriale, 2, 15) = "TEMPERATURA DEC" Then
                        Operazione_In_Corso(False)
                        Dim temp_attuale As String
                        temp_attuale = Mid(rx_seriale, 18, rx_seriale.Length - 23)
                        MsgBox("Temperatura attuale: " & temp_attuale & " °C", MsgBoxStyle.Information + MsgBoxStyle.OkOnly, "Temperatura")
                    End If
                End If
            Case 33
                If rx_seriale.Length >= 21 Then
                    If Mid(rx_seriale, 2, 21) = "Messaggio memorizzato" Or Mid(rx_seriale, 3, 21) = "Messaggio memorizzato" Then
                        Operazione_In_Corso(False)
                    End If
                End If
            Case 34
                If rx_seriale.Length >= 12 Then
                    If Mid(rx_seriale, 2, 12) = "MESSAGGIO: E" Then
                        Operazione_In_Corso(False)
                        richiesto_nome = True
                        MONITOR_STATO = True
                        Aggiorna_LOG(35, "")
                        Elimina_Tab()
                    End If
                End If
            Case 36
                If rx_seriale.Length >= 4 Then
                    If Mid(rx_seriale, 1, 1) = ")" Then
                        Operazione_In_Corso(False)
                    End If
                End If
            Case 37
                If rx_seriale.Length >= 12 Then
                    Dim tempo As String
                    If Mid(rx_seriale, 1, 13) = "Tempo rele 1:" Then
                        tempo = Mid(rx_seriale, 15, rx_seriale.Length - 19)
                        T_IN1 = tempo
                        If tempo <= 9 Then
                            tempo = "0" & tempo
                        End If
                    End If
                    If Mid(rx_seriale, 1, 13) = "Tempo rele 2:" Then
                        tempo = Mid(rx_seriale, 15, rx_seriale.Length - 19)
                        T_IN2 = tempo
                        If tempo <= 9 Then
                            tempo = "0" & tempo
                        End If
                    End If
                End If
                If rx_seriale.Length >= 4 Then
                    If Mid(rx_seriale, 1, 1) = ")" Then
                        Operazione_In_Corso(False)
                        MsgBox("Attualmente i tempi di attivazione dei Relè tramite DTMF sono impostati come segue:" & Chr(13) & "Uscita 1: " & T_IN1 & " secondi;" & Chr(13) & "Uscita 2: " & T_IN2 & " secondi;", MsgBoxStyle.Information + MsgBoxStyle.OkOnly, "Info...")
                    End If
                End If
            Case 38
                If rx_seriale.Length >= 4 Then
                    If Mid(rx_seriale, 1, 1) = ")" Then
                        Operazione_In_Corso(False)
                    End If
                End If
            Case 39
                If rx_seriale.Length >= 4 Then
                    If Mid(rx_seriale, 1, 1) = ")" Then
                        Operazione_In_Corso(False)
                    End If
                End If
            Case 40
                If rx_seriale.Length >= 4 Then
                    If Mid(rx_seriale, 1, 1) = ")" Then
                        Operazione_In_Corso(False)
                    End If
                End If
            Case 41
                Dim tipo As String
                If rx_seriale.Length >= 40 Then
                    If Mid(rx_seriale, 1, 36) = "(Il dispositivo e' configurato come " Then
                        tipo = Mid(rx_seriale, 37, 1)
                        Select Case tipo
                            Case "M"
                                tipo = "Master"
                                Me.CMB_MasterSlave_Tipo.SelectedIndex = 0
                            Case "S"
                                tipo = "Slave"
                                Me.CMB_MasterSlave_Tipo.SelectedIndex = 1
                        End Select
                        Operazione_In_Corso(False)
                        MsgBox("L'unità collegata è attualmente configurata come " & tipo, MsgBoxStyle.Information + MsgBoxStyle.OkOnly, "Info...")
                    End If
                End If
            Case 42
                Dim tempo As String
                If rx_seriale.Length >= 22 Then
                    If Mid(rx_seriale, 1, 17) = "(Tempo di attesa " Then
                        tempo = Mid(rx_seriale, 18, 2)
                        tempo = tempo.Trim(" ")
                        Me.CMB_MasterSlave_Tempo.SelectedIndex = tempo - 1
                        Operazione_In_Corso(False)
                        MsgBox("Tempo attualmente impostato tra le chiamate pari a " & tempo & " minuti.", MsgBoxStyle.Information + MsgBoxStyle.OkOnly, "Info...")
                    End If
                End If
            Case 43
                If rx_seriale.Length >= 4 Then
                    If Mid(rx_seriale, 1, 1) = ")" Then
                        Operazione_In_Corso(False)
                    End If
                End If
            Case 44
                If rx_seriale.Length >= 4 Then
                    If Mid(rx_seriale, 1, 1) = ")" Then
                        Operazione_In_Corso(False)
                    End If
                End If
            Case 45
                If rx_seriale.Length >= 4 Then
                    If Mid(rx_seriale, 1, 1) = ")" Then
                        Operazione_In_Corso(False)
                    End If
                End If
            Case 46
                If rx_seriale.Length >= 4 Then
                    If Mid(rx_seriale, 1, 1) = ")" Then
                        Operazione_In_Corso(False)
                    End If
                End If
        End Select
        rx_seriale = ""
    End Sub

    Private Sub Aggiorna_Dispositivo(ByVal dispositivo As String)
        Dim credenziali(5) As String
        If Mid(dispositivo, 1, 1) = "(" Then
            dispositivo = Mid(dispositivo, 2)
        End If
        credenziali = Split(dispositivo, " ")
        Me.TXT_Modello.Text = credenziali(0)
        TDG = credenziali(0)
        Me.TXT_Firmware.Text = credenziali(2)
        If Val(Mid(credenziali(2), 1, 1)) >= 2 Then 'Abilitazione o meno della sezione ECHO in base alla versione prodotto
            Me.GroupBox_Echo.Visible = True
        Else
            Me.GroupBox_Echo.Visible = False
        End If
        Me.TXT_IMEI.Text = Mid(credenziali(3), 6, 15)
        Me.TXT_PasswordConfig.Text = password
        Select Case TDG
            Case "TDG133"
                Me.TabControl1.TabPages.Add(Me.Tab_Numeri)
                Me.TabControl1.TabPages.Add(Me.Tab_Avvisi)
                Me.TabControl1.TabPages.Add(Me.Tab_Ingressi)
                Me.TabControl1.TabPages.Add(Me.Tab_Uscite)
                Me.TabControl2.TabPages.Add(Me.Tab_Apricancello)
                Me.TabControl1.TabPages.Remove(Me.Tab_DTMF)
                Me.TabControl1.TabPages.Add(Me.Tab_TestoSMS)
                Me.TabControl1.TabPages.Remove(Me.Tab_Funz)
                Me.TabControl1.TabPages.Remove(Me.Tab_MasterSlave)
                Me.TabControl2.TabPages.Remove(Me.Tab_Stato)
                Me.GroupBox_Apricancello.Visible = True
                Me.GroupBox_TempoApricancello.Visible = True
                Me.RD_Uscite_ManualeMonostabile.Enabled = True
                Me.CMB_Uscite_ManualeTempo.Enabled = True
                Me.GroupBox_AvvisiSMS.Visible = True
                Me.GroupBox_AvvisiChiamata.Visible = True
                Me.GroupBox_Ripristino.Visible = True
                Me.GroupBox_Password.Visible = True
                Me.GroupBox_Testo_TDG139.Visible = False
                Me.GroupBox_PasswordConfig.Visible = True
                Me.GroupBox_TestoSMS_AllarmeIN12.Location = New Point(6, 110)
                Me.GroupBox_TestoSMS_AllarmeIN12.Visible = True
                Me.GroupBox_Testo_Startup.Visible = True
                Me.CMB_Uscite_ManualeRele.Enabled = True
            Case "TDG138"
                Me.TabControl1.TabPages.Add(Me.Tab_MasterSlave)
                Me.TabControl1.TabPages.Add(Me.Tab_Numeri)
                Me.TabControl1.TabPages.Add(Me.Tab_Avvisi)
                Me.TabControl1.TabPages.Add(Me.Tab_Ingressi)
                Me.TabControl1.TabPages.Add(Me.Tab_Uscite)
                Me.TabControl2.TabPages.Remove(Me.Tab_Apricancello)
                Me.TabControl1.TabPages.Remove(Me.Tab_DTMF)
                Me.TabControl1.TabPages.Add(Me.Tab_TestoSMS)
                Me.TabControl1.TabPages.Remove(Me.Tab_Funz)
                Me.TabControl2.TabPages.Remove(Me.Tab_Stato)
                Me.GroupBox_Echo.Location = New Point(6, 137)
                Me.GroupBox_Apricancello.Visible = False
                Me.GroupBox_TempoApricancello.Visible = False
                Me.RD_Uscite_ManualeMonostabile.Enabled = True
                Me.CMB_Uscite_ManualeTempo.Enabled = True
                Me.GroupBox_AvvisiSMS.Visible = True
                Me.GroupBox_AvvisiChiamata.Visible = True
                Me.GroupBox_Ripristino.Visible = True
                Me.GroupBox_Password.Visible = True
                Me.GroupBox_Testo_TDG139.Location = New Point(6, 6)
                Me.GroupBox_Testo_TDG139.Visible = True
                Me.GroupBox_Testo_TDG139.Text = "Personalizzazione SMS su possibile presenza Jammer:"
                Me.TDG139.Items.Clear()
                Me.TDG139.Items.Add("Mancata ricezione squillo Master")
                Me.TDG139.SelectedIndex = 0
                Me.GroupBox_PasswordConfig.Visible = True
                Me.GroupBox_TestoSMS_AllarmeIN12.Location = New Point(6, 136)
                Me.GroupBox_TestoSMS_AllarmeIN12.Visible = True
                Me.CMB_Uscite_ManualeRele.Enabled = True
                Me.GroupBox_Testo_Startup.Visible = False
                Me.RD_Ingressi_TempoOsservazione.Visible = False
            Case "TDG134"
                Me.TabControl1.TabPages.Add(Me.Tab_Numeri)
                Me.TabControl1.TabPages.Remove(Me.Tab_Avvisi)
                Me.TabControl1.TabPages.Remove(Me.Tab_Ingressi)
                Me.TabControl1.TabPages.Add(Me.Tab_Uscite)
                Me.TabControl2.TabPages.Add(Me.Tab_Apricancello)
                Me.TabControl1.TabPages.Remove(Me.Tab_DTMF)
                Me.TabControl1.TabPages.Remove(Me.Tab_TestoSMS)
                Me.TabControl1.TabPages.Remove(Me.Tab_Funz)
                Me.TabControl1.TabPages.Remove(Me.Tab_MasterSlave)
                Me.TabControl2.TabPages.Remove(Me.Tab_Stato)
                Me.GroupBox_Apricancello.Visible = True
                Me.GroupBox_TempoApricancello.Visible = True
                Me.RD_Uscite_ManualeMonostabile.Enabled = True
                Me.CMB_Uscite_ManualeTempo.Enabled = True
                Me.GroupBox_AvvisiSMS.Visible = False
                Me.GroupBox_AvvisiChiamata.Visible = False
                Me.GroupBox_Ripristino.Visible = True
                Me.GroupBox_Password.Visible = True
                Me.GroupBox_Testo_TDG139.Visible = False
                Me.GroupBox_PasswordConfig.Visible = True
                Me.GroupBox_TestoSMS_AllarmeIN12.Location = New Point(6, 240)
                Me.GroupBox_TestoSMS_AllarmeIN12.Visible = False
                Me.GroupBox_Testo_Startup.Visible = True
                Me.CMB_Uscite_ManualeRele.Enabled = False
            Case "TDG139"
                Me.TabControl1.TabPages.Add(Me.Tab_Numeri)
                Me.TabControl1.TabPages.Add(Me.Tab_Avvisi)
                Me.TabControl1.TabPages.Remove(Me.Tab_Ingressi)
                Me.TabControl1.TabPages.Add(Me.Tab_Uscite)
                Me.TabControl2.TabPages.Remove(Me.Tab_Apricancello)
                Me.TabControl1.TabPages.Remove(Me.Tab_DTMF)
                Me.TabControl1.TabPages.Add(Me.Tab_TestoSMS)
                Me.TabControl1.TabPages.Add(Me.Tab_Funz)
                Me.TabControl1.TabPages.Remove(Me.Tab_MasterSlave)
                Me.TabControl2.TabPages.Add(Me.Tab_Stato)
                Me.GroupBox_Echo.Location = New Point(6, 137)
                Me.GroupBox_Apricancello.Visible = False
                Me.GroupBox_TempoApricancello.Visible = False
                Me.RD_Uscite_ManualeMonostabile.Enabled = False
                Me.CMB_Uscite_ManualeTempo.Enabled = False
                Me.GroupBox_AvvisiSMS.Visible = True
                Me.GroupBox_AvvisiChiamata.Visible = True
                Me.GroupBox_Ripristino.Visible = True
                Me.GroupBox_Password.Visible = True
                Me.GroupBox_Testo_TDG139.Visible = True
                Me.GroupBox_Testo_TDG139.Text = "Personalizzazione SMS di Allarme:"
                Me.TDG139.Items.Clear()
                Me.TDG139.Items.Add("Temperatura superiore a soglia Massima")
                Me.TDG139.Items.Add("Temperatura inferiore a soglia Minima")
                Me.TDG139.Items.Add("Ingresso Caldaia")
                Me.TDG139.SelectedIndex = 0
                Me.GroupBox_PasswordConfig.Visible = True
                Me.CMB_Uscite_ManualeRele.Enabled = False
                Me.GroupBox_TestoSMS_AllarmeIN12.Location = New Point(6, 240)
                Me.GroupBox_TestoSMS_AllarmeIN12.Visible = False
                Me.GroupBox_Testo_Startup.Visible = True
                Me.BT_AttivaMonitor.Enabled = True
            Case "TDG140"
                Me.TabControl1.TabPages.Add(Me.Tab_Numeri)
                Me.TabControl1.TabPages.Add(Me.Tab_Avvisi)
                Me.TabControl1.TabPages.Add(Me.Tab_Ingressi)
                Me.TabControl1.TabPages.Add(Me.Tab_Uscite)
                Me.TabControl2.TabPages.Remove(Me.Tab_Apricancello)
                Me.TabControl1.TabPages.Add(Me.Tab_DTMF)
                Me.TabControl1.TabPages.Add(Me.Tab_TestoSMS)
                Me.TabControl1.TabPages.Remove(Me.Tab_Funz)
                Me.TabControl1.TabPages.Remove(Me.Tab_MasterSlave)
                Me.TabControl2.TabPages.Remove(Me.Tab_Stato)
                Me.GroupBox_Echo.Location = New Point(6, 137)
                Me.GroupBox_Apricancello.Visible = False
                Me.GroupBox_TempoApricancello.Visible = False
                Me.RD_Uscite_ManualeMonostabile.Enabled = True
                Me.CMB_Uscite_ManualeTempo.Enabled = True
                Me.GroupBox_AvvisiSMS.Visible = True
                Me.GroupBox_AvvisiChiamata.Visible = True
                Me.GroupBox_Ripristino.Visible = True
                Me.GroupBox_Password.Visible = True
                Me.GroupBox_Testo_TDG139.Visible = False
                Me.GroupBox_PasswordConfig.Visible = True
                Me.GroupBox_TestoSMS_AllarmeIN12.Location = New Point(6, 110)
                Me.GroupBox_TestoSMS_AllarmeIN12.Visible = True
                Me.GroupBox_Testo_Startup.Visible = True
                Me.CMB_Uscite_ManualeRele.Enabled = True
        End Select
    End Sub


    Private Sub Frm_Menu_FormClosing(ByVal sender As Object, ByVal e As System.Windows.Forms.FormClosingEventArgs) Handles Me.FormClosing
        If MsgBox("Confermi di volere chiudere il programma?", MsgBoxStyle.Question + MsgBoxStyle.YesNo, "Chiudi...") = MsgBoxResult.Yes Then
            End
        Else
            e.Cancel = True
        End If
    End Sub

    Private Sub Frm_Menu_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
        Inizializza()
    End Sub

    Private Sub Apri_COM()
        On Error Resume Next
        If Me.BT_ApriCOM.Text = "Connetti" Then
            Me.SerialPort1.PortName = Me.CMB_COM.Text
            Me.SerialPort1.BaudRate = Me.CMB_Baud.Text
            'Me.SerialPort1.DataBits = Me.CMB_Data.Text
            Me.SerialPort1.DataBits = "8"
            'Me.SerialPort1.StopBits = Me.CMB_Stop.Text
            Me.SerialPort1.StopBits = "1"
            'Select Case Me.CMB_Flow.SelectedIndex
            'Case 0 : Me.SerialPort1.Handshake = Handshake.XOnXOff
            'Case 1 : Me.SerialPort1.Handshake = Handshake.RequestToSend
            'Case 2 : Me.SerialPort1.Handshake = Handshake.None
            'End Select
            Me.SerialPort1.Handshake = Handshake.None
            'Select Case Me.CMB_Parità.SelectedIndex
            'Case 0 : Me.SerialPort1.Parity = Parity.Even
            'Case 1 : Me.SerialPort1.Parity = Parity.Odd
            'Case 2 : Me.SerialPort1.Parity = Parity.None
            'Case 3 : Me.SerialPort1.Parity = Parity.Mark
            'Case 4 : Me.SerialPort1.Parity = Parity.Space
            'End Select
            Me.SerialPort1.Parity = Parity.None

            Me.SerialPort1.Open()
            Aggiorna_Form_COM()
        Else
            Me.SerialPort1.Close()
            Aggiorna_Form_COM()
        End If
    End Sub

    Private Sub Richiedi_Credenziali()
        comando = "*/" & password & "-VER/*"
        Invio_Comando_Seriale(comando)
        Aggiorna_LOG(23, "")
        'Me.SerialPort1.Write("*/" & password & "-VER/*")
        Operazione_In_Corso(True)
        richiesto_nome = True
    End Sub

    Private Sub Invio_Comando_Seriale(ByVal comando As String)
        'Aggiorna_LOG(ID, parametro)
        Me.SerialPort1.Write(comando)
    End Sub

    Private Sub Aggiorna_Form_COM()
        On Error Resume Next
        If Me.SerialPort1.IsOpen = True Then
            Me.BT_ApriCOM.Text = "Disconnetti"
            richiesto_nome = False
            MONITOR_STATO = False
            MEX_PC = 0
            Me.StatusBar_Connessione.Text = "Nessun dispositivo rilevato"
            Me.BT_Refresh.Enabled = False
            Me.StatusBar_COM.Text = "Porta " & Me.CMB_COM.Text & " Aperta (" & Me.CMB_Baud.Text & "/8/N/1)"
            Me.TXT_LOG.AppendText("___________Connessione Avvenuta COM___________" & Chr(13) & Chr(10))
            Aggiorna_LOG(1, Me.SerialPort1.PortName.ToString)
        Else
            Operazione_In_Corso(False)
            Me.BT_Refresh.Enabled = True
            Me.BT_ApriCOM.Text = "Connetti"
            richiesto_nome = False
            MONITOR_STATO = False
            MEX_PC = 0
            Me.StatusBar_Connessione.Text = "Nessun dispositivo rilevato"
            Me.StatusBar_COM.Text = "Porta COM Chiusa"
            Me.TXT_LOG.AppendText("____________Connessione Chiusa COM____________" & Chr(13) & Chr(10))
            Aggiorna_LOG(2, Me.SerialPort1.PortName.ToString)
            Elimina_Tab()
        End If
    End Sub

    Private Sub BT_ApriCOM_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles BT_ApriCOM.Click
        Apri_COM()
    End Sub

    Private Sub TXT_LOG_TextChanged(ByVal sender As System.Object, ByVal e As System.EventArgs)
        If Me.TXT_LOG.Text.Length > 32000 Then
            Me.TXT_LOG.Text = ""
        End If
    End Sub

    Private Sub TXT_LOG_PassoPasso_TextChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles TXT_LOG_PassoPasso.TextChanged
        If Me.TXT_LOG_PassoPasso.Text.Length > 32000 Then
            Me.TXT_LOG_PassoPasso.Text = ""
        End If
    End Sub

    Private Sub BT_Pulisci_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles BT_Pulisci.Click
        Me.TXT_LOG_PassoPasso.Text = ""
    End Sub

    Private Sub Aggiorna_LOG(ByVal evento As Integer, ByVal parametro As String)
        Dim ora As String = "00.00.00"
        Dim hh As String = "00"
        Dim mm As String = "00"
        Dim ss As String = "00"
        hh = Now.Hour.ToString("00")
        mm = Now.Minute.ToString("00")
        ss = Now.Second.ToString("00")
        ora = hh & "." & mm & "." & ss
        id_comando = evento
        Select Case evento
            Case 0
                Me.TXT_LOG_PassoPasso.AppendText(ora & ": Dispositivo rilevato, connessione in corso..." & Chr(13) & Chr(10))
            Case 1  'COM aperta
                Me.TXT_LOG_PassoPasso.AppendText(ora & ": Porta " & parametro & " aperta con successo;" & Chr(13) & Chr(10))
            Case 2  'COM Chiusa
                Me.TXT_LOG_PassoPasso.AppendText(ora & ": Porta " & parametro & " chiusa con successo;" & Chr(13) & Chr(10))
            Case 3
                Me.TXT_LOG_PassoPasso.AppendText(ora & ": Commutazione manuale uscita " & parametro & ";" & Chr(13) & Chr(10))
            Case 4
                Me.TXT_LOG_PassoPasso.AppendText(ora & ": Impostazione tempo attivazione relè modalità Apricancello (" & parametro & ");" & Chr(13) & Chr(10))
            Case 5
                Me.TXT_LOG_PassoPasso.AppendText(ora & ": Impostazione ripristino relè su mancanza alimentazione (" & parametro & ");" & Chr(13) & Chr(10))
            Case 6
                Me.TXT_LOG_PassoPasso.AppendText(ora & ": Reset unità di telecontrollo;" & Chr(13) & Chr(10))
            Case 7
                Me.TXT_LOG_PassoPasso.AppendText(ora & ": Variazione Password di sicurezza;" & Chr(13) & Chr(10))
            Case 8
                Me.TXT_LOG_PassoPasso.AppendText(ora & ": Impostazione livello logico di allarme ingresso " & Mid(parametro, 1, 1) & " (" & Mid(parametro, 2) & ");" & Chr(13) & Chr(10))
            Case 9
                Me.TXT_LOG_PassoPasso.AppendText(ora & ": Richiesta livelli logici e tempistiche per gli ingressi di allarme;" & Chr(13) & Chr(10))
                'Select Case Mid(parametro, 1, 1)
                '    Case "R"
                '        Me.TXT_LOG_PassoPasso.AppendText(ora & ": Richiedi tempo di " & Mid(parametro, 2) & " ingresso " & Mid(parametro, 1, 1) & ";" & Chr(13) & Chr(10))
                '    Case "I"
                '        Me.TXT_LOG_PassoPasso.AppendText(ora & ": Impostazione tempo di " & Mid(parametro, 2) & " ingresso " & Mid(parametro, 1, 1) & ";" & Chr(13) & Chr(10))
                'End Select
            Case 10
                Me.TXT_LOG_PassoPasso.AppendText(ora & ": Variazione testo SMS di avviso ingresso " & parametro & ";" & Chr(13) & Chr(10))
            Case 11
                Me.TXT_LOG_PassoPasso.AppendText(ora & ": Variazione numeri da avvisare via SMS in caso di allarme;" & Chr(13) & Chr(10))
            Case 12
                Me.TXT_LOG_PassoPasso.AppendText(ora & ": Variazione numeri da avvisare via Chiamata in caso di allarme;" & Chr(13) & Chr(10))
            Case 13
                Me.TXT_LOG_PassoPasso.AppendText(ora & ": Impostazione avviso allo startup (" & parametro & ");" & Chr(13) & Chr(10))
            Case 14
                Me.TXT_LOG_PassoPasso.AppendText(ora & ": Variazione testo di avviso allo startup;" & Chr(13) & Chr(10))
            Case 15
                Me.TXT_LOG_PassoPasso.AppendText(ora & ": Memorizzazione numero nella lista Master;" & Chr(13) & Chr(10))
            Case 16
                Me.TXT_LOG_PassoPasso.AppendText(ora & ": Cancellazione numero dalla lista Master;" & Chr(13) & Chr(10))
            Case 17
                Me.TXT_LOG_PassoPasso.AppendText(ora & ": Memorizzazione numero nella lista Apricancello;" & Chr(13) & Chr(10))
            Case 18
                Me.TXT_LOG_PassoPasso.AppendText(ora & ": Cancellazione numero dalla lista Apricancello;" & Chr(13) & Chr(10))
            Case 19
                Me.TXT_LOG_PassoPasso.AppendText(ora & ": Richiesta numeri lista Master;" & Chr(13) & Chr(10))
            Case 20
                Me.TXT_LOG_PassoPasso.AppendText(ora & ": Richiesta numeri lista Apricancello;" & Chr(13) & Chr(10))
            Case 21
                Me.TXT_LOG_PassoPasso.AppendText(ora & ": Attesa Chiamata per memorizzazione numero Master;" & Chr(13) & Chr(10))
            Case 22
                Me.TXT_LOG_PassoPasso.AppendText(ora & ": Memorizzato primo numero (" & parametro & ") nella lista Master mediante chiamata;" & Chr(13) & Chr(10))
            Case 23
                Me.TXT_LOG_PassoPasso.AppendText(ora & ": Richiesta Credenziali;" & Chr(13) & Chr(10))
            Case 24
                Me.TXT_LOG_PassoPasso.AppendText(ora & ": Impostazione soglia allarme temperatura minima a " & parametro & " °C;" & Chr(13) & Chr(10))
            Case 25
                Me.TXT_LOG_PassoPasso.AppendText(ora & ": Impostazine soglia allarme temperatura massima a " & parametro & " °C;" & Chr(13) & Chr(10))
            Case 26
                Me.TXT_LOG_PassoPasso.AppendText(ora & ": Impostazione modalità di funzionamento (" & parametro & ");" & Chr(13) & Chr(10))
            Case 27
                Me.TXT_LOG_PassoPasso.AppendText(ora & ": Richiesta modalità di funzionamento;" & Chr(13) & Chr(10))
            Case 28
                Me.TXT_LOG_PassoPasso.AppendText(ora & ": Impostazione tempo inibizione allarme Temperatura (" & parametro & " min.);" & Chr(13) & Chr(10))
            Case 29
                Me.TXT_LOG_PassoPasso.AppendText(ora & ": Impostazione tempo inibizione ingresso Caldaia (" & parametro & " min.);" & Chr(13) & Chr(10))
            Case 30
                Me.TXT_LOG_PassoPasso.AppendText(ora & ": Azzeramento valori Massimi/Minimi rilevati;" & Chr(13) & Chr(10))
            Case 31
                Me.TXT_LOG_PassoPasso.AppendText(ora & ": Impostazione temperatura da mantenere nella modalità Automatica (" & parametro & " °C);" & Chr(13) & Chr(10))
            Case 32
                Me.TXT_LOG_PassoPasso.AppendText(ora & ": Richiesta Temperatura rilevata;" & Chr(13) & Chr(10))
            Case 33
                Me.TXT_LOG_PassoPasso.AppendText(ora & ": Impostazione testo di allarme " & parametro & ";" & Chr(13) & Chr(10))
            Case 34
                Me.TXT_LOG_PassoPasso.AppendText(ora & ": Attivazione Monitor di Stato;" & Chr(13) & Chr(10))
            Case 35
                Me.TXT_LOG_PassoPasso.AppendText(ora & ": Monitor di Stato Attivato;" & Chr(13) & Chr(10))
            Case 36
                Me.TXT_LOG_PassoPasso.AppendText(ora & ": Impostazione tempo attivazione relè " & Mid(parametro, 1, 1) & " tramite DTMF (" & Mid(parametro, 2) & "sec.);" & Chr(13) & Chr(10))
            Case 37
                Me.TXT_LOG_PassoPasso.AppendText(ora & ": Richiesta tempo attivazione Relè via DTMF;" & Chr(13) & Chr(10))
            Case 38
                Me.TXT_LOG_PassoPasso.AppendText(ora & ": Impostazione richiesta password via DTMF (" & parametro & ");" & Chr(13) & Chr(10))
            Case 39
                Me.TXT_LOG_PassoPasso.AppendText(ora & ": Impostazione filtro chiamate per gestione DTMF (" & parametro & ");" & Chr(13) & Chr(10))
            Case 40
                Me.TXT_LOG_PassoPasso.AppendText(ora & ": Impostazione tipologia unità (" & parametro & ");" & Chr(13) & Chr(10))
            Case 41
                Me.TXT_LOG_PassoPasso.AppendText(ora & ": Richiesta tipologia unità (Master oppure Slave);" & Chr(13) & Chr(10))
            Case 42
                Me.TXT_LOG_PassoPasso.AppendText(ora & ": Richiesta tempo di attesa tra le chiamate;" & Chr(13) & Chr(10))
            Case 43
                Me.TXT_LOG_PassoPasso.AppendText(ora & ": Impostazione tempo tra le chiamate (" & parametro & " minuti);" & Chr(13) & Chr(10))
            Case 44
                Me.TXT_LOG_PassoPasso.AppendText(ora & ": Impostazione tempo attivazione uscita su allarme (" & parametro & " secondi);" & Chr(13) & Chr(10))
            Case 45
                Me.TXT_LOG_PassoPasso.AppendText(ora & ": Abilitazione numero in posizione " & parametro & " per funzione ECHO;" & Chr(13) & Chr(10))
            Case 46
                Me.TXT_LOG_PassoPasso.AppendText(ora & ": Disattivazione funzione ECHO;" & Chr(13) & Chr(10))
        End Select
    End Sub

    Private Sub BT_Refresh_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles BT_Refresh.Click
        Aggiorna_COM()
    End Sub


    '------------------------- D  A T I  D A   I N V I A R E -------------------------

    Private Sub BT_Uscite_ManualeEsegui_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles BT_Uscite_ManualeEsegui.Click
        Dim uscita As String = "1"
        Dim tempo As String = "01"
        uscita = Me.CMB_Uscite_ManualeRele.Text
        tempo = Me.CMB_Uscite_ManualeTempo.Text
        'Inserimento_Parametri(0)
        'Operazione_In_Corso(True, "Attivazione relè in corso")
        If Me.RD_Uscite_ManualeBistabileON.Checked = True Then
            'Me.SerialPort1.Write("*/" & password & "-OUT" & uscita & ":ON/*")
            Select Case TDG
                Case "TDG134"
                    comando = "*/" & password & "-OUT" & ":ON/*"
                Case "TDG139"
                    comando = "*/" & password & "-OUT" & ":ON/*"
                Case Else
                    comando = "*/" & password & "-OUT" & uscita & ":ON/*"
            End Select
        End If
        If Me.RD_Uscite_ManualeBistabileOFF.Checked = True Then
            'Me.SerialPort1.Write("*/" & password & "-OUT" & uscita & ":OFF/*")
            Select Case TDG
                Case "TDG134"
                    comando = "*/" & password & "-OUT" & ":OFF/*"
                Case "TDG139"
                    comando = "*/" & password & "-OUT" & ":OFF/*"
                Case Else
                    comando = "*/" & password & "-OUT" & uscita & ":OFF/*"
            End Select
        End If
        If Me.RD_Uscite_ManualeMonostabile.Checked = True Then
            'Me.SerialPort1.Write("*/" & password & "-OUT" & uscita & ":" & tempo & "/*")
            Select Case TDG
                Case "TDG134"
                    comando = "*/" & password & "-OUT" & ":" & tempo & "/*"
                Case Else
                    comando = "*/" & password & "-OUT" & uscita & ":" & tempo & "/*"
            End Select
        End If
        Invio_Comando_Seriale(comando)
        Aggiorna_LOG(3, uscita)
        Operazione_In_Corso(True)
    End Sub

    Private Sub BT_Uscite_ApricancelloEsegui_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles BT_Uscite_ApricancelloEsegui.Click
        Dim tempo As String = "01"
        tempo = Me.CMB_Uscite_ApricancelloTempo.Text
        If tempo = "Bistabile" Then
            tempo = "00"
        End If
        'Me.SerialPort1.Write("*/" & password & "-TAC:" & tempo & "/*")
        comando = "*/" & password & "-TAC:" & tempo & "/*"
        Invio_Comando_Seriale(comando)
        If tempo <> "Bistabile" Then
            tempo = tempo & " secondi"
        End If
        Aggiorna_LOG(4, tempo)
        Operazione_In_Corso(True)
    End Sub

    Private Sub BT_Uscite_RipristinoEsegui_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles BT_Uscite_RipristinoEsegui.Click
        Dim valore As String
        Dim significato As String
        If Me.CHK_Uscite_RipristinoAttiva.Checked = True Then
            valore = "1"
            significato = "Attivato"
        Else
            valore = "0"
            significato = "Disattivato"
        End If
        'Me.SerialPort1.Write("*/" & password & "-RIP" & valore & "/*")
        comando = "*/" & password & "-RIP" & valore & "/*"
        Invio_Comando_Seriale(comando)
        Aggiorna_LOG(5, significato)
        Operazione_In_Corso(True)
    End Sub

    Private Sub BT_Info_Reset_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles BT_Info_Reset.Click
        If MsgBox("Procedere con il reset a default del dispositivo? Tutti i dati verranno persi.", MsgBoxStyle.Question + MsgBoxStyle.YesNo, "Reset...") = MsgBoxResult.Yes Then
            ' Me.SerialPort1.Write("*/" & password & "-RES/*")
            comando = "*/" & password & "-RES/*"
            Invio_Comando_Seriale(comando)
            Aggiorna_LOG(6, "")
            Operazione_In_Corso(True)
        End If
    End Sub

    Private Sub BT_PasswordEsegui_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles BT_PasswordEsegui.Click
        Dim PWD_OLD As String
        Dim PWD_NEW As String
        Dim errore As Boolean = False
        PWD_OLD = Me.TXT_PasswordOLD.Text
        PWD_NEW = Me.TXT_PasswordNEW.Text
        'If PWD_OLD.Length = 5 And PWD_NEW.Length = 5 Then
        If PWD_NEW.Length = 5 Then
            'If IsNumeric(PWD_OLD) = True And IsNumeric(PWD_NEW) = True Then
            If IsNumeric(PWD_NEW) = True Then
                'Me.SerialPort1.Write("*/" & password & "-PWD" & PWD_NEW & "/*")
                comando = "*/" & password & "-PWD" & PWD_NEW & "/*"
                PWD_TEMP = PWD_NEW
                Invio_Comando_Seriale(comando)
                Aggiorna_LOG(7, "")
                Operazione_In_Corso(True)
            Else
                errore = True
            End If
        Else
            errore = True
        End If
        If errore = True Then
            MsgBox("Una o entrambe le password inserite non contengono valori validi." & Chr(13) & "Le password devono essere composte da 5 caratteri numerici.", MsgBoxStyle.Information + MsgBoxStyle.OkOnly, "Errore...")
        End If
    End Sub

    Private Sub BT_Info_Credenziali_Click(ByVal sender As System.Object, ByVal e As System.EventArgs)
        Richiedi_Credenziali()
    End Sub

    Private Sub RD_Uscite_ManualeBistabileON_CheckedChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles RD_Uscite_ManualeBistabileON.CheckedChanged
        If Me.RD_Uscite_ManualeMonostabile.Checked = True Then
            Me.CMB_Uscite_ManualeTempo.Enabled = True
        Else
            Me.CMB_Uscite_ManualeTempo.Enabled = False
        End If
    End Sub

    Private Sub RD_Uscite_ManualeBistabileOFF_CheckedChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles RD_Uscite_ManualeBistabileOFF.CheckedChanged
        If Me.RD_Uscite_ManualeMonostabile.Checked = True Then
            Me.CMB_Uscite_ManualeTempo.Enabled = True
        Else
            Me.CMB_Uscite_ManualeTempo.Enabled = False
        End If
    End Sub

    Private Sub RD_Uscite_ManualeMonostabile_CheckedChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles RD_Uscite_ManualeMonostabile.CheckedChanged
        If Me.RD_Uscite_ManualeMonostabile.Checked = True Then
            Me.CMB_Uscite_ManualeTempo.Enabled = True
        Else
            Me.CMB_Uscite_ManualeTempo.Enabled = False
        End If
    End Sub

    Private Sub CHK_Uscite_RipristinoAttiva_CheckedChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles CHK_Uscite_RipristinoAttiva.CheckedChanged
        If Me.CHK_Uscite_RipristinoAttiva.Checked = True Then
            Me.CHK_Uscite_RipristinoAttiva.Checked = True
            Me.CHK_Uscite_RipristinoDisattiva.Checked = False
        Else
            Me.CHK_Uscite_RipristinoAttiva.Checked = False
            Me.CHK_Uscite_RipristinoDisattiva.Checked = True
        End If
    End Sub

    Private Sub CHK_Uscite_RipristinoDisattiva_CheckedChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles CHK_Uscite_RipristinoDisattiva.CheckedChanged
        If Me.CHK_Uscite_RipristinoDisattiva.Checked = True Then
            Me.CHK_Uscite_RipristinoAttiva.Checked = False
            Me.CHK_Uscite_RipristinoDisattiva.Checked = True
        Else
            Me.CHK_Uscite_RipristinoAttiva.Checked = True
            Me.CHK_Uscite_RipristinoDisattiva.Checked = False
        End If
    End Sub


    Private Sub RD_Ingressi_TempoOsservazione_CheckedChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles RD_Ingressi_TempoOsservazione.CheckedChanged
        If Me.RD_Ingressi_TempoOsservazione.Checked = True Then
            Me.RD_Ingressi_TempoInibizione.Checked = False
            Me.LBL_Ingressi_TempoTempo.Text = "Secondi"
        Else
            Me.RD_Ingressi_TempoOsservazione.Checked = False
            Me.LBL_Ingressi_TempoTempo.Text = "Minuti"
        End If
    End Sub

    Private Sub RD_Ingressi_TempoInibizione_CheckedChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles RD_Ingressi_TempoInibizione.CheckedChanged
        If Me.RD_Ingressi_TempoOsservazione.Checked = False Then
            Me.RD_Ingressi_TempoOsservazione.Checked = False
            Me.LBL_Ingressi_TempoTempo.Text = "Minuti"
        Else
            Me.RD_Ingressi_TempoInibizione.Checked = False
            Me.LBL_Ingressi_TempoTempo.Text = "Secondi"
        End If
    End Sub

    Private Sub CHK_Ingressi_LogicaRichiedi_CheckedChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles CHK_Ingressi_LogicaRichiedi.CheckedChanged
        If Me.CHK_Ingressi_LogicaRichiedi.Checked = True Then
            Me.CMB_Ingressi_AllarmeIngresso.Enabled = False
            Me.RD_Ingressi_AllarmeAlto.Enabled = False
            Me.RD_Ingressi_AllarmeBasso.Enabled = False
            Me.RD_Ingressi_AllarmeVariazione.Enabled = False
        Else
            Me.CMB_Ingressi_AllarmeIngresso.Enabled = True
            Me.RD_Ingressi_AllarmeAlto.Enabled = True
            Me.RD_Ingressi_AllarmeBasso.Enabled = True
            Me.RD_Ingressi_AllarmeVariazione.Enabled = True
        End If
    End Sub

    Private Sub BT_Ingressi_AllarmeEsegui_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles BT_Ingressi_AllarmeEsegui.Click
        Dim ingresso As String = "1"
        Dim ABV As String = "A"
        Dim significato As String = ""
        If Me.CHK_Ingressi_LogicaRichiedi.Checked = True Then
            comando = "*/" & password & "-LIV?/*"
            T_Richiesta = True
            Invio_Comando_Seriale(comando)
            Aggiorna_LOG(9, "")
        Else
            ingresso = Me.CMB_Ingressi_AllarmeIngresso.Text
            If Me.RD_Ingressi_AllarmeAlto.Checked = True Then
                ABV = "A"
                significato = "Alto"
            End If
            If Me.RD_Ingressi_AllarmeBasso.Checked = True Then
                ABV = "B"
                significato = "Basso"
            End If
            If Me.RD_Ingressi_AllarmeVariazione.Checked = True Then
                ABV = "V"
                significato = "Variazione"
            End If
            'Me.SerialPort1.Write("*/" & password & "-LIV" & ingresso & ":" & ABV & "/*")
            comando = "*/" & password & "-LIV" & ingresso & ":" & ABV & "/*"
            Invio_Comando_Seriale(comando)
            Aggiorna_LOG(8, ingresso & significato)
        End If
        Operazione_In_Corso(True)
    End Sub

    Private Sub BT_Ingressi_TempoEsegui_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles BT_Ingressi_TempoEsegui.Click
        Dim ingresso As String = "1"
        Dim valore As String = ""
        ingresso = Me.CMB_Ingressi_TempoIngresso.Text
        valore = Me.CMB_Ingressi_TempoTempo.Text
        If Me.RD_Ingressi_TempoInibizione.Checked = True Then
            'Me.SerialPort1.Write("*/" & password & "-INI" & ingresso & ":" & valore & "/*")
            If Me.CHK_Ingressi_TempoRichiedi.Checked = True Then
                comando = "*/" & password & "-INI?" & "/*"
                T_Richiesta = True
                Aggiorna_LOG(9, ingresso & "Rinibizione")
            Else
                comando = "*/" & password & "-INI" & ingresso & ":" & valore & "/*"
                T_Richiesta = False
                Aggiorna_LOG(9, ingresso & "Iinibizione")
            End If
            Invio_Comando_Seriale(comando)

        Else
            'Me.SerialPort1.Write("*/" & password & "-OSS" & ingresso & ":" & valore & "/*")
            If Me.CHK_Ingressi_TempoRichiedi.Checked = True Then
                comando = "*/" & password & "-OSS?" & "/*"
                T_Richiesta = True
                Aggiorna_LOG(9, ingresso & "Rosservazione")
            Else
                comando = "*/" & password & "-OSS" & ingresso & ":" & valore & "/*"
                T_Richiesta = False
                Aggiorna_LOG(9, ingresso & "Iosservazione")
            End If
            Invio_Comando_Seriale(comando)

        End If
        Operazione_In_Corso(True)
    End Sub

    Private Sub BT_Ingressi_SMSEsegui_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles BT_Ingressi_SMSEsegui.Click
        Dim ingresso As String = "1"
        Dim AB As String = ""
        Dim testo As String = ""
        If Me.TXT_Ingressi_SMSTesto.Text.Length > 0 Then
            ingresso = Me.CMB_Ingressi_SMSIngresso.Text
            AB = Mid(Me.CMB_Ingressi_SMSLivello.Text, 1, 1)
            testo = Me.TXT_Ingressi_SMSTesto.Text
            'Me.SerialPort1.Write("*/" & password & "-TIN" & ingresso & AB & ":" & testo & "/*")
            comando = "*/" & password & "-TIN" & ingresso & AB & ":" & testo & "/*"
            Invio_Comando_Seriale(comando)
            Aggiorna_LOG(10, ingresso)
            Operazione_In_Corso(True)
        Else
            MsgBox("Verificare i dati immessi in quanto non corretti.", MsgBoxStyle.Information + MsgBoxStyle.OkOnly, "Errore...")
        End If

    End Sub

    Private Sub BT_Avvisi_SMSEsegui_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles BT_Avvisi_SMSEsegui.Click
        Dim numeri As String = ""
        If Me.CHK_Avvisi_SMS1.Checked = True Then
            numeri = numeri & "1"
        End If
        If Me.CHK_Avvisi_SMS2.Checked = True Then
            numeri = numeri & "2"
        End If
        If Me.CHK_Avvisi_SMS3.Checked = True Then
            numeri = numeri & "3"
        End If
        If Me.CHK_Avvisi_SMS4.Checked = True Then
            numeri = numeri & "4"
        End If
        If Me.CHK_Avvisi_SMS5.Checked = True Then
            numeri = numeri & "5"
        End If
        If Me.CHK_Avvisi_SMS6.Checked = True Then
            numeri = numeri & "6"
        End If
        If Me.CHK_Avvisi_SMS7.Checked = True Then
            numeri = numeri & "7"
        End If
        If Me.CHK_Avvisi_SMS8.Checked = True Then
            numeri = numeri & "8"
        End If
        If Me.RD_Avvisi_SMSAttiva.Checked = True Then
            'Me.SerialPort1.Write("*/" & password & "-SMS" & numeri & ":ON/*")
            comando = "*/" & password & "-SMS" & numeri & ":ON/*"
            Invio_Comando_Seriale(comando)
        Else
            'Me.SerialPort1.Write("*/" & password & "-SMS" & numeri & ":OFF/*")
            comando = "*/" & password & "-SMS" & numeri & ":OFF/*"
            Invio_Comando_Seriale(comando)
        End If
        Aggiorna_LOG(11, "")
        Operazione_In_Corso(True)
    End Sub

    Private Sub BT_Avvisi_ChiamataEsegui_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles BT_Avvisi_ChiamataEsegui.Click
        Dim numeri As String = ""
        If Me.CHK_Avvisi_Chiamata1.Checked = True Then
            numeri = numeri & "1"
        End If
        If Me.CHK_Avvisi_Chiamata2.Checked = True Then
            numeri = numeri & "2"
        End If
        If Me.CHK_Avvisi_Chiamata3.Checked = True Then
            numeri = numeri & "3"
        End If
        If Me.CHK_Avvisi_Chiamata4.Checked = True Then
            numeri = numeri & "4"
        End If
        If Me.CHK_Avvisi_Chiamata5.Checked = True Then
            numeri = numeri & "5"
        End If
        If Me.CHK_Avvisi_Chiamata6.Checked = True Then
            numeri = numeri & "6"
        End If
        If Me.CHK_Avvisi_Chiamata7.Checked = True Then
            numeri = numeri & "7"
        End If
        If Me.CHK_Avvisi_Chiamata8.Checked = True Then
            numeri = numeri & "8"
        End If
        If Me.RD_Avvisi_ChiamataAttiva.Checked = True Then
            'Me.SerialPort1.Write("*/" & password & "-VOC" & numeri & ":ON/*")
            comando = "*/" & password & "-VOC" & numeri & ":ON/*"
            Invio_Comando_Seriale(comando)
        Else
            'Me.SerialPort1.Write("*/" & password & "-VOC" & numeri & ":OFF/*")
            comando = "*/" & password & "-VOC" & numeri & ":OFF/*"
            Invio_Comando_Seriale(comando)
        End If
        Aggiorna_LOG(12, "")
        Operazione_In_Corso(True)
    End Sub


    Private Sub BT_Avvisi_Echo_Esegui_Click_1(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles BT_Avvisi_Echo_Esegui.Click
        If Me.RD_Avvisi_Echo_Attiva.Checked = True Then
            comando = "*/" & password & "-ECHO:" & Me.CMB_Avvisi_Echo_Numero.Text & "/*"
            Invio_Comando_Seriale(comando)
            Aggiorna_LOG(45, Me.CMB_Avvisi_Echo_Numero.Text)
        Else
            comando = "*/" & password & "-ECHO:0/*"
            Invio_Comando_Seriale(comando)
            Aggiorna_LOG(46, "0")
        End If
        Operazione_In_Corso(True)
    End Sub

    Private Sub BT_Avvisi_StartupON_Esegui_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles BT_Avvisi_StartupON_Esegui.Click
        If Me.RD_Avvisi_StartupAttiva.Checked = True Then
            'Me.SerialPort1.Write("*/" & password & "-AVV1/*")
            comando = "*/" & password & "-AVV1/*"
            Invio_Comando_Seriale(comando)
            Aggiorna_LOG(13, "Attivato")
        Else
            'Me.SerialPort1.Write("*/" & password & "-AVV0/*")
            comando = "*/" & password & "-AVV0/*"
            Invio_Comando_Seriale(comando)
            Aggiorna_LOG(13, "Disattivato")
        End If
        Operazione_In_Corso(True)
    End Sub

    Private Sub BT_Avvisi_StartupTesto_Esegui_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles BT_Avvisi_StartupTesto_Esegui.Click
        Dim testo As String = ""
        If Me.TXT_Avvisi_StartupTesto.Text.Length > 0 Then
            testo = Me.TXT_Avvisi_StartupTesto.Text
            'Me.SerialPort1.Write("*/" & password & "-TSU" & ":" & testo & "/*")
            comando = "*/" & password & "-TSU" & ":" & testo & "/*"
            Invio_Comando_Seriale(comando)
            Aggiorna_LOG(14, "")
            Operazione_In_Corso(True)
        Else
            MsgBox("Verificare i dati immessi in quanto non corretti.", MsgBoxStyle.Information + MsgBoxStyle.OkOnly, "Errore...")
        End If
    End Sub

    Private Sub BT_NumeriTelefono_MasterEsegui_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles BT_NumeriTelefono_MasterEsegui.Click
        Dim posizione As String = ""
        Dim numero As String = ""
        Dim errore As Boolean = False
        Dim annulla As Boolean = False
        posizione = Me.CMB_NumeriTelefono_MasterPos.Text
        numero = Me.TXT_NumeriTelefono_MasterNumero.Text
        If Me.RD_NumeriTelefono_MasterMem.Checked = True Then
            If IsNumeric(numero) = True And numero.Length > 6 And Mid(numero, 1, 1) = "+" Then
                If MsgBox("Confermare la memroizzazione del numero '" & numero & "' nella locazione '" & posizione & "'?" & Chr(13) & "Attenzione, se già presente un numero nella posizione indicata, questo verrà sovrascritto con il nuovo numero.", MsgBoxStyle.Question + MsgBoxStyle.YesNo, "Memorizzazione...") = MsgBoxResult.Yes Then
                    Inserisci_Database(numero, Me.TXT_NumeriTelefono_MasterNome.Text)
                    'Me.SerialPort1.Write("*/" & password & "-NUM" & posizione & numero & "/*")
                    comando = "*/" & password & "-NUM" & posizione & numero & "/*"
                    Invio_Comando_Seriale(comando)
                    Aggiorna_LOG(15, "")
                Else
                    annulla = True
                End If
            Else
                errore = True
            End If
        End If
        If Me.RD_NumeriTelefono_MasterCanc.Checked = True Then
            'Me.SerialPort1.Write("*/" & password & "-NUM" & posizione & "/*")
            If MsgBox("Confermare la cancellazione del numero presenete nella locazione '" & posizione & "'?", MsgBoxStyle.Question + MsgBoxStyle.YesNo, "Cancellazione...") = MsgBoxResult.Yes Then
                comando = "*/" & password & "-NUM" & posizione & "/*"
                Invio_Comando_Seriale(comando)
                Aggiorna_LOG(16, "")
            End If
        End If
        If Me.RD_NumeriTelefono_MasterRichiedi.Checked = True Then
            'Me.SerialPort1.Write("*/" & password & "-NUM?/*")
            comando = "*/" & password & "-NUM?/*"
            Invio_Comando_Seriale(comando)
            Aggiorna_LOG(19, "")
            Me.TabControl2.SelectTab(Me.Tab_Master)
        End If
        If errore = True Then
            errore = False
            MsgBox("Verificare che il numero immesso contenga caratteri validi!" & Chr(13) & "Il numero di telefono deve essere espresso nel formato '+39021234567', dove '+39' rappresenta il prefisso internazionale.", MsgBoxStyle.Exclamation + MsgBoxStyle.OkOnly, "Errore Formato...")
        Else
            If annulla = False Then
                Operazione_In_Corso(True)
            End If
        End If

    End Sub

    Private Sub BT_NumeriTelefono_ApricancelloEsegui_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles BT_NumeriTelefono_ApricancelloEsegui.Click
        Dim numero As String = ""
        Dim errore As Boolean = False
        Dim annulla As Boolean = False
        numero = Me.TXT_NumeriTelefono_ApricancelloNumero.Text
        If Me.RD_NumeriTelefono_ApricancelloMem.Checked = True Then
            If IsNumeric(numero) = True And numero.Length > 6 And Mid(numero, 1, 1) = "+" Then
                If MsgBox("Confi la memroizzazione del numero '" & numero & "' nella lista apricancello?", MsgBoxStyle.Question + MsgBoxStyle.YesNo, "Memroizzazione...") = MsgBoxResult.Yes Then
                    Inserisci_Database(numero, Me.TXT_NumeriTelefono_ApricancelloNome.Text)
                    'Me.SerialPort1.Write("*/" & password & "-MAC" & numero & "/*")
                    comando = "*/" & password & "-MAC" & numero & "/*"
                    Invio_Comando_Seriale(comando)
                    Aggiorna_LOG(17, "")
                Else
                    annulla = True
                End If
            Else
                errore = True
            End If
        End If
        If Me.RD_NumeriTelefono_ApricancelloCanc.Checked = True Then
            If IsNumeric(numero) = True And numero.Length > 6 And Mid(numero, 1, 1) = "+" Then
                If MsgBox("Confermi la cancellazione del numero '" & numero & "'?", MsgBoxStyle.Question + MsgBoxStyle.YesNo, "Cancellazione...") = MsgBoxResult.Yes Then
                    'Me.SerialPort1.Write("*/" & password & "-DAC" & numero & "/*")
                    comando = "*/" & password & "-DAC" & numero & "/*"
                    Invio_Comando_Seriale(comando)
                    Aggiorna_LOG(18, "")
                End If
            Else
                errore = True
            End If
        End If
        If Me.RD_NumeriTelefono_ApricancelloRichiedi.Checked = True Then
            'Me.SerialPort1.Write("*/" & password & "-ALL/*")
            comando = "*/" & password & "-AM/*"
            Invio_Comando_Seriale(comando)
            Aggiorna_LOG(20, "")
            Me.TabControl2.SelectTab(Me.Tab_Apricancello)
        End If
        If errore = True Then
            errore = False
            MsgBox("Verificare che il numero immesso contenga caratteri validi!" & Chr(13) & "Il numero di telefono deve essere espresso nel formato '+39021234567', dove '+39' rappresenta il prefisso internazionale.", MsgBoxStyle.Exclamation + MsgBoxStyle.OkOnly, "Errore Formato...")
        Else
            If annulla = False Then
                Operazione_In_Corso(True)
            End If
        End If
    End Sub



    Private Sub RD_NumeriTelefono_MasterCanc_CheckedChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles RD_NumeriTelefono_MasterCanc.CheckedChanged
        If Me.RD_NumeriTelefono_MasterMem.Checked = True Then
            Me.TXT_NumeriTelefono_MasterNumero.Enabled = True
            Me.TXT_NumeriTelefono_MasterNome.Enabled = True
            Me.CMB_NumeriTelefono_MasterPos.Enabled = True
        End If
        If Me.RD_NumeriTelefono_MasterCanc.Checked = True Then
            Me.TXT_NumeriTelefono_MasterNumero.Enabled = False
            Me.TXT_NumeriTelefono_MasterNome.Enabled = False
            Me.CMB_NumeriTelefono_MasterPos.Enabled = True
        End If
        If Me.RD_NumeriTelefono_MasterRichiedi.Checked = True Then
            Me.TXT_NumeriTelefono_MasterNumero.Enabled = False
            Me.TXT_NumeriTelefono_MasterNome.Enabled = False
            Me.CMB_NumeriTelefono_MasterPos.Enabled = False
        End If
    End Sub

    Private Sub RD_NumeriTelefono_MasterMem_CheckedChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles RD_NumeriTelefono_MasterMem.CheckedChanged
        If Me.RD_NumeriTelefono_MasterMem.Checked = True Then
            Me.TXT_NumeriTelefono_MasterNumero.Enabled = True
            Me.TXT_NumeriTelefono_MasterNome.Enabled = True
            Me.CMB_NumeriTelefono_MasterPos.Enabled = True
        End If
        If Me.RD_NumeriTelefono_MasterCanc.Checked = True Then
            Me.TXT_NumeriTelefono_MasterNumero.Enabled = False
            Me.TXT_NumeriTelefono_MasterNome.Enabled = False
            Me.CMB_NumeriTelefono_MasterPos.Enabled = True
        End If
        If Me.RD_NumeriTelefono_MasterRichiedi.Checked = True Then
            Me.TXT_NumeriTelefono_MasterNumero.Enabled = False
            Me.TXT_NumeriTelefono_MasterNome.Enabled = False
            Me.CMB_NumeriTelefono_MasterPos.Enabled = False
        End If
    End Sub

    Private Sub RD_NumeriTelefono_MasterRichiedi_CheckedChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles RD_NumeriTelefono_MasterRichiedi.CheckedChanged
        If Me.RD_NumeriTelefono_MasterMem.Checked = True Then
            Me.TXT_NumeriTelefono_MasterNumero.Enabled = True
            Me.TXT_NumeriTelefono_MasterNome.Enabled = True
            Me.CMB_NumeriTelefono_MasterPos.Enabled = True
        End If
        If Me.RD_NumeriTelefono_MasterCanc.Checked = True Then
            Me.TXT_NumeriTelefono_MasterNumero.Enabled = False
            Me.TXT_NumeriTelefono_MasterNome.Enabled = False
            Me.CMB_NumeriTelefono_MasterPos.Enabled = True
        End If
        If Me.RD_NumeriTelefono_MasterRichiedi.Checked = True Then
            Me.TXT_NumeriTelefono_MasterNumero.Enabled = False
            Me.TXT_NumeriTelefono_MasterNome.Enabled = False
            Me.CMB_NumeriTelefono_MasterPos.Enabled = False
        End If
    End Sub

    Private Sub RD_NumeriTelefono_ApricancelloMem_CheckedChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles RD_NumeriTelefono_ApricancelloMem.CheckedChanged
        If Me.RD_NumeriTelefono_ApricancelloMem.Checked = True Then
            Me.TXT_NumeriTelefono_ApricancelloNumero.Enabled = True
            Me.TXT_NumeriTelefono_ApricancelloNome.Enabled = True
        End If
        If Me.RD_NumeriTelefono_ApricancelloCanc.Checked = True Then
            Me.TXT_NumeriTelefono_ApricancelloNumero.Enabled = True
            Me.TXT_NumeriTelefono_ApricancelloNome.Enabled = False
        End If
        If Me.RD_NumeriTelefono_ApricancelloRichiedi.Checked = True Then
            Me.TXT_NumeriTelefono_ApricancelloNumero.Enabled = False
            Me.TXT_NumeriTelefono_ApricancelloNome.Enabled = False
        End If
    End Sub

    Private Sub RD_NumeriTelefono_ApricancelloCanc_CheckedChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles RD_NumeriTelefono_ApricancelloCanc.CheckedChanged
        If Me.RD_NumeriTelefono_ApricancelloMem.Checked = True Then
            Me.TXT_NumeriTelefono_ApricancelloNumero.Enabled = True
            Me.TXT_NumeriTelefono_ApricancelloNome.Enabled = True
        End If
        If Me.RD_NumeriTelefono_ApricancelloCanc.Checked = True Then
            Me.TXT_NumeriTelefono_ApricancelloNumero.Enabled = True
            Me.TXT_NumeriTelefono_ApricancelloNome.Enabled = False
        End If
        If Me.RD_NumeriTelefono_ApricancelloRichiedi.Checked = True Then
            Me.TXT_NumeriTelefono_ApricancelloNumero.Enabled = False
            Me.TXT_NumeriTelefono_ApricancelloNome.Enabled = False
        End If
    End Sub

    Private Sub RD_NumeriTelefono_ApricancelloRichiedi_CheckedChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles RD_NumeriTelefono_ApricancelloRichiedi.CheckedChanged
        If Me.RD_NumeriTelefono_ApricancelloMem.Checked = True Then
            Me.TXT_NumeriTelefono_ApricancelloNumero.Enabled = True
            Me.TXT_NumeriTelefono_ApricancelloNome.Enabled = True
        End If
        If Me.RD_NumeriTelefono_ApricancelloCanc.Checked = True Then
            Me.TXT_NumeriTelefono_ApricancelloNumero.Enabled = True
            Me.TXT_NumeriTelefono_ApricancelloNome.Enabled = False
        End If
        If Me.RD_NumeriTelefono_ApricancelloRichiedi.Checked = True Then
            Me.TXT_NumeriTelefono_ApricancelloNumero.Enabled = False
            Me.TXT_NumeriTelefono_ApricancelloNome.Enabled = False
        End If
    End Sub

    Private Sub BT_PulisciMaster_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles BT_PulisciMaster.Click
        Me.List_Master.Items.Clear()
    End Sub

    Private Sub BT_PulisciApricancello_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles BT_PulisciApricancello.Click
        Me.List_Apricancello.Items.Clear()
    End Sub

    Private Function Cerca_Database(ByVal NUM As String, ByRef NOME As String) As Integer
        Dim quanti As Integer
        Conn_Crea(CONN)
        Conn_Percorso(CONN, Path_Database)
        quanti = RS_Cerca(RS, CONN, "SELECT * FROM Utente WHERE Numero='" & NUM & "'", NOME)
        Return quanti
    End Function

    Private Sub Inserisci_Database(ByVal NUM As String, ByVal NOME As String)
        Dim nome_cercare As String = NOME
        Dim quanti As Integer = 0
        quanti = Cerca_Database(NUM, nome_cercare)
        If quanti = 0 Then
            Conn_Crea(CONN)
            Conn_Percorso(CONN, Path_Database)
            RS_Inserisci(RS, CONN, "INSERT INTO Utente (Nominativo, Numero) values ('" & NOME & "','" & NUM & "')")
        Else
            If MsgBox("Si desidera aggiornare il contatto del database?" & Chr(13) & "Nome nel Database: " & nome_cercare & Chr(13) & Chr(13) & "Nome Nuovo: " & NOME, MsgBoxStyle.Question + MsgBoxStyle.YesNo, "Aggiornamento...") = MsgBoxResult.Yes Then
                Conn_Crea(CONN)
                Conn_Percorso(CONN, Path_Database)
                RS_Aggiorna(RS, CONN, "UPDATE Utente SET Nominativo='" & NOME & "'WHERE Numero='" & NUM & "'")
            End If
        End If
    End Sub

    Private Function Cancella_Database(ByVal NUM As String, ByRef NOME As String) As Integer
        Dim quanti As Integer
        Conn_Crea(CONN)
        Conn_Percorso(CONN, Path_Database)
        RS_Cancella(RS, CONN, "DELETE * FROM Utente WHERE Numero='" & NUM & "'")
        Return quanti
    End Function

    Private Sub Database_Click_1(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Database.Click
        Frm_Lista.ShowDialog()
    End Sub


    Private Sub BT_Allarmi_TemperaturaMIN_Esegui_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles BT_Allarmi_TemperaturaMIN_Esegui.Click
        Dim temperatura As String
        temperatura = Me.CMB_Allarmi_TemperaturaMIN.Text
        If Mid(temperatura, 1, 1) <> "+" And Mid(temperatura, 1, 1) <> "-" Then
            temperatura = Mid(temperatura, 2, 2)
            temperatura = "+" & temperatura
        Else
            temperatura = Mid(temperatura, 1, 3)
        End If
        comando = "*/" & password & "-ALLMIN:" & temperatura & "/*"
        Invio_Comando_Seriale(comando)
        Aggiorna_LOG(24, temperatura)
        Operazione_In_Corso(True)
    End Sub

    Private Sub BT_Allarmi_TemperaturaMAX_Esegui_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles BT_Allarmi_TemperaturaMAX_Esegui.Click
        Dim temperatura As String
        temperatura = Me.CMB_Allarmi_TemperaturaMAX.Text
        If Mid(temperatura, 1, 1) <> "+" And Mid(temperatura, 1, 1) <> "-" Then
            temperatura = Mid(temperatura, 2, 2)
            temperatura = "+" & temperatura
        Else
            temperatura = Mid(temperatura, 1, 3)
        End If
        comando = "*/" & password & "-ALLMAX:" & temperatura & "/*"
        Invio_Comando_Seriale(comando)
        Aggiorna_LOG(25, temperatura)
        Operazione_In_Corso(True)
    End Sub

    Private Sub BT_Funzionamento_Modalita_Esegui_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles BT_Funzionamento_Modalita_Esegui.Click
        Dim modo As String
        If Me.RD_Funzionamento_Modalita_Imposta.Checked = True Then
            modo = Mid(Me.CMB_Funzionamento_Modalita_Modo.Text, 1)
            comando = "*/" & password & "-FUN:" & Mid(modo, 1, 1) & "/*"
            Invio_Comando_Seriale(comando)
            Aggiorna_LOG(26, modo)
        Else
            modo = Mid(Me.CMB_Funzionamento_Modalita_Modo.Text, 1)
            comando = "*/" & password & "-FUN:?" & "/*"
            Invio_Comando_Seriale(comando)
            Aggiorna_LOG(27, "")
        End If
        Operazione_In_Corso(True)
    End Sub

    Private Sub RD_Funzionamento_Modalita_Imposta_CheckedChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles RD_Funzionamento_Modalita_Imposta.CheckedChanged
        If Me.RD_Funzionamento_Modalita_Imposta.Checked = True Then
            Me.CMB_Funzionamento_Modalita_Modo.Enabled = True
        Else
            Me.CMB_Funzionamento_Modalita_Modo.Enabled = False
        End If
    End Sub

    Private Sub RD_Funzionamento_Modalita_Richiedi_CheckedChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles RD_Funzionamento_Modalita_Richiedi.CheckedChanged
        If Me.RD_Funzionamento_Modalita_Imposta.Checked = True Then
            Me.CMB_Funzionamento_Modalita_Modo.Enabled = True
        Else
            Me.CMB_Funzionamento_Modalita_Modo.Enabled = False
        End If
    End Sub

    Private Sub BT_Funzionamento_Inibizione_Temp_Esegui_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles BT_Funzionamento_Inibizione_Temp_Esegui.Click
        Dim minuti As String
        minuti = Me.CMB_Funzionamento_Inibizione_Temp.Text
        comando = "*/" & password & "-INT:" & minuti & "/*"
        Invio_Comando_Seriale(comando)
        Aggiorna_LOG(28, minuti)
        Operazione_In_Corso(True)
    End Sub

    Private Sub BT_Funzionamento_Inibizione_Caldaia_Esegui_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles BT_Funzionamento_Inibizione_Caldaia_Esegui.Click
        Dim minuti As String
        minuti = Me.CMB_Funzionamento_Inibizione_Caldaia.Text
        comando = "*/" & password & "-INC:" & minuti & "/*"
        Invio_Comando_Seriale(comando)
        Aggiorna_LOG(29, minuti)
        Operazione_In_Corso(True)
    End Sub

    Private Sub BT_Funzionamento_Temperature_Azzera_Esegui_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles BT_Funzionamento_Temperature_Azzera_Esegui.Click
        comando = "*/" & password & "-TRES" & "/*"
        Invio_Comando_Seriale(comando)
        Aggiorna_LOG(30, "")
        Operazione_In_Corso(True)
    End Sub

    Private Sub BT_Funzionamento_Temperature_Mantenere_Esegui_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles BT_Funzionamento_Temperature_Mantenere_Esegui.Click
        Dim temp As String
        temp = Me.CMB_Funzionamento_Temperature_Mantenere.Text
        comando = "*/" & password & "-NOR:" & temp & "/*"
        Invio_Comando_Seriale(comando)
        Aggiorna_LOG(31, temp)
        Operazione_In_Corso(True)
    End Sub

    Private Sub BT_Funzionamento_Temperature_TempRilevata_Esegui_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles BT_Funzionamento_Temperature_TempRilevata_Esegui.Click
        comando = "*/" & password & "-TEMP:" & "/*"
        Invio_Comando_Seriale(comando)
        Aggiorna_LOG(32, "")
        Operazione_In_Corso(True)
    End Sub

    Private Sub BT_SMSAllarmi_Esegui_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles BT_SMSAllarmi_Esegui.Click
        Dim tipo As String = ""
        Dim testo As String = ""
        If Me.TXT_SMSAllarmi_Testo.Text.Length > 0 Then
            testo = Me.TXT_SMSAllarmi_Testo.Text
            tipo = Me.TDG139.Text
            Select Case TDG
                Case "TDG138"
                    comando = "*/" & password & "-TAL:" & testo & "/*"
                    Aggiorna_LOG(33, tipo)
                Case "TDG139"
                    Select Case Me.TDG139.SelectedIndex
                        Case 0
                            comando = "*/" & password & "-THI:" & testo & "/*"
                            Aggiorna_LOG(33, tipo)
                        Case 1
                            comando = "*/" & password & "-TLO:" & testo & "/*"
                            Aggiorna_LOG(33, tipo)
                        Case 2
                            comando = "*/" & password & "-TIN:" & testo & "/*"
                            Aggiorna_LOG(33, tipo)
                    End Select
            End Select
            Invio_Comando_Seriale(comando)
            Operazione_In_Corso(True)
        Else
            MsgBox("Verificare i dati immessi in quanto non corretti.", MsgBoxStyle.Information + MsgBoxStyle.OkOnly, "Errore...")
        End If
    End Sub

    Private Sub BT_AttivaMonitor_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles BT_AttivaMonitor.Click
        comando = "*/" & password & "-E" & "/*"
        Invio_Comando_Seriale(comando)
        Aggiorna_LOG(34, "")
        Operazione_In_Corso(True)
    End Sub

    Private Sub BT_PasswordConfig_Conferma_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles BT_PasswordConfig_Conferma.Click
        If Me.TXT_PasswordConfig.Text.Length = 5 And IsNumeric(Me.TXT_PasswordConfig.Text) = True Then
            If MsgBox("Da ora in poi verrà utilizzata la password '" & Me.TXT_PasswordConfig.Text & "' per configurare il sitema." & Chr(13) & "Si desidera continuare?", MsgBoxStyle.Question + MsgBoxStyle.YesNo, "Password...") = MsgBoxResult.Yes Then
                password = Me.TXT_PasswordConfig.Text
            End If
        End If
    End Sub


    Private Sub RD_DTMF_Attivazione_Imposta_CheckedChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles RD_DTMF_Attivazione_Imposta.CheckedChanged
        If Me.RD_DTMF_Attivazione_Imposta.Checked = True Then
            Me.BT_DTMF_Attivazione_Esegui1.Enabled = True
            Me.BT_DTMF_Attivazione_Esegui2.Enabled = True
            Me.BT_DTMF_Attivazione_Richiesta.Enabled = False
        Else
            Me.BT_DTMF_Attivazione_Esegui1.Enabled = False
            Me.BT_DTMF_Attivazione_Esegui2.Enabled = False
            Me.BT_DTMF_Attivazione_Richiesta.Enabled = True
        End If
    End Sub

    Private Sub RD_DTMF_Attivazione_Richiedi_CheckedChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles RD_DTMF_Attivazione_Richiedi.CheckedChanged
        If Me.RD_DTMF_Attivazione_Imposta.Checked = True Then
            Me.BT_DTMF_Attivazione_Esegui1.Enabled = True
            Me.BT_DTMF_Attivazione_Esegui2.Enabled = True
            Me.BT_DTMF_Attivazione_Richiesta.Enabled = False
        Else            
            Me.BT_DTMF_Attivazione_Esegui1.Enabled = False
            Me.BT_DTMF_Attivazione_Esegui2.Enabled = False
            Me.BT_DTMF_Attivazione_Richiesta.Enabled = True
        End If
    End Sub

    Private Sub BT_DTMF_Attivazione_Esegui1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles BT_DTMF_Attivazione_Esegui1.Click
        Dim rele As String
        Dim tempo As String
        rele = "1"
        tempo = Me.CMB_DTMF_Attivazione_Tempo1.Text
        comando = "*/" & password & "-TIM1" & ":" & tempo & "/*"
        Invio_Comando_Seriale(comando)
        Aggiorna_LOG(36, rele & tempo)
        Operazione_In_Corso(True)
    End Sub

    Private Sub BT_DTMF_Attivazione_Esegui2_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles BT_DTMF_Attivazione_Esegui2.Click
        Dim rele As String
        Dim tempo As String
        rele = "2"
        tempo = Me.CMB_DTMF_Attivazione_Tempo2.Text
        comando = "*/" & password & "-TIM2" & ":" & tempo & "/*"
        Invio_Comando_Seriale(comando)
        Aggiorna_LOG(36, rele & tempo)
        Operazione_In_Corso(True)
    End Sub

    Private Sub BT_DTMF_Attivazione_Richiesta_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles BT_DTMF_Attivazione_Richiesta.Click
        comando = "*/" & password & "-TIM?" & "/*"
        Invio_Comando_Seriale(comando)
        Aggiorna_LOG(37, "")
        Operazione_In_Corso(True)
    End Sub

    Private Sub BT_DTMF_Password_Esegui_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles BT_DTMF_Password_Esegui.Click
        Dim parametro As String
        If Me.CHK_DTMF_Password_ON.Checked = True Then
            comando = "*/" & password & "-SIC" & "1" & "/*"
            parametro = "ON"
        Else
            comando = "*/" & password & "-SIC" & "0" & "/*"
            parametro = "OFF"
        End If
        Invio_Comando_Seriale(comando)
        Aggiorna_LOG(38, parametro)
        Operazione_In_Corso(True)
    End Sub

    Private Sub CHK_DTMF_Password_ON_CheckedChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles CHK_DTMF_Password_ON.CheckedChanged
        If Me.CHK_DTMF_Password_ON.Checked = True Then
            Me.CHK_DTMF_Password_OFF.Checked = False
        Else
            Me.CHK_DTMF_Password_OFF.Checked = True
        End If
    End Sub

    Private Sub CHK_DTMF_Password_OFF_CheckedChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles CHK_DTMF_Password_OFF.CheckedChanged
        If Me.CHK_DTMF_Password_OFF.Checked = True Then
            Me.CHK_DTMF_Password_ON.Checked = False
        Else
            Me.CHK_DTMF_Password_ON.Checked = True
        End If
    End Sub

    Private Sub CHK_DTMF_Filtro_ON_CheckedChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles CHK_DTMF_Filtro_ON.CheckedChanged
        If Me.CHK_DTMF_Filtro_ON.Checked = True Then
            Me.CHK_DTMF_Filtro_OFF.Checked = False
        Else
            Me.CHK_DTMF_Filtro_OFF.Checked = True
        End If
    End Sub

    Private Sub CHK_DTMF_Filtro_OFF_CheckedChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles CHK_DTMF_Filtro_OFF.CheckedChanged
        If Me.CHK_DTMF_Filtro_OFF.Checked = True Then
            Me.CHK_DTMF_Filtro_ON.Checked = False
        Else
            Me.CHK_DTMF_Filtro_ON.Checked = True
        End If
    End Sub

    Private Sub BT_DTMF_Filtro_Esegui_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles BT_DTMF_Filtro_Esegui.Click
        Dim parametro As String
        If Me.CHK_DTMF_Filtro_ON.Checked = True Then
            comando = "*/" & password & "-FIL" & "1" & "/*"
            parametro = "ON"
        Else
            comando = "*/" & password & "-FIL" & "0" & "/*"
            parametro = "OFF"
        End If
        Invio_Comando_Seriale(comando)
        Aggiorna_LOG(39, parametro)
        Operazione_In_Corso(True)
    End Sub

    Private Sub CHK_MasterSlave_Richiesta_CheckedChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles CHK_MasterSlave_Richiesta.CheckedChanged
        If Me.CHK_MasterSlave_Richiesta.Checked = True Then
            Me.CMB_MasterSlave_Tipo.Enabled = False
        Else
            Me.CMB_MasterSlave_Tipo.Enabled = True
        End If
    End Sub

    Private Sub BT_MasterSlave_Tipo_Esegui_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles BT_MasterSlave_Tipo_Esegui.Click
        Dim parametro As String
        If Me.CHK_MasterSlave_Richiesta.Checked = True Then
            comando = "*/" & password & "-DEV?" & "/*"
            Invio_Comando_Seriale(comando)
            Aggiorna_LOG(41, "")
        Else
            comando = "*/" & password & "-DEV:" & Me.CMB_MasterSlave_Tipo.SelectedIndex & "/*"
            If Me.CMB_MasterSlave_Tipo.SelectedIndex = 0 Then
                parametro = "Master"
            Else
                parametro = "Slave"
            End If
            Invio_Comando_Seriale(comando)
            Aggiorna_LOG(40, parametro)
        End If
        Operazione_In_Corso(True)
    End Sub

    Private Sub CHK_MasterSlave_Tempo_Richiesta_CheckedChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles CHK_MasterSlave_Tempo_Richiesta.CheckedChanged
        If Me.CHK_MasterSlave_Tempo_Richiesta.Checked = True Then
            Me.CMB_MasterSlave_Tempo.Enabled = False
        Else
            Me.CMB_MasterSlave_Tempo.Enabled = True
        End If
    End Sub

    Private Sub BT_MasterSlave_Tempo_Esegui_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles BT_MasterSlave_Tempo_Esegui.Click
        Dim parametro As String
        If Me.CHK_MasterSlave_Tempo_Richiesta.Checked = True Then
            comando = "*/" & password & "-ATT?" & "/*"
            Invio_Comando_Seriale(comando)
            Aggiorna_LOG(42, "")
        Else
            parametro = Me.CMB_MasterSlave_Tempo.Text
            comando = "*/" & password & "-ATT:" & parametro & "/*"
            Invio_Comando_Seriale(comando)
            Aggiorna_LOG(43, parametro)
        End If
        Operazione_In_Corso(True)
    End Sub


    Private Sub BT_MasterSlave_TempoUscita_Esegui_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles BT_MasterSlave_TempoUscita_Esegui.Click
        Dim parametro As String
        parametro = Me.CMB_MasterSlave_TempoUscita.Text
        comando = "*/" & password & "-TAC:" & parametro & "/*"
        Invio_Comando_Seriale(comando)
        Aggiorna_LOG(44, parametro)
        Operazione_In_Corso(True)
    End Sub


    Private Sub CHK_Ingressi_TempoRichiedi_CheckedChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles CHK_Ingressi_TempoRichiedi.CheckedChanged
        If Me.CHK_Ingressi_TempoRichiedi.Checked = True Then
            Me.CMB_Ingressi_TempoTempo.Enabled = False
            Me.CMB_Ingressi_TempoIngresso.Enabled = False
            Me.RD_Ingressi_TempoInibizione.Enabled = False
            Me.RD_Ingressi_TempoOsservazione.Enabled = False
        Else
            Me.CMB_Ingressi_TempoTempo.Enabled = True
            Me.CMB_Ingressi_TempoIngresso.Enabled = True
            Me.RD_Ingressi_TempoInibizione.Enabled = True
            Me.RD_Ingressi_TempoOsservazione.Enabled = True
        End If
    End Sub

    Private Sub BT_LOG_esteso_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles BT_LOG_esteso.Click
        Frm_LOG.Show()
        LOG_Esteso = True
        Me.BT_LOG_esteso.Enabled = False
    End Sub

    Private Sub ToolStripMenuItem2_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles ToolStripMenuItem2.Click
        Frm_About.ShowDialog()
    End Sub

    Private Sub Tool_Esci_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Tool_Esci.Click
        Me.Close()
    End Sub

    Private Sub BT_Salva_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles BT_Salva.Click
        Dim nome As String = ""
        Dim numero As String = ""
        Dim quanti As Integer
        Dim errore As Boolean = False
        Select Funzione
            Case "MODIFICA"
                nome = Me.TXT_Nome.Text
                numero = Me.TXT_Numero.Text
                quanti = Cerca_Database(numero, nome)
                If quanti > 0 Then
                    nome = Me.TXT_Nome.Text
                    Conn_Crea(CONN)
                    Conn_Percorso(CONN, Path_Database)
                    errore = RS_Aggiorna(RS, CONN, "UPDATE Utente SET Nominativo='" & nome & "', Numero='" & numero & "' WHERE Numero='" & Me.TXT_Numero.Text & "'")
                Else
                    Inserisci_Database(numero, nome)
                End If
        End Select
        Me.TXT_Nome.Text = ""
        Me.TXT_Numero.Text = ""
        Me.TXT_Nome.Enabled = False
        Me.TXT_Numero.Enabled = False
        Me.BT_Annulla.Enabled = False
        Me.BT_Salva.Enabled = False
        Funzione = ""
        Select Case errore
            Case False
                MsgBox("Operazione eseguita con successo.", MsgBoxStyle.Information + MsgBoxStyle.OkOnly, "...")
            Case True
                MsgBox("Operazione non completata a causa di un errore.", MsgBoxStyle.Information + MsgBoxStyle.OkOnly, "...")
        End Select
        Aggiorna_Lista_Master()
    End Sub

    Private Sub Tool_Associa_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Tool_Associa.Click
        Funzione = "MODIFICA"
        Me.TXT_Numero.Text = Me.List_Master.SelectedItems.Item(0).SubItems(1).Text
        Me.TXT_Nome.Text = Me.List_Master.SelectedItems.Item(0).SubItems(2).Text
        Me.TXT_Nome.Enabled = True
        Me.TXT_Numero.Enabled = False
        Me.BT_Annulla.Enabled = True
        Me.BT_Salva.Enabled = True
    End Sub

    Private Sub BT_Annulla_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles BT_Annulla.Click
        Me.TXT_Nome.Text = ""
        Me.TXT_Numero.Text = ""
        Me.TXT_Nome.Enabled = False
        Me.TXT_Numero.Enabled = False
        Me.BT_Annulla.Enabled = False
        Me.BT_Salva.Enabled = False
        Funzione = ""
    End Sub

    Private Sub Aggiorna_Lista_Master()
        Dim Numeri(10) As String
        Dim numero As String = ""
        Dim nome As String = ""
        Dim quanti As Integer = 0
        Dim lista As ListViewItem
        Dim i As Integer
        For i = 0 To 7
            Numeri(i) = Me.List_Master.Items(i).SubItems(1).Text
            'Numeri(i) = Me.List_Master.SelectedItems.Item(0).SubItems(1).Text
        Next
        Me.List_Master.Items.Clear()
        For i = 0 To 7
            numero = Numeri(i)
            nome = ""
            Cerca_Database(numero, nome)
            lista = Me.List_Master.Items.Add(i + 1)
            lista.SubItems.Add(numero)
            lista.SubItems.Add(nome)
        Next
    End Sub

    Private Sub List_Master_SelectedIndexChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles List_Master.SelectedIndexChanged
        If Me.List_Master.SelectedItems.Count = 0 Then
            Me.Tool_Associa.Enabled = False            
        Else
            If Me.List_Master.SelectedItems.Item(0).SubItems(1).Text.Length > 1 Then
                Me.Tool_Associa.Enabled = True
            Else
                Me.Tool_Associa.Enabled = False
            End If
        End If
        Me.TXT_Nome.Text = ""
        Me.TXT_Numero.Text = ""
        Me.TXT_Nome.Enabled = False
        Me.TXT_Numero.Enabled = False
        Me.BT_Annulla.Enabled = False
        Me.BT_Salva.Enabled = False
    End Sub

    Private Sub List_Apricancello_SelectedIndexChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles List_Apricancello.SelectedIndexChanged
        If Me.List_Apricancello.SelectedItems.Count = 0 Then
            Me.Tool_AssociaApricancello.Enabled = False
        Else
            If Me.List_Apricancello.SelectedItems.Item(0).SubItems(0).Text.Length > 1 Then
                Me.Tool_AssociaApricancello.Enabled = True
            Else
                Me.Tool_AssociaApricancello.Enabled = False
            End If
        End If
        Me.TXT_NomeApricancello.Text = ""
        Me.TXT_NumeroApricancello.Text = ""
        Me.TXT_NomeApricancello.Enabled = False
        Me.TXT_NumeroApricancello.Enabled = False
        Me.BT_AnnullaApricancello.Enabled = False
        Me.BT_SalvaApricancello.Enabled = False
    End Sub

    Private Sub BT_AnnullaApricancello_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles BT_AnnullaApricancello.Click
        Me.TXT_NomeApricancello.Text = ""
        Me.TXT_NumeroApricancello.Text = ""
        Me.TXT_NomeApricancello.Enabled = False
        Me.TXT_NumeroApricancello.Enabled = False
        Me.BT_AnnullaApricancello.Enabled = False
        Me.BT_SalvaApricancello.Enabled = False
        Funzione = ""
    End Sub

    Private Sub BT_SalvaApricancello_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles BT_SalvaApricancello.Click
        Dim nome As String = ""
        Dim numero As String = ""
        Dim quanti As Integer
        Dim errore As Boolean = False
        Select Case Funzione
            Case "MODIFICA"
                nome = Me.TXT_NomeApricancello.Text
                numero = Me.TXT_NumeroApricancello.Text
                quanti = Cerca_Database(numero, nome)
                If quanti > 0 Then
                    nome = Me.TXT_Nome.Text
                    Conn_Crea(CONN)
                    Conn_Percorso(CONN, Path_Database)
                    errore = RS_Aggiorna(RS, CONN, "UPDATE Utente SET Nominativo='" & nome & "', Numero='" & numero & "' WHERE Numero='" & Me.TXT_NumeroApricancello.Text & "'")
                Else
                    Inserisci_Database(numero, nome)
                End If
        End Select
        Me.TXT_NomeApricancello.Text = ""
        Me.TXT_NumeroApricancello.Text = ""
        Me.TXT_NomeApricancello.Enabled = False
        Me.TXT_NumeroApricancello.Enabled = False
        Me.BT_AnnullaApricancello.Enabled = False
        Me.BT_SalvaApricancello.Enabled = False
        Funzione = ""
        Select Case errore
            Case False
                MsgBox("Operazione eseguita con successo.", MsgBoxStyle.Information + MsgBoxStyle.OkOnly, "...")
            Case True
                MsgBox("Operazione non completata a causa di un errore.", MsgBoxStyle.Information + MsgBoxStyle.OkOnly, "...")
        End Select
        Aggiorna_Lista_Apricancello()
    End Sub


    Private Sub Aggiorna_Lista_Apricancello()
        Dim Numeri(10) As String
        Dim numero As String = ""
        Dim nome As String = ""
        Dim quanti As Integer = 0
        Dim lista As ListViewItem
        Dim i As Integer
        For i = 0 To 7
            Numeri(i) = Me.List_Apricancello.Items(i).SubItems(0).Text
            'Numeri(i) = Me.List_Master.SelectedItems.Item(0).SubItems(1).Text
        Next
        Me.List_Apricancello.Items.Clear()
        For i = 0 To 7
            numero = Numeri(i)
            nome = ""
            Cerca_Database(numero, nome)
            lista = Me.List_Apricancello.Items.Add(i + 1)
            lista.SubItems.Add(numero)
            lista.SubItems.Add(nome)
        Next
    End Sub

    Private Sub Tool_AssociaApricancello_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Tool_AssociaApricancello.Click
        Funzione = "MODIFICA"
        Me.TXT_Numero.Text = Me.List_Master.SelectedItems.Item(0).SubItems(0).Text
        Me.TXT_Nome.Text = Me.List_Master.SelectedItems.Item(0).SubItems(1).Text
        Me.TXT_Nome.Enabled = True
        Me.TXT_Numero.Enabled = False
        Me.BT_Annulla.Enabled = True
        Me.BT_Salva.Enabled = True
    End Sub
End Class
