Example #1
0
void
CirclingComputer::TurnRate(CirclingInfo &circling_info,
                           const NMEAInfo &basic, const NMEAInfo &last_basic,
                           const DerivedInfo &calculated,
                           const DerivedInfo &last_calculated)
{
    if (!basic.time_available || !last_basic.time_available ||
            !calculated.flight.flying) {
        circling_info.turn_rate = fixed_zero;
        circling_info.turn_rate_heading = fixed_zero;
        return;
    }

    if (!basic.HasTimeAdvancedSince(last_basic))
        return;

    // Calculate time passed since last calculation
    const fixed dt = basic.time - last_basic.time;
    assert(positive(dt));

    circling_info.turn_rate =
        (basic.track - last_basic.track).AsDelta().Degrees() / dt;
    circling_info.turn_rate_heading =
        (calculated.heading - last_calculated.heading).AsDelta().Degrees() / dt;
}