Quick Start Guide

In order to start using MileHighWings interface with a flight simulator, you have to take the following steps:

  1. Before calibrating the interface, create a new airplane model in your transmitter (even if you are going to fly a heli) with all the default parameters and call it SIMULATOR. Every time you use your transmitter with a simulator, switch it to this model.

  2. Calibrate the interface with eFlightWorks software:
    Note: If your computer is not a Windows PC, please perform the calibration on any available PC--the calibration results are stored in the flash memory of the interface, so, after the calibration you can use the interface on any other computer.

  3. Install a simulator of your choice and configure it to work with 'MHW USB Controller' joystick.

MileHighWings Version 4 Interface Manual


  1. Introduction
  2. Connecting the Interface
  3. Operating Modes
  4. LED Blinking Codes
  5. eFlightWorks Software
  6. Developing Custom ESC Programs
  7. Developing Your Own Software to Control a Transmitter
  8. Configuring Flight Simulators

1. Introduction

MileHighWings Version 4 interface is a device, which reads the signal from the trainer port of a transmitter and converts it into 10-bit digital data, which is then sent to a computer via USB. The interface appears in the operating system of the computer as a virtual joystick with 8 axes and 8 buttons. eFlightWorks software allows you to configure the interface for any of the supported PPM transmitters, including helicopter transmitters with non-disableable CCPM, as well as Walkera PPM and PCM transmitters. All the configuration information is saved in the flash memory of the interface, so, the interface can be calibrated on one computer (e.g., Windows PC) and then used to control a simulator on another (e.g., G4 Mac).

Input mode

In addition to receiving the signal from a transmitter, the interface can send computer generated PPM stream back to the transmitter (only PPM transmitters with a Trainer switch are supported):

Output PPM mode

Finally, the interface can control an ESC, connected with an optional ESC cable. eFlightWorks software permits direct control of an ESC/motor, playback of a pre-recorded or scripted throttle program, as well as configuring any stick-programmable ESC:

ESC Control mode

Note: While the interface hardware supports PC with any Windows version, Mac (both PowerPC and Intel based) with MacOS X, as well as most Linux versions, eFlightWorks software currently works only in Windows.

2. Connecting the Interface

The interface has two connectors: a big USB-A connector on one side and a small mini-USB plug on the other side of the circuit board. The big connector should be inserted into a USB port of a computer, while the small plug accepts a transmitter or an optional ESC cable:

Connecting the battery and ESC

Figure 1. Connecting the interface to computer and transmitter/ESC

Note: You should never connect the interface to a computer via the small mini-USB plug, as this would result in damage to the interface and/or the computer! MileHighWings assumes no responsibility for any damage occurred as a result of this.

3. Operating Modes

The interface has 3 working modes:

Besides the three working modes, the interface can be in firmware update mode; after the update, the interface switches back to the previous working mode.

4. LED Blinking Codes

There are two Light Emitting Diodes (LED) on the interface, one is green, the other is red (from under the read heat shrink film, the green LED also looks red, but less bright than the red LED).
The LEDs indicate the state of the interface:
Red LED Green LED Interface state
Stays OFF Blinking 2 times a second 'Input' mode
Blinking 4 times a second Stays OFF 'Output PPM' mode
Blinking once a second in turns: 2 times red then 2 times green 'Walkera PCM input mode' mode
Blinking in turns 4 times a second 'ESC Control' mode
Blinking together 4 times a second In bootloader mode, ready to start or have started firmware update.

5. eFlightWorks Software

eFlightWorks is an application with Multi Document Interface, conventional menus, keyboard shortcuts, and flexible toolbars. The Windows version of eFlightWorks software consists of a single self-sufficient executable file, eFlightWorks.exe. This application does not require any additional DLLs, does not need .NET or any other optional Windows components. The "installation" is virtually non-existent: you simply copy eFlightWorks.exe from the CD-ROM or download it from MileHighWings server and place it in any folder on your hard drive (it can even be launched directly from a CD-ROM).

eFlightWorks application saves the data, which needs to be persistent between the sessions, in Windows registry under

If eFlightWorks software is launched without the interface, an empty application window will open:

no device

Without any connected devices, Help/About menu would only list eFlightWorks software version:

no device About

Once any of MileHighWings devices, e.g. an old v.3 or a new v.4 interface, gets connected, the menus/toolbars are extended and About window lists the device:

no device About

When an interface is connected, a window, corresponding to the current interface mode, opens automatically (the following picture is for the interface in 'Input' mode):

File Menu

File menu holds the standard open/save and exit commands:

Open command displays Open eFlightWorks data file dialog, which allows you to select any of eFlightWorks native files:

A channel recording file displays the channel data:

Opening an interface settings file brings up an interface settings window:

If, at the time of opening an .eis file, an interface is plugged in, this window would have a Program interface button, which gives you an option to update the interface settings.

Save command allows you to save the current interface settings into an .eis file, if the interface window is selected, or to save a channel recording into an .ecr file, if a channel recording graph is on the top.

View Menu

View menu controls the visibility of various eFlightWorks toolbars:

