|
@@ -386,13 +386,13 @@ namespace MV485.uc
|
|
|
//开始升级
|
|
|
//1.先向设备写入(通知)升级包文件的长度及CRC32的值
|
|
|
string titleInfo = "开始写入升级包的信息";
|
|
|
- WaitWindow waitWindow = new WaitWindow(titleInfo)
|
|
|
+ WaitUpgradeWindow waitWindow = new WaitUpgradeWindow(titleInfo)
|
|
|
{
|
|
|
Owner = Application.Current.MainWindow,
|
|
|
WindowStartupLocation = WindowStartupLocation.CenterOwner
|
|
|
- };
|
|
|
+ };
|
|
|
waitWindow.Show();
|
|
|
-
|
|
|
+ Application.Current.MainWindow.IsEnabled = false;
|
|
|
try
|
|
|
{
|
|
|
//开始先设备写入文件信息
|
|
@@ -407,6 +407,21 @@ namespace MV485.uc
|
|
|
return;
|
|
|
}
|
|
|
|
|
|
+ //记录开始升级的信息
|
|
|
+ TUpgradeHis upgradeHis = new TUpgradeHis()
|
|
|
+ {
|
|
|
+ HisId = Guid.NewGuid().ToString().Replace("-", ""),
|
|
|
+ DeviceSn = txtDeviceSn.Text,
|
|
|
+ PortName = portName,
|
|
|
+ BaudRate = baudrate,
|
|
|
+ Address = devId,
|
|
|
+ OldFireware = txtOldFireware.Text,
|
|
|
+ UpgradeTime = DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss"),
|
|
|
+ NewFireware = txtNewFireware.Text,
|
|
|
+ UpgradeResult = 0
|
|
|
+ };
|
|
|
+ await AddUpgradeItem(upgradeHis);
|
|
|
+
|
|
|
//开始通信
|
|
|
DeviceUpgrade deviceUpgrade = new DeviceUpgrade();
|
|
|
Progress<string> progress = new Progress<string>(msg =>
|
|
@@ -420,7 +435,7 @@ namespace MV485.uc
|
|
|
waitWindow.Dispatcher.BeginInvoke(new Action(() =>
|
|
|
{
|
|
|
//percentText = $"已发送:{packNum}/{totalPacks}({(double)packNum / totalPacks:P1})";
|
|
|
- percentText = $"已下载:{(double)packNum / totalPacks:P2}";
|
|
|
+ percentText = $"已下载:{(double)packNum / totalPacks:P1}";
|
|
|
waitWindow.TitleInfo = percentText;
|
|
|
//$"已发送{packNum}/{totalPacks}";
|
|
|
}));
|
|
@@ -430,17 +445,24 @@ namespace MV485.uc
|
|
|
//});
|
|
|
};
|
|
|
|
|
|
+ waitWindow.StopUpgrade += () =>
|
|
|
+ {
|
|
|
+
|
|
|
+ };
|
|
|
+
|
|
|
bool blSend = await deviceUpgrade.StartSendFileAsync(progress, portName, baudrate, fileData);
|
|
|
|
|
|
if (blSend)
|
|
|
{
|
|
|
+ upgradeHis.UpgradeResult = 1; //升级失败
|
|
|
+ await UpdateUpgradeResult(upgradeHis);
|
|
|
//提示继续等待设备重启,并验证升级是否成功
|
|
|
//MessageBox.Show(Application.Current.MainWindow,"向设备写入新固件成功,")
|
|
|
|
|
|
MessageBoxResult result = MessageBox.Show("向设备写入新固件成功,设备即将重启。\n是否等待自动验证重启后的版本是否正确",
|
|
|
"确认", MessageBoxButton.YesNo, MessageBoxImage.Question);
|
|
|
|
|
|
- if (result != MessageBoxResult.No) return;
|
|
|
+ if (result == MessageBoxResult.No) return;
|
|
|
|
|
|
//继续等待失败是否成功
|
|
|
titleInfo = $"正在等待验证重启后版本是否正确(1~2分钟)";
|
|
@@ -483,6 +505,8 @@ namespace MV485.uc
|
|
|
}
|
|
|
else
|
|
|
{
|
|
|
+ upgradeHis.UpgradeResult = -1; //升级失败
|
|
|
+ await UpdateUpgradeResult(upgradeHis);
|
|
|
MessageBox.Show(Application.Current.MainWindow, "向设备写入新固件时失败", "错误",
|
|
|
MessageBoxButton.OK, MessageBoxImage.Error);
|
|
|
}
|
|
@@ -491,6 +515,7 @@ namespace MV485.uc
|
|
|
finally
|
|
|
{
|
|
|
waitWindow.Close();
|
|
|
+ Application.Current.MainWindow.IsEnabled = true;
|
|
|
}
|
|
|
|
|
|
}
|
|
@@ -671,32 +696,51 @@ namespace MV485.uc
|
|
|
{
|
|
|
if (his == null) return;
|
|
|
|
|
|
- bool blInsert = await Task.Run(() =>
|
|
|
+ try
|
|
|
{
|
|
|
- return DBUpgradeHis.InsertUpgradeHis(his);
|
|
|
- });
|
|
|
+ bool blInsert = await Task.Run(() =>
|
|
|
+ {
|
|
|
+ return DBUpgradeHis.InsertUpgradeHis(his);
|
|
|
+ });
|
|
|
|
|
|
- if (!blInsert) return;
|
|
|
+ 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;
|
|
|
+ }
|
|
|
+ });
|
|
|
+ AppendLog("新增升级条目");
|
|
|
+ }
|
|
|
+ catch { }
|
|
|
+ }
|
|
|
|
|
|
- await Dispatcher.InvokeAsync( ()=>
|
|
|
+ private async Task UpdateUpgradeResult(TUpgradeHis his)
|
|
|
+ {
|
|
|
+ if (his == null) return;
|
|
|
+ try
|
|
|
{
|
|
|
- _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++)
|
|
|
+ bool blUpdate = await Task.Run(() =>
|
|
|
{
|
|
|
- _hisList[i].Index = i + 1;
|
|
|
- }
|
|
|
- });
|
|
|
+ return DBUpgradeHis.UpdateUpgradeResult(his);
|
|
|
+ });
|
|
|
+ AppendLog("更新条目的升级结果");
|
|
|
+ }
|
|
|
+ catch { }
|
|
|
}
|
|
|
|
|
|
private async void BtnClearDataA_Click(object sender, RoutedEventArgs e)
|