2022-09-17 12:44:34 +09:00

2344 lines
85 KiB
Lua

-- Mirage-F1CE
-- Symbols
-- https://www.i2symbol.com/symbols/
-- https://emojipedia.org/check-mark/
-- https://unicode-table.com/en/sets/arrow-symbols/
ExportScript.FoundDCSModule = true
ExportScript.Version.Mirage_F1CE = "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
]]
}
ExportScript.ConfigArguments =
{
--[[
arguments for export in low tick interval
based on "clickabledata.lua"
]]
[0] = "%.4f", -- mirrors_draw
[1] = "%.4f", -- Canopy open/close
[2] = "%.4f", -- Mirrors
[3] = "%.4f", -- Canopy hinged handle
-- Unused <4-9>
[10] = "%.4f", -- Seat height position
[11] = "%.1f", -- Seat height adjustment control
[12] = "%.4f", -- Seat separation handle
[13] = "%.4f", -- Face blind firing handle
[14] = "%.4f", -- Alternative firing handle
[15] = "%.4f", -- Seat belt visibility
-- Unused <16-21>
[22] = "%.4f", -- Stick pitch
[23] = "%.4f", -- Stick roll
[24] = "%.4f", -- Trim roll
[25] = "%.4f", -- Trim pitch
[27] = "%0.1f", -- Stick Safety
[28] = "%0.1f", -- Stick weapon release
[29] = "%0.1f", -- Stick thumb button
[30] = "%0.1f", -- Stick side button
[31] = "%0.1f", -- Stick autopilot disconnect trigger
[34] = "%.4f", -- Stick visibility
-- Unused <35-51>
[52] = "%.4f", -- Rudder
[53] = "%.4f", -- Rudder brakes
[54] = "%.1f", -- Brake chute control
[55] = "%0.1f", -- Canopy lock control
[56] = "%0.1f", -- Canopy embrittle control
-- Unused <57-61>
[62] = "%.4f", -- Chronometer seconds hand
[63] = "%.4f", -- Chronometer minutes hand
[64] = "%.4f", -- Chronometer hours hand
[65] = "%.4f", -- Chronometer minutes timer
[66] = "%.4f", -- Map light rheostat
[67] = "%.4f", -- Chronometer starting control and clock winding/setting knob
[68] = "%.4f", -- Miscellaneous instrument integral lighting rheostat
-- Unused <69-75>
[76] = "%.4f",
[77] = "%.4f",
[78] = "%.4f",
[79] = "%.4f",
-- Unused <80-83>
[84] = "%0.1f", -- Emergency/Parking brake handle
[85] = "%1d", -- U/C safety lever
[86] = "%1d", -- U/C control lever
[87] = "%0.1f", -- Anti-retraction override button
[88] = "%0.1f", -- Hydraulic pressure selector switch
[89] = "%0.1f", -- Servo reset button
[90] = "%0.1f", -- Yaw/Anti-slip switch
[91] = "%0.1f", -- Pitch switch
[92] = "%0.1f", -- Standby receptacle light
[94] = "%0.1f", -- ARTHUR selector switch guard
[95] = "%0.1f", -- Stick uncouple switch guard
[96] = "%0.1f", -- ARTHUR selector switch
[97] = "%0.1f", -- Stick uncouple switch
[98] = "%0.1f", -- Incidence test switch
-- Unused <100-106>
[107] = "%0.1f", -- Emergency U/C handle
[108] = "%0.1f", -- Cannons too hot light
[111] = "%0.1f", -- Navigation light control
[112] = "%0.1f", -- Formation light control
[113] = "%0.1f", -- Battery switch
[114] = "%0.1f", -- Alternator 1 switch
[115] = "%0.1f", -- Alternator 2 switch
[116] = "%0.1f", -- TR reset button
[117] = "%0.1f", -- Inverter selector switch
[118] = "%0.1f", -- Failure warning panel T test button
[119] = "%0.1f", -- Failure warning panel O2 test button
[121] = "%0.1f", -- Warning Panel Light
[122] = "%0.1f", -- Warning Panel Light
[123] = "%0.1f", -- Warning Panel Light
[124] = "%0.1f", -- Warning Panel Light
[125] = "%0.1f", -- Warning Panel Light
[126] = "%0.1f", -- Warning Panel Light
[127] = "%0.1f", -- Warning Panel Light
[128] = "%0.1f", -- Warning Panel Light
[129] = "%0.1f", -- Warning Panel Light
[130] = "%0.1f", -- Warning Panel Light
[131] = "%0.1f", -- Warning Panel Light
[132] = "%0.1f", -- Warning Panel Light
[133] = "%0.1f", -- Warning Panel Light
[134] = "%0.1f", -- Warning Panel Light
[135] = "%0.1f", -- Warning Panel Light
[136] = "%0.1f", -- Warning Panel Light
[137] = "%0.1f", -- Warning Panel Light
[138] = "%0.1f", -- Warning Panel Light
[139] = "%0.1f", -- Warning Panel Light
[140] = "%0.1f", -- Warning Panel Light
[141] = "%0.1f", -- Warning Panel Light
[142] = "%0.1f", -- Warning Panel Light
[143] = "%0.1f", -- Warning Panel Light
[144] = "%0.1f", -- Warning Panel Light
[145] = "%0.1f", -- Warning Panel Light
[146] = "%0.1f", -- Warning Panel Light
[147] = "%0.1f", -- Warning Panel Light
[148] = "%0.1f", -- Warning Panel Light
[149] = "%0.1f", -- Warning Panel Light
[150] = "%0.1f", -- Warning Panel Light
[151] = "%0.1f", -- Warning Panel Light
[152] = "%0.1f", -- Warning Panel Light
-- Unused <153-193>
[194] = "%0.1f", -- Jammer detection light
[196] = "%0.1f", -- Jammer detection light brightness animation
[197] = "%0.1f", -- (C + M or SW) R light
[199] = "%0.1f", -- (C + M or SW) R light brightness animation
[200] = "%0.1f", -- Incidence indicator flag
[201] = "%0.1f", -- Incidence indicator lighting rheostat
[203] = "%0.2f", -- Incidence indicator aoa
-- Unused <204-207>
[208] = "%0.1f", -- Chaff/flares selector switch
[209] = "%0.2f", -- Program selector switch
[210] = "%0.1f", -- Chaff 10s rotary
[211] = "%0.1f", -- Chaff 1s rotary
[212] = "%0.1f", -- Chaff counter reset button
[213] = "%0.1f", -- Flares 10s rotary
[214] = "%0.1f", -- Flares 1s rotary
[215] = "%0.1f", -- Flares counter reset button
[216] = "%0.1f", -- Emergency jettisoning switch
[217] = "%.4f", -- Accelerometer max
[218] = "%.4f", -- Accelerometer current
[219] = "%.4f", -- Accelerometer min
-- Unused <220-227>
[228] = "%.4f",
-- Unused <229-230>
[231] = "%.4f", -- Clock winding/setting lever
[233] = "%.4f", -- Canopy seal valve control lever
[234] = "%.4f", -- Throttle
[235] = "%.4f", -- Throttle Thumb rocker
[239] = "%0.1f", -- Throttle cut/idle switch
[240] = "%.4f", -- In-flight relight control
-- Unused <241-247>
[248] = "%0.1f", -- Slat/Flap lever
-- Unused <249>
[257] = "%0.1f", -- Radar control stick scan selection
[258] = "%0.2f", -- Radar control stick scale selection
[259] = "%0.1f", -- Radar control stick elevation/altitude difference button
-- Unused <260-269>
[271] = "%0.1f", -- UHF test light
[272] = "%0.1f", -- Test selector switch
[273] = "%0.1f", -- SIL switch
[274] = "%0.1f", -- V/UHF Frequency select thumbwheel - Hundreds
[275] = "%0.1f", -- V/UHF Frequency select thumbwheel - Tens
[276] = "%0.1f", -- V/UHF Frequency select thumbwheel - Units
[277] = "%0.1f", -- V/UHF Frequency select thumbwheel - Tenths
[278] = "%.2f", -- V/UHF Frequency select thumbwheel - Thousandths
-- Unused <279>
[280] = "%.2f", -- Function selector
[281] = "%0.1f", -- 25W - 5W switch
[282] = "%0.1f", -- Frequency selector switch
[283] = "%0.2f", -- V/UHF Channel Selector
-- Unused <284-285>
-- Unused <288-305>
[306] = "%.4f", -- MISS potentiometer
[307] = "%.4f", -- TAC potentiometer
[308] = "%.4f", -- VOR potentiometer
[309] = "%0.1f", -- AMPLI 2-1 selector switch
[310] = "%.4f", -- U + V pushbutton
[311] = "%.4f", -- U + V pushbutton rotation
[312] = "%0.1f", -- U + V pushbutton light
[313] = "%.4f", -- U pushbutton
[314] = "%.4f", -- U pushbutton rotation
[315] = "%0.1f", -- U pushbutton light
[316] = "%.4f", -- RAP + CME pushbutton
[317] = "%.4f", -- RAP + CME pushbutton rotation
[318] = "%0.1f", -- RAP + CME pushbutton light
[319] = "%.4f", -- MKR + TP pushbutton
[320] = "%.4f", -- MKR + TP pushbutton rotation
[321] = "%0.1f", -- MKR + TP pushbutton light
-- Unused <322-339>
[340] = "%0.1f", -- 5W/25W selector switch
[341] = "%0.1f", -- Squelch switch
[342] = "%0.1f", -- Test selector switch
[343] = "%.4f", -- CDE button (not used)
[344] = "%.2f", -- UHF Function selector
[345] = "%.1f", -- UHF Test light
[348] = "%.2f", -- UHF Channel selector
[349] = "%.4f", -- IFF numbers
-- Unused <350>
[351] = "%.4f",
[352] = "%.4f",
[353] = "%.4f", -- Landing light control
[354] = "%.4f", -- Emergency regulation light
[356] = "%0.1f",-- Emergency regulation light brightness animation
[357] = "%0.1f", -- Emergency regulation switch guard
[358] = "%0.1f", -- Emergency regulation switch
[359] = "%.4f", -- Emergency regulation control lever
[360] = "%.4f", -- Telemeter/zone scanning switch
[361] = "%.4f", -- (C + M or SW) R deselection switch
-- Unused <362-367>
[368] = "%0.1f", -- Flight control test restart button
[369] = "%0.1f", -- Flight control test switch guard
[370] = "%0.1f", -- Flight control test switch
[374] = "%0.1f", -- Start button cover
[375] = "%0.1f", -- Start button
[376] = "%0.1f", -- Ignition/Ventilation selector switch
[377] = "%0.1f", -- Starting pump switch
[378] = "%0.1f", -- R/H LP pump switch
[379] = "%0.1f", -- L/H LP pump switch
[380] = "%0.1f", -- LP main cock switch guard
[381] = "%0.1f", -- LP main cock switch
[382] = "%0.1f", -- Day/Night selector switch
[383] = "%.4f", -- Light and panel lighting rheostat
[384] = "%.4f", -- Ultraviolet lighting rheostat
[385] = "%.4f", -- Dual instrument panel lighting rheostat (Floodlights)
[386] = "%.4f", -- Dual instrument panel lighting rheostat (Integral)
[387] = "%.4f", -- Dual console and pedestal lighting rheostat (Floodlights)
[388] = "%.4f", -- Dual console and pedestal lighting rheostat (Integral)
-- Unused <389-395>
[396] = "%0.1f", -- JPT emergency regulation switch
[397] = "%0.1f", -- A/B main cock switch guard
[398] = "%0.1f", -- A/B main cock switch
[399] = "%0.1f", -- High-lift device selector switch
-- Unused <400-401>
[402] = "%0.1f", -- Anti-skid (SPAD) switch guard
[403] = "%0.1f", -- Anti-skid (SPAD) switch
-- Unused <404>
[405] = "%.4f", -- Alternative PTT
[406] = "%0.1f", -- Rudder trim control switch
-- Unused <407>
[408] = "%0.1f", -- ANTENNA-GYRO switch
[410] = "%0.1f", -- Ram air switch guard
-- Unused <409>
[411] = "%0.1f", -- Ram air switch
[412] = "%0.1f", -- Demist switch
-- Unused <413-431>
[432] = "%0.1f", -- Armament master switch guard
[433] = "%0.1f", -- Armament master switch
-- Unused <434-469>
[470] = "%0.1f", -- Miscellaneous instrument lighting switch
-- Unused <471>
[474] = "%0.1f", -- Standby horizon switch
[475] = "%0.1f", -- Electro-pump switch
[476] = "%0.1f", -- Warning horn switch
[477] = "%0.1f", -- Probe heater switch
[478] = "%0.1f", -- Radar detector switch
[479] = "%.4f", -- Search light control
[480] = "%0.1f", -- TACAN test button
[481] = "%0.1f", -- TACAN X/Y mode display
[482] = "%0.1f", -- TACAN 100s display
[483] = "%0.1f", -- TACAN 10s mode display
[484] = "%0.1f", -- TACAN 1s mode display
[485] = "%.f", -- TACAN X/Y mode selector
[486] = "%0.4f", -- TACAN X/Y rotation animation
[487] = "%0.2f", -- TACAN mode selector
[488] = "%0.4f", -- TACAN 10s rotation animation
-- Unused <489-497>
[498] = "%0.1f", -- VOR-ILS control unit Xxx.xx
[499] = "%0.1f", -- VOR-ILS control unit xXx.xx
[500] = "%0.1f", -- VOR-ILS control unit xxX.xx
[501] = "%0.1f", -- VOR-ILS control unit xxx.Xx
[502] = "%0.1f", -- VOR-ILS control unit xxx.xX
[503] = "%0.1f", -- VOR-ILS control unit ON/OFF selector
[504] = "%0.4f", -- VOR-ILS control unit ON/OFF selector rotation animation
[505] = "%0.1f", -- VOR-ILS control unit test selector
[506] = "%0.4f", -- VOR-ILS control unit test selector rotation animation
-- Unused <507-515>
[516] = "%.4f", -- Oxygen needle
[517] = "%0.1f", -- Oxygen test button (T button)
[518] = "%.4f", -- Pilot oxygen indicator
[519] = "%0.1f", -- Pilot oxygen test button
-- Unused <220-523>
[524] = "%0.1f", -- Emergency cold switch
[525] = "%0.1f", -- Master valve control switch
[527] = "%.4f", -- Temperature control needle
[527] = "%.4f", -- Temperature control rheostat
[528] = "%.4f", -- Hot/Cold selector needle
[529] = "%0.1f", -- Auto/Manual selector switch
[530] = "%0.1f", -- Hot/Cold selector switch
[537] = "%0.1f", -- Heading and vertical reference system control switch
[538] = "%0.1f", -- Emergency gyromagnetic compass switch
[539] = "%.4f",
[540] = "%0.1f", -- Heading control unit erection button
[541] = "%0.1f", -- Omnibearing selector Heading control unit Xxx
[542] = "%0.1f", -- Omnibearing selector Heading control unit xXx
[543] = "%0.1f", -- Omnibearing selector Heading control unit xxX
[544] = "%.4f", -- VOR-ILS/OFF/TACAN selector
[545] = "%.4f", -- Omnibearing selector
[547] = "%.4f", -- Heading selection knob
[548] = "%0.1f", -- CB Gyro control unit power supply
[550] = "%0.1f", -- CB High-lift device servo unit power supply
[552] = "%0.1f", -- CB Indicator and failure detector power supply
[554] = "%0.1f", -- CB Inverter transfer unit power supply and control
[556] = "%0.1f", -- CB Dual hydraulic pressure gauge power supply
[558] = "%0.1f", -- CB Gun firing trigger power supply
[560] = "%0.1f", -- CB LP cock power supply
[562] = "%0.1f", -- CB Electro-pump relay power supply
[564] = "%0.1f", -- CB Flight refuelling system power supply
[566] = "%0.1f", -- CB Cabin pressurization system power supply
[568] = "%0.1f", -- CB Inverter 28 V power supply
[570] = "%0.1f", -- CB U/C normal operation power supply
[572] = "%0.1f", -- CB V/UHF power supply
[574] = "%0.1f", -- CB Starter and sequencing system power supply
[576] = "%0.1f", -- CB Refuelling probe control power supply
[578] = "%0.1f", -- CB Manual trim control power supply
[580] = "%0.1f", -- CB Valve position repeater, control valve and ground mode power supply
[582] = "%0.1f", -- CB Failure warning panel and master failure warning light power supply
[584] = "%0.1f", -- CB Configuration indicator (U/C section) and U/C warning light power supply
[586] = "%0.1f", -- CB IFF power supply
[588] = "%0.1f", -- CB Emergency regulation system and control lever power supply
-- Unused <589>
[590] = "%0.1f", -- Sight selector
[591] = "%0.1f", -- Firing fuel dipper switch
[592] = "%0.1f", -- Bomb/Rocket selector
[593] = "%0.1f", -- MATRA 550 or Sidewinder missile switch
[594] = "%0.1f", -- Fore/Aft selector switch
[595] = "%0.1f", -- Auto/Manual firing selector switch
[596] = "%0.1f", -- Single/Salvo selector
[597] = "%0.1f", -- Instantaneous/Delay/Safe selector switch
[598] = "%0.1f", -- Radar selector
[599] = "%0.1f", -- Radar emergency transmission button
[600] = "%0.1f", -- Radar 4 lines/1 line scan switch
[601] = "%0.1f", -- R 530 Missile Normal/Altitude difference selector switch
[602] = "%0.1f", -- Armament panel lights test
[603] = "%0.1f", -- Normal/Jammer pursuit switch (No function)
[604] = "%0.1f", -- EXT G Left MATRA R550 or sidewinder missile pushbutton
[605] = "%0.1f", -- EXT G Left MATRA R550 or sidewinder missile pushbutton light
[606] = "%0.1f", -- EXT D Left or fuselage MATRA R530 missile pushbutton
[607] = "%0.1f", -- EXT D Left or fuselage MATRA R530 missile pushbutton light
[608] = "%0.1f", -- CAN A Air to air pushbutton
[609] = "%0.1f", -- CAN A Air to air pushbutton light
[610] = "%0.1f", -- BOMB VOIL Wing bombs pushbutton
[611] = "%0.1f", -- BOMB VOIL Wing bombs pushbutton light
[612] = "%0.1f", -- EXT D Right MATRA R550 or sidewinder missile pushbutton
[613] = "%0.1f", -- EXT D Right MATRA R550 or sidewinder missile pushbutton light
[614] = "%0.1f", -- EXT D Right MATRA R530 missile pushbutton
[615] = "%0.1f", -- EXT D Right MATRA R530 missile pushbutton light
[616] = "%0.1f", -- CAN S ROQ Air to ground guns or rockets pushbutton
[617] = "%0.1f", -- CAN S ROQ Air to ground guns or rockets pushbutton light
[618] = "%0.1f", -- Fuselage bombs pushbutton
[619] = "%0.1f", -- Fuselage bombs pushbutton light
-- Unused <620-631>
[632] = "%0.2f", -- Indicator light brightness
[633] = "%0.2f", -- Strobe brightness
[634] = "%0.2f", -- Distance markers brightness
[635] = "%0.2f", -- Horizon and radial velocity marker brightness
[636] = "%0.2f", -- Horizon symbol vertical position
[708] = "%0.1f", -- Chaff/flares release button
[709] = "%0.1f", -- N-100%-EMG mode selector switch
[710] = "%0.1f", -- Oxygen overpressure button
[712] = "%0.1f", -- Anti-g connection cover
[713] = "%0.1f", -- Anti-g test button
[714] = "%0.1f", -- Anti-g valve cock
[719] = "%.4f", -- Pilot Oxygen Breath Pressure Indicator
[721] = "%.4f", -- Hydraulic 1 needle
[722] = "%.4f", -- Hydraulic 2 needle
[723] = "%.4f", -- Rudder trim indicator
[724] = "%.4f", -- Roll trim indicator
[725] = "%.4f", -- Pitch trim indicator
[726] = "%.4f", -- Cockpit pressurisation indicator needle
-- Unused <727-731>
[732] = "%0.3f", -- Mode 1 coding tens selector
[733] = "%0.3f", -- Mode 1 coding units selector
[734] = "%0.3f", -- Mode 3A coding thousands selector
[735] = "%0.3f", -- Mode 3A coding hundreds selector
[736] = "%0.3f", -- Mode 3A coding tens selector
[737] = "%0.3f", -- Mode 3A coding units selector
[738] = "%0.1f", -- IFF test button
[739] = "%0.2f", -- Function selector switch
[740] = "%0.1f", -- IFF Monitoring light press
[741] = "%.4f", -- IFF Monitoring light rotate
[742] = "%0.1f", -- IFF Monitoring light brightness
[743] = "%0.2f", -- Mode 4 selector switch
[744] = "%0.2f", -- Position identification selector
[745] = "%0.1f", -- IFF mode 4 switch
[746] = "%0.1f", -- IFF fault light
[747] = "%.4f", -- IFF Fault light rotate
[748] = "%0.1f", -- IFF Fault light brightness
[749] = "%0.1f", -- AUDIO-LIGHT switch
[750] = "%0.1f", -- M-1 mode switch
[751] = "%0.1f", -- M-2 mode switch
[752] = "%0.1f", -- M-3 mode switch
[753] = "%0.1f", -- M-4 mode switch
[754] = "%0.1f", -- Shock-cone manual control switch
[755] = "%0.1f", -- Shock-cone pushbutton
[756] = "%1d", -- Nose wheel steering high sensitivity button
[757] = "%0.1f", -- Nose wheel steering switch guard
[758] = "%0.1f", -- Nose wheel steering switch
-- Unused <759>
[760] = "%0.1f", -- AUTO/MAN intensity selector switch
[761] = "%0.1f", -- Lighting selector switch
[762] = "%.4f", --
[763] = "%.4f", --
[764] = "%.4f", --
[765] = "%.4f", --
[766] = "%.4f", -- Manual gravity drop selection Mrad Xxx
[767] = "%.4f", -- Manual gravity drop selection Mrad xXx
[768] = "%.4f", -- Manual gravity drop selection Mrad xxX
[769] = "%0.1f", -- Manual gravity drop selection thumbwheel
[770] = "%0.1f", -- Fixed Reticle intensity rheostat
[771] = "%0.1f", -- Moving and Target Reticles intensity rheostat
[772] = "%0.1f", -- Attitude Reticle intensity rheostat
[773] = "%0.1f", -- Sight system test button
[774] = "%0.4f", -- Exposure time repeater
[775] = "%0.1f", -- Overrun select thumbwheel
[776] = "%0.1f", -- Sight camera test switch
[777] = "%0.1f", -- 5/16 PPS framing rate selector switch
[836] = "%0.1f", -- Radar test button
[837] = "%.4f", -- Scope intensity adjustment
[838] = "%.1f", -- Radar function selection
[839] = "%.4f", -- Storage adjustment
[840] = "%.4f", -- Scope erasing
[841] = "%.4f", -- Scope turney thingie, Polaroid screen adjustment
[842] = "%0.1f", -- Scope HA Light
[843] = "%0.1f", -- Scope IC Light
[844] = "%0.1f", -- Scope TL Light
[845] = "%0.1f", -- Scope BZ Light
[846] = "%0.1f", -- Scope TS Light
[847] = "%0.1f", -- Scope V1 Light
[848] = "%0.1f", -- Scope V2 Light
[849] = "%0.1f", -- Scope DC Light
[850] = "%0.1f", -- Scope PR Light
[851] = "%0.1f", -- Scope AC Light
[852] = "%0.1f", -- Scope DB Light
[853] = "%0.1f", -- Scope yellow Light
[854] = "%0.1f", -- Scope green Light
[855] = "%0.1f", -- Scope red Light
[856] = "%0.1f", -- Scope 7 Light
[857] = "%0.1f", -- Scope 15 Light
[858] = "%0.1f", -- Scope 35 Light
[859] = "%0.1f", -- Scope 60 Light
[860] = "%0.1f", -- Scope AP Light
[861] = "%0.1f", -- Scope TCH Light
[862] = "%0.1f", -- Scope EMI Light
[863] = "%0.1f", -- Scope PNE Light
[864] = "%0.1f", -- Radar cover remove toggle
[865] = "%.4f", -- Scope left/right animation
[866] = "%.4f", -- Scope up/down animation
-- Unused <867-919>
[920] = "%.4f", -- Master failure warning light
[921] = "%0.1f", -- Master failure warning light warning brightness
[923] = "%0.1f", -- Master failure warning light caution brightness
[928] = "%.4f", -- U/C light
[929] = "%0.1f", -- U/C light brightness
[932] = "%.4f", -- Limit warning light + Horn
[933] = "%0.1f", -- Limit warning light + Horn brightness
[937] = "%0.1f", -- Fire warning light (ENG/AB) + Horn top brightness
[940] = "%.4f", -- Fire warning light (ENG/AB) + Horn
[941] = "%0.1f", -- Fire warning light (ENG/AB) + Horn bottom brightness
[944] = "%0.1f", -- Airbrake light press
[945] = "%.4f", -- Airbrake light twist
[946] = "%0.1f", -- Airbrake light light
[950] = "%0.1f", -- Nose wheel steering light press
[951] = "%.4f", -- Nose wheel steering light twist
[952] = "%0.1f", -- Nose wheel steering light light
[956] = "%0.1f", -- Combat flaps light press
[957] = "%.4f", -- Combat flaps light twist
[958] = "%0.1f", -- Combat flaps light light
[962] = "%0.1f", -- MATRA 550 or Sidewinder jettison button guard
[963] = "%0.1f", -- MATRA 550 or Sidewinder jettison button
[966] = "%0.1f", -- Emergency jettison button guard
[967] = "%0.1f", -- Emergency jettison button
[968] = "%0.1f", -- Selective jettison button guard
[969] = "%0.1f", -- Selective jettison button
[970] = "%0.1f", -- Jettisoning selector switch
[973] = "%0.1f", -- Autopilot control and indicator unit test button
[974] = "%0.1f", -- Autopilot PA button
[975] = "%0.1f", -- Autopilot PA button P light
[976] = "%0.1f", -- Autopilot PA button A light
[977] = "%0.1f", -- Autopilot ALT button
[978] = "%0.1f", -- Autopilot ALT button green light
[979] = "%0.1f", -- Autopilot ALT button red light
[980] = "%0.1f", -- Autopilot CAP button
[981] = "%0.1f", -- Autopilot CAP button light
[982] = "%0.1f", -- Autopilot R button
[983] = "%0.1f", -- Autopilot R button left red light
[984] = "%0.1f", -- Autopilot R button top red light
[985] = "%0.1f", -- Autopilot R button bottom green light
[986] = "%0.1f", -- Autopilot R button right red light
[987] = "%0.1f", -- Autopilot G button
[988] = "%0.1f", -- Autopilot G button left red light
[989] = "%0.1f", -- Autopilot G button top red light
[990] = "%0.1f", -- Autopilot G button bottom red green light
[991] = "%0.1f", -- Autopilot G button right green light
[992] = "%0.1f", -- Autopilot intensity control
[1021] = "%.4f", -- Mach airspeed cone needle
[1023] = "%.4f", -- Mach/Airspeed window and needle
[1025] = "%.4f", -- Vertical speed needle
[1027] = "%.4f", -- RPM thousands needle
[1028] = "%.4f", -- Engine temp needle
[1029] = "%0.1f", -- A/B INJ light
[1030] = "%0.1f", -- A/B INJ light brightness
[1031] = "%0.1f", -- A/B ON light
[1032] = "%0.1f", -- A/B ON light brightness
[1033] = "%0.1f", -- A/B SRL light
[1034] = "%0.1f", -- A/B SRL light brightness
[1043] = "%.4f", -- Altitude Needle
[1044] = "%0.1f", -- Altitude window flag
[1045] = "%0.1f", -- Altitude window Xx.xxx
[1046] = "%0.1f", -- Altitude window xX.xxx
[1047] = "%0.1f", -- Altitude window xx.Xxx
[1048] = "%0.1f", -- Altitude window xx.xXX
[1049] = "%0.1f", -- Slaved altimeter barometric pressure Xxxx
[1050] = "%0.1f", -- Slaved altimeter barometric pressure xXxx
[1051] = "%0.1f", -- Slaved altimeter barometric pressure xxXx
[1052] = "%0.1f", -- Slaved altimeter barometric pressure xxxX
[1053] = "%0.1f", -- Slaved altimeter barometric pressure setting knob
[1065] = "%.4f", -- Standby altimeter hundreds needle
[1066] = "%.4f", -- Standby altimeter thousands needle
[1067] = "%.4f", -- Standby altimeter tenthousands altitude needle
[1068] = "%0.1f", -- Standby altimeter barometric pressure Xxxx
[1069] = "%0.1f", -- Standby altimeter barometric pressure xXxx
[1070] = "%0.1f", -- Standby altimeter barometric pressure xxXx
[1071] = "%0.1f", -- Standby altimeter barometric pressure xxxX
[1072] = "%0.1f", -- Standby altimeter barometric pressure setting knob
[1081] = "%0.1f", -- BIP button
[1082] = "%0.1f", -- Configuration indicator test button
[1083] = "%0.1f", -- Slat green light
[1084] = "%0.1f", -- Slat yellow light
[1085] = "%0.1f", -- Slat red light
[1086] = "%0.1f", -- Flap red light
[1087] = "%0.1f", -- Flap yellow light
[1088] = "%0.1f", -- Flap green light
[1089] = "%0.1f", -- Fren light
[1090] = "%0.1f", -- U/C left green light
[1091] = "%0.1f", -- U/C transit red light
[1092] = "%0.1f", -- U/C center green light
[1093] = "%0.1f", -- U/C right green light
[1106] = "%.4f", -- Engine RPM hundreds needle
[1108] = "%.4f", -- Spherical indicator pitch bar
[1109] = "%.4f", -- Spherical indicator roll bar
[1110] = "%.4f", -- Spherical indicator pitch
[1111] = "%.4f", -- Spherical indicator roll
[1112] = "%.4f", -- Spherical indicator heading
[1113] = "%.4f", -- Spherical indicator coordination ball
[1115] = "%0.1f", -- Spherical indicator flag
[1116] = "%0.1f", -- Spherical indicator day/night selector switch
[1117] = "%0.1f", -- Spherical indicator pole setting and marker beacon light test
[1128] = "%.4f", -- Standby horizon roll
[1129] = "%.4f", -- Standby horizon angle of bank
[1130] = "%.4f", -- Standby horizon aircraft indicator
[1131] = "%.4f", -- Standby horizon flag
[1132] = "%.4f", -- Standby horizon uncage and aircraft model control
[1133] = "%.4f", -- Standby horizon control knob
[1134] = "%.4f", -- Standby horizon pitch
[1142] = "%0.1f", -- Fuel gauge G left
[1143] = "%0.1f", -- Fuel gauge D right
[1144] = "%0.1f", -- Feeder tank/Fuselage selector switch
[1145] = "%0.1f", -- Fuel gauge test button
[1146] = "%0.1f", -- Fuel quantity Xxxx
[1147] = "%0.1f", -- Fuel quantity xXxx
[1148] = "%0.1f", -- Fuel quantity xxXx
[1149] = "%0.1f", -- Fuel quantity xxxX
[1150] = "%.4f", -- Fuel quantity reset thumbwheel
[1151] = "%0.1f", -- Crossfeed switch
[1152] = "%0.1f", -- Emergency transfer switch
[1153] = "%0.1f", -- Fuel transfer sequence selector switch
[1154] = "%0.1f", -- Fuel transfer sequence 4 left
[1155] = "%0.1f", -- Fuel transfer sequence 2
[1156] = "%0.1f", -- Fuel transfer sequence 4 right
[1157] = "%0.1f", -- Fuel transfer sequence tank left
[1158] = "%0.1f", -- Fuel transfer sequence tank right
[1159] = "%0.1f", -- Fuel transfer sequence 1 left
[1160] = "%0.1f", -- Fuel transfer sequence tank center
[1161] = "%0.1f", -- Fuel transfer sequence 1 right
[1162] = "%0.1f", -- Fuel transfer sequence 3 left
[1163] = "%0.1f", -- Fuel transfer sequence 3 right
[1164] = "%0.1f", -- Fuel transfer sequence 5 left
[1165] = "%0.1f", -- Fuel transfer sequence 5 right
[1166] = "%0.1f", -- Fuel transfer indicator test
[1189] = "%.4f", -- HSI heading
[1190] = "%.4f", -- HSI heading bug
[1191] = "%.4f", -- HSI needle 2
[1192] = "%.4f", -- HSI needle 1
[1193] = "%.4f", -- HSI distance Xxx
[1194] = "%.4f", -- HSI distance xXx
[1195] = "%.4f", -- HSI distance xxX
[1196] = "%.4f", -- HSI distance flag
[1197] = "%.4f", -- HSI bearing Xxx
[1198] = "%.4f", -- HSI bearing xXx
[1199] = "%.4f", -- HSI bearing xxX
[1200] = "%.4f", -- HSI distance Xxx
[1201] = "%.4f", -- HSI distance xXx
[1202] = "%.4f", -- HSI distance xxX
[1203] = "%0.1f", -- HSI flag left
[1204] = "%0.2f", -- HSI Mode selector switch
[1205] = "%0.1f", -- HSI Normal/Additional vector selector switch
[1206] = "%0.1f", -- HSI Additional target selector switch
[1207] = "%0.1f", -- HSI bearing/distance selector knob
[1208] = "%.4f", -- HSI Test button
[1228] = "%.4f", --
[1229] = "%.4f", -- RWR red button 1 twist
[1230] = "%0.1f", -- RWR red button 1 light
[1231] = "%.4f", --
[1232] = "%.4f", -- RWR red button 2 twist
[1233] = "%0.1f", -- RWR red button 2 light
[1234] = "%.4f", --
[1235] = "%.4f", -- RWR red button 3 twist
[1236] = "%0.1f", -- RWR red button 3 light
[1237] = "%0.1f", -- Indicator light intensity adjusting switch and lights 'T' test button
[1238] = "%0.1f", -- Radar detector indicator test switch
[1239] = "%0.1f", -- RWR arrow top
[1240] = "%0.1f", -- RWR arrow left
[1241] = "%0.1f", -- RWR arrow right
[1242] = "%0.1f", -- RWR arrow down
[1270] = "%.4f", -- Mach/Airspeed indicator reference airspeed knob
[1288] = "%0.1f", -- Accelerometer reset button and rheostat
[1294] = "%.4f", -- Instrument backlighting
[1300] = "%0.1f", -- AoA lighting red
[1301] = "%0.1f", -- AoA lighting yellow
[1302] = "%0.1f", -- AoA lighting green
[1309] = "%.4f", -- Canopy Light Move
[1315] = "%.4f", -- TO/FROM Indicator
[1316] = "%.4f", -- Ejection handle safety pin
[1318] = "%.4f", -- Airspeed something window
}
-----------------------------
-- HIGH IMPORTANCE EXPORTS --
-- done every export event --
-----------------------------
-- Pointed to by ProcessIkarusDCSHighImportance
function ExportScript.ProcessIkarusDCSConfigHighImportance(mainPanelDevice)
end
function ExportScript.ProcessDACConfigHighImportance(mainPanelDevice)
end
-----------------------------------------------------
-- LOW IMPORTANCE EXPORTS --
-- done every gExportLowTickInterval export events --
-----------------------------------------------------
-- Pointed to by ExportScript.ProcessIkarusDCSConfigLowImportance
function ExportScript.ProcessIkarusDCSConfigLowImportance(mainPanelDevice)
--ExportScript.DeviceMetaTableLogDump(mainPanelDevice) -- comment this to prevent log flooding
--ExportScript.ListIndicationLogDump(mainPanelDevice) -- comment this to prevent log flooding
ExportScript.VorIlsTacanOmnibearing(mainPanelDevice)
ExportScript.CockpitInstruments(mainPanelDevice)
ExportScript.qfeCalculator(mainPanelDevice)
ExportScript.clockTimer(mainPanelDevice)
ExportScript.Radios(mainPanelDevice)
ExportScript.AutopilotLightLogic(mainPanelDevice)
ExportScript.WeaponPushbuttonLogic(mainPanelDevice)
ExportScript.GearSlatLogic(mainPanelDevice)
ExportScript.EngineRestartLogic(mainPanelDevice)
ExportScript.CountermeasureReadouts(mainPanelDevice)
ExportScript.AoaIndicator(mainPanelDevice)
ExportScript.AccelerometerReadout(mainPanelDevice)
ExportScript.HsiReadouts(mainPanelDevice)
ExportScript.DepressionAngleTables(mainPanelDevice)
ExportScript.FlowBlinker(mainPanelDevice)
ExportScript.OxygenIndicator(mainPanelDevice)
ExportScript.ChuteLimitLogic(mainPanelDevice)
ExportScript.MaxCeiling(mainPanelDevice)
ExportScript.AlternatorEnvelope(mainPanelDevice)
ExportScript.DecentReadout(mainPanelDevice)
ExportScript.MaxAirspeed(mainPanelDevice)
ExportScript.TrimReadout(mainPanelDevice)
ExportScript.RadarCalculators(mainPanelDevice)
ExportScript.ClimbSchedulesReadout(mainPanelDevice)
ExportScript.FuelCalculator(mainPanelDevice)
ExportScript.IffPanel(mainPanelDevice)
ExportScript.BaroPressureConverter(mainPanelDevice)
end
function ExportScript.ProcessDACConfigLowImportance(mainPanelDevice)
end
-----------------------------
-- Custom functions --
-----------------------------
function ExportScript.BaroPressureConverter(mainPanelDevice)
-- Altimeter Pressure window
local altBaroPress_Xxxx = ExportScript.Tools.round(mainPanelDevice:get_argument_value(1049) * 10, 0)
local altBaroPress_xXxx = ExportScript.Tools.round(mainPanelDevice:get_argument_value(1050) * 10, 0)
local altBaroPress_xxXx = ExportScript.Tools.round(mainPanelDevice:get_argument_value(1051) * 10, 0)
local altBaroPress_xxxX = ExportScript.Tools.round(mainPanelDevice:get_argument_value(1052) * 10, 0)
if altBaroPress_Xxxx > 9 then altBaroPress_Xxxx = 0 end
if altBaroPress_xXxx > 9 then altBaroPress_xXxx = 0 end
if altBaroPress_xxXx > 9 then altBaroPress_xxXx = 0 end
if altBaroPress_xxxX > 9 then altBaroPress_xxxX = 0 end
--result is millibar
local altBaroPressMb = altBaroPress_Xxxx .. altBaroPress_xXxx .. altBaroPress_xxXx .. altBaroPress_xxxX
-- convert to mmhg
local altBaroPressMmhg = string.format("%.2f", altBaroPressMb / 1.333)
-- Convert to inhg
local altBaroPressInhg = string.format("%.2f", altBaroPressMb / 33.864)
ExportScript.Tools.SendData(8079, 'Pressure'
.. '\n' .. altBaroPressMb .. " mbar"
.. '\n' .. round(altBaroPressMmhg,0) .. ' mmhg'
.. '\n' .. altBaroPressInhg .. ' inhg')
end
function ExportScript.IffPanel(mainPanelDevice)
local mode1_10s = {[0.000]="0",[0.125]="1",[0.250]="2",[0.375]="3",[0.500]="4",[0.625]="5",[0.750]="6",[0.875]="7",[1.000]="0"}
mode1_10s = mode1_10s[ExportScript.Tools.round(mainPanelDevice:get_argument_value(732), 3)]
local mode1_1s = {[0.000]="0",[0.125]="1",[0.250]="2",[0.375]="3",[0.500]="4",[0.625]="5",[0.750]="6",[0.875]="7",[1.000]="0"}
mode1_1s = mode1_1s[ExportScript.Tools.round(mainPanelDevice:get_argument_value(733), 3)]
local mode1 = mode1_10s .. mode1_1s
ExportScript.Tools.SendData(8076, 'IFF M1\n' .. mode1_10s .. mode1_1s)
local mode3A1000s = {[0.000]="0",[0.125]="1",[0.250]="2",[0.375]="3",[0.500]="4",[0.625]="5",[0.750]="6",[0.875]="7",[1.000]="0"}
mode3A1000s = mode3A1000s[ExportScript.Tools.round(mainPanelDevice:get_argument_value(734), 3)]
local mode3A100s = {[0.000]="0",[0.125]="1",[0.250]="2",[0.375]="3",[0.500]="4",[0.625]="5",[0.750]="6",[0.875]="7",[1.000]="0"}
mode3A100s = mode3A100s[ExportScript.Tools.round(mainPanelDevice:get_argument_value(735), 3)]
local mode3A10s = {[0.000]="0",[0.125]="1",[0.250]="2",[0.375]="3",[0.500]="4",[0.625]="5",[0.750]="6",[0.875]="7",[1.000]="0"}
mode3A10s = mode3A10s[ExportScript.Tools.round(mainPanelDevice:get_argument_value(736), 3)]
local mode3A1s = {[0.000]="0",[0.125]="1",[0.250]="2",[0.375]="3",[0.500]="4",[0.625]="5",[0.750]="6",[0.875]="7",[1.000]="0"}
mode3A1s = mode3A1s[ExportScript.Tools.round(mainPanelDevice:get_argument_value(737), 3)]
local mode3A = mode3A1000s .. mode3A100s .. mode3A10s .. mode3A1s
ExportScript.Tools.SendData(8077, 'IFF M3A\n' .. mode3A)
ExportScript.Tools.SendData(8078, 'IFF\nM1 ' .. mode1 .. '\nM3A ' .. mode3A)
end
function ExportScript.FuelCalculator(mainPanelDevice)
-- a rough estimate of instantaneous remaining fuel time
-- 10 second sample period
-- get how many L were used
-- from then do more math to get amount of fuel remaining in hrs
local measurementTime = 10 -- seconds
local clockHour = ExportScript.Tools.round(mainPanelDevice:get_argument_value(64), 4) -- 0.25
clockHour = clockHour * 12 -- 3
clockHour = clockHour * 60 -- 180
clockHour = clockHour * 60 -- 10,800
clockHour = formatTime(clockHour)
local clockTimer = ExportScript.Tools.round(mainPanelDevice:get_argument_value(65), 4)
-- up to 15 minutes
-- .333 is about 5 minutes
clockTimer = clockTimer * 15 -- 4.995
clockTimer = clockTimer * 60 -- 299.7
clockTimer = formatTime2(clockTimer)
-- Manual gravity drop selection Mrad to input the amount of fuel used
local mrad_Xxx = ExportScript.Tools.round(mainPanelDevice:get_argument_value(766) * 10, 0)
local mrad_xXx = ExportScript.Tools.round(mainPanelDevice:get_argument_value(767) * 10, 0)
local mrad_xxX = ExportScript.Tools.round(mainPanelDevice:get_argument_value(768) * 10, 0)
if mrad_Xxx > 9 then mrad_Xxx = 0 end
if mrad_xXx > 9 then mrad_xXx = 0 end
if mrad_xxX > 9 then mrad_xxX = 0 end
local fuelUsed = tonumber(mrad_Xxx .. mrad_xXx .. mrad_xxX)
if fuelUsed == 0 then
fuelUsed = 0.1 -- place holder to not divide by 0
end
local fuelPerHour = 60 * 60 / measurementTime * fuelUsed
-- we can use the roller for the fuel amount TODO: make the fuel function to get more accurate results
-- Fuel quantity indicator
local fuelQty_Xxxx = ExportScript.Tools.round(mainPanelDevice:get_argument_value(1146) * 10, 0)
local fuelQty_xXxx = ExportScript.Tools.round(mainPanelDevice:get_argument_value(1147) * 10, 0)
local fuelQty_xxXx = ExportScript.Tools.round(mainPanelDevice:get_argument_value(1148) * 10, 0)
local fuelQty_xxxX = ExportScript.Tools.round(mainPanelDevice:get_argument_value(1149) * 10, 0)
if fuelQty_Xxxx > 9 then fuelQty_Xxxx = 0 end
if fuelQty_xXxx > 9 then fuelQty_xXxx = 0 end
if fuelQty_xxXx > 9 then fuelQty_xxXx = 0 end
if fuelQty_xxxX > 9 then fuelQty_xxxX = 0 end
local fuelQtyTotal = fuelQty_Xxxx .. fuelQty_xXxx .. fuelQty_xxXx .. fuelQty_xxxX
local fuelHrs = fuelQtyTotal/fuelPerHour
local fuelMin = fuelHrs * 60
local fuelSec = fuelMin * 60
local fuelTimeReadout = formatTime3(fuelSec)
local fuelString = ''
if fuelUsed == 0.1 then -- place holder to not divide by 0
--[[
fuelString = 'Fuel Calc'
.. '\nSet Mrad'
.. '\nwith fuel'
.. '\nuse over'
.. '\n10 sec'
]]
fuelString = 'Fuel Calc'
.. '\nSet Mrad w/'
.. '\n10s fuel'
.. '\nT - ' .. clockTimer
.. '\nFuel ' .. fuelQtyTotal
else
fuelString = 'Fuel Calc'
.. '\nT - ' .. clockTimer
.. '\nRate - ' .. fuelUsed
.. '\nFuel ' .. fuelQtyTotal
.. '\n'.. fuelTimeReadout
end
ExportScript.Tools.SendData(8075, fuelString)
end
function ExportScript.ClimbSchedulesReadout(mainPanelDevice)
local climbText1 = 'SUB CLMB\nCLEAN MIL\n470/0.92'
local climbText2 = 'SUB CLMB\nCLEAN MAX\n500/0.95'
local climbText3 = 'SUB CLMB\nTANK MIL\n422/0.84'
local climbText4 = 'SUB CLMB\nTANK MAX\n475/0.92'
local climbText5 = 'SUPER\nSUB to 30K\n610 to 36K\nM1.8 to ALT'
ExportScript.Tools.SendData(8070, climbText1)
ExportScript.Tools.SendData(8071, climbText2)
ExportScript.Tools.SendData(8072, climbText3)
ExportScript.Tools.SendData(8073, climbText4)
ExportScript.Tools.SendData(8074, climbText5)
end
function ExportScript.RadarCalculators(mainPanelDevice)
local scanDistance = ExportScript.Tools.round(mainPanelDevice:get_argument_value(258) * 100, 0)
if scanDistance > 70 then
scanDistance = 60
elseif scanDistance > 40 then
scanDistance = 35
elseif scanDistance > 20 then
scanDistance = 15
else -- default distance
scanDistance = 7
end
local lineScanAngle = ExportScript.Tools.round(mainPanelDevice:get_argument_value(600) * 100, 0)
if lineScanAngle > 50 then
lineScanAngle = 8
else
lineScanAngle = 4
end
local altBaroStandby = ExportScript.Tools.round(mainPanelDevice:get_argument_value(1067) * 100000, 0)
-- ((scanDistance/SIN((180-90-lineScanAngle)*PI()/180)) * (SIN(lineScanAngle*PI()/180))) * 6076 + altBaroStandby
-- the above will be the top of the radar detection limit at range. for the bottom add a negative at the beginning
local radarHiFull = ((scanDistance/math.sin((180-90-lineScanAngle)*math.pi/180))
* (math.sin(lineScanAngle*math.pi/180)))
* 6076 + altBaroStandby
radarHiFull = round(radarHiFull,-2)
local radarLoFull = -((scanDistance/math.sin((180-90-lineScanAngle)*math.pi/180))
* (math.sin(lineScanAngle*math.pi/180)))
* 6076 + altBaroStandby
radarLoFull = round(radarLoFull,-2)
-- Calculate the half of the distance. This is the center of the radar screen
local radarHiHalf = (((scanDistance/2)/math.sin((180-90-lineScanAngle)*math.pi/180))
* (math.sin(lineScanAngle*math.pi/180)))
* 6076 + altBaroStandby
radarHiHalf = round(radarHiHalf,-2)
local radarLoHalf = -(((scanDistance/2)/math.sin((180-90-lineScanAngle)*math.pi/180))
* (math.sin(lineScanAngle*math.pi/180)))
* 6076 + altBaroStandby
radarLoHalf = round(radarLoHalf,-2)
radarHiFull = string.format("%.0f",round(format_int(radarHiFull / 1000,2)),0)
radarLoFull = string.format("%.0f",round(format_int(radarLoFull / 1000,2)),0)
radarHiHalf = string.format("%.0f",round(format_int(radarHiHalf / 1000,2)),0)
radarLoHalf = string.format("%.0f",round(format_int(radarLoHalf / 1000,2)),0)
-- format the numbers so that they display only 2 digits
ExportScript.Tools.SendData(8068, 'RDR VOL'
.. '\nNM ' .. 'HI' .. '/' .. 'LO'
.. '\n' .. scanDistance .. ' ' .. radarHiFull .. '/' .. radarLoFull
.. '\n' .. round(scanDistance/2,0) .. ' ' .. radarHiHalf .. '/' .. radarLoHalf)
-- Radar Angle Calculator
-- requires Altitude Delta
-- requires Distance in NM
-- Mach/Airspeed indicator reference airspeed knob for Distance in NM
local awacsDist = ExportScript.Tools.round(mainPanelDevice:get_argument_value(1270) * 66, 0) -- 66 by trial and error
-- Exposure time repeater for Altitude Delta
local altitudeDelta = round(mainPanelDevice:get_argument_value(774) * 66666, -3)
local radarAngle = math.deg(math.asin(math.sin(90 * math.pi / 180)
* (altitudeDelta / math.sqrt(math.pow(altitudeDelta,2) + math.pow((awacsDist * 6076),2)-2
* altitudeDelta * (awacsDist * 6076) * math.cos(90 * math.pi / 180)))))
if awacsDist == 0 and altitudeDelta == 0 then -- numbers not set
awacsDist = 'NM-IAS Bug'
altitudeDelta = 'ALTΔ-ExpRpt'
ExportScript.Tools.SendData(8069, 'RDR ANGLE\n'
.. awacsDist .. '\n'
.. altitudeDelta.. '\n'
.. 'RDR DEG°')
elseif awacsDist == 0 then -- if dist is 0 then formula errors
awacsDist = 'NM-IAS Bug'
altitudeDelta = 'ALTΔ-ExpRpt'
ExportScript.Tools.SendData(8069, 'RDR ANGLE\n'
.. awacsDist .. '\n'
.. altitudeDelta.. '\n'
.. 'RDR DEG°')
else
ExportScript.Tools.SendData(8069, 'RDR ANGLE\n'
.. awacsDist .. ' NM\n'
.. altitudeDelta.. ' altΔ\n'
.. 'RDR ' .. round(radarAngle,0) .. '°')
end
end
function ExportScript.TrimReadout(mainPanelDevice)
local trimRudder = ExportScript.Tools.round(mainPanelDevice:get_argument_value(723) * 100, 0)
local trimRoll = ExportScript.Tools.round(mainPanelDevice:get_argument_value(724) * 100, 0)
local trimPitch = ExportScript.Tools.round(mainPanelDevice:get_argument_value(725) * 100, 0)
if trimRudder < 0 then
trimRudder = math.abs(trimRudder) .. '% L'
else
trimRudder = math.abs(trimRudder) .. '% R'
end
if trimRoll < 0 then
trimRoll = math.abs(trimRoll) .. '% R'
else
trimRoll = math.abs(trimRoll) .. '% L'
end
if trimPitch < 0 then
trimPitch = math.abs(trimPitch) .. '% D'
else
trimPitch = math.abs(trimPitch) .. '% U'
end
ExportScript.Tools.SendData(8066, 'Trim\nRud ' .. trimRudder .. '\nRoll ' .. trimRoll .. '\nPitch ' .. trimPitch)
end
function ExportScript.MaxAirspeed(mainPanelDevice)
-- TODO Make max mach here too (2.1)
-- TODO And mach readout Tile
-- TODO airspeed readout
local altBaroStandby = ExportScript.Tools.round(mainPanelDevice:get_argument_value(1067) * 100000, 0)
local currentAirspeed = ExportScript.Tools.round(mainPanelDevice:get_argument_value(1023) * 1000, 0)
local isAirspeedLimit = 0
if altBaroStandby < 20000 and currentAirspeed > 700 then
isAirspeedLimit = 1
end
if altBaroStandby >= 20000 and currentAirspeed > 750 then
isAirspeedLimit = 1
end
ExportScript.Tools.SendData(8062, isAirspeedLimit)
ExportScript.Tools.SendData(8063, 'IAS\n' .. currentAirspeed .. ' kts')
--ExportScript.Tools.SendData(8064, isAirspeedLimitMach)
--ExportScript.Tools.SendData(8065, machReadout)
-- this function will need to detect the Indicated mach level. if it is over 1.4 the
-- aircraft is in overspeed mode, as indicated by RPM/
-- the pilot should not use the throttle to slow down. They should use maneuvers and
-- the speedbrake.
-- have the button press be the speedbrakes
-- [1023] = "%.4f", -- Mach/Airspeed window and needle
end
function ExportScript.DecentReadout(mainPanelDevice)
-- Simple readouts
local descentText1 = 'ECON DES\nRPM 6500\nBrake IN\nIAS 300kts'
local descentText2 = 'OP DES\nRPM ~6500\nBrake IN\n0.92/450kts\nPath -10°'
local descentText3 = 'FAST DES\nRPM 6500\nBrake OUT\nDive -20°'
local descentText4 = 'LETDOWN\nRPM 6500\nBrake OUT\nIAS 300kts\nPath -10°'
ExportScript.Tools.SendData(8058, descentText1)
ExportScript.Tools.SendData(8059, descentText2)
ExportScript.Tools.SendData(8060, descentText3)
ExportScript.Tools.SendData(8061, descentText4)
end
function ExportScript.AlternatorEnvelope(mainPanelDevice)
local altBaroStandby = ExportScript.Tools.round(mainPanelDevice:get_argument_value(1067) * 100000, 0)
local currentAirspeed = ExportScript.Tools.round(mainPanelDevice:get_argument_value(1023) * 1000, 0)
local isAlternatorZone = 0
-- Zone 1: low air density and therefore ventilation is not so efficient
if altBaroStandby > 35000 and currentAirspeed < 350 then
isAlternatorZone = 1
end
-- TODO Figure out Zone 2: transition zone where ventilation is low
ExportScript.Tools.SendData(8057, isAlternatorZone)
-- With alternator failure light on, get out of the forbidden zone (see figure below) and switch off
-- the corresponding failed alternator.
end
function ExportScript.MaxCeiling(mainPanelDevice)
-- Ceiling (55k)
-- Service ceiling (50k)
-- Altimeter Pressure window
local altBaroStandby = ExportScript.Tools.round(mainPanelDevice:get_argument_value(1067) * 100000, 0)
local isAltitudeMax = 0 -- will be 0, 1, and 2
local maxAltText = 'Ceiling\nMAX ✅\nSVC ✅' -- below both limits
-- account for below sea level
if altBaroStandby > 90000 then
altBaroStandby = altBaroStandby - 100000
end
if altBaroStandby >= 55000 then -- above both
-- this does not work bc the standby attimeter stops at 50,000 TODO: fix that, somehow
maxAltText = 'Ceiling\nMAX ❌\nSVC ❌'
isAltitudeMax = 2
elseif altBaroStandby >= 50000 then -- above service, but not max
maxAltText = 'Ceiling\nMAX ✅\nSVC ❌'
isAltitudeMax = 1
end
ExportScript.Tools.SendData(8055, maxAltText)
ExportScript.Tools.SendData(8056, isAltitudeMax)
end
function ExportScript.OxygenIndicator(mainPanelDevice) -- TODO: Test
-- Oxygen needle, 0.38 is blank zone, 0.13 is red zone
local oxyNeedle = ExportScript.Tools.round(mainPanelDevice:get_argument_value(516) * 100, 0)
local oxygenExportText = 'Oxygen\n' .. oxyNeedle .. '%\n🟢' -- green
local isOxyDanger = 0 -- will be 0, 1, and 2
if oxyNeedle < 38 then -- blank zone
oxygenExportText = 'Oxygen\n' .. oxyNeedle .. '%\n🟡' -- yellow
isOxyDanger = 1
elseif oxyNeedle < 13 then -- red zone
oxygenExportText = 'Oxygen\n' .. oxyNeedle .. '%\n🔴' -- red
isOxyDanger = 2
end
ExportScript.Tools.SendData(8053, oxygenExportText)
ExportScript.Tools.SendData(8054, isOxyDanger)
local cockpitPressure = ExportScript.Tools.round(mainPanelDevice:get_argument_value(726) * 100000, 0)
cockpitPressure = round(cockpitPressure, -2) -- in hundreds
cockpitPressure = format_int(cockpitPressure)
ExportScript.Tools.SendData(8067, '\n' .. cockpitPressure .. ' ft')
end
function ExportScript.ChuteLimitLogic(mainPanelDevice)
-- if indicated airspeed is less than 210 kts, then chute can be deployed
local currentAirspeed = ExportScript.Tools.round(mainPanelDevice:get_argument_value(1023) * 1000, 0)
local chuteLimitKts = 200
local chuteWarnKts = 210
local chuteExportText = 'Chute\n🟢' -- green
local isChuteOverspeed = 0 -- will be 0, 1, and 2
if currentAirspeed > chuteWarnKts then
chuteExportText = 'Chute\n🔴' -- red
isChuteOverspeed = 2
elseif currentAirspeed > chuteLimitKts then
chuteExportText = 'Chute\n🟡' -- yellow
isChuteOverspeed = 1
end
ExportScript.Tools.SendData(8051, chuteExportText)
ExportScript.Tools.SendData(8052, isChuteOverspeed)
end
function ExportScript.FlowBlinker(mainPanelDevice)
local blink = mainPanelDevice:get_argument_value(719) -- FlowBlinker
if blink > 0.0010 then
blink = 1
else
blink = 0
end
ExportScript.Tools.SendData(8049, blink)
end
function ExportScript.DepressionAngleTables(mainPanelDevice)
-- There are 9 tables. You can use the RETARD OVER.RUN to get all
-- Display Demo (4 lines total)
-- 250 LD BOMBS/MATRA F4 Rockets
-- xxxkts/-xx°
-- x,xxx ft
-- Depression°
-- Set altitude via airspeed indicator
-- Mach/Airspeed indicator reference airspeed knob
local heightIndicator = ExportScript.Tools.round(mainPanelDevice:get_argument_value(1270), 2) -- round to two digits
-- unfortunately this control is not arg adjusted. weird values must be used
-- Overrun select thumbwheel
local overRun = ExportScript.Tools.round(mainPanelDevice:get_argument_value(775) * 10, 0)
if overRun > 9 then overRun = 0 end
local depCalcExportString = ''
local displayWeapon = ''
local displayKts = ''
local displayDive = ''
local displayAlt = ''
local displayDepAngle = ''
if overRun == 1 then -- MATRA F4 Rockets, 320kts, dive -10°
displayWeapon = 'MATRA F4'
displayKts = '320kts'
displayDive = '-10°'
if heightIndicator > 0.80 then -- detects 6,000ft
displayAlt = '6,000ft'
displayDepAngle = '100'
elseif heightIndicator > 0.70 then -- detects 5,000ft
displayAlt = '5,000ft'
displayDepAngle = '80'
elseif heightIndicator > 0.58 then -- detects 4,000ft
displayAlt = '4,000ft'
displayDepAngle = '65'
elseif heightIndicator > 0.44 then -- detects 3,000ft
displayAlt = '3,000ft'
displayDepAngle = '50'
elseif heightIndicator > 0.30 then -- detects 2,000ft
displayAlt = '2,000ft'
displayDepAngle = '30'
elseif heightIndicator > 0.18 then -- detects 1,500ft
displayAlt = '1,500ft'
displayDepAngle = '15'
elseif heightIndicator > 0.07 then -- detects 1,000ft
displayAlt = '1,000ft'
displayDepAngle = '0'
else
displayAlt = 'Set Alt w/\nknots bug'
end
elseif overRun == 2 then -- MATRA F4 Rockets, 420kts, dive -10°
displayWeapon = 'MATRA F4'
displayKts = '420kts'
displayDive = '-10°'
if heightIndicator > 0.80 then -- detects 6,000ft
displayAlt = '6,000ft'
displayDepAngle = '80'
elseif heightIndicator > 0.70 then -- detects 5,000ft
displayAlt = '5,000ft'
displayDepAngle = '60'
elseif heightIndicator > 0.58 then -- detects 4,000ft
displayAlt = '4,000ft'
displayDepAngle = '45'
elseif heightIndicator > 0.44 then -- detects 3,000ft
displayAlt = '3,000ft'
displayDepAngle = '25'
elseif heightIndicator > 0.30 then -- detects 2,000ft
displayAlt = '2,000ft'
displayDepAngle = '10'
elseif heightIndicator > 0.18 then -- detects 1,500ft
displayAlt = '1,500ft'
displayDepAngle = '5'
elseif heightIndicator > 0.07 then -- detects 1,000ft
displayAlt = '1,000ft'
displayDepAngle = '0'
else
displayAlt = 'Set Alt w/\nknots bug'
end
elseif overRun == 3 then -- MATRA F4 Rockets, 450kts, dive -10°
displayWeapon = 'MATRA F4'
displayKts = '450kts'
displayDive = '-10°'
if heightIndicator > 0.80 then -- detects 6,000ft
displayAlt = '6,000ft'
displayDepAngle = '70'
elseif heightIndicator > 0.70 then -- detects 5,000ft
displayAlt = '5,000ft'
displayDepAngle = '55'
elseif heightIndicator > 0.58 then -- detects 4,000ft
displayAlt = '4,000ft'
displayDepAngle = '40'
elseif heightIndicator > 0.44 then -- detects 3,000ft
displayAlt = '3,000ft'
displayDepAngle = '20'
elseif heightIndicator > 0.30 then -- detects 2,000ft
displayAlt = '2,000ft'
displayDepAngle = '10'
elseif heightIndicator > 0.18 then -- detects 1,500ft
displayAlt = '1,500ft'
displayDepAngle = '5'
elseif heightIndicator > 0.07 then -- detects 1,000ft
displayAlt = '1,000ft'
displayDepAngle = '0'
else
displayAlt = 'Set Alt w/\nknots bug'
end
elseif overRun == 4 then -- MATRA F4 Rockets, 400kts, dive -15°
displayWeapon = 'MATRA F4'
displayKts = '400kts'
displayDive = '-15°'
if heightIndicator > 0.80 then -- detects 6,000ft
displayAlt = '6,000ft'
displayDepAngle = '55'
elseif heightIndicator > 0.70 then -- detects 5,000ft
displayAlt = '5,000ft'
displayDepAngle = '45'
elseif heightIndicator > 0.58 then -- detects 4,000ft
displayAlt = '4,000ft'
displayDepAngle = '30'
elseif heightIndicator > 0.44 then -- detects 3,000ft
displayAlt = '3,000ft'
displayDepAngle = '20'
elseif heightIndicator > 0.30 then -- detects 2,000ft
displayAlt = '2,000ft'
displayDepAngle = '10'
elseif heightIndicator > 0.18 then -- detects 1,500ft
displayAlt = '1,500ft'
displayDepAngle = '10'
elseif heightIndicator > 0.07 then -- detects 1,000ft
displayAlt = '1,000ft'
displayDepAngle = '5'
else
displayAlt = 'Set Alt w/\nknots bug'
end
elseif overRun == 5 then -- MATRA F4 Rockets, 450kts, dive -15°
displayWeapon = 'MATRA F4'
displayKts = '450kts'
displayDive = '-15°'
if heightIndicator > 0.80 then -- detects 6,000ft
displayAlt = '6,000ft'
displayDepAngle = '50'
elseif heightIndicator > 0.70 then -- detects 5,000ft
displayAlt = '5,000ft'
displayDepAngle = '40'
elseif heightIndicator > 0.58 then -- detects 4,000ft
displayAlt = '4,000ft'
displayDepAngle = '25'
elseif heightIndicator > 0.44 then -- detects 3,000ft
displayAlt = '3,000ft'
displayDepAngle = '10'
elseif heightIndicator > 0.30 then -- detects 2,000ft
displayAlt = '2,000ft'
displayDepAngle = '0'
elseif heightIndicator > 0.18 then -- detects 1,500ft
displayAlt = '1,500ft'
displayDepAngle = '0'
elseif heightIndicator > 0.07 then -- detects 1,000ft
displayAlt = '1,000ft'
displayDepAngle = '0'
else
displayAlt = 'Set Alt w/\nknots bug'
end
elseif overRun == 6 then -- SAMP 250 LD Bombs, 400kts, dive -10°
displayWeapon = 'SAMP 250LD'
displayKts = '400kts'
displayDive = '-10°'
if heightIndicator > 0.30 then -- detects 2,000ft
displayAlt = '2,000ft'
displayDepAngle = '170'
elseif heightIndicator > 0.18 then -- detects 1,500ft
displayAlt = '1,500ft'
displayDepAngle = '140'
elseif heightIndicator > 0.07 then -- detects 1,000ft
displayAlt = '1,000ft'
displayDepAngle = '100'
else
displayAlt = 'Set Alt w/\nknots bug'
end
elseif overRun == 7 then -- SAMP 250 LD Bombs, 500kts, dive -10°
displayWeapon = 'SAMP 250LD'
displayKts = '500kts'
displayDive = '-10°'
if heightIndicator > 0.58 then -- detects 4,000ft
displayAlt = '4,000ft'
displayDepAngle = '175'
elseif heightIndicator > 0.44 then -- detects 3,000ft
displayAlt = '3,000ft'
displayDepAngle = '140'
elseif heightIndicator > 0.30 then -- detects 2,000ft
displayAlt = '2,000ft'
displayDepAngle = '105'
elseif heightIndicator > 0.18 then -- detects 1,500ft
displayAlt = '1,500ft'
displayDepAngle = '80'
elseif heightIndicator > 0.07 then -- detects 1,000ft
displayAlt = '1,000ft'
displayDepAngle = '55'
else
displayAlt = 'Set Alt w/\nknots bug'
end
elseif overRun == 8 then -- SAMP 250 LD Bombs, 420kts, dive -20°
displayWeapon = 'SAMP 250LD'
displayKts = '420kts'
displayDive = '-20°'
if heightIndicator > 0.58 then -- detects 4,000ft
displayAlt = '4,000ft'
displayDepAngle = '170'
elseif heightIndicator > 0.44 then -- detects 3,000ft
displayAlt = '3,000ft'
displayDepAngle = '140'
elseif heightIndicator > 0.30 then -- detects 2,000ft
displayAlt = '2,000ft'
displayDepAngle = '110'
elseif heightIndicator > 0.18 then -- detects 1,500ft
displayAlt = '1,500ft'
displayDepAngle = '85'
elseif heightIndicator > 0.07 then -- detects 1,000ft
displayAlt = '1,000ft'
displayDepAngle = '65'
else
displayAlt = 'Set Alt w/\nknots bug'
end
elseif overRun == 9 then -- SAMP 250 LD Bombs, 500kts, dive -20°
displayWeapon = 'SAMP 250LD'
displayKts = '500kts'
displayDive = '-20°'
if heightIndicator > 0.58 then -- detects 4,000ft
displayAlt = '4,000ft'
displayDepAngle = '125'
elseif heightIndicator > 0.44 then -- detects 3,000ft
displayAlt = '3,000ft'
displayDepAngle = '110'
elseif heightIndicator > 0.30 then -- detects 2,000ft
displayAlt = '2,000ft'
displayDepAngle = '70'
elseif heightIndicator > 0.18 then -- detects 1,500ft
displayAlt = '1,500ft'
displayDepAngle = '55'
elseif heightIndicator > 0.07 then -- detects 1,000ft
displayAlt = '1,000ft'
displayDepAngle = '35'
else
displayAlt = 'Set Alt w/\nknots bug'
end
end
depCalcExportString = displayWeapon
.. '\n' .. displayKts .. '/' .. displayDive
.. '\n' .. displayAlt
.. '\n' .. displayDepAngle .. ' Mrad'
if overRun == 0 then -- display a default value. might have to move this to the end
depCalcExportString = 'Dep Tables\n - Turn\nOverrun\nfor Tables'
end
ExportScript.Tools.SendData(8043, depCalcExportString)
if displayDepAngle == '' then displayDepAngle = 'XXX' end
ExportScript.Tools.SendData(8044, 'Mrad\n' .. displayDepAngle)
if displayDive == '' then displayDive = '-XX°' end
ExportScript.Tools.SendData(8045, 'Dive\n'.. displayDive)
if displayAlt == '' then displayAlt = 'XXXX' end
ExportScript.Tools.SendData(8046, 'Alt\n'.. displayAlt)
if displayKts == '' then displayKts = 'XXX' end
ExportScript.Tools.SendData(8047, 'Kts\n' .. displayKts)
if displayWeapon == '' then displayWeapon = 'Weapon' end
if displayWeapon == 'SAMP 250LD' then displayWeapon = 'SAMP\n250LD' end
if displayWeapon == 'MATRA F4' then displayWeapon = 'MATRA\nF4' end
ExportScript.Tools.SendData(8048, displayWeapon)
end
function ExportScript.HsiReadouts(mainPanelDevice)
-- aircraft heading
-- use the 360 because the hsi turns backwards...
local hsiHeading = 360 - ExportScript.Tools.round(mainPanelDevice:get_argument_value(1189) * 360, 0)
-- heading bug
local hsiHeadingBug = hsiHeading +
ExportScript.Tools.round(mainPanelDevice:get_argument_value(1190) * 360, 0)
if hsiHeadingBug > 360 then
hsiHeadingBug = hsiHeadingBug - 360
end
-- hsi needle 2
local hsiNeedle2 = hsiHeading +
ExportScript.Tools.round(mainPanelDevice:get_argument_value(1191) * 360, 0)
if hsiNeedle2 > 360 then
hsiNeedle2 = hsiNeedle2 - 360
end
-- hsi needle 1
local hsiNeedle1 = hsiHeading +
ExportScript.Tools.round(mainPanelDevice:get_argument_value(1192) * 360, 0)
if hsiNeedle1 > 360 then
hsiNeedle1 = hsiNeedle1 - 360
end
-- HSI distance readout
local hsiDistReadout_Xxx = ExportScript.Tools.round(mainPanelDevice:get_argument_value(1193) * 10, 0)
local hsiDistReadout_xXx = ExportScript.Tools.round(mainPanelDevice:get_argument_value(1194) * 10, 0)
local hsiDistReadout_xxX = ExportScript.Tools.round(mainPanelDevice:get_argument_value(1195) * 10, 0)
if hsiDistReadout_Xxx > 9 then hsiDistReadout_Xxx = 0 end
if hsiDistReadout_xXx > 9 then hsiDistReadout_xXx = 0 end
if hsiDistReadout_xxX > 9 then hsiDistReadout_xxX = 0 end
local hsiDistReadout = hsiDistReadout_Xxx .. hsiDistReadout_xXx .. hsiDistReadout_xxX
-- HSI bearing
local hsiBearingReadout_Xxx = ExportScript.Tools.round(mainPanelDevice:get_argument_value(1197) * 10, 0)
local hsiBearingReadout_xXx = ExportScript.Tools.round(mainPanelDevice:get_argument_value(1198) * 10, 0)
local hsiBearingReadout_xxX = ExportScript.Tools.round(mainPanelDevice:get_argument_value(1199) * 10, 0)
if hsiBearingReadout_Xxx > 9 then hsiBearingReadout_Xxx = 0 end
if hsiBearingReadout_xXx > 9 then hsiBearingReadout_xXx = 0 end
if hsiBearingReadout_xxX > 9 then hsiBearingReadout_xxX = 0 end
local hsiBearingReadout = hsiBearingReadout_Xxx .. hsiBearingReadout_xXx .. hsiBearingReadout_xxX
-- HSI vector distance
local hsiDistVectReadout_Xxx = ExportScript.Tools.round(mainPanelDevice:get_argument_value(1200) * 10, 0)
local hsiDistVectReadout_xXx = ExportScript.Tools.round(mainPanelDevice:get_argument_value(1201) * 10, 0)
local hsiDistVectReadout_xxX = ExportScript.Tools.round(mainPanelDevice:get_argument_value(1202) * 10, 0)
if hsiDistVectReadout_Xxx > 9 then hsiDistVectReadout_Xxx = 0 end
if hsiDistVectReadout_xXx > 9 then hsiDistVectReadout_xXx = 0 end
if hsiDistVectReadout_xxX > 9 then hsiDistVectReadout_xxX = 0 end
local hsiDistVectReadout = hsiDistVectReadout_Xxx .. hsiDistVectReadout_xXx .. hsiDistVectReadout_xxX
local brngSelect = ' '
local distSelect = ' '
local vectSelect = ' '
-- ➤
if mainPanelDevice:get_argument_value(1206) == 1 then
distSelect = ''
end
if mainPanelDevice:get_argument_value(1206) == 0 then
brngSelect = ''
end
if mainPanelDevice:get_argument_value(1205) == 1 then
vectSelect = ''
end
ExportScript.Tools.SendData(8022,'HDG ' .. prefixZerosFixedLength(hsiHeading,3)
.. '\nBUG ' .. prefixZerosFixedLength(hsiHeadingBug,3)
.. '\nDST ' .. hsiDistReadout
)
ExportScript.Tools.SendData(8023,'HDG ' .. prefixZerosFixedLength(hsiHeading,3)
.. '\nN1 ' .. prefixZerosFixedLength(hsiNeedle1,3)
.. '\nN2 ' .. prefixZerosFixedLength(hsiNeedle2,3)
)
ExportScript.Tools.SendData(8024, vectSelect .. 'VECT.'
.. '\n' .. brngSelect .. 'BRG ' .. hsiBearingReadout
.. '\n' .. distSelect .. 'DST ' .. hsiDistVectReadout
)
end
function ExportScript.AccelerometerReadout(mainPanelDevice)
local accelMax = ExportScript.Tools.round(mainPanelDevice:get_argument_value(217) * 11.5, 1)
local accelCurrent = ExportScript.Tools.round(mainPanelDevice:get_argument_value(218) * 11.5, 1)
local accelMin = ExportScript.Tools.round(mainPanelDevice:get_argument_value(219) * -11.5, 1)
if accelMin == 0 then accelMin = 0 end
ExportScript.Tools.SendData(8019,'G ' .. accelCurrent
.. '\nG MAX ' .. accelMax
.. '\nG MIN ' ..accelMin)
end
function ExportScript.EngineRestartLogic(mainPanelDevice)
-- Throttle at idle
-- Min 1100 RPM
-- Correct Airspeed
-- Correct Altitude
-- Move forward the in-flight relight button, located in the left console, under the throttle lever
-- Let's do this based on the altitude of the aircraft. It will determine the speed
-- Get the altitude using the standby altimeter
-- ✔
-- ✅ boxed
-- ❌
local isThrottleOk = 0
local isRpmOk = 0
local isAirspeedOk = 0
local isRestartOk = 0
local throttleIcon = ''
local rpmIcon = ''
local airspeedIcon = ''
local restartIcon = ''
-- Altimeter Pressure window
local altBaroStandby = ExportScript.Tools.round(mainPanelDevice:get_argument_value(1067) * 100000, 0)
local restartAirspeed = 0
-- Make an equation that fits the regions
if altBaroStandby > 90000 then
altBaroStandby = altBaroStandby - 100000
end
if altBaroStandby <= 20000 then
restartAirspeed = (-0.01 * altBaroStandby) + 600
else
restartAirspeed = (-0.0125 * altBaroStandby) + 550
end
local currentAirspeed = ExportScript.Tools.round(mainPanelDevice:get_argument_value(1023) * 1000, 0)
local ktsIndication = ' FST'
if currentAirspeed < restartAirspeed then
isAirspeedOk = 1
airspeedIcon = ''
ktsIndication = ' '
else
ktsIndication = ' FST' -- aircraft is too fast (above the envelope curve)
end
-- Engine RPM Check
local engineRPM = ExportScript.Tools.round(mainPanelDevice:get_argument_value(1027) * 10000, 0)
local rpmIndication
if engineRPM > 1100 then
isRpmOk = 1
rpmIcon = ''
rpmIndication = ' '
else
rpmIndication = ' LOW'
end
if mainPanelDevice:get_argument_value(234) < 0.01 then -- [234] = "%.4f", -- Throttle
isThrottleOk = 1
throttleIcon = ''
end
if isAirspeedOk == 1 and isRpmOk == 1 and isThrottleOk == 1 then
isRestartOk = 1
restartIcon = ''
end
-- Uniform spacing
-- ✔ Cutoff
-- ✔ RPM LO
-- ✔ Kts FST
-- ✔ RESTART
ExportScript.Tools.SendData(8020, throttleIcon .. ' Cutoff \n'
.. rpmIcon .. ' RPM' .. rpmIndication .. '\n'
.. airspeedIcon .. ' Kts' .. ktsIndication .. '\n'
.. restartIcon .. ' RESTART\n')
local isCutoff = 0
if mainPanelDevice:get_argument_value(234) < 0.01 -- if the throttle is at idle
or mainPanelDevice:get_argument_value(239) > 0.5 -- or if the cutoff switch is engaged
then -- use the second icon
isCutoff = 1
end
ExportScript.Tools.SendData(8021, isCutoff) -- this is for the icon
end
function ExportScript.CountermeasureReadouts(mainPanelDevice)
local cmChaff_Xx = ExportScript.Tools.round(mainPanelDevice:get_argument_value(210) * 10, 0)
local cmChaff_xX = ExportScript.Tools.round(mainPanelDevice:get_argument_value(211) * 10, 0)
local cmFlare_Xx = ExportScript.Tools.round(mainPanelDevice:get_argument_value(213) * 10, 0)
local cmFlare_xX = ExportScript.Tools.round(mainPanelDevice:get_argument_value(214) * 10, 0)
if cmChaff_Xx > 9 then
cmChaff_Xx = 0
end
if cmChaff_xX > 9 then
cmChaff_xX = 0
end
if cmFlare_Xx > 9 then
cmFlare_Xx = 0
end
if cmFlare_xX > 9 then
cmFlare_xX = 0
end
ExportScript.Tools.SendData(8014, cmChaff_Xx .. cmChaff_xX .. '\nCHAFF')
ExportScript.Tools.SendData(8015, cmFlare_Xx .. cmFlare_xX .. '\nFLARE')
ExportScript.Tools.SendData(8016, 'C ' .. cmChaff_Xx .. cmChaff_xX
.. '\nF ' .. cmFlare_Xx .. cmFlare_xX)
--[[ Spacing Demo
0.0=C F
H ⫷ L
A ⫷ A
F ⫷ R
F E,0.5=C F
H ⦾ L
A ⦾ A
F ⦾ R
F E,1.0=C F
H ⫸ L
A ⫸ A
F ⫸ R
F E
]]
local cmSelect = mainPanelDevice:get_argument_value(208)
local cmSelectString = 'C F\nH ⦾ L\nA ⦾ A\nF ⦾ R\nF E'
if cmSelect == 0 then
cmSelectString = 'C F\nH ⫷ L\nA ⫷ A\nF ⫷ R\nF E'
end
if cmSelect == 1 then
cmSelectString = 'C F\nH ⫸ L\nA ⫸ A\nF ⫸ R\nF E'
end
ExportScript.Tools.SendData(8017, cmSelectString)
end
function ExportScript.AoaIndicator(mainPanelDevice)
-- this scale is accurate above 10 AoA
-- below 10 AoA margin of error may be about 2 AoA
local multiplier = 24
local aoaLevel = ExportScript.Tools.round(mainPanelDevice:get_argument_value(203) * multiplier,1)
local aoaCircleColor = '' -- init with white
if aoaLevel < 30 then
aoaCircleColor = '🔴'
end
if aoaLevel < 15.5 then
aoaCircleColor = '🟡'
end
if aoaLevel < 12.5 then
aoaCircleColor = '🟢'
end
if aoaLevel < 9.5 then
aoaCircleColor = '🔵'
end
if aoaLevel < 6 then
aoaCircleColor = ''
end
if aoaLevel > 22 then -- actual indicator limit is 22
aoaLevel = 22
end
ExportScript.Tools.SendData(8037, 'AoA' .. aoaCircleColor .. '\n' .. round(aoaLevel,0))
end
function ExportScript.GearSlatLogic(mainPanelDevice)
-- Show different colors based on gear state
-- ⚪ white
-- ⚫ black
-- 🟡 yellow
-- 🔴 red
-- 🟢 green
-- 🔵 blue
-- Gear circle layout
-- 123 ⚪⚪⚪
-- 456 ⚪⚪⚪
-- 1 and 4 are either both green or both white
-- 3 and 6 are either both green or both white
-- 2 can be white or red
-- 5 can be white or red
local circle1 = '' -- init with white
local circle2 = '' -- init with white
local circle3 = '' -- init with white
local circle4 = '' -- init with white
local circle5 = '' -- init with white
local circle6 = '' -- init with white
-- transit light
if mainPanelDevice:get_argument_value(1091) > 0 then
circle2 = '🔴'
end
-- left gear
if mainPanelDevice:get_argument_value(1090) > 0 then
circle1 = '🟢'
circle4 = '🟢'
end
-- right gear
if mainPanelDevice:get_argument_value(1093) > 0 then
circle3 = '🟢'
circle6 = '🟢'
end
-- main tire light
if mainPanelDevice:get_argument_value(1092) > 0 then
circle5 = '🟢'
end
local gearArrow = ''
if mainPanelDevice:get_argument_value(86) == 1 then
gearArrow = ''
end
ExportScript.Tools.SendData(8035, 'GEAR' .. gearArrow
.. '\n' .. circle1 .. circle2 .. circle3
.. '\n' .. circle4 .. circle5 .. circle6
)
local slatLight = '' -- init with white
local flapLight = '' -- init with white
local slatTransitLight = '' -- init with white
local flapTransitLight = '' -- init with white
-- ⚪ white
-- ⚫ black
-- 🟡 yellow
-- 🔴 red
-- 🟢 green
-- Slats
if mainPanelDevice:get_argument_value(1083) > 0 then
slatLight = '🟢'
end
if mainPanelDevice:get_argument_value(1084) > 0 then
slatLight = '🟡'
end
if mainPanelDevice:get_argument_value(1085) > 0 then
slatTransitLight = '🔴'
end
-- Flaps
if mainPanelDevice:get_argument_value(1086) > 0 then
flapTransitLight = '🔴'
end
if mainPanelDevice:get_argument_value(1087) > 0 then
flapLight = '🟡'
end
if mainPanelDevice:get_argument_value(1088) > 0 then
flapLight = '🟢'
end
local flapArrow = ''
if mainPanelDevice:get_argument_value(248) == 1 then
flapArrow = ''
end
if mainPanelDevice:get_argument_value(248) == 0.5 then
flapArrow = ''
end
if mainPanelDevice:get_argument_value(248) == 0 then
flapArrow = ''
end
ExportScript.Tools.SendData(8036, 'FLAP' .. flapArrow
.. '\n' .. slatTransitLight .. flapTransitLight
.. '\n' .. slatLight .. flapLight
)
end
function ExportScript.WeaponPushbuttonLogic(mainPanelDevice)
-- light up the button when the button is lit or when depressed
local isExtGon = 0
local isMgFuson = 0
local isCanAon = 0
local isBombVolon = 0
local isExtDon = 0
local isMDon = 0
local isCanSRoQon = 0
local isBombFuson = 0
if mainPanelDevice:get_argument_value(604) > 0 or mainPanelDevice:get_argument_value(605) > 0 then
isExtGon = 1
end
if mainPanelDevice:get_argument_value(606) > 0 or mainPanelDevice:get_argument_value(607) > 0 then
isMgFuson = 1
end
if mainPanelDevice:get_argument_value(608) > 0 or mainPanelDevice:get_argument_value(609) > 0 then
isCanAon = 1
end
if mainPanelDevice:get_argument_value(610) > 0 or mainPanelDevice:get_argument_value(611) > 0 then
isBombVolon = 1
end
if mainPanelDevice:get_argument_value(612) > 0 or mainPanelDevice:get_argument_value(613) > 0 then
isExtDon = 1
end
if mainPanelDevice:get_argument_value(614) > 0 or mainPanelDevice:get_argument_value(615) > 0 then
isMDon = 1
end
if mainPanelDevice:get_argument_value(616) > 0 or mainPanelDevice:get_argument_value(617) > 0 then
isCanSRoQon = 1
end
if mainPanelDevice:get_argument_value(618) > 0 or mainPanelDevice:get_argument_value(619) > 0 then
isBombFuson = 1
end
ExportScript.Tools.SendData(8027, isExtGon)
ExportScript.Tools.SendData(8028, isMgFuson)
ExportScript.Tools.SendData(8029, isCanAon)
ExportScript.Tools.SendData(8030, isBombVolon)
ExportScript.Tools.SendData(8031, isExtDon)
ExportScript.Tools.SendData(8032, isMDon)
ExportScript.Tools.SendData(8033, isCanSRoQon)
ExportScript.Tools.SendData(8034, isBombFuson)
end
function ExportScript.AutopilotLightLogic(mainPanelDevice)
local isPAon = 0
local isALTon = 0
local isCAPon = 0
local isRon = 0
local isGon = 0
if mainPanelDevice:get_argument_value(975) > 0 or mainPanelDevice:get_argument_value(976) > 0 then
isPAon = 1
end
if mainPanelDevice:get_argument_value(978) > 0 or mainPanelDevice:get_argument_value(979) > 0 then
isALTon = 1
end
if mainPanelDevice:get_argument_value(981) > 0 then
isCAPon = 1
end
if mainPanelDevice:get_argument_value(983) > 0 or mainPanelDevice:get_argument_value(984) > 0
or mainPanelDevice:get_argument_value(985) > 0 or mainPanelDevice:get_argument_value(986) > 0 then
isRon = 1
end
if mainPanelDevice:get_argument_value(988) > 0 or mainPanelDevice:get_argument_value(989) > 0
or mainPanelDevice:get_argument_value(990) > 0 or mainPanelDevice:get_argument_value(991) > 0 then
isGon = 1
end
ExportScript.Tools.SendData(8038, isPAon)
ExportScript.Tools.SendData(8039, isALTon)
ExportScript.Tools.SendData(8040, isCAPon)
ExportScript.Tools.SendData(8041, isRon)
ExportScript.Tools.SendData(8042, isGon)
end
function ExportScript.VorIlsTacanOmnibearing(mainPanelDevice)
-- VOR_ILS
local vor_ils_Xxxxx = ExportScript.Tools.round(mainPanelDevice:get_argument_value(498) * 10, 0)
local vor_ils_xXxxx = ExportScript.Tools.round(mainPanelDevice:get_argument_value(499) * 10, 0)
local vor_ils_xxXxx = ExportScript.Tools.round(mainPanelDevice:get_argument_value(500) * 10, 0)
local vor_ils_dot = '.'
local vor_ils_xxxXx = ExportScript.Tools.round(mainPanelDevice:get_argument_value(501) * 10, 0)
local vor_ils_xxxxX = ExportScript.Tools.round(mainPanelDevice:get_argument_value(502) * 10, 0)
if vor_ils_xxXxx > 9 then vor_ils_xxXxx = 0 end -- corrects rounding errors in the module
if vor_ils_xxxXx > 9 then vor_ils_xxxXx = 0 end
local ilsReadout = vor_ils_Xxxxx .. vor_ils_xXxxx .. vor_ils_xxXxx
.. vor_ils_dot .. vor_ils_xxxXx .. vor_ils_xxxxX
ExportScript.Tools.SendData(8000, 'VOR_ILS\n' .. ilsReadout)
-- TACAN
local tacan_XY = ExportScript.Tools.round(mainPanelDevice:get_argument_value(481) * 10, 0)
local tacan_Xxx = ExportScript.Tools.round(mainPanelDevice:get_argument_value(482) * 10, 0)
local tacan_xXx = ExportScript.Tools.round(mainPanelDevice:get_argument_value(483) * 10, 0)
local tacan_xxX = ExportScript.Tools.round(mainPanelDevice:get_argument_value(484) * 10, 0)
if tacan_XY > 1 then
tacan_XY = 'Y'
else
tacan_XY = 'X'
end
if tacan_Xxx < 1 then tacan_Xxx = ' ' end
if tacan_xXx > 9 then tacan_xXx = 0 end
if tacan_xxX > 9 then tacan_xxX = 0 end
local tacanReadout = tacan_XY .. tacan_Xxx .. tacan_xXx .. tacan_xxX
ExportScript.Tools.SendData(8001, 'TACAN\n' .. tacanReadout)
ExportScript.Tools.SendData(8025, 'TACAN\n' .. tacan_Xxx .. tacan_xXx .. '-')
ExportScript.Tools.SendData(8026, 'TACAN\n' .. '-' .. tacan_xxX)
-- Omnibearing Indicator (Course)
local omni_Xxx = ExportScript.Tools.round(mainPanelDevice:get_argument_value(541) * 10, 0)
local omni_xXx = ExportScript.Tools.round(mainPanelDevice:get_argument_value(542) * 10, 0)
local omni_xxX = ExportScript.Tools.round(mainPanelDevice:get_argument_value(543) * 10, 0)
if omni_Xxx > 9 then omni_Xxx = 0 end
if omni_xXx > 9 then omni_xXx = 0 end
if omni_xxX > 9 then omni_xxX = 0 end
local omniReadout = omni_Xxx .. omni_xXx .. omni_xxX
ExportScript.Tools.SendData(8002, 'OMNI\n' .. omniReadout)
ExportScript.Tools.SendData(8003, 'TCN ' .. tacanReadout
.. '\nNAV ' .. ilsReadout
.. '\nOMNI ' .. omniReadout)
end
function ExportScript.CockpitInstruments(mainPanelDevice)
-- Engine RPM
local engineRPM = ExportScript.Tools.round(mainPanelDevice:get_argument_value(1027) * 10000, 0)
engineRPM = format_int(engineRPM)
-- Engine temp needle
local engineTemp = ExportScript.Tools.round(mainPanelDevice:get_argument_value(1028) * 1000, 0)
engineTemp = format_int(engineTemp)
ExportScript.Tools.SendData(8004, 'Engine\n' .. engineRPM .. ' RPM' .. '\n' .. engineTemp .. ' °C')
local fuelG_needle = mainPanelDevice:get_argument_value(1142)
if fuelG_needle < 0.8 then
fuelG_needle = ExportScript.Tools.round(fuelG_needle * 1000, 0)
elseif fuelG_needle < 0.9 then
fuelG_needle = ExportScript.Tools.round(fuelG_needle * 2000 - 800, 0)
elseif fuelG_needle < 0.968 then
fuelG_needle = ExportScript.Tools.round(fuelG_needle * 13158 - 10737, 0)
else
fuelG_needle = ExportScript.Tools.round(fuelG_needle * 6250 - 4050, 0)
end
local fuelD_needle = mainPanelDevice:get_argument_value(1143)
if fuelD_needle < 0.8 then
fuelD_needle = ExportScript.Tools.round(fuelD_needle * 1000, 0)
elseif fuelD_needle < 0.9 then
fuelD_needle = ExportScript.Tools.round(fuelD_needle * 2000 - 800, 0)
elseif fuelD_needle < 0.968 then
fuelD_needle = ExportScript.Tools.round(fuelD_needle * 13158 - 10737, 0)
else
fuelD_needle = ExportScript.Tools.round(fuelD_needle * 6250 - 4050, 0)
end
local fuelTot_needle = fuelG_needle + fuelD_needle
local fuelTot_needle_format
if fuelTot_needle > 3812 then --3812
fuelTot_needle_format = format_int(fuelTot_needle) .. '+'
else
fuelTot_needle_format = format_int(fuelTot_needle)
end
local fuelG_needle_format = format_int(fuelG_needle)
local fuelD_needle_format = format_int(fuelD_needle)
ExportScript.Tools.SendData(8005, 'Fuel (L)\nTot ' .. fuelTot_needle_format
.. '\nG ' .. fuelG_needle_format
.. '\nD ' .. fuelD_needle_format
)
-- Fuel quantity indicator
local fuelQty_Xxxx = ExportScript.Tools.round(mainPanelDevice:get_argument_value(1146) * 10, 0)
local fuelQty_xXxx = ExportScript.Tools.round(mainPanelDevice:get_argument_value(1147) * 10, 0)
local fuelQty_xxXx = ExportScript.Tools.round(mainPanelDevice:get_argument_value(1148) * 10, 0)
local fuelQty_xxxX = ExportScript.Tools.round(mainPanelDevice:get_argument_value(1149) * 10, 0)
if fuelQty_Xxxx > 9 then fuelQty_Xxxx = 0 end
if fuelQty_xXxx > 9 then fuelQty_xXxx = 0 end
if fuelQty_xxXx > 9 then fuelQty_xxXx = 0 end
if fuelQty_xxxX > 9 then fuelQty_xxxX = 0 end
local fuelQtyTotal = fuelQty_Xxxx .. fuelQty_xXxx .. fuelQty_xxXx .. fuelQty_xxxX
ExportScript.Tools.SendData(8006, 'Fuel (L)\nTot ' .. format_int(fuelQtyTotal)
.. '\nG ' .. format_int(fuelG_needle)
.. '\nD ' .. format_int(fuelD_needle)
)
-- Altimeter Pressure window
local altBaroPress_Xxxx = ExportScript.Tools.round(mainPanelDevice:get_argument_value(1049) * 10, 0)
local altBaroPress_xXxx = ExportScript.Tools.round(mainPanelDevice:get_argument_value(1050) * 10, 0)
local altBaroPress_xxXx = ExportScript.Tools.round(mainPanelDevice:get_argument_value(1051) * 10, 0)
local altBaroPress_xxxX = ExportScript.Tools.round(mainPanelDevice:get_argument_value(1052) * 10, 0)
if altBaroPress_Xxxx > 9 then altBaroPress_Xxxx = 0 end
if altBaroPress_xXxx > 9 then altBaroPress_xXxx = 0 end
if altBaroPress_xxXx > 9 then altBaroPress_xxXx = 0 end
if altBaroPress_xxxX > 9 then altBaroPress_xxxX = 0 end
local altBaroPressReadout = altBaroPress_Xxxx .. altBaroPress_xXxx .. altBaroPress_xxXx .. altBaroPress_xxxX
-- Altimeter
local altBaro_Xxxxx = ExportScript.Tools.round(mainPanelDevice:get_argument_value(1045) * 10, 0)
local altBaro_xXxxx = ExportScript.Tools.round(mainPanelDevice:get_argument_value(1046) * 10, 0)
local altBaro_xxXxx = ExportScript.Tools.round(mainPanelDevice:get_argument_value(1047) * 10, 0)
local altBaro_xxxXX = ExportScript.Tools.round(mainPanelDevice:get_argument_value(1048) * 100, 0) -- goes in 10s
if altBaro_Xxxxx > 9 or altBaro_Xxxxx < 0 then altBaro_Xxxxx = 0 end
if altBaro_xXxxx > 9 or altBaro_xXxxx < 0 then altBaro_xXxxx = 0 end
if altBaro_xxXxx > 9 or altBaro_xxXxx < 0 then altBaro_xxXxx = 0 end
if altBaro_xxxXX > 90 or altBaro_xxxXX < 0 then altBaro_xxxXX = 0 end
altBaro_xxxXX = round(altBaro_xxxXX, -1)
altBaro_xxxXX = prefixZerosFixedLength(altBaro_xxxXX,2)
local altBaroReadout = altBaro_Xxxxx .. altBaro_xXxxx .. altBaro_xxXxx .. altBaro_xxxXX
altBaroReadout = round(altBaroReadout,-2)
-- Vertical speed needle
local vsiReadout = ExportScript.Tools.round(mainPanelDevice:get_argument_value(1025) * 10000, 0)
if vsiReadout < 5999 and vsiReadout > -5999 then
vsiReadout = format_int(round(vsiReadout,-2)) .. ' fpm'
else
vsiReadout = format_int(round(vsiReadout,-2)) .. '+ fpm'
end
ExportScript.Tools.SendData(8007, 'FLT INST\n'
.. format_int(altBaroReadout) .. ' ft\n'
.. altBaroPressReadout .. ' mb\n'
.. vsiReadout
)
end
function ExportScript.qfeCalculator(mainPanelDevice)
-- Altimeter Pressure window
local altBaroPress_Xxxx = ExportScript.Tools.round(mainPanelDevice:get_argument_value(1049) * 10, 0)
local altBaroPress_xXxx = ExportScript.Tools.round(mainPanelDevice:get_argument_value(1050) * 10, 0)
local altBaroPress_xxXx = ExportScript.Tools.round(mainPanelDevice:get_argument_value(1051) * 10, 0)
local altBaroPress_xxxX = ExportScript.Tools.round(mainPanelDevice:get_argument_value(1052) * 10, 0)
if altBaroPress_Xxxx > 9 then altBaroPress_Xxxx = 0 end
if altBaroPress_xXxx > 9 then altBaroPress_xXxx = 0 end
if altBaroPress_xxXx > 9 then altBaroPress_xxXx = 0 end
if altBaroPress_xxxX > 9 then altBaroPress_xxxX = 0 end
local altBaroPressReadout = altBaroPress_Xxxx .. altBaroPress_xXxx .. altBaroPress_xxXx .. altBaroPress_xxxX
-- Altimeter Pressure window
local altBaroStandbyPress_Xxxx = ExportScript.Tools.round(mainPanelDevice:get_argument_value(1068) * 10, 0)
local altBaroStandbyPress_xXxx = ExportScript.Tools.round(mainPanelDevice:get_argument_value(1069) * 10, 0)
local altBaroStandbyPress_xxXx = ExportScript.Tools.round(mainPanelDevice:get_argument_value(1070) * 10, 0)
local altBaroStandbyPress_xxxX = ExportScript.Tools.round(mainPanelDevice:get_argument_value(1071) * 10, 0)
if altBaroStandbyPress_Xxxx > 9 then altBaroStandbyPress_Xxxx = 0 end
if altBaroStandbyPress_xXxx > 9 then altBaroStandbyPress_xXxx = 0 end
if altBaroStandbyPress_xxXx > 9 then altBaroStandbyPress_xxXx = 0 end
if altBaroStandbyPress_xxxX > 9 then altBaroStandbyPress_xxxX = 0 end
local altBaroStandbyPressReadout = altBaroStandbyPress_Xxxx .. altBaroStandbyPress_xXxx .. altBaroStandbyPress_xxXx .. altBaroStandbyPress_xxxX
-- Manual gravity drop selection Mrad
local mrad_Xxx = ExportScript.Tools.round(mainPanelDevice:get_argument_value(766) * 10, 0)
local mrad_xXx = ExportScript.Tools.round(mainPanelDevice:get_argument_value(767) * 10, 0)
local mrad_xxX = ExportScript.Tools.round(mainPanelDevice:get_argument_value(768) * 10, 0)
if mrad_Xxx > 9 then mrad_Xxx = 0 end
if mrad_xXx > 9 then mrad_xXx = 0 end
if mrad_xxX > 9 then mrad_xxX = 0 end
local mradReadout = mrad_Xxx .. mrad_xXx .. mrad_xxX
ExportScript.Tools.SendData(8018, mradReadout .. '\nMrad')
-- Calculation for altimeter based
local pressureDiff = altBaroStandbyPressReadout - altBaroPressReadout
local altitudeDiff = pressureDiff * 27.3 -- 30 ft per milibar (mb) (ISA is 27.3. generally accepted is 30)
ExportScript.Tools.SendData(8008, 'QFE Calc\n'
.. 'Tgt ' .. altBaroPressReadout .. '\n'
.. 'Alt ' .. altBaroStandbyPressReadout .. '\n'
.. 'Tgt ' .. round(altitudeDiff,0) .. 'ft'
)
-- Calculation for mrad based
-- Mrad as hundreds of feet, eg, if 008 is shown it will be 800 ft
-- The Known value is the altitude of the target
-- The result is the altimeter setting for the target
local pressureDiffMrad = (mradReadout * 100) / 27.3 -- * 100 for hundreds of feet, up to 21,800
--local diffHigher = altBaroStandbyPressReadout + pressureDiffMrad
local diffHigher = altBaroStandbyPressReadout - pressureDiffMrad
--local diffLower = altBaroStandbyPressReadout - pressureDiffMrad
ExportScript.Tools.SendData(8009, 'QFE Calc\n'
.. 'mRad ' .. mradReadout .. '\n' -- known difference in takeoff vs tgt altitude(?) or is it absolute tgt altitude? we want absolute altitude
.. 'Baro ' .. altBaroStandbyPressReadout .. '\n'
.. 'Tgt ' .. round(diffHigher,0) .. '\n' -- double check hi or lo
--.. 'ELo ' .. round(diffLower,0)
) -- TODO: double check hi or lo
end
function ExportScript.clockTimer(mainPanelDevice)
local clockHour = ExportScript.Tools.round(mainPanelDevice:get_argument_value(64), 4) -- 0.25
clockHour = clockHour * 12 -- 3
clockHour = clockHour * 60 -- 180
clockHour = clockHour * 60 -- 10,800
clockHour = formatTime(clockHour)
local clockTimer = ExportScript.Tools.round(mainPanelDevice:get_argument_value(65), 4)
-- up to 15 minutes
-- .333 is about 5 minutes
clockTimer = clockTimer * 15 -- 4.995
clockTimer = clockTimer * 60 -- 299.7
clockTimer = formatTime2(clockTimer)
ExportScript.Tools.SendData(8010, 'Time\nC ' .. clockHour .. '\nT ' .. clockTimer)
end
function ExportScript.Radios(mainPanelDevice)
-- UHF radio logic (rear radio)
local UHF_RADIO = GetDevice(7)
local uhfFreq = ExportScript.Tools.RoundFreqeuncy((UHF_RADIO:get_frequency()/1000000))
local uhfChannel = ExportScript.Tools.round(mainPanelDevice:get_argument_value(348) * 20, 0)
-- because the knob is offset, we have to do some maths
uhfChannel = uhfChannel + 1
if uhfChannel > 20 then -- 20 is the max channel number
uhfChannel = uhfChannel - 20
end
ExportScript.Tools.SendData(8011, 'UHF\n' .. 'CH ' .. uhfChannel .. '\n' .. uhfFreq)
-- VUHF radio logic (front radio)
local VUHF_RADIO = GetDevice(6)
local vuhfFreq = ExportScript.Tools.RoundFreqeuncy((VUHF_RADIO:get_frequency()/1000000))
local vuhfChannel = ExportScript.Tools.round(mainPanelDevice:get_argument_value(283) * 20, 0)
-- because the knob is offset, we have to do some maths
vuhfChannel = vuhfChannel + 1
if vuhfChannel > 20 then -- 20 is the max channel number
vuhfChannel = vuhfChannel - 20
end
-- M will replace the channel number if the radio is in manual mode
if ExportScript.Tools.round(mainPanelDevice:get_argument_value(282), 1) == 0.0 then -- Manual mode
vuhfChannel = 'M'
end
if ExportScript.Tools.round(mainPanelDevice:get_argument_value(282), 1) == 1.0 then -- Manual mode
vuhfChannel = 'G'
end
ExportScript.Tools.SendData(8012, 'V/UHF\n' .. 'CH ' .. vuhfChannel .. '\n' .. vuhfFreq)
-- Combined readouts
ExportScript.Tools.SendData(8013, 'V/UHF (' .. vuhfChannel .. ')\n' .. vuhfFreq
.. '\nUHF (' .. uhfChannel .. ')\n' .. uhfFreq)
end
function ExportScript.DeviceMetaTableLogDump(mainPanelDevice)
local ltmp1 = 0
for ltmp2 = 1, 30, 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
function ExportScript.ListIndicationLogDump(mainPanelDevice)
local ltmp1 = 0
for ltmp2 = 0, 30, 1 do
ltmp1 = list_indication(ltmp2)
ExportScript.Tools.WriteToLog(ltmp2 ..': '..ExportScript.Tools.dump(ltmp1))
end
end
----------------------
-- Helper Functions --
----------------------
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 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 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 formatTime(time) -- time in seconds
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)
.. "h" .. string.format("%02d", minutes)
--.. "-" .. string.format("%02d", seconds) -- no seconds because there isn't a seconds hand
end
function formatTime2(time) -- time in seconds
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) -- no hrs because there isn't a hrs hand
string.format("%02d", minutes)
.. "m" .. string.format("%02d", seconds)
end
function formatTime3(time) -- time in seconds
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) -- '¦' could be used
.. "h" .. string.format("%02d", minutes)
.. "m" .. string.format("%02d", seconds) -- no seconds because there isn't a seconds hand
end
--[[Note about Feet per millibar (hectopascal):
For calculation purposes it can be helpful to know how many feet are in a millibar. In general 30 ft is the value used
in most books and exam questions. However, this is only just about right in the lower layers of our atmosphere (up to about 5000 ft).
Since pressure change with height is variable with height, so is the number of feet fitting in a millibar.
Formula:
* 96 x (absolute temperature (273K + actual temperature) / altitude pressure (millibars))
In the case of the ISA at sea level this will give you 27,3 ft.
* 96 x ((273+15) / 1013)
]]