From 6dff642a0f34720fedb2765b91158697cfa79ecf Mon Sep 17 00:00:00 2001 From: Jiangming1399 Date: Sun, 28 Jul 2019 10:26:18 +0800 Subject: [PATCH] =?UTF-8?q?=E4=B8=8B=E8=BD=BD=E5=8D=8F=E8=AE=AEv3=EF=BC=9A?= =?UTF-8?q?=E6=B7=BB=E5=8A=A00x12=E8=BF=94=E5=9B=9Ecode=EF=BC=8C=E8=A1=A8?= =?UTF-8?q?=E7=A4=BA=E6=89=80=E9=9C=80=E6=95=B0=E6=8D=AE=E5=B7=B2=E7=BB=8F?= =?UTF-8?q?=E5=8F=91=E9=80=81=E5=AE=8C=E6=AF=95=E3=80=82=20=E5=A2=9E?= =?UTF-8?q?=E5=8A=A0=E4=B8=8B=E8=BD=BD=E8=BF=9B=E5=BA=A6=E6=98=BE=E7=A4=BA?= =?UTF-8?q?=E5=8A=9F=E8=83=BD=EF=BC=8C=E4=BD=BF=E7=94=A8=E5=A4=9A=E7=BA=BF?= =?UTF-8?q?=E7=A8=8B=E9=98=B2=E6=AD=A2=E4=B8=BB=E7=95=8C=E9=9D=A2=E5=8D=A1?= =?UTF-8?q?=E4=BD=8F?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../KeymapDownloader/MainWindow.xaml.cs | 58 +++++++++++++++---- .../Properties/AssemblyInfo.cs | 6 +- 2 files changed, 50 insertions(+), 14 deletions(-) diff --git a/KeymapDownloader/KeymapDownloader/MainWindow.xaml.cs b/KeymapDownloader/KeymapDownloader/MainWindow.xaml.cs index b5c18365c..fa258839e 100644 --- a/KeymapDownloader/KeymapDownloader/MainWindow.xaml.cs +++ b/KeymapDownloader/KeymapDownloader/MainWindow.xaml.cs @@ -16,6 +16,7 @@ using HidSharp; using IntelHexFormatReader; using IntelHexFormatReader.Model; +using System.Threading; namespace KeymapDownloader { @@ -30,6 +31,12 @@ public MainWindow() { InitializeComponent(); RefreshHIDList(); + SetCopyright(); + } + + void SetCopyright() + { + setStatusText($"配列下载器 {System.Reflection.Assembly.GetExecutingAssembly().GetName().Version.ToString()}"); } /// @@ -40,7 +47,6 @@ void RefreshHIDList() Devices.Items.Clear(); var list = DeviceList.Local; - // var HidDeviceList = list.GetHidDevices(0x1209, 0x0514); var HidDeviceList = list.GetHidDevices(); foreach (var item in HidDeviceList) { @@ -88,6 +94,12 @@ bool checkSum(byte[] data) private void Download_Click(object sender, RoutedEventArgs e) { var path = Path.Text; + Thread thread = new Thread(() => { DownloadKeymap(path); }); + thread.Start(); + } + + private void DownloadKeymap(string path) + { byte[] binary = new Byte[1024]; HidStream hidStream = device.Open(); @@ -96,7 +108,7 @@ private void Download_Click(object sender, RoutedEventArgs e) { if (!File.Exists(path)) { - lbl_status.Text = "配列文件不存在"; + setStatusText("配列文件不存在"); return; } @@ -123,7 +135,7 @@ private void Download_Click(object sender, RoutedEventArgs e) if (!checkSum(binary)) { - lbl_status.Text = "Keymap校验不通过"; + setStatusText("Keymap校验不通过"); return; } } @@ -131,21 +143,36 @@ private void Download_Click(object sender, RoutedEventArgs e) try { byte[] packet = new byte[60]; - - for (int i = 0; i < (binary.Length / 60); i++) + var count = binary.Length / 60; + for (int i = 0; i < count; i++) { Array.Copy(binary, i * 60, packet, 0, 60); - SendPacket(hidStream, (uint)i, packet); + setStatusText($"{i + 1}/{count}"); + + if (SendPacket(hidStream, (uint)i, packet)) + break; } - lbl_status.Text = "完成"; + setStatusText("下载完毕"); } catch (Exception exp) { - lbl_status.Text = exp.Message; + setStatusText(exp.Message); } } - void SendPacket(HidStream stream, uint id, byte[] data) + void setStatusText(string msg) + { + Dispatcher.Invoke(() => { lbl_status.Text = msg; }); + } + + /// + /// 发送数据包 + /// + /// + /// + /// + /// 是否为最后一个 + bool SendPacket(HidStream stream, uint id, byte[] data) { byte[] send = new byte[63]; @@ -160,18 +187,27 @@ void SendPacket(HidStream stream, uint id, byte[] data) { stream.Write(send); var ret = stream.Read(); - ret_code = ret[1] == 0x11; + var code = ret[1]; + + // 0x10: 校验失败 + // 0x11: 接收成功 + // 0x12: 全部发送完毕 + if (code == 0x12) + return true; + + ret_code = code == 0x11; } while (!ret_code && retryCount-- > 0); if (retryCount <= 0) { throw new Exception("发送重试次数达到上限"); } + return false; } private void Devices_SelectionChanged(object sender, SelectionChangedEventArgs e) { - device = ((CustomHID)Devices.SelectedItem).Device; + device = ((CustomHID)Devices.SelectedItem)?.Device; } } } diff --git a/KeymapDownloader/KeymapDownloader/Properties/AssemblyInfo.cs b/KeymapDownloader/KeymapDownloader/Properties/AssemblyInfo.cs index 08cefaa1b..24c4796e0 100644 --- a/KeymapDownloader/KeymapDownloader/Properties/AssemblyInfo.cs +++ b/KeymapDownloader/KeymapDownloader/Properties/AssemblyInfo.cs @@ -12,7 +12,7 @@ [assembly: AssemblyConfiguration("")] [assembly: AssemblyCompany("")] [assembly: AssemblyProduct("KeymapDownloader")] -[assembly: AssemblyCopyright("Copyright © 2018")] +[assembly: AssemblyCopyright("Copyright © Lotlab 2012 - 2019")] [assembly: AssemblyTrademark("")] [assembly: AssemblyCulture("")] @@ -51,5 +51,5 @@ // 可以指定所有值,也可以使用以下所示的 "*" 预置版本号和修订号 // 方法是按如下所示使用“*”: : // [assembly: AssemblyVersion("1.0.*")] -[assembly: AssemblyVersion("1.0.0.0")] -[assembly: AssemblyFileVersion("1.0.0.0")] +[assembly: AssemblyVersion("1.0.3.3")] +[assembly: AssemblyFileVersion("1.0.3.3")]