diff --git a/server/Program.cs b/server/Program.cs
index c40d13f..c101ece 100644
--- a/server/Program.cs
+++ b/server/Program.cs
@@ -1,3 +1,5 @@
+using System.Net;
+using System.Net.Sockets;
using Microsoft.AspNetCore.Http.Features;
using Microsoft.Extensions.FileProviders;
using Newtonsoft.Json;
diff --git a/server/src/Controllers/UDPController.cs b/server/src/Controllers/UDPController.cs
index 804ad5c..ac090a0 100644
--- a/server/src/Controllers/UDPController.cs
+++ b/server/src/Controllers/UDPController.cs
@@ -106,15 +106,15 @@ public class UDPController : ControllerBase
}
///
- /// 获取指定IP地址接受的数据列表
+ /// 获取指定IP地址接收的数据列表
///
/// IP地址
[HttpGet("GetRecvDataArray")]
[ProducesResponseType(typeof(List), StatusCodes.Status200OK)]
[ProducesResponseType(StatusCodes.Status500InternalServerError)]
- public async ValueTask GetRecvDataArray(string address)
+ public async ValueTask GetRecvDataArray(string address, int taskID)
{
- var ret = await MsgBus.UDPServer.GetDataArrayAsync(address);
+ var ret = await MsgBus.UDPServer.GetDataArrayAsync(address, taskID);
if (ret.HasValue)
{
diff --git a/server/src/JtagClient.cs b/server/src/JtagClient.cs
index 9f39369..6773532 100644
--- a/server/src/JtagClient.cs
+++ b/server/src/JtagClient.cs
@@ -441,7 +441,7 @@ public class Jtag
(UInt32 devAddr, UInt32 data, UInt32 result, UInt32 resultMask = 0xFF_FF_FF_FF, UInt32 delayMilliseconds = 0)
{
{
- var ret = await UDPClientPool.WriteAddr(this.ep, devAddr, data, this.timeout);
+ var ret = await UDPClientPool.WriteAddr(this.ep, 0, devAddr, data, this.timeout);
if (!ret.IsSuccessful) return new(ret.Error);
if (!ret.Value) return new(new Exception("Write FIFO failed"));
}
@@ -450,7 +450,7 @@ public class Jtag
await Task.Delay(TimeSpan.FromMilliseconds(delayMilliseconds));
{
- var ret = await UDPClientPool.ReadAddrWithWait(this.ep, JtagAddr.STATE, result, resultMask, this.timeout);
+ var ret = await UDPClientPool.ReadAddrWithWait(this.ep, 0, JtagAddr.STATE, result, resultMask, this.timeout);
if (!ret.IsSuccessful) return new(ret.Error);
return ret.Value;
}
@@ -460,7 +460,7 @@ public class Jtag
(UInt32 devAddr, byte[] data, UInt32 result, UInt32 resultMask = 0xFF_FF_FF_FF, UInt32 delayMilliseconds = 0)
{
{
- var ret = await UDPClientPool.WriteAddr(this.ep, devAddr, data, this.timeout);
+ var ret = await UDPClientPool.WriteAddr(this.ep, 0, devAddr, data, this.timeout);
if (!ret.IsSuccessful) return new(ret.Error);
if (!ret.Value) return new(new Exception("Write FIFO failed"));
}
@@ -469,7 +469,7 @@ public class Jtag
await Task.Delay(TimeSpan.FromMilliseconds(delayMilliseconds));
{
- var ret = await UDPClientPool.ReadAddrWithWait(this.ep, JtagAddr.STATE, result, resultMask, this.timeout);
+ var ret = await UDPClientPool.ReadAddrWithWait(this.ep, 0, JtagAddr.STATE, result, resultMask, this.timeout);
if (!ret.IsSuccessful) return new(ret.Error);
return ret.Value;
}
@@ -627,9 +627,9 @@ public class Jtag
public async ValueTask> ReadIDCode()
{
// Clear Data
- await MsgBus.UDPServer.ClearUDPData(this.address);
+ await MsgBus.UDPServer.ClearUDPData(this.address, 0);
- logger.Trace($"Clear up udp server {this.address} receive data");
+ logger.Trace($"Clear up udp server {this.address,0} receive data");
Result ret;
@@ -665,9 +665,9 @@ public class Jtag
public async ValueTask> ReadStatusReg()
{
// Clear Data
- await MsgBus.UDPServer.ClearUDPData(this.address);
+ await MsgBus.UDPServer.ClearUDPData(this.address, 0);
- logger.Trace($"Clear up udp server {this.address} receive data");
+ logger.Trace($"Clear up udp server {this.address,0} receive data");
Result ret;
@@ -702,9 +702,9 @@ public class Jtag
public async ValueTask> DownloadBitstream(byte[] bitstream)
{
// Clear Data
- await MsgBus.UDPServer.ClearUDPData(this.address);
+ await MsgBus.UDPServer.ClearUDPData(this.address, 0);
- logger.Trace($"Clear up udp server {this.address} receive data");
+ logger.Trace($"Clear up udp server {this.address,0} receive data");
Result ret;
@@ -786,9 +786,9 @@ public class Jtag
logger.Debug($"Get boundar scan registers number: {portNum}");
// Clear Data
- await MsgBus.UDPServer.ClearUDPData(this.address);
+ await MsgBus.UDPServer.ClearUDPData(this.address, 0);
- logger.Trace($"Clear up udp server {this.address} receive data");
+ logger.Trace($"Clear up udp server {this.address,0} receive data");
Result ret;
@@ -853,9 +853,9 @@ public class Jtag
public async ValueTask> SetSpeed(UInt32 speed)
{
// Clear Data
- await MsgBus.UDPServer.ClearUDPData(this.address);
+ await MsgBus.UDPServer.ClearUDPData(this.address, 0);
- logger.Trace($"Clear up udp server {this.address} receive data");
+ logger.Trace($"Clear up udp server {this.address,0} receive data");
var ret = await WriteFIFO(
JtagAddr.SPEED_CTRL, (speed << 16) | speed,
diff --git a/server/src/Peripherals/DDSClient.cs b/server/src/Peripherals/DDSClient.cs
index 55a9ebe..1dc4d68 100644
--- a/server/src/Peripherals/DDSClient.cs
+++ b/server/src/Peripherals/DDSClient.cs
@@ -108,11 +108,11 @@ public class DDS
if (waveNum < 0 || waveNum > 3) return new(new ArgumentException(
$"Wave number should be 0 ~ 3 instead of {waveNum}", nameof(waveNum)));
- await MsgBus.UDPServer.ClearUDPData(this.address);
+ await MsgBus.UDPServer.ClearUDPData(this.address, 1);
logger.Trace("Clear udp data finished");
var ret = await UDPClientPool.WriteAddr(
- this.ep, DDSAddr.Channel[channelNum].WaveSelect, (UInt32)waveNum, this.timeout);
+ this.ep, 1, DDSAddr.Channel[channelNum].WaveSelect, (UInt32)waveNum, this.timeout);
if (!ret.IsSuccessful)
return new(ret.Error);
return ret.Value;
@@ -132,11 +132,11 @@ public class DDS
if (waveNum < 0 || waveNum > 3) return new(new ArgumentException(
$"Wave number should be 0 ~ 3 instead of {waveNum}", nameof(waveNum)));
- await MsgBus.UDPServer.ClearUDPData(this.address);
+ await MsgBus.UDPServer.ClearUDPData(this.address, 1);
logger.Trace("Clear udp data finished");
var ret = await UDPClientPool.WriteAddr(
- this.ep, DDSAddr.Channel[channelNum].FreqCtrl[waveNum], step, this.timeout);
+ this.ep, 1, DDSAddr.Channel[channelNum].FreqCtrl[waveNum], step, this.timeout);
if (!ret.IsSuccessful)
return new(ret.Error);
return ret.Value;
@@ -158,11 +158,11 @@ public class DDS
if (phase < 0 || phase > 4096) return new(new ArgumentException(
$"Phase should be 0 ~ 4096 instead of {phase}", nameof(phase)));
- await MsgBus.UDPServer.ClearUDPData(this.address);
+ await MsgBus.UDPServer.ClearUDPData(this.address, 1);
logger.Trace("Clear udp data finished");
var ret = await UDPClientPool.WriteAddr(
- this.ep, DDSAddr.Channel[channelNum].PhaseCtrl[waveNum], (UInt32)phase, this.timeout);
+ this.ep, 1, DDSAddr.Channel[channelNum].PhaseCtrl[waveNum], (UInt32)phase, this.timeout);
if (!ret.IsSuccessful)
return new(ret.Error);
return ret.Value;
diff --git a/server/src/Peripherals/MatrixKeyClient.cs b/server/src/Peripherals/MatrixKeyClient.cs
index abd830f..99a035f 100644
--- a/server/src/Peripherals/MatrixKeyClient.cs
+++ b/server/src/Peripherals/MatrixKeyClient.cs
@@ -44,10 +44,10 @@ public class MatrixKey
public async ValueTask> EnableControl()
{
if (MsgBus.IsRunning)
- await MsgBus.UDPServer.ClearUDPData(this.address);
+ await MsgBus.UDPServer.ClearUDPData(this.address, 1);
else return new(new Exception("Message Bus not work!"));
- var ret = await UDPClientPool.WriteAddr(this.ep, MatrixKeyAddr.KEY_ENABLE, 1, this.timeout);
+ var ret = await UDPClientPool.WriteAddr(this.ep, 1, MatrixKeyAddr.KEY_ENABLE, 1, this.timeout);
if (!ret.IsSuccessful) return new(ret.Error);
return ret.Value;
}
@@ -59,10 +59,10 @@ public class MatrixKey
public async ValueTask> DisableControl()
{
if (MsgBus.IsRunning)
- await MsgBus.UDPServer.ClearUDPData(this.address);
+ await MsgBus.UDPServer.ClearUDPData(this.address, 1);
else return new(new Exception("Message Bus not work!"));
- var ret = await UDPClientPool.WriteAddr(this.ep, MatrixKeyAddr.KEY_ENABLE, 0, this.timeout);
+ var ret = await UDPClientPool.WriteAddr(this.ep, 1, MatrixKeyAddr.KEY_ENABLE, 0, this.timeout);
if (!ret.IsSuccessful) return new(ret.Error);
return ret.Value;
}
@@ -75,14 +75,14 @@ public class MatrixKey
public async ValueTask> ControlKey(BitArray keyStates)
{
if (MsgBus.IsRunning)
- await MsgBus.UDPServer.ClearUDPData(this.address);
+ await MsgBus.UDPServer.ClearUDPData(this.address, 1);
else return new(new Exception("Message Bus not work!"));
if (keyStates.Length != 16) return new(new ArgumentException(
$"The number of key should be 16 instead of {keyStates.Length}", nameof(keyStates)));
var ret = await UDPClientPool.WriteAddr(
- this.ep, MatrixKeyAddr.KEY_CTRL, Common.Number.BitsToNumber(keyStates).Value, this.timeout);
+ this.ep, 1, MatrixKeyAddr.KEY_CTRL, Common.Number.BitsToNumber(keyStates).Value, this.timeout);
if (!ret.IsSuccessful) return new(ret.Error);
return ret.Value;
}
diff --git a/server/src/Peripherals/PowerClient.cs b/server/src/Peripherals/PowerClient.cs
index 95b9ca1..d7d6aea 100644
--- a/server/src/Peripherals/PowerClient.cs
+++ b/server/src/Peripherals/PowerClient.cs
@@ -45,10 +45,10 @@ public class Power
public async ValueTask> SetPowerOnOff(bool enable)
{
if (MsgBus.IsRunning)
- await MsgBus.UDPServer.ClearUDPData(this.address);
+ await MsgBus.UDPServer.ClearUDPData(this.address, 1);
else return new(new Exception("Message Bus not work!"));
- var ret = await UDPClientPool.WriteAddr(this.ep, PowerAddr.PowerCtrl, Convert.ToUInt32(enable), this.timeout);
+ var ret = await UDPClientPool.WriteAddr(this.ep, 1, PowerAddr.PowerCtrl, Convert.ToUInt32(enable), this.timeout);
if (!ret.IsSuccessful) return new(ret.Error);
return ret.Value;
}
diff --git a/server/src/RemoteUpdateClient.cs b/server/src/RemoteUpdateClient.cs
index df30246..88bbb9d 100644
--- a/server/src/RemoteUpdateClient.cs
+++ b/server/src/RemoteUpdateClient.cs
@@ -142,7 +142,7 @@ public class RemoteUpdater
{
var ret = await UDPClientPool.WriteAddr(
- this.ep, RemoteUpdaterAddr.WriteCtrl,
+ this.ep, 0, RemoteUpdaterAddr.WriteCtrl,
Convert.ToUInt32((writeSectorNum << 16) | (1 << 15) | Convert.ToInt32(flashAddr / 4096)), this.timeout);
if (!ret.IsSuccessful) return new(ret.Error);
if (!ret.Value) return new(new Exception("Enable write flash failed"));
@@ -150,7 +150,7 @@ public class RemoteUpdater
{
var ret = await UDPClientPool.ReadAddrWithWait(
- this.ep, RemoteUpdaterAddr.WriteSign,
+ this.ep, 0, RemoteUpdaterAddr.WriteSign,
0x00_00_00_01, 0x00_00_00_01, this.timeoutForWait);
if (!ret.IsSuccessful) return new(ret.Error);
if (!ret.Value) return new(new Exception(
@@ -158,14 +158,14 @@ public class RemoteUpdater
}
{
- var ret = await UDPClientPool.WriteAddr(this.ep, RemoteUpdaterAddr.WriteFIFO, bytesData, this.timeout);
+ var ret = await UDPClientPool.WriteAddr(this.ep, 0, RemoteUpdaterAddr.WriteFIFO, bytesData, this.timeout);
if (!ret.IsSuccessful) return new(ret.Error);
if (!ret.Value) return new(new Exception("Send data to flash failed"));
}
{
var ret = await UDPClientPool.ReadAddrWithWait(
- this.ep, RemoteUpdaterAddr.WriteSign,
+ this.ep, 0, RemoteUpdaterAddr.WriteSign,
0x00_00_01_00, 0x00_00_01_00, this.timeoutForWait);
if (!ret.IsSuccessful) return new(ret.Error);
return ret.Value;
@@ -314,14 +314,14 @@ public class RemoteUpdater
private async ValueTask> CheckBitstreamCRC(int bitstreamNum, int bitstreamLen, UInt32 checkSum)
{
{
- var ret = await UDPClientPool.WriteAddr(this.ep, RemoteUpdaterAddr.ReadCtrl2, 0x00_00_00_00, this.timeout);
+ var ret = await UDPClientPool.WriteAddr(this.ep, 0, RemoteUpdaterAddr.ReadCtrl2, 0x00_00_00_00, this.timeout);
if (!ret.IsSuccessful) return new(ret.Error);
if (!ret.Value) return new(new Exception("Write read control 2 failed"));
}
{
var ret = await UDPClientPool.WriteAddr(
- this.ep, RemoteUpdaterAddr.ReadCtrl1,
+ this.ep, 0, RemoteUpdaterAddr.ReadCtrl1,
Convert.ToUInt32((bitstreamLen << 16) | (1 << 15) | Convert.ToInt32(FlashAddr.Bitstream[bitstreamNum] / 4096)),
this.timeout);
if (!ret.IsSuccessful) return new(ret.Error);
@@ -330,7 +330,7 @@ public class RemoteUpdater
{
var ret = await UDPClientPool.ReadAddrWithWait(
- this.ep, RemoteUpdaterAddr.ReadSign,
+ this.ep, 0, RemoteUpdaterAddr.ReadSign,
0x00_00_01_00, 0x00_00_01_00, this.timeoutForWait);
if (!ret.IsSuccessful) return new(ret.Error);
if (!ret.Value) return new(new Exception(
@@ -338,7 +338,7 @@ public class RemoteUpdater
}
{
- var ret = await UDPClientPool.ReadAddr(this.ep, RemoteUpdaterAddr.ReadCRC, this.timeout);
+ var ret = await UDPClientPool.ReadAddr(this.ep, 0, RemoteUpdaterAddr.ReadCRC, this.timeout);
if (!ret.IsSuccessful) return new(ret.Error);
var bytes = ret.Value.Options.Data;
@@ -368,7 +368,7 @@ public class RemoteUpdater
$"Bitsteam num should be 0 ~ 3 for HotRest, but given {bitstreamNum}", nameof(bitstreamNum)));
var ret = await UDPClientPool.WriteAddr(
- this.ep, RemoteUpdaterAddr.HotResetCtrl,
+ this.ep, 0, RemoteUpdaterAddr.HotResetCtrl,
((FlashAddr.Bitstream[bitstreamNum] << 8) | 1), this.timeout);
if (!ret.IsSuccessful) return new(ret.Error);
return ret.Value;
@@ -381,7 +381,7 @@ public class RemoteUpdater
/// [TODO:return]
public async ValueTask> HotResetBitstream(int bitstreamNum)
{
- await MsgBus.UDPServer.ClearUDPData(this.address);
+ await MsgBus.UDPServer.ClearUDPData(this.address, 0);
logger.Trace("Clear udp data finished");
{
@@ -411,7 +411,7 @@ public class RemoteUpdater
byte[]? bitstream2,
byte[]? bitstream3)
{
- await MsgBus.UDPServer.ClearUDPData(this.address);
+ await MsgBus.UDPServer.ClearUDPData(this.address, 0);
logger.Trace("Clear udp data finished");
for (int bitstreamNum = 0; bitstreamNum < 4; bitstreamNum++)
@@ -462,7 +462,7 @@ public class RemoteUpdater
$"The length of data should be divided by 4096, bug given {bytesData.Length}", nameof(bytesData)));
var bitstreamBlockNum = bytesData.Length / (4 * 1024);
- await MsgBus.UDPServer.ClearUDPData(this.address);
+ await MsgBus.UDPServer.ClearUDPData(this.address, 0);
logger.Trace("Clear udp data finished");
{
@@ -538,11 +538,11 @@ public class RemoteUpdater
/// [TODO:return]
public async ValueTask> GetVersion()
{
- await MsgBus.UDPServer.ClearUDPData(this.address);
+ await MsgBus.UDPServer.ClearUDPData(this.address, 0);
logger.Trace("Clear udp data finished");
{
- var ret = await UDPClientPool.ReadAddr(this.ep, RemoteUpdaterAddr.Version, this.timeout);
+ var ret = await UDPClientPool.ReadAddr(this.ep, 0, RemoteUpdaterAddr.Version, this.timeout);
if (!ret.IsSuccessful) return new(ret.Error);
var retData = ret.Value.Options.Data;
diff --git a/server/src/UdpClientPool.cs b/server/src/UdpClientPool.cs
index 3e129fa..d04f221 100644
--- a/server/src/UdpClientPool.cs
+++ b/server/src/UdpClientPool.cs
@@ -184,14 +184,14 @@ public class UDPClientPool
/// [TODO:parameter]
/// [TODO:return]
public static async ValueTask> ReadAddr(
- IPEndPoint endPoint, uint devAddr, int timeout = 1000)
+ IPEndPoint endPoint, int taskID, uint devAddr, int timeout = 1000)
{
var ret = false;
var opts = new SendAddrPackOptions();
opts.BurstType = BurstType.FixedBurst;
opts.BurstLength = 0;
- opts.CommandID = 0;
+ opts.CommandID = Convert.ToByte(taskID);
opts.Address = devAddr;
// Read Jtag State Register
@@ -204,7 +204,7 @@ public class UDPClientPool
return new(new Exception("Message Bus not Working!"));
var retPack = await MsgBus.UDPServer.WaitForDataAsync(
- endPoint.Address.ToString(), endPoint.Port, timeout);
+ endPoint.Address.ToString(), taskID, endPoint.Port, timeout);
if (!retPack.IsSuccessful) return new(retPack.Error);
else if (!retPack.Value.IsSuccessful)
return new(new Exception("Send address package failed"));
@@ -226,11 +226,11 @@ public class UDPClientPool
/// [TODO:parameter]
/// [TODO:return]
public static async ValueTask> ReadAddr(
- IPEndPoint endPoint, uint devAddr, UInt32 result, UInt32 resultMask, int timeout = 1000)
+ IPEndPoint endPoint, int taskID, uint devAddr, UInt32 result, UInt32 resultMask, int timeout = 1000)
{
var address = endPoint.Address.ToString();
- var ret = await ReadAddr(endPoint, devAddr, timeout);
+ var ret = await ReadAddr(endPoint, taskID, devAddr, timeout);
if (!ret.IsSuccessful) return new(ret.Error);
if (!ret.Value.IsSuccessful)
return new(new Exception($"Read device {address} address {devAddr} failed"));
@@ -264,7 +264,7 @@ public class UDPClientPool
/// [TODO:parameter]
/// [TODO:return]
public static async ValueTask> ReadAddrWithWait(
- IPEndPoint endPoint, uint devAddr, UInt32 result, UInt32 resultMask, int timeout = 1000)
+ IPEndPoint endPoint, int taskID, uint devAddr, UInt32 result, UInt32 resultMask, int timeout = 1000)
{
var address = endPoint.Address.ToString();
@@ -277,7 +277,7 @@ public class UDPClientPool
try
{
- var ret = await ReadAddr(endPoint, devAddr, Convert.ToInt32(timeleft.TotalMilliseconds));
+ var ret = await ReadAddr(endPoint, taskID, devAddr, Convert.ToInt32(timeleft.TotalMilliseconds));
if (!ret.IsSuccessful) return new(ret.Error);
if (!ret.Value.IsSuccessful)
return new(new Exception($"Read device {address} address {devAddr} failed"));
@@ -312,14 +312,14 @@ public class UDPClientPool
/// [TODO:parameter]
/// [TODO:return]
public static async ValueTask> WriteAddr(
- IPEndPoint endPoint, UInt32 devAddr, UInt32 data, int timeout = 1000)
+ IPEndPoint endPoint, int taskID, UInt32 devAddr, UInt32 data, int timeout = 1000)
{
var ret = false;
var opts = new SendAddrPackOptions();
opts.BurstType = BurstType.FixedBurst;
opts.BurstLength = 0;
- opts.CommandID = 0;
+ opts.CommandID = Convert.ToByte(taskID);
opts.Address = devAddr;
// Write Jtag State Register
@@ -337,7 +337,7 @@ public class UDPClientPool
// Wait for Write Ack
var udpWriteAck = await MsgBus.UDPServer.WaitForAckAsync(
- endPoint.Address.ToString(), endPoint.Port, timeout);
+ endPoint.Address.ToString(), taskID, endPoint.Port, timeout);
if (!udpWriteAck.IsSuccessful) return new(udpWriteAck.Error);
return udpWriteAck.Value.IsSuccessful;
@@ -351,14 +351,15 @@ public class UDPClientPool
/// [TODO:parameter]
/// [TODO:parameter]
/// [TODO:return]
- public static async ValueTask> WriteAddr(IPEndPoint endPoint, UInt32 devAddr, byte[] dataArray, int timeout = 1000)
+ public static async ValueTask> WriteAddr(
+ IPEndPoint endPoint, int taskID, UInt32 devAddr, byte[] dataArray, int timeout = 1000)
{
var ret = false;
var opts = new SendAddrPackOptions();
opts.BurstType = BurstType.FixedBurst;
- opts.CommandID = 0;
+ opts.CommandID = Convert.ToByte(taskID);
opts.Address = devAddr;
// Check Msg Bus
@@ -389,7 +390,7 @@ public class UDPClientPool
if (!ret) return new(new Exception("Send data package failed!"));
// Wait for Write Ack
- var udpWriteAck = await MsgBus.UDPServer.WaitForAckAsync(endPoint.Address.ToString(), endPoint.Port, timeout);
+ var udpWriteAck = await MsgBus.UDPServer.WaitForAckAsync(endPoint.Address.ToString(), taskID, endPoint.Port, timeout);
if (!udpWriteAck.IsSuccessful) return new(udpWriteAck.Error);
if (!udpWriteAck.Value.IsSuccessful)
diff --git a/server/src/UdpServer.cs b/server/src/UdpServer.cs
index b9e933c..2de2feb 100644
--- a/server/src/UdpServer.cs
+++ b/server/src/UdpServer.cs
@@ -22,6 +22,11 @@ public class UDPData
/// 发送来源的端口号
///
public required int Port { get; set; }
+
+ ///
+ /// 任务ID
+ ///
+ public required int TaskID { get; set; }
///
/// 接受到的数据
///
@@ -44,6 +49,7 @@ public class UDPData
DateTime = this.DateTime,
Address = new string(this.Address),
Port = this.Port,
+ TaskID = this.TaskID,
Data = cloneData,
HasRead = this.HasRead
};
@@ -119,6 +125,7 @@ public class UDPServer
/// 异步寻找目标发送的内容
///
/// 目标IP地址
+ /// [TODO:parameter]
/// 超时时间
/// 延迟时间
/// 调用函数名称
@@ -129,13 +136,14 @@ public class UDPServer
/// Optional 存在时,为最先收到的数据
///
public async ValueTask> FindDataAsync(
- string ipAddr, int timeout = 1000, int cycle = 0,
+ string ipAddr, int taskID, int timeout = 1000, int cycle = 0,
[CallerMemberName] string callerName = "",
- [CallerLineNumber] int callerLineNum = 0)
+ [CallerLineNumber] int callerLineNum = 0
+ )
{
UDPData? data = null;
- logger.Debug($"Caller \"{callerName}|{callerLineNum}\": Try to find {ipAddr} UDP Data");
+ logger.Debug($"Caller \"{callerName}|{callerLineNum}\": Try to find {ipAddr}-{taskID} UDP Data");
var startTime = DateTime.Now;
var isTimeout = false;
@@ -149,8 +157,8 @@ public class UDPServer
timeleft = TimeSpan.FromMilliseconds(timeout) - elapsed;
using (await udpData.AcquireWriteLockAsync(timeleft))
{
- if (udpData.ContainsKey(ipAddr) &&
- udpData.TryGetValue(ipAddr, out var dataQueue) &&
+ if (udpData.ContainsKey($"{ipAddr}-{taskID}") &&
+ udpData.TryGetValue($"{ipAddr}-{taskID}", out var dataQueue) &&
dataQueue.Count > 0)
{
data = dataQueue.Dequeue();
@@ -177,10 +185,11 @@ public class UDPServer
/// 获取还未被读取的数据列表
///
/// IP地址
+ /// [TODO:parameter]
/// 超时时间
/// 延迟时间
/// 数据列表
- public async ValueTask>> GetDataArrayAsync(string ipAddr, int timeout = 1000, int cycle = 0)
+ public async ValueTask>> GetDataArrayAsync(string ipAddr, int taskID, int timeout = 1000, int cycle = 0)
{
List? data = null;
@@ -196,8 +205,8 @@ public class UDPServer
timeleft = TimeSpan.FromMilliseconds(timeout) - elapsed;
using (await udpData.AcquireReadLockAsync(timeleft))
{
- if (udpData.ContainsKey(ipAddr) &&
- udpData.TryGetValue(ipAddr, out var dataQueue) &&
+ if (udpData.ContainsKey($"{ipAddr}-{taskID}") &&
+ udpData.TryGetValue($"{ipAddr}-{taskID}", out var dataQueue) &&
dataQueue.Count > 0)
{
data = dataQueue.ToList();
@@ -226,9 +235,9 @@ public class UDPServer
/// 超时时间范围
/// 接收响应包
public async ValueTask> WaitForAckAsync
- (string address, int port = -1, int timeout = 1000)
+ (string address, int taskID, int port = -1, int timeout = 1000)
{
- var data = await FindDataAsync(address, timeout);
+ var data = await FindDataAsync(address, taskID, timeout);
if (!data.HasValue)
return new(new Exception("Get None even after time out!"));
@@ -251,9 +260,9 @@ public class UDPServer
/// 超时时间范围
/// 接收数据包
public async ValueTask> WaitForDataAsync
- (string address, int port = -1, int timeout = 1000)
+ (string address, int taskID, int port = -1, int timeout = 1000)
{
- var data = await FindDataAsync(address, timeout);
+ var data = await FindDataAsync(address, taskID, timeout);
if (!data.HasValue)
return new(new Exception("Get None even after time out!"));
@@ -284,7 +293,7 @@ public class UDPServer
// Handle Package
- var udpData = RecordUDPData(bytes, remoteEP);
+ var udpData = RecordUDPData(bytes, remoteEP, Convert.ToInt32(bytes[1]));
PrintData(udpData);
BEGIN_RECEIVE:
@@ -308,7 +317,7 @@ public class UDPServer
else { return false; }
}
- private UDPData RecordUDPData(byte[] bytes, IPEndPoint remoteEP)
+ private UDPData RecordUDPData(byte[] bytes, IPEndPoint remoteEP, int taskID)
{
var remoteAddress = remoteEP.Address.ToString();
var remotePort = remoteEP.Port;
@@ -316,6 +325,7 @@ public class UDPServer
{
Address = remoteAddress,
Port = remotePort,
+ TaskID = taskID,
Data = bytes,
DateTime = DateTime.Now,
HasRead = false,
@@ -324,7 +334,7 @@ public class UDPServer
using (udpData.AcquireWriteLock())
{
// Record UDP Receive Data
- if (udpData.ContainsKey(remoteAddress) && udpData.TryGetValue(remoteAddress, out var dataQueue))
+ if (udpData.ContainsKey($"{remoteAddress}-{taskID}") && udpData.TryGetValue(remoteAddress, out var dataQueue))
{
dataQueue.Enqueue(data);
logger.Trace("Receive data from old client");
@@ -333,7 +343,7 @@ public class UDPServer
{
var queue = new Queue();
queue.Enqueue(data);
- udpData.Add(remoteAddress, queue);
+ udpData.Add($"{remoteAddress}-{taskID}", queue);
logger.Trace("Receive data from new client");
}
}
@@ -410,12 +420,12 @@ public class UDPServer
///
/// IP地址
/// 无
- public async Task ClearUDPData(string ipAddr)
+ public async Task ClearUDPData(string ipAddr, int taskID)
{
using (await udpData.AcquireWriteLockAsync())
{
- if (udpData.ContainsKey(ipAddr) &&
- udpData.TryGetValue(ipAddr, out var dataQueue) &&
+ if (udpData.ContainsKey($"{ipAddr}-{taskID}") &&
+ udpData.TryGetValue($"{ipAddr}-{taskID}", out var dataQueue) &&
dataQueue.Count > 0)
{
dataQueue.Clear();
diff --git a/src/components/equipments/DDSPropertyEditor.vue b/src/components/equipments/DDSPropertyEditor.vue
index fab32cf..1586005 100644
--- a/src/components/equipments/DDSPropertyEditor.vue
+++ b/src/components/equipments/DDSPropertyEditor.vue
@@ -409,7 +409,7 @@ async function applyOutputWave() {
eqps.boardPort,
0,
currentWaveformIndex.value,
- toInteger(frequency.value * Math.pow(2, 32 - 20)),
+ toInteger((frequency.value * Math.pow(2, 32 - 20)) / 10),
);
if (!ret) {
dialog.error("应用失败");