A peculiar issue of Microsoft’s Flight Simulator X is that at times ATC forgets to vector me in to my final destination leaving me cruising at 2000′ burning fuel going away from the airport. There are other troubles with the FSX ATC but this one will be the focus of this quick article. Before we go on please make sure you understand what you are doing and what the consequences can be. I am not responsible for any issues you may run into and the changes below may lead to system instability.

One way to get around ATC forgetting about your flight is to run FSX with higher process priority. If you are not familiar with what this means, Microsoft has a technical description on their website. An extremely over-simplified explanation is that in Windows (and other operating systems) each process started gets a certain amount of time from the processor to do its work. Processes with higher priority get a larger amount of time while those with lower priority get a smaller amount of time. The central processing unit goes around in “circles” to each process and says “Go!” “Stop!” and the process does its work in the time between the two prompts. Process priority can be manually or programmatically be changed (a process can say “I need more dedicated time”). With a higher priority a process has faster access to memory and storage and is able to perform its operations faster and be more precise.

Manually Changing Priority

To change the process priority manually you can use a program like SysInternals Process Explorer.

  1. Start your process (Flight Sim X in this case)
  2. Start Process Explorer
  3. Find the executable in the list of processes (“fsx.exe”)
  4. Right-click on it, select “Set Priority” then “Realtime: 24” or “High: 13”
Changing the process priority using Process Explorer

Changing the process priority using Process Explorer

I would recommend experimenting with the High and Realtime setting. Running the process in Realtime will give it priority over a lot of other processes which could lead to system instability.

Automating Changing the Priority

Changing the priority manually is simple enough to do but what if you forget to do it and only remember 4 hours into a flight? Alt-Tabbing out of Flight Simulator if it’s running in full-screen mode is gutsy and can cause it to crash plus it takes away from the experience. Luckily processes can be given a priority at start time with a few simple lines of batch script:

@ECHO OFF
echo Start FSX with realtime priority
:: Start FSX with realtime priority
start “D:\Program Files (x86)\Microsoft Games\Microsoft Flight Simulator X\” /REALTIME “D:\Program Files (x86)\Microsoft Games\Microsoft Flight Simulator X\fsx.exe”

The end result is the same as in the previous section: the process “fsx.exe” will be running with realtime priority.

To use the script above simply open Notepad (Click Start and search for Notepad), copy and paste the script above into the Notepad window and save it with a “.bat” extension. You may need to change some parameters to match your system.

The “start” command I use has the following syntax:

start "{Path to Flight Simulator X directory}" /{PRIORITY; for all possible values see here} "{Path to Flight Simulator X executable}"

I like to enclose paths in quotes to make sure they are resolved properly.

Bonus Chatter

This can be applied to any other program as well, flight simulator or otherwise. All you have to do is change the paths to point to your executable of choice.

One thing to note is that the priority assignment only applies to the parent process, it does not get transferred to child processes spawned by the parent process. For example in the image above, while “fsx.exe” will run in Realtime, with priority 24, “aircarriers.exe” and “javaw.exe” below it will not. This is important for simulators such as DCS World where the Launcher is a different process than the singleplayer and multiplayer environments.

There are also other priority values which can be assigned to processes. The full list can be found in the Scheduling Priorities article on the Microsoft website. The “start” command supports the following priority classes:

  • BELOWNORMAL – Start application in the BELOWNORMAL priority class.
  • NORMAL – Start application in the NORMAL priority class.
  • LOW – Start application in the IDLE priority class.
  • ABOVENORMAL – Start application in the ABOVENORMAL priority class.
  • HIGH – Start application in the HIGH priority class.
  • REALTIME – Start application in the REALTIME priority class.

Find out more about the “start” command by running “start /?” in a command prompt.

One last tip if you record games: I often forgot to start FRAPS or DxTory until just before I wanted to take a screenshot or start recording. The same script which sets the priority of the process can be used to start other, supporting programs. To start FRAPS I added start "" "D:\Fraps\fraps.exe" before starting FSX. I also put in a time out of two seconds to allow FRAPS to initialize before starting FSX by adding timeout /t 2 to the script. My final script is
@ECHO OFF
echo Start FRAPS
:: Start FRAPS
start "" "D:\Fraps\fraps.exe"
echo Wait 2 seconds for FRAPS to load
:: Wait for FRAPS to load (2 seconds)
timeout /t 2
echo Start FSX with realtime status and affinity on all but processor 0
:: Start FSX with realtime status and affinity on all but processor 0
start "D:\Program Files (x86)\Microsoft Games\Microsoft Flight Simulator X\" /REALTIME /AFFINITY 0xFE "D:\Program Files (x86)\Microsoft Games\Microsoft Flight Simulator X\fsx.exe"

As always if this is has helped or you have further questions leave a comment below!

