123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132 |
- using System;
- using System.Collections.Generic;
- using System.Linq;
- using System.Text;
- using System.Threading.Tasks;
- namespace Uestc.Auto6.Dso.Hardware.Driver
- {
- internal class FpgaVersion
- {
- public int MaxNum
- {
- get;
- set;
- }
- public int SubNum
- {
- get;
- set;
- }
- public int MinNum
- {
- get;
- set;
- }
- public string Designer
- {
- get;
- set;
- } = "";
- public string Comment
- {
- get;
- set;
- } = "";
- public DateTime BuildTime
- {
- get;
- set;
- }
- public string BuildTimeString
- {
- get
- {
- return BuildTime.Year + "-" + BuildTime.Month.ToString().PadLeft(2, '0') + "-"+BuildTime.Day.ToString().PadLeft(2, '0') + " " + BuildTime.Hour.ToString().PadLeft(2, '0') + ":" + BuildTime.Minute.ToString().PadLeft(2, '0') + ":" + BuildTime.Second.ToString().PadLeft(2, '0');
- }
- }
- public override string ToString()
- {
- return $"[Version:{MaxNum}.{SubNum}.{MinNum},CompileTime={BuildTimeString},Designer={Designer},Comment={Comment}]";
- }
- internal static bool ReadFPGAVersion(FpgaVersionRegs regs, ref FpgaVersion fpgaVersion)
- {
- int findFirstZeroPos(byte[] source)
- {
- for (int i = 0; i < source.Length; i++)
- {
- if (source[i] == 0)
- return i;
- }
- return source.Length;
- }
- #region 编译时间
- Int64 readBackCompileTime = 0;
- readBackCompileTime = HdIO.ReadReg(regs.CompileTime_H16);
- readBackCompileTime <<= 16;
- readBackCompileTime |= HdIO.ReadReg(regs.CompileTime_L16);
- if (readBackCompileTime == 0)
- return false;
- DateTime compileTime = new DateTime(1970, 1, 1, 0, 0, 0);
- compileTime = compileTime.AddSeconds(readBackCompileTime);
- compileTime = TimeZoneInfo.ConvertTimeFromUtc(compileTime, TimeZoneInfo.Local);
- fpgaVersion.BuildTime = compileTime;
- #endregion
- #region version
- UInt32 readBackVersion = 0;
- readBackVersion = HdIO.ReadReg(regs.VerionNo_H16);
- readBackVersion <<= 16;
- readBackVersion |= HdIO.ReadReg(regs.VerionNo_L16);
- fpgaVersion.MinNum = (Int32)(readBackVersion & 0xffff);
- fpgaVersion.SubNum = (Int32)(readBackVersion >> 16 & 0xff);
- fpgaVersion.MaxNum = (Int32)(readBackVersion >> 24 & 0xff);
- #endregion
- #region designer
- UInt16[] readBackDesigner = new UInt16[4];
- for (int i = 0; i < 4; i++)
- readBackDesigner[i] = (UInt16)HdIO.ReadReg(regs.Designer_Words[i]);
- byte[] bytesDesigner = new byte[8];
- Buffer.BlockCopy(readBackDesigner, 0, bytesDesigner, 0, 8);
- byte[] bytesDesigner2 = bytesDesigner.Reverse<byte>().ToArray();
- int firstZeroPos = findFirstZeroPos(bytesDesigner2);
- fpgaVersion.Designer = System.Text.Encoding.UTF8.GetString(bytesDesigner2, 0, firstZeroPos);
- #endregion
- #region comment
- UInt16[] readbackComment = new ushort[16];
- for (int i = 0; i < 16; i++)
- readbackComment[i] = (UInt16)HdIO.ReadReg(regs.Comment_Words[i]);
- byte[] bytesComment = new byte[16 * 2];
- Buffer.BlockCopy(readbackComment, 0, bytesComment, 0, 16 * 2);
- byte[] bytesComment2 = bytesComment.Reverse<byte>().ToArray();
- firstZeroPos = findFirstZeroPos(bytesComment2);
- fpgaVersion.Comment = System.Text.Encoding.UTF8.GetString(bytesComment2, 0, firstZeroPos);
- #endregion
- return true;
- }
- public static string GetAllFPGAVersionInfo()
- {
- StringBuilder stringBuilder = new StringBuilder();
- stringBuilder.AppendLine($"[PCIE_Board]:{ Hd.currProduct?.PcieBd?.FpgaVersion?.ToString()}");
- stringBuilder.AppendLine($"[S6_Board]:{ Hd.currProduct?.S6Bd?.FpgaVersion?.ToString()}");
- stringBuilder.AppendLine($"[Process_Board]:{ Hd.currProduct?.ProcBd?.FpgaVersion?.ToString()}");
- for (int fpgaIndex = 0; fpgaIndex < AbstractAcqBd.FPGATotalCount; fpgaIndex++)
- {
- FpgaVersion? fpgaVersion = Hd.currProduct?.AcqBd?.GetFpgaVersion(fpgaIndex)??null;
- if (fpgaVersion != null)
- stringBuilder.AppendLine($"[Acq_Board{fpgaIndex + 1}]:{fpgaVersion.ToString()}");
- }
- return stringBuilder.ToString();
- }
- }
- internal record FpgaVersionRegs(
- UInt32 CompileTime_L16, UInt32 CompileTime_H16,
- UInt32 VerionNo_L16, UInt32 VerionNo_H16,
- UInt32[/*4*/] Designer_Words,
- UInt32[/*16*/] Comment_Words);
- }
|