1 //
2 // Copyright (c) 2010-2018 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 System.Linq;
10 
11 namespace Antmicro.Renode.Utilities
12 {
13     public class I2CCommandManager<T>
14     {
I2CCommandManager()15         public I2CCommandManager()
16         {
17             commands = new List<Tuple<byte[], T>>();
18         }
19 
RegisterCommand(T handler, params byte[] address)20         public void RegisterCommand(T handler, params byte[] address)
21         {
22             commands.Add(Tuple.Create<byte[], T>(address, handler));
23         }
24 
TryGetCommand(byte[] data, out T handler)25         public bool TryGetCommand(byte[] data, out T handler)
26         {
27             var command = commands.FirstOrDefault(x => x.Item1.SequenceEqual(data.Take(x.Item1.Length)));
28             if(command == null)
29             {
30                 handler = default(T);
31                 return false;
32             }
33 
34             handler = command.Item2;
35             return true;
36         }
37 
38         private readonly List<Tuple<byte[], T>> commands;
39     }
40 }