I ran into some issues tonight with my Saitek X55 HOTAS: each key press was repeated instead of showing up just once. This made the aircraft systems uncontrollable and at least once it caused my computer to lock up. I couldn’t figure out what had changed since last week when everything was fine until I realized I had just gotten my TeamSpeak setup up and running again.

At least one forum post had mentioned multiple key presses from the X55 when the TeamSpeak client is running. To get around this issue you can either:

  1. Not use TeamSpeak; not really an option for online gaming
  2. Instruct the client to read only keyboard and mouse inputs and ignore any other devices

To instruct the TeamSpeak client to use only keyboard and mouse inputs:

  1. Open the TeamSpeak client
  2. Go to “Settings -> Options”
  3. In the Options dialogue select “Hotkeys”
  4. In the drop down box at the bottom right of the window select “Keyboard & Mouse Only”
  5. Click “OK” to exit
The Hotkeys Options page in the TeamSpeak client

The Hotkeys Options page in the TeamSpeak client

Leave a comment below to let me know if this helped you!

In the first part of this series I explained what software and hardware you will need to get started with flashing your Arduino board so that it can emulate other devices. In this post I’ll show you how to do it. Please note that while I’ve done this many times successfully, there is always the chance that something may go wrong. I am willing to help but I can take no responsibility if the steps below render your Arduino board unusable.

At the end of the post you will find a list of sources I followed to compile the information for this series.

What will happen?

There are two Atmel chips on the Arduino board: one controls the communication to the computer while the other runs your code (Atmega16U2 and Atmega328P, respectively, on the board that I am using). To emulate a USB device the 16U2 needs to be configured to identify itself as the desired device and this is achieved by flashing it with firmware which is similar to what is written to the Arduino board when you upload your Sketch.

The larger (328P in my case) chip will handle all the logic and reading of inputs while the 16U2 will pass these inputs to the computer as the device it emulates, a keyboard for example.

Development flow

To develop new functionality for your USB device you will have to alter your development flow to account for the flashing of the 16U2. Whereas the normal development steps when working with an Arduino are:

  1. Write sketch
  2. Compile
  3. Upload
  4. Run

when your Arduino is emulating a USB device the steps become:

  1. Write sketch
  2. Compile
  3. Upload
  4. Reset 16U2 (put in Device Firmware Update (DFU) mode)
  5. Flash device firmware
  6. Disconnect and reconnect

The last three steps are also used to recover the Arduino so that you can upload more sketches to it:

  1. Put device in DFU mode
  2. Flash Arduino firmware
  3. Disconnect and reconnect

DFU mode

You will need:

  • Arduino board
  • Header jumper (or wire to connect between two headers)
  • USB cable
  • Atmel FLIP USB drivers (if on Windows)

To enter DFU mode:

  1. Connect the board to the computer and make sure it is on
  2. With the header jumpers or wire, connect the two headers closest to the USB cable (in red below) and keep connected for one second then remove the jumper. The board will flash and the Arduino COM port will disappear from the Arduino IDE. To recover at this point simply disconnect and reconnect the USB cable to power cycle the Arduino.
    ArduinoUno_R3_Front_jumpers

You are now in DFU mode. You will not be able to upload sketches to your Arduino any more at this point. To be able to communicate with the Atmega16U2 chip you have to install some drivers. To do this in a Windows environment follow the steps below.

  1. Open Device Manager on Windows and search for an unkown device.
  2. Right click the device and select “Update Drive Software…”
  3. Select “Browse my computer for driver software”
  4. Navigate to the usb folder in the Atmel FLIP installation folder (C:\Program Files (x86)\Atmel\Flip 3.4.7\usb normally)
  5. Select the file “atmel_usb_dfu.inf” to be installed

You are now ready to flash the Atmega’s firmware.

Flashing the firmware

As a test, and to show you how to make your Arduino usable as an Arduino again we will first upload the official Arduino firmware. You will need all of the above plus

  • Atmel FLIP software
  • Arduino firmware (in the first example I am using the file Arduino-usbserial-atmega16u2-Uno-Rev3.hex from the Arduino github)

With the Arduino in DFU mode and the drivers installed:

  1. Start the Atmel FLIP software. You will be presented with the window below.AtmelFlip
  2. Load the HEX file you wish to use by going to “File -> Load HEX file”.
  3. Select the target device by going to “Device -> Select…” and choosing the model of chip, Atmega16U2 in my case.
  4. Connect to the board by going to “Settings -> Communication -> USB” then selecting “Open”. The options in the Atmel FLIP window will now be enabled and you are ready to upload the firmware. AtmelFlip_ready
  5. Click on “Run” and wait for the firmware to be loaded. The circles next to the options checked will turn green.
  6. At this point you can either disconnect and reconnect the board the the computer (power cycle it) or click on “Start Application” with the “Reset” option checked.

