1 //
2 // Copyright (c) 2010-2023 Antmicro
3 //
4 //  This file is licensed under the MIT License.
5 //  Full license text is available in 'licenses/MIT.txt'.
6 //
7 using Antmicro.Renode.Core;
8 using Antmicro.Renode.Core.Structure.Registers;
9 using Antmicro.Renode.Logging;
10 using Antmicro.Renode.Peripherals.Bus;
11 
12 namespace Antmicro.Renode.Peripherals.Dynamic
13 {
14     public class SubobjectTester : BasicDoubleWordPeripheral, IKnownSize
15     {
SubobjectTester(Machine machine)16         public SubobjectTester(Machine machine) : base(machine)
17         {
18             subobject = new Subobject(this);
19 
20             Registers.Control.Define(this)
21                 .WithValueField(0, 32, writeCallback: (_, __) => HandleWrite())
22             ;
23         }
24 
25         public long Size => 0x4;
26 
HandleWrite()27         private void HandleWrite()
28         {
29             this.Log(LogLevel.Noisy, "Hello from object");
30             subobject.Write();
31         }
32 
33         private readonly Subobject subobject;
34 
35         private enum Registers
36         {
37             Control = 0
38         }
39 
40         private class Subobject
41         {
Subobject(SubobjectTester parent)42             public Subobject(SubobjectTester parent)
43             {
44                 this.parent = parent;
45             }
46 
Write()47             public void Write()
48             {
49                 parent.Log(LogLevel.Noisy, "Hello from sub-object");
50             }
51 
52             private readonly SubobjectTester parent;
53         }
54     }
55 }
56