If you're like me, (and this is quite likely as great minds think alike, and having read this far you are obviously an intellect of power) you have perhaps been blinded by the brilliance of your own vision of flight simulation possibilities. Perhaps only now are you beginning to wonder, 'How the heck am I going to interface all this crap to my computer?' This is indeed a worthy question, one that we will dwell upon at some length. But first, the short, easy answer.
A very easy, straightforward method for interfacing controls which are based on the use of potentiometers is to make use of the game port. (details later.) This is by far the least expensive approach as it calls for little more than a length of shielded cable and a connector. Naturally this approach has its limitations. You can only interface four potentiometers and four switch closures per port. Further, there is no output other than the sound channels (and maybe a MIDI channel).
Another simple interface method is to hack a keyboard. Wire your momentary contact switches across the keys appropriate to your particular sim software. This is limited to switch inputs only, and without some additional circuitry (or perhaps a programmable keyboard), will handle only single key stroke commands. Still, within these limitations, this is a great method. It does not require a new driver, and it's really, really cheap.
If the limitations of a sound card present a show stopper for your application, consider USB. You can connect multiple USB devices to a single USB port through use of an external hub. Perhaps the most cost effective method of going USB is to use the electronics from an existing USB device such as a joy stick. This may seem wasteful, but USB requires both electronics and an associated driver. This approach provides both.
If your project has grown beyond the scope of a reasonable number of USB connections, you can buy a specialty product called an EPIC card from R&R Electronics. The EPIC card supports a large number of I/O channels through a single USB connection. Assorted ancillary products are available to support seven segment displays and rotary encoders.
These four interfacing techniques are simply the most easily approached. There are certainly other options. Depending upon your hardware and software skills, you can also make use of the serial ports (but shouldn't), parallel ports (another no-no), develop your own USB solution (yes!), or make use of Ethernet connections (also a potentially good choice).
Depending upon the scope of your project, you may find that you face another challenge, interfacing to the flight simulation software itself. Simply tying yokes, pedals and joysticks to the simulation can be managed through existing drivers. Similarly, switch actions that map to keystrokes for your simulation can make use of the keyboard port and driver. But what options do you have for simulated instruments, or annunciator panels?
Well, that depends upon which simulator you're using.
Microsoft Flight Sim FS9 and earlier has an unsupported, but widely used set of SDKs for expanding upon the out-of-the-box product. (I say "unsupported" because that's the official Microsoft line, but they sure put a lot of effort into it.) The panel SDK includes a description of the proxy variables used to get simulator state out, as well as coding examples of how to build custom gauges and panels. This a great resource available through the MSFS web page.
With the release of MSFSX, we now have an expanded and officially support API into the MS flight simulation engine. It's called simconnect. Documentation is included on the MSFSX Deluxe edition DVD. You can find flight sim community support on the AVSIM forums and on the FSDeveloper forums.
MSFS can also be interfaced to through use of a program called FSUIPC. (Looks like FSUIPC will become payware once updated to work with FS-ACOF.) This is supported by Peter Dowson (Thanks, Peter!!) and is available along with an SDK and documentation from Enrico Schiratti's site. This appears to be a much less painful approach than working directly with the Microsoft FS SDK, especially with FS2K2 adding XML gauges to the mix. FSUIPC is a DLL that is "installed" simply by putting a copy in the FS modules folder. Your code can link to FSUIPC and read from (and to a lesser extent, write to) MSFS through use of five FSUIPC calls. Actually, it's easier than that. Two of the calls are used to open and close FSUIPC. Of the remaining three, one queues read requests, one queues write requests, and the remaining one initiates the read/write process. Details are included in an extensive write up by Peter Dowson which is included in the SDK. Also included are code samples in different languages.
FSUIPC has for many years been a freeware program. It is an excellent utility that has enjoyed great acceptance from the sim community, and superlative support from Peter Dowson. The demands placed upon Peter for additions and upgrades has turned what started as a hobby undertaking into a fulltime job. Peter has elected to turn FSUIPC into payware starting with the release supporting MSFS COF, at a license fee of 20 euros.
Thank you Peter, for many years of support for the sim community, and for continuing that effort.
A new entry into the MSFS interfacing arena is FSConnect by Russel Dirks. FSConnect makes use of Microsoft functions documented in the Panels & Gauges SDK. A zip file with the FSConnect DLL, documentation and sample code in both Basic and C is available from both Avsim and Flightsim.
Another new entry is FSCommunicate. This is freeware presented as an "FSUIPC-like interface towards FS2004/2002". It is by Flight Deck Software.
X-Plane by Laminar Research offers documentation on its web site specifically related to interfacing. Check under the "Hacking X-Plane" section. Interfacing makes use of UDP packets in a simple format. The utility provides bi-directional communication so you can use it to control the sim as well as drive simulated instruments. As it makes use of sockets, you can easily use this communication channel on either a single machine or across several.
If you're a Falcon 4.0 buff, you can makes use of a utility called MEMREADER to examine internal variables. MEMREADER can be downloaded from Martin Ingold's site. You should also take an extended look at Erwin "EagleEye" Neyt's site. He has written in detail about Win32 inter process communication, as well as, data extraction from Falcon 4.
FAST (FAlcon-Sioc-Trandfer) is a software utility that reads data from Falcon: Allied Force and transfers it to the OpenCockpits SIOC utility used with IOCards. FAST also works with Falcon BMS, though this functionality has not been fully tested. FAST is available from Michis F-16 Simulator site.
The IL:2 Sturmovik Ace Expansion Pack 2.01 patch added a UDP server that will export a variety of instrument readings. UDP is a network protocol that can be accessed through use of Winsock, a Windows networking API. The 2.01 patch includes the file "devicelink.txt" that documents this feature. In early August 2004 a program called "UDPSpeed" surfaced in the IL:2 Sturmovik FB forum on SimHQ. It made use of the UDP server. More recently Mike Couvillion has written an extensive C++ wrapper for devicelink. Check the forum on the Wing Walkers site for the code, sample applications and helpful comments.
Other sims..., well, it depends. Visit the company web sites to see what they say. Also look at the forums to see how others have modified and expanded upon the base product. Then take it from there.