1 //
2 // Copyright (c) 2010-2024 Antmicro
3 // Copyright (c) 2011-2015 Realtime Embedded
4 //
5 // This file is licensed under the MIT License.
6 // Full license text is available in 'licenses/MIT.txt'.
7 //
8 using System;
9 using Antmicro.Renode.Peripherals.Bus;
10 using Antmicro.Renode.Logging;
11 using Antmicro.Renode.Core;
12 using Antmicro.Renode.Utilities;
13 
14 namespace Antmicro.Renode.Peripherals.Bus.Wrappers
15 {
16     public sealed class WriteLoggingWrapper<T> : WriteHookWrapper<T>
17     {
WriteLoggingWrapper(IBusPeripheral peripheral, Action<long, T> originalMethod)18         public WriteLoggingWrapper(IBusPeripheral peripheral, Action<long, T> originalMethod) : base(peripheral, originalMethod, null, null)
19         {
20             mapper = new RegisterMapper(peripheral.GetType());
21             machine = peripheral.GetMachine();
22         }
23 
Write(long offset, T value)24         public override void Write(long offset, T value)
25         {
26             Peripheral.Log(LogLevel.Info, machine.SystemBus.DecorateWithCPUNameAndPC($"Write{Name} to 0x{offset:X}{(mapper.ToString(offset, " ({0})"))}, value 0x{value:X}."));
27             OriginalMethod(offset, value);
28         }
29 
30         private readonly IMachine machine;
31         private readonly RegisterMapper mapper;
32     }
33 }
34