Пример #1
0
 /// <summary>
 /// Handles the audio/video observer event.
 /// </summary>
 /// <param name="pidType">Type of the pid</param>
 protected void OnAudioVideoEvent(PidType pidType)
 {
     if (AudioVideoEvent != null)
     {
         AudioVideoEvent(pidType);
     }
 }
Пример #2
0
 /// <summary>
 /// Handles the audio/video observer event.
 /// </summary>
 /// <param name="pidType">Type of the pid</param>
 protected void OnAudioVideoEvent(PidType pidType)
 {
   if (AudioVideoEvent != null)
   {
     AudioVideoEvent(pidType);
   }
 }
Пример #3
0
        public IMessage TryParse(string line)
        {
            try
            {
                var elements = line.Split(' ');

                if (!elements[0].Equals(MessageHeader))
                {
                    return(null);
                }

                PidType pidType = elements[1].ToPidType();

                float p    = float.Parse(elements[2]);
                float i    = float.Parse(elements[3]);
                float d    = float.Parse(elements[4]);
                float maxI = float.Parse(elements[5]);

                return(new ReceivedPidMessage(pidType, p, i, d, maxI));
            }
            catch (Exception)
            {
                return(null);
            }
        }
Пример #4
0
        public static string FormatToString(this PidType pidType)
        {
            switch (pidType)
            {
            case PidType.StabilizeRoll:
                return("A");

            case PidType.StabilizePitch:
                return("B");

            case PidType.StabilizeYaw:
                return("C");

            case PidType.RateRoll:
                return("D");

            case PidType.RatePitch:
                return("E");

            case PidType.RateYaw:
                return("F");

            default:
                return("?");
            }
        }
Пример #5
0
 public SavePidMessage(PidType pidType, float p, float i, float d, float maxI)
 {
     this.pidType = pidType;
     this.p       = p;
     this.i       = i;
     this.d       = d;
     this.maxI    = maxI;
 }
