public bool Read(byte[] buffer, int offset, int count, TimeSpan waitInterval, CancellationToken cancelToken) { var sample = new DataSample(DateTimeOffset.UtcNow, _generator.GetCurrentValue()); var bytes = DataSampleConverter.ToBytes(sample); Array.Copy(bytes, 0, buffer, offset, Math.Min(bytes.Length, count)); return true; }
public void ToBytes_FromBytes_roundtrip_conversion_for_10_or_8bit([Values(true, false)] bool voltage10bit ) { var inputSample = new DataSample(DateTimeOffset.UtcNow, 4.679d); var bytes = DataSampleConverter.ToBytes(inputSample, voltage10bit); var resultSample = DataSampleConverter.FromBytes(bytes, DateTimeOffset.UtcNow, voltage10bit); resultSample.Voltage .Should().BeApproximately(inputSample.Voltage, TOLERANCE); }
/// <summary> /// Recalculates and updates readings according to the new sample. /// </summary> /// <param name="sample">Measured sample to process</param> public void AddSample(DataSample sample) { Contract.Requires <ArgumentOutOfRangeException>(TimeStamp == null || TimeStamp < sample.Timestamp); Contract.Ensures(TimeStamp == sample.Timestamp); TimeSpan interval = TimeStamp.HasValue ? sample.Timestamp - TimeStamp.Value : TimeSpan.Zero; TimeStamp = sample.Timestamp; var measuredVoltage = sample.Voltage <= NoiseThreshold ? 0.0 : sample.Voltage; CalculateAndUpdateReadings(measuredVoltage, Resistance, VoltageScale, interval); }
/// <devdoc> /// This is approximate reverse algo. /// For emulation purposes only. /// </devdoc> public static byte[] ToBytes(DataSample sample, bool voltage10bit = true) { var bytes = new byte[DeviceConstants.InputReportLength]; if (voltage10bit) { var value = (ushort)(sample.Voltage * 1023 / DeviceConstants.MaxMeasuredVoltage); bytes[1] = (byte)(value >> 2); bytes[2] = (byte)(value * 64); } else { bytes[1] = (byte)(sample.Voltage / DeviceConstants.MaxMeasuredVoltage * 255.0); } bytes[3] = (byte)(sample.IsTimeBased ? 0 : 1); // Skip frequency. Never used return bytes; }
/// <devdoc> /// This is approximate reverse algo. /// For emulation purposes only. /// </devdoc> public static byte[] ToBytes(DataSample sample, bool voltage10bit = true) { var bytes = new byte[DeviceConstants.InputReportLength]; if (voltage10bit) { var value = (ushort)(sample.Voltage * 1023 / DeviceConstants.MaxMeasuredVoltage); bytes[1] = (byte)(value >> 2); bytes[2] = (byte)(value * 64); } else { bytes[1] = (byte)(sample.Voltage / DeviceConstants.MaxMeasuredVoltage * 255.0); } bytes[3] = (byte)(sample.IsTimeBased ? 0 : 1); // Skip frequency. Never used return(bytes); }
public DataSampleArgs(DataSample sample) { Sample = sample; }
/// <summary> /// Recalculates and updates readings according to the new sample. /// </summary> /// <param name="sample">Measured sample to process</param> public void AddSample(DataSample sample) { Contract.Requires<ArgumentOutOfRangeException>(TimeStamp == null || TimeStamp < sample.Timestamp); Contract.Ensures(TimeStamp == sample.Timestamp); TimeSpan interval = TimeStamp.HasValue ? sample.Timestamp - TimeStamp.Value : TimeSpan.Zero; TimeStamp = sample.Timestamp; var measuredVoltage = sample.Voltage <= NoiseThreshold ? 0.0 : sample.Voltage; CalculateAndUpdateReadings(measuredVoltage, Resistance, VoltageScale, interval); }