-- J-11A Export

ExportScript.FoundFCModule = true
ExportScript.Version.J11A = "1.2.1"

-- auxiliary function
dofile(ExportScript.Config.ExportModulePath.."FC_AuxiliaryFuntions.lua")

-----------------------------------------
-- FLAMING CLIFFS AIRCRAFT / J-11A     --
-- FC aircraft don't support GetDevice --
-----------------------------------------

function ExportScript.ProcessIkarusFCHighImportanceConfig()
	local lFunctionTyp 					= "Ikarus"	-- function type for shared function
	local myData						= LoGetSelfData()

	if (myData) then
		local lLatitude					= myData.LatLongAlt.Lat									-- LATITUDE
		local lLongitude				= myData.LatLongAlt.Long								-- LONGITUDE

		local lEngineTempLeft			= LoGetEngineInfo().Temperature.left					-- ENG1 EGT C
		local lEngineTempRight			= LoGetEngineInfo().Temperature.right					-- ENG2 EGT C
		--[[
		local lBasicAtmospherePressure	= LoGetBasicAtmospherePressure()						-- BAROMETRIC PRESSURE
		local lAltBar					= LoGetAltitudeAboveSeaLevel()							-- ALTITUDE SEA LEVEL (Meter)
		local lAltRad					= LoGetAltitudeAboveGroundLevel()						-- ALTITUDE GROUND LEVEL (Meter)
		local lTrueAirSpeed			    = LoGetTrueAirSpeed()									-- TRUE AIRSPEED (Meter/Second)
		local lPitch, lBank, lYaw		= LoGetADIPitchBankYaw()								-- PITCH, BANK, YAW (Radian)

		local lHeading					= myData.Heading										-- HEADING (Radian)
		local lVVI						= LoGetVerticalVelocity()								-- VERTICAL SPEED (Meter/Second)
		local lIAS						= LoGetIndicatedAirSpeed()								-- INDICATED AIRSPEED (Meter/Second)
		local lMachNumber				= LoGetMachNumber()										-- MACH
		local lAoA						= LoGetAngleOfAttack()									-- ANGLE OF ATTACK AoA (Radian)

		local lGlide					= LoGetGlideDeviation()									-- VOR1 HORIZONTAL DEFLECTION (-1 +1)
		local lSide						= LoGetSideDeviation()									-- VOR1 VERTICAL DEFLECTION (-1 +1)
		local lSlipBallPosition			= LoGetSlipBallPosition()								-- SLIP BALL (-1 +1)
		local lAccelerationUnits		= LoGetAccelerationUnits().y							-- G-LOAD

		local lNavInfoPitch				= LoGetNavigationInfo().Requirements.pitch				-- AP REQUIRED PITCH (Radian)
		local lNavInfoRoll				= LoGetNavigationInfo().Requirements.roll				-- AP REQUIRED BANK (Radian)
		local lNavInfoSpeed				= LoGetNavigationInfo().Requirements.speed				-- AP SPEED (Meter/Second)
		local lNavInfoAltitude			= LoGetNavigationInfo().Requirements.altitude      	 	-- AP ALTITUDE (Meter)
		local lNavInfoVerticalSpeed		= LoGetNavigationInfo().Requirements.vertical_speed		-- AP VERTICAL SPEED (Meter/Second)

		local lControlPanel_HSI			= LoGetControlPanel_HSI()								-- HSI Data
		local lHSI_RMI					= LoGetControlPanel_HSI().RMI_raw						-- VOR1 OBS (Radian)
		local lHSI_ADF					= LoGetControlPanel_HSI().ADF_raw						-- ADF OBS (Radian)
		local lHSI_Heading				= LoGetControlPanel_HSI().Heading_raw					-- Heading (Radian)

		local lEngineRPMleft			= LoGetEngineInfo().RPM.left							-- ENG1 RPM %
		local lEngineRPMright			= LoGetEngineInfo().RPM.right							-- ENG2 RPM %
		local lEngineFuelInternal		= LoGetEngineInfo().fuel_internal						-- TANK1 (INT) (KG)
		local lEngineFuelExternal		= LoGetEngineInfo().fuel_external						-- TANK2 (EXT) (KG)

		local lMechInfo 				= LoGetMechInfo() 										-- mechanical components,  e.g. Flaps, Wheelbrakes,...
		local lPayloadInfo				= LoGetPayloadInfo()									-- Paylod, e.g. bombs, guns, rockets, fuel tanks,...
		]]

		local lDistanceToWay			= 999
		local lRoute					= LoGetRoute()

		if (myData and lRoute) then -- if neither are nil
			local myLoc					= LoGeoCoordinatesToLoCoordinates(lLongitude, lLatitude)
			--lDistanceToWay				= math.sqrt((myLoc.x - lRoute.goto_point.world_point.x)^2 + (myLoc.y -  lRoute.goto_point.world_point.y)^2)
			lDistanceToWay              = math.sqrt((myLoc.x - lRoute.goto_point.world_point.x)^2 + (myLoc.z -  lRoute.goto_point.world_point.z)^2)
		end

		-- IAS-MACH Indicator
		ExportScript.AF.FC_Russian_AirSpeed_1600hkm()

		-- AOA Indicator and Accelerometer (AOA, GLoad)
		ExportScript.AF.FC_Russian_AOA_Su2733()

		-- ADI
		ExportScript.AF.FC_Russian_ADI_Old()

		-- HSI
		ExportScript.AF.FC_Russian_HSI(lDistanceToWay)

		-- Vertical Velocity Indicator (VVI)
		ExportScript.AF.FC_Russian_VVI_Old()

		-- Radar Altimeter (below 100m is warning light on)
		ExportScript.AF.FC_Russian_RadarAltimeter_1500m(100)

		-- Barometric Altimeter
		ExportScript.AF.FC_Russian_BarometricAltimeter_20000()

		-- Tachometer (RPM)
		ExportScript.AF.FC_Russian_EngineRPM()

		-- Left Jet Engine Turbine Temperature Indicator (EngineTemp, main scala, second scala, ExportID)
		ExportScript.AF.FC_TwoNeedlesGauge(lEngineTempLeft, 1200, 100, 70, 71)

		-- Right Jet Engine Turbine Temperature Indicator (EngineTemp, main scala, second scala, ExportID)
		ExportScript.AF.FC_TwoNeedlesGauge(lEngineTempRight, 1200, 100, 72, 73)

		-- Clock from Ka-50
		ExportScript.AF.FC_Russian_Clock_late()
	else
		ExportScript.Tools.WriteToLog("Unknown FC Error, no LoGetSelfData.")
	end
