mirror of
https://github.com/weyne85/DCS-ExportScripts.git
synced 2025-10-29 16:58:18 +00:00
1773 lines
89 KiB
Lua
1773 lines
89 KiB
Lua
-- Uh-1H
|
|
-- https://github.com/asherao/DCS-ExportScripts
|
|
|
|
local base = _G -- game information
|
|
local os = base.os -- time
|
|
local Terrain = require('terrain') -- map info
|
|
|
|
ExportScript.FoundDCSModule = true
|
|
ExportScript.Version.UH1H = "1.2.1"
|
|
|
|
ExportScript.ConfigEveryFrameArguments =
|
|
{
|
|
--[[
|
|
every frames arguments
|
|
based of "mainpanel_init.lua"
|
|
Example (http://www.lua.org/manual/5.1/manual.html#pdf-string.format)
|
|
[DeviceID] = "Format"
|
|
[4] = "%.4f", <- floating-point number with 4 digits after point
|
|
[19] = "%0.1f", <- floating-point number with 1 digit after point
|
|
[129] = "%1d", <- decimal number
|
|
[5] = "%.f", <- floating point number rounded to a decimal number
|
|
]]
|
|
-- Controlls Pilot
|
|
--[184] = "%.4f", -- rudder
|
|
--[187] = "%.4f", -- stick_roll
|
|
--[186] = "%.4f", -- stick_pitch
|
|
--[200] = "%.4f", -- collective_position
|
|
-- Controlls CoPilot
|
|
--[185] = "%.4f", -- rudder_add
|
|
--[191] = "%.4f", -- stick_roll_sec
|
|
--[190] = "%.4f", -- stick_pitch_sec
|
|
--[207] = "%.4f", -- collective_position_operator
|
|
-- Gauges Pilot
|
|
[117] = "%0.4f", -- AIRSPEED_Nose {0.0, 20.0, 30.0, 40.0, 50.0, 60.0, 80.0, 120.0, 150.0} {0.0, 0.075, 0.19, 0.32, 0.395, 0.44, 0.55, 0.825, 1.0}
|
|
[118] = "%0.4f", -- AIRSPEED_Roof {0.0, 20.0, 30.0, 40.0, 50.0, 60.0, 80.0, 120.0, 150.0} {0.0, 0.075, 0.19, 0.32, 0.395, 0.44, 0.55, 0.825, 1.0}
|
|
-- Course Indicator ID-1347
|
|
[151] = "%.4f", -- VerticalBar {-1.0, 1.0} {-0.7, 0.7}
|
|
[152] = "%.4f", -- HorisontalBar {-1.0, 1.0} {-0.7, 0.7}
|
|
[153] = "%.4f", -- ToMarker
|
|
[154] = "%.4f", -- FromMarker
|
|
[156] = "%.4f", -- RotCourseCard
|
|
[157] = "%.1f", -- VerticalOFF
|
|
[158] = "%.1f", -- HorisontalOFF
|
|
-- ADF_ARN83
|
|
[45] = "%0.2f", -- ADF_ARN83_Frequency {0.0, 1.0} {0.0, 0.55}
|
|
[40] = "%.4f", -- ARN83_SignalLevel
|
|
-- GMC
|
|
[159] = "%.4f", -- GMC_CoursePointer1
|
|
[160] = "%.4f", -- GMC_CoursePointer2
|
|
[162] = "%.4f", -- GMC_HeadingMarker
|
|
[165] = "%.4f", -- GMC_Heading
|
|
[166] = "%.4f", -- GMC_Annunciator {-1.0, 1.0} {0.0, 1.0}
|
|
[167] = "%.2f", -- GMC_PowerFail
|
|
-- Copilot RMI
|
|
[266] = "%.4f", -- RMI_CoursePointer1
|
|
[267] = "%.4f", -- RMI_CoursePointer2
|
|
[269] = "%.4f", -- RMI_Heading
|
|
-- Altimeter Indicator AAU-32/A (operator)
|
|
[168] = "%.4f", -- Pointer {0.0, 1000.0} {0.0, 1.0}
|
|
[169] = "%.4f", -- Alt1AAU_10000_footCount {0.0, 10.0} {0.0, 1.0}
|
|
[170] = "%.4f", -- Alt1AAU_1000_footCount {0.0, 10.0} {0.0, 1.0}
|
|
[171] = "%.4f", -- Alt1AAU_100_footCount {0.0, 10.0} {0.0, 1.0}
|
|
[174] = "%.2f", -- AAU_32_Drum_Counter {-2.0, 1.0} {0.0, 0.3}
|
|
[175] = "%.2f", -- AAU_32_Drum_Counter {0.0, 10.0} {0.0, 1.0}
|
|
[176] = "%.2f", -- AAU_32_Drum_Counter {0.0, 10.0} {0.0, 1.0}
|
|
[177] = "%.1f", -- CodeOff_flag
|
|
-- Altimeter Indicator AAU-7/A (pilot) (AAU-31/A)
|
|
[178] = "%.4f", -- Alt_10000_AAU_7A {0.0, 100000.0} {0.0, 1.0}
|
|
[179] = "%.4f", -- Alt_1000_AAU_7A {0.0, 10000.0} {0.0, 1.0}
|
|
[180] = "%.4f", -- Alt_100_AAU_7A {0.0, 1000.0} {0.0, 1.0}
|
|
[182] = "%.4f", -- Press_AAU_7A {28.1, 31.0} {0.0, 1.0}
|
|
-- Gauges
|
|
[113] = "%.4f", -- EngOilPress {-3.0, 0.0, 100.0} {0.0, 0.029, 1.0}
|
|
[114] = "%.4f", -- EngOilTemp {-70.0, -50.0, 0.0, 100.0, 150.0} {0.0, 0.13, 0.38, 0.71, 1.0}
|
|
[115] = "%.4f", -- TransmOilPress {-3.0, 0.0, 100.0} {0.0, 0.029, 1.0}
|
|
[116] = "%.4f", -- TransmOilTemp {-70.0, -50.0, 0.0, 100.0, 150.0} {0.0, 0.13, 0.38, 0.71, 1.0}
|
|
--[117] = "%.4f", -- AIRSPEED_Nose
|
|
--[118] = "%.4f", -- AIRSPEED_Roof
|
|
[121] = "%.4f", -- ExhaustTemp {0.0, 500.0, 600.0, 900.0, 1000.0} {0.0, 0.508, 0.604, 0.904, 1.0}
|
|
[122] = "%.4f", -- EngineTach {0.0, 7200.0} {0.0, 1.0}
|
|
[123] = "%.4f", -- RotorTach {0.0, 360.0} {0.0, 1.0}
|
|
[119] = "%.4f", -- GasProducerTach {0.0, 101.5} {0.0, 1.0}
|
|
[120] = "%.4f", -- GasProducerTach_U {0.0, 10.0} {0.0, 1.0}
|
|
[124] = "%.4f", -- TorquePress {-3.0, 0.0, 100.0} {0.0, 0.029, 1.0}
|
|
[149] = "%.4f", -- VoltageDC {0.0, 30.0} {0.0, 1.0}
|
|
[150] = "%.4f", -- VoltageAC {0.0, 150.0} {0.0, 1.0}
|
|
[436] = "%.4f", -- LoadmeterMainGen {-1.5, 0.0, 12.5} {0.0, 0.156, 1.0}
|
|
[125] = "%.4f", -- LoadmeterSTBYGen {-1.5, 0.0, 12.5} {0.0, 0.09, 1.0}
|
|
[126] = "%.4f", -- FuelPress {-2.0, 0.0, 50.0} {0.0, 0.015, 1.0}
|
|
[239] = "%.4f", -- FuelQuantity {0.0, 1580.0} {0.0, 1.0}
|
|
-- Mechanic clock
|
|
[127] = "%.4f", -- CLOCK_hours {0.0, 12.0} {0.0, 1.0}
|
|
[128] = "%.4f", -- CLOCK_minutes {0.0, 60.0} {0.0, 1.0}
|
|
[129] = "%.4f", -- CLOCK_seconds {0.0, 60.0} {0.0, 1.0}
|
|
--
|
|
[132] = "%.4f", -- TurnPtr {-1.0, 1.0}
|
|
[133] = "%.4f", -- SideSlip {-1.0, 1.0}
|
|
[134] = "%.4f", -- VertVelocPilot {-4000.0, -3000.0, -1500.0, -1000.0, 1000.0, 1500.0, 3000.0, 4000.0} {-1.0, -0.81, -0.54, -0.36, 0.36, 0.54, 0.81, 1.0}
|
|
[251] = "%.4f", -- VertVelocCopilot {-4000.0, -3000.0, -1500.0, -1000.0, 1000.0, 1500.0, 3000.0, 4000.0} {-1.0, -0.81, -0.54, -0.36, 0.36, 0.54, 0.81, 1.0}
|
|
-- ADI - pilot
|
|
[142] = "%.4f", -- Attitude_Roll {1.0, -1.0}
|
|
[143] = "%.4f", -- Attitude_Pitch {1.0, -1.0}
|
|
[148] = "%.1f", -- Attitude_Off_flag
|
|
-- ADI - operator
|
|
[135] = "%.4f", -- Attitude_Roll_left {1.0, -1.0}
|
|
[136] = "%.4f", -- Attitude_Pitch_left {1.0, -1.0}
|
|
--[141] = "%.1f", -- Attitude_Off_flag_left {0.0, 1.0} {1.0, 0.0}
|
|
[138] = "%.4f", -- Attitude_PitchShift {0.0, 1.0} {-1.0, 1.0}
|
|
-- operator
|
|
--[149] = "%.4f", -- DCVoltmeter
|
|
--[150] = "%.4f", -- ACVoltmeter
|
|
-- UHF_ARC51
|
|
[10] = "%.4f", -- UHF_ARC51_Freq1 {2.0, 3.0} {0.0, 1.0}
|
|
[11] = "%.4f", -- UHF_ARC51_Freq2 {0.0, 10.0} {0.0, 1.0}
|
|
[12] = "%.4f", -- UHF_ARC51_Freq3 {0.0, 10.0} {0.0, 1.0}
|
|
[13] = "%.4f", -- UHF_ARC51_Freq4 {0.0, 10.0} {0.0, 1.0}
|
|
[14] = "%.4f", -- UHF_ARC51_Freq5 {0.0, 10.0} {0.0, 1.0}
|
|
-- NAV_ARN82
|
|
[46] = "%.4f", -- NAV_ARN82_Freq1 {0.0, 10.0} {0.0, 1.0}
|
|
[47] = "%.4f", -- NAV_ARN82_Freq2 {0.0, 10.0} {0.0, 1.0}
|
|
[48] = "%.4f", -- NAV_ARN82_Freq3 {0.0, 10.0} {0.0, 1.0}
|
|
[49] = "%.4f", -- NAV_ARN82_Freq4 {0.0, 10.0} {0.0, 1.0}
|
|
[50] = "%.4f", -- NAV_ARN82_Freq5 {0.0, 10.0} {0.0, 1.0}
|
|
-- VHF_ARC134
|
|
[1] = "%.4f", -- VHF_ARC134_Freq1 {0.0, 10.0} {0.0, 1.0}
|
|
[2] = "%.4f", -- VHF_ARC134_Freq2 {0.0, 10.0} {0.0, 1.0}
|
|
[3] = "%.4f", -- VHF_ARC134_Freq3 {0.0, 10.0} {0.0, 1.0}
|
|
[4] = "%.4f", -- VHF_ARC134_Freq4 {0.0, 10.0} {0.0, 1.0}
|
|
--
|
|
[56] = "%.1f", -- Marker_Beacon_Lamp {0.0, 1.0} {0.0, 0.9}
|
|
-- Panel_Shake
|
|
--[264] = "%.1f", -- Panel_Shake_Z
|
|
--[265] = "%.1f", -- Panel_Shake_Y
|
|
--[282] = "%.1f", -- Panel_Rot_X
|
|
-- Wiper
|
|
--[284] = "%.4f", -- Wiper_Pilot
|
|
--[283] = "%.4f", -- Wiper_Operator
|
|
-- Pilot Model
|
|
--[242] = "%.1f", -- Pilot_Model
|
|
--[245] = "%.1f", -- Operator_Model
|
|
-- Flexible sight station
|
|
--[263] = "%.2f", -- FlexSightHeight
|
|
--[261] = "%.4f", -- FlexSightAzimuth
|
|
--[262] = "%.4f", -- FlexSightElevation
|
|
-- Pilot sight station
|
|
--[438] = "%.4f", -- PilotSightHeight
|
|
--[442] = "%.2f", -- PilotSightGlass
|
|
-- Light
|
|
[279] = "%.4f", -- light_ConsoleLight
|
|
[410] = "%.4f", -- light_DomeLight
|
|
[411] = "%.4f", -- light_DomeLightGreen
|
|
-- Damage
|
|
--[248] = "%.1f", -- DeadPilot
|
|
--[249] = "%.1f", -- DeadCoPilot
|
|
--[414] = "%.4f", -- LeftWindShield
|
|
--[413] = "%.4f", -- RightWindShield
|
|
--[412] = "%.4f", -- DownBlisters
|
|
--[417] = "%.4f", -- UpRightBlister
|
|
--[418] = "%.4f", -- UpLeftBlister
|
|
--[415] = "%.4f", -- RightWindow
|
|
--[416] = "%.4f", -- LeftWindow
|
|
--[422] = "%.4f", -- RightDoor
|
|
--[420] = "%.4f", -- LeftDoor
|
|
--
|
|
[437] = "%.3f", -- RamTemp
|
|
-- Radar Altimeter
|
|
[443] = "%.4f", -- RALT_Needle {0.0, 0.98} {0.0, 0.98}
|
|
[467] = "%.1f", -- RALT_Off_Flag
|
|
[447] = "%.f", -- RALT_LO_Lamp
|
|
[465] = "%.f", -- RALT_HI_Lamp
|
|
[444] = "%.4f", -- RALT_LO_Index {-0.02, -0.01, -0.0001,0.0, 0.744} {0.97, 0.99, 1.0, 0.0, 0.744}
|
|
[466] = "%.4f", -- RALT_HI_Index {0.0, 0.744} {0.0, 0.744}
|
|
[468] = "%0.1f", -- RALT_Digit_1 {0.0, 10.0} {0.0, 1.0}
|
|
[469] = "%0.1f", -- RALT_Digit_2 {0.0, 10.0} {0.0, 1.0}
|
|
[470] = "%0.1f", -- RALT_Digit_3 {0.0, 10.0} {0.0, 1.0}
|
|
[471] = "%0.1f", -- RALT_Digit_4 {0.0, 10.0} {0.0, 1.0}
|
|
-- FLARE CHAFF
|
|
[460] = "%.1f", -- FLARE_Digit_1 {0.0, 10.0} {0.0, 1.0}
|
|
[461] = "%.1f", -- FLARE_Digit_2 {0.0, 10.0} {0.0, 1.0}
|
|
[462] = "%.1f", -- CHAFF_Digit_1 {0.0, 10.0} {0.0, 1.0}
|
|
[463] = "%.1f", -- CHAFF_Digit_2 {0.0, 10.0} {0.0, 1.0}
|
|
-- XM130 Chaff Flare
|
|
[458] = "%.f", -- lamp_XM130_ARMED
|
|
-- SIGHTS_FOR_CIVIL
|
|
[473] = "%.1f", -- SIGHTS_FOR_CIVIL
|
|
-- Main Panel Lights
|
|
[277] = "%.f", -- lamp_MASTER
|
|
[276] = "%.f", -- lamp_LOW_RPM
|
|
[275] = "%.f", -- lamp_FIRE
|
|
-- Caution Panel Lights
|
|
[91] = "%.f", -- lamp_ENGINE_OIL_PRESS
|
|
[92] = "%.f", -- lamp_ENGINE_ICING
|
|
[93] = "%.f", -- lamp_ENGINE_ICE_JET
|
|
[94] = "%.f", -- lamp_ENGINE_CHIP_DET
|
|
[95] = "%.f", -- lamp_LEFT_FUEL_BOOST
|
|
[96] = "%.f", -- lamp_RIGHT_FUEL_BOOST
|
|
[97] = "%.f", -- lamp_ENG_FUEL_PUMP
|
|
[98] = "%.f", -- lamp_20_MINUTE
|
|
[99] = "%.f", -- lamp_FUEL_FILTER
|
|
[100] = "%.f", -- lamp_GOV_EMERG
|
|
[101] = "%.f", -- lamp_AUX_FUEL_LOW
|
|
[102] = "%.f", -- lamp_XMSN_OIL_PRESS
|
|
[103] = "%.f", -- lamp_XMSN_OIL_HOT
|
|
[104] = "%.f", -- lamp_HYD_PRESSURE
|
|
[105] = "%.f", -- lamp_ENGINE_INLET_AIR
|
|
[106] = "%.f", -- lamp_INST_INVERTER
|
|
[107] = "%.f", -- lamp_DC_GENERATOR
|
|
[108] = "%.f", -- lamp_EXTERNAL_POWER
|
|
[109] = "%.f", -- lamp_CHIP_DETECTOR
|
|
[110] = "%.f", -- lamp_IFF
|
|
-- M21
|
|
[254] = "%.f", -- lamp_M21_ARMED
|
|
[255] = "%.f", -- lamp_M21_SAFE
|
|
--
|
|
[76] = "%.f", -- lamp_IFF_REPLY
|
|
[77] = "%.f", -- lamp_IFF_TEST
|
|
-- Electic Gauges
|
|
[526] = "%.4f", -- DC_voltage {0.0, 30.0} {0.0, 1.0}
|
|
[532] = "%.2f", -- AC_voltage {0.0, 100.0, 150.0, 200.0, 250.0} {0.0, 0.14, 0.31, 0.56, 1.0}
|
|
[527] = "%.4f", -- DC_battery_I_current {0.0, 400.0} {0.0, 1.0}
|
|
[528] = "%.4f", -- DC_battery_II_current {0.0, 400.0} {0.0, 1.0}
|
|
[529] = "%.4f", -- DC_VU_I_current {0.0, 400.0} {0.0, 1.0}
|
|
[530] = "%.4f", -- DC_VU_II_current {0.0, 400.0} {0.0, 1.0}
|
|
[531] = "%.4f", -- DC_VU_III_current {0.0, 400.0} {0.0, 1.0}
|
|
[533] = "%.2f", -- AC_generator_I_current {0.0, 50, 70, 90, 120, 130, 140, 150} {0.0, 0.1, 0.2, 0.36, 0.63, 0.75, 0.86, 1.0}
|
|
[534] = "%.2f", -- AC_generator_II_current {0.0, 50, 70, 90, 120, 130, 140, 150} {0.0, 0.1, 0.2, 0.36, 0.63, 0.75, 0.86, 1.0}
|
|
[371] = "%.2f", -- AntiIce_ampermeter {0.0, 50, 70, 90, 120, 130, 140, 150} {0.0, 0.1, 0.2, 0.36, 0.63, 0.75, 0.86, 1.0}
|
|
-- Magnetic Compass
|
|
--[272] = "%.4f", -- Heading
|
|
[273] = "%.4f", -- Roll
|
|
[274] = "%.4f" -- Pitch
|
|
}
|
|
ExportScript.ConfigArguments =
|
|
{
|
|
--[[
|
|
arguments for export in low tick interval
|
|
based on "clickabledata.lua"
|
|
]]
|
|
-- Electrosystem
|
|
[219] = "%1d", -- Battery
|
|
[220] = "%1d", -- Starter/Stdby GEN
|
|
[218] = "%.1f", -- DC Voltmeter Selector BAT, MAIN GEN, STBY GEN, ESS BUS, NON-ESS BUS {0.0,0.1,0.2,0.3,0.4}
|
|
[221] = "%1d", -- Non Essential bus
|
|
[214] = "%.1f", -- AC Voltmeter Selector AB, AC PHASE, BC {0.0,0.1,0.2}
|
|
[215] = "%1d", -- Inverter MAIN/OFF/SPARE {-1.0,0.0,1.0}
|
|
-- Electrosystem circuit breakers
|
|
-- Essential BUS. line 1
|
|
[285] = "%1d", -- CB IFF APX 1 (N/F)
|
|
[287] = "%1d", -- CB IFF APX 2 (N/F)
|
|
[289] = "%1d", -- CB Prox. warn.(N/F)
|
|
[291] = "%1d", -- CB Marker beacon
|
|
[293] = "%1d", -- CB VHF Nav. (ARN-82)
|
|
[295] = "%1d", -- CB LF Nav. (ARN-83)
|
|
[297] = "%1d", -- CB Intercom CPLT(N/F)
|
|
[299] = "%1d", -- CB Intercom PLT
|
|
[349] = "%1d", -- CB ARC-102 HF Static INVTR(N/F)
|
|
[351] = "%1d", -- CB HF ANT COUPLR(N/F)
|
|
[353] = "%1d", -- CB HF ARC-102(N/F)
|
|
[355] = "%1d", -- CB FM Radio
|
|
[357] = "%1d", -- CB UHF Radio
|
|
[359] = "%1d", -- CB FM 2 Radio(N/F)
|
|
[361] = "%1d", -- CB VHF AM Radio
|
|
[321] = "%1d", -- CB Pitot tube(N/F)
|
|
[345] = "%1d", -- CB Rescue hoist CTL(N/F)
|
|
[347] = "%1d", -- CB Rescue hoist cable cutter (N/F)
|
|
-- Essential BUS. line 2
|
|
[303] = "%1d", -- CB Wind wiper PLT
|
|
[301] = "%1d", -- CB Wind wiper CPLT
|
|
[305] = "%1d", -- CB KY-28 voice security(N/F)
|
|
[403] = "%1d", -- CB Starter Relay(N/F)
|
|
[307] = "%1d", -- CB Search light power(N/F)
|
|
[309] = "%1d", -- CB Landing light power(N/F)
|
|
[311] = "%1d", -- CB Landing & Search light control(N/F)
|
|
[313] = "%1d", -- CB Anticollision light(N/F)
|
|
[363] = "%1d", -- CB Fuselage lights(N/F)
|
|
[365] = "%1d", -- CB Navigation lights(N/F)
|
|
[367] = "%1d", -- CB Dome lights(N/F)
|
|
[369] = "%1d", -- CB Cockpit lights(N/F)
|
|
[371] = "%1d", -- CB Caution lights(N/F)
|
|
[373] = "%1d", -- CB Console lights(N/F)
|
|
[375] = "%1d", -- CB INST Panel lights(N/F)
|
|
[377] = "%1d", -- CB INST SEC lights(N/F)
|
|
[323] = "%1d", -- CB Cabin heater (Outlet valve)(N/F)
|
|
[325] = "%1d", -- CB Cabin heater (Air valve)(N/F)
|
|
[343] = "%1d", -- CB Rescue hoist PWR(N/F)
|
|
-- Essential BUS. line 3
|
|
[327] = "%1d", -- CB RPM Warning system(N/F)
|
|
[329] = "%1d", -- CB Engine anti-ice(N/F)
|
|
[331] = "%1d", -- CB Fire detector(N/F)
|
|
[333] = "%1d", -- CB LH fuel boost pump(N/F)
|
|
[335] = "%1d", -- CB Turn & Slip indicator
|
|
[337] = "%1d", -- CB TEMP indicator(N/F)
|
|
[339] = "%1d", -- CB HYD Control(N/F)
|
|
[341] = "%1d", -- CB FORCE Trim(N/F)
|
|
[379] = "%1d", -- CB Cargo hook release(N/F)
|
|
[381] = "%1d", -- CB EXT Stores jettison(N/F)
|
|
[383] = "%1d", -- CB Spare inverter PWR(N/F)
|
|
[385] = "%1d", -- CB Inverter CTRL (N/F)
|
|
[387] = "%1d", -- CB Main inverter PWR(N/F)
|
|
[389] = "%1d", -- CB Generator & Bus Reset(N/F)
|
|
[391] = "%1d", -- CB STBY Generator Field(N/F)
|
|
[393] = "%1d", -- CB Governor Control(N/F)
|
|
[395] = "%1d", -- CB IDLE Stop release(N/F)
|
|
[397] = "%1d", -- CB RH fuel boost pump(N/F)
|
|
[399] = "%1d", -- CB Fuel TRANS(N/F)
|
|
[401] = "%1d", -- CB Fuel valves(N/F)
|
|
-- Non Essential BUS
|
|
[315] = "%1d", -- CB Heated blanket 1(N/F)
|
|
[317] = "%1d", -- CB Heated blanket 2(N/F)
|
|
[319] = "%1d", -- CB Voltmeter Non Ess Bus(N/F)
|
|
-- other circuit breakers
|
|
[405] = "%1d", -- CB Ignition system(N/F)
|
|
-- AC BUS circuit breakers
|
|
[423] = "%1d", -- CB Pilot ATTD1(N/F)
|
|
[424] = "%1d", -- CB Pilot ATTD2(N/F)
|
|
[425] = "%1d", -- CB Copilot ATTD1(N/F)
|
|
[426] = "%1d", -- CB Copilot ATTD2(N/F)
|
|
[427] = "%1d", -- CB Gyro Cmps(N/F)
|
|
[428] = "%1d", -- CB Fuel Quantity(N/F)
|
|
[429] = "%1d", -- CB 28V Trans(N/F)
|
|
[430] = "%1d", -- CB Fail Relay(N/F)
|
|
[431] = "%1d", -- CB Pressure Fuel(N/F)
|
|
[432] = "%1d", -- CB Pressure Torque(N/F)
|
|
[433] = "%1d", -- CB Pressure XMSN(N/F)
|
|
[434] = "%1d", -- CB Pressure Eng(N/F)
|
|
[435] = "%1d", -- CB Course Ind(N/F)
|
|
--
|
|
[238] = "%1d", -- Pitot Heater
|
|
[216] = "%1d", -- Main generator (ON/OFF/RESET) {-1, 0, 1}
|
|
[217] = "%1d", -- Main generator switch cover
|
|
--
|
|
[111] = "%1d", -- Reset/Test switch {-1, 0, 1}
|
|
[112] = "%1d", -- Bright/Dim switch {-1, 0, 1}
|
|
-- Fuel system
|
|
[81] = "%1d", -- Main Fuel
|
|
[240] = "%1d", -- Test Fuel Gauge
|
|
--Transponder APX-72
|
|
[58] = "%.1f", -- Code ZERO/B/A/HOLD input{-1.0,0.0,1.0} output{0.0,0.1,0.2,0.3}
|
|
[59] = "%.1f", -- Master OFF/STBY/LOW/NOMR/EMER {0.0,0.1,0.2,0.3,0.4}
|
|
[60] = "%1d", -- Audio/light
|
|
|
|
[61] = "%1d", -- Test M-1 {-1, 0, 1}
|
|
[62] = "%1d", -- Test M-2 {-1, 0, 1}
|
|
[63] = "%1d", -- Test M-3A {-1, 0, 1}
|
|
[64] = "%1d", -- Test M-C {-1, 0, 1}
|
|
--
|
|
[65] = "%1d", -- RAD Test/Mon {-1, 0, 1}
|
|
[66] = "%1d", -- Ident/Mic {-1, 0, 1}
|
|
-- IFF
|
|
[67] = "%1d", -- IFF On/Out
|
|
|
|
[68] = "%.2f", -- MODE1-WHEEL1 0/1/2/3 {0.0,0.33,0.66,0.99}
|
|
[69] = "%.2f", -- MODE1-WHEEL2 0/1/2/3/4/5/6/7 {0.0,0.11,0.22,0.33,0.44,0.55,0.66,0.77}
|
|
|
|
[70] = "%.2f", -- MODE3A-WHEEL1 0/1/2/3/4/5/6/7 {0.0,0.11,0.22,0.33,0.44,0.55,0.66,0.77}
|
|
[71] = "%.2f", -- MODE3A-WHEEL2 0/1/2/3/4/5/6/7 {0.0,0.11,0.22,0.33,0.44,0.55,0.66,0.77}
|
|
[72] = "%.2f", -- MODE3A-WHEEL3 0/1/2/3/4/5/6/7 {0.0,0.11,0.22,0.33,0.44,0.55,0.66,0.77}
|
|
[73] = "%.2f", -- MODE3A-WHEEL4 0/1/2/3/4/5/6/7 {0.0,0.11,0.22,0.33,0.44,0.55,0.66,0.77}
|
|
|
|
[74] = "%1d", -- Reply test, Button
|
|
[78] = "%.4f", -- Reply test, (Axis) {0.0,1.0} in 0.1 steps
|
|
|
|
[75] = "%1d", -- Test test, Button
|
|
[79] = "%4f", -- Test test, (Axis) {0.0,1.0} in 0.1 steps
|
|
|
|
[130] = "%1d", -- Winding/Adjustment Clock (Axis) {0.0,1.0} in 0.04 steps
|
|
[131] = "%1d", -- Winding/Adjustment Clock, Button
|
|
-- ENGINE INTERFACE
|
|
[250] = "%.4f", -- Throttle (Axis) {-1.0, 0.4} in -0.1 steps
|
|
[206] = "%1d", -- Throttle Stop
|
|
|
|
[84] = "%1d", -- De-Ice On/Off
|
|
[80] = "%1d", -- Low RPM Warning
|
|
[86] = "%1d", -- Chip Detector {-1, 0, 1}
|
|
[85] = "%1d", -- Governor Emer/Auto
|
|
[90] = "%1d", -- Hydraulic Control
|
|
[89] = "%1d", -- Force Trim
|
|
[203] = "%1d", -- Governor {-1, 0, 1}
|
|
[278] = "%1d", -- Fire Test
|
|
-- ADI OPERATOR
|
|
-- Copilot's attutude indicator
|
|
[140] = "%1d", -- Cage Copilot's Attitude Indicator, Button
|
|
[146] = "%.4f", -- Attitude Indicator Pitch Trim Knob (Axis) {0.0,1.0} in 0.1 steps
|
|
-- ADI PILOT
|
|
[145] = "%.4f", -- Attitude Indicator Pitch Trim Knob (Axis) {0.0,1.0} in 0.1 steps
|
|
[144] = "%.4f", -- Attitude Indicator Roll Trim Knob (Axis) {0.0,1.0} in 0.1 steps
|
|
-- AAU32
|
|
-- Copilot's altimeter
|
|
[172] = "%.4f", -- Pressure Adjustment (Axis) {0.0,1.0} in 0.2 steps
|
|
-- AAU7
|
|
-- Pilot's altimeter
|
|
[181] = "%.4f", -- Pressure Adjustment (Axis) {0.0,1.0} in 0.2 steps
|
|
-- VHF ARC-134
|
|
[6] = "%1d", -- Comm Test Button
|
|
[7] = "%.2f", -- Frequency MHz / Power. Right mouse click to cycle power. Rotate mouse wheel to change frequency value, Button {0.85, 1.0}
|
|
[5] = "%.1f", -- Frequency MHz / Power. Right mouse click to cycle power. Rotate mouse wheel to change frequency value (Axis) {0.0, 1.0} in 0.1 Steps
|
|
[8] = "%.2f", -- Frequency kHz / Volume. Rotate mouse wheel to change frequency value. Left or Right click to adjust volume (Axis) {0.0, 0.65} in 0.05 Steps
|
|
[9] = "%.1f", -- Frequency kHz / Volume. Rotate mouse wheel to change frequency value. Left or Right click to adjust volume (Axis) {0.0, 1.0} in 0.1 Steps
|
|
-- Intercom Control Panel
|
|
[29] = "%.4f", -- Intercom volume (Axis) {0.3,1.0} in 0.1 Steps
|
|
[23] = "%1d", -- VHF AM Radio Receiver
|
|
[24] = "%1d", -- UHF Radio Receiver
|
|
[25] = "%1d", -- VHF FM Radio Receiver
|
|
[26] = "%1d", -- Receiver 4 N/F
|
|
[27] = "%1d", -- INT Receiver
|
|
[28] = "%1d", -- Receiver NAV
|
|
[30] = "%.1f", -- Intercom Mode (PVT - hot line; INT - interphone; 1 - VHF FM transmitter; 2 - UHF transmitter; 3 - VHF AM transmitter; 4 - Not used) {0.0,0.1,0.2,0.3,0.4,0.5}
|
|
[194] = "%.1f", -- Radio/ICS
|
|
-- ARC 51BX UHF Raido
|
|
[16] = "%.2f", -- Preset Channel Selector 1/2/.../19/20 {0.0,0.05,...,0.90,0.95}
|
|
[18] = "%.4f", -- 10 MHz Selector (Axis) {0.0,1.0} in 0.1 Steps
|
|
[19] = "%.4f", -- 1 MHz Selector (Axis) {0.0,1.0} in 0.1 Steps
|
|
[20] = "%.4f", -- 50 kHz Selector (Axis) {0.0,1.0} in 0.1 Steps
|
|
|
|
[15] = "%.1f", -- Frequency Mode Dial {0.0,0.1,0.2}
|
|
[17] = "%.1f", -- Function Dial {0.0,0.1,0.2,0.3}
|
|
[22] = "%1d", -- Squelch
|
|
[21] = "%.4f", -- Volume (Axis) {0.0,1.0} in 0.1 Steps
|
|
-- VHF ARC 131
|
|
[31] = "%.1f", -- Frequency Tens MHz {0.3,0.4,0.5,0.6,0.7}
|
|
[32] = "%.1f", -- Frequency Ones MHz {0.0,0.1,0.2,0.3,0.4,0.5,0.6,0.7,0.8,0.9}
|
|
[33] = "%.1f", -- Frequency Decimals MHz {0.0,0.1,0.2,0.3,0.4,0.5,0.6,0.7,0.8,0.9}
|
|
[34] = "%.1f", -- Frequency Hundredths MHz {0.0,0.1}
|
|
[35] = "%.1f", -- Mode OFF/TR/RETRAN(N/F)/HOME(N/F) {0.0,0.1,0.2,0.3}
|
|
[36] = "%.1f", -- quelch Mode {0.0,0.1,0.2}
|
|
[37] = "%.4f", -- Volume (Axis) {0.0,1.0} in 0.1 Steps
|
|
-- ARN-82
|
|
[52] = "%.2f", -- Frequency MHz / Power. Right mouse click to cycle power. Rotate mouse wheel to change frequency value, Button {0.8, 1.0}
|
|
[51] = "%.4f", -- Frequency MHz / Power. Right mouse click to cycle power. Rotate mouse wheel to change frequency value (Axis) {0.0,1.0} in 0.1 Steps
|
|
[53] = "%.4f", -- Frequency kHz / Volume. Rotate mouse wheel to change frequency value. Left or Right click to adjust volume (Axis) {0.0, 0.65} in 0.15 Steps
|
|
[54] = "%.4f", -- Frequency kHz / Volume. Rotate mouse wheel to change frequency value. Left or Right click to adjust volume (Axis) {0.0,1.0} in 0.1 Steps
|
|
-- Marker beakon
|
|
[57] = "%.4f", -- Marker beacon On/Off/Volume (Axis) {0.0,1.0} in 0.1 Steps
|
|
[55] = "%1d", -- Marker beacon sensing
|
|
-- AN/ARN-83
|
|
[42] = "%.1f", -- ADF Loop Antenna speed Left/Nom/Right {0.1,0.2,0.3}
|
|
[41] = "%1d", -- BFO (N/F)
|
|
[43] = "%.1f", -- Gain control / Mode. Right mouse click to cycle mode. Rotate mouse wheel to adjust gain (Axis) OFF/ADF/ANT/LOOP {0.0,0.3} in 0.1 Steps
|
|
[44] = "%.4f", -- Gain control / Mode. Right mouse click to cycle mode. Rotate mouse wheel to adjust gain (Axis) {0.0,1.0} in 0.1 Steps
|
|
[38] = "%1d", -- Tune control / Band selection. Right mouse click to select a band. Rotate mouse wheel to adjust tune 190/400/800 {-1.0,0.0,1.0}
|
|
[39] = "%.4f", -- Tune control / Band selection. Right mouse click to select a band. Rotate mouse wheel to adjust tune (Axis) {0.0,1.0} in 0.1 Steps
|
|
-- Nav lights
|
|
[222] = "%.1f", -- Navigation lights, OFF/1/2/3/4/BRT {0.0,0.1,0.2,0.3,0.4,0.5}
|
|
[223] = "%1d", -- Position Lights, STEADY/OFF/FLASH {-1.0,0.0,1.0}
|
|
[224] = "%1d", -- Position Lights, DIM/BRIGHT
|
|
[225] = "%1d", -- Anti-Collision Lights, ON/OFF
|
|
[202] = "%1d", -- Landing Light
|
|
[201] = "%1d", -- Search Light
|
|
[205] = "%1d", -- Landing Light Ctrl
|
|
-- Light System
|
|
[230] = "%.4f", -- Overhead Console Panel Lights Brightness Rheostat (Axis) {0.0,1.0} in 0.2 Steps
|
|
[231] = "%.4f", -- Pedestal Lights Brightness Rheostat (Axis) {0.0,1.0} in 0.2 Steps
|
|
[232] = "%.4f", -- Secondary Instrument Lights Brightness Rheostat (Axis) {0.0,1.0} in 0.2 Steps
|
|
[233] = "%.4f", -- Engine Instrument Lights Brightness Rheostat (Axis) {0.0,1.0} in 0.2 Steps
|
|
[234] = "%.4f", -- Copilot Instrument Lights Brightness Rheostat (Axis) {0.0,1.0} in 0.2 Steps
|
|
[235] = "%.4f", -- Pilot Instrument Lights Brightness Rheostat (Axis) {0.0,1.0} in 0.2 Steps
|
|
[226] = "%1d", -- Dome Light Ctrl
|
|
-- HEATING SYSTEM
|
|
[236] = "%.1f", -- Bleed Air, OFF/1/2/3/4 {0.0,0.1,0.2,0.3,0.4}
|
|
-- GCI(ID-998/ASN)
|
|
[163] = "%.4f", -- Heading Set Knob (Axis) {0.0,1.0} in 0.1 Steps
|
|
[161] = "%.4f", -- Compass Synchronizing (Axis) {0.0,1.0} in 0.05 Steps
|
|
[164] = "%1d", -- ADF/VOR control
|
|
[241] = "%1d", -- DG/Slave gyro mode
|
|
-- COURSE IND
|
|
[155] = "%.4f", -- Course select knob (Axis) {0.0,1.0} in 0.1 Steps
|
|
-- weapon system
|
|
[252] = "%1d", -- Armed/Safe/Off {-1.0,0.0,1.0}
|
|
[253] = "%1d", -- Left/Right/All {-1.0,0.0,1.0}
|
|
[256] = "%1d", -- 7.62/2.75/40 {-1.0,0.0,1.0}
|
|
[257] = "%.1f", -- Rocket Pair {0.0,0.1,0.2,0.3,0.4,0.5,0.6,0.7}
|
|
[258] = "%1d", -- Rocket Reset
|
|
[259] = "%1d", -- Jettison Cover
|
|
[260] = "%1d", -- Jettison
|
|
-- sighting station
|
|
[281] = "%.4f", -- Sighting Station Intensity (Axis) {0.0,1.0} in 0.1 Steps
|
|
[408] = "%1d", -- Sighting Station Lamp Switch BACKUP/OFF/MAIN {-1.0,0.0,1.0}
|
|
|
|
--[0] = "%1d", -- Pilot Sight Armed/Safe ??
|
|
[439] = "%1d", -- Pilot Sight On/Off
|
|
[440] = "%.4f", -- Pilot Sighting Station Intensity (Axis) {0.0,1.0} in 0.1 Steps
|
|
[441] = "%.4f", -- Sight Elevation (Axis) {-1.0,1.0} in 0.1 Steps
|
|
-- Windshield Wipers
|
|
[227] = "%1d", -- Pilot/Both/Operator {-1.0,0.0,1.0}
|
|
[229] = "%.1f", -- Wipers Speed PARK/OFF/LOW/MED/HIGH input{-1.0,0.0,1.0} output{0.0,0.1,0.2,0.3,0.4}
|
|
-- Stick
|
|
[189] = "%1d", -- Force Trim ON/OFF (Pilot)
|
|
[193] = "%1d", -- Force Trim ON/OFF (CoPilot)
|
|
-- Cargo Equipment
|
|
[195] = "%1d", -- Cargo Release Pilot
|
|
[198] = "%1d", -- Cargo Release CoPilot
|
|
[228] = "%1d", -- Cargo Safety
|
|
-- XM 130 Chaff Flare
|
|
[450] = "%1d", -- Ripple Fire Cover
|
|
[451] = "%1d", -- Ripple Fire
|
|
[456] = "%1d", -- SAFE/ARMED Switcher
|
|
[459] = "%1d", -- MAN/PGRM Mode
|
|
[464] = "%1d", -- Flare Dispense
|
|
[457] = "%1d", -- Armed lamp Test
|
|
[453] = "%1d", -- Flare counter Reset. Rotate mouse wheel to set Number, Button
|
|
[452] = "%.4f", -- Flare counter Reset. Rotate mouse wheel to set Number (Axis) {0.0,1.0} in 0.2 Steps
|
|
[455] = "%1d", -- Chaff counter Reset. Rotate mouse wheel to set Number, Button
|
|
[454] = "%.4f", -- Chaff counter Reset. Rotate mouse wheel to set Number (Axis) {0.0,1.0} in 0.2 Steps
|
|
-- Radar Altimeter
|
|
[449] = "%1d", -- Radar Altimeter Power
|
|
[445] = "%.4f", -- Turn On. Low Set.
|
|
[446] = "%1d", -- Test / Hight Set. Left mouse click to Test. Rotate mouse wheel to set Hight, Button
|
|
[464] = "%.4f", -- Test / Hight Set. Left mouse click to Test. Rotate mouse wheel to set Hight (Axis) {0.0,1.0} in 0.2 Steps
|
|
-- Doors
|
|
[419] = "%1d", -- Open Left Doors
|
|
[421] = "%1d" -- Open Right Doors
|
|
}
|
|
|
|
-----------------------------
|
|
-- HIGH IMPORTANCE EXPORTS --
|
|
-- done every export event --
|
|
-----------------------------
|
|
|
|
-- Pointed to by ProcessIkarusDCSHighImportance
|
|
function ExportScript.ProcessIkarusDCSConfigHighImportance(mainPanelDevice)
|
|
--[[
|
|
export in low tick interval to Ikarus
|
|
Example from A-10C
|
|
Get Radio Frequencies
|
|
get data from device
|
|
local lUHFRadio = GetDevice(54)
|
|
ExportScript.Tools.SendData("ExportID", "Format")
|
|
ExportScript.Tools.SendData(2000, string.format("%7.3f", lUHFRadio:get_frequency()/1000000)) -- <- special function for get frequency data
|
|
ExportScript.Tools.SendData(2000, ExportScript.Tools.RoundFreqeuncy((UHF_RADIO:get_frequency()/1000000))) -- ExportScript.Tools.RoundFreqeuncy(frequency (MHz|KHz), format ("7.3"), PrefixZeros (false), LeastValue (0.025))
|
|
]]
|
|
-- Magnetic Compass
|
|
--[272] = "%.4f", -- Heading
|
|
ExportScript.Tools.SendData(272, string.format("%.4f", ExportScript.Tools.negate(mainPanelDevice:get_argument_value(272)))) -- negate
|
|
end
|
|
|
|
function ExportScript.ProcessDACConfigHighImportance(mainPanelDevice)
|
|
--[[
|
|
every frame export to DAC
|
|
Example from A-10C
|
|
Get Radio Frequencies
|
|
get data from device
|
|
local UHF_RADIO = GetDevice(54)
|
|
ExportScript.Tools.SendDataDAC("ExportID", "Format")
|
|
ExportScript.Tools.SendDataDAC("ExportID", "Format", HardwareConfigID)
|
|
ExportScript.Tools.SendDataDAC("2000", string.format("%7.3f", UHF_RADIO:get_frequency()/1000000))
|
|
ExportScript.Tools.SendDataDAC("2000", ExportScript.Tools.RoundFreqeuncy((UHF_RADIO:get_frequency()/1000000))) -- ExportScript.Tools.RoundFreqeuncy(frequency (MHz|KHz), format ("7.3"), PrefixZeros (false), LeastValue (0.025))
|
|
]]
|
|
-- ADI Pilot
|
|
--[142] = "%.4f", -- Attitude_Roll {1.0, -1.0}
|
|
--ExportScript.Tools.SendData(142, string.format("%.4f", ExportScript.Tools.negate(mainPanelDevice:get_argument_value(142)))) -- negate
|
|
-- ADI - operator
|
|
--[135] = "%.4f", -- Attitude_Roll_left {1.0, -1.0}
|
|
--ExportScript.Tools.SendData(135, string.format("%.4f", ExportScript.Tools.negate(mainPanelDevice:get_argument_value(135)))) -- negate
|
|
end
|
|
|
|
-----------------------------------------------------
|
|
-- LOW IMPORTANCE EXPORTS --
|
|
-- done every gExportLowTickInterval export events --
|
|
-----------------------------------------------------
|
|
|
|
-- Pointed to by ExportScript.ProcessIkarusDCSConfigLowImportance
|
|
function ExportScript.ProcessIkarusDCSConfigLowImportance(mainPanelDevice)
|
|
--[[
|
|
export in low tick interval to GlassCockpit
|
|
Example from A-10C
|
|
Get Radio Frequencies
|
|
get data from device
|
|
local lUHFRadio = GetDevice(54)
|
|
ExportScript.Tools.SendData("ExportID", "Format")
|
|
ExportScript.Tools.SendData(2000, string.format("%7.3f", lUHFRadio:get_frequency()/1000000)) -- <- special function for get frequency data
|
|
ExportScript.Tools.SendData(2000, ExportScript.Tools.RoundFreqeuncy((UHF_RADIO:get_frequency()/1000000))) -- ExportScript.Tools.RoundFreqeuncy(frequency (MHz|KHz), format ("7.3"), PrefixZeros (false), LeastValue (0.025))
|
|
]]
|
|
|
|
-- Cockpit Light
|
|
ExportScript.Tools.IkarusCockpitLights(mainPanelDevice, {230, 231, 232, 233, 234, 235})
|
|
-- Overhead Console Panel Lights Brightness Rheostat, Pedestal Lights Brightness Rheostat, Secondary Instrument Lights Brightness Rheostat, Engine Instrument Lights Brightness Rheostat, Copilot Instrument Lights Brightness Rheostat, Pilot Instrument Lights Brightness Rheostat, Axis
|
|
|
|
-- ADI, disable needles and flags
|
|
ExportScript.Tools.SendData(2100, -1.0) -- Horizontal yellow needle
|
|
ExportScript.Tools.SendData(2101, -1.0) -- Vertical yellow needle
|
|
ExportScript.Tools.SendData(2102, -1.0) -- Left white needle
|
|
|
|
-- ADI - operator
|
|
--[141] = "%.1f", -- Attitude_Off_flag_left {0.0, 1.0} {1.0, 0.0}
|
|
ExportScript.Tools.SendData(141, string.format("%.4f", ExportScript.Tools.negate(mainPanelDevice:get_argument_value(141)))) -- negate
|
|
|
|
-- Radio
|
|
local lVHF_ARC_134 = GetDevice(20)
|
|
--ExportScript.Tools.SendData(2003, string.format("%7.3f", lVHF_ARC_134:get_frequency()/1000000))
|
|
ExportScript.Tools.SendData(2003, ExportScript.Tools.RoundFreqeuncy(lVHF_ARC_134:get_frequency()/1000000))
|
|
|
|
local lUHF_ARC_51 = GetDevice(22)
|
|
--ExportScript.Tools.SendData(2000, string.format("%6.2f", lUHF_ARC_51:get_frequency()/1000000))
|
|
ExportScript.Tools.SendData(2000, ExportScript.Tools.RoundFreqeuncy(lUHF_ARC_51:get_frequency()/1000000, "6.2", false, 0.050))
|
|
|
|
local lVHF_ARC_131 = GetDevice(23)
|
|
--ExportScript.Tools.SendData(2002, string.format("%5.2f", lVHF_ARC_131:get_frequency()/1000000))
|
|
ExportScript.Tools.SendData(2002, ExportScript.Tools.RoundFreqeuncy(lVHF_ARC_131:get_frequency()/1000000, "5.2"))
|
|
|
|
ExportScript.Tools.SendData(2005, string.format("%02d", ExportScript.Tools.round(mainPanelDevice:get_argument_value(460) * 10, 0)..ExportScript.Tools.round(mainPanelDevice:get_argument_value(461) * 10, 0))) -- FLARE_Digit_1 -- FLARE_Digit_2
|
|
ExportScript.Tools.SendData(2006, string.format("%02d", ExportScript.Tools.round(mainPanelDevice:get_argument_value(462) * 10, 0)..ExportScript.Tools.round(mainPanelDevice:get_argument_value(463) * 10, 0))) -- CHAFF_Digit_1 -- CHAFF_Digit_2
|
|
|
|
--[[
|
|
-- ARN_82 VHF Navigation Set NOT FUNCTIONAL
|
|
--local lARN_82 = GetDevice(26)
|
|
--ExportScript.Tools.WriteToLog('lARN_82: '..ExportScript.Tools.dump(lARN_82))
|
|
--ExportScript.Tools.WriteToLog('lARN_82 (metatable): '..ExportScript.Tools.dump(getmetatable(lARN_82)))
|
|
--ExportScript.Tools.SendData(2004, string.format("%6.2f", lVHF_ARC_134:get_frequency()/1000000))
|
|
]]
|
|
--[[
|
|
-- ADF_ARN83
|
|
local lpos1, pos2, lpos3, pos4
|
|
local lADF_ARN83 = ""
|
|
local lCockpitParams = list_cockpit_params()
|
|
if lCockpitParams ~= nil then
|
|
--ExportScript.Tools.WriteToLog('lCockpitParams: '..ExportScript.Tools.dump(lCockpitParams))
|
|
lpos1, pos2 = lCockpitParams:find("ADF_FREQ:", 1)
|
|
if pos2 ~= nil then
|
|
lpos3, pos4 = lCockpitParams:find("%c", pos2)
|
|
if lpos3 ~= nil then
|
|
lADF_ARN83 = lCockpitParams:sub(pos2 + 1, lpos3 - 2)
|
|
else
|
|
lADF_ARN83 = lCockpitParams:sub(pos2 + 1)
|
|
end
|
|
--ExportScript.Tools.WriteToLog('lADF_ARN83: '..ExportScript.Tools.dump(lADF_ARN83))
|
|
lADF_ARN83 = ExportScript.Tools.round(tonumber(lADF_ARN83) / 1000, 2)
|
|
end
|
|
end
|
|
ExportScript.Tools.SendData(2007, string.format("%s", lADF_ARN83))
|
|
]]
|
|
|
|
ExportScript.UhfRadioPresets(mainPanelDevice) -- AN/ARC-164 UHF Preset List
|
|
ExportScript.CrewStatusRepeater(mainPanelDevice) -- Crew Status Window
|
|
ExportScript.RadioFreqs(mainPanelDevice) -- Radio Stack
|
|
|
|
if LoIsObjectExportAllowed() then -- returns true if world objects data is available
|
|
if LoIsOwnshipExportAllowed() then -- returns true if ownship data is available
|
|
ExportScript.LoAircraftInfo(mainPanelDevice) -- Provides a lot of aircraft properties
|
|
ExportScript.AirportInfo(mainPanelDevice) -- Provides info on the two closest airports
|
|
ExportScript.WindsAloft(mainPanelDevice) -- Gets winds at the aircraft
|
|
ExportScript.GroundRadar(mainPanelDevice) -- Reports 2 closest friendlies and 2 enemies (Use in Single Player)
|
|
ExportScript.AirRadar(mainPanelDevice) -- Reports 2 closest friendlies and 2 enemies (Use in Single Player)
|
|
ExportScript.IglaHunter(mainPanelDevice) -- Locates closest Igla (Use in Single Player)
|
|
end
|
|
end
|
|
end
|
|
|
|
function ExportScript.ProcessDACConfigLowImportance(mainPanelDevice)
|
|
--[[
|
|
every frame export to hardware
|
|
Example from A-10C
|
|
Get Radio Frequencies
|
|
get data from device
|
|
local UHF_RADIO = GetDevice(54)
|
|
ExportScript.Tools.SendDataDAC("ExportID", "Format")
|
|
ExportScript.Tools.SendDataDAC("ExportID", "Format", HardwareConfigID)
|
|
ExportScript.Tools.SendDataDAC("2000", string.format("%7.3f", UHF_RADIO:get_frequency()/1000000))
|
|
ExportScript.Tools.SendDataDAC("2000", ExportScript.Tools.RoundFreqeuncy((UHF_RADIO:get_frequency()/1000000))) -- ExportScript.Tools.RoundFreqeuncy(frequency (MHz|KHz), format ("7.3"), PrefixZeros (false), LeastValue (0.025))
|
|
]]
|
|
|
|
-- Radio comunication
|
|
-- UHF_ARC_51
|
|
local lUHF_ARC_51 = GetDevice(22)
|
|
--ExportScript.Tools.SendDataDAC("2000", string.format("%7.3f", lUHF_ARC_51:get_frequency()/1000000))
|
|
ExportScript.Tools.SendDataDAC("2000", ExportScript.Tools.RoundFreqeuncy(lUHF_ARC_51:get_frequency()/1000000, "7.3", false, 0.050))
|
|
|
|
local lUHF_ARC_51_PRESET = {[0.00]="1",[0.05]="2",[0.10]="3",[0.15]="4",[0.20]="5",[0.25]="6",[0.30]="7",[0.35]="8",[0.40]="9",[0.45]="10",[0.50]="11",[0.55]="12",[0.60]="13",[0.65]="14",[0.70]="15",[0.75]="16",[0.80]="17",[0.85]="18",[0.90]="19",[0.95]="20"}
|
|
ExportScript.Tools.SendDataDAC("2001", lUHF_ARC_51_PRESET[ExportScript.Tools.round(mainPanelDevice:get_argument_value(16), 2)])
|
|
|
|
-- VHF_ARC_131
|
|
local lVHF_ARC_131 = GetDevice(23)
|
|
--ExportScript.Tools.SendDataDAC("2002", string.format("%7.3f", lVHF_ARC_131:get_frequency()/1000000))
|
|
ExportScript.Tools.SendDataDAC("2002", ExportScript.Tools.RoundFreqeuncy(lVHF_ARC_131:get_frequency()/1000000))
|
|
|
|
-- VHF_ARC_134
|
|
local lVHF_ARC_134 = GetDevice(20)
|
|
--ExportScript.Tools.SendDataDAC("2003", string.format("%7.3f", lVHF_ARC_134:get_frequency()/1000000))
|
|
ExportScript.Tools.SendDataDAC("2003", ExportScript.Tools.RoundFreqeuncy(lVHF_ARC_134:get_frequency()/1000000))
|
|
|
|
-- ARN_82 VHF Navigation Set NOT FUNCTIONAL
|
|
--local lARN_82 = GetDevice(26)
|
|
--ExportScript.Tools.WriteToLog('lARN_82: '..ExportScript.Tools.dump(lARN_82))
|
|
--ExportScript.Tools.WriteToLog('lARN_82 (metatable): '..ExportScript.Tools.dump(getmetatable(lARN_82)))
|
|
--ExportScript.Tools.SendDataDAC("2004", string.format("%7.3f", lVHF_ARC_134:get_frequency()/1000000))
|
|
|
|
-- XM130 FLARE CHAFF
|
|
ExportScript.Tools.SendDataDAC("2005", string.format("%1d", ExportScript.Tools.round(mainPanelDevice:get_argument_value(460) * 10, 0)..ExportScript.Tools.round(mainPanelDevice:get_argument_value(461) * 10, 0))) -- FLARE_Digit_1 -- FLARE_Digit_2
|
|
ExportScript.Tools.SendDataDAC("2006", string.format("%1d", ExportScript.Tools.round(mainPanelDevice:get_argument_value(462) * 10, 0)..ExportScript.Tools.round(mainPanelDevice:get_argument_value(463) * 10, 0))) -- CHAFF_Digit_1 -- CHAFF_Digit_2
|
|
|
|
-- ADF_ARN83
|
|
local lpos1, pos2, lpos3, pos4
|
|
local lADF_ARN83 = ""
|
|
local lCockpitParams = list_cockpit_params()
|
|
if lCockpitParams ~= nil then
|
|
lpos1, pos2 = lCockpitParams:find("ADF_FREQ:", 1)
|
|
if pos2 ~= nil then
|
|
lpos3, pos4 = lCockpitParams:find("%c", pos2)
|
|
if lpos3 ~= nil then
|
|
lADF_ARN83 = lCockpitParams:sub(pos2 + 1, lpos3 - 2)
|
|
else
|
|
lADF_ARN83 = lCockpitParams:sub(pos2 + 1)
|
|
end
|
|
lADF_ARN83 = ExportScript.Tools.round(tonumber(lADF_ARN83) / 1000, 2)
|
|
end
|
|
end
|
|
|
|
ExportScript.Tools.SendDataDAC("2007", string.format("%s", lADF_ARN83))
|
|
|
|
-- Radar Altimeter - AN/APN-209
|
|
-- [468] = "%0.1f", -- RALT_Digit_1
|
|
-- {0.0, 1.0} 0.0=0, 0.1=1, 0.2=2,..., 0.9=9, 1.0=' '
|
|
-- [469] = "%0.1f", -- RALT_Digit_2
|
|
-- {0.0, 1.0} 0.0=0, 0.1=1, 0.2=2,..., 0.9=9, 1.0=' '
|
|
-- [470] = "%0.1f", -- RALT_Digit_3
|
|
-- {0.0, 1.0} 0.0=0, 0.1=1, 0.2=2,..., 0.9=9, 1.0=' '
|
|
-- [471] = "%0.1f", -- RALT_Digit_4
|
|
-- {0.0, 1.0} 0.0=0, 0.1=1, 0.2=2,..., 0.9=9, 1.0=' '
|
|
local lAN_APN_209_PRESET = {[0.0]="0",[0.1]="1",[0.2]="2",[0.3]="3",[0.4]="4",[0.5]="5",[0.6]="6",[0.7]="7",[0.8]="8",[0.9]="9",[1.0]=" "}
|
|
local lAN_APN_209 = ""
|
|
lAN_APN_209 = lAN_APN_209_PRESET[ExportScript.Tools.round(mainPanelDevice:get_argument_value(468), 2)]
|
|
lAN_APN_209 = lAN_APN_209 .. lAN_APN_209_PRESET[ExportScript.Tools.round(mainPanelDevice:get_argument_value(469), 2)]
|
|
lAN_APN_209 = lAN_APN_209 .. lAN_APN_209_PRESET[ExportScript.Tools.round(mainPanelDevice:get_argument_value(470), 2)]
|
|
lAN_APN_209 = lAN_APN_209 .. lAN_APN_209_PRESET[ExportScript.Tools.round(mainPanelDevice:get_argument_value(471), 2)]
|
|
ExportScript.Tools.SendDataDAC("2008", string.format("%s", lAN_APN_209))
|
|
|
|
--ExportScript.Tools.WriteToLog('VHF_ARC_134: '..string.format("%7.3f", lVHF_ARC_134:get_frequency()/1000000))
|
|
--ExportScript.Tools.WriteToLog('VHF_ARC134_Freq1: '..mainPanelDevice:get_argument_value(1))
|
|
--ExportScript.Tools.WriteToLog('VHF_ARC134_Freq2: '..mainPanelDevice:get_argument_value(2))
|
|
--ExportScript.Tools.WriteToLog('VHF_ARC134_Freq3: '..mainPanelDevice:get_argument_value(3))
|
|
--ExportScript.Tools.WriteToLog('VHF_ARC134_Freq4: '..mainPanelDevice:get_argument_value(4))
|
|
|
|
-- generic Radio display and frequency rotarys
|
|
-------------------------------------------------
|
|
-- genericRadioConf
|
|
ExportScript.genericRadioConf = {}
|
|
ExportScript.genericRadioConf['maxRadios'] = 3 -- numbers of aviables/supported radios
|
|
ExportScript.genericRadioConf[1] = {} -- first radio
|
|
ExportScript.genericRadioConf[1]['Name'] = "AN/ARC-131 VHF FM" -- name of radio
|
|
ExportScript.genericRadioConf[1]['DeviceID'] = 23 -- DeviceID for GetDevice from device.lua
|
|
ExportScript.genericRadioConf[1]['setFrequency'] = true -- change frequency active
|
|
ExportScript.genericRadioConf[1]['FrequencyMultiplicator'] = 1000000 -- Multiplicator from Hz to MHz
|
|
ExportScript.genericRadioConf[1]['FrequencyFormat'] = "%7.3f" -- frequency view format LUA style
|
|
ExportScript.genericRadioConf[1]['FrequencyStep'] = 25 -- minimal step for frequency change
|
|
ExportScript.genericRadioConf[1]['minFrequency'] = 100.000 -- lowest frequency
|
|
ExportScript.genericRadioConf[1]['maxFrequency'] = 399.975 -- highest frequency
|
|
ExportScript.genericRadioConf[1]['Power'] = {} -- power button active
|
|
ExportScript.genericRadioConf[1]['Power']['ButtonID'] = 3008 -- power button id from cklickable.lua
|
|
ExportScript.genericRadioConf[1]['Power']['ValueOn'] = 0.1 -- power on value from cklickable.lua
|
|
ExportScript.genericRadioConf[1]['Power']['ValueOff'] = 0.0 -- power off value from cklickable.lua
|
|
ExportScript.genericRadioConf[1]['Volume'] = {} -- volume knob active
|
|
ExportScript.genericRadioConf[1]['Volume']['ButtonID'] = 3006 -- volume button id from cklickable.lua
|
|
-- ExportScript.genericRadioConf[1]['Preset'] = {} -- preset knob active
|
|
-- ExportScript.genericRadioConf[1]['Preset']['ArgumentID'] = 161 -- ManualPreset argument id from cklickable.lua
|
|
-- ExportScript.genericRadioConf[1]['Preset']['ButtonID'] = 3001 -- preset button id from cklickable.lua
|
|
-- Preset based on switchlogic on clickabledata.lua
|
|
-- ExportScript.genericRadioConf[1]['Preset']['List'] = {[0.0]="01",[0.05]="02",[0.10]="03",[0.15]="04",[0.20]="05",[0.25]="06",[0.30]="07",[0.35]="08",[0.40]="09",[0.45]="10",[0.50]="11",[0.55]="12",[0.60]="13",[0.65]="14",[0.70]="15",[0.75]="16",[0.80]="17",[0.85]="18",[0.90]="19",[0.95]="20",[1.00]="01"}
|
|
-- ExportScript.genericRadioConf[1]['Preset']['Step'] = 0.05 -- minimal step for preset change
|
|
ExportScript.genericRadioConf[1]['Squelch'] = {} -- squelch switch active
|
|
ExportScript.genericRadioConf[1]['Squelch']['ArgumentID'] = 36 -- ManualPreset argument id from cklickable.lua
|
|
ExportScript.genericRadioConf[1]['Squelch']['ButtonID'] = 3005 -- squelch button id from cklickable.lua
|
|
ExportScript.genericRadioConf[1]['Squelch']['ValueOn'] = 0.1 -- squelch on value from cklickable.lua
|
|
ExportScript.genericRadioConf[1]['Squelch']['ValueOff'] = 0.0 -- squelch off value from cklickable.lua
|
|
-- ExportScript.genericRadioConf[1]['Load'] = {} -- load button preset
|
|
-- ExportScript.genericRadioConf[1]['Load']['ButtonID'] = 3015 -- load button id from cklickable.lua
|
|
-- ExportScript.genericRadioConf[1]['ManualPreset'] = {} -- switch manual or preset active
|
|
-- ExportScript.genericRadioConf[1]['ManualPreset']['ArgumentID'] = 167 -- ManualPreset argument id from cklickable.lua
|
|
-- ExportScript.genericRadioConf[1]['ManualPreset']['ButtonID'] = 3007 -- ManualPreset button id from cklickable.lua
|
|
-- ExportScript.genericRadioConf[1]['ManualPreset']['ValueManual'] = 0.0-- ManualPreset Manual value from cklickable.lua
|
|
-- ExportScript.genericRadioConf[1]['ManualPreset']['ValuePreset'] = 0.1-- ManualPreset Preset value from cklickable.lua
|
|
|
|
ExportScript.genericRadioConf[2] = {} -- secound radio
|
|
ExportScript.genericRadioConf[2]['Name'] = "AN/ARC-51BX UHF AM" -- name of radio
|
|
ExportScript.genericRadioConf[2]['DeviceID'] = 22 -- DeviceID for GetDevice from device.lua
|
|
ExportScript.genericRadioConf[2]['setFrequency'] = true -- change frequency active
|
|
ExportScript.genericRadioConf[2]['FrequencyMultiplicator'] = 1000000 -- Multiplicator from Hz to MHz
|
|
ExportScript.genericRadioConf[2]['FrequencyFormat'] = "%7.3f" -- frequency view format LUA style
|
|
ExportScript.genericRadioConf[2]['FrequencyStep'] = 50 -- minimal step for frequency change
|
|
ExportScript.genericRadioConf[2]['minFrequency'] = 225.000 -- lowest frequency
|
|
ExportScript.genericRadioConf[2]['maxFrequency'] = 399.950 -- highest frequency
|
|
ExportScript.genericRadioConf[2]['Power'] = {} -- power button active
|
|
ExportScript.genericRadioConf[2]['Power']['ButtonID'] = 3006 -- power button id from cklickable.lua
|
|
ExportScript.genericRadioConf[2]['Power']['ValueOn'] = 0.1 -- power on value from cklickable.lua
|
|
ExportScript.genericRadioConf[2]['Power']['ValueOff'] = 0.0 -- power off value from cklickable.lua
|
|
ExportScript.genericRadioConf[2]['Volume'] = {} -- volume knob active
|
|
ExportScript.genericRadioConf[2]['Volume']['ButtonID'] = 3008 -- volume button id from cklickable.lua
|
|
ExportScript.genericRadioConf[2]['Preset'] = {} -- preset knob active
|
|
ExportScript.genericRadioConf[2]['Preset']['ArgumentID'] = 16 -- ManualPreset argument id from cklickable.lua
|
|
ExportScript.genericRadioConf[2]['Preset']['ButtonID'] = 3001 -- preset button id from cklickable.lua
|
|
-- Preset based on switchlogic on clickabledata.lua
|
|
ExportScript.genericRadioConf[2]['Preset']['List'] = {[0.0]="01",[0.05]="02",[0.10]="03",[0.15]="04",[0.20]="05",[0.25]="06",[0.30]="07",[0.35]="08",[0.40]="09",[0.45]="10",[0.50]="11",[0.55]="12",[0.60]="13",[0.65]="14",[0.70]="15",[0.75]="16",[0.80]="17",[0.85]="18",[0.90]="19",[0.95]="20"}
|
|
ExportScript.genericRadioConf[2]['Preset']['Step'] = 0.05 -- minimal step for preset change
|
|
ExportScript.genericRadioConf[2]['Squelch'] = {} -- squelch switch active
|
|
ExportScript.genericRadioConf[2]['Squelch']['ArgumentID'] = 134 -- ManualPreset argument id from cklickable.lua
|
|
ExportScript.genericRadioConf[2]['Squelch']['ButtonID'] = 3007 -- squelch button id from cklickable.lua
|
|
ExportScript.genericRadioConf[2]['Squelch']['ValueOn'] = 1.0 -- squelch on value from cklickable.lua
|
|
ExportScript.genericRadioConf[2]['Squelch']['ValueOff'] = 0.0 -- squelch off value from cklickable.lua
|
|
ExportScript.genericRadioConf[2]['Load'] = {} -- load button preset
|
|
ExportScript.genericRadioConf[2]['Load']['ButtonID'] = 3006 -- load button id from cklickable.lua
|
|
ExportScript.genericRadioConf[2]['ManualPreset'] = {} -- switch manual or preset active
|
|
ExportScript.genericRadioConf[2]['ManualPreset']['ArgumentID'] = 135 -- ManualPreset argument id from cklickable.lua
|
|
ExportScript.genericRadioConf[2]['ManualPreset']['ButtonID'] = 3005 -- ManualPreset button id from cklickable.lua
|
|
ExportScript.genericRadioConf[2]['ManualPreset']['ValueManual'] = 0.1-- ManualPreset Manual value from cklickable.lua
|
|
ExportScript.genericRadioConf[2]['ManualPreset']['ValuePreset'] = 0.0-- ManualPreset Preset value from cklickable.lua
|
|
|
|
ExportScript.genericRadioConf[3] = {} -- secound radio
|
|
ExportScript.genericRadioConf[3]['Name'] = "AN/ARC-134 VHF AM" -- name of radio
|
|
ExportScript.genericRadioConf[3]['DeviceID'] = 20 -- DeviceID for GetDevice from device.lua
|
|
ExportScript.genericRadioConf[3]['setFrequency'] = true -- change frequency active
|
|
ExportScript.genericRadioConf[3]['FrequencyMultiplicator'] = 1000000 -- Multiplicator from Hz to MHz
|
|
ExportScript.genericRadioConf[3]['FrequencyFormat'] = "%7.3f" -- frequency view format LUA style
|
|
ExportScript.genericRadioConf[3]['FrequencyStep'] = 25 -- minimal step for frequency change
|
|
ExportScript.genericRadioConf[3]['minFrequency'] = 100.000 -- lowest frequency
|
|
ExportScript.genericRadioConf[3]['maxFrequency'] = 399.975 -- highest frequency
|
|
ExportScript.genericRadioConf[3]['Power'] = {} -- power button active
|
|
ExportScript.genericRadioConf[3]['Power']['ButtonID'] = 3001 -- power button id from cklickable.lua
|
|
ExportScript.genericRadioConf[3]['Power']['ValueOn'] = 1.0 -- power on value from cklickable.lua
|
|
ExportScript.genericRadioConf[3]['Power']['ValueOff'] = 0.85 -- power off value from cklickable.lua
|
|
ExportScript.genericRadioConf[3]['Volume'] = {} -- volume knob active
|
|
ExportScript.genericRadioConf[3]['Volume']['ButtonID'] = 3003 -- volume button id from cklickable.lua
|
|
-- ExportScript.genericRadioConf[3]['Preset'] = {} -- preset knob active
|
|
-- ExportScript.genericRadioConf[3]['Preset']['ArgumentID'] = 151 -- ManualPreset argument id from cklickable.lua
|
|
-- ExportScript.genericRadioConf[3]['Preset']['ButtonID'] = 3001 -- preset button id from cklickable.lua
|
|
-- ExportScript.genericRadioConf[3]['Preset']['ButtonID2'] = 3002 -- preset button id from cklickable.lua
|
|
-- Preset based on switchlogic on clickabledata.lua
|
|
-- ExportScript.genericRadioConf[3]['Preset']['List'] = {[0.0]="01",[0.01]="02",[0.02]="03",[0.03]="04",[0.04]="05",[0.05]="06",[0.06]="07",[0.07]="08",[0.08]="09",[0.09]="10",[0.10]="11",[0.11]="12",[0.12]="13",[0.13]="14",[0.14]="15",[0.15]="16",[0.16]="17",[0.17]="18",[0.18]="19",[0.19]="20",[0.20]="01"}
|
|
-- ExportScript.genericRadioConf[3]['Preset']['Step'] = 0.01 -- minimal step for preset change
|
|
-- ExportScript.genericRadioConf[3]['Preset']['Step2'] = -0.01 -- minimal step for preset change
|
|
-- ExportScript.genericRadioConf[3]['Squelch'] = {} -- squelch switch active
|
|
-- ExportScript.genericRadioConf[3]['Squelch']['ArgumentID'] = 148 -- ManualPreset argument id from cklickable.lua
|
|
-- ExportScript.genericRadioConf[3]['Squelch']['ButtonID'] = 3008 -- squelch button id from cklickable.lua
|
|
-- ExportScript.genericRadioConf[3]['Squelch']['ValueOn'] = 0.0 -- squelch on value from cklickable.lua
|
|
-- ExportScript.genericRadioConf[3]['Squelch']['ValueOff'] = -1.0 -- squelch off value from cklickable.lua
|
|
-- ExportScript.genericRadioConf[3]['Load'] = {} -- load button preset
|
|
-- ExportScript.genericRadioConf[3]['Load']['ButtonID'] = 3004 -- load button id from cklickable.lua
|
|
-- ExportScript.genericRadioConf[3]['ManualPreset'] = {} -- switch manual or preset active
|
|
-- ExportScript.genericRadioConf[3]['ManualPreset']['ArgumentID'] = 149 -- ManualPreset argument id from cklickable.lua
|
|
-- ExportScript.genericRadioConf[3]['ManualPreset']['ButtonID'] = 3004 -- ManualPreset button id from cklickable.lua
|
|
-- ExportScript.genericRadioConf[3]['ManualPreset']['ValueManual'] = 0.2-- ManualPreset Manual value from cklickable.lua
|
|
-- ExportScript.genericRadioConf[3]['ManualPreset']['ValuePreset'] = 0.3-- ManualPreset Preset value from cklickable.lua
|
|
|
|
ExportScript.genericRadio(nil, nil)
|
|
|
|
--[[
|
|
-- ENGINE_INTERFACE
|
|
local lENGINE_INTERFACE = GetDevice(3)
|
|
ExportScript.Tools.WriteToLog('lENGINE_INTERFACE:get_eng_rpm '..ExportScript.Tools.dump(lENGINE_INTERFACE:get_eng_rpm()))
|
|
ExportScript.Tools.WriteToLog('lENGINE_INTERFACE:get_fire_lamp '..ExportScript.Tools.dump(lENGINE_INTERFACE:get_fire_lamp()))
|
|
ExportScript.Tools.WriteToLog('lENGINE_INTERFACE:get_gas_prod_tach '..ExportScript.Tools.dump(lENGINE_INTERFACE:get_gas_prod_tach()))
|
|
ExportScript.Tools.WriteToLog('lENGINE_INTERFACE:get_fire_test_lamp '..ExportScript.Tools.dump(lENGINE_INTERFACE:get_fire_test_lamp()))
|
|
ExportScript.Tools.WriteToLog('lENGINE_INTERFACE:get_trans_oil_temp '..ExportScript.Tools.dump(lENGINE_INTERFACE:get_trans_oil_temp()))
|
|
ExportScript.Tools.WriteToLog('lENGINE_INTERFACE:get_eng_torq '..ExportScript.Tools.dump(lENGINE_INTERFACE:get_eng_torq()))
|
|
ExportScript.Tools.WriteToLog('lENGINE_INTERFACE:get_trans_oil_press '..ExportScript.Tools.dump(lENGINE_INTERFACE:get_trans_oil_press()))
|
|
ExportScript.Tools.WriteToLog('lENGINE_INTERFACE:get_exhaust_temp '..ExportScript.Tools.dump(lENGINE_INTERFACE:get_exhaust_temp()))
|
|
ExportScript.Tools.WriteToLog('lENGINE_INTERFACE:get_low_rpm_lamp '..ExportScript.Tools.dump(lENGINE_INTERFACE:get_low_rpm_lamp()))
|
|
ExportScript.Tools.WriteToLog('lENGINE_INTERFACE:get_eng_oil_temp '..ExportScript.Tools.dump(lENGINE_INTERFACE:get_eng_oil_temp()))
|
|
ExportScript.Tools.WriteToLog('lENGINE_INTERFACE:get_eng_oil_press '..ExportScript.Tools.dump(lENGINE_INTERFACE:get_eng_oil_press()))
|
|
|
|
-- ADI_PILOT
|
|
local lADI_PILOT = GetDevice(6)
|
|
ExportScript.Tools.WriteToLog('lADI_PILOT:get_sideslip '..ExportScript.Tools.dump(lADI_PILOT:get_sideslip()))
|
|
ExportScript.Tools.WriteToLog('lADI_PILOT:get_bank '..ExportScript.Tools.dump(lADI_PILOT:get_bank()))
|
|
ExportScript.Tools.WriteToLog('lADI_PILOT:get_pitch '..ExportScript.Tools.dump(lADI_PILOT:get_pitch()))
|
|
|
|
-- RADAR_ALTIMETER
|
|
local lRADAR_ALTIMETER = GetDevice(13)
|
|
ExportScript.Tools.WriteToLog('lRADAR_ALTIMETER:get_distance_limit '..ExportScript.Tools.dump(lRADAR_ALTIMETER:get_distance_limit()))
|
|
ExportScript.Tools.WriteToLog('lRADAR_ALTIMETER:get_aperture_size '..ExportScript.Tools.dump(lRADAR_ALTIMETER:get_aperture_size()))
|
|
ExportScript.Tools.WriteToLog('lRADAR_ALTIMETER:get_mode '..ExportScript.Tools.dump(lRADAR_ALTIMETER:get_mode()))
|
|
ExportScript.Tools.WriteToLog('lRADAR_ALTIMETER:get_altitude '..ExportScript.Tools.dump(lRADAR_ALTIMETER:get_altitude()))
|
|
]]
|
|
--[[
|
|
-- VHF_ARC_134
|
|
local lVHF_ARC_134 = GetDevice(20)
|
|
ExportScript.Tools.WriteToLog('lVHF_ARC_134:is_on '..ExportScript.Tools.dump(lVHF_ARC_134:is_on()))
|
|
ExportScript.Tools.WriteToLog('lVHF_ARC_134:get_frequency '..ExportScript.Tools.dump(lVHF_ARC_134:get_frequency()))
|
|
--ExportScript.Tools.WriteToLog('lVHF_ARC_134:set_frequency '..ExportScript.Tools.dump(lVHF_ARC_134:set_frequency())) -- test parameters
|
|
--ExportScript.Tools.WriteToLog('lVHF_ARC_134:set_modulation '..ExportScript.Tools.dump(lVHF_ARC_134:set_modulation())) -- test parameters
|
|
--ExportScript.Tools.WriteToLog('lVHF_ARC_134:set_channel '..ExportScript.Tools.dump(lVHF_ARC_134:set_channel())) -- test parameters
|
|
|
|
-- INTERCOM
|
|
local lINTERCOM = GetDevice(21)
|
|
ExportScript.Tools.WriteToLog('lINTERCOM:is_communicator_available '..ExportScript.Tools.dump(lINTERCOM:is_communicator_available()))
|
|
ExportScript.Tools.WriteToLog('lINTERCOM:get_noise_level '..ExportScript.Tools.dump(lINTERCOM:get_noise_level()))
|
|
ExportScript.Tools.WriteToLog('lINTERCOM:get_signal_level '..ExportScript.Tools.dump(lINTERCOM:get_signal_level()))
|
|
--ExportScript.Tools.WriteToLog('lINTERCOM:set_communicator '..ExportScript.Tools.dump(lINTERCOM:set_communicator())) -- test parameters
|
|
--ExportScript.Tools.WriteToLog('lINTERCOM:set_voip_mode '..ExportScript.Tools.dump(lINTERCOM:set_voip_mode())) -- test parameters
|
|
|
|
-- UHF_ARC_51
|
|
local lUHF_ARC_51 = GetDevice(22)
|
|
ExportScript.Tools.WriteToLog('lUHF_ARC_51:is_on '..ExportScript.Tools.dump(lUHF_ARC_51:is_on()))
|
|
ExportScript.Tools.WriteToLog('lUHF_ARC_51:get_frequency '..ExportScript.Tools.dump(lUHF_ARC_51:get_frequency()))
|
|
--ExportScript.Tools.WriteToLog('lUHF_ARC_51:set_frequency '..ExportScript.Tools.dump(lUHF_ARC_51:set_frequency())) -- test parameters
|
|
--ExportScript.Tools.WriteToLog('lUHF_ARC_51:set_modulation '..ExportScript.Tools.dump(lUHF_ARC_51:set_modulation())) -- test parameters
|
|
--ExportScript.Tools.WriteToLog('lUHF_ARC_51:set_channel '..ExportScript.Tools.dump(lUHF_ARC_51:set_channel())) -- test parameters
|
|
|
|
-- VHF_ARC_131
|
|
local lVHF_ARC_131 = GetDevice(23)
|
|
ExportScript.Tools.WriteToLog('lVHF_ARC_131:is_on '..ExportScript.Tools.dump(lVHF_ARC_131:is_on()))
|
|
ExportScript.Tools.WriteToLog('lVHF_ARC_131:get_frequency '..ExportScript.Tools.dump(lVHF_ARC_131:get_frequency()))
|
|
--ExportScript.Tools.WriteToLog('lVHF_ARC_131:set_frequency '..ExportScript.Tools.dump(lVHF_ARC_131:set_frequency())) -- test parameters
|
|
--ExportScript.Tools.WriteToLog('lVHF_ARC_131:set_modulation '..ExportScript.Tools.dump(lVHF_ARC_131:set_modulation())) -- test parameters
|
|
--ExportScript.Tools.WriteToLog('lVHF_ARC_131:set_channel '..ExportScript.Tools.dump(lVHF_ARC_131:set_channel())) -- test parameters
|
|
|
|
ExportScript.Tools.WriteToLog('Frequency Mode Dial '..ExportScript.Tools.dump(mainPanelDevice:get_argument_value(15)))
|
|
ExportScript.Tools.WriteToLog('Function Dial '..ExportScript.Tools.dump(mainPanelDevice:get_argument_value(17)))
|
|
]]
|
|
--[[
|
|
ExportScript.Tools.WriteToLog('list_cockpit_params(): '..ExportScript.Tools.dump(list_cockpit_params()))
|
|
ExportScript.Tools.WriteToLog('CMSP: '..ExportScript.Tools.dump(list_indication(7)))
|
|
|
|
-- list_indication get tehe value of cockpit displays
|
|
local ltmp1 = 0
|
|
for ltmp2 = 0, 20, 1 do
|
|
ltmp1 = list_indication(ltmp2)
|
|
ExportScript.Tools.WriteToLog(ltmp2..': '..ExportScript.Tools.dump(ltmp1))
|
|
end
|
|
]]
|
|
--[[
|
|
-- getmetatable get function name from devices
|
|
local ltmp1 = 0
|
|
for ltmp2 = 1, 70, 1 do
|
|
ltmp1 = GetDevice(ltmp2)
|
|
ExportScript.Tools.WriteToLog(ltmp2..': '..ExportScript.Tools.dump(ltmp1))
|
|
ExportScript.Tools.WriteToLog(ltmp2..' (metatable): '..ExportScript.Tools.dump(getmetatable(ltmp1)))
|
|
end
|
|
]]
|
|
end
|
|
|
|
----------------------
|
|
-- Custom functions --
|
|
----------------------
|
|
function ExportScript.CrewStatusRepeater(mainPanelDevice) -- Crew Status Window
|
|
|
|
local crewStatusInfo = ExportScript.Tools.getListIndicatorValue(6) -- contains table of the status of the crew
|
|
|
|
if crewStatusInfo.txt_mem0 ~= null then -- if there is a pilot entry
|
|
ExportScript.Tools.SendData(3000,'Pilot\n' .. crewStatusInfo.txt_status0
|
|
.. '\nAmmo ' .. trim(crewStatusInfo.txt_ammo0)
|
|
.. '\nBurst ' .. trim(crewStatusInfo.txt_burst0))
|
|
else
|
|
ExportScript.Tools.SendData(3000,'Pilot\n' .. '--\n'.. '--\n'.. '--')
|
|
end
|
|
|
|
if crewStatusInfo.txt_mem1 ~= null then -- if there is a copilot entry
|
|
ExportScript.Tools.SendData(3001,'Co-pilot\nROE ' .. crewStatusInfo.txt_status1
|
|
.. '\nAmmo ' .. trim(crewStatusInfo.txt_ammo1)
|
|
.. '\nBurst ' .. trim(crewStatusInfo.txt_burst1))
|
|
else
|
|
ExportScript.Tools.SendData(3001,'Co-pilot\n' .. '--\n'.. '--\n'.. '--')
|
|
end
|
|
|
|
if crewStatusInfo.txt_mem2 ~= null then -- if there is a LH Gunner entry
|
|
ExportScript.Tools.SendData(3002,'LH Gunner\nROE ' .. crewStatusInfo.txt_status2
|
|
.. '\nAmmo ' .. trim(crewStatusInfo.txt_ammo2)
|
|
.. '\nBurst ' .. trim(crewStatusInfo.txt_burst2))
|
|
else
|
|
ExportScript.Tools.SendData(3002,'LH Gunner\n' .. '--\n'.. '--\n'.. '--')
|
|
end
|
|
|
|
if crewStatusInfo.txt_mem3 ~= null then -- if there is a RH Gunner entry
|
|
ExportScript.Tools.SendData(3003,'RH Gunner\nROE ' .. crewStatusInfo.txt_status3
|
|
.. '\nAmmo ' .. trim(crewStatusInfo.txt_ammo3)
|
|
.. '\nBurst ' .. trim(crewStatusInfo.txt_burst3))
|
|
else
|
|
ExportScript.Tools.SendData(3003,'RH Gunner\n' .. '--\n'.. '--\n'.. '--')
|
|
end
|
|
end
|
|
|
|
function ExportScript.UhfRadioPresets(mainPanelDevice) -- AN/ARC-164 UHF Preset List
|
|
|
|
local UhfPresetReadout = ExportScript.Tools.getListIndicatorValue(7) -- uhf radio presets
|
|
|
|
local UhfCh1 = UhfPresetReadout.SheetTable_Channel1
|
|
local UhfCh2 = UhfPresetReadout.SheetTable_Channel2
|
|
local UhfCh3 = UhfPresetReadout.SheetTable_Channel3
|
|
local UhfCh4 = UhfPresetReadout.SheetTable_Channel4
|
|
local UhfCh5= UhfPresetReadout.SheetTable_Channel5
|
|
local UhfCh6 = UhfPresetReadout.SheetTable_Channel6
|
|
local UhfCh7 = UhfPresetReadout.SheetTable_Channel7
|
|
local UhfCh8 = UhfPresetReadout.SheetTable_Channel8
|
|
local UhfCh9 = UhfPresetReadout.SheetTable_Channel9
|
|
local UhfCh10 = UhfPresetReadout.SheetTable_Channel10
|
|
local UhfCh11 = UhfPresetReadout.SheetTable_Channel11
|
|
local UhfCh12 = UhfPresetReadout.SheetTable_Channel12
|
|
local UhfCh13 = UhfPresetReadout.SheetTable_Channel13
|
|
local UhfCh14 = UhfPresetReadout.SheetTable_Channel14
|
|
local UhfCh15 = UhfPresetReadout.SheetTable_Channel15
|
|
local UhfCh16 = UhfPresetReadout.SheetTable_Channel16
|
|
local UhfCh17 = UhfPresetReadout.SheetTable_Channel17
|
|
local UhfCh18 = UhfPresetReadout.SheetTable_Channel18
|
|
local UhfCh19 = UhfPresetReadout.SheetTable_Channel19
|
|
local UhfCh20 = UhfPresetReadout.SheetTable_Channel20
|
|
|
|
|
|
ExportScript.Tools.SendData(3016, "UHF 1-4"
|
|
.. "\n" .. UhfCh1
|
|
.. "\n" .. UhfCh2
|
|
.. "\n" .. UhfCh3
|
|
.. "\n" .. UhfCh4
|
|
)
|
|
|
|
ExportScript.Tools.SendData(3017, "UHF 5-8"
|
|
.. "\n" .. UhfCh5
|
|
.. "\n" .. UhfCh6
|
|
.. "\n" .. UhfCh7
|
|
.. "\n" .. UhfCh8
|
|
)
|
|
|
|
|
|
ExportScript.Tools.SendData(3018, "UHF 9-12"
|
|
.. "\n" .. UhfCh9
|
|
.. "\n" .. UhfCh10
|
|
.. "\n" .. UhfCh11
|
|
.. "\n" .. UhfCh12
|
|
)
|
|
|
|
ExportScript.Tools.SendData(3019, "UHF 13-16"
|
|
.. "\n" .. UhfCh13
|
|
.. "\n" .. UhfCh14
|
|
.. "\n" .. UhfCh15
|
|
.. "\n" .. UhfCh16
|
|
)
|
|
|
|
ExportScript.Tools.SendData(3020, "UHF 16-20"
|
|
.. "\n" .. UhfCh17
|
|
.. "\n" .. UhfCh18
|
|
.. "\n" .. UhfCh19
|
|
.. "\n" .. UhfCh20
|
|
)
|
|
|
|
end
|
|
|
|
function ExportScript.RadioFreqs(mainPanelDevice) -- TODO: More radios
|
|
local radoioVhf = ExportScript.Tools.RoundFreqeuncy(GetDevice(20):get_frequency()/1000000) -- "116.000"
|
|
local radioUhf = ExportScript.Tools.RoundFreqeuncy(GetDevice(22):get_frequency()/1000000) -- "251.000"
|
|
local radioHf = ExportScript.Tools.RoundFreqeuncy(GetDevice(23):get_frequency()/1000000) -- " 30.000"
|
|
|
|
ExportScript.Tools.SendData(3010, "VHF\n" .. radoioVhf .. ' MHz')
|
|
ExportScript.Tools.SendData(3011, "UHF\n" .. radioUhf .. ' MHz')
|
|
ExportScript.Tools.SendData(3012, "HF\n" .. radioHf .. ' MHz')
|
|
ExportScript.Tools.SendData(3013, "Radio Stack\n" .. radoioVhf .. ' MHz\n'
|
|
.. radioUhf .. ' MHz\n' .. radioHf .. ' MHz')
|
|
end
|
|
|
|
function ExportScript.LoAircraftInfo(mainPanelDevice)
|
|
|
|
-- General
|
|
local aircraftName = LoGetSelfData().Name -- DCS Name of the aircraft eg "F-5E-3"
|
|
local pilotName = LoGetPilotName() -- Logbook Pilot name
|
|
|
|
-- Times DCS times are default in seconds
|
|
local dcsModelTime = LoGetModelTime() -- time since aircraft spawn
|
|
local missionStartTime = LoGetMissionStartTime() -- second after midnight that the mission started
|
|
local dcsTimeLocal = formatTime(LoGetMissionStartTime() + LoGetModelTime()) -- up-to-date time in dcs
|
|
local utcOffset = -1 * Terrain.GetTerrainConfig('SummerTimeDelta') * 3600 -- eg -1 * 4 * 3600 (for seconds to get hours)
|
|
local dcsTimeUtc = formatTime(dcsModelTime + LoGetMissionStartTime() + utcOffset) -- dcs zulu time
|
|
local realTimeLocal = os.date("%H-%M-%S") -- real life time
|
|
local realTimeUtc = os.date("!%H-%M-%S") -- real life zulu time
|
|
--local playTime = formatTime(DCS.getRealTime()) -- does not work, export environment no access
|
|
|
|
-- Player Aircraft Properties
|
|
local altMsl_meters = LoGetAltitudeAboveSeaLevel()
|
|
local altMsl_feet = meters2feet(altMsl_meters)
|
|
local altAgl_meters = LoGetAltitudeAboveGroundLevel()
|
|
local altAgl_feet = meters2feet(altAgl_meters)
|
|
|
|
local verticalVelocity_metric = LoGetVerticalVelocity()
|
|
local verticalVelocity_imperial = metersPerSecond2feetPerMinute(LoGetVerticalVelocity())
|
|
|
|
local ias_metric = LoGetIndicatedAirSpeed()
|
|
local ias_knots = metersPerSecond2knots(LoGetIndicatedAirSpeed())
|
|
local ias_mph = metersPerSecond2milesPerHour(LoGetIndicatedAirSpeed())
|
|
|
|
local tas_metric = LoGetTrueAirSpeed()
|
|
local tas_knots = metersPerSecond2knots(LoGetTrueAirSpeed())
|
|
local tas_mph = metersPerSecond2milesPerHour(LoGetTrueAirSpeed())
|
|
|
|
local speed_mach = LoGetMachNumber()
|
|
local accel_g = LoGetAccelerationUnits().y
|
|
local aoa = LoGetAngleOfAttack()
|
|
|
|
--local atmosphericPressure_mmhg = LoGetBasicAtmospherePressure() -- does not seem to work
|
|
|
|
local aircraftPitch, aircraftBank, aircraftYawTrue = LoGetADIPitchBankYaw()
|
|
aircraftPitch = aircraftPitch * 57.3
|
|
aircraftBank = aircraftBank * 57.3
|
|
aircraftYawTrue = aircraftYawTrue * 57.3 -- true heading
|
|
local aircraftYawMagnetic = LoGetMagneticYaw() * 57.3 -- magnetic heading
|
|
local aircraftHeading = aircraftYawMagnetic -- this cound be negative
|
|
if aircraftHeading < 0 then aircraftHeading = aircraftHeading + 360 end -- removes the negative
|
|
local magneticVariance = aircraftYawTrue - aircraftYawMagnetic -- works for all maps
|
|
|
|
local selfData = LoGetSelfData() -- relative the the player
|
|
local lLatitude = selfData.LatLongAlt.Lat
|
|
local lLongitude = selfData.LatLongAlt.Long
|
|
local mgrs = Terrain.GetMGRScoordinates(LoGetSelfData().Position.x, LoGetSelfData().Position.z)
|
|
local mgrsTable = mgrsTableize(mgrs) -- format is mgrsTable[1][1], mgrsTable[1][2], mgrsTable[1][3], mgrsTable[1][4]
|
|
|
|
local aircraftHeadingTrue = selfData.Heading * 57.3 -- true yeading (same as trueYaw for fixed wing aircraft)
|
|
|
|
-- Engine Info
|
|
local engineInfo = LoGetEngineInfo()
|
|
local lEngineRPMleft = engineInfo.RPM.left -- ENG1 RPM %
|
|
local lEngineRPMright = engineInfo.RPM.right -- ENG2 RPM %
|
|
local lEngineFuelInternal = engineInfo.fuel_internal -- 1 = full. 0 = empty. Includes external tanks for FF aircraft
|
|
local lEngineFuelExternal = engineInfo.fuel_external -- TANK2 (EXT) (KG) -- does not seem to work for FF modules
|
|
local lEngineFuelTotal = lEngineFuelInternal + lEngineFuelExternal
|
|
local lEngineTempLeft = engineInfo.Temperature.left -- ENG1 EGT ºC. May get odd numbers
|
|
local lEngineTempRight = engineInfo.Temperature.right -- ENG2 EGT ºC. May get odd numbers
|
|
|
|
local lFuelConsumptionLeft = engineInfo.FuelConsumption.left -- {left ,right},kg per sec
|
|
local lFuelConsumptionRight = engineInfo.FuelConsumption.right -- {left ,right},kg per sec
|
|
local lFuelConsumptionTotal = lFuelConsumptionLeft + lFuelConsumptionRight -- total,kg per sec
|
|
local lHydraulicPressureLeft = engineInfo.HydraulicPressure.left -- {left ,right},kg per square centimeter
|
|
local lHydraulicPressureRight = engineInfo.HydraulicPressure.right -- {left ,right},kg per square centimeter
|
|
|
|
ExportScript.Tools.SendData(8000, aircraftName)
|
|
|
|
ExportScript.Tools.SendData(8001, pilotName)
|
|
|
|
ExportScript.Tools.SendData(8002, 'Real Time\n'.. realTimeLocal .. '\nDCS Time\n' .. dcsTimeLocal) -- clocks
|
|
|
|
ExportScript.Tools.SendData(8003, 'HDG ' .. prefixZerosFixedLength(round(aircraftHeading,0),3) .. 'º'
|
|
.. '\nALT ' .. format_int(round(altMsl_feet,-1)) .. ' ft'
|
|
.. '\nIAS ' .. round(ias_knots,0) .. ' kts'
|
|
.. '\nV/S ' .. format_int(round(verticalVelocity_imperial,-2)) .. ' ft/min'
|
|
) -- Aircraft Instrument panel (western)
|
|
|
|
ExportScript.Tools.SendData(8004, 'HDG ' .. prefixZerosFixedLength(round(aircraftHeading,0),3) .. 'º'
|
|
.. '\nALT ' .. format_int(round(altMsl_meters,-1)) .. ' m'
|
|
.. '\nIAS ' .. round(ias_metric,0) .. ' km/h'
|
|
.. '\nV/S ' .. format_int(round(verticalVelocity_metric,0)) .. ' m/s'
|
|
) -- Aircraft Instrument panel (eastern)
|
|
|
|
ExportScript.Tools.SendData(8005, 'HDG ' .. prefixZerosFixedLength(round(aircraftHeading,0),3) .. 'º'
|
|
.. '\nALT ' .. format_int(round(altMsl_feet,-1)) .. ' ft'
|
|
.. '\nIAS ' .. round(ias_mph,0) .. ' mph'
|
|
.. '\nV/S ' .. format_int(round(verticalVelocity_imperial,-2)) .. ' ft/min'
|
|
) -- Aircraft Instrument panel (western ww2)
|
|
|
|
ExportScript.Tools.SendData(8006, "Lat-Long-DMS\n" .. formatCoord("DMS",true, lLatitude)
|
|
.. "\n" .. formatCoord("DMS",false, lLongitude)
|
|
) -- Player coordinates in DMS
|
|
|
|
ExportScript.Tools.SendData(8007, "Lat-Long-DDM\n" .. formatCoord("DDM",true, lLatitude)
|
|
.. "\n" .. formatCoord("DDM",false, lLongitude)
|
|
) -- Player coordinates in DDM
|
|
|
|
ExportScript.Tools.SendData(8008, 'MGRS\n'.. mgrsTable[1][1] .. ' ' .. mgrsTable[1][2]
|
|
.. '\n' .. mgrsTable[1][3] .. ' ' .. mgrsTable[1][4]
|
|
) -- Player coordinates in MGRS on 2 rows + title
|
|
|
|
ExportScript.Tools.SendData(8009, 'Mag Var\n' .. format_int(round(magneticVariance, 2))) -- also called magnetic deviation
|
|
|
|
-- Example for using the Lo Data. Feel free to make your own!
|
|
ExportScript.Tools.SendData(8010, format_int(round(kgPerSecond2poundPerHour(lFuelConsumptionLeft), -1))) -- fuel use in pph
|
|
|
|
end
|
|
function ExportScript.AirportInfo(mainPanelDevice)
|
|
|
|
local airdromes = LoGetWorldObjects("airdromes") -- returns a list of runways and their popperties
|
|
local airportInfo = {} -- contains generated table of important properties
|
|
-- the table will be sorted by nearest airport first
|
|
-- for this table:
|
|
-- airportInfo[1] is the first element
|
|
-- airportInfo[1][1] is the airport name of the first element/airport
|
|
-- airportInfo[1][2] is the distance to the airport of the first element/airport
|
|
-- airportInfo[1][3] is the bearing to the airport of the first element/airport
|
|
-- airportInfo[1][4] is the extimated time en route
|
|
-- airportInfo[1][5] is the direction of the wind
|
|
-- airportInfo[1][6] is the windStrength of the wind
|
|
-- airportInfo[1][7] is the main runway heading
|
|
-- airportInfo[1][8] is the reverse of the main runway
|
|
-- airportInfo[1][9] is the prefered runway based on winds
|
|
|
|
for key,value in pairs(airdromes) do
|
|
|
|
-- remove the woRunWay entries so that only named runways are in the list
|
|
if value.Name ~= 'woRunWay' then
|
|
|
|
-- get the distance from the player to the runway
|
|
local distance = getdistance(LoGetSelfData().LatLongAlt.Lat,
|
|
value.LatLongAlt.Lat,
|
|
LoGetSelfData().LatLongAlt.Long,
|
|
value.LatLongAlt.Long, "nm")
|
|
|
|
-- get the direction from the player to the runway
|
|
local bearing = getBearing(LoGetSelfData().LatLongAlt.Lat,
|
|
value.LatLongAlt.Lat,
|
|
LoGetSelfData().LatLongAlt.Long,
|
|
value.LatLongAlt.Long, true)
|
|
|
|
-- estimate the runway heading based on the reported values
|
|
local runwayHeading = round(value.Heading * 57.3,-1) / 10
|
|
if runwayHeading < 0 then
|
|
runwayHeading = 36 + runwayHeading
|
|
end
|
|
-- Reverse it for the reciprocal runway
|
|
local runwayHeadingReciprocal
|
|
if runwayHeading > 18 then
|
|
runwayHeadingReciprocal = runwayHeading-18
|
|
else
|
|
runwayHeadingReciprocal = runwayHeading+18
|
|
end
|
|
|
|
local ete = distance / metersPerSecond2knots(LoGetTrueAirSpeed()) * (60 * 60) --based on tas bc dcs is flat...
|
|
-- if ete is more than 24hrs, make it 24 hrs, which shows up as 00-00-00
|
|
-- this case is for choppers and aircraft that arent moving
|
|
if ete > 86400 then ete = 86400 end
|
|
ete = formatTime(ete)
|
|
|
|
-- wind at airport calculations. Each airport has slighty different winds
|
|
-- https://forum.dcs.world/topic/165136-logetwindatpoint-in-exportlua/#comment-3294428
|
|
-- LoGetWindAtPoint(x,y,z,is_radio_alt), 2 meters off the ground for the "wind sensor"
|
|
local vx,_vy,vz,_absolute_height = LoGetWindAtPoint(value.Position.x,2,value.Position.y,true)
|
|
local windDirectionInRadians = math.atan2(vz,vx)
|
|
local windDirection = windDirectionInRadians * 57.3
|
|
local windStrength = math.sqrt((vx)^2 + (vz)^2)
|
|
if windDirection < 0 then
|
|
windDirection = 360 + windDirection
|
|
end
|
|
-- Convert to direction to from direction
|
|
if windDirection > 180 then
|
|
windDirection = windDirection - 180
|
|
else
|
|
windDirection = windDirection + 180
|
|
end
|
|
|
|
-- Calculate the prefered runway for landing
|
|
-- if the rounded runway is within +- 9 of the rounded wind, then it is prefered
|
|
local windRounded = round(windDirection, -1)
|
|
if windRounded >= runwayHeading - 9 and windRounded <= runwayHeading + 9 then
|
|
runwayHeadingPrefered = runwayHeading
|
|
else
|
|
runwayHeadingPrefered = runwayHeadingReciprocal
|
|
end
|
|
|
|
-- Populate the table with the important info for each airport
|
|
table.insert(airportInfo, -- the table name
|
|
{value.Name, -- airport name [1]
|
|
distance, bearing, ete, --[2][3][4]
|
|
windDirection,windStrength, --wind direction [5], wind Strength [6]
|
|
runwayHeading, runwayHeadingReciprocal,runwayHeadingPrefered}) -- [7][8][9]
|
|
|
|
end -- end of woRunWay
|
|
end -- end of FOR loop
|
|
|
|
-- sort the table based on the second value, which is distance
|
|
-- https://stackoverflow.com/questions/51276613/how-to-sort-table-by-value-and-then-print-index-in-order
|
|
-- https://www.tutorialspoint.com/sort-function-in-lua-programming
|
|
table.sort(airportInfo, function(a,b) return a[2] < b[2] end)
|
|
|
|
-- Primary Airport (closest)
|
|
ExportScript.Tools.SendData(8101, airportInfo[1][1] .. '\n' -- name of airport
|
|
--[[.. 'BRG ']] .. format_int(addZeros3(round(airportInfo[1][3],0))) .. 'º ' -- bearing
|
|
--[[.. 'DIST ']] .. format_int(round(airportInfo[1][2], 0)) .. 'nm\n' -- distance
|
|
.. 'ETE ' .. airportInfo[1][4] .. '\n' -- estimated time in route
|
|
.. '' .. prefixZerosFixedLength(round(airportInfo[1][5], 0),3) .. 'º ' -- wind bearing
|
|
.. round(metersPerSecond2knots(airportInfo[1][6]),0) .. 'kts' -- wing strength
|
|
.. '\n' .. prefixZerosFixedLength(airportInfo[1][7],2) -- runway 1
|
|
.. '-' .. prefixZerosFixedLength(airportInfo[1][8],2) -- runway 2
|
|
.. ' (' .. prefixZerosFixedLength(airportInfo[1][9],2) .. ')') -- prefered runway based on wind in parens
|
|
|
|
-- Secondary Airport (second closest)
|
|
ExportScript.Tools.SendData(8102, airportInfo[2][1] .. '\n' -- name of airport
|
|
--[[.. 'BRG ']] .. format_int(addZeros3(round(airportInfo[2][3],0))) .. 'º ' -- bearing
|
|
--[[.. 'DIST ']] .. format_int(round(airportInfo[2][2], 0)) .. 'nm\n' -- distance
|
|
.. 'ETE ' .. airportInfo[2][4] .. '\n' -- estimated time in route
|
|
.. '' .. prefixZerosFixedLength(round(airportInfo[2][5], 0),3) .. 'º ' -- wind bearing
|
|
.. round(metersPerSecond2knots(airportInfo[2][6]),0) .. 'kts' -- wing strength
|
|
.. '\n' .. prefixZerosFixedLength(airportInfo[2][7],2) -- runway 1
|
|
.. '-' .. prefixZerosFixedLength(airportInfo[2][8],2) -- runway 2
|
|
.. ' (' .. prefixZerosFixedLength(airportInfo[2][9],2) .. ')') -- prefered runway based on wind in parens
|
|
end
|
|
|
|
function ExportScript.WindsAloft(mainPanelDevice)
|
|
|
|
-- Winds relative to the aircraft, aka, winds aloft
|
|
local windAloft = LoGetVectorWindVelocity()
|
|
local windStrengthAloft = math.sqrt((windAloft.x)^2 + (windAloft.z)^2)
|
|
local windDirectionAloft = math.deg(math.atan2(windAloft.z, windAloft.x))
|
|
if windDirectionAloft < 0 then
|
|
windDirectionAloft = 360 + windDirectionAloft
|
|
end
|
|
|
|
-- Convert to direction to from direction
|
|
if windDirectionAloft > 180 then
|
|
windDirectionAloft = windDirectionAloft - 180
|
|
else
|
|
windDirectionAloft = windDirectionAloft + 180
|
|
end
|
|
|
|
ExportScript.Tools.SendData(8100, 'Wind Aloft\n' .. addZeros3(round(windDirectionAloft,0)) .. 'º '
|
|
.. round(metersPerSecond2knots(windStrengthAloft,0)) .. 'kts'
|
|
) -- winds at the aircraft
|
|
end
|
|
function ExportScript.GroundRadar(mainPanelDevice) -- may return some odd things
|
|
|
|
local tableOfUnits = LoGetWorldObjects('units')
|
|
|
|
local tableOfGround = {}
|
|
-- relative to the player...
|
|
local tableOfGround_friendly = {}
|
|
local tableOfGround_friendlyReports = {}
|
|
local tableOfGround_enemy = {}
|
|
local tableOfGround_enemyReports = {}
|
|
|
|
for key,value in pairs(tableOfUnits) do
|
|
if value.Type.level1 == 2 then
|
|
table.insert(tableOfGround, value)
|
|
end
|
|
end
|
|
|
|
local selfData = LoGetSelfData()
|
|
local selfCoalitionID = selfData.CoalitionID
|
|
|
|
for key,value in pairs(tableOfGround) do
|
|
if value.CoalitionID == selfCoalitionID then
|
|
table.insert(tableOfGround_friendly, value)
|
|
else
|
|
table.insert(tableOfGround_enemy, value)
|
|
end
|
|
end
|
|
|
|
-- TODO: only do enemy reports if there is an awacs unit(?)
|
|
for key,value in pairs(tableOfGround_enemy) do
|
|
local distance = getdistance(LoGetSelfData().LatLongAlt.Lat,
|
|
value.LatLongAlt.Lat,
|
|
LoGetSelfData().LatLongAlt.Long,
|
|
value.LatLongAlt.Long, "nm")
|
|
|
|
local bearing = getBearing(LoGetSelfData().LatLongAlt.Lat,
|
|
value.LatLongAlt.Lat,
|
|
LoGetSelfData().LatLongAlt.Long,
|
|
value.LatLongAlt.Long, true)
|
|
|
|
table.insert(tableOfGround_enemyReports, -- the table name
|
|
{value.Name, distance, bearing}) --[1][2][3]
|
|
end
|
|
table.sort(tableOfGround_enemyReports, function(a,b) return a[2] < b[2] end) -- sort based on the second value, which is distance
|
|
|
|
|
|
for key,value in pairs(tableOfGround_friendly) do
|
|
local distance = getdistance(LoGetSelfData().LatLongAlt.Lat,
|
|
value.LatLongAlt.Lat,
|
|
LoGetSelfData().LatLongAlt.Long,
|
|
value.LatLongAlt.Long, "nm")
|
|
|
|
local bearing = getBearing(LoGetSelfData().LatLongAlt.Lat,
|
|
value.LatLongAlt.Lat,
|
|
LoGetSelfData().LatLongAlt.Long,
|
|
value.LatLongAlt.Long, true)
|
|
|
|
table.insert(tableOfGround_friendlyReports, -- the table name
|
|
{value.Name, distance, bearing}) --[1][2][3]
|
|
|
|
end
|
|
table.sort(tableOfGround_friendlyReports, function(a,b) return a[2] < b[2] end) -- sort based on the second value, which is distance
|
|
|
|
local string_8200 = 'No Ground\nEnemy\nDetected'
|
|
if tableOfGround_enemyReports[1] ~= nill then
|
|
string_8200 = 'Enemy Ground\n' .. tableOfGround_enemyReports[1][1]
|
|
.. '\n ' .. prefixZerosFixedLength(tableOfGround_enemyReports[1][3],3) -- bearing
|
|
.. 'º ' .. round(tableOfGround_enemyReports[1][2],0) .. 'nm'--distance
|
|
end
|
|
|
|
local string_8201 = 'No Ground\nEnemy\nDetected'
|
|
if tableOfGround_enemyReports[2] ~= nill then
|
|
string_8201 = 'Enemy Ground\n'.. tableOfGround_enemyReports[2][1]
|
|
.. '\n ' .. prefixZerosFixedLength(tableOfGround_enemyReports[2][3],3) -- bearing
|
|
.. 'º ' .. round(tableOfGround_enemyReports[2][2],0) .. 'nm'--distance
|
|
end
|
|
|
|
local string_8202 = 'No Ground\nFriend\nDetected'
|
|
if tableOfGround_friendlyReports[1] ~= nill then
|
|
string_8202 = 'Friend Ground\n' .. tableOfGround_friendlyReports[1][1]
|
|
.. '\n ' .. prefixZerosFixedLength(tableOfGround_friendlyReports[1][3],3) -- bearing
|
|
.. 'º ' .. round(tableOfGround_friendlyReports[1][2],0) .. 'nm'--distance
|
|
end
|
|
|
|
local string_8203 = 'No Ground\nFriend\nDetected'
|
|
if tableOfGround_friendlyReports[2] ~= nill then
|
|
string_8203 = 'Friend Ground\n' .. tableOfGround_friendlyReports[2][1]
|
|
.. '\n ' .. prefixZerosFixedLength(tableOfGround_friendlyReports[2][3],3) -- bearing
|
|
.. 'º ' .. round(tableOfGround_friendlyReports[2][2],0) .. 'nm'--distance
|
|
end
|
|
|
|
ExportScript.Tools.SendData(8200, string_8200)
|
|
ExportScript.Tools.SendData(8201, string_8201)
|
|
ExportScript.Tools.SendData(8202, string_8202)
|
|
ExportScript.Tools.SendData(8203, string_8203)
|
|
end
|
|
|
|
function ExportScript.AirRadar(mainPanelDevice)
|
|
|
|
local tableOfUnits = LoGetWorldObjects('units')
|
|
|
|
local tableOfAircraft = {}
|
|
-- relative to the player...
|
|
local tableOfAircraft_friendly = {}
|
|
local tableOfAircraft_friendlyReports = {}
|
|
local tableOfAircraft_enemy = {}
|
|
local tableOfAircraft_enemyReports = {}
|
|
|
|
for key,value in pairs(tableOfUnits) do
|
|
if value.Type.level1 == 1 then
|
|
table.insert(tableOfAircraft, value)
|
|
end
|
|
end
|
|
|
|
local selfData = LoGetSelfData()
|
|
local selfCoalitionID = selfData.CoalitionID
|
|
|
|
for key,value in pairs(tableOfAircraft) do
|
|
if value.CoalitionID == selfCoalitionID then
|
|
table.insert(tableOfAircraft_friendly, value)
|
|
else
|
|
table.insert(tableOfAircraft_enemy, value)
|
|
end
|
|
end
|
|
|
|
-- TODO: only do enemy reports if there is a awacs unit
|
|
for key,value in pairs(tableOfAircraft_enemy) do
|
|
local distance = getdistance(LoGetSelfData().LatLongAlt.Lat,
|
|
value.LatLongAlt.Lat,
|
|
LoGetSelfData().LatLongAlt.Long,
|
|
value.LatLongAlt.Long, "nm")
|
|
|
|
local bearing = getBearing(LoGetSelfData().LatLongAlt.Lat,
|
|
value.LatLongAlt.Lat,
|
|
LoGetSelfData().LatLongAlt.Long,
|
|
value.LatLongAlt.Long, true)
|
|
|
|
table.insert(tableOfAircraft_enemyReports, -- the table name
|
|
{value.Name, distance, bearing}) --[1][2][3]
|
|
|
|
-- https://stackoverflow.com/questions/51276613/how-to-sort-table-by-value-and-then-print-index-in-order
|
|
-- https://www.tutorialspoint.com/sort-function-in-lua-programming
|
|
|
|
end
|
|
table.sort(tableOfAircraft_enemyReports, function(a,b) return a[2] < b[2] end) -- sort based on the second value, which is distance
|
|
|
|
|
|
for key,value in pairs(tableOfAircraft_friendly) do -- [1] will always be the player
|
|
local distance = getdistance(LoGetSelfData().LatLongAlt.Lat,
|
|
value.LatLongAlt.Lat,
|
|
LoGetSelfData().LatLongAlt.Long,
|
|
value.LatLongAlt.Long, "nm")
|
|
|
|
local bearing = getBearing(LoGetSelfData().LatLongAlt.Lat,
|
|
value.LatLongAlt.Lat,
|
|
LoGetSelfData().LatLongAlt.Long,
|
|
value.LatLongAlt.Long, true)
|
|
|
|
table.insert(tableOfAircraft_friendlyReports, -- the table name
|
|
{value.Name, distance, bearing}) --[1][2][3]
|
|
|
|
end
|
|
table.sort(tableOfAircraft_friendlyReports, function(a,b) return a[2] < b[2] end) -- sort based on the second value, which is distance
|
|
|
|
local string_8210 = 'No Air\nEnemy\nDetected'
|
|
if tableOfAircraft_enemyReports[1] ~= nill then
|
|
string_8210 = 'Enemy Air\n' .. tableOfAircraft_enemyReports[1][1]
|
|
.. '\n ' .. prefixZerosFixedLength(tableOfAircraft_enemyReports[1][3],3) -- bearing
|
|
.. 'º ' .. round(tableOfAircraft_enemyReports[1][2],0) .. 'nm'--distance
|
|
end
|
|
|
|
local string_8211 = 'No Air\nEnemy\nDetected'
|
|
if tableOfAircraft_enemyReports[2] ~= nill then
|
|
string_8211 = 'Enemy Air\n' .. tableOfAircraft_enemyReports[2][1]
|
|
.. '\n ' .. prefixZerosFixedLength(tableOfAircraft_enemyReports[2][3],3) -- bearing
|
|
.. 'º ' .. round(tableOfAircraft_enemyReports[2][2],0) .. 'nm'--distance
|
|
end
|
|
|
|
local string_8212 = 'No Air\nFriend\nDetected'
|
|
if tableOfAircraft_friendlyReports[2] ~= nill then
|
|
string_8212 = 'Friend Air\n' .. tableOfAircraft_friendlyReports[2][1]
|
|
.. '\n ' .. prefixZerosFixedLength(tableOfAircraft_friendlyReports[2][3],3) -- bearing
|
|
.. 'º ' .. round(tableOfAircraft_friendlyReports[2][2],0) .. 'nm'--distance
|
|
end
|
|
|
|
local string_8213 = 'No Air\nFriend\nDetected'
|
|
if tableOfAircraft_friendlyReports[3] ~= nill then
|
|
string_8213 = 'Friend Air\n' .. tableOfAircraft_friendlyReports[3][1]
|
|
.. '\n ' .. prefixZerosFixedLength(tableOfAircraft_friendlyReports[3][3],3) -- bearing
|
|
.. 'º ' .. round(tableOfAircraft_friendlyReports[3][2],0) .. 'nm'--distance
|
|
end
|
|
|
|
ExportScript.Tools.SendData(8210,string_8210)
|
|
ExportScript.Tools.SendData(8211, string_8211)
|
|
ExportScript.Tools.SendData(8212, string_8212)
|
|
ExportScript.Tools.SendData(8213, string_8213)
|
|
end
|
|
|
|
function ExportScript.IglaHunter(mainPanelDevice) -- Locates the nearest Igla
|
|
|
|
local tableOfUnits = LoGetWorldObjects('units')
|
|
local selfData = LoGetSelfData()
|
|
local selfCoalitionID = selfData.CoalitionID
|
|
|
|
local tableOfIgla = {}
|
|
local tableOfIgla_report = {}
|
|
|
|
--TODO: Might have to refine this.
|
|
for key,value in pairs(tableOfUnits) do
|
|
if value.CoalitionID ~= selfCoalitionID then
|
|
if value.Type.level3 == 27 then
|
|
if value.Type.level2 == 16 then
|
|
if value.Type.level1 == 2 then
|
|
if value.Type.level4 == 55 or 54 or 53 or 52 or 62 then
|
|
table.insert(tableOfIgla, value)
|
|
end
|
|
end
|
|
end
|
|
end
|
|
end
|
|
end
|
|
|
|
--if tableOfIgla ~= null then
|
|
for key,value in pairs(tableOfIgla) do
|
|
local distance = getdistance(LoGetSelfData().LatLongAlt.Lat,
|
|
value.LatLongAlt.Lat,
|
|
LoGetSelfData().LatLongAlt.Long,
|
|
value.LatLongAlt.Long, "nm")
|
|
|
|
local bearing = getBearing(LoGetSelfData().LatLongAlt.Lat,
|
|
value.LatLongAlt.Lat,
|
|
LoGetSelfData().LatLongAlt.Long,
|
|
value.LatLongAlt.Long, true)
|
|
|
|
table.insert(tableOfIgla_report, -- the table name
|
|
{value.Name, distance, bearing}) --[1][2][3]
|
|
--end
|
|
end
|
|
table.sort(tableOfIgla_report, function(a,b) return a[2] < b[2] end) -- sort based on the second value, which is distance
|
|
|
|
local string_8666 = 'Igla Hunter\nSearching...'
|
|
if tableOfIgla_report[1] ~= nill then
|
|
string_8666 = 'Igla Detected\n' .. tableOfIgla_report[1][1]
|
|
.. '\n ' .. prefixZerosFixedLength(tableOfIgla_report[1][3],3) -- bearing
|
|
.. 'º ' .. round(tableOfIgla_report[1][2],0) .. ' nm'--distance
|
|
end
|
|
|
|
ExportScript.Tools.SendData(8666, string_8666)
|
|
|
|
end
|
|
|
|
----------------------
|
|
-- Helper Functions --
|
|
----------------------
|
|
function ExportScript.Linearize(current_value, raw_tab, final_tab)
|
|
-- (c) scoobie
|
|
if current_value <= raw_tab[1] then
|
|
return final_tab[1]
|
|
end
|
|
for index, value in pairs(raw_tab) do
|
|
if current_value <= value then
|
|
local ft = final_tab[index]
|
|
local rt = raw_tab[index]
|
|
return (current_value - rt) * (ft - final_tab[index - 1]) / (rt - raw_tab[index - 1]) + ft
|
|
end
|
|
end
|
|
-- we shouldn't be here, so something went wrong - return arbitrary max. final value, maybe the user will notice the problem:
|
|
return final_tab[#final_tab]
|
|
end
|
|
|
|
function trim(s) --http://lua-users.org/wiki/CommonFunctions
|
|
-- from PiL2 20.4
|
|
return (s:gsub("^%s*(.-)%s*$", "%1"))
|
|
end
|
|
function formatTime(time)
|
|
local seconds = math.floor(time) % 60
|
|
local minutes = math.floor(time / 60) % 60
|
|
local hours = math.floor(time / (60 * 60)) % 24
|
|
return string.format("%02d", hours) .. "-" .. string.format("%02d", minutes) .. "-" .. string.format("%02d", seconds)
|
|
end
|
|
|
|
function meters2feet(meters)
|
|
local feet = meters * 3.281
|
|
return feet
|
|
end
|
|
|
|
function feet2meters(feet)
|
|
local meters = feet / 3.281
|
|
return feet
|
|
end
|
|
|
|
function metersPerSecond2milesPerHour(metersPerSecond)
|
|
local milesPerHour = metersPerSecond * 2.237
|
|
return milesPerHour
|
|
end
|
|
|
|
function metersPerSecond2knots(metersPerSecond)
|
|
local knots = metersPerSecond * 1.944
|
|
return knots
|
|
end
|
|
|
|
function kgPerSecond2poundPerHour(kgPerSecond)
|
|
poundPerHour = kgPerSecond * 7937
|
|
return poundPerHour
|
|
end
|
|
|
|
function metersPerSecond2feetPerMinute(metersPerSecond)
|
|
local feetPerMinute = metersPerSecond * 197
|
|
return feetPerMinute
|
|
end
|
|
|
|
function round(num, numDecimalPlaces) --http://lua-users.org/wiki/SimpleRound
|
|
local mult = 10^(numDecimalPlaces or 0)
|
|
return math.floor(num * mult + 0.5) / mult
|
|
end
|
|
|
|
function format_int(number) --https://stackoverflow.com/questions/10989788/format-integer-in-lua
|
|
local i, j, minus, int, fraction = tostring(number):find('([-]?)(%d+)([.]?%d*)')
|
|
-- reverse the int-string and append a comma to all blocks of 3 digits
|
|
int = int:reverse():gsub("(%d%d%d)", "%1,")
|
|
-- reverse the int-string back remove an optional comma and put the
|
|
-- optional minus and fractional part back
|
|
return minus .. int:reverse():gsub("^,", "") .. fraction
|
|
end
|
|
|
|
function formatCoord(type, isLat, d)
|
|
local h
|
|
if isLat then
|
|
if d < 0 then
|
|
h = 'S'
|
|
d = -d
|
|
else
|
|
h = 'N'
|
|
end
|
|
else
|
|
if d < 0 then
|
|
h = 'W'
|
|
d = -d
|
|
else
|
|
h = 'E'
|
|
end
|
|
end
|
|
|
|
local g = math.floor(d)
|
|
local m = math.floor(d * 60 - g * 60)
|
|
local s = d * 3600 - g * 3600 - m * 60
|
|
|
|
if type == "DMS" then -- Degree Minutes Seconds
|
|
s = math.floor(s * 100) / 100
|
|
return string.format('%s %2d°%.2d\'%05.2f"', h, g, m, s)
|
|
elseif type == "DDM" then -- Degree Decimal Minutes
|
|
s = math.floor(s / 60 * 1000)
|
|
return string.format('%s %2d°%02d.%3.3d\'', h, g, m, s)
|
|
else -- Decimal Degrees
|
|
return string.format('%f',d)
|
|
end
|
|
end
|
|
|
|
function getdistance(lat1,lat2,lon1,lon2,unit) -- https://www.geeksforgeeks.org/program-distance-two-points-earth/
|
|
--Example Locations
|
|
--lat1 = 42.1578 -- POTI
|
|
--lat2 = 42.3269 -- HONI
|
|
--lon1 = 41.6777
|
|
--lon2 = 42.4122
|
|
|
|
local lon1 = toRadians(lon1)
|
|
local lon2 = toRadians(lon2)
|
|
local lat1 = toRadians(lat1)
|
|
local lat2 = toRadians(lat2)
|
|
|
|
-- Haversine formula
|
|
local dlon = lon2 - lon1
|
|
local dlat = lat2 - lat1
|
|
local a = math.pow(math.sin(dlat / 2), 2) +
|
|
math.cos(lat1) * math.cos(lat2) *
|
|
math.pow(math.sin(dlon / 2),2)
|
|
|
|
local c = 2 * math.asin(math.sqrt(a))
|
|
|
|
local r -- Radius of earth in X.
|
|
if unit == 'nm' then
|
|
r = 6371 / 1.852 -- times 1.852 because I could not find a good NM source
|
|
elseif unit == 'km' then
|
|
r = 6371 -- Use 6371 for kilometers
|
|
elseif unit == 'miles' then
|
|
r = 3956 -- Use 3956 for miles
|
|
elseif unit == 'meters' then
|
|
r = 6371 * 1000
|
|
end
|
|
|
|
-- calculate the result
|
|
return (c * r)
|
|
end
|
|
|
|
function toRadians(angleIn10thofaDegree)
|
|
return (angleIn10thofaDegree * math.pi) / 180
|
|
end
|
|
|
|
|
|
function getBearing(lat1,lat2,lon1,lon2, magnetic)
|
|
local bearing_rad = math.atan2(lon2 - lon1, lat2 - lat1)
|
|
if bearing_rad < 0 then
|
|
bearing_rad = bearing_rad + (2 * math.pi)
|
|
end
|
|
|
|
bearing = math.deg(bearing_rad)
|
|
|
|
-- start calculation for getting the magnetic bar
|
|
local _aircraftPitch, _aircraftBank, aircraftYawTrue = LoGetADIPitchBankYaw()
|
|
aircraftYawTrue = aircraftYawTrue * 57.3 -- actually heading
|
|
local aircraftYawMagnetic = LoGetMagneticYaw() * 57.3
|
|
local magneticVariance = aircraftYawTrue - aircraftYawMagnetic
|
|
|
|
if magnetic == true then
|
|
bearing = bearing - magneticVariance
|
|
end
|
|
|
|
-- correction for bearings less than 0 due to the calculation above
|
|
if bearing < 0 then
|
|
bearing = bearing + 360
|
|
end
|
|
|
|
return bearing
|
|
end
|
|
|
|
function addZeros3(number)
|
|
number = string.format("%.1d" , number)
|
|
if #number == 2 then
|
|
number = "0" .. number
|
|
elseif #number == 1 then
|
|
number = "00" .. number
|
|
end
|
|
return number
|
|
end
|
|
|
|
function prefixZerosFixedLength(number, digitLength) -- prefixZerosFixedLength(99, 3) --> 099
|
|
number = string.format("%.1d" , number) -- make the number a string
|
|
local zerosToAdd = digitLength - #number
|
|
s = ''
|
|
for i = 1, zerosToAdd do
|
|
s = s .. 0
|
|
end
|
|
return s .. number
|
|
end
|
|
|
|
function mgrsTableize(mgrsString)
|
|
-- Reference: https://upload.wikimedia.org/wikipedia/commons/b/b7/Universal_Transverse_Mercator_zones.svg
|
|
-- example: 38 T LM 12345 54321
|
|
-- (\d+\s\w)\s(\w+)\s(.+)\s(.+) --c# version of regex
|
|
-- UTMZone = string,
|
|
-- MGRSDigraph = string,
|
|
-- Easting = number,
|
|
-- Northing = number
|
|
local UTMZone , MGRSDigraph, Easting, Northing = mgrsString:match('(%d+%s%w)%s(%w+)%s(.+)%s(.+)')
|
|
local mgrsTbl = {}
|
|
table.insert(mgrsTbl, {UTMZone,MGRSDigraph,Easting,Northing})
|
|
return mgrsTbl
|
|
end
|
|
|
|
function isNilOrEmpty(value)
|
|
if value == "" or value == nil then
|
|
return true
|
|
else
|
|
return false
|
|
end
|
|
end
|
|
|
|
function NilOrEmpty(value)
|
|
if value == "" then
|
|
return 'empty'
|
|
elseif value == nil then
|
|
return 'empty'
|
|
else
|
|
return value
|
|
end
|
|
end
|