Sep 302012

Background: In computing, DirectInput forms a part of the DirectX library, a Microsoft API for collecting input from a computer user, via input devices such as the mouse, keyboard, joystick or other game controllers. It also provides a system for action mapping, which allows the user to assign specific actions within a game to the buttons and axes of the input devices. Additionally it handles force-feedback (input/output) devices.

DirectInput provides benefits over normal Win32 input events:

  • they enable an application to retrieve data from input devices even when the application is in the background
  • they provide full support for any type of input device, as well as for force feedback
  • through action mapping, applications can retrieve input data without needing to know what kind of device generated that input


(Adapted from Dunc_DX BMS Keyfile, version 1.0, 2011-08-17)

Whilst this article refers to the Cougar, much of it can be applied to any HOTAS with comparable capabilities.  For this exercise we are going to configure the HOTAS with full functionality and provide a secondary layer of functions using DirectX shifting.  As I do not have rudder pedals, this article will demonstrate how to achieve rudder control using the large antenna elevation dial on the throttle, as well as the ability to control TrackIR and Teamspeak along with VAC (Voice Activated Commands).  We will also be using an improved version of the default key file, which provides a more structured and easy to find navigate layout in the Falcon UI.

This article assumes that you already know how to setup your TM Hotas Cougar in general (i.e. performing manual/automatic calibration, load and compile Foxy profiles and how to load keyfiles in Falcon BMS). It only covers necessary steps to get the provided files up and running.
This profile uses the new BMS DirectX shifting feature to avoid any emulated keyboard input whenever possible. All files have explanatory comments inside, so feel free to check out the
KEY, TMJ and TMM files for further information.

This profile consists of the following components:

BMS_DirectX.tmm                                                    // Foxy profile files
BMS_DirectX.tmj                                                      // Foxy profile files
BMS_DirectX.key                                                      // BMS Falcon keyfile

