blob: 7f94fd0f2e98ecfe8c48cef7c909e2e09fa06f0c [file] [log] [blame]
//
// 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,
}
}
}