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