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