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 8 using System; 9 10 using Antmicro.Renode.Core; 11 using Antmicro.Renode.Utilities; 12 13 namespace Antmicro.Renode.Peripherals.UART 14 { 15 abstract public class LINBase : UARTBase, ILINDevice 16 { LINBase(IMachine machine)17 public LINBase(IMachine machine) : base(machine) 18 { 19 linDecoder = new LINDecoder(); 20 linDecoder.FrameReceived += FrameReceived; 21 } 22 WriteChar(byte value)23 public override void WriteChar(byte value) 24 { 25 linDecoder.Feed(value); 26 if(linDecoder.CurrentState != LINDecoder.State.Ignoring) 27 { 28 base.WriteChar(value); 29 } 30 } 31 FrameReceived(byte protectedIdentifier, byte[] data, bool valid)32 public abstract void FrameReceived(byte protectedIdentifier, byte[] data, bool valid); StartedTransmission(byte protectedIdentifier)33 public abstract void StartedTransmission(byte protectedIdentifier); 34 ReceiveLINBreak()35 public virtual void ReceiveLINBreak() 36 { 37 linDecoder.Break(); 38 } 39 RegisterProtectedIdentifier(byte pid, LINMode mode, int frameLength)40 protected ILINEntry RegisterProtectedIdentifier(byte pid, LINMode mode, int frameLength) 41 { 42 var entry = linDecoder.Register(pid); 43 entry.Mode = mode; 44 entry.FrameLength = frameLength; 45 46 entry.StartedTransmission += () => StartedTransmission(pid); 47 48 return entry; 49 } 50 51 protected readonly LINDecoder linDecoder; 52 } 53 } 54