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; 8 using System.Collections.Generic; 9 using Antmicro.Renode.Core; 10 using Antmicro.Renode.Exceptions; 11 using Antmicro.Renode.Peripherals.SENT; 12 using Antmicro.Renode.Time; 13 using Antmicro.Renode.Utilities; 14 15 namespace Antmicro.Renode.Peripherals.Mocks 16 { 17 public class DummySENTTransmitter : SENTPeripheralBase 18 { DummySENTTransmitter(IMachine machine, uint tickPeriodMicroseconds)19 public DummySENTTransmitter(IMachine machine, uint tickPeriodMicroseconds) 20 : base(machine, TimeInterval.FromMicroseconds(tickPeriodMicroseconds)) 21 { 22 defaultFastMessage = new FastMessage(0, 0, 0, 0, 0, 0); 23 defaultSlowMessage = new SlowMessage(0, 0, 0); 24 25 fastQueue = new Queue<FastMessage>(); 26 slowQueue = new Queue<SlowMessage>(); 27 } 28 ProvideFastMessage()29 public override FastMessage ProvideFastMessage() 30 { 31 if(!fastQueue.TryDequeue(out var message)) 32 { 33 message = defaultFastMessage; 34 } 35 return message; 36 } 37 ProvideSlowMessage()38 public override SlowMessage ProvideSlowMessage() 39 { 40 if(!slowQueue.TryDequeue(out var message)) 41 { 42 message = defaultSlowMessage; 43 } 44 return message; 45 } 46 EnqueueFastMessage(FastMessage message)47 public void EnqueueFastMessage(FastMessage message) 48 { 49 fastQueue.Enqueue(message); 50 } 51 EnqueueFastMessage(params byte[] nibbles)52 public void EnqueueFastMessage(params byte[] nibbles) 53 { 54 try 55 { 56 fastQueue.Enqueue(new FastMessage(nibbles)); 57 } 58 catch(ArgumentException e) 59 { 60 // Rethrow as a RecoverableException as this method will most likely be called from the monitor 61 throw new RecoverableException(e); 62 } 63 } 64 EnqueueSlowMessage(SlowMessage message)65 public void EnqueueSlowMessage(SlowMessage message) 66 { 67 slowQueue.Enqueue(message); 68 } 69 EnqueueSlowMessage(params byte[] nibbles)70 public void EnqueueSlowMessage(params byte[] nibbles) 71 { 72 try 73 { 74 slowQueue.Enqueue(new SlowMessage(nibbles)); 75 } 76 catch(ArgumentException e) 77 { 78 // Rethrow as a RecoverableException as this method will most likely be called from the monitor 79 throw new RecoverableException(e); 80 } 81 } 82 83 private readonly FastMessage defaultFastMessage; 84 private readonly SlowMessage defaultSlowMessage; 85 86 private readonly Queue<FastMessage> fastQueue; 87 private readonly Queue<SlowMessage> slowQueue; 88 } 89 } 90