1 // 2 // Copyright (c) 2010-2024 Antmicro 3 // 4 // This file is licensed under the MIT License. 5 // Full license text is available in 'licenses/MIT.txt'. 6 // 7 using Antmicro.Renode.Exceptions; 8 using Antmicro.Renode.Peripherals.Sensor; 9 using Antmicro.Renode.Utilities; 10 using Antmicro.Renode.Utilities.RESD; 11 12 namespace Antmicro.Renode.Peripherals.Sensors 13 { 14 public partial class ICM20948 : ITemperatureSensor 15 { FeedTemperatureSamplesFromRESD(ReadFilePath filePath, uint channelId = 0, RESDStreamSampleOffset sampleOffsetType = RESDStreamSampleOffset.Specified, long sampleOffsetTime = 0)16 public void FeedTemperatureSamplesFromRESD(ReadFilePath filePath, uint channelId = 0, 17 RESDStreamSampleOffset sampleOffsetType = RESDStreamSampleOffset.Specified, long sampleOffsetTime = 0) 18 { 19 resdTemperatureStream?.Dispose(); 20 resdTemperatureStream = this.CreateRESDStream<TemperatureSample>(filePath, channelId, sampleOffsetType, sampleOffsetTime); 21 } 22 23 public decimal DefaultTemperature { get; set; } 24 25 public decimal Temperature 26 { 27 get 28 { 29 if(resdTemperatureStream == null) 30 { 31 return DefaultTemperature; 32 } 33 34 switch(resdTemperatureStream.TryGetCurrentSample(this, out var sample, out _)) 35 { 36 case RESDStreamStatus.OK: 37 return sample.Temperature / 1000m; 38 case RESDStreamStatus.BeforeStream: 39 return DefaultTemperature; 40 case RESDStreamStatus.AfterStream: 41 resdTemperatureStream.Dispose(); 42 resdTemperatureStream = null; 43 return DefaultTemperature; 44 default: 45 return DefaultTemperature; 46 } 47 } 48 49 set => throw new RecoverableException($"Explicitly setting temperature is not supported by this model. " + 50 $"Temperature should be provided from a RESD file or set via the '{nameof(DefaultTemperature)}' property"); 51 } 52 53 private ushort RawTemperature => ConvertMeasurement(Temperature, value => ((value - RoomTemperatureDegreeCelsius) * TemperatureSensitivity) + RoomTemperatureOffsetDegreeCelsius); 54 55 private RESDStream<TemperatureSample> resdTemperatureStream; 56 57 private const decimal RoomTemperatureDegreeCelsius = 21.0m; 58 private const decimal RoomTemperatureOffsetDegreeCelsius = 0.0m; 59 private const decimal TemperatureSensitivity = 333.87m; 60 } 61 } 62