// // Copyright (c) Adrian Conlon. All rights reserved. // namespace EightBit { public class Device { private PinLevel _powerLine; public event EventHandler? RaisingPOWER; public event EventHandler? RaisedPOWER; public event EventHandler? LoweringPOWER; public event EventHandler? LoweredPOWER; public bool Powered => this.POWER.Raised(); public ref PinLevel POWER => ref this._powerLine; [System.Diagnostics.CodeAnalysis.SuppressMessage("Design", "CA1030:Use events where appropriate", Justification = "The word 'raise' is used in an electrical sense")] public virtual void RaisePOWER() { if (this.POWER.Lowered()) { this.OnRaisingPOWER(); this.POWER.Raise(); this.OnRaisedPOWER(); } } public virtual void LowerPOWER() { if (this.POWER.Raised()) { this.OnLoweringPOWER(); this.POWER.Lower(); this.OnLoweredPOWER(); } } protected virtual void OnRaisingPOWER() => RaisingPOWER?.Invoke(this, EventArgs.Empty); protected virtual void OnRaisedPOWER() => RaisedPOWER?.Invoke(this, EventArgs.Empty); protected virtual void OnLoweringPOWER() => LoweringPOWER?.Invoke(this, EventArgs.Empty); protected virtual void OnLoweredPOWER() => LoweredPOWER?.Invoke(this, EventArgs.Empty); } }