1 // 2 // Copyright (c) 2010-2018 Antmicro 3 // Copyright (c) 2011-2015 Realtime Embedded 4 // 5 // This file is licensed under the MIT License. 6 // Full license text is available in 'licenses/MIT.txt'. 7 // 8 using System; 9 using AntShell.Commands; 10 using Antmicro.Renode.UserInterface.Tokenizer; 11 using Antmicro.Renode.Peripherals; 12 using Antmicro.Renode.Core; 13 using Antmicro.Renode.Exceptions; 14 15 namespace Antmicro.Renode.UserInterface.Commands 16 { 17 public class AnalyzersCommand : AutoLoadCommand 18 { PrintHelp(AntShell.Commands.ICommandInteraction writer)19 public override void PrintHelp(AntShell.Commands.ICommandInteraction writer) 20 { 21 writer.WriteLine("Usage:"); 22 writer.WriteLine("------"); 23 writer.WriteLine("analyzers [peripheral]"); 24 writer.WriteLine("\tlists ids of available analyzer for [peripheral]"); 25 writer.WriteLine(""); 26 writer.WriteLine("analyzers default [peripheral]"); 27 writer.WriteLine("\twrites id of default analyzer for [peripheral]"); 28 } 29 30 [Runnable] Run(ICommandInteraction writer, LiteralToken peripheralName)31 public void Run(ICommandInteraction writer, LiteralToken peripheralName) 32 { 33 var emu = EmulationManager.Instance.CurrentEmulation; 34 IPeripheral p; 35 36 try 37 { 38 p = (IPeripheral)monitor.ConvertValueOrThrowRecoverable(peripheralName.Value, typeof(IPeripheral)); 39 } 40 catch(RecoverableException) 41 { 42 writer.WriteError(string.Format("Peripheral not found: {0}", peripheralName.Value)); 43 return; 44 } 45 46 IAnalyzableBackend backend; 47 if(!emu.BackendManager.TryGetBackendFor(p, out backend)) 48 { 49 writer.WriteError(string.Format("No backend found for {0}", peripheralName.Value)); 50 return; 51 } 52 53 var def = emu.BackendManager.GetPreferredAnalyzerFor(backend); 54 foreach(var a in emu.BackendManager.GetAvailableAnalyzersFor(backend)) 55 { 56 writer.WriteLine(String.Format("{0}{1}", a, a == def ? " (default)" : String.Empty)); 57 } 58 } 59 60 [Runnable] Run(ICommandInteraction writer, [Values(R)] LiteralToken @default, LiteralToken peripheralName)61 public void Run(ICommandInteraction writer, [Values("default")] LiteralToken @default, LiteralToken peripheralName) 62 { 63 var emu = EmulationManager.Instance.CurrentEmulation; 64 IPeripheral p; 65 string fake; 66 67 var m = monitor.Machine; 68 if(m == null || !m.TryGetByName(peripheralName.Value, out p, out fake)) 69 { 70 writer.WriteError(string.Format("Peripheral not found: {0}", peripheralName.Value)); 71 return; 72 } 73 74 IAnalyzableBackend backend; 75 if(!emu.BackendManager.TryGetBackendFor(p, out backend)) 76 { 77 writer.WriteError(string.Format("No backend found for {0}", peripheralName.Value)); 78 return; 79 } 80 81 var def = emu.BackendManager.GetPreferredAnalyzerFor(backend); 82 writer.WriteLine(def ?? "No default analyzer found."); 83 } 84 AnalyzersCommand(Monitor monitor)85 public AnalyzersCommand(Monitor monitor) : base(monitor, "analyzers", "shows available analyzers for peripheral.") 86 { 87 } 88 } 89 } 90 91