If you chose the Arduino firmware you will see the COM port reappear in device manager. If you’ve loaded another device’s firmware look for that device in device manager. If you run into any problems, double check that the device is in DFU mode or that you’ve selected the appropriate target device in FLIP.

Leave your comments and questions below and I hope you enjoyed this tutorial!

References

To write this series I referred to the follow sites:

The Arduino platform is quite useful for making a quick prototype or when you’re getting started with embedded programming as a hobby. There are a number of shields available to extend a board’s capabilities but there is also a lot that can be done without any extra peripherals.

In this series I will demonstrate how you can flash the Arduino Uno with new firmware and have it emulate another type of device belonging to the USB Human Interface Device class (i.e. keyboard, mouse, joystick and so on). Using this knowledge (and the tools mentioned below) you too can create your very own input device be it a keyboard, joystick or even something like Hak5’s Rubber Ducky.

I will cover:

  • What software and hardware is required
  • How to use the software in a Windows 7 64-bit environment (should be the same in other versions of Windows as well)
  • Resources for firmware
  • What to do when things go wrong

I will be using an Arduino Uno R3 (non-SMD) which features an Atmega16U2 (small chip by the USB connection) and Atmega 328P (larger chip). The steps below may vary if your board is different but the process overall will be approximately the same. I would strongly encourage you to read through to the end of the article before connecting your board and following the steps to decrease the risks to your sanity (and Arduino board).

This first post will get you all set up with the software and hardware you will need. Let’s get started!

You will need

This tutorial’s aim is to give you an idea of the process which you will need to follow to be able to flash your Arduino with new firmware. As your projects develop you will find you require more hardware (and possibly software) than is mentioned below.

Hardware

  • Arduino board (I am using an Arduino Uno R3)
  • USB Cable (to connect your board to the computer)
  • Header jumper (or wire to connect two headers)

Software

  • Arduino IDE (install from from Arduino.cc)
  • DFU Programmer
    • Windows: install from Atmel FLIP
    • Linux: sudo apt-get install dfu-programmer
  • Arduino firmware (so you can restore your board to function as an Arduino)
  • Firmware for the device you want to emulate; some examples here
  • Arduino sketch with the logic for your peripheral (you can skip this for this tutorial

The next post in this series will cover flashing your Arduino board with the new firmware.

News broke earlier this month that Dovetail games, makers of popular train simulators, had been granted “a global licensing deal with Microsoft, granting them the rights to develop and publish all-new flight products based on Microsoft’s genre-defining flight technology”, Microsoft Flight Simulator X (FSX). The company will be “investigating new concepts in this area and is expecting to bring a release to market in 2015.” More recently it was announced that Flight1 has partnered with Dovetail games and the companies “will be working in partnership […] for the launch.

The initial goal for the FSX franchise is to distribute it via Steam, Valve’s digital distribution platform. FSX’s main competitor X-Plane has been recently made available over Steam.

FSX Cover.jpg
FSX Cover” by May be found at the following website: GameFAQs. Licensed under Wikipedia.

What I expect from the first release

The points below are my best guesses and in most cases things I wish not to see in this new release.

  • Bugs. Lots of bugs. FSX was first released in 2006 and both software and hardware has come a long way since then. The issues you can expect to encounter are well documented on flight sim forums so support will be available. The question is: Will Steam’s users accept FSX in this state?
  •  Integrated micro-transactions. The train simulator industry is well-known for having multiple add-ons. In one way the flight sim community is well-accustomed to paying for add-ons. We will now see FSX add-ons in the Steam store.
  • It will be interesting to see how the pricing scheme is set. Those of us who enjoy FSX already own a well-customized copy so we are unlikely to buy it again from Steam. Drawing new users will be the big challenge.
  • No updates to the multiplayer mode. Currently if you want to fly with your friends in FSX you have to join via IP. I don’t expect this to change in the first release although it is something which needs to be addressed sooner rather than later to ensure FSX:Steam’s success.

What I don’t want to see

  •  Closed ecosystem. Currently one can download add-ons of all kinds from a number of different sites and install them directly into FSX. With the Steam integration and partnership with Flight1 it would be a shame to be forced to buy all add-ons from Steam or Flight1 and not be able to take advantage of the wide array of add-ons already available.
  • No improvements to the core software. This is a big one for me. FSX has remained the unoptimized piece of software it was when it was released eight years ago. In the mean time CPUs have gained more cores, RAM capacity has increased and GPUs have improved in leaps and bounds. While updating the core software will not have any flashy results, it is sorely needed if Dovetail wishes FSX to remain as popular as it is now. Its competition benefits from the technological advances made over the last eight years and so should FSX.

All-in-all I am excited to see FSX being developed again. It will be interesting to see what improvements the first release, slated for 2015, will bring to the table and how Dovetail will update FSX to today’s standards.