Finally, here it is! FSXControls is a set of three program modules:
GUI multifunction application (FSXControls.exe);
Chart viewer and airport info gauge (EQgauges.dll) ;
Control input handling module (EQmodule.dll) implementing technology that I named GhostMouse.
This set is provided for free for NON commercial use for all MS Flight Simulator X funs. Of cause, this set is designed primarily for advanced FS pilots, but it can be used by everyone who wants to enhance one’s simulator experience. The programs are easy to use but require a bit of FSX knowledge & experience for understanding. Sorry, this is just a result of my hobby & I can’t provide comprehensive manual or full support for the software. The program will be enhanced but it’ll be always in beta stage. No risk – no fun :-)
The following is a short installation instruction, the list of program feature & some hints for non obvious features.
FSXControls.exe is for owners of advanced controller system with a lot of programmable buttons (home cockpits, joystick set, CHProducts' MFCpanel etc).
ChartViewer.dll is for virtual pilots who prefer to fly with paper charts but not with artificial moving map. Real world pilots do not have moving map except GNS, but extensively use paper charts.
EQModule.dll (GhostMouse driver) is for owners of advanced payware addon aircrafts. Unfortunately addon aircrafts mostly lack of feature that maps keyboard or joystick input to the advanced aircraft control. EQModule.dll do also many other neat tricks.
GhostMouse is the Easter Egg of the program. I’m proud to share it among MSFS enthusiast community.
The programs were developed using MS Visual Studio Express edition. Great thanks for Microsoft for this free amazing development platform. I really enjoyed the process.
Windows XP SP2 or SP3. (It should work on Vista too but I have not tested that).
Properly installed MS FSX SP2 with SimConnect. (FSX SP1 is supported from version 1.2.1 of FSXControls). I’m not sure whether it works on FSX Acceleration Pack. In theory it should do, but I don't have it to test. "Properly installed" means that FSX was installed by the native installer. FSXControls relies on registry information and installed SimConnect runtime shipped with FSX.
.NET 2.0 with latest service pack. Get it from Microsoft.com.
Properly installed latest version of DirectX 9c. (DirectX 10 on Vista) The program relies on managed DirectX libraries.
Full access (read, write, create) permissions to FSX installation folder & all its subfolders.
Put FSXControls.exe wherever you want. I place it on the desktop.
Put EQgauges.dll to the \Gauges subfolder of the main FSX folder.
Put EQmodule.dll to the \Modules subfolder of the main FSX folder.
Note: EQmodule.dll from the root of the package is for FSX SP2 only! FSX SP1 users should get EQmodule.dll from \SP1 folder of the package.
Run FSXControls.exe.
Choose Tools-> Setup runtime modules.
Install EQmodule.
Install ChartViewer (the synonym of EQgauges.dll). You can use any unique number for “Panel ID” but remember it for a couple of minutes.Please!!!
Scan scenery files in order to create airport database for ChartViewer.
Close Setup dialog.
Assign any key and/or button to PANEL_ID_TOGGLE (or similar) command using remembered “Panel ID” value from step above as the Command Parameter. Correspondence of PanelID to the command parameter value is extremely critical! For your convinience just after installation of ChartViewer the PANEL_ID_TOGGLE command will be selected in the command tree of the main program window and Panel ID will be substituted to command parameter.
Save configuration (diskette icon on toolbar).
Start FSX. You will be asked (for EQgauges.dll & EQmodule.dll) if you want to run software from unverified publisher. Reply 'Run" then "Yes" for each one.
That’s it! You can skip any step and perform any action later & any number of times. Don't hesitate to experiment!
GhostMouse:
GhostMouse configuration is loaded in flight without need for FSX restart;
Optional script for event. Script is any expression for FSX XML gauges (see FSX SDK);
Catching FSX internal events in addition to input event;
Fine grain aircraft filter for pseudo gauge commands.
ChartViewer:
Fixed: error loading images just after start & on switch over between full screen and windowed FSX modes.
FSXcontrols GUI:
Rebuilt one windowed GUI;
Cameras group operations;
Controlling aircraft variants visibility;
GhostMouse:
Pseudo gauges;
Press/Click/Hold input differentiated;
Aircraft categories run time filter;
Option to take gauge background from panel or file;
Improved engine taking care with simultaneously pressed joystick buttons;
Autotrim feature;
ChartViewer:
New plate mode;
New NAVaids mode;
More handy most recent used list;
Drawing on the map: route and ruler;
Many small but neat features for convenience;
Some fixed bugs and many new ones :)
The main window comprises for tabs & Tools menu with some useful utilities.
Using the first tab "FSX controls" you can:
Map any keyboard, joystick or mouse button еще any FSX command. This is actually GUI editor for FSX's input configuration file "standard.xml".
You can NOT program axes input! The axis setup dialog is well done by Microsoft in FSX. Use FSX control configuration dialog for that task.
You can set repeat counter (for joystick only) and/or command parameter to any value. Don’t hesitate. Explore it! It’s very interesting. FSX internal engine is much more powerful & sophisticated then FSX setup dialog & official MS documentation.
Mouse icon appeared next to the command text box is for entering mouse button input.
Use lower right corner box for an interactive input controller use list. Just click it the press any key or joystick button. Hint: right click resets list and double click navigate tree view.
Search for command by substring of it's name. Hint: press “Enter” to start search and to move to the next found item.
The GhostMouse tab is for configuring special types of event a key/button handling. To make it working in FSX you must have EQmodule.dll installed. See GhostMouse section below.
The “Cameras” tab is for:
Setting up FSX’s global Cameras.cfg & camera views for particular aircrafts. You can assign up to 10 shortcuts.
Please note that particular aircraft camera shortcuts override ones of global FSX cameras.
Hints: Use mouse wheel in the Cameras list on the left to select shortcut number.
Context menus provide a tool for copying all or some camera shortcut settings from one plane to others. Tip: multiple items selection on the right panel is available.
Important! Do not forget to set up input commands for VIEW_CAMERA_SELECT_0… VIEW_CAMERA_SELECT_9 (see the "FSX controls" tab) to assign quick camera shortcuts. All settings on this tab sre useless without that.
You can do one click creation of "Right seat view" for aircrafts that have no predefined one. Of cause this is available for assimetric (left or right) pilot seat aircrafts only.
You can change initial view point in aircraft.cfg for any aircraft.
You can unify the angular speed of virtual cockpit cameras rotation for all aircraft (What's it? See Camera definition id FSX SDK... or just try it).
The Aircraft tab give you a simple way to hide or show any aircraft or aircraft variation from the Aircraft dialog of FSX.
Hint: context menus provides group operations.
The "Filter" menu with checkable items is for filtering content of command tree in "FSX control" & "GhostMouse" tabs. Not all FSX commands are shown by default!
Tools menu is the set of useful utilities:
"Reset DirectInput". If you experience any problem setting up joystick shortcut use this menu instead of restarting FSXcontrols.
“Generate CH .cmc file” – creates command list file for CHProducts’ CH Manager. You can use this file for simplify programming of the great CHProducts controllers (See CH Manager documentation). You must recreate .cmc file each time you change Standard.xml. You can optimize this process if you understand well what happens inside ;)
“Options runtime modules“ displays dialog for configuring parameters EQmodule & ChartViewer gauge (see below in EQmodule.dll & EQgauges.dll sections).
“Setup runtime modules“ displays dialog for install/uninstall runtime modules (see above the Installation section of the document).
GhostMouse is a sophisticated feature for simulate mouse button actions on currently invisible (but loaded) gauges. It perfectly works on the most gauges of 3d party freeware & payware aircrafts.
XML gauges are not supported directly but FSXcontrols allow to create input event scripts that can do the same things that XML gauge do.
There are a couple "Pseudo gauges" on the top of the list:
"FSX" is a subset of FSX standard controls but for assigning commands for selected aircraft categories.
<IMC> gauge is the InterModule Communication interface for sending commands to EQmodule.dll and EQgauges.dll.
The GhostMouse window in FSXControls is just a configuration facility for Eqmodule.dll FSX driver. So, please install it before use.
GhostMouse works well in virtual cockpit, but in complex 2D panel system it may be necessary to load manually all panels with gauges to control & press Esc key twice. I prefer to fly in VC & have no problem at all.
Left panel of the window is the tree of three levels: Gauge modules, Gauges, Programmed mouse actions. The tree contains exclusively modules & gauges with custom control possibly inaccessible by standard FSX commands.
The upper right corner is the gauge view. You can see gauge’s background bitmap & clickable mouse boxes. Choose mouse box by clicking it. Hint: use left, right or middle mouse buttons are accepted.
The lower right corner contains:
The information box with the available gauge recognized mouse button actions for the selected mouse box.
The Aircraft categories box with flags that control to which kind of aircraft command should apply (for pseudo gauges only). You may specify group of aircraft to which command is applied. Event handled if loaded aircraft is of specified category AND included in the group if group is specified. There are 31 available groups each of them contains any number of aircraft (actually aircraft is a flight dynamics file ".air" file).
Text box for enter keyboard or joystick input & select desired emulated mouse button action. As alternative for pseudo gauges you can specify a FSX internal event. Be careful - avoid event loops (i.e. event A triggers event B and simultaneously event B triggers event A). Note: triggering GhostMouse "clicks" by FSX events is disabled because of internal event loop occures in most practical situations!
The way of handling input event.
Hold - command executes if you hold button for the specified interval (See Options dialog).
Click - command executes if you press & release key/button in the specified interval.
Once or Repeated - command executes immediately when key/button is pressed and optionally periodically repeats while key/button hold.
Keyboard autorepeat - command executes immediately and periodically repeats. This option available for keyboard shortcuts only.
Please note that the listed action is NOT mutually exclusive, i.e. can be used simultaneously!
Repeat period for joystick input (similar to the ones used in standard.xml). The command repeats with period of N*1/18sec. The additional initial delay can be set up in the Options dialog.
“Right button acceleration” checkbox activates the special feature: after 10 times of the emulated left mouse click the driver sends the right mouse clicks at the half of repeat frequency (this extremely useful for dial controls of some payware products such as Flight1 ATR-72 & DigitalAviation Cheyenne).
Script combobox is for specifying script to be run on event. Script button display script editor dialog. (See "GhostMouse ans Scripting" below.)
Auto pop up in lower left corner “duplicated command information list”. This list is primarily used for prioritize duplicated assignments. Hint: double click navigate main tree.
You can assign the same input to any number of gauges. The settings will be active for the actually loaded gauges only! If more than one gauge accepted the same input are loaded the gauge with higher priority will get input (See above “duplicated command information list”).
GhostMouse controls take precedence over standard FSX commands! The overridden standard FSX command is displayed in the status line at the bottom of the window.
You can press small “Null” button to setup “just eating” action for the specified control input if the gauge loaded. It conditionally (based on the aircraft loaded) masks the input from FSX.
FSXControls may skip some payware protected gauge modules. The program puts such modules to the blacklist.
You can try to dump modules from blacklist in order to make them available for FSXcontrols. To do this just start FSX & load any aircraft that uses the gauge module from the blacklist. Exit FSX, Start FSXControls & look at the result. Often it helps.
You can also force to dump any “good” module putting it to blacklist. Sometimes it helps to extract invisible gauge backgrounds. To control blacklist use the context menu on gauge module nodes of the tree. (Beware! This feature is a little bit challenging.)
If the gauge displayed without background image you can try to display it on the panel background or just use custom image. See context menu of the gauge tree.
Script is any expression that can be used in XML gauges. You can read expression description in the section "Expression Evaluation" on the page "Creating XML Gauges" of FSX SDK. Please note that scripting is actually a programming, so use scripts if you completely understand what you do!!! Unfortunately there are neither script debug no syntax check facilities in FSX.
Script runs several times then GhostMouse event is detected. Script runs one time for event beginning (i.e.button pressed), each event autorepeat - button hold (if repeating is set for corresponding Ghostmouse event) & optionally on event end (i.e. button released).
Note: captured FSX event generates "press" and "release" events as in case of user input event!
Script runs on release event only in case then it read variable named "GM.event" i.e. script contains lexeme "(L:GM.event)" or "(L:GM.event,type)" (case insensitive).
There are two GhostMouse variables available in the scripts:
(L:GM.event) has value 1 on initial "press" event; 2,3,4... on the subsequent autorepeat events; 0 on event "release".
(L:GM.result) initially "0". If you set it to "-1" (i.e. script like "-1 (>L:GM.result)") the action set to GhostMouse event is skipped. This is a way for conditional performing GhostMouse "clicks". (Values other than 0 and -1 are reserved for the future development).
EQgauges.dll is the gauge with the following features:
Large map image viewer (Map mode). Personally I use it as a chart viewer for a large images. The gauge is able to show relatively large images in this mode (I successfully use 6500x5000 8bpp US sectionals), scroll & scale it. Viewer maintains most recent viewed file list (MRFL). The MRFL list stores image file name, viewing parameters, position & route. Viewer also has “go to previous viewed image” feature - just click on MRFL item of menu out of arrow. Mouse controls for the gauge:
Left drag – scroll
Right click – zoom/unzoom (or change to new zoom level).
Middle click – browse file system for images (& back from it without loading new image).
Mouse wheel above the map area – smart scrolling. Try it yourself and see Options dialog for settings.
Mouse wheel above the map header – setup new zoom level (see yellow box at the upper right corner).
Left click on menu item – select gauge mode.
Right click on menu item – open previously viewed image of the same mode.
Any click on down arrow next to menu item's – open browsing submenu with MRFL.
Left or right click on chart file name – switch between Map & Plate modes.
Right click on MRFL – pin/unpin map to prevent removal from the list.
Middle click on MRFL – remove map from the list.
Small map image viewer (IAP mode). I use it as approach plates viewer. It's similar to the Map mode but:
Two zoom modes are available only: full size & fit to window.
The maximum size of image to show is 2Mpixel.
Airport info screen (Apt mode) contains list of airport with ATIS/AWOS/ASOS and/or ILS/LOC in range (default = 60NM).
White lines are the airports with weather observation. You can left or right click them to load weather frequency to COM1 or COM2. The first click sets up standby frequency. The second click swaps active & standby frequencies.The fird click activates corresponding COM radio.
Grey lines are the airports without weather observation but with ILS/LOC.
Green lines are the ILS/LOC. The first left click sets up standby NAV1 frequency. The second click swaps active & standby frequencies. The third click sets up OBI1/HSI to the ILS course. The right button does the same things for NAV2.
Middle click (or any click below the list) exits info screen.
NAVaids info screen (NAV mode) contains list of VAR, DME and NDB facilities in their active range plus constant extra range (See Options dialog). The facilities is color coded by type & reachabilities.
For VOR or DME you can left or right click them to load weather frequency to NAV1 or NAV2 radio. The first click sets up standby frequency. The second click swaps active & standby frequencies.The third click turn on/off aural monitoring of the NAV radio. (Actually the algorithm is a bit more complex but more convinient.)
For NDB you can left or right click them to load weather frequency to ADF1 or ADF2 radio. The first click sets up frequency. The second click turn on/off aural monitoring of the ADF radio.
There are two drawing tools available in the MAP mode:
Route drawing is a polyline tool. You create and edit the route by mouse clicking while holding Shift key. Left click adds desired points to the route. Right click deletes the last point of the route. Middle click clears the whole route. There is one route of no more than 15 legs per map file. The route is persistent between sessions. Color, opacity and width of route line can be customized in the Option dialog of FSXcontrols.
Ruler tool is a one segmented line temporary marker. Ruler is created and cleared by left click while holding Ctrl key. The shown dimension (inches/mm) is based on image horizontal resolution taken from the image file (if specified) or from display (monitor) system parameters otherwise.
There are some commands for EQgauges available for assigning to key/button. See EQgauges/<IMC> pseudo gauge in GhostMouse tab.
Important note: image viewing is memory hungry operation so prepare you maps as a .gif or .tiff file with 8bpp. NEVER use .jpeg! The ChartViewer optimized for 8bpp images!
You can configure all parameters of the gauge using the "Chart Viewer" & "NAV Info" tabs of Options dialog.
EQModule is a runtime driver for FSX. It currently implements several features: GhostMouse driver & miscellenious advanced controls.
EQModule acts as GhostMouse technology FSX runtime driver.
GhostMouse is fully configurable via GhostMouse window of FSXControls.
The module reads whole configuration during initialization process i.e. on FSX startup. But all setting made on the GhostMouse tab of FSXcontrols read every time you display any dialog in FSX. So you can just press Esc twice to load and activate new GhostMouse configuration! Dynamic loading does not apply to other FSXcontrols settings including ones from options dialog.
Thrust reverser control simulates throttle lever back moving beyond the physical zero position to perform analog control of reverse thrust. The process from pilot point of view is the following:
Fully retard throttle lever on joystick.
Activate thrust reverser mode using assigned button or keyboard shortcut (see below)
Advance throttle lever. The thrust reverser power will be controlled by throttle lever.
Retard throttle lever.
Deactivate reverser or it deactivates automatically (see below).
You can assign key/button to the command in the GhostMouse tab (EQmodule/<IMC> pseudo gauge) and configure thrust reverser control using the options dialog. The settings are the following:
“Null zone” is zone width for throttle axes in %. Then throttle lever is in this zone you are able to turn on/off thrust reverser mode. Set non null value especially for cheap joysticks. Experiment with it. I use value 1% with CH ProThrottle.
“Reverser auto off” turns on/off auto deactivation of reverser mode then throttle lever is retarded back after applying thrust reverser.
Kneeboard advanced control allow you to skip unused kneeboard tabs. The setting for advanced kneeboard controls are:
Command for Show/Hide, Next page, Previous page assigned in the GhostMouse tab (EQmodule/<IMC> pseudo gauge).
See Option dialog for marking pages to be selected by Next page & Previous page commands.
Real world time set feature is for automatic setting FSX ZULU time to the current real world time. The ZULU time is calculated using Windows time zone settings for your computer. You have three options:
Set ZULU time every time you load FSX flight (may interfere with FSX missions).
Set ZULU time once on FSX startup (recomended).
Do nothing.
The wind smoothing feature is the analogue of one you can find in registered version of a brilliant FSUIPC. Note that the wind smoothing is active only in flight, not while user's aircraft is on the ground. You can set some parameters of wind smoothing engine:
Wind smoothing activation thresholds (by speed & direction)
Wind speed smoothed change rate (knots per second).
Wind direction smoothed change rate (degrees per second).
Note: Algorithm automatically decreases value of wind direction smoothing parameters as wind becomes stronger.
Aircraft autotrim feature provides commands for simultaneous trimming all control surfaces (elevator, ailerons and rudder). To autotrim first stabilize aircraft then press "AutoTrim" key/button. Till now you can release joystick - the aircraft will remember new neutral control position. This feature extremely useful flighing helicopters. Untrim command smoothly untrim aircraft to the default zeroes. Upon landing the aircraft is untrimed immediately. Please note that this feature does NOT actually control aircrft's trimmer surfaces but only joystick axes! For setting up autotrim feature use:
GhostMouse tab (EQmodule/<IMC> pseudo gauge) for assign key/button to the commands.
Options dialog for setting rate of untrimming.
Now after reading the so poor “manual” and hours of discovery & hacking process you successfully set up all what you want. Enjoy or damn me & the program! Pilots never cry ;-) I hope that the program will helps you as for me.
If you are interested in obtaining intermediate possibly unnstable versions of the program please visit FSXControls project page.
If you discover a bug please report to fsxcontrols@mail.ru.
Sorry, but I can’t help on OS & FSX version compatibility problems because I have no resources to reproduce them. My pratform is Windows XP SP3 + FSX SP2.
Best regards.
Eugene Motorny (aka gm193)
St.-Petersburg, Russia.