end

function ExportScript.ProcessDACConfigHighImportance()
	local lFunctionTyp = "DAC"	-- function type for shared function

	-- your script

end

function ExportScript.ProcessIkarusFCLowImportanceConfig()
	local lFunctionTyp = "Ikarus"	-- function type for shared function

	ExportScript.AF.FC_WeaponPanel_SU27(lFunctionTyp)

	-- SPO15 Radar Warning Reciver
	ExportScript.AF.FC_SPO15RWR(lFunctionTyp)

	-- EKRAN Message
	ExportScript.AF.FC_EKRAN()

	--  Fuel Quantity Indicator
	ExportScript.AF.FuelQuantityIndicator(lFunctionTyp)

	local lEngineInfo = LoGetEngineInfo()
	if lEngineInfo ~= nil then
		--ExportScript.Tools.WriteToLog('lEngineInfo: '..ExportScript.Tools.dump(lEngineInfo))
		-- Hydraulic Pressure Left
		ExportScript.AF.FC_OneNeedleGauge(lEngineInfo.HydraulicPressure.left, 240, 85)

		-- Hydraulic Pressure Right
		ExportScript.AF.FC_OneNeedleGauge(lEngineInfo.HydraulicPressure.right, 240, 86)
	end

	-- Engine Lamps, Start and Afterburner
	ExportScript.AF.FC_EngineLamps_SU2733(lFunctionTyp)

	-- Mechanical Configuration Indicator
	ExportScript.AF.MechanicalDevicesIndicator(lFunctionTyp)

	local lMechInfo = LoGetMechInfo()	-- mechanical components,  e.g. Flaps, Wheelbrakes,...
	if lMechInfo ~= nil then
		-- Wheelbrakes Hydraulic Pressure Left
		ExportScript.AF.FC_OneNeedleGauge(lMechInfo.wheelbrakes.value, 240, 87)

		-- Wheelbrakes Hydraulic Pressure Right
		ExportScript.AF.FC_OneNeedleGauge(lMechInfo.wheelbrakes.value, 240, 88)

		--ExportScript.Tools.WriteToLog('lMechInfo.noseflap.value: '..ExportScript.Tools.dump(lMechInfo.noseflap.value)) -- Vorfluegel, Balkenanzeige neben dem Radarhoehenmesser (0=oben bis 30=unten)
	end

	-- Airintake
	ExportScript.AF.FC_Russian_AirIntake()

	--[[
	local lPayloadInfo = LoGetPayloadInfo()
	ExportScript.Tools.WriteToLog('lPayloadInfo: '..ExportScript.Tools.dump(lPayloadInfo))

	local lSnares = LoGetSnares() -- Flare and Chaff
	ExportScript.Tools.WriteToLog('lSnares: '..ExportScript.Tools.dump(lSnares))

	local lSightingSystemInfo = LoGetSightingSystemInfo()
	ExportScript.Tools.WriteToLog('lSightingSystemInfo: '..ExportScript.Tools.dump(lSightingSystemInfo))

	local lTWSInfo = LoGetTWSInfo() -- SPO Informationen, z.B. Radarwarner F15C
	ExportScript.Tools.WriteToLog('lTWSInfo: '..ExportScript.Tools.dump(lTWSInfo))

	local lTargetInformation = LoGetTargetInformation() -- detalierte Radar Infos z.B. F15C
	ExportScript.Tools.WriteToLog('lTargetInformation: '..ExportScript.Tools.dump(lTargetInformation))

	local lLockedTargetInformation = LoGetLockedTargetInformation()
	ExportScript.Tools.WriteToLog('lLockedTargetInformation: '..ExportScript.Tools.dump(lLockedTargetInformation))

	local lF15_TWS_Contacs = LoGetF15_TWS_Contacts() -- the same information but only for F-15 in TWS mode
	ExportScript.Tools.WriteToLog('lF15_TWS_Contacs: '..ExportScript.Tools.dump(lF15_TWS_Contacs))

	local lMechInfo = LoGetMechInfo() -- mechanical components,  e.g. Flaps, Wheelbrakes,...
	ExportScript.Tools.WriteToLog('lMechInfo: '..ExportScript.Tools.dump(lMechInfo))

	local lMCPState = LoGetMCPState() -- Warnlichter
	ExportScript.Tools.WriteToLog('lMCPState: '..ExportScript.Tools.dump(lMCPState))

	local lControlPanel_HSI = LoGetControlPanel_HSI()
	ExportScript.Tools.WriteToLog('lControlPanel_HSI: '..ExportScript.Tools.dump(lControlPanel_HSI))

	local lRadioBeaconsStatus = LoGetRadioBeaconsStatus()
	ExportScript.Tools.WriteToLog('lRadioBeaconsStatus: '..ExportScript.Tools.dump(lRadioBeaconsStatus))

	local lEngineInfo = LoGetEngineInfo()
	ExportScript.Tools.WriteToLog('lEngineInfo: '..ExportScript.Tools.dump(lEngineInfo))
	]]
	-- Weapon Control System
    --local lNameByType = LoGetNameByType () -- args 4 (number : level1,level2,level3,level4), result string
	-- values from LoGetTargetInformation().type
	--ExportScript.Tools.WriteToLog('lNameByType: '..ExportScript.Tools.dump(lNameByType))
