/// <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); } }
/// <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); } }
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); } }
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("?"); } }
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; }
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."), });
/// <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); }
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); }
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(); } }
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(); } }
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; } }
protected abstract void AudioVideoEventHandler(PidType pidType);
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 + "'"); } }
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); }
public PidController(PidType type) { _type = type; _max = type == PidType.Gyro ? GyroClampMax : ThrusterClampMax; _min = type == PidType.Gyro ? GyroClampMin : ThrusterClampMin; }
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; } }
/// <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);