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