VectorAnalysisPrsnt.cs 4.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122
  1. // Copyright (c) UESTC. All Rights Reserved
  2. // <author>QC</author>
  3. // <date>2022/4/11</date>
  4. namespace Uestc.Auto6.Dso.Core.Vsa
  5. {
  6. using System;
  7. using Uestc.Auto6.Dso.ComModel;
  8. public class VectorAnalysisPrsnt : MulticastPrsnt<IVsaView>, IVsaPrsnt
  9. {
  10. public VectorAnalysisPrsnt(IVsaView? view, ModelCreateOptions mco = ModelCreateOptions.Dependant)
  11. {
  12. Model = mco switch
  13. {
  14. ModelCreateOptions.Dependant => DsoModel.Default.VectorAnalysisModel,
  15. ModelCreateOptions.Standalone => new(),
  16. _ => throw new ArgumentException($"Argument '{nameof(mco)}' can not assign to '{nameof(ModelCreateOptions.InitializedByChild)}'."),
  17. };
  18. Model.PropertyChanged += OnPropertyChanged;
  19. if (view != null)
  20. {
  21. view.Presenter = this;
  22. TryAddView(view);
  23. }
  24. }
  25. public Int32 BitsPerSym { get => Model.BitsPerSym; set => Model.BitsPerSym = value; }
  26. public Boolean Enabled { get => Model.Enabled; set => Model.Enabled = value; }
  27. public VsaItplOpt Interpolation { get => Model.Interpolation; set => Model.Interpolation = value; }
  28. public Int32 MaxBitsPerSym => Model.MaxBitsPerSym;
  29. public Int32 MaxSampPerBaud => Model.MaxSampPerBaud;
  30. public Double MaxSymbolRate => Model.MaxSymbolRate;
  31. public Int32 MinBitsPerSym => Model.MinBitsPerSym;
  32. public Int32 MinSampPerBaud => Model.MinSampPerBaud;
  33. public Double MinSymbolRate => Model.MinSymbolRate;
  34. public VsaFormatOpt Format { get => Model.Format; set => Model.Format = value; }
  35. public Int32 SampPerBaud { get => Model.SampPerBaud; set => Model.SampPerBaud = value; }
  36. public ChannelId Source { get => Model.Source; set => Model.Source = value; }
  37. public ChannelId Source2nd { get => Model.Source2nd; set => Model.Source2nd = value; }
  38. public Double SymbolRate { get => Model.SymbolRate; set => Model.SymbolRate = value; }
  39. public VsaTemplateOpt Template { get => Model.Template; set => Model.Template = value; }
  40. public VsaTimingEstOpt TimingEst { get => Model.TimingEst; set => Model.TimingEst = value; }
  41. private protected override VectorAnalysisModel Model { get; }
  42. private DspNodePrsnt MakeNode(VsaNodeTypeOpt type)
  43. {
  44. return type switch
  45. {
  46. VsaNodeTypeOpt.Mixer => new MixerNodePrsnt(this, Model.MakeMixerNode()),
  47. VsaNodeTypeOpt.Filter => new FilterNodePrsnt(this, Model.MakeFilterNode()),
  48. VsaNodeTypeOpt.Equalizer => new EqualizerNodePrsnt(this, Model.MakeEqualizerNode()),
  49. VsaNodeTypeOpt.DCBlock => new DCBlockNodePrsnt(this, Model.MakeDCBlockNode()),
  50. VsaNodeTypeOpt.CarrierEst => new CarrierEstNodePrsnt(this, Model.MakeCarrierEstNode()),
  51. VsaNodeTypeOpt.PhaseEst => new PhaseEstNodePrsnt(this, Model.MakePhaseEstNode()),
  52. VsaNodeTypeOpt.Custom => new CustomNodePrsnt(this, Model.MakeCustomNode()),
  53. _ => new NoOpNodePrsnt(this, Model.MakeNoOpNode()),
  54. };
  55. }
  56. public DspNodePrsnt? GetNode(Int32 index)
  57. {
  58. var node = Model.GetNode(index);
  59. return node?.NodeType switch
  60. {
  61. VsaNodeTypeOpt.NoOp => new NoOpNodePrsnt(this, (NoOpNode)node),
  62. VsaNodeTypeOpt.Mixer => new MixerNodePrsnt(this, (MixerNode)node),
  63. VsaNodeTypeOpt.Filter => new FilterNodePrsnt(this, (FilterNode)node),
  64. VsaNodeTypeOpt.Equalizer => new EqualizerNodePrsnt(this, (EqualizerNode)node),
  65. VsaNodeTypeOpt.DCBlock => new DCBlockNodePrsnt(this, (DCBlockNode)node),
  66. VsaNodeTypeOpt.CarrierEst => new CarrierEstNodePrsnt(this, (CarrierEstNode)node),
  67. VsaNodeTypeOpt.PhaseEst => new PhaseEstNodePrsnt(this, (PhaseEstNode)node),
  68. VsaNodeTypeOpt.Custom => new CustomNodePrsnt(this, (CustomNode)node),
  69. _ => null,
  70. };
  71. }
  72. public DspNodePrsnt? SetCustomNode(Int32 index, VsaNodeTypeOpt type)
  73. {
  74. var node = Model.GetNode(index);
  75. if (node?.NodeType != type)
  76. {
  77. var dnp = MakeNode(type);
  78. Model.SetNode(index, dnp.Model);
  79. return dnp;
  80. }
  81. return null;
  82. }
  83. public DspNodePrsnt? AddCustomNode(VsaNodeTypeOpt type = VsaNodeTypeOpt.NoOp)
  84. {
  85. if (Model.Count < 8)
  86. {
  87. var dnp = MakeNode(type);
  88. Model.AddNode(dnp.Model);
  89. return dnp;
  90. }
  91. return null;
  92. }
  93. public void RemoveCustomNodeAt(Int32 index) => Model.RemoveNodeAt(index);
  94. }
  95. }