In order for this profile to work, make sure that the axis mapping configuration within your TM Hotas Cougar CCP is setup like this (to ensure that we can use the microstick as analogue

HOTAS CCP Axis Setup

Copy the BMS_DirectX.tmm and BMS_DirectX.tmj files to your “…Foxy/files” folder, open foxy, load the files, compile and download to the Cougar. Please note that you will NOT see anything happen in the Foxy keytester if you press Cougar buttons, as this profile uses DirectX buttons nearly exclusively.

Open the Falcon BMS.cfg file which is located in your BMS User\Config folder with a text editor. Find the setting: set g_bHotasDgftSelfCancel. It’s set to 0 by default, please set it to 1. Additionally, verify that the setting set g_nHotasPinkyShiftMagnitude is set to 256 (default).

Copy the BMS_DirectX.key file to your BMS User\Config folder. Start Falcon BMS, go to the Setup Controllers screen, and make sure that Thrustmaster HOTAS Cougar is selected as main controller. Next, load the BMS_DirectX.key file, then go to the Advanced – Avionics Control section. Make sure that the axis are mapped as follows:

This concludes the mandatory part of the Dunc_DX profile setup. Please note that the BMS Setup Controllers screen is unable to display the DirectX shifted functionality, you will only be able to test/see the unshifted DirectX buttons. To test out the shifted DirectX buttons, you have to enter the sim and fly.

Check out the included PDFs for keyboard and joystick mappings.

Sep 302012

The following is an excerpt from the BMS-Manual.pdf (C:\Program Files\Falcon BMS 4.32\Docs\Falcon BMS Manuals) and is part of a series of documents intended to demistify the art of configuring your HOTAS and maximising the inherent functionality that BMS provides.

HOTAS F16 Overview

The following diagrams illustrate the typical F-16 HOTAS control grips and the various functions assigned to them. With the exception of the black-out switch (HOBO), all HOTAS functions are modeled and hard coded. Many of the functions are mode dependent, in that the function of a hat or button will appropriately vary depending on what master mode (AA, AG, NAV) or submode (CRM, ACM, TWS, RWS, BORE, DGFT, MSL,) or SOI Sensor Of Interest (TGP, HSD, FCR, HUD) is currently selected. Tap and hold functionality as appropriate is also hard coded and does not require any further programming.
The sections which follow illustrate the function of the various controls in AA and AG modes and provide the names of the key file callback names that are typically mapped to each switch position on the stick and throttle grips.

All of these functions are able to be applied to a Cougar HOTAS, however for other HOTAS your choices may be varied and limited to available hats and buttons, whereby it is strongly advised to adapt as many of the core functions as possible, particularly these 4 way hats: TMS (Target Management Switch); DMS (Display Management Switch); CMS (CounterMeasures Switch) and COMMS (Communications) and CURSOR CONTROL.

In the next article, HOTAS Programming with DirectX, we will look at how we can apply these functions to a HOTAS


HOTAS Sidestick Air to Air

HOTAS Throttle Air to Air

HOTAS Sidestick Air to Ground

HOTAS Throttle Air to Ground

Nov 172011


Touch Screen F16 Falcon Cockpit for iPad

The demo movie was recorded on a desktop in Firefox browser to demonstrate what the interface looks like and how it works.  The iPad actually does an even better job using the Safari browser.
Apologies for the advert, once its finished you may need to drag the movie timer back to the start to see the demo properly.


The “Safari” browser on the iPad connects to a simple website hosted by your desktop machine via a small server app.  Images used are the included 2D images in the Falcon installation which have been mapped with hotspots on the various panels, buttons and switches. Overlay images are used to enlarge certain areas of the 2D cockpit to make some panels larger and therefore easier to access and use.  To close an overlay touch anywhere off the overlay or touch the close icon, usually at the top right hand corner.

Touching any of the button/switch hotspots will send the appropriate keystroke from the ipad to your desktop box where falcon is installed.  Hotspots have also been created to launch things such as Red Dogs Interactive Map of Korea.

Obviously there are hundreds of keystrokes which could be mapped, but we have a perfectly excellent clickable cockpit now, whereas the aim here is to replace mouse clicks with screen touch instead.  This way you do not have to either take your hand off the joystick to use your mouse, or try and use your mouse left handed.

The iFalcon project is a work in progress and new features will continue to be added as I think of them.  Currently the following features are mapped (see image below)

iFalcon Touch Screen Zones

  •  ICP (Overlay) with all buttons and switches mapped
  • MFD Left (Overlay) with all buttons and switches mapped
  • MFD Right (Overlay) with all buttons and switches mapped
  • RADIO Panel (Overlay) an enhanced version of the Radio Panel incorporating additional keystrokes for QWERTY Communications with a mini numpad.  Volume controls and a list of Frequencies are also available from this panel.  Its not authentic, but its convenient.
  • Laser Arm (Keystroke) Toggle
  • Master Arm (Keystroke) Toggle
  • AP left (Keystroke) Up and Down
  • AP right (Keystroke) Up and Down
  • Gear (Keystroke) Toggle
  • AVTR (Keystroke) Up and Down Off >Auto>On
  • Datacard (Overlay) Assumes a datacard resides in the correct location […iFalcon\Data\Docs\datacard.jpg]
  • Interactive Map (Overlay) Opens RedDogs Interactive Map of Korea
  • Chat (Overlay) Opens awesomeforce chat.  You may need to have already accessed the chat prior on the iPad.


  • Download the complete package here
  • Unzip the to a folder of your choosing (no installation required)
  • Make sure that both your desktop machine and the iPad are both members of the same LAN (Local Area Network) and that they are both connected to the internet.  Make a note of the LAN IP of both devices, desktop and iPad.
  • Launch the WebServer application (TouchDown Web Server Beta in the iFalcon folder you unzipped earlier
  • Make sure the profile page is “index.htm” and the IP address is the LAN IP of your desktop machine (typically 192.168.X.XX or 10.0.0.X)
  • In the Setttings menu “Allowed IP” of the WebServer app enter the LAN IP address of your iPad (you can usually find this in your routers attached devices list)
  • If you are running “TeamViewer” shut it down, it conflicts with WebServer app.
  • Click “Start Server”
  • How to Setup the Server
  • Start your iPad and navigate in Safari to the IP of your desktop Falcon computer
    eg or
    Yes just type the IP in the URL bar and hit enter

If all has gone according to plan your iPad should show a picture of a 2D cockpit with touchable hotspots just waiting for your smudges.


Touch the Left MFD and a larger MFD opens overlayed atop the cockpit.  Touch any of the 20 OSBs to send those keystroke commands to your desktop computer. Close the MFD by touching the close icon or simply touch anywhere off the MFD to close it  and return to the cockpit.
Try the same thing with the Right MFD, once again all 20 OSBs are mapped appropriately.
From the 2D cockpit, this time touch the ICP, a larger ICP overlay opens and all buttons, are once again touchmapped to send the appropriate keystrokes to your desktop computer. Close the ICP using either method mentioned above and return to the cockpit view.
Some of the more commonly used switches in the 2D pit are also touch mapped and include the following;
Laser Arm (Toggle)
Master Arm (Toggle)
Autopilot switches (both) Up and Down (requires two touches to move from down through middle to up and vice versa)
Gear (Toggle)

The keystrokes emulated here are based on the BMS.key keystrokes file.  If the keystrokes are incorrect for you then you are using an inferior keystrokes file and its time you “got with the program”.
Alternatively you can choose to stick with your keystrokes file which has served you so well this past decade and delve into the .htm files and edit them to emulate the keystrokes you use.
To do this you will need to edit the following files
iFalcon\data\Docs\cockpit.htm (This is the main cockpit view)
iFalcon\data\Docs\LMFD.htm (The Left MFD)
iFalcon\data\Docs\RMFD.htm (The Right MFD)
iFalcon\data\Docs\ICP.htm (The ICP panel)
In setting this up I discovered that the BMS.key file had no key assignment for  OSB 19 and 20 on either Left or Right MFD.
To fix this is a simple copy/paste job, however if you feel that this is beyond you, stop now and go adn watch TV instead.  No responsibility is accepeted for any damage inflicted by yourself on your files, your Falcon installation should you proceed.

To fix this open your BMS.key file in a simple text editor and find the lines

SimCBEOSB_19L 1041 0 0XFFFFFFFF 0 0 0 1 “LMFD OSB-19”
SimCBEOSB_20L 1040 0 0XFFFFFFFF 0 0 0 1 “LMFD OSB-20”

and replace them with

SimCBEOSB_19L 1041 0 0x49 6 0 0 1 “LMFD OSB-19”
SimCBEOSB_20L 1040 0 0x52 6 0 0 1 “LMFD OSB-20”

Similarly for the Right MFD find the lines

SimCBEOSB_19R 1061 0 0XFFFFFFFF 0 0 0 1 “RMFD OSB-19”
SimCBEOSB_20R 1060 0 0XFFFFFFFF 0 0 0 1 “RMFD OSB-20”

and replace them with

SimCBEOSB_19R 1061 0 0x49 5 0 0 1 “RMFD OSB-19”
SimCBEOSB_20R 1060 0 0x52 5 0 0 1 “RMFD OSB-20”

Your keyfile (which should be based on BMS.key) now has keystrokes for all 40 OSBs.

To edit a keystroke in the htm files you need to change the detail inside the () of  the line.
eg, I use an inverted NUMPAD to emulate the keys in the same layout as the pit ICP, but if you use NUMPAD 1 as ICP 1 then you may want to switch these around
So change this…
<area name=”A-CAL 9″ shape=”rect” coords=”206,264,252,310″ href=’function macro(“{NUMPAD3}”);’ target=”bottomFrame”>
<area name=”A-CAL 9″ shape=”rect” coords=”206,264,252,310″ href=’function macro(“{NUMPAD9}”);’ target=”bottomFrame”>

Make sure you dont mess with any other characters in the code or you will most likely break it.
You will need to do this for ICP 1,2,3,7,8,9

Single keystrokes shoud follow this syntax
<area name=”TOGGLE LANDING GEAR” shape=”rect” coords=”0,552,125,621″ href=’function macro(“g”);’ target=”bottomFrame” title=”TOGGLE LANDING GEAR” alt=”TOGGLE LANDING GEAR”>
Chorded keystrokes should follow this syntax
<area name=”WARN RESET” shape=”rect” coords=”278,369,311,398″ href=’function macro(“+^!w”);’ target=”bottomFrame”>

+   is Shift
^   is Ctrl
!     is Alt
w   is well its just w


Stay Tuned