INDI is a protocol designed to support control, automation, data aquisition, and exchange among hardware devices and software frontends. INDI stands for the Instrument-Neutral-Distributed-Interface, and was developed by Elwood C. Downey of ClearSky Institute.
Control systems are often written for a specific device or range of devices. When one or more of the device parameters change, the software needs to be modified to accomodate the change. That is, the software frontend and hardware backend are tightly coupled.
INDI resolves this problem by providing a framework that decouples low level hardware drivers from high level front end clients. That is, clients that use the device drivers are completely unaware of the device capabilities. In run time, clients communicate with the device drivers and build a completely dynamical GUI based on the services provided by the device. In essence, INDI provides the capacity to describe any device and its parameters to any INDI-compliant client. Once you have a client, you can develop as many devices as you can without any changes on the client side.
But this is not all! Since INDI's protocol is based on XML, it can be easily parsed and nested in other frameworks. For example, you can incorporate INDI in RTML to place observational constraints on your devices.
Furthermore, remote control of devices is seamless with INDI's server/client architecture. Distributed devices can be controlled from one centralized environment.
Finally, INDI drivers are scriptable using INDI scripting tools. You can use these command line tools in your favorite langauge to have complete control of the device. These tools enable developers to provide scheduling and automation frameworks for their devices.
INDI driver is what communicates directly to your device. It is responsible for controlling the device parameters and for defining them to clients. Drivers send a list of supported device properties to clients where they are parsed and presented to the end users.
For more information on INDI drivers, please refer to INDI Developers Manual.
INDI server is the hub that sits between your devices (drivers) and your clients. It reroutes traffic for control and data acorss distributed networks. Each device or client in the network is a node and may communicate with other nodes whenever desired. The sever supports broadcasting, chaining, and marshalling of data.
Clients are the software frontends that communicate with the hardware drivers. They usually communicate with INDI hardware drivers via INDI server, though they can communicate with the drivers directly. There are many types of clients, most notably:
Thanks to the generic nature of INDI, INDI can virtually control any device. While our focus is astronomical instruments, there is nothing that prevents you from writing an INDI driver for your toaster!
Currently, INDI Library supports a growing number of telescopes, CCD, focusers, and video capture devices. For a complete list, please visit INDI devices page.
If your device doesn't exist in the devices list page, there is a couple of things you can do:
INDI is shipped with many Linux distributions today by default. Check if your distribution includes one of INDI compatible clients. Ideally, GUI clients should take care of establishing INDI server and providing users with a list of supported drivers.
You may use the INDI version shipped with your client, or at your option, you may download the latest stable INDI release from the download section.
All INDI compatible clients can also connect to local and remote INDI servers. So you should first start INDI server, then configure your client to connect to it. INDI server must be running on the same physical machine connected to the device. For example, to start INDI server to run the LX200 GPS telescope on localhost and listening on default port 7624, type:
$ indiserver lx200gps
Type 'man indiserver' for the complete INDI Server command syntax.
Before answering this question, it is important to distinguish between INDI wire protocol and INDI Library:
At this stage, there is no plan to support INDI Library on other operating systems. On the other hand, INDI clients exist for different platforms. While KStars and Xephem are traditional Linux clients, DCD can run on any platform supporting Python.
INDI Library can be compiled under a vanilla POSIX system. It requires the following components:
Some drivers require external libraries like libusb, or SBIG universal library. Make sure to install them if you want to operate your particular device.
Unfortunately, we can't help you with that. Refer to your client documentation or contact the client's maintainer to find out. Please do not post client-specific questions on the INDI mailing list. Direct such question to your client's author.
Due to the varied nature of clients, there are no documentation to help you write a client. However, you can start by looking at existing clients like KStars or Xephem. Furthermore, it is highly recommended to examine the getINDI and setINDI tools source code since these two tools are very simple INDI clients.
The most common reported problem is that of permission. Please insure you have proper permissions to access your device. You should check out INDI Wiki for driver-specfic details and troubleshooting. If you found a bug in the software, file a bug report at INDI Bug Tracking system. You may also post your problem to the INDI Development mailing list.
We highly appreciate any help from our users! Do you have a device that is not yet supported by INDI? Tell us about it, or go ahead and write your own driver and submit it to us. If your device is supported, test it with INDI, does it work as expected? If not, please report to us any problems, suggestions, or comments you have.
Contributions to Wiki and documentation are greatly appreciated as well. Let us know if you use INDI in your observatory, home, or camp. It's always good to know about more INDI users!