mirror of
https://github.com/weyne85/DCS-ExportScripts.git
synced 2025-10-29 16:58:18 +00:00
1581 lines
74 KiB
Lua
1581 lines
74 KiB
Lua
-- F-5E-3
|
|
|
|
local base = _G -- game information
|
|
local os = base.os -- time
|
|
local Terrain = require('terrain') -- map info
|
|
|
|
ExportScript.FoundDCSModule = true
|
|
ExportScript.Version.F5E3 = "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
|
|
]]
|
|
-- Gear System
|
|
[97] = "%.4f", -- AlterReleaseRods
|
|
-- Cockpit mechanics
|
|
[712] = "%.4f", -- CanopyHandle
|
|
-- WEAPONS ----------------------------------------------------
|
|
-- CMDS
|
|
[401] = "%.4f", -- ChaffDrumCounter_10 {0.0, 1.0} {0.0, 10.0}
|
|
[402] = "%.4f", -- ChaffDrumCounter_1 {0.0, 1.0} {0.0, 10.0}
|
|
[405] = "%.4f", -- FlareDrumCounter_10 {0.0, 1.0} {0.0, 10.0}
|
|
[406] = "%.4f", -- FlareDrumCounter_1 {0.0, 1.0} {0.0, 10.0}
|
|
-- AN/ASG-31 Sight
|
|
[43] = "%.4f", -- RetDepressionDrum_100 {0.0, 1.0} {0.0, 10.0}
|
|
[44] = "%.4f", -- RetDepressionDrum_10 {0.0, 1.0} {0.0, 10.0}
|
|
[45] = "%.4f", -- RetDepressionDrum_1 {0.0, 1.0} {0.0, 10.0}
|
|
-- Slipball
|
|
[3] = "%.4f", -- Slipball {-1.0, 1.0}
|
|
-- Sight Camera
|
|
[85] = "%.4f", -- MotorRunKnob {1.0, 0.0}
|
|
-- AN/APQ-159 Radar
|
|
-- Range scale lights
|
|
[155] = "%.4f", -- RangeScale_5
|
|
[156] = "%.4f", -- RangeScale_10
|
|
[157] = "%.4f", -- RangeScale_20
|
|
[158] = "%.4f", -- RangeScale_40
|
|
[159] = "%.f", -- InRangeLight
|
|
[160] = "%.f", -- FailLight
|
|
[161] = "%.f", -- LockOnLight
|
|
[162] = "%.f", -- ExcessGLight
|
|
[163] = "%.4f", -- ScaleBrightness
|
|
-- INSTRUMENTS ------------------------------------------------
|
|
-- Angle-of-attack Indicator
|
|
[7] = "%.4f", -- AOA_Units {0.0, 1.0} {0.0, 30.0}
|
|
[704] = "%.f", -- AOA_poweroff_flag
|
|
-- Accelerometer
|
|
[6] = "%.4f", -- Accelerometer { 0.0, 0.323, 0.653, 1.0} {-5.0, 0.0, 5.0, 10.0}
|
|
[902] = "%.4f", -- AccelerometerMin { 0.0, 0.323, 0.653, 1.0} {-5.0, 0.0, 5.0, 10.0}
|
|
[903] = "%.4f", -- AccelerometerMax { 0.0, 0.323, 0.653, 1.0} {-5.0, 0.0, 5.0, 10.0}
|
|
-- AirSpeed/Mach Indicator
|
|
[8] = "%.4f", -- Airspeed {0.0, 0.0435, 0.1, 0.318, 0.3745, 0.397, 0.4495, 0.482, 0.54, 0.553, 0.6145, 0.658, 0.668, 0.761, 0.801, 0.877, 0.909, 0.942, 0.972, 1.0} {0.0, 80.0, 100.0, 170.0, 190.0, 200.0, 230.0, 250.0, 290.0, 300.0, 350.0, 390.0, 400.0, 500.0, 550.0, 650.0, 700.0, 750.0, 800.0, 850.0}
|
|
[178] = "%.4f", -- MaxAirspeed {0.0, 0.0435, 0.1, 0.318, 0.3745, 0.397, 0.4495, 0.482, 0.54, 0.553, 0.6145, 0.658, 0.668, 0.761, 0.801, 0.877, 0.909, 0.942, 0.972, 1.0} {0.0, 80.0, 100.0, 170.0, 190.0, 200.0, 230.0, 250.0, 290.0, 300.0, 350.0, 390.0, 400.0, 500.0, 550.0, 650.0, 700.0, 750.0, 800.0, 850.0}
|
|
[177] = "%.4f", -- SetAirspeed
|
|
[179] = "%.4f", -- MachIndicator {1.0, 0.957, 0.92, 0.631, 0.386} {0.0, 0.5, 1.0, 1.8, 2.5}
|
|
-- Vertical Velocity Indicator
|
|
[24] = "%.4f", -- Variometer {-1.0, -0.64, -0.5, -0.29, 0.0, 0.29, 0.5, 0.64, 1.0} {-6000.0, -3000.0, -2000.0, -1000.0, 0.0, 1000.0, 2000.0, 3000.0, 6000.0}
|
|
-- Altimeter AAU-34/A
|
|
[10] = "%.4f", -- Altimeter_100_footPtr {0.0, 1.0} {0.0, 1000.0}
|
|
[11] = "%.4f", -- Altimeter_10000_footCount {0.0, 1.0} {0.0, 10.0}
|
|
[520] = "%.4f", -- Altimeter_1000_footCount {0.0, 1.0} {0.0, 10.0}
|
|
[521] = "%.4f", -- Altimeter_100_footCount {0.0, 1.0} {0.0, 10.0}
|
|
[59] = "%.4f", -- pressure_setting_0 {0.0, 1.0} {0.0, 10.0}
|
|
[58] = "%.4f", -- pressure_setting_1 {0.0, 1.0} {0.0, 10.0}
|
|
[57] = "%.4f", -- pressure_setting_2 {0.0, 1.0} {0.0, 10.0}
|
|
[56] = "%.4f", -- pressure_setting_3 {0.0, 1.0} {0.0, 10.0}
|
|
[9] = "%.4f", -- AAU34_PNEU_flag {0.0, 1.0} {0.0, 0.4}
|
|
-- Attitude Indicator ARU-20
|
|
[81] = "%.4f", -- AI_Pitch {-0.507, 0.0, 0.507} {-rad_(90.0), 0.0, rad_(90.0)}
|
|
[30] = "%.4f", -- AI_Bank {-1.0, 1.0} { 0.0, math.pi * 2.0}
|
|
[149] = "%.4f", -- AI_OFF_flag
|
|
-- Horizontal Situation Indicator
|
|
[32] = "%.4f", -- HSI_CompassCard
|
|
[139] = "%.4f", -- HSI_BearingPtr
|
|
[35] = "%.4f", -- HSI_CourseArrow
|
|
[36] = "%.4f", -- HSI_CourseDevInd {-1.0, 1.0}
|
|
[144] = "%.4f", -- HSI_HeadingMark
|
|
[268] = "%.4f", -- HSI_Range_100 {0.0, 1.0} {0.0, 10.0}
|
|
[269] = "%.4f", -- HSI_Range_10 {0.0, 1.0} {0.0, 10.0}
|
|
[270] = "%.4f", -- HSI_Range_1 {0.0, 1.0} {0.0, 10.0}
|
|
[142] = "%.4f", -- HSI_Range_flag
|
|
[275] = "%.4f", -- HSI_CourseSel_100 {0.0, 1.0} {0.0, 10.0}
|
|
[276] = "%.4f", -- HSI_CourseSel_10 {0.0, 1.0} {0.0, 10.0}
|
|
[277] = "%.4f", -- HSI_CourseSel_1 {0.0, 1.0} {0.0, 10.0}
|
|
[146] = "%.4f", -- HSI_ToFrom
|
|
[143] = "%.4f", -- HSI_OFF_flag
|
|
[141] = "%.4f", -- HSI_DevDF_Win
|
|
-- Standby Attitude Indicator
|
|
[438] = "%.4f", -- SAI_Pitch {-0.665, -0.581, -0.5, 0.0, 0.5, 0.581, 0.676, 0.735} {-rad_(78.0), -rad_(60.0), -rad_(42.0), 0.0, rad_(42.0), rad_(60.0), rad_(80.0), rad_(92.0)}
|
|
[439] = "%.4f", -- SAI_Bank {1.0, -1.0} {-math.pi, math.pi}
|
|
[440] = "%.4f", -- SAI_OFF_flag
|
|
--[443] = "%.4f", -- SAI_knob_arrow {-1.0, 1.0} {0.0, 1.0}
|
|
-- Clock
|
|
[19] = "%.4f", -- CLOCK_currtime_hours
|
|
[18] = "%.4f", -- CLOCK_currtime_minutes
|
|
[509] = "%.4f", -- CLOCK_elapsed_time_minutes
|
|
[37] = "%.4f", -- CLOCK_elapsed_time_seconds
|
|
-- Pitch Trim Indicator
|
|
[52] = "%.4f", -- Pitch_Trim {1.0, 0.0, -0.1} {-10.0, 0.0, 1.0}
|
|
-- Flap Indicator
|
|
[51] = "%.4f", -- Flap_Indicator {0.0, 0.4} {0.0, 4.0}
|
|
-- Hydraulic Pressure Indicators
|
|
[109] = "%.4f", -- Utility_Pressure {0.0, 1.0} {0.0, 4000.0}
|
|
[110] = "%.4f", -- Flight_Pressure {0.0, 1.0} {0.0, 4000.0}
|
|
-- Engine Tachometers
|
|
[16] = "%.4f", -- Tachometer_Left {0.008, 0.475, 0.84, 0.94, 1.0} {0.0, 50.0, 90.0, 100.0, 107.0}
|
|
[425] = "%.4f", -- Tachometer_percent_Left {0.0, 1.0} {0.0, 10.0}
|
|
[17] = "%.4f", -- Tachometer_Right {0.008, 0.475, 0.84, 0.94, 1.0} {0.0, 50.0, 90.0, 100.0, 107.0}
|
|
[426] = "%.4f", -- Tachometer_percent_Right {0.0, 1.0} {0.0, 10.0}
|
|
-- Exhaust Gas Temperature Indicators
|
|
[12] = "%.4f", -- EGT_Left {0.0, 0.03, 0.1, 0.274, 0.78, 1.0} {0.0, 140.0, 200.0, 500.0, 800.0, 1200.0}
|
|
[14] = "%.4f", -- EGT_Right {0.0, 0.03, 0.1, 0.274, 0.78, 1.0} {0.0, 140.0, 200.0, 500.0, 800.0, 1200.0}
|
|
-- Aux Intake Doors Indicator
|
|
[111] = "%.4f", -- AuxIntakeDoors {0.0, 0.2} {0.0, 2.0}
|
|
-- Oil Pressure Indicator (Dual)
|
|
[112] = "%.4f", -- OilPressure_Left {0.0, 1.0} {0.0, 100.0}
|
|
[113] = "%.4f", -- OilPressure_Right {0.0, 1.0} {0.0, 100.0}
|
|
-- Nozzle Position Indicators
|
|
[107] = "%.4f", -- NozzlePos_Left {0.0, 1.0} {0.0, 100.0}
|
|
[108] = "%.4f", -- NozzlePos_Right {0.0, 1.0} {0.0, 100.0}
|
|
-- Cabin Pressure Altimeter
|
|
[114] = "%.4f", -- CabinPressure {0.0, 1.0} {0.0, 50.0}
|
|
-- Fuel Flow Indicator (Dual)
|
|
[525] = "%.4f", -- FuelFlow_Left {0.0, 0.67, 0.75, 0.83, 1.0} {0.0, 4000.0, 7000.0, 10000.0, 15000.0}
|
|
[526] = "%.4f", -- FuelFlow_Right {0.0, 0.67, 0.75, 0.83, 1.0} {0.0, 4000.0, 7000.0, 10000.0, 15000.0}
|
|
-- Fuel Quantity Indicator (Dual)
|
|
[22] = "%.4f", -- FuelQuantity_Left {0.0, 1.0} {0.0, 2500.0}
|
|
[23] = "%.4f", -- FuelQuantity_Right {0.0, 1.0} {0.0, 2500.0}
|
|
-- Oxygen Quantity Indicator
|
|
[390] = "%.4f", -- OxygenQuantity {0.0, 1.0} {0.0, 5.0}
|
|
-- Oxygen Flow Pressure Indicator
|
|
[604] = "%.4f", -- FlowPressure {0.0, 0.5, 1.0} {0.0, 100.0, 500.0}
|
|
-- Oxygen Flow Indicator
|
|
[600] = "%.2f",--"%1d", -- FlowBlinker
|
|
-- RADIO ------------------------------------------------------
|
|
-- UHF Radio AN/ARC-164
|
|
[326] = "%.2f", -- UHFRadioChannel
|
|
[302] = "%.1f", -- UHFRadio100MHz
|
|
[303] = "%.1f", -- UHFRadio10MHz {1.0, 0.0} {0.0, 1.0}
|
|
[304] = "%.1f", -- UHFRadio1MHz {1.0, 0.0} {0.0, 1.0}
|
|
[305] = "%.1f", -- UHFRadio01MHz {1.0, 0.0} {0.0, 1.0}
|
|
[306] = "%.1f", -- UHFRadio0025MHz {1.0, 0.0} {0.0, 1.0}
|
|
-- IFF/SIF APX72
|
|
[197] = "%.4f", -- IFF_Code4Sw_Pull
|
|
[198] = "%.4f", -- IFF_MasterSw_Pull
|
|
-- TACAN
|
|
[263] = "%.4f", -- TACAN_window_wheel.hundreds {0.0, 1.0} {0.0, 10.0}
|
|
[264] = "%.4f", -- TACAN_window_wheel.tens {0.0, 1.0} {0.0, 10.0}
|
|
[265] = "%.4f", -- TACAN_window_wheel.ones {0.0, 1.0} {0.0, 10.0}
|
|
--[266] = "%.4f", -- XYwheel
|
|
[260] = "%.f", -- TACAN_test_light
|
|
-- LAMPS
|
|
-- Engine Fire Lights
|
|
[167] = "%.f", -- lamp_LeftFire
|
|
[168] = "%.f", -- lamp_RightFire
|
|
-- AOA Indexer Lights
|
|
[48] = "%.f", -- lamp_AOA_Red
|
|
[49] = "%.f", -- lamp_AOA_Green
|
|
[50] = "%.f", -- lamp_AOA_Yellow
|
|
-- Landing Gear Lights
|
|
[96] = "%.f", -- lamp_GearWarning
|
|
[54] = "%.f", -- lamp_GearNose
|
|
[53] = "%.f", -- lamp_GearLeft
|
|
[55] = "%.f", -- lamp_GearRight
|
|
-- Hook Light
|
|
[90] = "%.f", -- lamp_Hook
|
|
-- Caution Lights panel
|
|
[530] = "%.f", -- lamp_LeftGenerator
|
|
[531] = "%.f", -- lamp_Canopy
|
|
[532] = "%.f", -- lamp_RightGenerator
|
|
[533] = "%.f", -- lamp_UtilityHyd
|
|
[534] = "%.f", -- lamp_Spare1
|
|
[535] = "%.f", -- lamp_FlightHyd
|
|
[536] = "%.f", -- lamp_ExtTanksEmpty
|
|
[537] = "%.f", -- lamp_IFF
|
|
[538] = "%.f", -- lamp_Oxygen
|
|
[539] = "%.f", -- lamp_LeftFuelLow
|
|
[540] = "%.f", -- lamp_EngineAntiIce
|
|
[541] = "%.f", -- lamp_RightFuelLow
|
|
[542] = "%.f", -- lamp_LeftFuelPress
|
|
[543] = "%.f", -- lamp_INS
|
|
[544] = "%.f", -- lamp_RightFuelPress
|
|
[545] = "%.f", -- lamp_AOA_Flaps
|
|
[546] = "%.f", -- lamp_AirDataComputer
|
|
[547] = "%.f", -- lamp_DirGyro
|
|
[548] = "%.f", -- lamp_Spare2
|
|
[549] = "%.f", -- lamp_DC_Overload
|
|
[550] = "%.f", -- lamp_Spare3
|
|
-- Master Caution Light
|
|
[169] = "%.f", -- lamp_MasterCaution
|
|
--IFF Panel lamps
|
|
[216] = "%.f", -- IFF_reply_lamp
|
|
[218] = "%.f", -- IFF_test_lamp
|
|
-- Internal Lights
|
|
[801] = "%.f", -- light_Flight
|
|
[802] = "%.f", -- light_Engine
|
|
[803] = "%.f", -- light_Console
|
|
[804] = "%.f", -- light_Compass
|
|
[805] = "%.f", -- light_Flood
|
|
[806] = "%.f", -- light_Sight
|
|
[807] = "%.f", -- light_Armt
|
|
[810] = "%.f", -- light_Tstorm
|
|
-- RWR button lights
|
|
[576] = "%.f", -- rwr_Power
|
|
[572] = "%.f", -- rwr_Ship_unkn
|
|
[571] = "%.f", -- rwr_Ship_U
|
|
[568] = "%.f", -- rwr_Sys_On
|
|
[569] = "%.f", -- rwr_Sys
|
|
[565] = "%.f", -- rwr_Sep_Up
|
|
[566] = "%.f", -- rwr_Sep_Down
|
|
[563] = "%.f", -- rwr_Alt
|
|
[562] = "%.f", -- rwr_Alt_Low
|
|
[557] = "%.f", -- rwr_Hand_Up
|
|
[558] = "%.f", -- rwr_Hand_H
|
|
[555] = "%.f", -- rwr_Search
|
|
[553] = "%.f", -- rwr_Mode_Open
|
|
[552] = "%.f", -- rwr_Mode_Pri
|
|
-- Brightness regulation
|
|
[808] = "%.f", -- brtRadarScale
|
|
[815] = "%.f", -- brtRwrLights
|
|
[816] = "%.f", -- brtFireLights
|
|
[817] = "%.f", -- brtMainLights
|
|
[818] = "%.f", -- brtIFFLights
|
|
[819] = "%.f" -- brtRadarLights
|
|
}
|
|
ExportScript.ConfigArguments =
|
|
{
|
|
--[[
|
|
arguments for export in low tick interval
|
|
based on "clickabledata.lua"
|
|
]]
|
|
-- Control System
|
|
[323] = "%1d", -- Yaw Damper Switch, YAW/OFF
|
|
[322] = "%1d", -- Pitch Damper Switch, PITCH/OFF
|
|
[324] = "%.4f", -- Rudder Trim Knob (Axis) {-1.0, 1.0} in 0.15 Steps
|
|
[116] = "%1d", -- Flaps Lever, EMER UP/THUMB SW/FULL {-1.0, 0.0, 1.0}
|
|
[132] = "%1d", -- Pitch Damper Cutoff Switch - Push to cutoff
|
|
[101] = "%1d", -- Speed Brake Switch, OUT/OFF/IN {-1.0, 0.0, 1.0}
|
|
[115] = "%1d", -- Auto Flap System Thumb Switch, UP/FIXED/AUTO {-1.0, 0.0, 1.0}
|
|
--[125] = "%1d", -- Trimmer Switch, PUSH(DESCEND) {0.0, 1.0}
|
|
--[125] = "%1d", -- Trimmer Switch, PULL(CLIMB) {-1.0, 0.0}
|
|
--[126] = "%1d", -- Trimmer Switch, LEFT WING DOWN {0.0, 1.0}
|
|
--[126] = "%1d", -- Trimmer Switch, RIGHT WING DOWN {-1.0, 0.0}
|
|
[125] = "%1d", -- Trimmer Switch, PUSH(DESCEND)/PULL(CLIMB) {1.0, 0.0, -1.0}
|
|
[126] = "%1d", -- Trimmer Switch, LEFT WING DOWN/RIGHT WING DOWN {1.0, 0.0, -1.0}
|
|
[278] = "%1d", -- Rudder Pedal Adjust T-Handle, PULL/STOW
|
|
-- Electric system
|
|
[387] = "%1d", -- attery Switch, BATT/OFF
|
|
[388] = "%1d", -- Left Generator Switch, L GEN/OFF/RESET {-1.0, 0.0, 1.0}
|
|
[389] = "%1d", -- Right Generator Switch, R GEN/OFF/RESET {-1.0, 0.0, 1.0}
|
|
[375] = "%1d", -- Pitot Anti-Ice Switch, PITOT/OFF
|
|
[230] = "%1d", -- Fuel & Oxygen Switch, GAGE TEST/OFF/QTY CHECK {-1.0, 0.0, 1.0}
|
|
-- Fuel System
|
|
[360] = "%1d", -- Left Fuel Shutoff Switch, OPEN/CLOSED
|
|
[362] = "%1d", -- Right Fuel Shutoff Switch, OPEN/CLOSED
|
|
[377] = "%1d", -- Ext Fuel Cl Switch, ON/OFF
|
|
[378] = "%1d", -- Ext Fuel Pylons Switch, ON/OFF
|
|
[380] = "%1d", -- Left Boost Pump Switch, ON/OFF
|
|
[381] = "%1d", -- Crossfeed Switch, OPEN/CLOSED
|
|
[382] = "%1d", -- Right Boost Pump Switch, ON/OFF
|
|
[383] = "%1d", -- Autobalance Switch, LEFT/NEUT/RIGHT {-1.0, 0.0, 1.0}
|
|
-- Engines
|
|
[357] = "%1d", -- Left Engine Start Button - Push to start
|
|
[358] = "%1d", -- Right Engine Start Button - Push to start
|
|
[376] = "%1d", -- Engine Anti-Ice Switch, ENGINE/OFF {1.0, -1.0}
|
|
-- Gear System
|
|
[83] = "%1d", -- Landing Gear Lever, LG UP/LG DOWN
|
|
[95] = "%1d", -- Landing Gear Alternate Release Handle, Pull and Hold
|
|
[98] = "%1d", -- Gear Alternate Release Reset Control, OFF/RESET
|
|
[88] = "%1d", -- Landing Gear Downlock Override Button - Push and hold to override locking solenoid
|
|
[87] = "%1d", -- Landing Gear And Flap Warning Silence Button
|
|
[250] = "%1d", -- Nose Strut Switch, EXTEND/RETRACT {1.0, -1.0}
|
|
[131] = "%1d", -- Nosewheel Steering Button - Press and Hold to engage nosewheel control
|
|
[92] = "%1d", -- Left Landing Gear Lamp - Press to test(LMB)
|
|
[93] = "%1d", -- Nose Landing Gear Lamp - Press to test(LMB)
|
|
[94] = "%1d", -- Right Landing Gear Lamp - Press to test(LMB)
|
|
[89] = "%1d", -- Arresting Hook Button
|
|
-- Oxygen System
|
|
[603] = "%1d", -- Oxygen Supply Lever, ON/OFF {1.0, -1.0}
|
|
[602] = "%1d", -- Diluter Lever
|
|
[601] = "%1d", -- Emergency Lever, EMERGENCY/NORMAL/TEST MASK {-1.0, 0.0, 1.0}
|
|
-- EC System
|
|
[371] = "%1d", -- Cabin Press Switch, DEFOG ONLY/NORMAL/RAM DUMP {0.0, 0.5, 1.0}
|
|
[372] = "%1d", -- Cabin Temp Switch, AUTO/CENTER/MAN COLD/MAN HOT {0.0, 0.1, 0.2, 0.3, 0.4, 0.5, 0.6}
|
|
[373] = "%.2f", -- Cabin Temp Knob (Axis) {-1.0, 1.0} in 0.15 Steps
|
|
[374] = "%.2f", -- Canopy Defog Knob (Axis) {0.0, 1.0} in 0.15 Steps
|
|
[386] = "%.2f", -- Cockpit Air Inlet (Horizontal) (Axis) {-1.0, 1.0} in 0.1 Steps
|
|
[385] = "%.2f", -- Cockpit Air Inlet (Vertical) (Axis) {-1.0, 1.0} in 0.1 Steps
|
|
-- Cockpit Mechanics
|
|
--[0] = "%1d", -- Canopy Handle, OPEN/CLOSE
|
|
[772] = "%1d", -- Seat Adjust Switch, DOWN/NEUTRAL/UP {-1.0, 0.0, 1.0}
|
|
[384] = "%1d", -- Canopy Jettison T-Handle, PULL/PUSH
|
|
[91] = "%.1f", -- Drag Chute T-Handle, PULL/PUSH {0.1, -0.1}
|
|
-- External Lights
|
|
[227] = "%.2f", -- Navigation Lights Knob (Axis) {0.0, 1.0} in 0.15 Steps
|
|
[228] = "%.2d", -- Formation Lights Knob (Axis) {0.0, 1.0} in 0.15 Steps
|
|
[229] = "%1d", -- Beacon Switch, BEACON/OFF
|
|
[353] = "%1d", -- Landing & Taxi Light Switch, ON/OFF
|
|
-- Internal Lights
|
|
[46] = "%1d", -- AN/ASG-31 Sight Panel Light Button, ON/OFF
|
|
[613] = "%1d", -- Magnetic Compass Light Switch, LIGHT/OFF
|
|
[221] = "%.2f", -- Flood Lights Knob (Axis) {0.0, 1.0} in 0.15 Steps
|
|
[222] = "%.2f", -- Flight Instruments Lights Knob (Axis) {0.0, 1.0} in 0.15 Steps
|
|
[223] = "%.2f", -- Engine Instruments Lights Knob (Axis) {0.0, 1.0} in 0.15 Steps
|
|
[224] = "%.2f", -- Console Lights Knob (Axis) {0.0, 1.0} in 0.15 Steps
|
|
[363] = "%.2f", -- Armament Panel Lights Knob (Axis) {0.0, 1.0} in 0.15 Steps
|
|
[172] = "%1d", -- Master Caution Button - Push to reset
|
|
[226] = "%1d", -- Warning Test Switch, Press to test
|
|
[225] = "%1d", -- Bright/Dim Switch, BRT/NEUT/DIM {-1.0, 0.0, 1.0}
|
|
-- Countermeasures Dispensing System
|
|
[400] = "%1d", -- Chaff Mode Selector, OFF/SINGLE/PRGM/MULT {0.0, 0.1, 0.2, 0.3}
|
|
[404] = "%1d", -- Flare Mode Selector, OFF/SINGLE/PRGM {0.0, 0.1, 0.2}
|
|
[409] = "%1d", -- Flare Jettison Switch, OFF/UP
|
|
[403] = "%1d", -- Chaff Counter Reset Button - Push to reset
|
|
[407] = "%1d", -- Flare Counter Reset Button - Push to reset
|
|
[117] = "%1d", -- Flare-Chaff Button - Push to dispense
|
|
-- IFF
|
|
[199] = "%1d", -- IFF MODE 4 CODE Selector, ZERO(use MW to pull switch)/B/A/HOLD
|
|
[197] = "%1d", -- IFF MODE 4 CODE Selector, ZERO(use MW to pull switch)/B/A/HOLD
|
|
[200] = "%1d", -- IFF MASTER Control Selector, EMER(use MW to pull switch)/NORM/LOW/STBY/OFF
|
|
[198] = "%1d", -- IFF MASTER Control Selector, EMER(use MW to pull switch)/NORM/LOW/STBY/OFF
|
|
[201] = "%1d", -- IFF MODE 4 Monitor Control Switch, AUDIO/OUT/LIGHT {-1.0, 0.0, 1.0}
|
|
[202] = "%1d", -- IFF Mode Select/TEST Switch, M-1 /ON/OUT {-1.0, 0.0, 1.0}
|
|
[203] = "%1d", -- IFF Mode Select/TEST Switch, M-2 /ON/OUT {-1.0, 0.0, 1.0}
|
|
[204] = "%1d", -- IFF Mode Select/TEST Switch, M-3/A /ON/OUT {-1.0, 0.0, 1.0}
|
|
[205] = "%1d", -- IFF Mode Select/TEST Switch, M-C /ON/OUT {-1.0, 0.0, 1.0}
|
|
[206] = "%1d", -- IFF RAD TEST/MON Switch, RAD TEST/OUT/MON {-1.0, 0.0, 1.0}
|
|
[207] = "%1d", -- IFF Identification of Position (IP) Switch, IDENT/OUT/MIC {-1.0, 0.0, 1.0}
|
|
[208] = "%1d", -- IFF MODE 4 Control Switch, ON/OUT
|
|
[209] = "%.1f", -- IFF MODE 1 Code Selector Wheel 1 {0.0, 0.1, 0.2, 0.3, 0.4, 0.5, 0.6, 0.7}
|
|
[210] = "%.1f", -- IFF MODE 1 Code Selector Wheel 2 {0.0, 0.1, 0.2, 0.3, 0.4, 0.5, 0.6, 0.7}
|
|
[211] = "%.1f", -- IFF MODE 3/A Code Selector Wheel 1 {0.0, 0.1, 0.2, 0.3, 0.4, 0.5, 0.6, 0.7}
|
|
[212] = "%.1f", -- IFF MODE 3/A Code Selector Wheel 2 {0.0, 0.1, 0.2, 0.3, 0.4, 0.5, 0.6, 0.7}
|
|
[213] = "%.1f", -- IFF MODE 3/A Code Selector Wheel 3 {0.0, 0.1, 0.2, 0.3, 0.4, 0.5, 0.6, 0.7}
|
|
[214] = "%.1f", -- IFF MODE 3/A Code Selector Wheel 4 {0.0, 0.1, 0.2, 0.3, 0.4, 0.5, 0.6, 0.7}
|
|
[217] = "%1d", -- MODE 4 REPLY Light - Press to test(LMB)
|
|
[215] = "%1d", -- Radiation TEST and Monitor Light - Press to test(LMB)
|
|
-- Jettison System
|
|
[365] = "%1d", -- Emergency All Jettison Button - Push to jettison
|
|
[367] = "%1d", -- Select Jettison Switch, SELECT POSITION/OFF/ALL PYLONS {-1.0, 0.0, 1.0}
|
|
[366] = "%1d", -- Select Jettison Button - Push to jettison
|
|
-- Weapons Control
|
|
[346] = "%1d", -- Armament Position Selector Switch - LEFT WINGTIP, ON/OFF
|
|
[347] = "%1d", -- Armament Position Selector Switch - LEFT OUTBD, ON/OFF
|
|
[348] = "%1d", -- Armament Position Selector Switch - LEFT INBD, ON/OFF
|
|
[349] = "%1d", -- Armament Position Selector Switch - CENTERLINE, ON/OFF
|
|
[350] = "%1d", -- Armament Position Selector Switch - RIGHT INBD, ON/OFF
|
|
[351] = "%1d", -- Armament Position Selector Switch - RIGHT OUTBD, ON/OFF
|
|
[352] = "%1d", -- Armament Position Selector Switch - RIGHT WINGTIP, ON/OFF
|
|
[340] = "%1d", -- Interval Switch [sec], .06/.10/.14 {-1.0, 0.0, 1.0}
|
|
[341] = "%.1f", -- Bombs Arm Switch, SAFE/TAIL/NOSE & TAIL/NOSE {0.0, 0.1, 0.2, 0.3}
|
|
[342] = "%1d", -- Guns, Missile and Camera Switch Cover, OPEN/CLOSE {0.0, 1.0}
|
|
[343] = "%1d", -- Guns, Missile and Camera Switch, GUNS MSL & CAMR/OFF/CAMR ONLY {-1.0, 0.0, 1.0}
|
|
[344] = "%.1f", -- External Stores Selector, RIPL/BOMB/SAFE/RKT DISP {0.0,0.1,0.2,0.3}
|
|
[345] = "%.2f", -- Missile Volume Knob - Rotate to adjust volume (Axis) {0.0, 1.0} in 0.15 Steps
|
|
[128] = "%1d", -- Weapon Release Button - Press to release (Stick)
|
|
[137] = "%1d", -- Missile Uncage Switch - Press and hold to uncage missile seeker head
|
|
-- Trigger
|
|
[127] = "%1d", -- Trigger Button, FIRST DETENT(LMB) {0.0, 0.5}
|
|
[127] = "%1d", -- Trigger Button, SECOND DETENT(RMB) {0.0, 1.0}
|
|
-- AHRS
|
|
[166] = "%1d", -- Fast Erect Button - Push to erect
|
|
[220] = "%1d", -- Compass Switch, DIR GYRO/MAG/FAST SLAVE
|
|
[273] = "%.1f", -- Nav Mode Selector Switch, DF/TACAN {0.1,-0.1}
|
|
-- AN/APQ-159 Radar Control Panel
|
|
[65] = "%.2f", -- AN/APQ-159 Radar Scale Knob - Rotate to adjust scale brightness (Axis) {0.0, 1.0} in 0.15 Steps
|
|
[321] = "%.2f", -- AN/APQ-159 Radar Elevation Antenna Tilt Control Knob - Rotate to adjust antenna elevation (Axis) {-1.0, 1.0} in 0.15 Steps
|
|
[315] = "%.1f", -- AN/APQ-159 Radar Range Selector Switch [nm], 5/10/20/40 {0.0, 0.1, 0.2, 0.3}
|
|
[316] = "%.1f", -- AN/APQ-159 Radar Mode Selector Switch, OFF/STBY/OPER/TEST {0.0, 0.1, 0.2, 0.3}
|
|
[317] = "%1d", -- AN/APQ-159 Radar Acquisition Button
|
|
[70] = "%.2f", -- AN/APQ-159 Radar Bright Knob - Rotate to adjust brightness (Axis) {0.0, 1.0} in 0.15 Steps
|
|
[69] = "%.2f", -- AN/APQ-159 Radar Persistence Knob - Rotate to adjust persistence (Axis) {0.0, 1.0} in 0.15 Steps
|
|
[68] = "%.2f", -- AN/APQ-159 Radar Video Knob - Rotate to adjust video intensity (Axis) {0.0, 1.0} in 0.15 Steps
|
|
[67] = "%.2f", -- AN/APQ-159 Radar Cursor Knob - Rotate to adjust indication brightness (Axis) {0.0, 1.0} in 0.15 Steps
|
|
[66] = "%.2f", -- AN/APQ-159 Radar Pitch Knob - Rotate to adjust horizon bar (Axis) {-0.75, 0.75} in 0.1 Steps
|
|
-- AN/ASG-31 Sight
|
|
[40] = "%.1f", -- AN/ASG-31 Sight Mode Selector, OFF/MSL/A/A1 GUNS/A/A2 GUNS/MAN {0.0, 0.1, 0.2, 0.3, 0.4}
|
|
[42] = "%.2f", -- AN/ASG-31 Sight Reticle Depression Knob - Rotate to adjust manual mode depression angle (Axis) {0.0, 1.0} in 0.10 Steps
|
|
[41] = "%.2f", -- AN/ASG-31 Sight Reticle Intensity Knob - Rotate to adjust brightness (Axis) {0.0, 1.0} in 0.15 Steps
|
|
[136] = "%1d", -- AN/ASG-31 Sight Cage Switch - Press and hold to cage
|
|
-- RWR-IC
|
|
[551] = "%1d", -- RWR Indicator Control MODE Button
|
|
[554] = "%1d", -- RWR Indicator Control SEARCH Button
|
|
[556] = "%1d", -- RWR Indicator Control HANDOFF Button
|
|
[559] = "%1d", -- RWR Indicator Control LAUNCH Button
|
|
[561] = "%1d", -- RWR Indicator Control ALTITUDE Button
|
|
[564] = "%1d", -- RWR Indicator Control T Button
|
|
[567] = "%1d", -- RWR Indicator Control SYS TEST Button
|
|
[570] = "%1d", -- RWR Indicator Control UNKNOWN SHIP Button
|
|
[573] = "%1d", -- RWR Indicator Control ACT/PWR Button
|
|
[575] = "%1d", -- RWR Indicator Control POWER Button {1.0,0.0,-1.0}
|
|
[577] = "%.1f", -- RWR Indicator Control AUDIO Knob (Axis) {0.0, 1.0} in 0.1 Steps
|
|
[578] = "%.1f", -- RWR Indicator Control DIM Knob (Axis) {0.0, 1.0} in 0.1 Steps
|
|
-- AN/ALR-87 RWR
|
|
[140] = "%.2f", -- Adjust Display Brightness (Axis) {0.15, 0.85} in 0.1 Steps
|
|
-- Instruments --------------------------
|
|
-- Accelerometer
|
|
[904] = "%1d", -- Accelerometer - Push to set
|
|
-- AirSpeed/Mach Indicator
|
|
[180] = "%.2f", -- Index Setting Pointer Knob (Axis) {0.0, 1.0} in 0.15 Steps
|
|
-- Altimeter AAU-34/A
|
|
[62] = "%.2f", -- Zero Setting Knob (Axis) {0.0, 1.0} in 0.04 Steps
|
|
[60] = "%1d", -- Altimeter Mode Control Lever, ELECT(rical)/PNEU(matic) {-1.0, 0.0, 1.0}
|
|
-- Attitude Indicator ARU-20
|
|
[150] = "%.3f", -- AI Pitch Trim Knob (Axis) {0.0, 1.0} in 0.083 Steps
|
|
-- Horizontal Situation Indicator
|
|
[272] = "%.5f", -- HSI Course Set Knob (Axis) {0.0, 1.0} in 0.05818 Steps
|
|
[271] = "%.5f", -- HSI Heading Set Knob (Axis) {0.0, 1.0} in 0.05818 Steps
|
|
-- Standby Attitude Indicator
|
|
[441] = "%1d", -- Cage/Pitch Trim (Button)
|
|
[442] = "%.1f", -- Cage/Pitch Trim Knob (Axis) {0.0, 1.0} in 0.5 Steps
|
|
-- Clock
|
|
[511] = "%1d", -- ABU-11 Clock Winding and Setting knob (Button)
|
|
[510] = "%1d", -- ABU-11 Clock Winding and Setting Knob (Axis) {0.0, 1.0} in 0.6 Steps
|
|
[512] = "%1d", -- ABU-11 Clock Elapsed Time Knob
|
|
-- Electric system - CB Front Panel
|
|
[280] = "%1d", -- CB WPN PWR LEFT INBD, ON/OFF {1.0, 0.0}
|
|
[281] = "%1d", -- CB WPN PWR CENTER LINE, ON/OFF {1.0, 0.0}
|
|
[282] = "%1d", -- CB WPN PWR RIGHT INBD, ON/OFF {1.0, 0.0}
|
|
[283] = "%1d", -- CB WPN PWR LEFT OUTBD, ON/OFF {1.0, 0.0}
|
|
[284] = "%1d", -- CB WPN ARMING, ON/OFF {1.0, 0.0}
|
|
[285] = "%1d", -- CB WPN PWR RIGHT OUTBD, ON/OFF {1.0, 0.0}
|
|
[286] = "%1d", -- CB JETTISON CONTROL, ON/OFF {1.0, 0.0}
|
|
[287] = "%1d", -- CB WPN RELEASE, ON/OFF {1.0, 0.0}
|
|
[288] = "%1d", -- CB WPN MODE SEL & AIM-9-INTLK, ON/OFF {1.0, 0.0}
|
|
[289] = "%1d", -- CB EMERGENCY ALL JETTISON, ON/OFF {1.0, 0.0}
|
|
[290] = "%1d", -- CB LEFT AIM-9 CONT, ON/OFF {1.0, 0.0}
|
|
[291] = "%1d", -- CB RIGHT AIM-9 CONT, ON/OFF {1.0, 0.0}
|
|
-- Electric system - CB Left Panel
|
|
[450] = "%1d", -- CB LEFT AIM-9 POWER, ON/OFF {1.0, 0.0}
|
|
[451] = "%1d", -- CB LEFT GUN FIRING, ON/OFF {1.0, 0.0}
|
|
[453] = "%1d", -- CB 26 VOLT AC POWER, ON/OFF {1.0, 0.0}
|
|
[454] = "%1d", -- CB ATTD & HDG REF SYS A, ON/OFF {1.0, 0.0}
|
|
[455] = "%1d", -- CB CENTRAL AIR DATA COMPUTER, ON/OFF {1.0, 0.0}
|
|
[456] = "%1d", -- CB ENG IGN L ENG INST & HYD IND, ON/OFF {1.0, 0.0}
|
|
[457] = "%1d", -- CB RIGHT AIM-9 POWER, ON/OFF {1.0, 0.0}
|
|
[458] = "%1d", -- CB RIGHT GUN FIRING, ON/OFF {1.0, 0.0}
|
|
[460] = "%1d", -- CB TRIM CONTROL, ON/OFF {1.0, 0.0}
|
|
[461] = "%1d", -- CB ATTD & HDG REF SYS B, ON/OFF {1.0, 0.0}
|
|
[462] = "%1d", -- CB TOTAL TEMP PROBE HTR, ON/OFF {1.0, 0.0}
|
|
[463] = "%1d", -- CB L ENG AUX DOOR, ON/OFF {1.0, 0.0}
|
|
[464] = "%1d", -- CB CABIN COND, ON/OFF {1.0, 0.0}
|
|
[467] = "%1d", -- CB FUEL QTY PRIMARY, ON/OFF {1.0, 0.0}
|
|
[468] = "%1d", -- CB ATTD & HDG REF SYS C, ON/OFF {1.0, 0.0}
|
|
[469] = "%1d", -- CB TACAN, ON/OFF {1.0, 0.0}
|
|
[471] = "%1d", -- CB PYLON TANK FUEL CONT, ON/OFF {1.0, 0.0}
|
|
[472] = "%1d", -- CB L BOOST CL & TIP TANK FUEL CONT, ON/OFF {1.0, 0.0}
|
|
[473] = "%1d", -- CB IGNITION INVERTER POWER, ON/OFF {1.0, 0.0}
|
|
[474] = "%1d", -- CB L ENG START & AB CONT, ON/OFF {1.0, 0.0}
|
|
[475] = "%1d", -- CB R ENG START & AB CONT, ON/OFF {1.0, 0.0}
|
|
[476] = "%1d", -- CB UHF COMMAND RADIO, ON/OFF {1.0, 0.0}
|
|
[477] = "%1d", -- CB LEFT LE FLAP CONT, ON/OFF {1.0, 0.0}
|
|
[478] = "%1d", -- CB RIGHT LE FLAP CONT, ON/OFF {1.0, 0.0}
|
|
[479] = "%1d", -- CB LEFT TE FLAP CONT, ON/OFF {1.0, 0.0}
|
|
[480] = "%1d", -- CB RIGHT TE FLAP CONT & IND, ON/OFF {1.0, 0.0}
|
|
-- Electric system - CB Right Panel
|
|
[231] = "%1d", -- CB PITOT HEATER, ON/OFF {1.0, 0.0}
|
|
[233] = "%1d", -- CB R OIL & HYD IND FUEL QTY SEL, ON/OFF {1.0, 0.0}
|
|
[234] = "%1d", -- CB CABIN AIR VALVES, ON/OFF {1.0, 0.0}
|
|
[238] = "%1d", -- CB INST LIGHTS, ON/OFF {1.0, 0.0}
|
|
[239] = "%1d", -- CB R ENG AUX DOORS, ON/OFF {1.0, 0.0}
|
|
[244] = "%1d", -- CB CAUTION & WARN LIGHTS-DIM, ON/OFF {1.0, 0.0}
|
|
[245] = "%1d", -- CB OXY QTY & CANOPY SEAL, ON/OFF {1.0, 0.0}
|
|
[246] = "%1d", -- CB LDG-TAXI LAMP PWR, ON/OFF {1.0, 0.0}
|
|
--UHF Radio AN/ARC-164
|
|
[300] = "%.2f", -- AN/ARC-164, UHF Radio Preset Channel Selector Knob {0.0, 0.1, 0.2, 0.3, 0.4, ... 0.15, 0.16, 0.17, 0.18, 0.19}
|
|
--[327] = "%.1f", -- AN/ARC-164, UHF Radio 100 MHz Frequency Selector Knob {0.0, 0.1, 0.2, 0.3}
|
|
--[328] = "%.1f", -- AN/ARC-164, UHF Radio 10 MHz Frequency Selector Knob {0.0, 0.1, 0.2, 0.3, 0.4, 0.5, 0.6, 0.7, 0.8, 0.9}
|
|
--[329] = "%.1f", -- AN/ARC-164, UHF Radio 1 MHz Frequency Selector Knob {0.0, 0.1, 0.2, 0.3, 0.4, 0.5, 0.6, 0.7, 0.8, 0.9}
|
|
--[330] = "%.1f", -- AN/ARC-164, UHF Radio 0.1 MHz Frequency Selector Knob {0.0, 0.1, 0.2, 0.3, 0.4, 0.5, 0.6, 0.7, 0.8, 0.9}
|
|
--[331] = "%.2f", -- AN/ARC-164, UHF Radio 0.025 MHz Frequency Selector Knob {0.0, 0.25, 0.5, 0.75}
|
|
[307] = "%.1f", -- AN/ARC-164, UHF Radio Frequency Mode Selector Switch, MANUAL/PRESET/GUARD {0.0, 0.1, 0.2}
|
|
[311] = "%.1f", -- AN/ARC-164, UHF Radio Function Selector Switch, OFF/MAIN/BOTH/ADF {0.0, 0.1, 0.2}
|
|
[310] = "%1d", -- AN/ARC-164, UHF Radio Tone Button
|
|
[308] = "%1d", -- AN/ARC-164, UHF Radio Squelch Switch, ON/OFF
|
|
[309] = "%.1f", -- AN/ARC-164, UHF Radio Volume Knob (Axis) {0.0, 1.0} in 0.1 Steps
|
|
[336] = "%.1f", -- AN/ARC-164, UHF Radio Antenna Selector Switch, UPPER/AUTO/LOWER {0.0, 0.5, 1.0}
|
|
[135] = "%1d", -- AN/ARC-164, UHF Radio Microphone Button
|
|
--TACAN
|
|
[256] = "%.1f", -- TACAN Channel Selector (Tens) - Rotate mouse wheel to select (Axis) {0.0, 1.0} in 0.1 Steps
|
|
[257] = "%.1f", -- TACAN Channel Selector (Ones) / X/Y Mode - Right mouse click to select X/Y. Rotate mouse wheel to make channel selection (Axis) {0.0, 1.0} in 0.1 Steps
|
|
[258] = "%.2f", -- TACAN Channel Selector (Ones) / X/Y Mode - Right mouse click to select X/Y. Rotate mouse wheel to make channel selection (Button) {0.87, 0.93}
|
|
[259] = "%1d", -- TACAN Signal on HSI Test Button
|
|
[261] = "%1d", -- TACAN Signal Volume Knob (Axis) {0.0, 1.0} in 0.1 Steps
|
|
[262] = "%.1f", -- TACAN Mode Selector Switch {0.0, 0.1, 0.2, 0.3, 0.4}
|
|
-- Sight Camera
|
|
[82] = "%.1f", -- Sight Camera Lens f-Stop Selector, 2.8(dull)..22(bright) (Axis) {0.0, 0.3} in 0.1 Steps
|
|
[80] = "%1d", -- Sight Camera FPS Select Switch, 24/48
|
|
[84] = "%.1f", -- Sight Camera Overrun Selector, 0/3/10/20 {0.0, 0.1, 0.2, 0.3}
|
|
[79] = "%1d" -- Sight Camera Run (Test) Switch, ON/OFF
|
|
}
|
|
|
|
-----------------------------
|
|
-- HIGH IMPORTANCE EXPORTS --
|
|
-- done every export event --
|
|
-----------------------------
|
|
|
|
-- Pointed to by ProcessIkarusDCSHighImportance
|
|
function ExportScript.ProcessIkarusDCSConfigHighImportance(mainPanelDevice)
|
|
|
|
--[443] = "%.4f", -- SAI_knob_arrow {-1.0, 1.0} {0.0, 1.0}
|
|
ExportScript.Tools.SendData(443, ExportScript.Tools.negate(mainPanelDevice:get_argument_value(443)))
|
|
end
|
|
|
|
function ExportScript.ProcessDACConfigHighImportance(mainPanelDevice)
|
|
end
|
|
|
|
-----------------------------------------------------
|
|
-- LOW IMPORTANCE EXPORTS --
|
|
-- done every gExportLowTickInterval export events --
|
|
-----------------------------------------------------
|
|
|
|
-- Pointed to by ExportScript.ProcessIkarusDCSConfigLowImportance
|
|
function ExportScript.ProcessIkarusDCSConfigLowImportance(mainPanelDevice)
|
|
ExportScript.FlowBlinker(mainPanelDevice)
|
|
ExportScript.UhfRadio(mainPanelDevice) -- AN/ARC-164 UHF
|
|
ExportScript.UhfRadioPresets(mainPanelDevice) -- AN/ARC-164 UHF Preset List
|
|
ExportScript.TacanRadio(mainPanelDevice) -- TACAN Channel
|
|
ExportScript.FuelQuantityIndicator(mainPanelDevice) -- Fuel Quantity Indicator (Dual)
|
|
ExportScript.UhfRadioKnobs(mainPanelDevice) -- AN/ARC-164 UHF
|
|
ExportScript.RWRControlPanel(mainPanelDevice)
|
|
|
|
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)
|
|
|
|
--AN/ARC-164 UHF
|
|
---------------------------------------------------
|
|
local lUHFRadio = GetDevice(23)
|
|
if lUHFRadio:is_on() then
|
|
--ExportScript.Tools.SendDataDAC(2000, string.format("%.3f", lUHFRadio:get_frequency()/1000000))
|
|
ExportScript.Tools.SendDataDAC(2000, ExportScript.Tools.RoundFreqeuncy(lUHFRadio:get_frequency()/1000000))
|
|
|
|
local lUHFRadio_PRESET = {[0]="01",[0.05]="02",[0.1]="03",[0.15]="04",[0.2]="05",[0.25]="06",[0.3]="07",[0.35]="08",[0.4]="09",[0.45]="10",[0.5]="11",[0.55]="12",[0.6]="13",[0.65]="14",[0.7]="15",[0.75]="16",[0.80]="17",[0.85]="18",[0.90]="19",[0.95]="20"}
|
|
ExportScript.Tools.SendDataDAC(2001, lUHFRadio_PRESET[ExportScript.Tools.round(mainPanelDevice:get_argument_value(300), 2)])
|
|
end
|
|
|
|
-- TACAN Channel
|
|
-------------------------------------------------
|
|
ExportScript.Tools.SendDataDAC(2002, (string.format("%0.2f", (mainPanelDevice:get_argument_value(263))) == "1.00" and "0" or "1")..ExportScript.Tools.round(mainPanelDevice:get_argument_value(264) * 10, 0)..ExportScript.Tools.round(mainPanelDevice:get_argument_value(265) * 10, 0)..(string.format("%1d", (mainPanelDevice:get_argument_value(266))) == "0" and "X" or "Y"))
|
|
|
|
-- Fuel Quantity Indicator (Dual)
|
|
local lLeftFuel = ExportScript.Tools.round(mainPanelDevice:get_argument_value(22) * 2500, 0)
|
|
local lRightFuel = ExportScript.Tools.round(mainPanelDevice:get_argument_value(23) * 2500, 0)
|
|
|
|
ExportScript.Tools.SendDataDAC(2003, lLeftFuel)
|
|
ExportScript.Tools.SendDataDAC(2004, lRightFuel)
|
|
ExportScript.Tools.SendDataDAC(2005, lLeftFuel + lRightFuel)
|
|
|
|
-- generic Radio display and frequency rotarys
|
|
-------------------------------------------------
|
|
-- genericRadioConf
|
|
ExportScript.genericRadioConf = {}
|
|
ExportScript.genericRadioConf['maxRadios'] = 1 -- numbers of aviables/supported radios
|
|
ExportScript.genericRadioConf[1] = {} -- first radio
|
|
ExportScript.genericRadioConf[1]['Name'] = "AN/ARC-164 UHF" -- 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'] = 220.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'] = 3011 -- volume button id from cklickable.lua
|
|
ExportScript.genericRadioConf[1]['Preset'] = {} -- preset knob active
|
|
ExportScript.genericRadioConf[1]['Preset']['ArgumentID'] = 300 -- 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.1]="02",[0.2]="03",[0.3]="04",[0.4]="05",[0.5]="06",[0.6]="07",[0.7]="08",[0.8]="09",[0.9]="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"}
|
|
ExportScript.genericRadioConf[1]['Preset']['Step'] = 0.1 -- minimal step for preset change
|
|
ExportScript.genericRadioConf[1]['Squelch'] = {} -- squelch switch active
|
|
ExportScript.genericRadioConf[1]['Squelch']['ArgumentID'] = 308 -- ManualPreset argument id from cklickable.lua
|
|
ExportScript.genericRadioConf[1]['Squelch']['ButtonID'] = 3010 -- squelch button id from cklickable.lua
|
|
ExportScript.genericRadioConf[1]['Squelch']['ValueOn'] = 0.0 -- squelch on value from cklickable.lua
|
|
ExportScript.genericRadioConf[1]['Squelch']['ValueOff'] = 1.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'] = 307 -- 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.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.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
|
|
|
|
-- TODO: Does not work because of "DCS."
|
|
-- get the freqs of the airports
|
|
local frequencyList = {}
|
|
local finalList =
|
|
{
|
|
["Rio Gallegos"] = {
|
|
[1] = 38.5,
|
|
[2] = 119.1,
|
|
[3] = 250.1,
|
|
[4] = 3.8,
|
|
},
|
|
["Punta Arenas"] = {
|
|
[1] = 38.7,
|
|
[2] = 118.7,
|
|
[3] = 250.3,
|
|
[4] = 3.9,
|
|
},
|
|
["Ushuaia"] = {
|
|
[1] = 38.6,
|
|
[2] = 118.1,
|
|
[3] = 250.2,
|
|
[4] = 3.85,
|
|
},
|
|
["Rio Grande"] = {
|
|
[1] = 38.55,
|
|
[2] = 118.3,
|
|
[3] = 250.15,
|
|
[4] = 3.825,
|
|
},
|
|
["Mount Pleasant"] = {
|
|
[1] = 38.45,
|
|
[2] = 133.35,
|
|
[3] = 250.05,
|
|
[4] = 3.775,
|
|
},
|
|
["Port Stanley"] = {
|
|
[1] = 38.4,
|
|
[2] = 118.1,
|
|
[3] = 250,
|
|
[4] = 3.75,
|
|
},
|
|
["Ushuaia Helo Port"] = {
|
|
[1] = 38.65,
|
|
[2] = 118.5,
|
|
[3] = 250.25,
|
|
[4] = 3.875,
|
|
},
|
|
}
|
|
--local airdromeInfo = Terrain.GetTerrainConfig("Airdromes")
|
|
--[[ for _k, _val in pairs(airdromeInfo) do -- do this for the number of keys in airdromeInfo
|
|
if _val.radio then -- if radio exists
|
|
for k, radioId in pairs(_val.radio) do --for each radio
|
|
local frequencys = DCS.getATCradiosData(radioId)
|
|
if frequencys then -- if a freqs exists
|
|
frequencyList = {} -- clear the list first
|
|
for kk, vv in pairs(frequencys) do -- for each freq
|
|
table.insert(frequencyList, vv / 1000000) -- put in table
|
|
end
|
|
finalList[_val.display_name] = frequencyList
|
|
end
|
|
end
|
|
end
|
|
end
|
|
]]
|
|
local firstFreq = finalList[airportInfo[2][1]][1]
|
|
ExportScript.Tools.SendData(9999, firstFreq)
|
|
|
|
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
|
|
|
|
function ExportScript.UhfRadioPresets(mainPanelDevice)
|
|
|
|
local UhfPresetReadout = ExportScript.Tools.getListIndicatorValue(4) -- 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.UhfRadio(mainPanelDevice)
|
|
local lUHFRadio = GetDevice(23)
|
|
if lUHFRadio:is_on() then
|
|
--ExportScript.Tools.SendData(2000, string.format("%.3f", lUHFRadio:get_frequency()/1000000))
|
|
ExportScript.Tools.SendData(2000, ExportScript.Tools.RoundFreqeuncy(lUHFRadio:get_frequency()/1000000))
|
|
|
|
local lUHFRadio_PRESET = {[0]="01",[0.05]="02",[0.1]="03",[0.15]="04",[0.2]="05",
|
|
[0.25]="06",[0.3]="07",[0.35]="08",[0.4]="09",[0.45]="10",
|
|
[0.5]="11",[0.55]="12",[0.6]="13",[0.65]="14",[0.7]="15",
|
|
[0.75]="16",[0.80]="17",[0.85]="18",[0.90]="19",[0.95]="20"}
|
|
ExportScript.Tools.SendData(2001, lUHFRadio_PRESET[ExportScript.Tools.round(mainPanelDevice:get_argument_value(300), 2)])
|
|
end
|
|
end
|
|
|
|
|
|
function ExportScript.TacanRadio(mainPanelDevice) -- TACAN Channel
|
|
ExportScript.Tools.SendData(2002, (string.format("%0.2f", (mainPanelDevice:get_argument_value(263))) == "1.00" and "0" or "1")..ExportScript.Tools.round(mainPanelDevice:get_argument_value(264) * 10, 0)..ExportScript.Tools.round(mainPanelDevice:get_argument_value(265) * 10, 0)..(string.format("%1d", (mainPanelDevice:get_argument_value(266))) == "0" and "X" or "Y"))
|
|
--[266] = "%.4f", -- XYwheel
|
|
ExportScript.Tools.SendData(266, mainPanelDevice:get_argument_value(266) == 0 and 0 or 1)
|
|
end
|
|
|
|
function ExportScript.FuelQuantityIndicator(mainPanelDevice) -- Fuel Quantity Indicator (Dual)
|
|
|
|
local lLeftFuel = ExportScript.Tools.round(mainPanelDevice:get_argument_value(22) * 2500, 0)
|
|
local lRightFuel = ExportScript.Tools.round(mainPanelDevice:get_argument_value(23) * 2500, 0)
|
|
|
|
ExportScript.Tools.SendData(2006, lLeftFuel)
|
|
ExportScript.Tools.SendData(2007, lRightFuel)
|
|
ExportScript.Tools.SendData(2008, lLeftFuel + lRightFuel)
|
|
end
|
|
|
|
function ExportScript.UhfRadioKnobs(mainPanelDevice) --AN/ARC-164 UHF
|
|
|
|
local lTmp327 = tonumber(string.format("%0.1f", mainPanelDevice:get_argument_value(327)))
|
|
local lTmp327_2 = lTmp327
|
|
if lTmp327 == 0.0 then lTmp327_2 = 0.0
|
|
elseif lTmp327 == 0.1 then lTmp327_2 = 0.3
|
|
elseif lTmp327 == 0.2 then lTmp327_2 = 0.2
|
|
elseif lTmp327 == 0.3 then lTmp327_2 = 0.1
|
|
else lTmp327_2 = lTmp327 end
|
|
|
|
local lTmp328_2 = 1 - mainPanelDevice:get_argument_value(328)
|
|
local lTmp329_2 = 1 - mainPanelDevice:get_argument_value(329)
|
|
local lTmp330_2 = 1 - mainPanelDevice:get_argument_value(330)
|
|
|
|
local lTmp331 = mainPanelDevice:get_argument_value(331)
|
|
local lTmp331_2 = 0
|
|
if lTmp331 == 0.0 then lTmp331_2 = 0.0
|
|
elseif lTmp331 == 0.25 then lTmp331_2 = 0.75
|
|
elseif lTmp331 == 0.5 then lTmp331_2 = 0.5
|
|
elseif lTmp331 == 0.75 then lTmp331_2 = 0.25
|
|
else lTmp331_2 = lTmp331 end
|
|
|
|
ExportScript.Tools.SendData(327, lTmp327_2)
|
|
ExportScript.Tools.SendData(328, lTmp328_2)
|
|
ExportScript.Tools.SendData(329, lTmp329_2)
|
|
ExportScript.Tools.SendData(330, lTmp330_2)
|
|
ExportScript.Tools.SendData(331, lTmp331_2)
|
|
end
|
|
|
|
function ExportScript.FlowBlinker(mainPanelDevice)
|
|
-- provides the logic for an animated indicator
|
|
-- Use a Momentary Button with Lamp
|
|
-- Image State change: ID is greater that (>) the below value - 0
|
|
|
|
-- The first image is a still image (frame 0) of the rest position
|
|
-- The second image is an animation gif
|
|
-- The logic below will allow the longest reasonable time for the gif to play
|
|
-- The time for your gif will be based on the time the ingame animation goes from 0 to 1 and back to 0
|
|
-- If the gif is too long the still will appear before the end of the gif, possibly making an unwanted result
|
|
-- You may want to set your gif to no repeat when making it
|
|
local blink = mainPanelDevice:get_argument_value(600) -- FlowBlinker
|
|
if blink > 0.0010 then
|
|
blink = 1
|
|
else
|
|
blink = 0
|
|
end
|
|
ExportScript.Tools.SendData(9000, blink)
|
|
|
|
end
|
|
|
|
function ExportScript.RWRControlPanel(mainPanelDevice)
|
|
-- 4003 & 4008 are reserved for logical alignment. LAUNCH & ACT/PWR lights INOP.
|
|
ExportScript.Tools.SendData(4000, getRWRButtonLights(mainPanelDevice, 552, 553))
|
|
ExportScript.Tools.SendData(4001, getRWRButtonLights(mainPanelDevice, 555))
|
|
ExportScript.Tools.SendData(4002, getRWRButtonLights(mainPanelDevice, 557, 558))
|
|
ExportScript.Tools.SendData(4004, getRWRButtonLights(mainPanelDevice, 562, 563))
|
|
|
|
ExportScript.Tools.SendData(4005, getRWRButtonLights(mainPanelDevice, 565, 566))
|
|
ExportScript.Tools.SendData(4006, getRWRButtonLights(mainPanelDevice, 568, 569))
|
|
ExportScript.Tools.SendData(4007, getRWRButtonLights(mainPanelDevice, 571, 572))
|
|
local pwr_on = mainPanelDevice:get_argument_value(576) > 0.0
|
|
ExportScript.Tools.SendData(4009, pwr_on and "SYSTEM\n\n\nPOWER" or "")
|
|
end
|
|
|
|
function getRWRButtonLights(mainPanelDevice, first_id, second_id)
|
|
-- Associate argument IDs with their text representation, which
|
|
-- will be returned as a string for StreamDeck
|
|
local labels_map = {
|
|
[552] = "PRIORITY",
|
|
[553] = "OPEN",
|
|
[555] = "█ S █",
|
|
[557] = "█ ◆︎ █",
|
|
[558] = "█ H █",
|
|
[562] = "LOW",
|
|
[563] = "ALT",
|
|
[565] = "TGT SEP",
|
|
[566] = "TGT SEP",
|
|
[568] = "ON",
|
|
[569] = "SYS TEST",
|
|
[571] = "█ U █",
|
|
[572] = "UNKNOWN",
|
|
}
|
|
local first_on = mainPanelDevice:get_argument_value(first_id) > 0.0
|
|
local second_on = mainPanelDevice:get_argument_value(second_id) > 0.0
|
|
local first_label = first_on and labels_map[first_id] or " "
|
|
local second_label = second_on and labels_map[second_id] or " "
|
|
|
|
return first_label.."\n\n\n"..second_label
|
|
end
|
|
|
|
----------------------
|
|
-- Helper Functions --
|
|
----------------------
|
|
|
|
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
|