Sunday, March 27, 2005

GenEx - My opensource contribution to IOCards Project

This weekend, I finally gave something back to IOCards project by writing an opensource program that will automatically generate SIOC configuration programs. This tool, I believe will bring a new level of user friendliness to IOCards project and bring it one step closer to the other commercial vendor's plug&play type solutions. Thanks to my friend Klaus Troemer for giving me the reason to get back at writing this program which I originally dropped immediately after conceiving it.

I named this program "GenEx" as it 'generates' SIOC programs from simple 'Excel' spread sheets. Users enter their iocards setup information(their input output connection numbers) in a spread sheet against a pre-identified function names. For example, this spread sheet contains a list of all functions such as IN and HPA selector or ND range 10,20,40 selector etc found on EFIS panel, one functin per row. For each function, users are expected to enter thier iocards connection number. For example, if you have connected ND range 10 selection switch to iocard input #32, then simply enter 32 in the cell against the function named 'ND range 10' in the spread sheet. That's it. And run the 'GenEx' against this spread sheet now, and GenEx generates a complete working SIOC program that works out of box with Project Magenta. No more need for knowing the details of IOCards programming or FSUIPC offsets.

A couple of following things motivated me to write this program:

First, when i started to write sioc program for my 777 efis panel, i realized that i was combing through a lot of example files from other users and also pouring over the project magenta offsets documentation. And then it struck me that many other iocard users before and following me will have to do the same. But in reality, there is no reason for that, since only difference between one users program and another's is really the connections information.

Second, I noticed the major trend in commercial interface cards vendor space with general curiosity. Most of their claim for charging premium is their software's user friendly claim of - "just connect, assign position numbers and go running without worrying about fsuipc offsets". It seemed, this kind of easy up and running nature is desirable for many builders and they are paying comparatively big bucks for these commercial solutions. While projects like IOCards are without doubt - better value and functionally competitive, if not better than any of these commercial solutions, but they still require some level of programming competency and not as user friendly as these other commercial solutions calaim themselves to be. So, future focus for these free projects such as IOCards should be of making them much more user friendly than they are today.

Third, i watched Project Magenta's PMSystems marketing video and one sentence Jonathan said caught my attention. While refering to Phidgets, he said - "programming with offsets is fast becoming a thing of the past". I thought - "yes, it can be done with IOCards too".

And finally, right when i thought no one would actively wish to distance away themselves from the programming fun (i obviously assumed that everyone would be dying to program their interface cards, and they'll laugh at me if i tell them to just forget about all the offsets and enter their connection numbers into a spread sheet), one of my builder friends told me that he is considering a more expensive commercial solution for precisely the same reason. Which made me believe that GenEx has a need and so then i decided to code it.

So, as a first step, in this regard, i thought with GenEx I can address all the above issues. It makes the IOCards simple by a) eliminating the need to learn and worry about SIOC programming b) no need to deal with Project Magenta/Fsuipc offsets and c) brings IOCards one step closer to commercial vendors claims.

Also, one more bonus advantage of using GenEx to generate your SIOC programs is - the excel file (that is used for generating the sioc program file) is also the automatic documentation of your cockpit project, since it neatly captures the information about every input/output connection on your iocards and it's assigned function.

So, by now if you are wondering what stage the program is? It's coding is complete in all aspects, except that it needs sioc program templates for various aircrafts and panels. Currently, it has template for generating sioc program for B-777 EFIS panel only. Adding these templates to cover more types and panels is external to the program code and will be taken up in the next couple of weeks.

I have sent the beta copy to IOCards team to evaluate and comment. Hopefully they'll accept the program and make it officially a part of IOCards project. If they like it, the program can be further improved. Currently it generates SIOC program file as ASCII text file. This generated file still needs to be compiled with the regular Config_sioc.exe compiler. This extra step can be eliminated if the sioc program compiler is also integrated into GenEx. Then it can directly generate the '.ssi' file directly from the input excel file. Sweet! I am only hoping IOCards project folks bless this.

So, now imagine - all you need to do is: connect your panels hardware to input/output ports on the iocards cards. Then open the included excel file and just type these connection numbers in the well identified cells and save. Run GenEx against the excel file. And you are ready to be up and running with Project Magenta. Sounds exactly like one of the commercial card vendor advertisments correct? But this time it's free, and it's IOCards.

Finally, I am glad that i am able to contribute something back to the IOCards project team whom I respect for what they gave us all for free.