Window Menu

Window menu contains the standard window control commands, which allow you to arrange the open windows or select on of them:

Options Menu

The contents of the Options menu depends on which of the windows is active--if active is a device window, an Interface V4 options command is listed:

Interface V4 Options window has two pages, one for file open/save and another for 'Output PPM' mode options:

If a channel recording window is selected, the Options menu changes to:

Display options command controls the visibility and colors of the elements of the channel recording graph:

Mode Menu

Mode menu permits switching between the three interface modes:

Please note that 'Output PPM' mode is disabled if:

Calibration Menu

Calibration menu gives access to Calibration Wizard as well as to its separate pages:

Calibration Wizard guides you step-by-step through the interface calibration, starting from the transmitter type and mode selection

to detection of the channel travel range (once sufficient information is gathered, channel bars turn from red to black)

to channel centering and reverse

and, finally, to selection the channel mapping and joystick buttons assignment

It is a good idea to save the interface settings into an .eis file immediately after the calibration.

Tools Menu

Tools menu contains channel recording start/stop and playback commands as well as ESC programming and firmware update commands:

Start/stop channel recording and Servo Monitor commands are only enabled in 'Input' mode, playback command is enabled in either 'Output PPM' or 'ESC Control' modes, while ESC programming is only enabled in 'ESC Control' mode.

Servo Monitor command opens Servo Monitor window:

The bars in Servo Monitor window show the true channel signals generated by the transmitter, i.e. the interface doesn't process the data: there's no CCPM de-mixing and no signal "stretching" to cover the full motion range for each channel. The Servo Monitor shows the true servo motion, like servo monitor screens of high end computer transmitters do. The the numbers above each bar are "percents" of the channel travel: -100% corresponds to 1 millisecond PPM pulse and +100% to 2 milliseconds. At the same time, many R/C manufacturers accepted different definition of 100% travel, sometimes 100% travel of one of the first 4 channels is different than 100% travel of channels 5 trough 8 (all Futaba transmitters use such "double standards")! For Futaba, JR, and Sanwa/Airtronics transmitters, the manufacturer accepted values are shown.
If you click Neutral button, the current channel readings will correspond to zero levels. Please note that resetting neutrals in Servo Monitor window is different from setting channel centers in Calibration Wizard: the former only affect visualization in Servo Monitor, while the latter affect how the interface converts the channel levels into the joystick positions.

Start throttle sequence playback command opens Throttle playback window:

Throttle program can be specified in an .eft file (please refer to the comments in a sample throttle program file) or extracted from an existing channel recording.

Program ESC command opens a window with a list of "standard" controllers:

Once you select an ESC and click Program this ESC button, a corresponding program window opens:

Please note that some of the controllers, like Hyperion Titan above, only allow for a single setting change per ESC programming session. For such ESC, you will have to repeat programming several times, if you need to change several settings.

Other controllers, like hexTronik S60 below, support changing several settings, so several programming groups can be selected and will be executed in one run:

If an ESC has an integrated Battery Elimination Circuit (BEC), eFlightWorks detects the moment when the battery is connected and starts programming automatically:

For an ESC without an integrated BEC, you have to manually initiate the programming sequence by clicking Ok button as soon as you connect the battery:


6. Developing Custom ESC Programs

eFlightWorks allows to customize ESC program for your particular controller as well as save program pre-sets for quickly configuring your ESC for a particular application.For both, creating programs for a new ESC or making programming pre-sets for one of the existing controllers, it's easier to start by copying of a program for a similar ESC. To do that, go to eFlightWorks menu Tools/Program ESC (shortcut key Ctrl+E), select an ESC from the list, and hit 'Edit copy of this ESC' button. After editing the program, it has to be saved as a custom ESC definition, which can later be loaded by hitting 'Load custom ESC' button in Program ESC dialog.

At the moment, eFlightWorks supports four programming types (for detailed description of each programming type, please refer to the programming documentation for the referenced ESC):

  1. Single choice per group, answering Yes switches to the next group (unique to Castle Creations Phoenix line)
  2. Two-choice and throttle-proportional groups (Cool Running CoolESC or Castle Creations Thunderbird line)
  3. Single choice in timed sequence (like Hacker X, Hyperion Titan, etc.)
  4. Two menu levels with single choice in timed sequence on each level (like most hexTronic, Tower Pro Gen.II and their clones)
The last ESC type can be programmed, but the program can't be edited yet. This code will be added in the upcoming versions of eFlightWorks.

All the ESC programming editing is done via Edit ESC programming dialog, which always has 'Starting programming' and 'Finishing programming' pages and a number of programming groups or categories between them:

The name of the ESC should be unique, there can't be two controllers with the same name in the list.

Programming type selection is is disabled as long as there are programming groups between Starting programming and Finishing programming pages as all the programming groups have to be of the same type and there's no conversion between different programming types.

Auto detect battery connection checkbox specifies if eFlightWorks should monitor the voltage at the red wire of the ESC connector and start programming as soon as the voltage is detected. Otherwise, the programming starts after the user hits Ok in the Starting ESC programming window.

