Instrument Neutral Distributed Interface

Instrument Neutral Distributed Interface (INDI) is a distributed control system (DCS) protocol to enable control, data acquisition and exchange among hardware devices and software front ends, emphasizing astronomical instrumentation.
Introduction.
Elwood Downey started the INDI Protocol initiative in 2003 to develop a platform and client independent control protocol. INDI is a simple protocol modeled on Extensible Markup Language (XML), described for interactive and automated remote control of diverse instruments. It is small, easy to parse, and stateless. In the INDI paradigm, each "Device" poses all command and status functions in terms of setting and getting "Properties". Each Property is a vector of one or more named members, and has a current value vector; a target value vector; provides information about how it should be sequenced with respect to other Properties to accomplish one coordinated unit of observation; and provides hints as to how it might be displayed for interactive manipulation in a graphical user interface (GUI). Clients learn the Properties of a particular Device at runtime using introspection.
This decouples Client and Device implementation histories. Devices have full authority over whether to accept commands from Clients. INDI accommodates intermediate servers, broadcasting, and connection topologies ranging from one-to-one on one type of system, to many-to-many between systems of different genre. The INDI protocol can be nested within other XML elements such as Remote Telescope Markup Language (RTML) to add constraints for automatic scheduling and execution.
Architecture.
The main key concept in INDI is that devices have the ability to describe themselves. This is accomplished by using XML to describe a generic hierarchy that can represent both canonical and non-canonical devices. In INDI, all devices may contain one or more properties. Any property may contain one or more elements. A property in the INDI paradigm describes a specific function of the device. There are five types of INDI properties:
INDI provides powerful scripting facilities that enable full device automation.
INDI Library.
INDI Library is an implementation of the INDI wire protocol for Unix-like systems. It supports a wide variety of astronomical instruments including telescopes, charge-coupled devices (CCDs), focusers, filters, and video capture devices. The INDI Library is licensed under the GNU Lesser General Public License (LGPL).
INDI Driver.
INDI driver is the program that communicates directly to the 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.
INDI Clients.
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:
INDI Server.
INDI server is the hub that sits between drivers and clients. It reroutes traffic for control and data across distributed networks. Each device or client in the network is a node and may communicate with other nodes whenever desired. The server supports broadcasting, chaining, and marshaling of data.
IANA port.
Internet Assigned Numbers Authority (IANA) has assigned INDI to Transmission Control Protocol (TCP) and User Datagram Protocol (UDP), or TCP/UDP port 7624. See List of TCP and UDP port numbers.