|
@@ -1,115 +0,0 @@
|
|
|
-using System;
|
|
|
-using System.Collections.Generic;
|
|
|
-using System.IO;
|
|
|
-using System.Linq;
|
|
|
-using System.Runtime.InteropServices;
|
|
|
-using System.Text;
|
|
|
-using System.Threading.Tasks;
|
|
|
-
|
|
|
-namespace Leo1SatTaskServer54
|
|
|
-{
|
|
|
- static class SlotHelper
|
|
|
- {
|
|
|
- #region cpp dll Interop
|
|
|
- private const string slotDll = @"AddIns\时隙获取\SlotChecker.dll";
|
|
|
-
|
|
|
- [DllImport(slotDll, EntryPoint = "getslots", CallingConvention = CallingConvention.Cdecl)]
|
|
|
- private extern static int GetFileSlots(string file, byte[] fileTime, ref float frequenceM, ref float fsampleM,
|
|
|
- ref int multi, ref int slotscount, out IntPtr slotst, out IntPtr slotle);
|
|
|
-
|
|
|
- [DllImport(slotDll, EntryPoint = "freeslots", CallingConvention = CallingConvention.Cdecl)]
|
|
|
- private extern static void Free(IntPtr slotst, IntPtr slotle);
|
|
|
- #endregion
|
|
|
-
|
|
|
- public static SlotsInfo GetFileSlots(string file)
|
|
|
- {
|
|
|
- SlotsInfo res = new SlotsInfo();
|
|
|
- string name = Path.GetFileName(file);
|
|
|
- res.FreqDownMHz = Convert.ToDouble(name.Split(new string[] { "_", "MHz" }, StringSplitOptions.RemoveEmptyEntries)[1]);
|
|
|
- byte[] timeData = new byte[6];
|
|
|
- float frequenceM = 0, fsampleM = 0;
|
|
|
- int multi = 0, slotscount = 0;
|
|
|
- IntPtr slotst, slotle;
|
|
|
- var ret = GetFileSlots(file, timeData, ref frequenceM, ref fsampleM, ref multi, ref slotscount, out slotst, out slotle);
|
|
|
- if (ret == 0)
|
|
|
- {
|
|
|
- res.FrequenceM = (float)((long)((decimal)frequenceM * 1000000) / 1e6);
|
|
|
- res.FsampleM = fsampleM;
|
|
|
- res.Multi = multi;
|
|
|
- res.AdTime = new DateTime(2000 + timeData[0], timeData[1], timeData[2], timeData[3], timeData[4], timeData[5]);
|
|
|
- float[] startsF = new float[slotscount];
|
|
|
- float[] lenF = new float[slotscount];
|
|
|
- Marshal.Copy(slotst, startsF, 0, slotscount);
|
|
|
- Marshal.Copy(slotle, lenF, 0, slotscount);
|
|
|
- for (int i = 0; i < slotscount; i++)
|
|
|
- {
|
|
|
- Slot s = new Slot()
|
|
|
- {
|
|
|
- StartPoint = (int)(fsampleM * 1e6 / multi * startsF[i]),
|
|
|
- TimeSeconds = startsF[i],
|
|
|
- Len = (int)(fsampleM * 1e6 / multi * lenF[i] * 1e-3)
|
|
|
- };
|
|
|
- res.Slots.Add(s);
|
|
|
- }
|
|
|
- }
|
|
|
- Free(slotst, slotle);
|
|
|
- return res;
|
|
|
- }
|
|
|
- }
|
|
|
- /// <summary>
|
|
|
- /// 突发信息
|
|
|
- /// </summary>
|
|
|
- class SlotsInfo
|
|
|
- {
|
|
|
- /// <summary>
|
|
|
- /// 采集时刻
|
|
|
- /// </summary>
|
|
|
- public DateTime AdTime { get; set; }
|
|
|
-
|
|
|
- /// <summary>
|
|
|
- /// 信号下行频点MHz
|
|
|
- /// </summary>
|
|
|
- public double FreqDownMHz { get; set; }
|
|
|
-
|
|
|
- /// <summary>
|
|
|
- /// AD采样率
|
|
|
- /// </summary>
|
|
|
- public float FsampleM { get; set; }
|
|
|
-
|
|
|
- /// <summary>
|
|
|
- /// 信号下行频点
|
|
|
- /// </summary>
|
|
|
- public float FrequenceM { get; set; }
|
|
|
-
|
|
|
- /// <summary>
|
|
|
- /// 抽取倍数
|
|
|
- /// </summary>
|
|
|
- public float Multi { get; set; }
|
|
|
-
|
|
|
- /// <summary>
|
|
|
- /// 时隙位置集合
|
|
|
- /// </summary>
|
|
|
- public List<Slot> Slots { get; set; } = new List<Slot>();
|
|
|
- }
|
|
|
-
|
|
|
- /// <summary>
|
|
|
- /// 时隙信息
|
|
|
- /// </summary>
|
|
|
- class Slot
|
|
|
- {
|
|
|
- /// <summary>
|
|
|
- /// 起始样点
|
|
|
- /// </summary>
|
|
|
- public int StartPoint { get; set; }
|
|
|
-
|
|
|
- /// <summary>
|
|
|
- /// 结束样点
|
|
|
- /// </summary>
|
|
|
- public int Len { get; set; }
|
|
|
-
|
|
|
- /// <summary>
|
|
|
- /// 时间的秒数,避免误差
|
|
|
- /// </summary>
|
|
|
- public float TimeSeconds { get; set; }
|
|
|
- }
|
|
|
-}
|