To get into the programming mode, various ESCs require certain throttle level when the power is connected--refer to your ESC description and set this value in Throttle level when battery is connected spin box. In addition to that, some controllers (like the ones from Castle Creations) require several throttle steps to get into the programming mode--set the number of steps, the throttle levels and durations in the corresponding fields on Starting programming page.

Clicking Add group before and Add group after buttons adds a programming group, corresponding to the selected programming type.
Programming groups of "Two-choice and throttle-proportional" type, like CoolESC controllers by Cool Running or Thunderbird line by Castle Creations, are the easiest to program as they are not time driven, i.e. a person can take as much time as necessary before specifying the choice. Programming group page for ESCs of this type looks like this:

You can select the name of the group from a list of existing group names or enter your own name. The advantage of selecting one of the existing names is that this name will automatically be translated into other languages when eFlightWorks is switched to a different language, while the custom name will always remain the same.

7. Developing Your Own Software to Control a Transmitter

In order to control a transmitter from your own software, you have to find MileHighWings v.4 interface (a USB device with VendorID=0x04D8 and ProductID=0x0101) plugged in your computer, verify that the interface is in 'Output PPM' mode or switch it to this mode (see 'Set interface mode' command below), verify/set output PPM parameters, and start sending channel level commands. The interface keeps generating the output PPM stream with the last channel levels set by 'Set current channel levels' command, i.e. you have to send this command only when any of the channel levels changes.

Each command block consists of 16 bytes and is sent to the interface via the Input interrupt transfer. (Please note that each input report, which your software actually sends to the USB device, has to be 17 byte long with the leading zero byte.) The first byte of the command block is the command code, the second byte is always zero. Each successfully processed command genetartes a reply, sent by the interface back to the computer. The first byte of a valid reply block is always zero, while the second byte contains the code of the command, which generated this reply.

A good sorce of easy-to-understand information about USB devices and developing software to work with them is "USB Complete: Everything You Need to Develop Custom USB Peripherals" book by Jan Axelson.

Command list:

  1. Set interface mode
    01 00 MODE xx xx xx xx xx xx xx xx xx xx xx xx xx
    where: Reply:
    00 01 MODE xx xx xx xx xx xx xx xx xx xx xx xx xx

  2. Get interface mode
    02 00 xx xx xx xx xx xx xx xx xx xx xx xx xx xx
    where: Reply:
    00 02 MODE xx xx xx xx xx xx xx xx xx xx xx xx xx

  3. Set signal shift of the output PPM stream
    07 00 SHIFT xx xx xx xx xx xx xx xx xx xx xx xx xx
    where: Reply:
    00 07 SHIFT xx xx xx xx xx xx xx xx xx xx xx xx xx

  4. Get signal shift of the output PPM stream
    08 00 xx xx xx xx xx xx xx xx xx xx xx xx xx xx
    where: Reply:
    00 08 SHIFT xx xx xx xx xx xx xx xx xx xx xx xx xx

  5. Set number of channels in the output PPM stream
    09 00 NCH xx xx xx xx xx xx xx xx xx xx xx xx xx
    where: Reply:
    00 09 NCH xx xx xx xx xx xx xx xx xx xx xx xx xx

  6. Get number of channels in the output PPM stream
    10 00 xx xx xx xx xx xx xx xx xx xx xx xx xx xx
    where: Reply:
    00 10 NCH xx xx xx xx xx xx xx xx xx xx xx xx xx

  7. Set duration of the output PPM frame
    11 00 LB HB xx xx xx xx xx xx xx xx xx xx xx xx
    where: Reply:
    00 11 LB HB xx xx xx xx xx xx xx xx xx xx xx xx

  8. Get duration of the output PPM frame
    12 00 xx xx xx xx xx xx xx xx xx xx xx xx xx xx
    where: Reply:
    00 12 LB HB xx xx xx xx xx xx xx xx xx xx xx xx

  9. Set current channel levels
    Channel level is described by a 10-bit value, from 0 to 1023, with 0 corresponding to -110% and 1023 corresponding to +110% channel level (for the standard 1000...2000 micro-second pulse duration corresponding to -100%...+100% signal range). The interface will continue to generate the output PPM stream with these channel levels, until the next 'Set current channel levels' command is received.
    13 00 H14 H58 L1 L2 L3 L4 L5 L6 L7 L8 xx xx xx xx
    where: Reply:
    00 13 H14 H58 L1 L2 L3 L4 L5 L6 L7 L8 xx xx xx xx

  10. Get current channel levels
    14 00 xx xx xx xx xx xx xx xx xx xx xx xx xx xx
    where: Reply:
    00 14 H14 H58 L1 L2 L3 L4 L5 L6 L7 L8 xx xx xx xx

8. Configuring Flight Simulators

Now, after you have calibrated the interface, your computer sees it as a 'MHW USB Controller' joystick. In order to control a flight simulator with this virtual joystick, you have to configure the simulator.

Detailed configuration instructions for each simulator are on the CD shipped with each interface.

Copyright © 2001-2008 MileHighWings.com. All Rights reserved.