private void timerTick(object sender, EventArgs e) { if (reader == null) { if (GetFalconWindowHandle() != IntPtr.Zero) { reader = new Reader(); if (!reader.IsFalconRunning) { reader.Dispose(); reader = null; } else { DebugUtils.Speak(string.Format("Falcon started")); raiseFalconStarted(); timer.Interval = readFalconDataTimerInterval; } } } else { if (GetFalconWindowHandle() == IntPtr.Zero) { DebugUtils.Speak(string.Format("Falcon stopped")); reader.Dispose(); reader = null; raiseFalconStopped(); timer.Interval = detectFalconTimerInterval; } } FlightData newFlightData = null; if (reader != null) { newFlightData = reader.GetCurrentData(); } if (newFlightData == null) { if (oldFlightData != null) { raiseFlightDataChanged(oldFlightData, newFlightData); raiseFlightDataLightsChanged(oldFlightData, newFlightData); } } else { if (oldFlightData == null) { raiseFlightDataChanged(oldFlightData, newFlightData); raiseFlightDataLightsChanged(oldFlightData, newFlightData); } else { raiseFlightDataChanged(oldFlightData, newFlightData); bool lightChanged = (oldFlightData.lightBits ^ newFlightData.lightBits) != 0; lightChanged |= (oldFlightData.lightBits2 ^ newFlightData.lightBits2) != 0; lightChanged |= (oldFlightData.lightBits3 ^ newFlightData.lightBits3) != 0; lightChanged |= (oldFlightData.hsiBits ^ newFlightData.hsiBits) != 0; lightChanged |= oldFlightData.speedBrake != newFlightData.speedBrake; lightChanged |= oldFlightData.rpm != newFlightData.rpm; lightChanged |= (oldFlightData.blinkBits ^ newFlightData.blinkBits) != 0; lightChanged |= (oldFlightData.powerBits ^ newFlightData.powerBits) != 0; lightChanged |= oldFlightData.tacanInfo != newFlightData.tacanInfo; lightChanged |= oldFlightData.navMode != newFlightData.navMode; lightChanged |= (oldFlightData.cmdsMode ^ newFlightData.cmdsMode) != 0; lightChanged |= (oldFlightData.altBits ^ newFlightData.altBits) != 0; if (lightChanged) { raiseFlightDataLightsChanged(oldFlightData, newFlightData); } } } oldFlightData = newFlightData; }