|
@@ -1,6 +1,9 @@
|
|
|
-using MV485.db;
|
|
|
+using Microsoft.Win32;
|
|
|
+using MV485.db;
|
|
|
+using MV485.Dlg;
|
|
|
using MV485.helper;
|
|
|
using MV485.model;
|
|
|
+using MV485.util;
|
|
|
using System;
|
|
|
using System.Collections.Generic;
|
|
|
using System.Collections.ObjectModel;
|
|
@@ -34,8 +37,10 @@ namespace MV485.uc
|
|
|
|
|
|
public int[] PageSizeOptions = new int[] { 10, 20, 50 };
|
|
|
|
|
|
- private DeviceUpgrade _deviceUpgrade;
|
|
|
- private Progress<string> _progress;
|
|
|
+ //private DeviceUpgrade _deviceUpgrade;
|
|
|
+ //private Progress<string> _progress;
|
|
|
+
|
|
|
+ private RWRunConfig _rwRunConfig;
|
|
|
|
|
|
private static readonly string LogFilePath =
|
|
|
Path.Combine(AppDomain.CurrentDomain.BaseDirectory, "Documents", "deviceUpgrade_log.txt");
|
|
@@ -119,11 +124,18 @@ namespace MV485.uc
|
|
|
InitLoadItemsAndView(); //加载数据项及初始化页面内容
|
|
|
LoadConfigLog();
|
|
|
|
|
|
- _deviceUpgrade = new DeviceUpgrade();
|
|
|
- _progress = new Progress<string>(msg =>
|
|
|
+ _rwRunConfig = new RWRunConfig();
|
|
|
+ _rwRunConfig.RWLog += (message) =>{
|
|
|
+ AppendLog(message);
|
|
|
+ };
|
|
|
+ _rwRunConfig.SerialConnected += (blConnected, portName, baudrate, address) =>
|
|
|
{
|
|
|
- AppendLog(msg);
|
|
|
- });
|
|
|
+
|
|
|
+ };
|
|
|
+ _rwRunConfig.SerialStatusChanged += (blStatusChanged, portName, baudrate, address) =>
|
|
|
+ {
|
|
|
+
|
|
|
+ };
|
|
|
}
|
|
|
|
|
|
//读取并加载日志
|
|
@@ -181,7 +193,16 @@ namespace MV485.uc
|
|
|
InitDataView();
|
|
|
|
|
|
var upgradeFile = ConfigManager.Instance.GetConfigValue(ConfigKey.UpgradeFile, "");
|
|
|
- txtNewFireware.Text = upgradeFile;
|
|
|
+ txtNewFirewarePath.Text = upgradeFile;
|
|
|
+ txtNewFireware.Text = "";
|
|
|
+ if (File.Exists(upgradeFile))
|
|
|
+ {
|
|
|
+ string fileNameOnly = Path.GetFileName(upgradeFile);
|
|
|
+ if(Tools.TryParseFirmwareName(fileNameOnly,out string version))
|
|
|
+ {
|
|
|
+ txtNewFireware.Text = version;
|
|
|
+ }
|
|
|
+ }
|
|
|
}
|
|
|
|
|
|
private void InitDataView()
|
|
@@ -268,19 +289,253 @@ namespace MV485.uc
|
|
|
}
|
|
|
}
|
|
|
|
|
|
- private void BtnReadFireware_Click(object sender, RoutedEventArgs e)
|
|
|
+ //读取设备版本的相关信息
|
|
|
+ private async void BtnReadFireware_Click(object sender, RoutedEventArgs e)
|
|
|
{
|
|
|
+ if (!GetSerialParameter(out string portName, out byte devId, out int baudrate))
|
|
|
+ {
|
|
|
+ return;
|
|
|
+ }
|
|
|
+ InitDataView();
|
|
|
+
|
|
|
+ string titleInfo = "正在读取抄表器版本相关数据";
|
|
|
+ WaitWindow waitWindow = new WaitWindow(titleInfo)
|
|
|
+ {
|
|
|
+ Owner = Application.Current.MainWindow,
|
|
|
+ WindowStartupLocation = WindowStartupLocation.CenterOwner
|
|
|
+ };
|
|
|
+ waitWindow.Show();
|
|
|
+
|
|
|
+ try
|
|
|
+ {
|
|
|
+ string deviceSn = "";
|
|
|
+ string fireware ="";
|
|
|
+ bool blRead = await Task.Run(() =>
|
|
|
+ {
|
|
|
+ return _rwRunConfig.ReadFireware(portName, baudrate, devId,out deviceSn,out fireware);
|
|
|
+ });
|
|
|
+ AppendLog($"读取抄表器版本相关数据{(blRead ? "成功" : "失败")}");
|
|
|
+ if (blRead)
|
|
|
+ {
|
|
|
+ txtDeviceSn.Text = deviceSn;
|
|
|
+ txtOldFireware.Text = fireware;
|
|
|
+ }
|
|
|
+ else
|
|
|
+ {
|
|
|
+ MessageBox.Show(Application.Current.MainWindow, _rwRunConfig.GetLastError(), "错误",
|
|
|
+ MessageBoxButton.OK, MessageBoxImage.Error);
|
|
|
+ }
|
|
|
+ }
|
|
|
+ catch { }
|
|
|
+ finally
|
|
|
+ {
|
|
|
+ waitWindow.Close();
|
|
|
+ }
|
|
|
|
|
|
}
|
|
|
|
|
|
- private void BtnDeviceUpgrade_Click(object sender, RoutedEventArgs e)
|
|
|
+ private async void BtnDeviceUpgrade_Click(object sender, RoutedEventArgs e)
|
|
|
{
|
|
|
+ //判断串口参数是否正确
|
|
|
+ if (!GetSerialParameter(out string portName, out byte devId, out int baudrate))
|
|
|
+ {
|
|
|
+ return;
|
|
|
+ }
|
|
|
+
|
|
|
+ //判断是否读取了deviceSn,设备的当前版本
|
|
|
+ if(string.IsNullOrEmpty(txtDeviceSn.Text) || string.IsNullOrEmpty(txtOldFireware.Text))
|
|
|
+ {
|
|
|
+ MessageBox.Show(Application.Current.MainWindow,
|
|
|
+ $"请先读取设备的当前版本", "提示", MessageBoxButton.OK, MessageBoxImage.Information);
|
|
|
+ return;
|
|
|
+ }
|
|
|
+ //判断新的版本是否存在
|
|
|
+ if (string.IsNullOrEmpty(txtNewFireware.Text) || string.IsNullOrEmpty(txtNewFirewarePath.Text))
|
|
|
+ {
|
|
|
+ MessageBox.Show(Application.Current.MainWindow,
|
|
|
+ $"请选择要写入的新固件版本", "提示", MessageBoxButton.OK, MessageBoxImage.Information);
|
|
|
+ return;
|
|
|
+ }
|
|
|
+
|
|
|
+ string filePath = txtNewFirewarePath.Text.Trim();
|
|
|
+ //判断新的固件文件是否存在
|
|
|
+ if (!File.Exists(filePath))
|
|
|
+ {
|
|
|
+ MessageBox.Show(Application.Current.MainWindow,
|
|
|
+ "新固件版本文件不存在", "提示", MessageBoxButton.OK, MessageBoxImage.Information);
|
|
|
+ return;
|
|
|
+ }
|
|
|
+
|
|
|
+
|
|
|
+ //读取新固件的大小及数据的CRC32值
|
|
|
+
|
|
|
+ //计算CRC32的值
|
|
|
+ byte[] fileData = File.ReadAllBytes(filePath);
|
|
|
+ uint fileLen = (uint)fileData.Length;
|
|
|
+ if (fileLen > 1024 * 1024)
|
|
|
+ {
|
|
|
+ MessageBox.Show(Application.Current.MainWindow,
|
|
|
+ "新固件版本文件大小不合理", "提示", MessageBoxButton.OK, MessageBoxImage.Information);
|
|
|
+ return;
|
|
|
+ }
|
|
|
+
|
|
|
+ uint fileCRC32 = CRC32Helper.Crc32(fileData, fileData.Length);
|
|
|
+
|
|
|
+ AppendLog($"fileSize={fileLen},fileCRC32={fileCRC32}");
|
|
|
+
|
|
|
+ //开始升级
|
|
|
+ //1.先向设备写入(通知)升级包文件的长度及CRC32的值
|
|
|
+ string titleInfo = "开始写入升级包的信息";
|
|
|
+ WaitWindow waitWindow = new WaitWindow(titleInfo)
|
|
|
+ {
|
|
|
+ Owner = Application.Current.MainWindow,
|
|
|
+ WindowStartupLocation = WindowStartupLocation.CenterOwner
|
|
|
+ };
|
|
|
+ waitWindow.Show();
|
|
|
+
|
|
|
+ try
|
|
|
+ {
|
|
|
+ //开始先设备写入文件信息
|
|
|
+ bool blWriteInfo = await Task.Run(() =>
|
|
|
+ {
|
|
|
+ return _rwRunConfig.WrtieUpgradeInfo(portName, baudrate, devId, fileLen, fileCRC32);
|
|
|
+ });
|
|
|
+ if (!blWriteInfo)
|
|
|
+ {
|
|
|
+ MessageBox.Show(Application.Current.MainWindow, "向设备写入固件信息失败", "错误",
|
|
|
+ MessageBoxButton.OK, MessageBoxImage.Error);
|
|
|
+ return;
|
|
|
+ }
|
|
|
+
|
|
|
+ //开始通信
|
|
|
+ DeviceUpgrade deviceUpgrade = new DeviceUpgrade();
|
|
|
+ Progress<string> progress = new Progress<string>(msg =>
|
|
|
+ {
|
|
|
+ AppendLog(msg);
|
|
|
+ });
|
|
|
+ string percentText = "";
|
|
|
+ //$"已发送:{packNum}/{totalPacks}({(double)packNum / totalPacks:P1})";
|
|
|
+ deviceUpgrade.OnProgress += (packNum, totalPacks) =>
|
|
|
+ {
|
|
|
+ waitWindow.Dispatcher.BeginInvoke(new Action(() =>
|
|
|
+ {
|
|
|
+ //percentText = $"已发送:{packNum}/{totalPacks}({(double)packNum / totalPacks:P1})";
|
|
|
+ percentText = $"已下载:{(double)packNum / totalPacks:P2}";
|
|
|
+ waitWindow.TitleInfo = percentText;
|
|
|
+ //$"已发送{packNum}/{totalPacks}";
|
|
|
+ }));
|
|
|
+ //waitWindow.Dispatcher.InvokeAsync(() =>
|
|
|
+ //{
|
|
|
+ // waitWindow.TitleInfo = $"已发送{packNum}/{totalPacks}";
|
|
|
+ //});
|
|
|
+ };
|
|
|
+
|
|
|
+ bool blSend = await deviceUpgrade.StartSendFileAsync(progress, portName, baudrate, fileData);
|
|
|
+
|
|
|
+ if (blSend)
|
|
|
+ {
|
|
|
+ //提示继续等待设备重启,并验证升级是否成功
|
|
|
+ //MessageBox.Show(Application.Current.MainWindow,"向设备写入新固件成功,")
|
|
|
+
|
|
|
+ MessageBoxResult result = MessageBox.Show("向设备写入新固件成功,设备即将重启。\n是否等待自动验证重启后的版本是否正确",
|
|
|
+ "确认", MessageBoxButton.YesNo, MessageBoxImage.Question);
|
|
|
+
|
|
|
+ if (result != MessageBoxResult.No) return;
|
|
|
+
|
|
|
+ //继续等待失败是否成功
|
|
|
+ titleInfo = $"正在等待验证重启后版本是否正确(1~2分钟)";
|
|
|
+ waitWindow.TitleInfo = titleInfo;
|
|
|
+
|
|
|
+ //进入等待线程
|
|
|
+ //开始及时
|
|
|
+ string chDeviceSn="";
|
|
|
+ string chFireware="";
|
|
|
+ bool blWait = await Task.Run(() =>
|
|
|
+ {
|
|
|
+ int timeout = 2 * 60 * 1000; //等待2分钟
|
|
|
+ while(timeout > 0)
|
|
|
+ {
|
|
|
+ //读取版本信息
|
|
|
+ bool blReadFireware = _rwRunConfig.ReadFireware(portName, baudrate, devId, out chDeviceSn, out chFireware);
|
|
|
+ //if (blReadFireware)
|
|
|
+ //{
|
|
|
+ //return fireware.Equals(txtNewFireware.Text);
|
|
|
+ // return blReadFireware;
|
|
|
+ //}
|
|
|
+ if (blReadFireware) return true;
|
|
|
+ Task.Delay(1000);
|
|
|
+ timeout -= 1000;
|
|
|
+ }
|
|
|
+ return false;
|
|
|
+ });
|
|
|
+
|
|
|
+ if (blWait)
|
|
|
+ {
|
|
|
+ bool blSame = chDeviceSn.Equals(txtDeviceSn.Text) && chFireware.Equals(txtNewFireware.Text);
|
|
|
+ MessageBox.Show(Application.Current.MainWindow, $"验证{(blSame ? "一致" : "不一致")}", "提示",
|
|
|
+ MessageBoxButton.OK, MessageBoxImage.Information);
|
|
|
+ }
|
|
|
+ else
|
|
|
+ {
|
|
|
+ MessageBox.Show(Application.Current.MainWindow, "等待验证超时", "警告",
|
|
|
+ MessageBoxButton.OK, MessageBoxImage.Warning);
|
|
|
+ }
|
|
|
+ }
|
|
|
+ else
|
|
|
+ {
|
|
|
+ MessageBox.Show(Application.Current.MainWindow, "向设备写入新固件时失败", "错误",
|
|
|
+ MessageBoxButton.OK, MessageBoxImage.Error);
|
|
|
+ }
|
|
|
+ }
|
|
|
+ catch { }
|
|
|
+ finally
|
|
|
+ {
|
|
|
+ waitWindow.Close();
|
|
|
+ }
|
|
|
|
|
|
}
|
|
|
|
|
|
- private void BtnClearUpgradeHis_Click(object sender, RoutedEventArgs e)
|
|
|
+ private async void BtnClearUpgradeHis_Click(object sender, RoutedEventArgs e)
|
|
|
{
|
|
|
+ if (SelectedHis == null) return;
|
|
|
+
|
|
|
+ MessageBoxResult result = MessageBox.Show("确定要清空所有数据吗?", "确认", MessageBoxButton.YesNo, MessageBoxImage.Question);
|
|
|
+ if (result != MessageBoxResult.Yes) return;
|
|
|
|
|
|
+
|
|
|
+ string titleInfo = "正在清空数据,请稍后...";
|
|
|
+ WaitWindow waitWindow = new WaitWindow(titleInfo)
|
|
|
+ {
|
|
|
+ Owner = Application.Current.MainWindow,
|
|
|
+ WindowStartupLocation = WindowStartupLocation.CenterOwner
|
|
|
+ };
|
|
|
+ waitWindow.Show();
|
|
|
+
|
|
|
+ try
|
|
|
+ {
|
|
|
+
|
|
|
+ bool deleteSuccess = false;
|
|
|
+ await Task.Run(() =>
|
|
|
+ {
|
|
|
+ deleteSuccess = DBUpgradeHis.DeleteUpgradeAllHis();
|
|
|
+ });
|
|
|
+
|
|
|
+ if (deleteSuccess)
|
|
|
+ {
|
|
|
+ DetailPage.InitDefaulValue();
|
|
|
+ _hisList.Clear();
|
|
|
+ HisRecords = 0;
|
|
|
+ }
|
|
|
+ }
|
|
|
+ catch (Exception ex)
|
|
|
+ {
|
|
|
+ MessageBox.Show(Application.Current.MainWindow, $"删除失败:{ex.Message}", "错误",
|
|
|
+ MessageBoxButton.OK, MessageBoxImage.Error);
|
|
|
+ }
|
|
|
+ finally
|
|
|
+ {
|
|
|
+ waitWindow.Close();
|
|
|
+ }
|
|
|
}
|
|
|
|
|
|
private void BtnRefreshUpgradeHis_Click(object sender, RoutedEventArgs e)
|
|
@@ -289,30 +544,50 @@ namespace MV485.uc
|
|
|
LoadHisList();
|
|
|
}
|
|
|
|
|
|
- private void BtnDelUpgradeHis_Click(object sender, RoutedEventArgs e)
|
|
|
- {
|
|
|
-
|
|
|
- }
|
|
|
-
|
|
|
|
|
|
private void BtnClearLog_Click(object sender, RoutedEventArgs e)
|
|
|
{
|
|
|
-
|
|
|
+ _logEntries.Clear();
|
|
|
+ lvLogs.ItemsSource = null;
|
|
|
+ File.WriteAllText(LogFilePath, "");
|
|
|
+ AppendLog("日志已清空");
|
|
|
}
|
|
|
|
|
|
private void UserControl_Unloaded(object sender, RoutedEventArgs e)
|
|
|
{
|
|
|
|
|
|
}
|
|
|
+ private void BtnDelUpgradeHis_Click(object sender, RoutedEventArgs e)
|
|
|
+ {
|
|
|
+ Button button = sender as Button;
|
|
|
+ if (button == null) return;
|
|
|
+
|
|
|
+ DataGridRow row = Tools.FindAncestor<DataGridRow>(button);
|
|
|
+ if (row == null) return;
|
|
|
+
|
|
|
+ //获取当前行绑定的数据项
|
|
|
+ TUpgradeHis his = row.Item as TUpgradeHis;
|
|
|
+ DeleteHis(his);
|
|
|
+ }
|
|
|
|
|
|
private void MiDeleteHis_Click(object sender, RoutedEventArgs e)
|
|
|
{
|
|
|
-
|
|
|
+ if (SelectedHis == null) return;
|
|
|
+ DeleteHis(SelectedHis);
|
|
|
}
|
|
|
|
|
|
private void MenuItem_CopyMessage_Click(object sender, RoutedEventArgs e)
|
|
|
{
|
|
|
-
|
|
|
+ if (lvLogs.SelectedItem is LogEntry logEntry)
|
|
|
+ {
|
|
|
+ if (!LicenseMana.mIsLicensed)
|
|
|
+ {
|
|
|
+ MessageBox.Show(Application.Current.MainWindow, "软件未注册,不能使用此功能。", "提示",
|
|
|
+ MessageBoxButton.OK, MessageBoxImage.Information);
|
|
|
+ return;
|
|
|
+ }
|
|
|
+ Clipboard.SetText(logEntry.Message);
|
|
|
+ }
|
|
|
}
|
|
|
|
|
|
private void CmbPortNames_SelectionChanged(object sender, SelectionChangedEventArgs e)
|
|
@@ -322,27 +597,53 @@ namespace MV485.uc
|
|
|
|
|
|
private void BtnDataFirstPage_Click(object sender, RoutedEventArgs e)
|
|
|
{
|
|
|
-
|
|
|
+ if (DetailPage.PageNumber > 1)
|
|
|
+ {
|
|
|
+ DetailPage.PageNumber = 1;
|
|
|
+ LoadHisList();
|
|
|
+ }
|
|
|
}
|
|
|
|
|
|
private void BtnDataPrePage_Click(object sender, RoutedEventArgs e)
|
|
|
{
|
|
|
-
|
|
|
+ if (DetailPage.PageNumber > 1)
|
|
|
+ {
|
|
|
+ DetailPage.PageNumber -= 1;
|
|
|
+ LoadHisList();
|
|
|
+ }
|
|
|
}
|
|
|
|
|
|
private void BtnDataNextPage_Click(object sender, RoutedEventArgs e)
|
|
|
{
|
|
|
-
|
|
|
+ if (DetailPage.PageNumber < DetailPage.PageCount)
|
|
|
+ {
|
|
|
+ DetailPage.PageNumber += 1;
|
|
|
+ LoadHisList();
|
|
|
+ }
|
|
|
}
|
|
|
|
|
|
private void BtnDataLastPage_Click(object sender, RoutedEventArgs e)
|
|
|
{
|
|
|
-
|
|
|
+ if (DetailPage.PageNumber < DetailPage.PageCount)
|
|
|
+ {
|
|
|
+ DetailPage.PageNumber = DetailPage.PageCount;
|
|
|
+ LoadHisList();
|
|
|
+ }
|
|
|
}
|
|
|
|
|
|
private void BtnDataSpeciPage_Click(object sender, RoutedEventArgs e)
|
|
|
{
|
|
|
+ if (!int.TryParse(txtDataPageNumber.Text, out int pageNumber))
|
|
|
+ {
|
|
|
+ return;
|
|
|
+ }
|
|
|
|
|
|
+ if (pageNumber != DetailPage.PageNumber &&
|
|
|
+ pageNumber > 0 && pageNumber <= DetailPage.PageCount)
|
|
|
+ {
|
|
|
+ DetailPage.PageNumber = pageNumber;
|
|
|
+ LoadHisList();
|
|
|
+ }
|
|
|
}
|
|
|
|
|
|
private void AppendLog(string message)
|
|
@@ -365,6 +666,39 @@ namespace MV485.uc
|
|
|
});
|
|
|
}
|
|
|
|
|
|
+ //增加升级版本的历史
|
|
|
+ private async Task AddUpgradeItem(TUpgradeHis his)
|
|
|
+ {
|
|
|
+ if (his == null) return;
|
|
|
+
|
|
|
+ bool blInsert = await Task.Run(() =>
|
|
|
+ {
|
|
|
+ return DBUpgradeHis.InsertUpgradeHis(his);
|
|
|
+ });
|
|
|
+
|
|
|
+ if (!blInsert) return;
|
|
|
+
|
|
|
+ await Dispatcher.InvokeAsync( ()=>
|
|
|
+ {
|
|
|
+ _hisList.Insert(0, his);
|
|
|
+ HisRecords++;
|
|
|
+ DetailPage.PageCount = (int)Math.Ceiling(((double)HisRecords / DetailPage.PageSize));
|
|
|
+
|
|
|
+ if (_hisList.Count > DetailPage.PageSize)
|
|
|
+ {
|
|
|
+ for (int i = _hisList.Count - 1; i >= DetailPage.PageSize; i--)
|
|
|
+ {
|
|
|
+ _hisList.Remove(_hisList[i]);
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ for (int i = 0; i < _hisList.Count; i++)
|
|
|
+ {
|
|
|
+ _hisList[i].Index = i + 1;
|
|
|
+ }
|
|
|
+ });
|
|
|
+ }
|
|
|
+
|
|
|
private async void BtnClearDataA_Click(object sender, RoutedEventArgs e)
|
|
|
{
|
|
|
TUpgradeHis his = new TUpgradeHis()
|
|
@@ -397,7 +731,139 @@ namespace MV485.uc
|
|
|
_hisList.Remove(_hisList[i]);
|
|
|
}
|
|
|
}
|
|
|
+ }
|
|
|
|
|
|
+
|
|
|
+ private async void DeleteHis(TUpgradeHis his)
|
|
|
+ {
|
|
|
+ if (his == null) return;
|
|
|
+
|
|
|
+ MessageBoxResult result = MessageBox.Show("确定要删除此条目吗?", "确认删除", MessageBoxButton.YesNo, MessageBoxImage.Question);
|
|
|
+ if (result != MessageBoxResult.Yes) return;
|
|
|
+
|
|
|
+
|
|
|
+ string titleInfo = "正在删除,请稍后...";
|
|
|
+ WaitWindow waitWindow = new WaitWindow(titleInfo)
|
|
|
+ {
|
|
|
+ Owner = Application.Current.MainWindow,
|
|
|
+ WindowStartupLocation = WindowStartupLocation.CenterOwner
|
|
|
+ };
|
|
|
+ waitWindow.Show();
|
|
|
+
|
|
|
+ try
|
|
|
+ {
|
|
|
+
|
|
|
+ bool deleteSuccess = false;
|
|
|
+ await Task.Run(() =>
|
|
|
+ {
|
|
|
+ deleteSuccess = DBUpgradeHis.DeleteUpgradeHisByHisId(his.HisId);
|
|
|
+ });
|
|
|
+
|
|
|
+ if (deleteSuccess)
|
|
|
+ {
|
|
|
+ //int index = _slaveList.IndexOf(slave);
|
|
|
+ _hisList.Remove(his);
|
|
|
+ //for (int i = index; i < _slaveList.Count; i++)
|
|
|
+ //{
|
|
|
+ // _slaveList[i].Index = i + 1;
|
|
|
+ //}
|
|
|
+ //改变它后面的Index
|
|
|
+ SelectedHis = null;
|
|
|
+ }
|
|
|
+ }
|
|
|
+ catch (Exception ex)
|
|
|
+ {
|
|
|
+ MessageBox.Show(Application.Current.MainWindow, $"删除失败:{ex.Message}", "错误",
|
|
|
+ MessageBoxButton.OK, MessageBoxImage.Error);
|
|
|
+ }
|
|
|
+ finally
|
|
|
+ {
|
|
|
+ waitWindow.Close();
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ private bool GetSerialParameter(out string sPortName, out byte bDevId, out int iBaudrate)
|
|
|
+ {
|
|
|
+ sPortName = "";
|
|
|
+ bDevId = 0;
|
|
|
+ iBaudrate = 0;
|
|
|
+ //串口号
|
|
|
+ if (cmbPortNames.SelectedItem == null)
|
|
|
+ {
|
|
|
+ MessageBox.Show(Application.Current.MainWindow, "请选择串口", "提示",
|
|
|
+ MessageBoxButton.OK, MessageBoxImage.Warning);
|
|
|
+ return false;
|
|
|
+ }
|
|
|
+ var portName = cmbPortNames.SelectedValue.ToString();
|
|
|
+ ConfigManager.Instance.UpdateConfig(ConfigKey.ConfigPortName, portName);
|
|
|
+
|
|
|
+ //波特率
|
|
|
+ if (cmbBaudrate.SelectedItem == null)
|
|
|
+ {
|
|
|
+ MessageBox.Show(Application.Current.MainWindow, "请选择波特率", "提示",
|
|
|
+ MessageBoxButton.OK, MessageBoxImage.Warning);
|
|
|
+ return false;
|
|
|
+ }
|
|
|
+ var sBaudrate = cmbBaudrate.SelectedValue.ToString();
|
|
|
+ ConfigManager.Instance.UpdateConfig(ConfigKey.ConfigBaudrate, sBaudrate);
|
|
|
+
|
|
|
+ if (!byte.TryParse(cmbDevId.Text, out byte devid) || devid < 0 || devid > 247)
|
|
|
+ {
|
|
|
+ MessageBox.Show(Application.Current.MainWindow, "请输入正确的设备地址", "提示",
|
|
|
+ MessageBoxButton.OK, MessageBoxImage.Warning);
|
|
|
+ return false;
|
|
|
+ }
|
|
|
+ ConfigManager.Instance.UpdateConfig(ConfigKey.ConfigDevId, devid.ToString());
|
|
|
+
|
|
|
+ int baudrate = int.Parse(sBaudrate);
|
|
|
+
|
|
|
+
|
|
|
+ sPortName = portName;
|
|
|
+ bDevId = devid;
|
|
|
+ iBaudrate = baudrate;
|
|
|
+ return true;
|
|
|
+ }
|
|
|
+
|
|
|
+
|
|
|
+ //选择新版本文件
|
|
|
+ private void BtnSelNewFireware_Click(object sender, RoutedEventArgs e)
|
|
|
+ {
|
|
|
+ // 打开文件选择对话框
|
|
|
+ var openFileDialog = new OpenFileDialog
|
|
|
+ {
|
|
|
+ Filter = "Firware Files (*.bin)|*.bin",
|
|
|
+ Title = "选择新固件文件"
|
|
|
+ };
|
|
|
+
|
|
|
+ if (openFileDialog.ShowDialog() == true)
|
|
|
+ {
|
|
|
+ // 显示选择的文件名
|
|
|
+ //txtExcelFile.Text = openFileDialog.FileName;
|
|
|
+ //if (string.IsNullOrWhiteSpace(txtStandName.Text.Trim()))
|
|
|
+ //{
|
|
|
+ // txtStandName.Text = ThisApp.GetFileNameWithoutExtension(txtExcelFile.Text.Trim());
|
|
|
+ //}
|
|
|
+ string filePath = openFileDialog.FileName;
|
|
|
+ string fileNameOnly = openFileDialog.SafeFileName;
|
|
|
+ if(!Tools.TryParseFirmwareName(fileNameOnly,out string version))
|
|
|
+ {
|
|
|
+ MessageBox.Show(Application.Current.MainWindow, "请选择正确的固件文件", "提示",
|
|
|
+ MessageBoxButton.OK, MessageBoxImage.Warning);
|
|
|
+ return;
|
|
|
+ }
|
|
|
+
|
|
|
+ if (!Tools.IsFileSizeValid(filePath))
|
|
|
+ {
|
|
|
+ MessageBox.Show(Application.Current.MainWindow, "固件文件的大小超出合理范围", "提示",
|
|
|
+ MessageBoxButton.OK, MessageBoxImage.Warning);
|
|
|
+ return;
|
|
|
+ }
|
|
|
+
|
|
|
+ txtNewFirewarePath.Text = filePath;
|
|
|
+ txtNewFireware.Text = version;
|
|
|
+ ConfigManager.Instance.UpdateConfig(ConfigKey.UpgradeFile, filePath);
|
|
|
+ //txtNewFireware.Tag = version; //存储版本
|
|
|
+ }
|
|
|
}
|
|
|
//---------------------------------------------------------
|
|
|
}
|