Imports System Imports System.IO Imports System.IO.Ports Imports System.IO.Ports.SerialPort Imports System.Text Imports System.Threading Imports System.Windows.Forms.VisualStyles Imports System.Windows.Forms.VisualStyles.VisualStyleElement.ProgressBar Imports FW_Multi_Downloader.My Public Class MainForm Const CNT_PC As Integer = 10 Public cmdProcess(CNT_PC) As Process Public startInfo(CNT_PC) As ProcessStartInfo Public runThread(CNT_PC) As Thread Public comboBoxPort(CNT_PC) As ComboBox Public buttonPortScan(CNT_PC) As Button Public comboBoxTarget(CNT_PC) As ComboBox Public textBoxBinary(CNT_PC) As TextBox Public buttonFile(CNT_PC) As Button Public textBoxCmdWindow(CNT_PC) As TextBox Public buttonDisable(CNT_PC) As Button Public buttonDownload(CNT_PC) As Button Public buttonEnable(CNT_PC) As Button Public executablePath As String = System.AppDomain.CurrentDomain.BaseDirectory() & My.Settings.ExecutableFlashLoader Private Sub MainForm_Load(sender As System.Object, e As System.EventArgs) Handles MyBase.Load SetGroupBoxProcessControls() Initialize() Me.Text = "Flash Loader Util " & My.Settings.ProgramVersion End Sub Private Sub SetGroupBoxProcessControls() comboBoxPort(1) = comboBoxPort01 comboBoxPort(2) = comboBoxPort02 comboBoxPort(3) = comboBoxPort03 comboBoxPort(4) = comboBoxPort04 comboBoxPort(5) = comboBoxPort05 comboBoxPort(6) = comboBoxPort06 comboBoxPort(7) = comboBoxPort07 comboBoxPort(8) = comboBoxPort08 comboBoxPort(9) = comboBoxPort09 comboBoxPort(10) = comboBoxPort10 buttonPortScan(1) = buttonPortScan01 buttonPortScan(2) = buttonPortScan02 buttonPortScan(3) = buttonPortScan03 buttonPortScan(4) = buttonPortScan04 buttonPortScan(5) = buttonPortScan05 buttonPortScan(6) = buttonPortScan06 buttonPortScan(7) = buttonPortScan07 buttonPortScan(8) = buttonPortScan08 buttonPortScan(9) = buttonPortScan09 buttonPortScan(10) = buttonPortScan10 comboBoxTarget(1) = comboBoxTarget01 comboBoxTarget(2) = comboBoxTarget02 comboBoxTarget(3) = comboBoxTarget03 comboBoxTarget(4) = comboBoxTarget04 comboBoxTarget(5) = comboBoxTarget05 comboBoxTarget(6) = comboBoxTarget06 comboBoxTarget(7) = comboBoxTarget07 comboBoxTarget(8) = comboBoxTarget08 comboBoxTarget(9) = comboBoxTarget09 comboBoxTarget(10) = comboBoxTarget10 textBoxBinary(1) = textBoxBinary01 textBoxBinary(2) = textBoxBinary02 textBoxBinary(3) = textBoxBinary03 textBoxBinary(4) = textBoxBinary04 textBoxBinary(5) = textBoxBinary05 textBoxBinary(6) = textBoxBinary06 textBoxBinary(7) = textBoxBinary07 textBoxBinary(8) = textBoxBinary08 textBoxBinary(9) = textBoxBinary09 textBoxBinary(10) = textBoxBinary10 buttonFile(1) = buttonFile01 buttonFile(2) = buttonFile02 buttonFile(3) = buttonFile03 buttonFile(4) = buttonFile04 buttonFile(5) = buttonFile05 buttonFile(6) = buttonFile06 buttonFile(7) = buttonFile07 buttonFile(8) = buttonFile08 buttonFile(9) = buttonFile09 buttonFile(10) = buttonFile10 textBoxCmdWindow(1) = textBoxCmdWindow01 textBoxCmdWindow(2) = textBoxCmdWindow02 textBoxCmdWindow(3) = textBoxCmdWindow03 textBoxCmdWindow(4) = textBoxCmdWindow04 textBoxCmdWindow(5) = textBoxCmdWindow05 textBoxCmdWindow(6) = textBoxCmdWindow06 textBoxCmdWindow(7) = textBoxCmdWindow07 textBoxCmdWindow(8) = textBoxCmdWindow08 textBoxCmdWindow(9) = textBoxCmdWindow09 textBoxCmdWindow(10) = textBoxCmdWindow10 buttonDisable(1) = buttonDisable01 buttonDisable(2) = buttonDisable02 buttonDisable(3) = buttonDisable03 buttonDisable(4) = buttonDisable04 buttonDisable(5) = buttonDisable05 buttonDisable(6) = buttonDisable06 buttonDisable(7) = buttonDisable07 buttonDisable(8) = buttonDisable08 buttonDisable(9) = buttonDisable09 buttonDisable(10) = buttonDisable10 buttonDownload(1) = buttonDownload01 buttonDownload(2) = buttonDownload02 buttonDownload(3) = buttonDownload03 buttonDownload(4) = buttonDownload04 buttonDownload(5) = buttonDownload05 buttonDownload(6) = buttonDownload06 buttonDownload(7) = buttonDownload07 buttonDownload(8) = buttonDownload08 buttonDownload(9) = buttonDownload09 buttonDownload(10) = buttonDownload10 buttonEnable(1) = buttonEnable01 buttonEnable(2) = buttonEnable02 buttonEnable(3) = buttonEnable03 buttonEnable(4) = buttonEnable04 buttonEnable(5) = buttonEnable05 buttonEnable(6) = buttonEnable06 buttonEnable(7) = buttonEnable07 buttonEnable(8) = buttonEnable08 buttonEnable(9) = buttonEnable09 buttonEnable(10) = buttonEnable10 End Sub Private Sub Initialize() SetDefaultSetting() HandleButton() End Sub Private Sub SetDefaultSetting() Dim baudRate() As String = My.Settings.BaudRate.Split("|") comboBoxBaudRate.Items.AddRange(baudRate) comboBoxBaudRate.SelectedIndex = 0 LoadComportName(0) Dim target() As String = My.Settings.Target.Split("|") For i = 1 To 10 comboBoxTarget(i).Items.AddRange(target) Next comboBoxTargetDefault.Items.AddRange(target) comboBoxTargetDefault.SelectedIndex = 0 End Sub Private Sub HandleButton() For i = 1 To 10 If comboBoxPort(i).SelectedIndex > -1 And comboBoxBaudRate.SelectedIndex > -1 And comboBoxTarget(i).SelectedIndex > -1 Then buttonDisable(i).Enabled = True buttonEnable(i).Enabled = True If textBoxBinary(i).Text.Trim.Length > 0 Then buttonDownload(i).Enabled = True Else buttonDownload(i).Enabled = False End If Else buttonDisable(i).Enabled = False buttonDownload(i).Enabled = False buttonEnable(i).Enabled = False End If Next End Sub Private Sub LoadComportName(i As Int16) Try Dim portName() As String = SerialPort.GetPortNames If i = 0 Then For j = 1 To 10 comboBoxPort(j).Items.Clear() comboBoxPort(j).Items.AddRange(portName) comboBoxPort(j).Text = "PRESS!" Next Else comboBoxPort(i).Items.Clear() comboBoxPort(i).Items.AddRange(portName) comboBoxPort(i).Text = "PRESS!" End If Catch ex As Exception MsgBox("COM 포트 에러" & vbCrLf & "", vbOK + vbCritical, Me.Text) End Try End Sub Private Function Openfile() As String Dim ofd As OpenFileDialog = New OpenFileDialog ofd.Title = "바이너리 파일 불러오기" ofd.FileName = "" ofd.Filter = "바이너리 파일(*.bin) | *.bin" Dim dr As DialogResult = ofd.ShowDialog If dr = DialogResult.OK Then Return ofd.FileName End If Return "fail" End Function Private Sub ComboBoxTargetDefault_SelectedIndexChanged(sender As Object, e As EventArgs) Handles comboBoxTargetDefault.SelectedIndexChanged For i = 1 To 10 comboBoxTarget(i).SelectedIndex = comboBoxTargetDefault.SelectedIndex Next HandleButton() End Sub Private Sub ButtonFileDefault_Click(sender As Object, e As EventArgs) Handles buttonFileDefault.Click Dim fileAddress As String = Openfile() If fileAddress <> "fail" Then textBoxBinaryDefault.Text = fileAddress End If HandleButton() End Sub Private Sub TextBoxBinaryDefault_TextChanged(sender As Object, e As EventArgs) Handles textBoxBinaryDefault.TextChanged If textBoxBinaryDefault.Text.Length > 0 Then For i = 1 To 10 textBoxBinary(i).Text = textBoxBinaryDefault.Text Next End If HandleButton() End Sub Private Sub buttonDisableAll_Click(sender As Object, e As EventArgs) Handles buttonDisableAll.Click For i = 1 To 10 Dim processNumber As Int16 = i If buttonDisable(processNumber).Enabled = True Then runThread(processNumber) = New Thread(Sub() RunDisableReadProtection(processNumber)) runThread(processNumber).Start() End If Next End Sub Private Sub ButtonDownloadAll_Click(sender As Object, e As EventArgs) Handles buttonDownloadAll.Click For i = 1 To 10 Dim processNumber As Int16 = i If buttonDownload(processNumber).Enabled = True Then runThread(processNumber) = New Thread(Sub() RunDownload(processNumber)) runThread(processNumber).Start() End If Next End Sub Private Sub buttonEnableAll_Click(sender As Object, e As EventArgs) Handles buttonEnableAll.Click For i = 1 To 10 Dim processNumber As Int16 = i If buttonEnable(processNumber).Enabled = True Then runThread(processNumber) = New Thread(Sub() RunEnableReadProtection(processNumber)) runThread(processNumber).Start() End If Next End Sub Private Sub ButtonPortScan_Click(sender As Object, e As EventArgs) _ Handles buttonPortScan01.Click, buttonPortScan02.Click, buttonPortScan03.Click, buttonPortScan04.Click, buttonPortScan05.Click, buttonPortScan06.Click, buttonPortScan07.Click, buttonPortScan08.Click, buttonPortScan09.Click, buttonPortScan10.Click Dim clickedButton As Button = TryCast(sender, Button) Dim processNumber As Short = clickedButton.Parent.TabIndex LoadComportName(processNumber) End Sub Private Sub ComboBoxPort_SelectedIndexChanged(sender As Object, e As EventArgs) _ Handles comboBoxPort01.SelectedIndexChanged, comboBoxPort02.SelectedIndexChanged, comboBoxPort03.SelectedIndexChanged, comboBoxPort04.SelectedIndexChanged, comboBoxPort05.SelectedIndexChanged, comboBoxPort06.SelectedIndexChanged, comboBoxPort07.SelectedIndexChanged, comboBoxPort08.SelectedIndexChanged, comboBoxPort09.SelectedIndexChanged, comboBoxPort10.SelectedIndexChanged Dim clickedComboBox As ComboBox = TryCast(sender, ComboBox) Dim processNumber As Short = clickedComboBox.Parent.TabIndex For i = 1 To 10 If comboBoxPort(i).Text <> "PRESS!" And comboBoxPort(i).Text = clickedComboBox.Text And i <> processNumber Then MsgBox("Process" & i & "에 선택된 Port Name 입니다." & vbCrLf & "Port Name 을 다시 선택하세요.", vbCritical, Me.Text) clickedComboBox.SelectedIndex = -1 clickedComboBox.Text = "PRESS!" Return End If Next HandleButton() End Sub Private Sub ComboBoxTarget_SelectedIndexChanged(sender As Object, e As EventArgs) _ Handles comboBoxTarget01.SelectedIndexChanged, comboBoxTarget02.SelectedIndexChanged, comboBoxTarget03.SelectedIndexChanged, comboBoxTarget04.SelectedIndexChanged, comboBoxTarget05.SelectedIndexChanged, comboBoxTarget06.SelectedIndexChanged, comboBoxTarget07.SelectedIndexChanged, comboBoxTarget08.SelectedIndexChanged, comboBoxTarget09.SelectedIndexChanged, comboBoxTarget10.SelectedIndexChanged Dim clickedComboBox As ComboBox = TryCast(sender, ComboBox) Dim processNumber As Short = clickedComboBox.Parent.TabIndex comboBoxTarget(processNumber).SelectedIndex = clickedComboBox.SelectedIndex HandleButton() End Sub Private Sub ButtonFile_Click(sender As Object, e As EventArgs) _ Handles buttonFile01.Click, buttonFile02.Click, buttonFile03.Click, buttonFile04.Click, buttonFile05.Click, buttonFile06.Click, buttonFile07.Click, buttonFile08.Click, buttonFile09.Click, buttonFile10.Click Dim fileAddress As String = Openfile() If fileAddress <> "fail" Then Dim clickedButton As Button = TryCast(sender, Button) Dim processNumber As Short = clickedButton.Parent.TabIndex textBoxBinary(processNumber).Text = fileAddress End If HandleButton() End Sub Private Sub ButtonDisable_Click(sender As Object, e As EventArgs) _ Handles buttonDisable01.Click, buttonDisable02.Click, buttonDisable03.Click, buttonDisable04.Click, buttonDisable05.Click, buttonDisable06.Click, buttonDisable07.Click, buttonDisable08.Click, buttonDisable09.Click, buttonDisable10.Click Dim clickedButton As Button = TryCast(sender, Button) Dim processNumber As Short = clickedButton.Parent.TabIndex runThread(processNumber) = New Thread(Sub() RunDisableReadProtection(processNumber)) runThread(processNumber).Start() End Sub Private Sub ButtonDownload_Click(sender As System.Object, e As System.EventArgs) _ Handles buttonDownload01.Click, buttonDownload02.Click, buttonDownload03.Click, buttonDownload04.Click, buttonDownload05.Click, buttonDownload06.Click, buttonDownload07.Click, buttonDownload08.Click, buttonDownload09.Click, buttonDownload10.Click Dim clickedButton As Button = TryCast(sender, Button) Dim processNumber As Short = clickedButton.Parent.TabIndex runThread(processNumber) = New Thread(Sub() RunDownload(processNumber)) runThread(processNumber).Start() End Sub Private Sub ButtonEnable_Click(sender As Object, e As EventArgs) _ Handles buttonEnable01.Click, buttonEnable02.Click, buttonEnable03.Click, buttonEnable04.Click, buttonEnable05.Click, buttonEnable06.Click, buttonEnable07.Click, buttonEnable08.Click, buttonEnable09.Click, buttonEnable10.Click Dim clickedButton As Button = TryCast(sender, Button) Dim processNumber As Short = clickedButton.Parent.TabIndex runThread(processNumber) = New Thread(Sub() RunEnableReadProtection(processNumber)) runThread(processNumber).Start() End Sub Private Sub RunDisableReadProtection(i As Int16) Dim port As String = GetPort(i) Dim baudRate As String = GetBaudRate(i) Dim target As String = GetTarget(i) Dim binary As String = getBinary(i) Try Dim arguments As String = "-c --pn " & port & " --br " & baudRate & " --db 8 --pr Even -i " & target & " -p --drp" Dim cmdProcess As New Process() Dim startInfo As New ProcessStartInfo() startInfo.FileName = """" & executablePath & """" startInfo.Arguments = arguments 'startInfo.UseShellExecute = False 'startInfo.RedirectStandardOutput = True 'startInfo.CreateNoWindow = True startInfo.UseShellExecute = True startInfo.RedirectStandardOutput = False startInfo.CreateNoWindow = False ClearTextBoxCmdWindow(i) UpdateTextBoxCmdWindow(i, startInfo.FileName) UpdateTextBoxCmdWindow(i, Environment.NewLine & startInfo.Arguments) cmdProcess.StartInfo = startInfo cmdProcess.Start() UpdateTextBoxCmdWindow(i, Environment.NewLine & Environment.NewLine & "Disabling Read Protection...") ' 표준 출력 스트림 리더 가져오기 'Dim reader As StreamReader = cmdProcess.StandardOutput 'Dim line As String '' 프로세스가 끝날 때까지 또는 스트림의 끝에 도달할 때까지 한 줄씩 읽기 'While Not reader.EndOfStream ' line = reader.ReadLine().Trim ' ' 여기서 읽어온 한 줄(line)을 처리합니다 (예: Console.WriteLine(line) 또는 UI 업데이트) ' UpdateTextBoxCmdWindow(i, Environment.NewLine & line) 'End While cmdProcess.WaitForExit() UpdateTextBoxCmdWindow(i, Environment.NewLine & "Disable Read Protection finished.") Catch ex As Exception MsgBox(ex.Message) End Try End Sub Private Sub RunDownload(i As Int16) Dim port As String = GetPort(i) Dim baudRate As String = GetBaudRate(i) Dim target As String = GetTarget(i) Dim binary As String = getBinary(i) Try Dim arguments As String = "-c --pn " & port & " --br " & baudRate & " -i " & target & " -e --all -d --a 08000000 --fn " & binary & " -p --drp" Dim cmdProcess As New Process() Dim startInfo As New ProcessStartInfo() startInfo.FileName = """" & executablePath & """" startInfo.Arguments = arguments startInfo.UseShellExecute = False startInfo.RedirectStandardOutput = True startInfo.CreateNoWindow = True ClearTextBoxCmdWindow(i) UpdateTextBoxCmdWindow(i, startInfo.FileName) UpdateTextBoxCmdWindow(i, Environment.NewLine & startInfo.Arguments) cmdProcess.StartInfo = startInfo cmdProcess.Start() UpdateTextBoxCmdWindow(i, Environment.NewLine & Environment.NewLine & "STARTING...") ' 표준 출력 스트림 리더 가져오기 Dim reader As StreamReader = cmdProcess.StandardOutput Dim line As String ' 프로세스가 끝날 때까지 또는 스트림의 끝에 도달할 때까지 한 줄씩 읽기 While Not reader.EndOfStream line = reader.ReadLine().Trim ' 여기서 읽어온 한 줄(line)을 처리합니다 (예: Console.WriteLine(line) 또는 UI 업데이트) UpdateTextBoxCmdWindow(i, Environment.NewLine & line) End While cmdProcess.WaitForExit() UpdateTextBoxCmdWindow(i, Environment.NewLine & "Download finished.") Catch ex As Exception MsgBox(ex.Message) End Try End Sub Private Sub RunEnableReadProtection(i As Int16) Dim port As String = GetPort(i) Dim baudRate As String = GetBaudRate(i) Dim target As String = GetTarget(i) Dim binary As String = getBinary(i) Try Dim arguments As String = "-c --pn " & port & " --br " & baudRate & " --db 8 --pr Even -i " & target & " -p --erp" Dim cmdProcess As New Process() Dim startInfo As New ProcessStartInfo() startInfo.FileName = """" & executablePath & """" startInfo.Arguments = arguments startInfo.UseShellExecute = False startInfo.RedirectStandardOutput = True startInfo.CreateNoWindow = True ClearTextBoxCmdWindow(i) UpdateTextBoxCmdWindow(i, startInfo.FileName) UpdateTextBoxCmdWindow(i, Environment.NewLine & startInfo.Arguments) cmdProcess.StartInfo = startInfo cmdProcess.Start() UpdateTextBoxCmdWindow(i, Environment.NewLine & Environment.NewLine & "Enabling Read Protection...") ' 표준 출력 스트림 리더 가져오기 Dim reader As StreamReader = cmdProcess.StandardOutput Dim line As String ' 프로세스가 끝날 때까지 또는 스트림의 끝에 도달할 때까지 한 줄씩 읽기 While Not reader.EndOfStream line = reader.ReadLine().Trim ' 여기서 읽어온 한 줄(line)을 처리합니다 (예: Console.WriteLine(line) 또는 UI 업데이트) UpdateTextBoxCmdWindow(i, Environment.NewLine & line) End While cmdProcess.WaitForExit() UpdateTextBoxCmdWindow(i, Environment.NewLine & "Enable Read Protection finished.") Catch ex As Exception MsgBox(ex.Message) End Try End Sub Private Function GetPort(i As Int16) As String Dim port As String If comboBoxPort(i).InvokeRequired Then comboBoxPort(i).Invoke(Sub() port = comboBoxPort(i).Text.Replace("COM", "") End Sub) Else port = comboBoxPort(i).Text.Replace("COM", "") End If Return port End Function Private Function GetBaudRate(i As Int16) As String Dim baudRate As String If comboBoxBaudRate.InvokeRequired Then comboBoxBaudRate.Invoke(Sub() BaudRate = comboBoxBaudRate.Text End Sub) Else BaudRate = comboBoxBaudRate.Text End If Return baudRate End Function Private Function GetTarget(i As Int16) As String Dim target As String If comboBoxTarget(i).InvokeRequired Then comboBoxTarget(i).Invoke(Sub() target = comboBoxTarget(i).Text End Sub) Else target = comboBoxTarget(i).Text End If Return target End Function Private Function getBinary(i As Int16) As String Dim binary As String If textBoxBinary(i).InvokeRequired Then textBoxBinary(i).Invoke(Sub() binary = """" & textBoxBinary(i).Text & """" End Sub) Else binary = """" & textBoxBinary(i).Text & """" End If Return binary End Function Private Sub UpdateTextBoxCmdWindow(i As Int16, state As String) If textBoxCmdWindow(i).InvokeRequired Then textBoxCmdWindow(i).Invoke(Sub() textBoxCmdWindow(i).AppendText(state) End Sub) Else textBoxCmdWindow(i).AppendText(state) End If End Sub Private Sub ClearTextBoxCmdWindow(i As Int16) If textBoxCmdWindow(i).InvokeRequired Then textBoxCmdWindow(i).Invoke(Sub() textBoxCmdWindow(i).Clear() End Sub) Else textBoxCmdWindow(i).Clear() End If End Sub Private Sub buttonClean_Click(sender As Object, e As EventArgs) Handles buttonClean.Click Initialize() For i = 1 To 10 ClearTextBoxCmdWindow(i) Next End Sub End Class