Public Class Form1

    ' TCVR Icom používá protokol tvaru FE FE A4 E0 Cn Sc Data FD
    ' Cn je příkaz (Command) Sc Subcommand
    ' Data pro nastavování/čtení frekvencí jsou složena z 5 bajtů, níže pořadí 5-4-3-2-1, data se použijí pro Cn: 00, 03, 05 a 1C 03

    Dim b0, b1, b2, b3, b4, b5, b6, b7, b8, b9 As Byte                         ' deklarace bajtů - hodnoty 0 až 9
    Dim bajts(0 To 11) As Byte

    Private Sub Form1_Load(sender As System.Object, e As System.EventArgs) Handles MyBase.Load

'přiřazení konstant protokolu Icom
        bajts(0) = 0                            'je k ničemu, ale bajty u mrkvošoustů musí mít index 0
        bajts(1) = 254                          ' preambule FE
        bajts(2) = 254                          ' preambule FE
        bajts(3) = NumericUpDown10.Value        ' adresa Icom 706, hexadecimálně 58
        bajts(4) = 224                          ' adresa kontroleru, hex E0
        bajts(5) = 5                            ' příkaz set freq, příkaz hexadecimálně 00 nebo 05
        bajts(11) = 253                         ' konec - znak FD
    End Sub

    Private Sub Vyssi_rad()         'pro bajty b2, b4, b6 a b8 se přepočítává základ, pomocná proměnná je b0

        b0 = b2
        Zaklad()
        b2 = b0

        b0 = b4
        Zaklad()
        b4 = b0

        b0 = b6
        Zaklad()
        b6 = b0

        b0 = b8
        Zaklad()
        b8 = b0

    End Sub
    Private Sub Zaklad()            'pomocná proměnná je b0, přepočtení řádu (základu)

        If b0 = 0 Then
            b0 = 0
        End If
        If b0 = 1 Then
            b0 = 16
        End If
        If b0 = 2 Then
            b0 = 32
        End If
        If b0 = 3 Then
            b0 = 48
        End If
        If b0 = 4 Then
            b0 = 64
        End If
        If b0 = 5 Then
            b0 = 80
        End If
        If b0 = 6 Then
            b0 = 96
        End If
        If b0 = 7 Then
            b0 = 112
        End If
        If b0 = 8 Then
            b0 = 128
        End If
        If b0 = 9 Then
            b0 = 144
        End If

    End Sub 

    Private Sub Nastav_com()    'nastavování sériového portu
        SerialPort1.Close()     'na otevřeném portu nelze měnit parametry
        SerialPort1.PortName = TextBox3.Text
        Dim br As Integer
        br = TextBox4.Text
        SerialPort1.BaudRate = br
    End Sub

    Private Sub Posli_bajty()   'posílání bajtů
        SerialPort1.Close()     'když se dvakrát za sebou otevře, tak se to zesere, tak ho zavírám
        SerialPort1.Open()      'otevření serial portu
        SerialPort1.Write(bajts, 1, 11) ' toto skutečně pošle bajty do Icomu
        SerialPort1.Close()
    End Sub

    Private Sub Nastavuj()

        bajts(3) = NumericUpDown10.Value        'nastavení adresy TCVRu

'přiřazení hodnot bajtům z NumericUpdown objektů pro zadávání

        b1 = NumericUpDown1.Value
        b2 = NumericUpDown2.Value
        b3 = NumericUpDown3.Value
        b4 = NumericUpDown4.Value
        b5 = NumericUpDown5.Value
        b6 = NumericUpDown6.Value
        b7 = NumericUpDown7.Value
        b8 = NumericUpDown8.Value
        b9 = NumericUpDown9.Value

        Vyssi_rad()  ' procedura kvůli Icomu

'přiřazení dvojice dvou bajtů, které tvoří jeden bajt dat v protokolu Icom

        bajts(6) = b8 + b9
        bajts(7) = b6 + b7
        bajts(8) = b4 + b5
        bajts(9) = b2 + b3
        bajts(10) = b1

        TextBox1.Text = Str(bajts(10)) + ", " + Str(bajts(9)) + ", " + Str(bajts(8)) + ", " + Str(bajts(7)) + ", " + Str(bajts(6))

        Posli_bajty()              'posílání bajtů protokolem Icom
    End Sub

    Private Sub Button1_Click(sender As System.Object, e As System.EventArgs) Handles Button1.Click
        Nastav_com()
        Nastavuj()
    End Sub

    Private Sub Button2_Click_1(sender As System.Object, e As System.EventArgs) Handles Button2.Click
        Nastavuj()
    End Sub
    
End Class
