1 //
2 // Copyright (c) 2010-2024 Antmicro
3 //
4 // This file is licensed under the MIT License.
5 // Full license text is available in 'licenses/MIT.txt'.
6 //
7 using System.Collections.Generic;
8 using Antmicro.Renode.Peripherals.Bus;
9 using Antmicro.Renode.Core.Structure.Registers;
10 using Antmicro.Renode.Core;
11 using Antmicro.Renode.Time;
12 using Antmicro.Renode.Logging;
13 
14 namespace Antmicro.Renode.Peripherals.Mocks
15 {
16     public class TestPeripheral : BasicBytePeripheral, IKnownSize
17     {
TestPeripheral(IMachine machine)18         public TestPeripheral(IMachine machine) : base(machine)
19         {
20             DefineRegisters();
21         }
22 
SetDelay(ulong microseconds)23         public void SetDelay(ulong microseconds)
24         {
25             this.delay = microseconds;
26         }
27 
28         public long Size => 0x100;
29 
DefineRegisters()30         protected override void DefineRegisters()
31         {
32             Registers.Reg0.Define(this)
33                 .WithValueField(0, 8, FieldMode.Write, writeCallback: (_, value) =>
34                 {
35                     var cts = machine.ElapsedVirtualTime.TimeElapsed;
36                     this.Log(LogLevel.Info, "Written value 0x{0:X} to Reg0; current timestamp is {1}", value, cts);
37                     this.Log(LogLevel.Info, "Scheduling delayed action in {0}us", delay);
38 
39                     machine.ScheduleAction(TimeInterval.FromMicroseconds(delay), (___) =>
40                     {
41                         var cts2 = machine.ElapsedVirtualTime.TimeElapsed;
42                         this.Log(LogLevel.Info, "Executing scheduled action for Reg0; current timestamp is {0}", cts2);
43                     });
44                 });
45         }
46 
47         private ulong delay;
48 
49         private enum Registers : long
50         {
51             Reg0 = 0x0,
52         }
53     }
54 }
55