Example #1
0
 private void CsacService_ValueChanged(CsacMeasurement newMeasurement)
 {
     DispatcherHelper.CheckBeginInvokeOnUI(() =>
     {
         processMeasurement(newMeasurement);
     });
 }
Example #2
0
        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();
                }
            }
        }