1 // 2 // Copyright (c) 2010-2022 Antmicro 3 // 4 // This file is licensed under the MIT License. 5 // Full license text is available in 'licenses/MIT.txt'. 6 // 7 8 using System.Linq; 9 using Antmicro.Renode.Core; 10 using Antmicro.Renode.Time; 11 12 namespace Antmicro.Renode.UserInterface 13 { 14 // this class provides extension methods for monitor only! 15 public static class MonitorTimeExtensions 16 { SetAdvanceImmediately(this Machine @this, bool val)17 public static void SetAdvanceImmediately(this Machine @this, bool val) 18 { 19 @this.LocalTimeSource.AdvanceImmediately = val; 20 } 21 SetQuantum(this Machine @this, TimeInterval interval)22 public static void SetQuantum(this Machine @this, TimeInterval interval) 23 { 24 @this.LocalTimeSource.Quantum = interval; 25 } 26 GetTimeSourceInfo(this Machine @this)27 public static string GetTimeSourceInfo(this Machine @this) 28 { 29 return @this.LocalTimeSource.ToString(); 30 } 31 SetAdvanceImmediately(this Emulation @this, bool val)32 public static void SetAdvanceImmediately(this Emulation @this, bool val) 33 { 34 @this.MasterTimeSource.AdvanceImmediately = val; 35 } 36 SetQuantum(this Emulation @this, TimeInterval interval)37 public static void SetQuantum(this Emulation @this, TimeInterval interval) 38 { 39 @this.MasterTimeSource.Quantum = interval; 40 } 41 SetGlobalQuantum(this Emulation @this, TimeInterval quantum)42 public static void SetGlobalQuantum(this Emulation @this, TimeInterval quantum) 43 { 44 SetQuantumRecursively(@this.MasterTimeSource, quantum); 45 } 46 SetGlobalAdvanceImmediately(this Emulation @this, bool val)47 public static void SetGlobalAdvanceImmediately(this Emulation @this, bool val) 48 { 49 SetAdvanceImmediatelyRecursively(@this.MasterTimeSource, val); 50 } 51 GetTimeSourceInfo(this Emulation @this)52 public static string GetTimeSourceInfo(this Emulation @this) 53 { 54 return @this.MasterTimeSource.ToString(); 55 } 56 SetGlobalSerialExecution(this Emulation @this, bool val)57 public static void SetGlobalSerialExecution(this Emulation @this, bool val) 58 { 59 SetSerialExecutionRecursively(@this.MasterTimeSource, val); 60 } 61 SetSerialExecution(this Machine @this, bool val)62 public static bool SetSerialExecution(this Machine @this, bool val) 63 { 64 var previousValue = @this.LocalTimeSource.ExecuteInSerial; 65 @this.LocalTimeSource.ExecuteInSerial = val; 66 return previousValue; 67 } 68 SetSerialExecutionRecursively(TimeSourceBase source, bool val)69 private static void SetSerialExecutionRecursively(TimeSourceBase source, bool val) 70 { 71 source.ExecuteInSerial = val; 72 foreach(var sink in source.Sinks.OfType<TimeSourceBase>()) 73 { 74 SetSerialExecutionRecursively(sink, val); 75 } 76 } 77 SetAdvanceImmediatelyRecursively(TimeSourceBase source, bool val)78 private static void SetAdvanceImmediatelyRecursively(TimeSourceBase source, bool val) 79 { 80 source.AdvanceImmediately = val; 81 foreach(var sink in source.Sinks.OfType<TimeSourceBase>()) 82 { 83 SetAdvanceImmediatelyRecursively(sink, val); 84 } 85 } 86 SetQuantumRecursively(TimeSourceBase source, TimeInterval quantum)87 private static void SetQuantumRecursively(TimeSourceBase source, TimeInterval quantum) 88 { 89 source.Quantum = quantum; 90 foreach(var sink in source.Sinks.OfType<TimeSourceBase>()) 91 { 92 SetQuantumRecursively(sink, quantum); 93 } 94 } 95 } 96 }