end

function ExportScript.ProcessDACConfigLowImportance()
	local lFunctionTyp = "DAC"	-- function type for shared function

	ExportScript.AF.FC_WeaponPanel_SU27(lFunctionTyp)
	ExportScript.AF.FC_SPO15RWR(lFunctionTyp)
	ExportScript.AF.MechanicalDevicesIndicator(lFunctionTyp)
	ExportScript.AF.FuelQuantityIndicator(lFunctionTyp)
	ExportScript.AF.FC_EngineLamps_SU2733(lFunctionTyp)
	ExportScript.AF.StatusLamp()
	ExportScript.AF.SightingSystem()
	ExportScript.AF.PPDSPPanel()
end

-----------------------------
--     Custom functions    --
-----------------------------

function ExportScript.AF.SightingSystem()
	local lSightingSystemInfo = LoGetSightingSystemInfo()
	if lSightingSystemInfo == nil then
		return
	end
	--ExportScript.Tools.WriteToLog('lSightingSystemInfo: '..ExportScript.Tools.dump(lSightingSystemInfo)9
	--[[
	[PRF] = {
        [selection] = string: "ILV"
        [current] = string: "MED"
    }
    [laser_on] = boolean: "false"
    [scale] = {
        [azimuth] = number: "0.52359873056412"
        [distance] = number: "10000"
    }
    [radar_on] = boolean: "false"
    [optical_system_on] = boolean: "false"
    [LaunchAuthorized] = boolean: "false"
    [ECM_on] = boolean: "false"
    [Manufacturer] = string: "RUS"
    [TDC] = {
        [y] = number: "0"
        [x] = number: "0"
    }
    [ScanZone] = {
        [coverage_H] = {
            [min] = number: "0"
            [max] = number: "20000"
        }
        [size] = {
            [azimuth] = number: "1.0471974611282"
            [elevation] = number: "0.17453290522099"
        }
        [position] = {
            [exceeding_manual] = number: "0"
            [distance_manual] = number: "0"
            [azimuth] = number: "0"
            [elevation] = number: "0"
        }
    }
	]]
	ExportScript.Tools.SendDataDAC("600", lSightingSystemInfo.ECM_on            == true and 1 or 0 )
	ExportScript.Tools.SendDataDAC("601", lSightingSystemInfo.laser_on          == true and 1 or 0 )
	--ExportScript.Tools.SendDataDAC("602", lSightingSystemInfo.optical_system_on == true and 1 or 0 )
	ExportScript.Tools.SendDataDAC("603", lSightingSystemInfo.LaunchAuthorized  == true and 1 or 0 )
	ExportScript.Tools.SendDataDAC("604", lSightingSystemInfo.radar_on          == true and 1 or 0 )
end

function ExportScript.AF.PPDSPPanel()
	local lSnares = LoGetSnares() -- Flare and Chaff
	if lSnares == nil then
		return
	end
	--ExportScript.Tools.WriteToLog('lSnares: '..ExportScript.Tools.dump(lSnares))

	--[chaff] = number: "96"
    --[flare] = number: "96"

	local lChaffLED = ExportScript.Tools.round(lSnares.chaff / 12, 0, "ceil") + 1
	local lFlareLED = ExportScript.Tools.round(lSnares.flare / 12, 0, "ceil") + 1

	ExportScript.Tools.SendDataDAC("800", (lChaffLED <= 1  and 0 or 1) )
	ExportScript.Tools.SendDataDAC("801", (lChaffLED <= 2  and 0 or 1) )
	ExportScript.Tools.SendDataDAC("802", (lChaffLED <= 3  and 0 or 1) )
	ExportScript.Tools.SendDataDAC("803", (lChaffLED <= 4  and 0 or 1) )
	ExportScript.Tools.SendDataDAC("804", (lChaffLED <= 5  and 0 or 1) )
	ExportScript.Tools.SendDataDAC("805", (lChaffLED <= 6  and 0 or 1) )
	ExportScript.Tools.SendDataDAC("806", (lChaffLED <= 7  and 0 or 1) )
	ExportScript.Tools.SendDataDAC("807", (lChaffLED <= 8  and 0 or 1) )

	ExportScript.Tools.SendDataDAC("810", (lFlareLED <= 1  and 0 or 1) )
	ExportScript.Tools.SendDataDAC("811", (lFlareLED <= 2  and 0 or 1) )
	ExportScript.Tools.SendDataDAC("812", (lFlareLED <= 3  and 0 or 1) )
	ExportScript.Tools.SendDataDAC("813", (lFlareLED <= 4  and 0 or 1) )
	ExportScript.Tools.SendDataDAC("814", (lFlareLED <= 5  and 0 or 1) )
	ExportScript.Tools.SendDataDAC("815", (lFlareLED <= 6  and 0 or 1) )
	ExportScript.Tools.SendDataDAC("816", (lFlareLED <= 7  and 0 or 1) )
	ExportScript.Tools.SendDataDAC("817", (lFlareLED <= 8  and 0 or 1) )
end

function ExportScript.AF.StatusLamp()
	local lMCPState = LoGetMCPState() -- Warning Lights
	if lMCPState == nil then
		return
	end
	--ExportScript.Tools.WriteToLog('lMCPState: '..ExportScript.Tools.dump(lMCPState))
	--[[
	[RightTailPlaneFailure] = boolean: "false"
    [EOSFailure] = boolean: "false"
    [ECMFailure] = boolean: "false"
    [RightAileronFailure] = boolean: "false"
    [MasterWarning] = boolean: "false"
    [RightEngineFailure] = boolean: "false"
    [CannonFailure] = boolean: "false"
    [MLWSFailure] = boolean: "false"
    [ACSFailure] = boolean: "false"
    [RadarFailure] = boolean: "false"
    [HelmetFailure] = boolean: "false"
    [HUDFailure] = boolean: "false"
    [LeftMainPumpFailure] = boolean: "false"
    [RightWingPumpFailure] = boolean: "false"
    [LeftWingPumpFailure] = boolean: "false"
    [MFDFailure] = boolean: "false"
    [RWSFailure] = boolean: "false"
    [GearFailure] = boolean: "false"
    [HydraulicsFailure] = boolean: "false"
    [AutopilotFailure] = boolean: "true"
    [FuelTankDamage] = boolean: "false"
    [LeftAileronFailure] = boolean: "false"
    [CanopyOpen] = boolean: "false"
    [RightMainPumpFailure] = boolean: "false"
    [StallSignalization] = boolean: "false"
    [LeftEngineFailure] = boolean: "false"
    [AutopilotOn] = boolean: "false"
    [LeftTailPlaneFailure] = boolean: "false"
	]]

	ExportScript.Tools.SendDataDAC("700", lMCPState.LeftTailPlaneFailure == true and 1 or 0 )
	ExportScript.Tools.SendDataDAC("701", lMCPState.RightTailPlaneFailure == true and 1 or 0 )
	ExportScript.Tools.SendDataDAC("702", lMCPState.MasterWarning == true and 1 or 0 )
	ExportScript.Tools.SendDataDAC("703", lMCPState.LeftEngineFailure == true and 1 or 0 )
	ExportScript.Tools.SendDataDAC("704", lMCPState.RightEngineFailure == true and 1 or 0 )
	ExportScript.Tools.SendDataDAC("705", lMCPState.LeftAileronFailure == true and 1 or 0 )
	ExportScript.Tools.SendDataDAC("706", lMCPState.RightAileronFailure == true and 1 or 0 )
	ExportScript.Tools.SendDataDAC("707", lMCPState.LeftMainPumpFailure == true and 1 or 0 )
	ExportScript.Tools.SendDataDAC("708", lMCPState.RightMainPumpFailure == true and 1 or 0 )
	ExportScript.Tools.SendDataDAC("709", lMCPState.LeftWingPumpFailure == true and 1 or 0 )
	ExportScript.Tools.SendDataDAC("710", lMCPState.RightWingPumpFailure == true and 1 or 0 )
	ExportScript.Tools.SendDataDAC("711", lMCPState.EOSFailure == true and 1 or 0 )
	ExportScript.Tools.SendDataDAC("712", lMCPState.ECMFailure == true and 1 or 0 )
	ExportScript.Tools.SendDataDAC("713", lMCPState.CannonFailure == true and 1 or 0 )
	ExportScript.Tools.SendDataDAC("714", lMCPState.MLWSFailure == true and 1 or 0 )
	ExportScript.Tools.SendDataDAC("715", lMCPState.ACSFailure == true and 1 or 0 )
	ExportScript.Tools.SendDataDAC("716", lMCPState.RadarFailure == true and 1 or 0 )
	ExportScript.Tools.SendDataDAC("717", lMCPState.HelmetFailure == true and 1 or 0 )
	ExportScript.Tools.SendDataDAC("718", lMCPState.HUDFailure == true and 1 or 0 )
	ExportScript.Tools.SendDataDAC("719", lMCPState.MFDFailure == true and 1 or 0 )
	ExportScript.Tools.SendDataDAC("720", lMCPState.RWSFailure == true and 1 or 0 )
	ExportScript.Tools.SendDataDAC("721", lMCPState.GearFailure == true and 1 or 0 )
	ExportScript.Tools.SendDataDAC("722", lMCPState.HydraulicsFailure == true and 1 or 0 )
	ExportScript.Tools.SendDataDAC("723", lMCPState.AutopilotFailure == true and 1 or 0 )
	ExportScript.Tools.SendDataDAC("724", lMCPState.FuelTankDamage == true and 1 or 0 )
	ExportScript.Tools.SendDataDAC("725", lMCPState.CanopyOpen == true and 1 or 0 )
	ExportScript.Tools.SendDataDAC("726", lMCPState.StallSignalization == true and 1 or 0 )
	ExportScript.Tools.SendDataDAC("727", lMCPState.AutopilotOn == true and 1 or 0 )

	local lAccelerationUnits = LoGetAccelerationUnits()
	if lAccelerationUnits ~= nil then
		--ExportScript.Tools.WriteToLog('lAccelerationUnits: '..ExportScript.Tools.dump(lAccelerationUnits))
		ExportScript.Tools.SendDataDAC("732", (lAccelerationUnits.y > 8.0 and 1 or 0) ) -- lamp Over-G warning
	end
end

function ExportScript.AF.FuelQuantityIndicator(FunctionTyp)
	local lFunctionTyp = FunctionTyp or "Ikarus"
-- Fuel quantity shows the fuel remaining in all tanks
	local lEngineInfo = LoGetEngineInfo()
	if lEngineInfo == nil then
		return
	end
	--ExportScript.Tools.WriteToLog('lEngineInfo: '..ExportScript.Tools.dump(lEngineInfo))
	--[[
	[fuel_external] = number: "0"
    [Temperature] = {
        [left] = number: "626.99444580078"
        [right] = number: "626.99444580078"
    }
    [RPM] = {
        [left] = number: "87.453765869141"
        [right] = number: "87.453758239746"
    }
    [FuelConsumption] = {
        [left] = number: "0.1500396137767"
        [right] = number: "0.1500396137767"
    }
    [fuel_internal] = number: "3773.2749023438"
    [EngineStart] = {
        [left] = number: "0"
        [right] = number: "0"
    }
    [HydraulicPressure] = {
        [left] = number: "210"
        [right] = number: "210"
    }
	lPayloadInfo.Stations[8].CLSID == E8D4652F-FD48-45B7-BA5B-2AE05BB5A9CF   -- ext 800l Fuel Tank
	]]

	if ExportScript.Config.DACExport and lFunctionTyp == "DAC" then
		ExportScript.Tools.SendDataDAC("300", string.format("%d", ExportScript.Tools.round((lEngineInfo.fuel_internal / 10), 0, "ceil") * 10) ) -- total fuel in kg
		--ExportScript.Tools.SendDataDAC("301", string.format("%d", lEngineInfo.fuel_internal)) -- total fuel in kg
		--ExportScript.Tools.SendDataDAC("302", string.format("%d", lEngineInfo.fuel_external)) -- external fuel in kg

		ExportScript.Tools.SendDataDAC("304", (lEngineInfo.fuel_internal < 5600.0 and 1 or 0) ) -- Tank warning 1
		ExportScript.Tools.SendDataDAC("305", (lEngineInfo.fuel_internal < 4500.0 and 1 or 0) ) -- Tank warning 2
		ExportScript.Tools.SendDataDAC("306", (lEngineInfo.fuel_internal < 1500.0 and 1 or 0) ) -- Tank warning 3
		ExportScript.Tools.SendDataDAC("307", (lEngineInfo.fuel_internal < 800.0  and 1 or 0) ) -- Tank warning 4
		ExportScript.Tools.SendDataDAC("308", (lEngineInfo.fuel_internal < 600.0  and 1 or 0) ) -- Bingo Fuel
	end

	if ExportScript.Config.IkarusExport and lFunctionTyp == "Ikarus" then
		local lTotalFuel_9_3 = 0
		local lTotalFuel_5_0 = 0
		local lTotalFuel     = lEngineInfo.fuel_internal

		if lTotalFuel < 9000 then
			if lTotalFuel > 3000 then
				--[[
				y_min = 0.0		-- minimaler Ausgabewert
				y_max = 1.0		-- maximaler Ausgabewert
				x_min = 3000	-- minimaler Eingangswert
				x_max = 9000	-- maximaler Eingangswert
				x = 8000		-- aktueller Eingangswert

				d_y = 1			-- Delta Ausgabewerte (y_max - y_min)
				d_x = 6000		-- Delta Eingangswerte (x_max - x_min)
				m = 1.66666666666666666666666666667e-4	-- Steigung der linearen Funktion (d_y / d_x)
				n = -0,5		-- Schnittpunkt der Funktion mit y-Achse (y_max - m * x_max)

				y = 0.83333		-- Ergebnis (m * x + n)
				]]
				lTotalFuel_9_3 = 1.6666666666666666666666666666667e-4 * lTotalFuel + -0.5
			else
				lTotalFuel_9_3	= 0.0
			end
		else
			lTotalFuel_9_3 = 1.0
		end
		if lTotalFuel < 5000 then
			lTotalFuel_5_0 = lTotalFuel / 5000
		else
			lTotalFuel_5_0 = 1.0
		end

		-- TotalFuel_5_0
    	-- TotalFuel_9_3
		-- Light1
		-- Light2
		-- Light3
		-- Light4
		-- BingoLight
		ExportScript.Tools.SendData(300, lTotalFuel_5_0)
		ExportScript.Tools.SendData(301, lTotalFuel_9_3)
		ExportScript.Tools.SendData(302, (lEngineInfo.fuel_internal < 5600.0 and 1 or 0))   -- Tank warning 1
		ExportScript.Tools.SendData(303, (lEngineInfo.fuel_internal < 4500.0 and 1 or 0))   -- Tank warning 2
		ExportScript.Tools.SendData(304, (lEngineInfo.fuel_internal < 1500.0 and 1 or 0))   -- Tank warning 3
		ExportScript.Tools.SendData(305, (lEngineInfo.fuel_internal < 800.0  and 1 or 0))   -- Tank warning 4
		ExportScript.Tools.SendData(306, (lEngineInfo.fuel_internal < 600.0  and 1 or 0))   -- Bingo Fuel
	end
end

function ExportScript.AF.MechanicalDevicesIndicator(FunctionTyp)
	local lFunctionTyp = FunctionTyp or "Ikarus"
-- The mechanical devices indicator shows the position of the landing gear, flaps, leading edge flaps and airbrake
	local lMechInfo = LoGetMechInfo() -- mechanical components,  e.g. Flaps, Wheelbrakes,...
	--ExportScript.Tools.WriteToLog('lMechInfo: '..ExportScript.Tools.dump(lMechInfo))
	if lMechInfo == nil then
		return
	end
	--[[
	[hook] = {
        [status] = number: "0"
        [value] = number: "0"
    }
    [parachute] = {
        [status] = number: "0"
        [value] = number: "0"
    }
    [controlsurfaces] = {
        [eleron] = {
            [left] = number: "0"
            [right] = number: "-0.21084336936474"
        }
        [elevator] = {
            [left] = number: "-0"
            [right] = number: "-0"
        }
        [rudder] = {
            [left] = number: "0"
            [right] = number: "0"
        }
    }
    [airintake] = {
        [status] = number: "0"
        [value] = number: "0"
    }
    [canopy] = {
        [status] = number: "0"
        [value] = number: "0"
    }
    [refuelingboom] = {
        [status] = number: "0"
        [value] = number: "0"
    }
    [wing] = {
        [status] = number: "0"
        [value] = number: "0"
    }
    [noseflap] = {
        [status] = number: "0"
        [value] = number: "0"
    }
    [gear] = {
        [value] = number: "0"
        [nose] = {
            [rod] = number: "0"
        }
        [main] = {
            [left] = {
                [rod] = number: "0"
            }
            [right] = {
                [rod] = number: "0"
            }
        }
        [status] = number: "0"
    }
    [speedbrakes] = {
        [status] = number: "0"
        [value] = number: "0"
    }
    [wheelbrakes] = {
        [status] = number: "0"
        [value] = number: "0"
    }
    [flaps] = {
        [status] = number: "0"
        [value] = number: "0"
    }]]
	--local lTrueAirSpeed = LoGetTrueAirSpeed()
	--ExportScript.Tools.WriteToLog('lTrueAirSpeed: '..ExportScript.Tools.dump(lTrueAirSpeed))

	if ExportScript.Config.DACExport and lFunctionTyp == "DAC" then
		ExportScript.Tools.SendDataDAC("500", (((lMechInfo.gear.status == 1 and lMechInfo.gear.value < 1) or (lMechInfo.gear.status == 0 and lMechInfo.gear.value > 0)) and 1 or 0 ) ) -- gear warning light
		ExportScript.Tools.SendDataDAC("501", (lMechInfo.gear.value > 0.85 and 1 or 0) ) -- nose gear
		ExportScript.Tools.SendDataDAC("502", (lMechInfo.gear.value > 0.95 and 1 or 0) ) -- left gear
		ExportScript.Tools.SendDataDAC("503", (lMechInfo.gear.value > 0.97 and 1 or 0) )   -- right gear

		ExportScript.Tools.SendDataDAC("510", (lMechInfo.speedbrakes.value  > 0.1 and 1 or 0) ) -- speedbreakes on > 0.1 (0 - 1)

		ExportScript.Tools.SendDataDAC("531", (lMechInfo.flaps.value > 0.93 and 1 or 0) ) -- flap
		ExportScript.Tools.SendDataDAC("532", ((lMechInfo.gear.value > 0.5 and lMechInfo.gear.nose.rod > 0.02) and 1 or 0) ) -- Intake FOD shields
		ExportScript.Tools.SendDataDAC("533", ((lMechInfo.gear.status == 0 and lMechInfo.flaps.value > 0.93) and 1 or 0) ) -- Flaps Warning, same light as gear warning light, but blinking light
   
		ExportScript.Tools.SendDataDAC("541", (lMechInfo.parachute.value < 0.5 and 1 or 0) ) -- Parachute
	end

	if ExportScript.Config.IkarusExport and lFunctionTyp == "Ikarus" then
		local lWarningLight = 0.0

		--lWarningLight = ((lMechInfo.flaps.value > 0.93 and lTrueAirSpeed > 340) and 0.5 or 0.0) -- Speed Warning for Flaps, same light as gear warning light, but blinking light
		lWarningLight = ((lMechInfo.gear.status == 0 and lMechInfo.flaps.value > 0.93) and 1.0 or lWarningLight ) -- Speed Warning for Flaps, same light as gear warning light, but blinking light
		lWarningLight = (((lMechInfo.gear.status == 1 and lMechInfo.gear.value < 1) or (lMechInfo.gear.status == 0 and lMechInfo.gear.value > 0)) and 1.0 or lWarningLight )  -- gear warning light

		ExportScript.Tools.SendData(500, string.format("%.1f", lWarningLight))
		ExportScript.Tools.SendData(501, (lMechInfo.gear.value > 0.85 and 1 or 0))           -- nose gear
		ExportScript.Tools.SendData(502, (lMechInfo.gear.value > 0.95 and 1 or 0))           -- left gear
		ExportScript.Tools.SendData(503, (lMechInfo.gear.value == 1 and 1 or 0))             -- right gear
		ExportScript.Tools.SendData(510, (lMechInfo.speedbrakes.value  > 0.1 and 1 or 0))    -- speedbreakes on > 0.1 (0 - 1)
		ExportScript.Tools.SendData(531, (lMechInfo.flaps.value > 0.93 and 1 or 0))          -- flap
		ExportScript.Tools.SendData(532, ((lMechInfo.gear.value > 0.5 and lMechInfo.gear.nose.rod > 0.02) and 1 or 0))            -- Intake FOD shields		
	end
end

function ExportScript.AF.FC_WeaponPanel_SU27(FunctionTyp)
	local lFunctionTyp = FunctionTyp or "Ikarus"

	if ExportScript.AF.TmpWeaponPanelPresend == nil then
		ExportScript.AF.TmpWeaponPanelPresend = {[101] = 0, [102] = 0, [103] = 0, [104] = 0, [105] = 0, [106] = 0, [107] = 0, [108] = 0, [109] = 0, [110] = 0}
	end	

	if ExportScript.AF.TmpWeaponPanelActive == nil then
		ExportScript.AF.TmpWeaponPanelActive = {[201] = 0, [202] = 0, [203] = 0, [204] = 0, [205] = 0, [206] = 0, [207] = 0, [208] = 0, [209] = 0, [210] = 0}
	end

	if ExportScript.AF.TmpWeaponPanel == nil then
		ExportScript.AF.TmpWeaponPanel = {[231] = 0, [232] = 0, [233] = 0, [234] = 0, [235] = 0}
	end

	if ExportScript.AF.EventNumberFC_WeaponPanel == nil then
		ExportScript.AF.EventNumberFC_WeaponPanel = 0
	end

	if(ExportScript.AF.EventNumberFC_WeaponPanel < ExportScript.AF.EventNumber) then
		ExportScript.AF.EventNumberFC_WeaponPanel = ExportScript.AF.EventNumber

		-- defination
		ExportScript.AF.PayloadInfo = LoGetPayloadInfo()
		if ExportScript.AF.PayloadInfo ~= nil then
			if ExportScript.AF.CurrentStationTmp == nil then
				ExportScript.AF.CurrentStationTmp = -1
			end

			if ExportScript.AF.PayloadInfo.CurrentStation  > 0 and
				ExportScript.AF.CurrentStationTmp ~= ExportScript.AF.PayloadInfo.CurrentStation then
				ExportScript.AF.CurrentStationTmp  = ExportScript.AF.PayloadInfo.CurrentStation

				ExportScript.AF.TmpStationToPanel = {}
				ExportScript.AF.TmpStationToPanel[1] =  {Panel =  1, StationID = 101, CurrentID = 201 }	-- left
				ExportScript.AF.TmpStationToPanel[2] =  {Panel = 10, StationID = 110, CurrentID = 210 }	-- right
				ExportScript.AF.TmpStationToPanel[3] =  {Panel =  2, StationID = 102, CurrentID = 202 }
				ExportScript.AF.TmpStationToPanel[4] =  {Panel =  9, StationID = 109, CurrentID = 209 }
				ExportScript.AF.TmpStationToPanel[5] =  {Panel =  3, StationID = 103, CurrentID = 203 }
				ExportScript.AF.TmpStationToPanel[6] =  {Panel =  8, StationID = 108, CurrentID = 208 }
				ExportScript.AF.TmpStationToPanel[7] =  {Panel =  4, StationID = 104, CurrentID = 204 }
				ExportScript.AF.TmpStationToPanel[8] =  {Panel =  7, StationID = 107, CurrentID = 207 }
				ExportScript.AF.TmpStationToPanel[9] =  {Panel =  5, StationID = 105, CurrentID = 205 }
				ExportScript.AF.TmpStationToPanel[10] = {Panel =  6, StationID = 106, CurrentID = 206 }

				-- ExportScript.AF.TmpWeaponPanelActive reset
				for i = 201, 210, 1 do
					ExportScript.AF.TmpWeaponPanelActive[i] = 0
				end

				if ExportScript.AF.TmpStationToPanel[ExportScript.AF.PayloadInfo.CurrentStation] ~= nil then
					ExportScript.AF.TmpWeaponPanelActive[ExportScript.AF.TmpStationToPanel[ExportScript.AF.PayloadInfo.CurrentStation].CurrentID] = 1        -- currrent value

					table.foreach(ExportScript.AF.PayloadInfo.Stations, ExportScript.AF.WeaponStatusPanel_selectCurrentPayloadStation)   -- corresponding station
				end
			end

			local lWeaponType = 0.0	-- transversely striped
			if ExportScript.AF.PayloadInfo.CurrentStation > 0 then
				if ExportScript.AF.PayloadInfo.Stations[ExportScript.AF.PayloadInfo.CurrentStation].weapon.level1 == 4 then
					if ExportScript.AF.PayloadInfo.Stations[ExportScript.AF.PayloadInfo.CurrentStation].weapon.level2 == 4 then -- Weapon type Missle
						lWeaponType = 0.1	-- MSL
					elseif ExportScript.AF.PayloadInfo.Stations[ExportScript.AF.PayloadInfo.CurrentStation].weapon.level2 == 7 then -- Weapon type NURS with Container
						if ExportScript.AF.PayloadInfo.Stations[ExportScript.AF.PayloadInfo.CurrentStation].weapon.level3 == 33 then -- Weapon type Rocket
							lWeaponType = 0.2	-- RCT
						end
					elseif ExportScript.AF.PayloadInfo.Stations[ExportScript.AF.PayloadInfo.CurrentStation].weapon.level2 == 5 then -- Weapon type Bomb
						lWeaponType = 0.3	-- BB
					end
				end
			end

			--[[
			Weapon Panel
									 |
			---------------------------------------------------
			|    |    |    |    |    |    |    |    |    |    |
			1    2    3    4    5    C    6    7    8    9    10  -- display
			1    3    5    7    9         10   8    6    4    2   -- Paylod ID
			]]
			-- Payload Info
			-- weapon stations (panel) 1 (left) - 10 (right), no lamp for center station

			-- WeaponPresend1 {0, 1}
			-- WeaponPresend2 {0, 1}
			-- WeaponPresend3 {0, 1}
			-- WeaponPresend4 {0, 1}
			-- WeaponPresend5 {0, 1}
			-- WeaponPresend6 {0, 1}
			-- WeaponPresend7 {0, 1}
			-- WeaponPresend8 {0, 1}
			-- WeaponPresend9 {0, 1}
			-- WeaponPresend10 {0, 1}
			-- WeaponActive1 {0, 1}
			-- WeaponActive2 {0, 1}
			-- WeaponActive3 {0, 1}
			-- WeaponActive4 {0, 1}
			-- WeaponActive5 {0, 1}
			-- WeaponActive6 {0, 1}
			-- WeaponActive7 {0, 1}
			-- WeaponActive8 {0, 1}
			-- WeaponActive9 {0, 1}
			-- WeaponActive10 {0, 1}

			ExportScript.AF.TmpWeaponPanelPresend[101] = (ExportScript.AF.PayloadInfo.Stations[1].count  > 0 and 1 or 0)     -- weapon presend panel 1
			ExportScript.AF.TmpWeaponPanelPresend[102] = (ExportScript.AF.PayloadInfo.Stations[3].count  > 0 and 1 or 0)     -- weapon presend panel 2
			ExportScript.AF.TmpWeaponPanelPresend[103] = (ExportScript.AF.PayloadInfo.Stations[5].count  > 0 and 1 or 0)     -- weapon presend panel 3
			ExportScript.AF.TmpWeaponPanelPresend[104] = (ExportScript.AF.PayloadInfo.Stations[7].count  > 0 and 1 or 0)     -- weapon presend panel 4
			ExportScript.AF.TmpWeaponPanelPresend[105] = (ExportScript.AF.PayloadInfo.Stations[9].count  > 0 and 1 or 0)     -- weapon presend panel 5
			ExportScript.AF.TmpWeaponPanelPresend[106] = (ExportScript.AF.PayloadInfo.Stations[10].count > 0 and 1 or 0)     -- weapon presend panel 6
			ExportScript.AF.TmpWeaponPanelPresend[107] = (ExportScript.AF.PayloadInfo.Stations[8].count  > 0 and 1 or 0)     -- weapon presend panel 7
			ExportScript.AF.TmpWeaponPanelPresend[108] = (ExportScript.AF.PayloadInfo.Stations[6].count  > 0 and 1 or 0)     -- weapon presend panel 8
			ExportScript.AF.TmpWeaponPanelPresend[109] = (ExportScript.AF.PayloadInfo.Stations[4].count  > 0 and 1 or 0)     -- weapon presend panel 9
			ExportScript.AF.TmpWeaponPanelPresend[110] = (ExportScript.AF.PayloadInfo.Stations[2].count  > 0 and 1 or 0)     -- weapon presend panel 10
			--ExportScript.AF.TmpWeaponPanelActive[201]                           -- weapon active panel 1
			--ExportScript.AF.TmpWeaponPanelActive[202]                           -- weapon active panel 2
			--ExportScript.AF.TmpWeaponPanelActive[203]                           -- weapon active panel 3
			--ExportScript.AF.TmpWeaponPanelActive[204]                           -- weapon active panel 4
			--ExportScript.AF.TmpWeaponPanelActive[205]                           -- weapon active panel 5
			--ExportScript.AF.TmpWeaponPanelActive[206]                           -- weapon active panel 6
			--ExportScript.AF.TmpWeaponPanelActive[207]                           -- weapon active panel 7
			--ExportScript.AF.TmpWeaponPanelActive[208]                           -- weapon active panel 8
			--ExportScript.AF.TmpWeaponPanelActive[209]                           -- weapon active panel 9
			--ExportScript.AF.TmpWeaponPanelActive[210]                           -- weapon active panel 10
		end
	end

	if ExportScript.Config.IkarusExport and lFunctionTyp == "Ikarus" then
		for key, value in pairs(ExportScript.AF.TmpWeaponPanelPresend) do
			ExportScript.Tools.SendData(key, value)
		end
		for key, value in pairs(ExportScript.AF.TmpWeaponPanelActive) do
			ExportScript.Tools.SendData(key, value)
		end
	end

	if ExportScript.Config.DACExport and lFunctionTyp == "DAC" then
		for key, value in pairs(ExportScript.AF.TmpWeaponPanelPresend) do
			ExportScript.Tools.SendDataDAC(key, value)
		end
		for key, value in pairs(ExportScript.AF.TmpWeaponPanelActive) do
			ExportScript.Tools.SendDataDAC(key, value)
		end
	end
end