/**
 * @page structure The Program Structure
 *
 * In a computer system we have generic input data, like mice, keyboard, timer,
 * etc, comming from the OS on one side and machine dependent features and input
 * data on the other. Pbbuttonsd tries to bridge this two sides.
 *
 * The first group of input is OS-dependent and always availabe. It is
 * controlled by the input manager. The second group is machine-dependent
 * (hardware or software dependent) and handled by modules, that could be added
 * if needed (currently at compile time only).
 *
 * The following picture shows the basic structure of pbbuttonsd:
 *
 * <img src="../images/structure.png">
 *
 * The main parts of pbbuttonsd are
 *   @li The Main Loop
 *   @li @subpage inputmanager "The Input Manager"
 *   @li @subpage modules "The Modules"
 * 
 * <h3>Main Loop</h3>
 *
 * The main loop of pbbuttonsd repeatedly collects the input events and pass
 * them over to so called 'input handlers' which then will process the
 * suitable queues to distribute the data to the modules.
 *
 * There are two big blocks of input handlers. In the first are the timer
 * handlers, which will be called on a regularly time basis. PBButtonsd holds
 * a list of timers, which will create timer events in different intervals.
 * Any count of timers would be possible but currently there are only tree
 * implemented (10ms, 100ms and 1s). This should be sufficient for most
 * applications.
 *
 * In the second block are the input devices which get their input by reading
 * a device file. The function setup_input() tries to open each desired
 * input device and add each sucesfully opened device to the input list.
 *
 * Furthermore each input device have its own input handler attached, which
 * does the data translation from the device's data format to pbbuttonsds
 * internal data format. This input list is also handled by the main loop.
 * If new data from an input device is available the appropriate handler will
 * be called.
 */

