// // Copyright (c) 2010-2024 Antmicro // // This file is licensed under the MIT License. // Full license text is available in 'licenses/MIT.txt'. // using System.Collections.Generic; using Antmicro.Renode.Peripherals.Bus; using Antmicro.Renode.Core.Structure.Registers; using Antmicro.Renode.Core; using Antmicro.Renode.Time; using Antmicro.Renode.Logging; namespace Antmicro.Renode.Peripherals.Mocks { public class TestPeripheral : BasicBytePeripheral, IKnownSize { public TestPeripheral(IMachine machine) : base(machine) { DefineRegisters(); } public void SetDelay(ulong microseconds) { this.delay = microseconds; } public long Size => 0x100; protected override void DefineRegisters() { Registers.Reg0.Define(this) .WithValueField(0, 8, FieldMode.Write, writeCallback: (_, value) => { var cts = machine.ElapsedVirtualTime.TimeElapsed; this.Log(LogLevel.Info, "Written value 0x{0:X} to Reg0; current timestamp is {1}", value, cts); this.Log(LogLevel.Info, "Scheduling delayed action in {0}us", delay); machine.ScheduleAction(TimeInterval.FromMicroseconds(delay), (___) => { var cts2 = machine.ElapsedVirtualTime.TimeElapsed; this.Log(LogLevel.Info, "Executing scheduled action for Reg0; current timestamp is {0}", cts2); }); }); } private ulong delay; private enum Registers : long { Reg0 = 0x0, } } }