1 // 2 // Copyright (c) 2010-2021 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.Peripherals.Bus; 9 using Antmicro.Renode.Peripherals.Sensor; 10 using Antmicro.Renode.Peripherals.I2C; 11 using Antmicro.Renode.Utilities; 12 using Antmicro.Renode.Logging; 13 using Antmicro.Renode.Core.Structure.Registers; 14 15 namespace Antmicro.Renode.Peripherals.Sensors 16 { 17 // This class implements a common ST sensor 18 // register handling logic. 19 // It can be used as a base for all I2C sensors that 20 // support 7-bit-length registers addresses. 21 22 // it should be enum instead of IConvertible, but earlier versions of C# do not support this 23 public abstract class ST_I2CSensorBase<T> : I2CPeripheralBase<T> where T : IConvertible 24 { ST_I2CSensorBase()25 public ST_I2CSensorBase() : base(7) 26 { 27 } 28 GetScaledValue(decimal value, short sensitivity, bool upperByte)29 protected byte GetScaledValue(decimal value, short sensitivity, bool upperByte) 30 { 31 var scaled = (short)(value * sensitivity); 32 return upperByte 33 ? (byte)(scaled >> 8) 34 : (byte)scaled; 35 } 36 CalculateScale(int minVal, int maxVal, int width)37 protected short CalculateScale(int minVal, int maxVal, int width) 38 { 39 var range = maxVal - minVal; 40 return (short)(((1 << width) / range) - 1); 41 } 42 } 43 } 44