Skip to content

Commit

Permalink
下载协议v3:添加0x12返回code,表示所需数据已经发送完毕。
Browse files Browse the repository at this point in the history
增加下载进度显示功能,使用多线程防止主界面卡住
  • Loading branch information
jim-kirisame committed Jul 28, 2019
1 parent 957a3ca commit 6dff642
Show file tree
Hide file tree
Showing 2 changed files with 50 additions and 14 deletions.
58 changes: 47 additions & 11 deletions KeymapDownloader/KeymapDownloader/MainWindow.xaml.cs
Original file line number Diff line number Diff line change
Expand Up @@ -16,6 +16,7 @@
using HidSharp;
using IntelHexFormatReader;
using IntelHexFormatReader.Model;
using System.Threading;

namespace KeymapDownloader
{
Expand All @@ -30,6 +31,12 @@ public MainWindow()
{
InitializeComponent();
RefreshHIDList();
SetCopyright();
}

void SetCopyright()
{
setStatusText($"配列下载器 {System.Reflection.Assembly.GetExecutingAssembly().GetName().Version.ToString()}");
}

/// <summary>
Expand All @@ -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)
{
Expand Down Expand Up @@ -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();
Expand All @@ -96,7 +108,7 @@ private void Download_Click(object sender, RoutedEventArgs e)
{
if (!File.Exists(path))
{
lbl_status.Text = "配列文件不存在";
setStatusText("配列文件不存在");
return;
}

Expand All @@ -123,29 +135,44 @@ private void Download_Click(object sender, RoutedEventArgs e)

if (!checkSum(binary))
{
lbl_status.Text = "Keymap校验不通过";
setStatusText("Keymap校验不通过");
return;
}
}

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; });
}

/// <summary>
/// 发送数据包
/// </summary>
/// <param name="stream"></param>
/// <param name="id"></param>
/// <param name="data"></param>
/// <returns>是否为最后一个</returns>
bool SendPacket(HidStream stream, uint id, byte[] data)
{
byte[] send = new byte[63];

Expand All @@ -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;
}
}
}
6 changes: 3 additions & 3 deletions KeymapDownloader/KeymapDownloader/Properties/AssemblyInfo.cs
Original file line number Diff line number Diff line change
Expand Up @@ -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("")]

Expand Down Expand Up @@ -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")]

0 comments on commit 6dff642

Please sign in to comment.