IO-Control Program Description
The IO-Control program takes care of the connection between the external hardware on the USB bus and SIOC. The IOControl program therefore needs to know where to sent the data that some hardware element (like switches and buttons) generate. This is always a SIOC variable. So IOControl needs to know the relation between hardware switch and SIOC variable. The other way around is when a SIOC variable holds some data to display, e.g. for the LED or 7 Segment display, IOControl needs to know to what hardware element this data should go.
IOControl know this by reading the SIOC script. In the SIOC script the relation between Variable and Device Input and Output is programmed. The program finds the active SIOC script by reading he SIOC.INI file.
The Connection with SIOC is made over TCP/IP. IOControl acts as client to the SIOC IOCP server. Although there is good reason to keep the IOControl program in the same directory as SIOC, the IOControl can be at a separate computer in the FS network. The IP address of the IOCP server is set to ‘localhost’ by default, but that can be changed into the IP address of the system running SIOC.
On the other side IOControl communicates with (up to 8) processor cards. Processor cards are connected to a USB. Each processor card is given a logical device number (at first use). The USB connections are true plug and play.
The IP adres of SIOC server (default value: localhost) can be set by input on the bottom line and pressing the L1 key. The Port number is read from the SIOC.ini file.
The VID/PID can be changed. A message will pop-up to tell the user that a restart is required after changing. VID/PID will not have to be change frequently, in fact it will probably never change.
SIOC Autoconnect (L3) allows to enable/disable automatic connection to SIOC on IOControl program start-up. Otherwise use key R3 to manually control (connect/disconnect) connection to SIOC. If the connection with SIOC is OK the word Connect will appear in green.
If the program wants to connect to SIOC and SIOC is not running or is not reachable, the L3 and R3 keys will blink.
Line 5 (L5) Acceleration Sensitivity, with this the user can influence the point at which the rotary encoder accelerations kicks in. Experimental for now.
When the program starts for the first time it will ask for the location of SIOC. It will read the SIOC.INI file from that location. The SIOC.ini file holds the location and name of your SIOC script SSI file. The program will read the script and is ready for action. You can see the location and name of the SIOC script file on the bottom line.
The L7 key will copy the SIOC directory path to the input line below. You can change it and by pressing the L7 key, this will copy the input line to the line 7 and. The program reads the new SIOC.ini file etc.
Tip: Using L7 twice without changing the input wil re-read (refresh) the SIOC script.
You can set the program to hide. An icon will appear on the taskbar. Double click to reopen.
With L4 you can toggle the Start Hidden setting. When set, the program will immediately hide after start.
At the right bottom is a slider. This slider will set the intensity of the displays (and LEDs). This function will disappear. In a cockpit, one or more knobs will allow the pilot to dim the backlights. The processor will will read the analog voltage from this knob the microcode can derive a value to send display brightness commands to the 7219’s .
On the right side is the USB devices panel. The picture shows 2 devices connected: 11:10,4.4 and 10:61,32.16. The numbers indicate device ID, software revision and device features.
The top line card (11:10,4.4) is a keyboard card. The logical device number is 11 (11) the revision is 1.0 (10) and it is 4×4 (4.4) keyboard.
The second card (10:61,32.16) is a standard CPU card. The logical device number is 10 (10), the software revision is 6.1 (61). The microcode is compiled to handle 32 input shift registers and 8 7-segement driver chips (32.8).
Logical device number
When a device is newly programmed the device number will always read 255. Double click on the device revision string and a separate window will pop-up allowing to set or to change the Logical Device number. This needs to be done once after re-programming, as the CPU stores it’s logical device number in EPROM.
It is a good practice to use the same Logical Device number after re-programming to avoid device number updates in the SIOC script.
There is not a lot to tell.
I advice to have the executable in the SIOC directory. Just start the program and it will find the sioc.ini file. Read what .ssi file is in use and your’r ready. If you start all programs from a .bat file, make sure SIOC and IOControl do not try to read the ini and script file at the same time.
The program will find processor cards already plugged in, as well as any other cards plugged-in after starting the program. In normal cases you would now hide the program, but I guess you will leave it open with the logging window displayed as long as you are testing and building the SIOC script.
If the executable is not in the same directory as the sioc.ini the program will ask for the location of that file. The path to the sioc.ini file is stored, so you only need to input that once.
IOControl has a logging function. Push the L6 key. IOControl window will expand to show 2 columns. The left column is the messages from IOControl to SIOC and the Right Column the messages to the USB devices.
The logging window at the left has been opened prior to connect to SIOC.
The left window communication with SIOC:
- Displays the Arn.Initio string requesting variables 2,8,9,10,11,12, … 205.
- Then you see Arn.Vivo. SIOC says it’s alive and has received the string.
- The next line SIOC sends the value of variable 10=200 and variable 30=1 . At initialize SIOC will only send the non 0 values of the requested variables.
Now on the right side, communication with device:
- Number is set to Device 10, digits 0-5, value = 200. So these displays will display 000200.
- Now the Encoder on Device 10, input 48 sends a 1 value, this has to go to Var24
- 24=1 is send to SIOC
- 24=0 is automaticaly send to SIOC to clear variable 24 so it is ready to receive the next value(s)
- The script increments Var 10 with 1*100 and SIOC sends 300 to IOControl
- Number is set to Device 10, digits 0-5 to value 300.
The rotary encoder is turned a few more steps.
- On device 10, button 56 is pushed. Button 56 is connected to SIOC var 400.
- You can see button pushed =1 and button release =0.
- A 1 is send to var 400
- 0 is send to var 400
You can see that button 58 is also pressed and released, but this button is not assigned to any variable. This is the way you can find out what the button number is after you finished your hardware.
I added a facility to identify LED’s. If you connect LED’s to the hardware you can know the number of the LED by the chip and position it is connected to. That is a lot of work as you have to go into details.
To identify an unknown LED you need to slide the IOControl Window open downwards.
Specify the Device number. If you have a clue about the range of numbers where the LED is, you can specify a range the procedure will be shorter.
After [ Go ] the program will turn on the half of the LED’s and leave the other half off. A question will come up “IS THE LED ON?”. You answer ON or OFF. Now we know in what half the LED is and the process will continue for that half. We keep dividing until that one LED you are staring at is the only one left.
The button [ Toggle LED ] allows you to toggle the LED just identified. In fact any LED that your specify here.
All software and firmware that I talk about on this site can be downloaded (free). You will find download links on my forum about FSIO . Each first item of a forum will hold the appropriate dowload link. The forum is members only, so you need to register.