From f7826bd69f136d7fef53d8926601c6c5443e4883 Mon Sep 17 00:00:00 2001 From: David Date: Sat, 17 Jan 2026 10:27:37 -0600 Subject: [PATCH] Add the VisBasic version --- AVR VisBasic/AVRcvrWinSerial.sln | 25 ++ AVR VisBasic/AVRcvrWinSerial.vbproj | 37 ++ AVR VisBasic/AVRcvrWinSerial.vbproj.user | 8 + AVR VisBasic/ApplicationEvents.vb | 29 ++ AVR VisBasic/Form1.Designer.vb | 388 ++++++++++++++++++ AVR VisBasic/Form1.resx | 123 ++++++ AVR VisBasic/Form1.vb | 271 ++++++++++++ .../My Project/Application.Designer.vb | 45 ++ AVR VisBasic/My Project/Application.myapp | 10 + 9 files changed, 936 insertions(+) create mode 100644 AVR VisBasic/AVRcvrWinSerial.sln create mode 100644 AVR VisBasic/AVRcvrWinSerial.vbproj create mode 100644 AVR VisBasic/AVRcvrWinSerial.vbproj.user create mode 100644 AVR VisBasic/ApplicationEvents.vb create mode 100644 AVR VisBasic/Form1.Designer.vb create mode 100644 AVR VisBasic/Form1.resx create mode 100644 AVR VisBasic/Form1.vb create mode 100644 AVR VisBasic/My Project/Application.Designer.vb create mode 100644 AVR VisBasic/My Project/Application.myapp diff --git a/AVR VisBasic/AVRcvrWinSerial.sln b/AVR VisBasic/AVRcvrWinSerial.sln new file mode 100644 index 0000000..409d7f1 --- /dev/null +++ b/AVR VisBasic/AVRcvrWinSerial.sln @@ -0,0 +1,25 @@ + +Microsoft Visual Studio Solution File, Format Version 12.00 +# Visual Studio Version 17 +VisualStudioVersion = 17.14.36705.20 d17.14 +MinimumVisualStudioVersion = 10.0.40219.1 +Project("{F184B08F-C81C-45F6-A57F-5ABD9991F28F}") = "AVRcvrWinSerial", "AVRcvrWinSerial.vbproj", "{E0C900FB-1B11-4234-9A71-5517B52DD89E}" +EndProject +Global + GlobalSection(SolutionConfigurationPlatforms) = preSolution + Debug|Any CPU = Debug|Any CPU + Release|Any CPU = Release|Any CPU + EndGlobalSection + GlobalSection(ProjectConfigurationPlatforms) = postSolution + {E0C900FB-1B11-4234-9A71-5517B52DD89E}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {E0C900FB-1B11-4234-9A71-5517B52DD89E}.Debug|Any CPU.Build.0 = Debug|Any CPU + {E0C900FB-1B11-4234-9A71-5517B52DD89E}.Release|Any CPU.ActiveCfg = Release|Any CPU + {E0C900FB-1B11-4234-9A71-5517B52DD89E}.Release|Any CPU.Build.0 = Release|Any CPU + EndGlobalSection + GlobalSection(SolutionProperties) = preSolution + HideSolutionNode = FALSE + EndGlobalSection + GlobalSection(ExtensibilityGlobals) = postSolution + SolutionGuid = {85185DF1-6E70-468D-B054-AE68D3FE07D2} + EndGlobalSection +EndGlobal diff --git a/AVR VisBasic/AVRcvrWinSerial.vbproj b/AVR VisBasic/AVRcvrWinSerial.vbproj new file mode 100644 index 0000000..6fddd48 --- /dev/null +++ b/AVR VisBasic/AVRcvrWinSerial.vbproj @@ -0,0 +1,37 @@ + + + + WinExe + net9.0-windows + Sub Main + true + WindowsForms + Off + + + + + + + + + + + + + + + True + True + Application.myapp + + + + + + MyApplicationCodeGenerator + Application.Designer.vb + + + + \ No newline at end of file diff --git a/AVR VisBasic/AVRcvrWinSerial.vbproj.user b/AVR VisBasic/AVRcvrWinSerial.vbproj.user new file mode 100644 index 0000000..370ab99 --- /dev/null +++ b/AVR VisBasic/AVRcvrWinSerial.vbproj.user @@ -0,0 +1,8 @@ + + + + + Form + + + diff --git a/AVR VisBasic/ApplicationEvents.vb b/AVR VisBasic/ApplicationEvents.vb new file mode 100644 index 0000000..cf403a0 --- /dev/null +++ b/AVR VisBasic/ApplicationEvents.vb @@ -0,0 +1,29 @@ +Imports Microsoft.VisualBasic.ApplicationServices + +Namespace My + ' The following events are available for MyApplication: + ' Startup: Raised when the application starts, before the startup form is created. + ' Shutdown: Raised after all application forms are closed. This event is not raised if the application terminates abnormally. + ' UnhandledException: Raised if the application encounters an unhandled exception. + ' StartupNextInstance: Raised when launching a single-instance application and the application is already active. + ' NetworkAvailabilityChanged: Raised when the network connection is connected or disconnected. + + ' **NEW** ApplyApplicationDefaults: Raised when the application queries default values to be set for the application. + + ' Example: + ' Private Sub MyApplication_ApplyApplicationDefaults(sender As Object, e As ApplyApplicationDefaultsEventArgs) Handles Me.ApplyApplicationDefaults + ' + ' ' Setting the application-wide default Font: + ' e.Font = New Font(FontFamily.GenericSansSerif, 12, FontStyle.Regular) + ' + ' ' Setting the HighDpiMode for the Application: + ' e.HighDpiMode = HighDpiMode.PerMonitorV2 + ' + ' ' If a splash dialog is used, this sets the minimum display time: + ' e.MinimumSplashScreenDisplayTime = 4000 + ' End Sub + + Partial Friend Class MyApplication + + End Class +End Namespace diff --git a/AVR VisBasic/Form1.Designer.vb b/AVR VisBasic/Form1.Designer.vb new file mode 100644 index 0000000..aa9cac6 --- /dev/null +++ b/AVR VisBasic/Form1.Designer.vb @@ -0,0 +1,388 @@ + +Partial Class Form1 + Inherits System.Windows.Forms.Form + + 'Form overrides dispose to clean up the component list. + + Protected Overrides Sub Dispose(disposing As Boolean) + Try + If disposing AndAlso components IsNot Nothing Then + components.Dispose() + End If + Finally + MyBase.Dispose(disposing) + End Try + End Sub + + 'Required by the Windows Form Designer + Private components As System.ComponentModel.IContainer + + 'NOTE: The following procedure is required by the Windows Form Designer + 'It can be modified using the Windows Form Designer. + 'Do not modify it using the code editor. + + Private Sub InitializeComponent() + components = New ComponentModel.Container() + btnSendReady = New Button() + ButtonSend3 = New Button() + ListBoxReceived = New ListBox() + ComboBoxPorts = New ComboBox() + ComboBoxBaud = New ComboBox() + ComboBoxHandshake = New ComboBox() + ButtonConnect = New Button() + ButtonDisconnect = New Button() + LabelStatus = New Label() + CheckBoxRTS = New CheckBox() + CheckBoxCTS = New CheckBox() + TimerCTS = New Timer(components) + GroupBox1 = New GroupBox() + btnPowerZone1Off = New Button() + btnPowerZone1On = New Button() + ButtonMasterVolDown = New Button() + ButtonMasterVolUp = New Button() + CheckBoxMasterMute = New CheckBox() + GroupBox2 = New GroupBox() + btnPowerZone2Off = New Button() + btnPowerZone2On = New Button() + ButtonZone2VolDown = New Button() + ButtonZone2VolUp = New Button() + CheckBoxZone2Mute = New CheckBox() + GroupBoxPower = New GroupBox() + btnPowerOff = New Button() + btnPowerOn = New Button() + txtPartialInput = New TextBox() + GroupBox1.SuspendLayout() + GroupBox2.SuspendLayout() + GroupBoxPower.SuspendLayout() + SuspendLayout() + ' + ' btnSendReady + ' + btnSendReady.Location = New Point(18, 227) + btnSendReady.Name = "btnSendReady" + btnSendReady.Size = New Size(90, 23) + btnSendReady.TabIndex = 0 + btnSendReady.Text = "Send Ready" + btnSendReady.UseVisualStyleBackColor = True + ' + ' ButtonSend3 + ' + ButtonSend3.Location = New Point(315, 227) + ButtonSend3.Name = "ButtonSend3" + ButtonSend3.Size = New Size(75, 23) + ButtonSend3.TabIndex = 2 + ButtonSend3.Text = "Button3" + ButtonSend3.UseVisualStyleBackColor = True + ' + ' ListBoxReceived + ' + ListBoxReceived.FormattingEnabled = True + ListBoxReceived.HorizontalScrollbar = True + ListBoxReceived.Location = New Point(12, 97) + ListBoxReceived.Name = "ListBoxReceived" + ListBoxReceived.Size = New Size(387, 124) + ListBoxReceived.TabIndex = 3 + ' + ' ComboBoxPorts + ' + ComboBoxPorts.FormattingEnabled = True + ComboBoxPorts.Location = New Point(6, 12) + ComboBoxPorts.Name = "ComboBoxPorts" + ComboBoxPorts.Size = New Size(68, 23) + ComboBoxPorts.TabIndex = 4 + ' + ' ComboBoxBaud + ' + ComboBoxBaud.FormattingEnabled = True + ComboBoxBaud.Location = New Point(80, 12) + ComboBoxBaud.Name = "ComboBoxBaud" + ComboBoxBaud.Size = New Size(75, 23) + ComboBoxBaud.TabIndex = 5 + ' + ' ComboBoxHandshake + ' + ComboBoxHandshake.FormattingEnabled = True + ComboBoxHandshake.Location = New Point(161, 12) + ComboBoxHandshake.Name = "ComboBoxHandshake" + ComboBoxHandshake.Size = New Size(157, 23) + ComboBoxHandshake.TabIndex = 6 + ' + ' ButtonConnect + ' + ButtonConnect.Enabled = False + ButtonConnect.Location = New Point(324, 12) + ButtonConnect.Name = "ButtonConnect" + ButtonConnect.Size = New Size(75, 23) + ButtonConnect.TabIndex = 7 + ButtonConnect.Text = "Connect" + ButtonConnect.UseVisualStyleBackColor = True + ' + ' ButtonDisconnect + ' + ButtonDisconnect.Enabled = False + ButtonDisconnect.Location = New Point(324, 41) + ButtonDisconnect.Name = "ButtonDisconnect" + ButtonDisconnect.Size = New Size(75, 23) + ButtonDisconnect.TabIndex = 8 + ButtonDisconnect.Text = "Disconnect" + ButtonDisconnect.UseVisualStyleBackColor = True + ' + ' LabelStatus + ' + LabelStatus.Location = New Point(6, 45) + LabelStatus.Name = "LabelStatus" + LabelStatus.Size = New Size(182, 19) + LabelStatus.TabIndex = 9 + LabelStatus.Text = "Serial Port Status Appears Here" + ' + ' CheckBoxRTS + ' + CheckBoxRTS.AutoSize = True + CheckBoxRTS.Location = New Point(194, 44) + CheckBoxRTS.Name = "CheckBoxRTS" + CheckBoxRTS.Size = New Size(58, 19) + CheckBoxRTS.TabIndex = 10 + CheckBoxRTS.Text = "RTS(7)" + CheckBoxRTS.UseVisualStyleBackColor = True + ' + ' CheckBoxCTS + ' + CheckBoxCTS.AutoSize = True + CheckBoxCTS.Checked = True + CheckBoxCTS.CheckState = CheckState.Indeterminate + CheckBoxCTS.Enabled = False + CheckBoxCTS.Location = New Point(258, 44) + CheckBoxCTS.Name = "CheckBoxCTS" + CheckBoxCTS.Size = New Size(60, 19) + CheckBoxCTS.TabIndex = 11 + CheckBoxCTS.Text = "CTS(8)" + CheckBoxCTS.ThreeState = True + CheckBoxCTS.UseVisualStyleBackColor = True + ' + ' TimerCTS + ' + ' + ' GroupBox1 + ' + GroupBox1.Controls.Add(btnPowerZone1Off) + GroupBox1.Controls.Add(btnPowerZone1On) + GroupBox1.Controls.Add(ButtonMasterVolDown) + GroupBox1.Controls.Add(ButtonMasterVolUp) + GroupBox1.Controls.Add(CheckBoxMasterMute) + GroupBox1.FlatStyle = FlatStyle.Flat + GroupBox1.Location = New Point(12, 256) + GroupBox1.Name = "GroupBox1" + GroupBox1.Size = New Size(84, 168) + GroupBox1.TabIndex = 13 + GroupBox1.TabStop = False + GroupBox1.Text = "Zone 1" + ' + ' btnPowerZone1Off + ' + btnPowerZone1Off.Location = New Point(6, 56) + btnPowerZone1Off.Name = "btnPowerZone1Off" + btnPowerZone1Off.Size = New Size(66, 23) + btnPowerZone1Off.TabIndex = 19 + btnPowerZone1Off.Text = "O&ff" + btnPowerZone1Off.UseVisualStyleBackColor = True + ' + ' btnPowerZone1On + ' + btnPowerZone1On.Location = New Point(6, 27) + btnPowerZone1On.Name = "btnPowerZone1On" + btnPowerZone1On.Size = New Size(66, 23) + btnPowerZone1On.TabIndex = 18 + btnPowerZone1On.Text = "&On" + btnPowerZone1On.UseVisualStyleBackColor = True + ' + ' ButtonMasterVolDown + ' + ButtonMasterVolDown.Location = New Point(6, 114) + ButtonMasterVolDown.Name = "ButtonMasterVolDown" + ButtonMasterVolDown.Size = New Size(66, 23) + ButtonMasterVolDown.TabIndex = 15 + ButtonMasterVolDown.Text = "Vol Down" + ButtonMasterVolDown.UseVisualStyleBackColor = True + ' + ' ButtonMasterVolUp + ' + ButtonMasterVolUp.Location = New Point(6, 85) + ButtonMasterVolUp.Name = "ButtonMasterVolUp" + ButtonMasterVolUp.Size = New Size(66, 23) + ButtonMasterVolUp.TabIndex = 14 + ButtonMasterVolUp.Text = "Vol Up" + ButtonMasterVolUp.UseVisualStyleBackColor = True + ' + ' CheckBoxMasterMute + ' + CheckBoxMasterMute.AutoSize = True + CheckBoxMasterMute.Location = New Point(6, 143) + CheckBoxMasterMute.Name = "CheckBoxMasterMute" + CheckBoxMasterMute.Size = New Size(54, 19) + CheckBoxMasterMute.TabIndex = 13 + CheckBoxMasterMute.Text = "Mute" + CheckBoxMasterMute.UseVisualStyleBackColor = True + ' + ' GroupBox2 + ' + GroupBox2.Controls.Add(btnPowerZone2Off) + GroupBox2.Controls.Add(btnPowerZone2On) + GroupBox2.Controls.Add(ButtonZone2VolDown) + GroupBox2.Controls.Add(ButtonZone2VolUp) + GroupBox2.Controls.Add(CheckBoxZone2Mute) + GroupBox2.FlatStyle = FlatStyle.Flat + GroupBox2.Location = New Point(104, 256) + GroupBox2.Name = "GroupBox2" + GroupBox2.Size = New Size(84, 168) + GroupBox2.TabIndex = 14 + GroupBox2.TabStop = False + GroupBox2.Text = "Zone 2" + ' + ' btnPowerZone2Off + ' + btnPowerZone2Off.Location = New Point(6, 56) + btnPowerZone2Off.Name = "btnPowerZone2Off" + btnPowerZone2Off.Size = New Size(66, 23) + btnPowerZone2Off.TabIndex = 21 + btnPowerZone2Off.Text = "O&ff" + btnPowerZone2Off.UseVisualStyleBackColor = True + ' + ' btnPowerZone2On + ' + btnPowerZone2On.Location = New Point(6, 27) + btnPowerZone2On.Name = "btnPowerZone2On" + btnPowerZone2On.Size = New Size(66, 23) + btnPowerZone2On.TabIndex = 20 + btnPowerZone2On.Text = "&On" + btnPowerZone2On.UseVisualStyleBackColor = True + ' + ' ButtonZone2VolDown + ' + ButtonZone2VolDown.Location = New Point(6, 114) + ButtonZone2VolDown.Name = "ButtonZone2VolDown" + ButtonZone2VolDown.Size = New Size(66, 23) + ButtonZone2VolDown.TabIndex = 15 + ButtonZone2VolDown.Text = "Vol Down" + ButtonZone2VolDown.UseVisualStyleBackColor = True + ' + ' ButtonZone2VolUp + ' + ButtonZone2VolUp.Location = New Point(6, 85) + ButtonZone2VolUp.Name = "ButtonZone2VolUp" + ButtonZone2VolUp.Size = New Size(66, 23) + ButtonZone2VolUp.TabIndex = 14 + ButtonZone2VolUp.Text = "Vol Up" + ButtonZone2VolUp.UseVisualStyleBackColor = True + ' + ' CheckBoxZone2Mute + ' + CheckBoxZone2Mute.AutoSize = True + CheckBoxZone2Mute.Location = New Point(6, 143) + CheckBoxZone2Mute.Name = "CheckBoxZone2Mute" + CheckBoxZone2Mute.Size = New Size(54, 19) + CheckBoxZone2Mute.TabIndex = 13 + CheckBoxZone2Mute.Text = "Mute" + CheckBoxZone2Mute.UseVisualStyleBackColor = True + ' + ' GroupBoxPower + ' + GroupBoxPower.Controls.Add(btnPowerOff) + GroupBoxPower.Controls.Add(btnPowerOn) + GroupBoxPower.FlatStyle = FlatStyle.Flat + GroupBoxPower.Location = New Point(315, 341) + GroupBoxPower.Name = "GroupBoxPower" + GroupBoxPower.Size = New Size(84, 83) + GroupBoxPower.TabIndex = 15 + GroupBoxPower.TabStop = False + GroupBoxPower.Text = "Power" + ' + ' btnPowerOff + ' + btnPowerOff.Location = New Point(6, 51) + btnPowerOff.Name = "btnPowerOff" + btnPowerOff.Size = New Size(66, 23) + btnPowerOff.TabIndex = 18 + btnPowerOff.Text = "O&ff" + btnPowerOff.UseVisualStyleBackColor = True + ' + ' btnPowerOn + ' + btnPowerOn.Location = New Point(6, 22) + btnPowerOn.Name = "btnPowerOn" + btnPowerOn.Size = New Size(66, 23) + btnPowerOn.TabIndex = 17 + btnPowerOn.Text = "&On" + btnPowerOn.UseVisualStyleBackColor = True + ' + ' txtPartialInput + ' + txtPartialInput.Location = New Point(12, 70) + txtPartialInput.Name = "txtPartialInput" + txtPartialInput.Size = New Size(387, 23) + txtPartialInput.TabIndex = 16 + txtPartialInput.Text = "partial messages appear here..." + ' + ' Form1 + ' + AutoScaleDimensions = New SizeF(7F, 15F) + AutoScaleMode = AutoScaleMode.Font + AutoSize = True + AutoSizeMode = AutoSizeMode.GrowAndShrink + ClientSize = New Size(413, 436) + Controls.Add(txtPartialInput) + Controls.Add(GroupBoxPower) + Controls.Add(GroupBox2) + Controls.Add(GroupBox1) + Controls.Add(CheckBoxCTS) + Controls.Add(CheckBoxRTS) + Controls.Add(LabelStatus) + Controls.Add(ButtonDisconnect) + Controls.Add(ButtonConnect) + Controls.Add(ComboBoxHandshake) + Controls.Add(ComboBoxBaud) + Controls.Add(ComboBoxPorts) + Controls.Add(ListBoxReceived) + Controls.Add(ButtonSend3) + Controls.Add(btnSendReady) + Name = "Form1" + RightToLeft = RightToLeft.No + Text = "Yamaha RX-2400 Controller" + GroupBox1.ResumeLayout(False) + GroupBox1.PerformLayout() + GroupBox2.ResumeLayout(False) + GroupBox2.PerformLayout() + GroupBoxPower.ResumeLayout(False) + ResumeLayout(False) + PerformLayout() + End Sub + + Friend WithEvents btnSendReady As Button + Friend WithEvents ButtonSend3 As Button + Friend WithEvents ListBoxReceived As ListBox + Friend WithEvents ComboBoxPorts As ComboBox + Friend WithEvents ComboBoxBaud As ComboBox + Friend WithEvents ComboBoxHandshake As ComboBox + Friend WithEvents ButtonConnect As Button + Friend WithEvents ButtonDisconnect As Button + Friend WithEvents LabelStatus As Label + Friend WithEvents CheckBoxRTS As CheckBox + Friend WithEvents CheckBoxCTS As CheckBox + Friend WithEvents TimerCTS As Timer + Friend WithEvents GroupBox1 As GroupBox + Friend WithEvents CheckBoxMasterMute As CheckBox + Friend WithEvents ButtonMasterVolDown As Button + Friend WithEvents ButtonMasterVolUp As Button + Friend WithEvents GroupBox2 As GroupBox + Friend WithEvents ButtonZone2VolDown As Button + Friend WithEvents ButtonZone2VolUp As Button + Friend WithEvents CheckBoxZone2Mute As CheckBox + Friend WithEvents GroupBoxPower As GroupBox + Friend WithEvents txtPartialInput As TextBox + Friend WithEvents btnPowerZone1On As Button + Friend WithEvents btnPowerOff As Button + Friend WithEvents btnPowerOn As Button + Friend WithEvents btnPowerZone1Off As Button + Friend WithEvents btnPowerZone2Off As Button + Friend WithEvents btnPowerZone2On As Button + +End Class diff --git a/AVR VisBasic/Form1.resx b/AVR VisBasic/Form1.resx new file mode 100644 index 0000000..3bb9129 --- /dev/null +++ b/AVR VisBasic/Form1.resx @@ -0,0 +1,123 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + 17, 17 + + \ No newline at end of file diff --git a/AVR VisBasic/Form1.vb b/AVR VisBasic/Form1.vb new file mode 100644 index 0000000..3ad0e85 --- /dev/null +++ b/AVR VisBasic/Form1.vb @@ -0,0 +1,271 @@ +Imports System.IO.Ports +Imports Microsoft.VisualBasic.Logging + + + +Public Class Form1 + Private formIsLoaded As Boolean = False + Private formStartingWidth As Integer + Private textBoxesStartingWidth As Integer + Private connectButtonsStartingLeft As Integer + Private powerGroupStartingLeft As Integer + + Private ControlCodeMap As New Dictionary(Of Integer, String) From { + {0, "NUL"}, {1, "SOH"}, {2, "STX"}, {3, "ETX"}, + {4, "EOT"}, {5, "ENQ"}, {6, "ACK"}, {7, "BEL"}, + {8, "BS"}, {9, "TAB"}, {10, "LF"}, {11, "VT"}, + {12, "FF"}, {13, "CR"}, {14, "SO"}, {15, "SI"}, + {16, "DLE"}, {17, "DC1"}, {18, "DC2"}, {19, "DC3"}, + {20, "DC4"}, {21, "NAK"}, {22, "SYN"}, {23, "ETB"}, + {24, "CAN"}, {25, "EM"}, {26, "SUB"}, {27, "ESC"}, + {28, "FS"}, {29, "GS"}, {30, "RS"}, {31, "US"}, + {127, "DEL"} + } + Private WithEvents SerialPort1 As New SerialPort() + + Private Sub Form1_SizeChanged(sender As Object, e As EventArgs) Handles Me.SizeChanged + If (formIsLoaded) Then + If (Me.Width < formStartingWidth) Then + Me.Width = formStartingWidth + End If + Dim formCurrentWidth As Integer = Me.Width + Dim xDelta As Integer = formCurrentWidth - formStartingWidth + txtPartialInput.Width = textBoxesStartingWidth + xDelta + ListBoxReceived.Width = textBoxesStartingWidth + xDelta + ButtonConnect.Left = connectButtonsStartingLeft + xDelta + ButtonDisconnect.Left = connectButtonsStartingLeft + xDelta + GroupBoxPower.Left = powerGroupStartingLeft + xDelta + End If + End Sub + + Private Sub Form1_Load(sender As Object, e As EventArgs) Handles MyBase.Load + ' Startup + formStartingWidth = Width + Dim fixedHeight As Integer = Height + ' Allow width to change, but lock height + MinimumSize = New Size(formStartingWidth, fixedHeight) ' Minimum width 200 + MaximumSize = New Size(1200, fixedHeight) ' Unlimited width, fixed height + + textBoxesStartingWidth = txtPartialInput.Width + connectButtonsStartingLeft = ButtonConnect.Left + powerGroupStartingLeft = GroupBoxPower.Left + + FormBorderStyle = FormBorderStyle.Sizable + WindowState = FormWindowState.Normal + + ' Timer to check CTS status + TimerCTS.Interval = 500 + TimerCTS.Start() + + ' Populate COM ports + ComboBoxPorts.Items.AddRange(SerialPort.GetPortNames()) + + ' Populate baud rates + ComboBoxBaud.Items.AddRange(New Object() {9600, 19200, 38400, 57600, 115200}) + ComboBoxBaud.SelectedIndex = 0 + + ' Populate handshake options + ComboBoxHandshake.Items.AddRange([Enum].GetNames(GetType(Handshake))) + ComboBoxHandshake.SelectedItem = "RequestToSend" ' RTS/CTS default + formIsLoaded = True + End Sub + + ' Poll CTS state + Private Sub TimerCTS_Tick(sender As Object, e As EventArgs) Handles TimerCTS.Tick + If SerialPort1.IsOpen Then + CheckBoxCTS.CheckState = IIf(SerialPort1.CtsHolding = True, CheckState.Checked, CheckState.Unchecked) + Else + CheckBoxCTS.CheckState = CheckState.Indeterminate + End If + End Sub + Private Sub ButtonConnect_Click(sender As Object, e As EventArgs) Handles ButtonConnect.Click + Try + If Not SerialPort1.IsOpen And ComboBoxPorts.SelectedItem <> Nothing Then + SerialPort1.PortName = ComboBoxPorts.SelectedItem.ToString() + SerialPort1.BaudRate = CInt(ComboBoxBaud.SelectedItem) + SerialPort1.Handshake = CType([Enum].Parse(GetType(Handshake), ComboBoxHandshake.SelectedItem.ToString()), Handshake) + SerialPort1.Parity = Parity.None + SerialPort1.DataBits = 8 + SerialPort1.StopBits = StopBits.One + SerialPort1.Open() + LabelStatus.Text = "Connected" + CheckBoxRTS.Enabled = IIf(ComboBoxHandshake.SelectedItem = "None", True, False) + ButtonConnect.Enabled = False + ButtonDisconnect.Enabled = True + End If + Catch ex As Exception + MessageBox.Show("Error opening port: " & ex.Message) + End Try + End Sub + + Private Sub ButtonDisconnect_Click(sender As Object, e As EventArgs) Handles ButtonDisconnect.Click + If SerialPort1.IsOpen Then + SerialPort1.Close() + LabelStatus.Text = "Disconnected" + ButtonDisconnect.Enabled = False + ButtonConnect.Enabled = True + End If + End Sub + + ' Send buttons + Private Sub ButtonSend1_Click(sender As Object, e As EventArgs) Handles btnSendReady.Click + If SerialPort1.IsOpen Then + Dim msg As String = Chr(17) & "000" & Chr(3) + SerialPort1.WriteLine(msg) + ListBoxReceived.Items.Add("> " & ExpandControlCodes(msg)) + ListBoxReceived.SelectedIndex = ListBoxReceived.Items.Count - 1 + End If + End Sub + + + ' Handle incoming data + Private Sub SerialPort1_DataReceived(sender As Object, e As SerialDataReceivedEventArgs) _ + Handles SerialPort1.DataReceived + Static Dim receivedMessage As String = "" + Try + receivedMessage &= SerialPort1.ReadExisting() + Dim pos As Integer = InStr(receivedMessage, Chr(3), CompareMethod.Binary) ' ETX + If (pos > 0) Then + While (pos > 0) + Dim oneMessage As String = "" + + Debug.Print("ETX at pos: " & pos.ToString() & " in '" & receivedMessage & "'") + oneMessage = Mid(receivedMessage, 1, pos) + Dim parsed As String = ExpandControlCodes(oneMessage) + ' + ' Analyze and deal with the message + ' + ProcessAVRMessage(oneMessage) + Me.Invoke(Sub() ListBoxReceived.Items.Add("< " & parsed)) + Me.Invoke(Sub() ListBoxReceived.SelectedIndex = ListBoxReceived.Items.Count - 1) + receivedMessage = Mid(receivedMessage, pos + 1) + Me.Invoke(Sub() txtPartialInput.Text = receivedMessage) + pos = InStr(receivedMessage, Chr(3), CompareMethod.Binary) + End While + Else + 'Debug.Print("No ETX in '" & receivedMessage & "'") + Me.Invoke(Sub() txtPartialInput.Text = receivedMessage) + End If + Catch ex As Exception + ' Handle errors + Debug.Print("Exception caught and ignored?") + End Try + End Sub + + + Private Sub Form1_FormClosing(sender As Object, e As FormClosingEventArgs) Handles MyBase.FormClosing + If SerialPort1.IsOpen Then SerialPort1.Close() + End Sub + + Private Function ExpandControlCodes(input As String) As String + Dim sb As New Text.StringBuilder() + + For Each ch As Char In input + Dim code As Integer = Asc(ch) + If ControlCodeMap.ContainsKey(code) Then + sb.Append("[" & ControlCodeMap(code) & "]") + Else + sb.Append(ch) + End If + Next + Return sb.ToString() + End Function + + Private Sub CheckBoxRTS_CheckedChanged(sender As Object, e As EventArgs) Handles CheckBoxRTS.CheckedChanged + SerialPort1.RtsEnable = CheckBoxRTS.Checked + End Sub + + + Private Sub ButtonMasterVolUp_Click(sender As Object, e As EventArgs) Handles ButtonMasterVolUp.Click + SendMessageToAVR(Chr(2) & "07A1A" & Chr(3)) + End Sub + + Private Sub ButtonMasterVolDown_Click(sender As Object, e As EventArgs) Handles ButtonMasterVolDown.Click + SendMessageToAVR(Chr(2) & "07A1B" & Chr(3)) + End Sub + + Private Sub CheckBoxMasterMute_CheckedChanged(sender As Object, e As EventArgs) Handles CheckBoxMasterMute.CheckedChanged + SendMessageToAVR(IIf(CheckBoxMasterMute.Checked, Chr(2) & "07EA2" & Chr(3), "07EA3")) + End Sub + + Private Sub ButtonZone2VolUp_Click(sender As Object, e As EventArgs) Handles ButtonZone2VolUp.Click + SendMessageToAVR(Chr(2) & "07ADA" & Chr(3)) + End Sub + + Private Sub ButtonZone2VolDown_Click(sender As Object, e As EventArgs) Handles ButtonZone2VolDown.Click + SendMessageToAVR(Chr(2) & "07ADB" & Chr(3)) + End Sub + + Private Sub CheckBoxZone2Mute_CheckedChanged(sender As Object, e As EventArgs) Handles CheckBoxZone2Mute.CheckedChanged + SendMessageToAVR(IIf(CheckBoxZone2Mute.Checked, Chr(2) & "07EA0" & Chr(3), "07EA1")) + End Sub + + Private Sub SendMessageToAVR(msg As String) + If Not ButtonConnect.Enabled Then + SerialPort1.WriteLine(msg) + ListBoxReceived.Items.Add("> " & ExpandControlCodes(msg)) + ListBoxReceived.SelectedIndex = ListBoxReceived.Items.Count - 1 + End If + End Sub + + ' + ' Power - main and zone + ' + Private Sub btnPowerOn_Click(sender As Object, e As EventArgs) Handles btnPowerOn.Click + SendMessageToAVR(Chr(2) & "07A1D" & Chr(3)) + End Sub + + Private Sub btnPowerOff_Click(sender As Object, e As EventArgs) Handles btnPowerOff.Click + SendMessageToAVR(Chr(2) & "07A1E" & Chr(3)) + End Sub + + Private Sub btnPowerZone1On_Click(sender As Object, e As EventArgs) Handles btnPowerZone1On.Click + SendMessageToAVR(Chr(2) & "07E7E" & Chr(3)) + End Sub + + Private Sub btnPowerZone1Off_Click(sender As Object, e As EventArgs) Handles btnPowerZone1Off.Click + SendMessageToAVR(Chr(2) & "07E7F" & Chr(3)) + End Sub + + Private Sub btnPowerZone2On_Click(sender As Object, e As EventArgs) Handles btnPowerZone2On.Click + SendMessageToAVR(Chr(2) & "07EBa" & Chr(3)) + End Sub + Private Sub btnPowerZone2Off_Click(sender As Object, e As EventArgs) Handles btnPowerZone2Off.Click + SendMessageToAVR(Chr(2) & "07EBA" & Chr(3)) + End Sub + + + + ' + ' Other stuff + ' + Private Sub Form1_Resize(sender As Object, e As EventArgs) Handles Me.Resize + Debug.Print("Resize") + End Sub + + Private Sub ComboBoxPorts_SelectedIndexChanged(sender As Object, e As EventArgs) Handles ComboBoxPorts.SelectedIndexChanged + If ComboBoxPorts.Text <> "" Then + ButtonConnect.Enabled = True + Else + ButtonConnect.Enabled = False + End If + End Sub + + + Private Sub ProcessAVRMessage(msg As String) + ' Process incoming messages from AVR here + Debug.Print("Processing AVR message: " & ExpandControlCodes(msg)) + Dim response As String = Mid(msg, 2, Len(msg) - 2) + Debug.Print(" : " & response) + If (Mid(response, 1, 4) = "0026") Then + ' Volume in the next byte + Dim vol As Single = Convert.ToInt16(Mid(response, 5, 2), 16) ' C7 is 0db + If (vol > &HC7) Then + Debug.Print((vol - &HC7) / 2) + Else + Debug.Print((vol - &HC7) / 2.5) + End If + End If + End Sub + +End Class diff --git a/AVR VisBasic/My Project/Application.Designer.vb b/AVR VisBasic/My Project/Application.Designer.vb new file mode 100644 index 0000000..94e79fc --- /dev/null +++ b/AVR VisBasic/My Project/Application.Designer.vb @@ -0,0 +1,45 @@ +'------------------------------------------------------------------------------ +' +' This code was generated by a tool. +' Runtime Version:4.0.30319.42000 +' +' Changes to this file may cause incorrect behavior and will be lost if +' the code is regenerated. +' +'------------------------------------------------------------------------------ + +Option Strict On +Option Explicit On + + +Namespace My + + 'NOTE: This file is auto-generated; do not modify it directly. To make changes, + ' or if you encounter build errors in this file, go to the Project Designer + ' (go to Project Properties or double-click the My Project node in + ' Solution Explorer), and make changes on the Application tab. + ' + Partial Friend Class MyApplication + + _ + Public Sub New() + MyBase.New(Global.Microsoft.VisualBasic.ApplicationServices.AuthenticationMode.Windows) + Me.IsSingleInstance = false + Me.EnableVisualStyles = true + Me.SaveMySettingsOnExit = true + Me.ShutDownStyle = Global.Microsoft.VisualBasic.ApplicationServices.ShutdownMode.AfterMainFormCloses + Me.HighDpiMode = HighDpiMode.DpiUnaware + End Sub + + _ + Protected Overrides Sub OnCreateMainForm() + Me.MainForm = Global.AVRcvrWinSerial.Form1 + End Sub + + _ + Protected Overrides Function OnInitialize(ByVal commandLineArgs As System.Collections.ObjectModel.ReadOnlyCollection(Of String)) As Boolean + Me.MinimumSplashScreenDisplayTime = 0 + Return MyBase.OnInitialize(commandLineArgs) + End Function + End Class +End Namespace diff --git a/AVR VisBasic/My Project/Application.myapp b/AVR VisBasic/My Project/Application.myapp new file mode 100644 index 0000000..0f12f32 --- /dev/null +++ b/AVR VisBasic/My Project/Application.myapp @@ -0,0 +1,10 @@ + + + true + Form1 + false + 0 + true + 0 + true + \ No newline at end of file