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.

  One Response to “HOTAS Programming with DirectX”

  1. Reference Material
    Further reading on whats new in BMS is available in the
    C:\Program Files\Falcon BMS 4.32\Docs\Falcon BMS Manuals\BMS-Manual.pdf