From caa26c729e2643512f07309f1427aabe2e189f7c Mon Sep 17 00:00:00 2001 From: SikongJueluo Date: Sun, 17 Aug 2025 13:46:14 +0800 Subject: [PATCH] =?UTF-8?q?fix:=20=E5=89=8D=E7=AB=AF=E4=BF=AE=E5=A4=8D?= =?UTF-8?q?=E6=8B=A8=E7=A0=81=E5=BC=80=E5=85=B3=E7=AC=AC=E4=B8=80=E4=B8=AA?= =?UTF-8?q?=E6=97=A0=E6=B3=95=E5=BC=80=E5=85=B3=E7=9A=84=E9=97=AE=E9=A2=98?= =?UTF-8?q?=EF=BC=9B=E5=90=8E=E7=AB=AF=E4=BF=AE=E5=A4=8D=E8=BF=9B=E5=BA=A6?= =?UTF-8?q?=E6=9D=A1=E5=81=9C=E6=AD=A2=E5=9C=A83%=E7=9A=84=E9=97=AE?= =?UTF-8?q?=E9=A2=98?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- server/src/Controllers/JtagController.cs | 2 +- server/src/Peripherals/JtagClient.cs | 41 ++++++++++++------------ server/src/UdpClientPool.cs | 2 +- src/components/equipments/Switch.vue | 3 +- 4 files changed, 25 insertions(+), 23 deletions(-) diff --git a/server/src/Controllers/JtagController.cs b/server/src/Controllers/JtagController.cs index 717f366..bf4670c 100644 --- a/server/src/Controllers/JtagController.cs +++ b/server/src/Controllers/JtagController.cs @@ -228,7 +228,7 @@ public class JtagController : ControllerBase // 下载比特流 var jtagCtrl = new Peripherals.JtagClient.Jtag(address, port); - var ret = await jtagCtrl.DownloadBitstream(processedBytes); + var ret = await jtagCtrl.DownloadBitstream(processedBytes, taskId); if (ret.IsSuccessful) { diff --git a/server/src/Peripherals/JtagClient.cs b/server/src/Peripherals/JtagClient.cs index 0fcafac..90ac444 100644 --- a/server/src/Peripherals/JtagClient.cs +++ b/server/src/Peripherals/JtagClient.cs @@ -380,7 +380,7 @@ public class JtagStatusReg public class Jtag { private static readonly NLog.Logger logger = NLog.LogManager.GetCurrentClassLogger(); - private readonly ProgressTracker? _progressTracker; + private readonly ProgressTracker _progressTracker = MsgBus.ProgressTracker; private const int CLOCK_FREQ = 50; // MHz @@ -400,14 +400,12 @@ public class Jtag /// 目标 IP 地址 /// 目标 UDP 端口 /// 超时时间(毫秒) - /// 进度追踪器 - public Jtag(string address, int port, int timeout = 2000, ProgressTracker? progressTracker = null) + public Jtag(string address, int port, int timeout = 2000) { this.address = address; this.port = port; this.ep = new IPEndPoint(IPAddress.Parse(address), port); this.timeout = timeout; - this._progressTracker = progressTracker; } async ValueTask> ReadFIFO(uint devAddr) @@ -472,7 +470,8 @@ public class Jtag UInt32 resultMask = 0xFF_FF_FF_FF, UInt32 delayMilliseconds = 0, string progressId = "") { { - var ret = await UDPClientPool.WriteAddr(this.ep, 0, devAddr, data, this.timeout, progressId); + var ret = await UDPClientPool.WriteAddr( + this.ep, 0, devAddr, data, this.timeout, progressId); if (!ret.IsSuccessful) return new(ret.Error); if (!ret.Value) return new(new Exception("Write FIFO failed")); } @@ -483,7 +482,7 @@ public class Jtag { var ret = await UDPClientPool.ReadAddrWithWait(this.ep, 0, JtagAddr.STATE, result, resultMask, 0, this.timeout); if (!ret.IsSuccessful) return new(ret.Error); - _progressTracker?.AdvanceProgress(progressId, 10); + _progressTracker.AdvanceProgress(progressId, 10); return ret.Value; } } @@ -583,7 +582,7 @@ public class Jtag else if (!ret.Value) return new(new Exception("Write CMD_JTAG_LOAD_DR_CAREI Failed")); } - _progressTracker?.AdvanceProgress(progressId, 10); + _progressTracker.AdvanceProgress(progressId, 10); { var ret = await WriteFIFO( @@ -724,41 +723,43 @@ public class Jtag logger.Trace($"Clear up udp server {this.address,0} receive data"); + _progressTracker.AdvanceProgress(progressId, 10); + Result ret; ret = await CloseTest(); if (!ret.IsSuccessful) return new(ret.Error); else if (!ret.Value) return new(new Exception("Jtag Close Test Failed")); - _progressTracker?.AdvanceProgress(progressId, 10); + _progressTracker.AdvanceProgress(progressId, 10); ret = await RunTest(); if (!ret.IsSuccessful) return new(ret.Error); else if (!ret.Value) return new(new Exception("Jtag Run Test Failed")); - _progressTracker?.AdvanceProgress(progressId, 10); + _progressTracker.AdvanceProgress(progressId, 10); logger.Trace("Jtag initialize"); ret = await ExecRDCmd(JtagCmd.JTAG_DR_JRST); if (!ret.IsSuccessful) return new(ret.Error); else if (!ret.Value) return new(new Exception("Jtag Execute Command JTAG_DR_JRST Failed")); - _progressTracker?.AdvanceProgress(progressId, 10); + _progressTracker.AdvanceProgress(progressId, 10); ret = await RunTest(); if (!ret.IsSuccessful) return new(ret.Error); else if (!ret.Value) return new(new Exception("Jtag Run Test Failed")); - _progressTracker?.AdvanceProgress(progressId, 10); + _progressTracker.AdvanceProgress(progressId, 10); ret = await ExecRDCmd(JtagCmd.JTAG_DR_CFGI); if (!ret.IsSuccessful) return new(ret.Error); else if (!ret.Value) return new(new Exception("Jtag Execute Command JTAG_DR_CFGI Failed")); - _progressTracker?.AdvanceProgress(progressId, 10); + _progressTracker.AdvanceProgress(progressId, 10); logger.Trace("Jtag ready to write bitstream"); ret = await IdleDelay(100000); if (!ret.IsSuccessful) return new(ret.Error); else if (!ret.Value) return new(new Exception("Jtag IDLE Delay Failed")); - _progressTracker?.AdvanceProgress(progressId, 10); + _progressTracker.AdvanceProgress(progressId, 10); ret = await LoadDRCareInput(bitstream, progressId: progressId); if (!ret.IsSuccessful) return new(ret.Error); @@ -769,40 +770,40 @@ public class Jtag ret = await CloseTest(); if (!ret.IsSuccessful) return new(ret.Error); else if (!ret.Value) return new(new Exception("Jtag Close Test Failed")); - _progressTracker?.AdvanceProgress(progressId, 10); + _progressTracker.AdvanceProgress(progressId, 10); ret = await RunTest(); if (!ret.IsSuccessful) return new(ret.Error); else if (!ret.Value) return new(new Exception("Jtag Run Test Failed")); - _progressTracker?.AdvanceProgress(progressId, 10); + _progressTracker.AdvanceProgress(progressId, 10); ret = await ExecRDCmd(JtagCmd.JTAG_DR_JWAKEUP); if (!ret.IsSuccessful) return new(ret.Error); else if (!ret.Value) return new(new Exception("Jtag Execute Command JTAG_DR_JWAKEUP Failed")); - _progressTracker?.AdvanceProgress(progressId, 10); + _progressTracker.AdvanceProgress(progressId, 10); logger.Trace("Jtag reset device"); ret = await IdleDelay(10000); if (!ret.IsSuccessful) return new(ret.Error); else if (!ret.Value) return new(new Exception("Jtag IDLE Delay Failed")); - _progressTracker?.AdvanceProgress(progressId, 10); + _progressTracker.AdvanceProgress(progressId, 10); var retCode = await ReadStatusReg(); if (!retCode.IsSuccessful) return new(retCode.Error); var jtagStatus = new JtagStatusReg(retCode.Value); if (!(jtagStatus.done && jtagStatus.wakeup_over && jtagStatus.init_complete)) return new(new Exception("Jtag download bitstream failed")); - _progressTracker?.AdvanceProgress(progressId, 10); + _progressTracker.AdvanceProgress(progressId, 10); ret = await CloseTest(); if (!ret.IsSuccessful) return new(ret.Error); else if (!ret.Value) return new(new Exception("Jtag Close Test Failed")); logger.Trace("Jtag download bitstream successfully"); - _progressTracker?.AdvanceProgress(progressId, 10); + _progressTracker.AdvanceProgress(progressId, 10); // Finish - _progressTracker?.AdvanceProgress(progressId, 10); + _progressTracker.AdvanceProgress(progressId, 10); return true; } diff --git a/server/src/UdpClientPool.cs b/server/src/UdpClientPool.cs index 99a4ac1..12113ff 100644 --- a/server/src/UdpClientPool.cs +++ b/server/src/UdpClientPool.cs @@ -677,7 +677,7 @@ public sealed class UDPClientPool if (!udpWriteAck.Value.IsSuccessful) return false; - _progressTracker.AdvanceProgress(progressId, 10); + _progressTracker.AdvanceProgress(progressId, 5); } return true; diff --git a/src/components/equipments/Switch.vue b/src/components/equipments/Switch.vue index f136adc..8f0a021 100644 --- a/src/components/equipments/Switch.vue +++ b/src/components/equipments/Switch.vue @@ -167,7 +167,8 @@ function updateStatus(newStates: boolean[], index?: number) { if (props.enableDigitalTwin) { try { const client = getClient(); - if (!isUndefined(index)) client.setSwitchOnOff(index, newStates[index]); + if (!isUndefined(index)) + client.setSwitchOnOff(index + 1, newStates[index]); else client.setMultiSwitchsOnOff(btnStatus.value); } catch (error: any) {} }