public SerialSignal GetSignals() { uint flags; if (!GetCommModemStatus(handle, out flags)) { ReportIOError(null); } SerialSignal signals = SerialSignal.None; if ((flags & RsldOn) != 0) { signals |= SerialSignal.Cd; } if ((flags & CtsOn) != 0) { signals |= SerialSignal.Cts; } if ((flags & DsrOn) != 0) { signals |= SerialSignal.Dsr; } return(signals); }
public void SetSignal(SerialSignal signal, bool value) { if (signal != SerialSignal.Rts && signal != SerialSignal.Dtr) { throw new Exception("Wrong internal value"); } uint flag; if (signal == SerialSignal.Rts) { if (value) { flag = SetRts; } else { flag = ClearRts; } } else if (value) { flag = SetDtr; } else { flag = ClearDtr; } if (!EscapeCommFunction(handle, flag)) { ReportIOError(null); } }
public SerialSignal GetSignals() { int error; SerialSignal signals = get_signals(fd, out error); if (error == -1) { ThrowIOException(); } return(signals); }
public void SetSignal(SerialSignal signal, bool value) { if (signal < SerialSignal.Cd || signal > SerialSignal.Rts || signal == SerialSignal.Cd || signal == SerialSignal.Cts || signal == SerialSignal.Dsr) { throw new Exception("Invalid internal value"); } if (set_signal(fd, signal, value) == -1) { ThrowIOException(); } }
public void SetSignal(SerialSignal signal, bool value) { if (signal < SerialSignal.Cd || signal > SerialSignal.Rts || signal == SerialSignal.Cd || signal == SerialSignal.Cts || signal == SerialSignal.Dsr) throw new Exception("Invalid internal value"); if (set_signal(fd, signal, value) == -1) ThrowIOException(); }
static extern int set_signal(int fd, SerialSignal signal, bool value);
static int set_signal (int fd, SerialSignal signal, bool value) { throw new System.NotImplementedException(); }
//step back protected override void NotifyBack(IColorable from, SerialSignal signal) { if (from != Output && from!=this) return; if (!SignalIfCan()) return; Signal = signal; base.NotifyBack(this, signal); InvokeOnNotifyBack(); SplitNotify(Input,signal); }
public void SetSignal (SerialSignal signal, bool value) { if (signal != SerialSignal.Rts && signal != SerialSignal.Dtr) throw new Exception ("Wrong internal value"); uint flag; if (signal == SerialSignal.Rts) if (value) flag = SetRts; else flag = ClearRts; else if (value) flag = SetDtr; else flag = ClearDtr; if (!EscapeCommFunction (handle, flag)) ReportIOError (null); }
/* public override IEnumerable<KeyValuePair<GraphNode, int>> GetNextNodes() { var connections = GetAllConnections(); return connections.Select(connection => { if (connection == null || connection.To == null || connection.To.Parent == null) return new KeyValuePair<GraphNode, int>(null,0); return new KeyValuePair<GraphNode, int>(connection.To.Parent,connection.Length); }).Where(graphNode => graphNode.Key != null); }*/ // private readonly List<IColorable> _zeroSignalConnections = new List<IColorable>(); protected override void NotifyBack(IColorable from, SerialSignal signal) { signal.StopSending(); Connections.Filter(from); }
static int set_signal(int fd, SerialSignal signal, bool value) { throw new System.NotImplementedException(); }
private void SplitNotify(IEnumerable<IColorable> connections, SerialSignal signal) { var colorables = connections as IColorable[] ?? connections.ToArray(); var splitSignal = signal.Split(colorables.Count()); int i = 0; foreach (var connection in colorables) { var signali = splitSignal[i]; if (connection == null) { signal.StopSending(); continue; } IColorable connection1 = connection; new Thread( () => connection1.NotifyBack(this, signali) ) { IsBackground = true }.Start(); i++; } splitSignal.WaitForAll(); Signal.StopSending(); }
protected override void NotifyBack(IColorable from, SerialSignal signal) { Signalled = true; System.Diagnostics.Debug.WriteLine(String.Format("\tSerial Signalling {0} ({1}, color={2})", signal, ToString(), CurrentColor == null ? "null" : CurrentColor.ToStringDemuxed())); }
protected virtual void Clear() { Signal = null; CurrentColor = null; Flowed = false; Signalled = false; }
protected abstract void NotifyBack(IColorable from, SerialSignal signal);
/// <summary> /// We finished or failed - send result to all preceding colorables. But current have to be last. /// </summary> /// <param name="from"></param> /// <param name="signal"></param> protected override void NotifyBack(IColorable from, SerialSignal signal) { if (!SignalIfCan()) return; Signal = signal; base.NotifyBack(from, signal); List<IColorable> currentColor = new List<IColorable>(); List<IColorable> otherColor = new List<IColorable>(); foreach (var connection in Connections.NotFiltered) { if (connection==null) continue; if (connection.GetCurrentColor() == CurrentColor) currentColor.Add(connection); else otherColor.Add(connection); } SplitNotify(otherColor,signal); SplitNotify(currentColor, signal); InvokeOnNotifyBack(); }
protected override void NotifyBack(IColorable @from, SerialSignal signal) { if (SignalIfCan()) { Signal = signal; base.NotifyBack(from, signal); InvokeOnNotifyBack(); From.NotifyBack(this, signal); } }
static extern int set_signal(int fd, SerialSignal signal, bool value);
//step back protected override void NotifyBack(IColorable from, SerialSignal signal) { if (!(from is OutPoint) && from!=this) // return; lock (this) { if( Output.IsFiltered(from)) return; } //Signal == true; signal.StopSending(); Output.Filter(from); //if signal==true - we have to signal, otherwise we just need to find other output; if (from == CurrentPath) { FlowResult(); } if (!SignalIfCan()) return; Signal = signal; Output.Filter(from); base.NotifyBack(this, signal); InvokeOnNotifyBack(); Input.NotifyBack(this, signal); }