INDI: Writing an INDI client

This is a work in progress, and is really composed of my working notes more than anything else. The INDI project is still young enough that the focus has been on writing device drivers and implementing potentially useful features. The side effect is that you are “stuck” with using whatever clients are available. The FAQ basically throws you to your own devices when writing a client and points you to existing clients you can reverse engineer. While that’s not too unreasonable (you are a developer, right?) it makes the process a bit more painful than it needs to be.

The goal of this mini-HOWTO is to accumulate what I’ve learned (am learning) about writing a client. The chief problem is the lack of a client library for any language. So my starting point is to try to write a Perl module to implement the client protocol. The protocol is XML-based and is specified as a DTD to which messages must adhere. Consequently, a client can be written in any language. Although the INDI FAQ says only C and C++ drivers are supported, the nature of the protocol is such that that is not really true either. Drivers communicate with the INDI server via an XML-based protocol (also part of that DTD); consequently, drivers could be written in any language, but there are no bindings provided by the INDI developers (yet anyway).

So, let’s get started!