1 // 2 // Copyright (c) 2010-2022 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 Antmicro.Renode.Core; 9 using Antmicro.Renode.Exceptions; 10 using Antmicro.Renode.Peripherals.UART; 11 12 namespace Antmicro.Renode.Utilities 13 { 14 public static class UartExtensions 15 { DumpHistoryBuffer(this IUART uart, int limit = 0)16 public static string DumpHistoryBuffer(this IUART uart, int limit = 0) 17 { 18 var emu = EmulationManager.Instance.CurrentEmulation; 19 if(!emu.BackendManager.TryGetBackendFor(uart, out var backend)) 20 { 21 throw new RecoverableException($"No backend found for {uart}"); 22 } 23 24 if(backend is UARTBackend uartBackend) 25 { 26 return uartBackend.DumpHistoryBuffer(limit); 27 } 28 29 throw new RecoverableException($"Unsupported type of backend for {uart}: {backend.GetType()}"); 30 } 31 WriteLine(this IUART uart, string text, bool appendCarriageReturn = true)32 public static void WriteLine(this IUART uart, string text, bool appendCarriageReturn = true) 33 { 34 uart.WriteLine(text, appendCarriageReturn ? LineEnding.CR : LineEnding.None); 35 } 36 WriteLine(this IUART uart, string text, LineEnding lineEnding = LineEnding.CR)37 public static void WriteLine(this IUART uart, string text, LineEnding lineEnding = LineEnding.CR) 38 { 39 foreach(var chr in text) 40 { 41 uart.WriteChar((byte)chr); 42 } 43 44 WriteLineEnding(uart, lineEnding); 45 } 46 WriteLineEnding(IUART uart, LineEnding lineEnding)47 private static void WriteLineEnding(IUART uart, LineEnding lineEnding) 48 { 49 const byte CarriageReturn = (byte)'\r'; 50 const byte LineFeed = (byte)'\n'; 51 52 switch(lineEnding) 53 { 54 case LineEnding.CR: 55 uart.WriteChar(CarriageReturn); 56 break; 57 58 case LineEnding.CRLF: 59 uart.WriteChar(CarriageReturn); 60 uart.WriteChar(LineFeed); 61 break; 62 63 case LineEnding.LF: 64 uart.WriteChar(LineFeed); 65 break; 66 }; 67 } 68 69 public enum LineEnding 70 { 71 None, 72 CR, 73 CRLF, 74 LF 75 } 76 } 77 } 78