This is a toy INDI driver for demo purposes. It has two Number properties, x and xmaths. Setting x to any value causes xmaths to be set to various functions of x. In general, to create a functional INDI driver, all that is needed is to derive a class from the IndiDriver class and instantiate it when the program starts. The class handles reading a configuration file for the driver and setting up a log file for errors and other messages. Incoming INDI messages are handled automatically and dispatched to a handler function for that particular message type. Overriding the handler function in the derived class allows the driver to take an action based on the message, as well as sending a response, if required. Outgoing messages can be sent from any method; the function to send them is a method in the IndiDriver class. IndiProperties are used as the basis for the "SET", "NEW", and "DEF". The IndiProperty class is the template from which all the INDI messages are generated. By defining one, a user can generate the necessary INDI messages based on it. The IndiDriver class also contains a worker thread which can be used to perform tasks such that the driver will still be responsive to incoming messages. The main purpose of the driver should be supported here, leaving the main thread to handle incoming messages.