The interface is the tool that permits you to drive FS200x from externally giving you the chance to use switches, buttons, rotaries and many other devices.
There are several interfaces for this purpose but the most popular are EPIC, IOCards (http://www.opencockpits.com) and FSBUS (http://www.fsbus.de).
Personally I've chosen the IOCards from Opencockpits since they represented the kind of interface that I was looking for:
- USB support
- cards availability for purchase
- network support
- various tools for the implementation of the onboard systems logic
- a programming language for an advanced systems logic implementation (SIOC)
The Master Card is the core of the system.
It is connected to the parallel port of the pc (optionally you can connect up to 4 Master Cards to the USB expansion Card) and offers 72 digital inputs, 64 digital outputs, a digital bus to connect other cards such as servo card, stepper card, display card etc.
An input can be linked to an ON-OFF switch to turn on, for example, the taxi lights or an output can be used to turn on a LED to signal the position of the landing gears.
Each input/output works in TTL logic so 5 Volts represents a logic "1" and 0 Volts represents a logic "0".
The Master Card is managed with 3 programs:
- controlador.exe : diagnostic program to verify the communication with the pc and to test inputs and outputs;
- configiocard.exe: program to implement the logic of your cockpit by assigning functions to each switch, rotary, button etc. connected to the Master Card;
- iocard.exe : it executes the program written with configiocard.exe interacting with FS200x;
A powerful and flexible tool to program the cockpit logic is SIOC.
SIOC is an event-oriented programming language specifically written to give builders the chance of an advanced implementation of the onboard systems of your cockpit.
It's pretty simple to learn but you've got to have it clear in your mind how it works.
I wrote above that it is an "event-oriented" language: it means that it will execute a specific user programmed code only when that specific event will happen.
An example could clarify it: (this small piece of code turn on a LED when the switch is ON)
Var 1000, name LED, Link IOCARD_OUT, Output 15
Var 1001, name LEDSWITCH, Link IOCARD_SW, Input 1
{
&LED = &LEDSWITCH
}
Let's have a look at the first line:
a variable "1000" named "LED" is declared and linked ("Link IOCARD_OUT") with the output line #15 where our LED is phisically soldered.
The output #15 then will assume the value that the variable "1000" (or "LED") will contain (5 Volt if the value is "1", 0 Volt if "0").
The 2nd line:
a variable "1001" named "LEDSWITCH" is declared and linked ("Link IOCARD_SW" since we are connecting a switch or button) with the input line #1 where the switch to "drive" our LED is phisically soldered.
The following is the important part:
when I turn the switch to ON ("1") the code between "{" and "}" is executed and every time the switch changes state (ON->OFF or OFF->ON).
In this case the variable "LED" assigned to the LED connected to the output line #15 will assume the value of the switch: "1" (our LED will turn ON), "0" (our LED will turn OFF).
Easy, isn't it?
The code between "{" and "}", then, is executed only when
the event "input changed state" happens.
When you have understood how SIOC works, it's easy to program your cockpit logic.
So far I've programmed the whole engines start sequence, the landing gear switch with position indicators (3 red and 3 green LEDs), the master autopilot switch and the IvAp (IVAO pilot client) transponder switch.