1 // 2 // Copyright (c) 2010-2023 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 using System.Collections.Generic; 10 using Antmicro.Renode.Peripherals; 11 using Antmicro.Renode.Peripherals.SPI; 12 using Antmicro.Renode.Core; 13 using Antmicro.Renode.Utilities; 14 15 namespace Antmicro.Renode.Extensions.Mocks 16 { 17 /* Example usage: 18 emulation MockSpiHost sysbus.spi_device 19 host.MockSpiHost WriteBytes 0x0 "010203040506070809" 20 host.MockSpiHost ReadBytes 9 21 */ 22 23 public static class MockSpiHost 24 { AddMockSpiHost(this Emulation emulation, ISPIPeripheral device, string name = R)25 public static void AddMockSpiHost(this Emulation emulation, ISPIPeripheral device, string name = "MockSpiHost") 26 { 27 emulation.HostMachine.AddHostMachineElement(new SpiHost(device), name); 28 } 29 } 30 31 public class SpiHost : IHostMachineElement 32 { SpiHost(ISPIPeripheral device)33 public SpiHost(ISPIPeripheral device) 34 { 35 this.device = device; 36 } 37 WriteBytes(string hexString)38 public void WriteBytes(string hexString) 39 { 40 var dataToSend = Misc.HexStringToByteArray(hexString); 41 42 foreach(var b in dataToSend) 43 { 44 device.Transmit(b); 45 } 46 device.FinishTransmission(); 47 } 48 ReadBytes(int count)49 public byte[] ReadBytes(int count) 50 { 51 var returnedData = new byte[count]; 52 for(var index = 0; index < count ; index++) 53 { 54 // This will block the monitor until finished. 55 returnedData[index] = device.Transmit(0); 56 } 57 return returnedData; 58 } 59 60 private readonly ISPIPeripheral device; 61 } 62 } 63