y2kiah Posted November 17, 2010 Posted November 17, 2010 Hi all, just wanted to share something random that I figured out in the beta that could possibly help others get Export.lua to work. normally when you would use the io library to output to a file, you'd use the "simple" model (not my term for it) which looks something like this local file = io.open("./Temp/Export.log", "w") if file then io.output(file) io.write("---Log: Start-----", "\n") io.flush() end io.close() so what you're doing here with the io.output(file) line is telling the standard output stream to redirect its output into the file that you just created. Then, io.output(), io.flush(), io.close() etc. works on the standard output stream. This is completely valid Lua, and it should work, and it DID work in FC2 and BS, but for some reason it does not work in A-10C and it can either stop your script from running completely, or halt it at the first troublesome line. To fix, we can switch to using the "complete" io model (also not my term). The equivalent to the lines above is as follows: file = io.open("./Temp/Export.log", "w") if file then file:write("---Log: Start-----", "\n") file:flush() end file:close() Notice I made the "file" variable global, and removed the io.output(file) line completely. This fixed my problems getting Export.lua to work, and if anyone is using Oakes' script to connect to SIOC, this should help you out too. 1
Rockeyes Posted November 17, 2010 Posted November 17, 2010 (edited) Thanks for posting that up I’m sure that will come in very handy. In the meantime I will some how have to find a way of finding the info again when needed. Edited November 20, 2010 by Rockeyes [sIGPIC][/sIGPIC] HTC Vive Windows 10 Maximus VIII Hero i7-6700k CPU @ 4.2GHz 16GB Nvida GeForce GTX 1080. Ram Duel SSD's
Gadroc Posted November 17, 2010 Posted November 17, 2010 Thanks for posting that. I'm converting my BS scripts over tonight and you probably just saved me an hour or so of frustration!
sweinhart3 Posted November 19, 2010 Posted November 19, 2010 Any chance you will share the files when your done? Ive been procrastinating trying to write my own files since I heard Export.lua wasnt working. Intel i7 990X, 6GB DDR3, Nvidia GTX 470 x2 SLI, Win 7 x64 http://picasaweb.google.com/sweinhart
gofrm76 Posted November 19, 2010 Posted November 19, 2010 socket:send() / socket:receive() last night i created a small program in c# that can communicate with the DCS-Sims via the export-script. reading data works for BS and WH but writing data seems to be a bit of a problem. triggering commands from my program works fine for BS but WH refuses to read the command from the socket. i have tested it with BS 1.0.2 and WH beta1. same c#-binary and same export-script except the above mentioned changes to the file-writer in WH. to test this, i simply sent a single byte over to DCS to change the view (cockpit=7, aircraft=8, flyby=9). in BS i can read the byte using the lua c:receive() method and change the view with the LoSetCommand() method, but in WH i only get back a nil-value from the receive()-method. is this a WIP-issue (what i don't believe because to this point the sim itself isn't involved), or are there any changes in the syntax because of a newer lua-version? i have a quite good understanding for programming in java and c# since i do this for a living but i am a total newbie to lua. :helpsmilie: AH-64D | AV-8B | A-10C II | A-4E | F-4E | F-5E | F-14B | F-15E | F-16C | F/A-18C | M-2000C | UH-1H | Mig-21bis | L-39 | F-86F | P-47D | P-51D | BF 109 | Spitfire | BS3 | FC3 | SC | CA Intel® Core™ i7-13700K | NVIDIA RTX 4090 | 64 GB DDR5 RAM | Aorus Elite Z790 | 50“ UHD LG Monitor | Windows 11 Pro VPC Rotor TCS Plus Base | VPC Apache-64 Collective Grip | VPC Hawk-60 Collective Grip | VPC MongoosT-50CM3 Base | TM F-16/A-10 Stick | TM F/A-18 Stick TM HOTAS Warthog (DSE Slew Upgrade) | TM Hotas Cougar (FSSB) | TM Pendular Rudder | HP Reverb G2 | TrackIR 5
y2kiah Posted November 19, 2010 Author Posted November 19, 2010 Too bad to hear about the socket issue, I hope it will work in the beta, haven't tried that myself yet. Quick test I did, switching the EMER FLOOD switch on and off every 3 seconds, worked when I used the device.performClickableAction function but did not work when I used the SetCommand function. Not really sure why, I found them to be pretty much equivalent in BS. My feeling is they have not touched much of this export stuff since BS, and it still has a lot of legacy Lock-On stuff in the global scope that needs to be cleaned up. I think it just needs some attention from one of the ED programmers, hopefully before the product is launched, but I can see why they might delay that for a patch after launch. What I'd really like to see, if they could, is to expand the metatable of userdata returned from the GetDevice function. Right now all I see is performClickableAction and SetCommand (and I think some output stuff is missing right now that was available in BS). It would make life very easy if they also had a GetIndicator() function for each device, and a list of indicator id's as well, of course. I see a GetIndicator() function in global scope, but I have no idea if it works or how to use it.
Gadroc Posted November 19, 2010 Posted November 19, 2010 Any chance you will share the files when your done? Ive been procrastinating trying to write my own files since I heard Export.lua wasnt working. Yes. I'll post it when I've tested it.
Gadroc Posted November 19, 2010 Posted November 19, 2010 Too bad to hear about the socket issue, I hope it will work in the beta, haven't tried that myself yet. Quick test I did, switching the EMER FLOOD switch on and off every 3 seconds, worked when I used the device.performClickableAction function but did not work when I used the SetCommand function. Not really sure why, I found them to be pretty much equivalent in BS. My feeling is they have not touched much of this export stuff since BS, and it still has a lot of legacy Lock-On stuff in the global scope that needs to be cleaned up. I think it just needs some attention from one of the ED programmers, hopefully before the product is launched, but I can see why they might delay that for a patch after launch. What I'd really like to see, if they could, is to expand the metatable of userdata returned from the GetDevice function. Right now all I see is performClickableAction and SetCommand (and I think some output stuff is missing right now that was available in BS). It would make life very easy if they also had a GetIndicator() function for each device, and a list of indicator id's as well, of course. I see a GetIndicator() function in global scope, but I have no idea if it works or how to use it. I had problems with setcommand in Black Shark as well and ended up using device.performClickableAction for everything. What do you want GetIndicator for? All of the indicators should be available via the GetDevice(0):get_argument_value(argid) setup. You just need to dig through the main_panel_init file and get the right argument id which triggers them to light up.
y2kiah Posted November 19, 2010 Author Posted November 19, 2010 That's exactly what I found missing in WH, no update_arguments and no get_argument_value for the WH devices (at least, the few devices I've tried). Works for you?
Gadroc Posted November 19, 2010 Posted November 19, 2010 I was ripping out the Black Shark specific code last night and didn't get a chance to test with WH before wife quality time box kicked in. That sucks if those are missing!! I'll let you know what I find.
gofrm76 Posted November 19, 2010 Posted November 19, 2010 (edited) Quick test I did, switching the EMER FLOOD switch on and off every 3 seconds, worked when I used the device.performClickableAction function but did not work when I used the SetCommand function. how to you trigger the device.performClickableAction-command? do you have some kind of input-device or do you just execute the command in some kind of loop in the LuaExportBeforeNextFrame()? are there any other options to connect to / get input from external devices besides socket? Edited November 19, 2010 by gofrm76 AH-64D | AV-8B | A-10C II | A-4E | F-4E | F-5E | F-14B | F-15E | F-16C | F/A-18C | M-2000C | UH-1H | Mig-21bis | L-39 | F-86F | P-47D | P-51D | BF 109 | Spitfire | BS3 | FC3 | SC | CA Intel® Core™ i7-13700K | NVIDIA RTX 4090 | 64 GB DDR5 RAM | Aorus Elite Z790 | 50“ UHD LG Monitor | Windows 11 Pro VPC Rotor TCS Plus Base | VPC Apache-64 Collective Grip | VPC Hawk-60 Collective Grip | VPC MongoosT-50CM3 Base | TM F-16/A-10 Stick | TM F/A-18 Stick TM HOTAS Warthog (DSE Slew Upgrade) | TM Hotas Cougar (FSSB) | TM Pendular Rudder | HP Reverb G2 | TrackIR 5
y2kiah Posted November 19, 2010 Author Posted November 19, 2010 I was ripping out the Black Shark specific code last night and didn't get a chance to test with WH before wife quality time box kicked in. That sucks if those are missing!! I'll let you know what I find. Well nevermind they are not missing everything seems to be under the main panel device id 0. Some other device ids also have unique functions like UHF_RADIO has set_frequency(), get_frequency(), and is_on(). Strange that they would group indicators for TACAN, ILS, and VHF under the main panel, but UHF under its own device id. Confusing, but workable. I'll just need to make an inventory of available functions, will post it shortly.
y2kiah Posted November 19, 2010 Author Posted November 19, 2010 Here is a dump of the metatable for all devices, shows some interesting functions we can use on many of them. The majority of indicator lamps and some other stuff is grouped under the main panel (device 0). MAIN_PANEL = { __index = { get_argument_value = function: 46349110 performClickableAction = function: 454E9628 update_arguments = function: 46349038 set_argument_value = function: 46349160 SetCommand = function: 454E95B0 } } devices.FM_PROXY = { __index = { performClickableAction = function: 46313F80 SetCommand = function: 46313F38 } } devices.CDU = { __index = { performClickableAction = function: 46314360 SetCommand = function: 46314318 } } devices.ADI = { __index = { get_sideslip = function: 46314830 performClickableAction = function: 46314738 get_bank = function: 463147E8 get_pitch = function: 463147A0 SetCommand = function: 463146F0 } } devices.PULSE_TIMER = { __index = { performClickableAction = function: 46314E18 SetCommand = function: 46314DD0 } } devices.OXYGEN_SYSTEM = { __index = { performClickableAction = function: 463151B0 SetCommand = function: 46315168 } } devices.HOTAS = { __index = { performClickableAction = function: 46315560 SetCommand = function: 46315518 } } devices.MAVERICK_INTERFACE = { __index = { performClickableAction = function: 46315940 SetCommand = function: 463158F8 } } devices.ENGINE_SYSTEM = { __index = { performClickableAction = function: 46315CF0 SetCommand = function: 46315CA8 } } devices.AN_ALR69V = { __index = { performClickableAction = function: 463160A0 SetCommand = function: 46316058 } } devices.STANDBY_COMPASS = { __index = { performClickableAction = function: 46316480 SetCommand = function: 46316438 } } devices.ENVIRONMENT_SYSTEM = { __index = { performClickableAction = function: 46316830 SetCommand = function: 463167E8 } } devices.SIDEWINDER_INTERFACE = { __index = { performClickableAction = function: 46316BE0 SetCommand = function: 46316B98 } } devices.FIRE_SYSTEM = { __index = { performClickableAction = function: 3132CA58 SetCommand = function: 3132CA10 } } devices.MFCD_RIGHT = { __index = { performClickableAction = function: 3132CE38 SetCommand = function: 3132CDF0 } } devices.HUD = { __index = { performClickableAction = function: 3132D218 SetCommand = function: 3132D1D0 } } devices.HELMET_DEVICE = { __index = { performClickableAction = function: 3132D5F0 SetCommand = function: 3132D5A8 } } devices.IFFCC = { __index = { performClickableAction = function: 46318F50 SetCommand = function: 46318F08 } } devices.NMSP = { __index = { performClickableAction = function: 46319330 SetCommand = function: 463192E8 } } devices.CPT_MECH = { __index = { performClickableAction = function: 46319708 SetCommand = function: 463196C0 } } devices.STALL = { __index = { performClickableAction = function: 46319AE8 SetCommand = function: 46319AA0 } } devices.REMOTE_COMPASS = { __index = { performClickableAction = function: 46319EC8 SetCommand = function: 46319E80 } } devices.NAVIGATION_COMPUTER = { __index = { performClickableAction = function: 4631A2B0 SetCommand = function: 4631A268 } } devices.FUEL_SYSTEM = { __index = { performClickableAction = function: 4631A698 SetCommand = function: 4631A650 } } devices.ILS = { __index = { performClickableAction = function: 4631AA78 SetCommand = function: 4631AA30 } } devices.VMU = { __index = { performClickableAction = function: 4631AE50 SetCommand = function: 4631AE08 } } devices.CMSP = { __index = { performClickableAction = function: 4631B228 SetCommand = function: 4631B1E0 } } devices.LIGHT_SYSTEM = { __index = { performClickableAction = function: 4631B600 SetCommand = function: 4631B5B8 } } devices.CMSC = { __index = { performClickableAction = function: 4631B9E0 SetCommand = function: 4631B998 } } devices.JAMMERS_INTERFACE = { __index = { performClickableAction = function: 4631BDB8 SetCommand = function: 4631BD70 } } devices.CADC = { __index = { performClickableAction = function: 4631C1A0 SetCommand = function: 4631C158 } } devices.LITENING_INTERFACE = { __index = { performClickableAction = function: 357C2880 set_laser_designation_code = function: 357C2970 get_station = function: 357C29E8 set_laser_spot_search_code = function: 357C29C8 add_masked_region = function: 357C2918 SetCommand = function: 4631C3B8 } } devices.AN_ALE40V = { __index = { performClickableAction = function: 357C3310 SetCommand = function: 357C32C8 } } devices.DTSAS = { __index = { performClickableAction = function: 357C36A8 SetCommand = function: 357C3660 } } devices.AHCP = { __index = { performClickableAction = function: 357C3A88 SetCommand = function: 357C3A40 } } devices.DSMS_INTERFACE = { __index = { performClickableAction = function: 357C3E60 SetCommand = function: 357C3E18 } } devices.DIGITAL_CLOCK = { __index = { performClickableAction = function: 357C4248 SetCommand = function: 357C4200 } } devices.TACAN = { __index = { performClickableAction = function: 357C4630 SetCommand = function: 357C45E8 } } devices.IFF = { __index = { performClickableAction = function: 357C4A10 SetCommand = function: 357C49C8 } } devices.SADL = { __index = { get_datalink = function: 357C4E50 performClickableAction = function: 357C4DE8 SetCommand = function: 357C4DA0 } } devices.HYDRAULIC_SYSTEM = { __index = { performClickableAction = function: 357C5278 SetCommand = function: 357C5230 } } devices.AAP = { __index = { performClickableAction = function: 357C5618 SetCommand = function: 357C55D0 } } devices.IAM_INTERFACE = { __index = { performClickableAction = function: 357C59F0 SetCommand = function: 357C59A8 } } devices.VHF_FM_RADIO = { __index = { get_frequency = function: 357C5F10 performClickableAction = function: 357C5DD8 set_frequency = function: 357C5E40 is_on = function: 357C5F50 SetCommand = function: 357C5D90 } } devices.DATA_TRANSFER_SYSTEM = { __index = { performClickableAction = function: 357C66E8 SetCommand = function: 357C66A0 } } devices.AIRSPEED_INDICATOR = { __index = { performClickableAction = function: 357C6A88 SetCommand = function: 357C6A40 } } devices.AN_APN_194 = { __index = { performClickableAction = function: 357C6E70 SetCommand = function: 357C6E28 } } devices.PADLOCK = nil devices.SAI = { __index = { get_sideslip = function: 357C7388 performClickableAction = function: 357C72E0 get_bank = function: 357C7368 get_pitch = function: 357C7348 SetCommand = function: 357C7298 } } devices.SYS_CONTROLLER = { __index = { performClickableAction = function: 357C7AF0 SetCommand = function: 357C7AA8 } } devices.TONE_GENERATOR = { __index = { performClickableAction = function: 357C7E90 SetCommand = function: 357C7E48 } } devices.TISL = { __index = { performClickableAction = function: 357C8278 SetCommand = function: 357C8230 } } devices.TAD = { __index = { performClickableAction = function: 357C8650 SetCommand = function: 357C8608 } } devices.EGI = { __index = { performClickableAction = function: 357C8A28 SetCommand = function: 357C89E0 } } devices.MFCD_LEFT = { __index = { performClickableAction = function: 357C8E00 SetCommand = function: 357C8DB8 } } devices.ELEC_INTERFACE = { __index = { performClickableAction = function: 357C91E0 SetCommand = function: 357C9198 } } devices.UHF_RADIO = { __index = { get_frequency = function: 357C9650 performClickableAction = function: 357C95C8 set_frequency = function: 357C9630 is_on = function: 357C9670 SetCommand = function: 357C9580 } } devices.AAU34 = { __index = { performClickableAction = function: 357C9EC8 SetCommand = function: 357C9E80 } } devices.UFC = { __index = { performClickableAction = function: 357CA260 SetCommand = function: 357CA218 } } devices.RT1720 = { __index = { performClickableAction = function: 357CA638 SetCommand = function: 357CA5F0 } } devices.AAR47 = { __index = { performClickableAction = function: 357CAA18 SetCommand = function: 357CA9D0 } } devices.DBG = nil devices.INTERCOM = { __index = { performClickableAction = function: 357CAE80 SetCommand = function: 357CAE38 } } devices.HSI = { __index = { get_heading = function: 357CB2C8 performClickableAction = function: 357CB260 SetCommand = function: 357CB218 } } devices.CICU = { __index = { performClickableAction = function: 357CB6E8 SetCommand = function: 357CB6A0 } } devices.AUTOPILOT = { __index = { performClickableAction = function: 357CBA78 SetCommand = function: 357CBA30 } } devices.VHF_AM_RADIO = { __index = { get_frequency = function: 357CBF68 performClickableAction = function: 357CBE58 set_frequency = function: 357CBEC0 is_on = function: 357CBF88 SetCommand = function: 357CBE10 } } devices.ARCADE = nil devices.HARS = { __index = { performClickableAction = function: 357CC870 SetCommand = function: 357CC828 } } 1
Gadroc Posted November 19, 2010 Posted November 19, 2010 Here is a dump of the metatable for all devices, shows some interesting functions we can use on many of them. The majority of indicator lamps and some other stuff is grouped under the main panel (device 0). That looks pretty much the same as Black Shark. Anything that is pulled as an "argument" in any of the other lua files (clickabledata and main_panel_init) is pulled off device 0.
Gadroc Posted November 19, 2010 Posted November 19, 2010 Here is my export.lua which I've now tested and it works with A-10C beta 3. To configure it modify the top these lines: // Host and port which we will broadcast and listen on host = "127.0.0.1" port = 9089 // Arguments to watch and send updates gArguments = {[76]="%.4f", [77]="%.4f", [300]="%.1f"} The scripts sends out UDP packets of the format argid=value argid=value ... argid=value The first value pair is a simulation id which is a unique id generated at the start of the mission. The script only sends out data when it has changed and uses the format specified in the gArguments table. It listens for response UDP packets with one of two command structures: R Cdeviceid,buttonid,value If it receives R it will reset the cache and send all current argument values. Any new client listening for the UDP outputs should send an R to ensure they have accurate data. C executes a performClickableAction on the associated device and button.Export.lua.zip
y2kiah Posted November 19, 2010 Author Posted November 19, 2010 interesting choice in UDP. Do you keep pumping out the same packet until an R is received for it? Just wondering how you handle the reliability issue for switch inputs and such.
Gadroc Posted November 19, 2010 Posted November 19, 2010 It sends a packet when ever it has data that's changed. If that argument doesn't change it doesn't send that argument again until it get's a reset command ®. This technique allows you to start and stop your client at any time. With TCP you have to start in the right order and it becomes messy to keep track of connects and disconnects all the time. In addition UDP allows us to broadcast and have several different clients listen to the same stream of data.
Gromich Posted November 19, 2010 Posted November 19, 2010 Seems it didn't work, did you test it y2kiah?
y2kiah Posted November 19, 2010 Author Posted November 19, 2010 It sends a packet when ever it has data that's changed. If that argument doesn't change it doesn't send that argument again until it get's a reset command ®. This technique allows you to start and stop your client at any time. With TCP you have to start in the right order and it becomes messy to keep track of connects and disconnects all the time. In addition UDP allows us to broadcast and have several different clients listen to the same stream of data. oh I see, R is for "reset" and not "received" (like an ack) so you basically don't handle for lost packets? Probably doesn't happen much if ever on a LAN anyway... Seems it didn't work, did you test it y2kiah? Not sure what you mean, what was I supposed to test?
Gadroc Posted November 19, 2010 Posted November 19, 2010 oh I see, R is for "reset" and not "received" (like an ack) so you basically don't handle for lost packets? Probably doesn't happen much if ever on a LAN anyway... Yes this is correct. The majority of the data sent across the wire is replaced with new data in the next packet (compass heading, altitude, air speed, etc) as the value is always changing so there is no point in error checking for lost data. Lost switch flips could be problematic, but since there are no real lives at stake and like you said most people will be using the loopback or lan there is small chance of actually loosing the packet. So adding connection semantics would be wasted CPU and development time.
topdog Posted November 20, 2010 Posted November 20, 2010 ... i have tested it with BS 1.0.2 and WH beta1. same c#-binary and same export-script except the above mentioned changes to the file-writer in WH. to test this, i simply sent a single byte over to DCS to change the view (cockpit=7, aircraft=8, flyby=9). in BS i can read the byte using the lua c:receive() method and change the view with the LoSetCommand() method, but in WH i only get back a nil-value from the receive()-method. ... Using TCP? My apps always had to suffix onto any 'message' I wanted to send and be received in blackshark with a linefeed (ascii 10), otherwise it just queued up in some buffer. Then receive() calls would contain data in them. [ i7 2600k 4.6GHz :: 16GB Mushkin Blackline LV :: EVGA GTX 1080ti 11GB ] [ TM Warthog / Saitek Rudder :: Oculus Rift :: Obutto cockpit :: Acer HN274H 27" 120Hz :: 3D Vision Ready ]
Gromich Posted November 20, 2010 Posted November 20, 2010 (edited) I need your help. I'm just beginner on LUA scripts so please be patient. I want to export analog instruments datas to Gauge Composer. Using Oakes script (now working thanks y2kiah !). In Export.lua we find : function LuaExportAfterNextFrame() -- Works just after every simulation frame. local lSIOC_SendString = "" lSIOC_SendString = lSIOC_SendString..Variometer(gVariometerSIOCParam) if lSIOC_SendString ~= "" then socket.try(c:send("Arn.Resp:"..lSIOC_SendString.."\n")) end end In Exportsupport.lua : function Variometer(pVarioMeterSIOCParam) -- Get the device local lMainPanel = GetDevice(0) --Check to see that the device is valid otherwise we return an emty string if type(lMainPanel) ~= "table" then return "" end lMainPanel:update_arguments() local lVariometer = lMainPanel:get_argument_value(24) --io.write(lVariometer) --io.write("\n") local lSIOC_SendString = pVarioMeterSIOCParam.."="..round(Servo(lVariometer, variometerServoCalTable))..":" return lSIOC_SendString end This work fine but send var value dedicated to servo system. I need just to get the real value of the argument 24. So i supposed that this will works : function Variometer(pVarioMeterSIOCParam) -- Get the device local lMainPanel = GetDevice(0) --Check to see that the device is valid otherwise we return an emty string if type(lMainPanel) ~= "table" then return "" end lMainPanel:update_arguments() local lVariometer = lMainPanel:get_argument_value(24) --io.write(lVariometer) --io.write("\n") local lSIOC_SendString = pVarioMeterSIOCParam.."="..lVariometer..":" return lSIOC_SendString end But no, IOCP console get systematicaly "0" as value. Any Idea ? PS : work in progress for GC A10 panel : http://picasaweb.google.com/112016269906783949376/CockpitA10c#5538871694916010162 Edited November 20, 2010 by Gromich
wriley Posted December 6, 2010 Posted December 6, 2010 Here is my export.lua which I've now tested and it works with A-10C beta 3. Thank you for sharing your script. I am unable to get any UDP to flow (checking with packet capture). Is there some trick to get the network part to work? Export appears to be enabled because I get logging from Export.lua. TIA. i7-950, 8GB DDR3, EVGA X58, GTX 460 SE 1GB, Win XP 64Bit, CH gear (stick, throttle, rudder pedals), TM Cougar MFDs William Riley http://workbench.freetcp.com
wriley Posted December 10, 2010 Posted December 10, 2010 Thank you for sharing your script. I am unable to get any UDP to flow (checking with packet capture). Is there some trick to get the network part to work? Export appears to be enabled because I get logging from Export.lua. TIA. I figured out the fix, just change line 155 c:setpeername(host, port) to this c:setsockname(host, port) and it works like a charm. i7-950, 8GB DDR3, EVGA X58, GTX 460 SE 1GB, Win XP 64Bit, CH gear (stick, throttle, rudder pedals), TM Cougar MFDs William Riley http://workbench.freetcp.com
Gadroc Posted December 26, 2010 Posted December 26, 2010 Here is a dump of the metatable for all devices, shows some interesting functions we can use on many of them. The majority of indicator lamps and some other stuff is grouped under the main panel (device 0). MAIN_PANEL = { __index = { get_argument_value = function: 46349110 performClickableAction = function: 454E9628 update_arguments = function: 46349038 set_argument_value = function: 46349160 SetCommand = function: 454E95B0 } } devices.FM_PROXY = { __index = { performClickableAction = function: 46313F80 SetCommand = function: 46313F38 } } devices.CDU = { __index = { performClickableAction = function: 46314360 SetCommand = function: 46314318 } } devices.ADI = { __index = { get_sideslip = function: 46314830 performClickableAction = function: 46314738 get_bank = function: 463147E8 get_pitch = function: 463147A0 SetCommand = function: 463146F0 } } devices.PULSE_TIMER = { __index = { performClickableAction = function: 46314E18 SetCommand = function: 46314DD0 } } devices.OXYGEN_SYSTEM = { __index = { performClickableAction = function: 463151B0 SetCommand = function: 46315168 } } devices.HOTAS = { __index = { performClickableAction = function: 46315560 SetCommand = function: 46315518 } } devices.MAVERICK_INTERFACE = { __index = { performClickableAction = function: 46315940 SetCommand = function: 463158F8 } } devices.ENGINE_SYSTEM = { __index = { performClickableAction = function: 46315CF0 SetCommand = function: 46315CA8 } } devices.AN_ALR69V = { __index = { performClickableAction = function: 463160A0 SetCommand = function: 46316058 } } devices.STANDBY_COMPASS = { __index = { performClickableAction = function: 46316480 SetCommand = function: 46316438 } } devices.ENVIRONMENT_SYSTEM = { __index = { performClickableAction = function: 46316830 SetCommand = function: 463167E8 } } devices.SIDEWINDER_INTERFACE = { __index = { performClickableAction = function: 46316BE0 SetCommand = function: 46316B98 } } devices.FIRE_SYSTEM = { __index = { performClickableAction = function: 3132CA58 SetCommand = function: 3132CA10 } } devices.MFCD_RIGHT = { __index = { performClickableAction = function: 3132CE38 SetCommand = function: 3132CDF0 } } devices.HUD = { __index = { performClickableAction = function: 3132D218 SetCommand = function: 3132D1D0 } } devices.HELMET_DEVICE = { __index = { performClickableAction = function: 3132D5F0 SetCommand = function: 3132D5A8 } } devices.IFFCC = { __index = { performClickableAction = function: 46318F50 SetCommand = function: 46318F08 } } devices.NMSP = { __index = { performClickableAction = function: 46319330 SetCommand = function: 463192E8 } } devices.CPT_MECH = { __index = { performClickableAction = function: 46319708 SetCommand = function: 463196C0 } } devices.STALL = { __index = { performClickableAction = function: 46319AE8 SetCommand = function: 46319AA0 } } devices.REMOTE_COMPASS = { __index = { performClickableAction = function: 46319EC8 SetCommand = function: 46319E80 } } devices.NAVIGATION_COMPUTER = { __index = { performClickableAction = function: 4631A2B0 SetCommand = function: 4631A268 } } devices.FUEL_SYSTEM = { __index = { performClickableAction = function: 4631A698 SetCommand = function: 4631A650 } } devices.ILS = { __index = { performClickableAction = function: 4631AA78 SetCommand = function: 4631AA30 } } devices.VMU = { __index = { performClickableAction = function: 4631AE50 SetCommand = function: 4631AE08 } } devices.CMSP = { __index = { performClickableAction = function: 4631B228 SetCommand = function: 4631B1E0 } } devices.LIGHT_SYSTEM = { __index = { performClickableAction = function: 4631B600 SetCommand = function: 4631B5B8 } } devices.CMSC = { __index = { performClickableAction = function: 4631B9E0 SetCommand = function: 4631B998 } } devices.JAMMERS_INTERFACE = { __index = { performClickableAction = function: 4631BDB8 SetCommand = function: 4631BD70 } } devices.CADC = { __index = { performClickableAction = function: 4631C1A0 SetCommand = function: 4631C158 } } devices.LITENING_INTERFACE = { __index = { performClickableAction = function: 357C2880 set_laser_designation_code = function: 357C2970 get_station = function: 357C29E8 set_laser_spot_search_code = function: 357C29C8 add_masked_region = function: 357C2918 SetCommand = function: 4631C3B8 } } devices.AN_ALE40V = { __index = { performClickableAction = function: 357C3310 SetCommand = function: 357C32C8 } } devices.DTSAS = { __index = { performClickableAction = function: 357C36A8 SetCommand = function: 357C3660 } } devices.AHCP = { __index = { performClickableAction = function: 357C3A88 SetCommand = function: 357C3A40 } } devices.DSMS_INTERFACE = { __index = { performClickableAction = function: 357C3E60 SetCommand = function: 357C3E18 } } devices.DIGITAL_CLOCK = { __index = { performClickableAction = function: 357C4248 SetCommand = function: 357C4200 } } devices.TACAN = { __index = { performClickableAction = function: 357C4630 SetCommand = function: 357C45E8 } } devices.IFF = { __index = { performClickableAction = function: 357C4A10 SetCommand = function: 357C49C8 } } devices.SADL = { __index = { get_datalink = function: 357C4E50 performClickableAction = function: 357C4DE8 SetCommand = function: 357C4DA0 } } devices.HYDRAULIC_SYSTEM = { __index = { performClickableAction = function: 357C5278 SetCommand = function: 357C5230 } } devices.AAP = { __index = { performClickableAction = function: 357C5618 SetCommand = function: 357C55D0 } } devices.IAM_INTERFACE = { __index = { performClickableAction = function: 357C59F0 SetCommand = function: 357C59A8 } } devices.VHF_FM_RADIO = { __index = { get_frequency = function: 357C5F10 performClickableAction = function: 357C5DD8 set_frequency = function: 357C5E40 is_on = function: 357C5F50 SetCommand = function: 357C5D90 } } devices.DATA_TRANSFER_SYSTEM = { __index = { performClickableAction = function: 357C66E8 SetCommand = function: 357C66A0 } } devices.AIRSPEED_INDICATOR = { __index = { performClickableAction = function: 357C6A88 SetCommand = function: 357C6A40 } } devices.AN_APN_194 = { __index = { performClickableAction = function: 357C6E70 SetCommand = function: 357C6E28 } } devices.PADLOCK = nil devices.SAI = { __index = { get_sideslip = function: 357C7388 performClickableAction = function: 357C72E0 get_bank = function: 357C7368 get_pitch = function: 357C7348 SetCommand = function: 357C7298 } } devices.SYS_CONTROLLER = { __index = { performClickableAction = function: 357C7AF0 SetCommand = function: 357C7AA8 } } devices.TONE_GENERATOR = { __index = { performClickableAction = function: 357C7E90 SetCommand = function: 357C7E48 } } devices.TISL = { __index = { performClickableAction = function: 357C8278 SetCommand = function: 357C8230 } } devices.TAD = { __index = { performClickableAction = function: 357C8650 SetCommand = function: 357C8608 } } devices.EGI = { __index = { performClickableAction = function: 357C8A28 SetCommand = function: 357C89E0 } } devices.MFCD_LEFT = { __index = { performClickableAction = function: 357C8E00 SetCommand = function: 357C8DB8 } } devices.ELEC_INTERFACE = { __index = { performClickableAction = function: 357C91E0 SetCommand = function: 357C9198 } } devices.UHF_RADIO = { __index = { get_frequency = function: 357C9650 performClickableAction = function: 357C95C8 set_frequency = function: 357C9630 is_on = function: 357C9670 SetCommand = function: 357C9580 } } devices.AAU34 = { __index = { performClickableAction = function: 357C9EC8 SetCommand = function: 357C9E80 } } devices.UFC = { __index = { performClickableAction = function: 357CA260 SetCommand = function: 357CA218 } } devices.RT1720 = { __index = { performClickableAction = function: 357CA638 SetCommand = function: 357CA5F0 } } devices.AAR47 = { __index = { performClickableAction = function: 357CAA18 SetCommand = function: 357CA9D0 } } devices.DBG = nil devices.INTERCOM = { __index = { performClickableAction = function: 357CAE80 SetCommand = function: 357CAE38 } } devices.HSI = { __index = { get_heading = function: 357CB2C8 performClickableAction = function: 357CB260 SetCommand = function: 357CB218 } } devices.CICU = { __index = { performClickableAction = function: 357CB6E8 SetCommand = function: 357CB6A0 } } devices.AUTOPILOT = { __index = { performClickableAction = function: 357CBA78 SetCommand = function: 357CBA30 } } devices.VHF_AM_RADIO = { __index = { get_frequency = function: 357CBF68 performClickableAction = function: 357CBE58 set_frequency = function: 357CBEC0 is_on = function: 357CBF88 SetCommand = function: 357CBE10 } } devices.ARCADE = nil devices.HARS = { __index = { performClickableAction = function: 357CC870 SetCommand = function: 357CC828 } } Can you share your script to dump the meta-deta? Have you checked to see if beta 4 added anything?
Recommended Posts