private void CsacService_ValueChanged(CsacMeasurement newMeasurement) { DispatcherHelper.CheckBeginInvokeOnUI(() => { processMeasurement(newMeasurement); }); }
private void processMeasurement(CsacMeasurement measurement) { datapoints.Add(measurement); MeasurementsReceived = datapoints.Count; if (datapoints.Count > 1) { var lastButOneMeasurement = datapoints[datapoints.Count - 2]; if ((DateTimeOffset.Now - lastButOneMeasurement.Timestamp).TotalSeconds > 64) { // The last data is too old. Reset the counters... lastDatapoint = datapoints.Count - 1; averageCrankRPM.Clear(); averageWheelRPM.Clear(); } else { var wheelRevsDelta = measurement.CumulativeWheelRevolutions - lastButOneMeasurement.CumulativeWheelRevolutions; double timeDelta; double wheelRPM; if (measurement.LastWheelEventTime >= lastButOneMeasurement.LastWheelEventTime) { timeDelta = (measurement.LastWheelEventTime - lastButOneMeasurement.LastWheelEventTime) / 1024.0; } else { timeDelta = (65536 - measurement.LastWheelEventTime + lastButOneMeasurement.LastWheelEventTime) / 1024.0; } if (timeDelta > 0) { wheelRPM = wheelRevsDelta / (timeDelta / 60); } else { wheelRPM = 0; } CycleSpeed = (wheelRPM * 2.4 * 60) / 1000; averageWheelRPM.Add(wheelRPM); InstantaneousWheelRPM = wheelRPM; WheelRPMAverage = averageWheelRPM.Average(); var crankRevsDelta = measurement.CumulativeCrankRevolutions - lastButOneMeasurement.CumulativeCrankRevolutions; double crankRPM; if (measurement.LastCrankEventTime >= lastButOneMeasurement.LastCrankEventTime) { timeDelta = (measurement.LastCrankEventTime - lastButOneMeasurement.LastCrankEventTime) / 1024.0; } else { timeDelta = (65536 - measurement.LastCrankEventTime + lastButOneMeasurement.LastCrankEventTime) / 1024.0; } if (timeDelta > 0) { crankRPM = crankRevsDelta / (timeDelta / 60); } else { crankRPM = 0; } averageCrankRPM.Add(crankRPM); InstantaneousCrankRPM = crankRPM; CrankRPMAverage = averageCrankRPM.Average(); } } }