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