1 // 2 // Copyright (c) 2010-2020 Antmicro 3 // Copyright (c) 2011-2015 Realtime Embedded 4 // 5 // This file is licensed under the MIT License. 6 // Full license text is available in 'licenses/MIT.txt'. 7 // 8 using System; 9 using System.Linq; 10 using Antmicro.Renode.Logging; 11 using Antmicro.Renode.Peripherals.Bus; 12 13 namespace Antmicro.Renode.Peripherals.I2C 14 { 15 public class LM95245 : II2CPeripheral 16 { LM95245()17 public LM95245 () 18 { 19 Reset (); 20 } 21 Reset()22 public void Reset () 23 { 24 //conversionRate = 2; 25 } 26 Write(byte[] data)27 public void Write (byte[] data) 28 { 29 this.Log (LogLevel.Noisy, "Write! {0}", data.Select (x=>"0x"+x.ToString("X2")).Aggregate((x,y)=>x+" "+y)); 30 } 31 Read(int count)32 public byte[] Read (int count) 33 { 34 this.Log (LogLevel.Noisy, "Read!"); 35 return new byte[]{0}; 36 } 37 ReadByte(byte offset)38 private byte ReadByte (byte offset) 39 { 40 switch ((Registers)offset) { 41 case Registers.LocalTempMSB: 42 break; 43 case Registers.LocalTempLSB: 44 break; 45 case Registers.SignedRemoteTempMSB: 46 break; 47 case Registers.SignedRemoteTempLSB: 48 break; 49 case Registers.UnsignedRemoteTempMSB: 50 break; 51 case Registers.UnignedRemoteTempLSB: 52 break; 53 case Registers.ConfigurationRegister2: 54 break; 55 case Registers.RemoteOffsetHigh: 56 break; 57 case Registers.RemoteOffsetLow: 58 break; 59 case Registers.Configurationregister1A: 60 case Registers.Configurationregister1B: 61 break; 62 case Registers.ConversionRateA: 63 case Registers.ConversionRateB: 64 break; 65 case Registers.Status1: 66 break; 67 case Registers.Status2: 68 return 0; 69 case Registers.RemoteOSLimitA: 70 case Registers.RemoteOSLimitB: 71 break; 72 case Registers.LocalTCritLimit: 73 break; 74 case Registers.RemoteTCritLimit: 75 break; 76 case Registers.CommonHysteresis: 77 break; 78 case Registers.ManufacturerID: 79 return 1; //according to spec 80 case Registers.RevisionID: 81 return 0xB3; //according to spec 82 default: 83 return 0; 84 } 85 return 0; 86 } 87 WriteByte(byte offset, byte value)88 public void WriteByte (byte offset, byte value) 89 { 90 switch ((Registers)offset) { 91 case Registers.ConfigurationRegister2: 92 break; 93 case Registers.RemoteOffsetHigh: 94 break; 95 case Registers.RemoteOffsetLow: 96 break; 97 case Registers.Configurationregister1A: 98 case Registers.Configurationregister1B: 99 break; 100 case Registers.ConversionRateA: 101 case Registers.ConversionRateB: 102 break; 103 case Registers.OneShot: 104 break; 105 case Registers.RemoteOSLimitA: 106 case Registers.RemoteOSLimitB: 107 break; 108 case Registers.LocalTCritLimit: 109 break; 110 case Registers.RemoteTCritLimit: 111 break; 112 case Registers.CommonHysteresis: 113 break; 114 default: 115 throw new ArgumentOutOfRangeException (); 116 } 117 } 118 FinishTransmission()119 public void FinishTransmission() 120 { 121 } 122 123 /* private double localTemperature; 124 private double remoteTemperature; 125 private double remoteOffset; 126 private byte configurationRegister1; 127 private byte configurationRegister2; 128 private byte conversionRate;*/ 129 130 private enum Registers 131 { 132 LocalTempMSB = 0x00, 133 LocalTempLSB = 0x30, 134 SignedRemoteTempMSB = 0x01, 135 SignedRemoteTempLSB = 0x10, 136 UnsignedRemoteTempMSB = 0x31, 137 UnignedRemoteTempLSB = 0x32, 138 ConfigurationRegister2 = 0xBF, 139 RemoteOffsetHigh = 0x11, 140 RemoteOffsetLow = 0x12, 141 Configurationregister1A = 0x03, 142 Configurationregister1B = 0x09, 143 ConversionRateA = 0x04, 144 ConversionRateB = 0x0A, 145 OneShot = 0x0F, 146 Status1 = 0x02, 147 Status2 = 0x33, 148 RemoteOSLimitA = 0x07, 149 RemoteOSLimitB = 0x0D, 150 LocalTCritLimit = 0x20, 151 RemoteTCritLimit = 0x19, 152 CommonHysteresis = 0x21, 153 ManufacturerID = 0xFE, 154 RevisionID = 0xFF 155 } 156 } 157 } 158 159