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 }