Пример #6
0
        public IPidRegulator Create(string key, PidType type = PidType.Standard)
        {
            _logger?.LogDebug($"Create new PID Regulator with key:{key}, from type: {type}");
            PidRegulatorSetting opt = _setting.GetBinding <PidRegulatorSetting>(key);

            return(type switch
            {
                PidType.Standard => new StandardPidRegulator(opt, key),
                PidType.Ideal => new IdealPidRegulator(opt, key),
                _ => throw new NotSupportedException($"PID Type {type.ToString()} is unsupported."),
            });
Пример #7
0
 /// <summary>
 /// Called when tswriter.ax has seen the video / audio data for the first time
 /// </summary>
 /// <returns></returns>
 public int OnNotify(PidType pidType)
 {
     try
     {
         Log.Log.WriteFile("PID seen - type = {0}", pidType);
         OnAudioVideoEvent(pidType);
     }
     catch (Exception ex)
     {
         Log.Log.Write(ex);
     }
     return(0);
 }
Пример #8
0
        public void UpdatePid(PidType type, PidObj pid)
        {
            byte[] buffer = new byte[1 + 1 + (3 * BinaryHelper.SIZE_FLOAT) + 1];
            int    i      = 0;

            buffer[i++] = (byte)'P';
            buffer[i++] = PidTypeToCode(type);
            BinaryHelper.WriteFloat(pid.P, buffer, ref i);
            BinaryHelper.WriteFloat(pid.I, buffer, ref i);
            BinaryHelper.WriteFloat(pid.D, buffer, ref i);
            buffer[i++] = BinaryHelper.ComputeChecksumCRC8(buffer, 1, buffer.Length - 1);
            SendRequest(buffer, i);
        }
Пример #9
0
        protected override void AudioVideoEventHandler(PidType pidType)
        {
            Log.Debug("Recorder audioVideoEventHandler {0}", pidType);

            // we are only interested in video and audio PIDs
            if (pidType == PidType.Audio)
            {
                _eventAudio.Set();
            }

            if (pidType == PidType.Video)
            {
                _eventVideo.Set();
            }
        }
Пример #10
0
    protected override void AudioVideoEventHandler(PidType pidType)
    {
      Log.Debug("Recorder audioVideoEventHandler {0}", pidType);

      // we are only interested in video and audio PIDs
      if (pidType == PidType.Audio)
      {
        _eventAudio.Set();
      }

      if (pidType == PidType.Video)
      {
        _eventVideo.Set();
      }
    }
Пример #11
0
        private byte PidTypeToCode(PidType type)
        {
            switch (type)
            {
            case PidType.Yaw:
                return((byte)'y');

            case PidType.Pitch:
                return((byte)'p');

            case PidType.Roll:
                return((byte)'r');

            default:
                throw new Exception("Unhandled pid type '" + type + "'");
            }
        }
        protected override void AudioVideoEventHandler(PidType pidType)
        {
            if (_tuneInProgress)
            {
                Log.Info("audioVideoEventHandler - tune in progress");
                return;
            }

            // we are only interested in video and audio PIDs
            if (pidType == PidType.Audio)
            {
                TimeSpan ts = DateTime.Now - _timeAudioEvent;
                if (ts.TotalMilliseconds > 1000)
                {
                    // Avoid repetitive events that are kept for next channel change, so trig only once.
                    Log.Info("audioVideoEventHandler {0}", pidType);
                    _eventAudio.Set();
                }
                else
                {
                    Log.Info("audio last seen at {0}", _timeAudioEvent);
                }
                _timeAudioEvent = DateTime.Now;
            }

            if (pidType == PidType.Video)
            {
                TimeSpan ts = DateTime.Now - _timeVideoEvent;
                if (ts.TotalMilliseconds > 1000)
                {
                    // Avoid repetitive events that are kept for next channel change, so trig only once.
                    Log.Info("audioVideoEventHandler {0}", pidType);
                    _eventVideo.Set();
                }
                else
                {
                    Log.Info("video last seen at {0}", _timeVideoEvent);
                }
                _timeVideoEvent = DateTime.Now;
            }
        }
Пример #13
0
 protected abstract void AudioVideoEventHandler(PidType pidType);
Пример #14
0
 private byte PidTypeToCode(PidType type)
 {
     switch (type)
     {
         case PidType.Yaw:
             return (byte)'y';
         case PidType.Pitch:
             return (byte)'p';
         case PidType.Roll:
             return (byte)'r';
         default:
             throw new Exception("Unhandled pid type '" + type + "'");
     }
 }
Пример #15
0
 public void UpdatePid(PidType type, PidObj pid)
 {
     byte[] buffer = new byte[1 + 1 + (3 * BinaryHelper.SIZE_FLOAT) + 1];
     int i = 0;
     buffer[i++] = (byte)'P';
     buffer[i++] = PidTypeToCode(type);
     BinaryHelper.WriteFloat(pid.P, buffer, ref i);
     BinaryHelper.WriteFloat(pid.I, buffer, ref i);
     BinaryHelper.WriteFloat(pid.D, buffer, ref i);
     buffer[i++] = BinaryHelper.ComputeChecksumCRC8(buffer, 1, buffer.Length - 1);
     SendRequest(buffer, i);
 }
Пример #16
0
 public PidController(PidType type)
 {
     _type = type;
     _max  = type == PidType.Gyro ? GyroClampMax : ThrusterClampMax;
     _min  = type == PidType.Gyro ? GyroClampMin : ThrusterClampMin;
 }
Пример #17
0
    protected override void AudioVideoEventHandler(PidType pidType)
    {
      if (_tuneInProgress)
      {
        Log.Info("audioVideoEventHandler - tune in progress");
        return;
      }

      // we are only interested in video and audio PIDs
      if (pidType == PidType.Audio)
      {
        TimeSpan ts = DateTime.Now - _timeAudioEvent;
        if (ts.TotalMilliseconds > 1000)
        {
          // Avoid repetitive events that are kept for next channel change, so trig only once.
          Log.Info("audioVideoEventHandler {0}", pidType);
          _eventAudio.Set();
        }
        else
        {
          Log.Info("audio last seen at {0}", _timeAudioEvent);
        }
        _timeAudioEvent = DateTime.Now;
      }

      if (pidType == PidType.Video)
      {
        TimeSpan ts = DateTime.Now - _timeVideoEvent;
        if (ts.TotalMilliseconds > 1000)
        {
          // Avoid repetitive events that are kept for next channel change, so trig only once.
          Log.Info("audioVideoEventHandler {0}", pidType);
          _eventVideo.Set();
        }
        else
        {
          Log.Info("video last seen at {0}", _timeVideoEvent);
        }
        _timeVideoEvent = DateTime.Now;
      }
    }
Пример #18
0
 /// <summary>
 /// Called when tswriter.ax has seen the video / audio data for the first time
 /// </summary>
 /// <returns></returns>
 public int OnNotify(PidType pidType)
 {
   try
   {
     Log.Log.WriteFile("PID seen - type = {0}", pidType);
     OnAudioVideoEvent(pidType);
   }
   catch (Exception ex)
   {
     Log.Log.Write(ex);
   }
   return 0;
 }
 protected abstract void AudioVideoEventHandler(PidType pidType);