/usr/include/libindi/indiapi.h is in libindi-dev 1.2.0-3.
This file is owned by root:root, with mode 0o644.
The actual contents of the file can be viewed below.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 249 250 251 252 253 254 255 256 257 258 259 260 261 262 263 264 265 266 267 268 269 270 271 272 273 274 275 276 277 278 279 280 281 282 283 284 285 286 287 288 289 290 291 292 293 294 295 296 297 298 299 300 301 302 303 304 305 306 307 308 309 310 311 312 313 314 315 316 317 318 319 320 321 322 323 324 325 326 327 328 329 330 331 332 333 334 335 336 337 338 339 340 341 342 343 344 345 346 347 348 349 350 351 352 353 354 355 356 357 358 359 360 361 362 363 364 365 366 367 368 369 370 371 372 373 374 375 376 377 378 379 380 381 382 383 384 385 386 387 388 389 390 391 392 393 394 395 396 397 398 399 400 401 402 403 404 405 406 407 408 409 410 411 412 413 414 415 416 417 418 419 420 421 422 423 | #if 0
INDI
Copyright (C) 2003 Elwood C. Downey
This library is free software; you can redistribute it and/or
modify it under the terms of the GNU Lesser General Public
License as published by the Free Software Foundation; either
version 2.1 of the License, or (at your option) any later version.
This library is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
Lesser General Public License for more details.
You should have received a copy of the GNU Lesser General Public
License along with this library; if not, write to the Free Software
Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
#endif
#ifndef INDI_API_H
#define INDI_API_H
/** \mainpage Instrument Neutral Distributed Interface INDI
*
\section Introduction
INDI is a simple XML-like communications protocol described for interactive and automated remote control of diverse instrumentation.\n
INDI is small, easy to parse, and stateless. In the INDI paradigm each Device poses all command and status functions in terms of settings and getting Properties. Each Property is a vector of one or more names members. Each property 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 GUI.\n
Clients learn the Properties of a particular Device at runtime using introspection. This decouples Client and Device implementation histories. Devices have a complete authority over whether to accept commands from Clients. INDI accommadates intermediate servers, broadcasting, and connection topologies ranging from one-to-one on a single system to many-to-many between systems of different genre.\n
The INDI protocol can be nested within other XML elements such as constraints for automatic scheduling and execution.\n
For a complete review on the INDI protocol, please refer to the INDI <a href="http://www.clearskyinstitute.com/INDI/INDI.pdf">white paper</a>.
\section Audience Intended Audience
INDI is intended for developers who seek a scalable API for device control and automation. Hardware drivers written under INDI can be used under any INDI-compatible client. INDI serves as a backend only, you need frontend clients to control devices. Current clients include <a href="http://edu.kde.org/kstars">KStars</a>, <a href="http://www.clearyskyinstitute.com/xephem">Xephem</a>, <a href="http://pygtkindiclient.sourceforge.net/">DCD</a>, and <a href="http://www.stargazing.net/astropc">Cartes du Ciel</a>.
\section Development Developing under INDI
<p>Please refere to the <a href="http://www.indilib.org/develop/developer-manual">INDI Developers Manual</a> for a complete guide on INDI's driver developemnt framework.</p>
<p>The INDI Library API is divided into the following main sections:</p>
<ul>
<li><a href="indidevapi_8h.html">INDI Device API</a></li>
<li><a href="classINDI_1_1BaseClient.html">INDI Client API</a></li>
<li><a href="namespaceINDI.html">INDI Base Drivers</a>: Base classes for all INDI drivers. Current base drivers include:
<ul>
<li><a href="classINDI_1_1Telescope.html">Telescope</a></li>
<li><a href="classINDI_1_1CCD.html">CCD</a></li>
<li><a href="classINDI_1_1GuiderInterface.html">Guider</a></li>
<li><a href="classINDI_1_1FilterWheel.html">Filter Wheel</a></li>
<li><a href="classINDI_1_1Focuser.html">Focuser</a></li>
<li><a href="classINDI_1_1Dome.html">Dome</a></li>
<li><a href="classINDI_1_1Weather.html">Weather</a></li>
<li><a href="classINDI_1_1GPS.html">GPS</a></li>
<li><a href="classINDI_1_1USBDevice.html">USB</a></li>
</ul>
<li><a href="md_libs_indibase_alignment_alignment_white_paper.html">INDI Alignment Subsystem</a></li>
<li><a href="structINDI_1_1Logger.html">INDI Debugging & Logging API</a></li>
<li><a href="indicom_8h.html">INDI Common Routine Library</a></li>
<li><a href="lilxml_8h.html">INDI LilXML Library</a></li>
<li><a href="group__configFunctions.html">Configuration</a></li>
</ul>
\section Tutorials
INDI Library includes a number of tutorials to illustrate development of INDI drivers. Check out the <a href="examples.html">examples</a> provided with INDI library.
\section Simulators
Simulators provide a great framework to test drivers and equipment alike. INDI Library provides the following simulators:
<ul>
<li><b>Telescope Simulator</b>: Offers GOTO capability, motion control, guiding, and ability to set Periodic Error (PE) which is read by the CCD simulator when generating images.</li>
<li><b>CCD Simulator</b>: Offers a very flexible CCD simulator with a primary CCD chip and a guide chip. The simulator generate images based on the RA & DEC coordinates it
snoops from the telescope driver using General Star Catalog (GSC). Please note that you must install GSC for the CCD simulator to work properly. Furthermore,
The simulator snoops FWHM from the focuser simulator which affects the generated images focus. All images are generated in standard FITS format.</li>
<li><b>Filter Wheel Simulator</b>: Offers a simple simulator to change filter wheels and their corresponding designations.</li>
<li><b>Focuser Simulator</b>: Offers a simple simualtor for an absolute position focuser. It generates a simulated FWHM value that may be used by other simulator such as the CCD simulator.</li>
<li><b>Dome Simulator</b>: Offers a simple simulator for an absolute position dome with shutter.
<li><b>GPS Simulator</b>: Offers a simple simulator for GPS devices that send time and location data to the client and other drivers.
</ul>
\section Help
You can find information on INDI development in the <a href="http://www.indilib.org">INDI Library</a> site. Furthermore, you can discuss INDI related issues on the <a href="http://sourceforge.net/mail/?group_id=90275">INDI development mailing list</a>.
\author Jasem Mutlaq
\author Elwood Downey
*/
/** \file indiapi.h
\brief Constants and Data structure definitions for the interface to the reference INDI C API implementation.
\author Elwood C. Downey
*/
/*******************************************************************************
* INDI wire protocol version implemented by this API.
* N.B. this is indepedent of the API itself.
*/
#define INDIV 1.7
/* INDI Library version */
#define INDI_VERSION_MAJOR 1
#define INDI_VERSION_MINOR 2
#define INDI_VERSION_RELEASE 0
/*******************************************************************************
* Manifest constants
*/
/** \typedef ISState
\brief Switch state.
*/
typedef enum
{
ISS_OFF, /*!< Switch is OFF */
ISS_ON /*!< Switch is ON */
} ISState; /* switch state */
/** \typedef IPState
\brief Property state.
*/
typedef enum
{
IPS_IDLE, /*!< State is idle */
IPS_OK, /*!< State is ok */
IPS_BUSY, /*!< State is busy */
IPS_ALERT /*!< State is alert */
} IPState; /* property state */
/** \typedef ISRule
\brief Switch vector rule hint.
*/
typedef enum
{
ISR_1OFMANY, /*!< Only 1 switch of many can be ON (e.g. radio buttons) */
ISR_ATMOST1, /*!< At most one switch can be ON, but all switches can be off. It is similar to ISR_1OFMANY with the exception that all switches can be off. */
ISR_NOFMANY /*!< Any number of switches can be ON (e.g. check boxes) */
} ISRule; /* switch vector rule hint */
/** \typedef IPerm
\brief Permission hint, with respect to client.
*/
typedef enum
{
IP_RO, /*!< Read Only */
IP_WO, /*!< Write Only */
IP_RW /*!< Read & Write */
} IPerm; /* permission hint, WRT client */
/* The XML strings for these attributes may be any length but implementations
* are only obligued to support these lengths for the various string attributes.
*/
#define MAXINDINAME 64
#define MAXINDILABEL 64
#define MAXINDIDEVICE 64
#define MAXINDIGROUP 64
#define MAXINDIFORMAT 64
#define MAXINDIBLOBFMT 64
#define MAXINDITSTAMP 64
/*******************************************************************************
* Typedefs for each INDI Property type.
*
* INumber.format may be any printf-style appropriate for double
* or style "m" to create sexigesimal using the form "%<w>.<f>m" where
* <w> is the total field width.
* <f> is the width of the fraction. valid values are:
* 9 -> :mm:ss.ss
* 8 -> :mm:ss.s
* 6 -> :mm:ss
* 5 -> :mm.m
* 3 -> :mm
*
* examples:
*
* to produce use
*
* "-123:45" %7.3m
* " 0:01:02" %9.6m
*/
/** \struct IText
\brief One text descriptor.
*/
typedef struct {
/** index name */
char name[MAXINDINAME];
/** short description */
char label[MAXINDILABEL];
/** malloced text string */
char *text;
/** pointer to parent */
struct _ITextVectorProperty *tvp;
/** handy place to hang helper info */
void *aux0;
/** handy place to hang helper info */
void *aux1;
} IText;
/** \struct _ITextVectorProperty
\brief Text vector property descriptor.
*/
typedef struct _ITextVectorProperty {
/** device name */
char device[MAXINDIDEVICE];
/** property name */
char name[MAXINDINAME];
/** short description */
char label[MAXINDILABEL];
/** GUI grouping hint */
char group[MAXINDIGROUP];
/** client accessibility hint */
IPerm p;
/** current max time to change, secs */
double timeout;
/** current property state */
IPState s;
/** texts comprising this vector */
IText *tp;
/** dimension of tp[] */
int ntp;
/** ISO 8601 timestamp of this event */
char timestamp[MAXINDITSTAMP];
/** handy place to hang helper info */
void *aux;
} ITextVectorProperty;
/** \struct INumber
\brief One number descriptor.
*/
typedef struct {
char name[MAXINDINAME]; /** index name */
char label[MAXINDILABEL]; /** short description */
char format[MAXINDIFORMAT]; /** GUI display format, see above */
double min, max; /** range, ignore if min == max */
double step; /** step size, ignore if step == 0 */
double value; /** current value */
struct _INumberVectorProperty *nvp; /** pointer to parent */
void *aux0, *aux1; /** handy place to hang helper info */
} INumber;
/** \struct _INumberVectorProperty
\brief Number vector property descriptor.
INumber.format may be any printf-style appropriate for double or style "m" to create sexigesimal using the form "%\<w\>.\<f\>m" where:\n
\<w\> is the total field width.\n
\<f\> is the width of the fraction. valid values are:\n
9 -> \<w\>:mm:ss.ss \n
8 -> \<w\>:mm:ss.s \n
6 -> \<w\>:mm:ss \n
5 -> \<w\>:mm.m \n
3 -> \<w\>:mm \n
examples:\n
To produce "-123:45", use \%7.3m \n
To produce " 0:01:02", use \%9.6m
*/
typedef struct _INumberVectorProperty {
/** device name */
char device[MAXINDIDEVICE];
/** property name */
char name[MAXINDINAME];
/** short description */
char label[MAXINDILABEL];
/** GUI grouping hint */
char group[MAXINDIGROUP];
/** client accessibility hint */
IPerm p;
/** current max time to change, secs */
double timeout;
/** current property state */
IPState s;
/** numbers comprising this vector */
INumber *np;
/** dimension of np[] */
int nnp;
/** ISO 8601 timestamp of this event */
char timestamp[MAXINDITSTAMP];
/** handy place to hang helper info */
void *aux;
} INumberVectorProperty;
/** \struct ISwitch
\brief One switch descriptor.
*/
typedef struct {
char name[MAXINDINAME]; /** index name */
char label[MAXINDILABEL]; /** this switch's label */
ISState s; /** this switch's state */
struct _ISwitchVectorProperty *svp; /** pointer to parent */
void *aux; /** handy place to hang helper info */
} ISwitch;
/** \struct _ISwitchVectorProperty
\brief Switch vector property descriptor.
*/
typedef struct _ISwitchVectorProperty {
/** device name */
char device[MAXINDIDEVICE];
/** property name */
char name[MAXINDINAME];
/** short description */
char label[MAXINDILABEL];
/** GUI grouping hint */
char group[MAXINDIGROUP];
/** client accessibility hint */
IPerm p;
/** switch behavior hint */
ISRule r;
/** current max time to change, secs */
double timeout;
/** current property state */
IPState s;
/** switches comprising this vector */
ISwitch *sp;
/** dimension of sp[] */
int nsp;
/** ISO 8601 timestamp of this event */
char timestamp[MAXINDITSTAMP];
/** handy place to hang helper info */
void *aux;
} ISwitchVectorProperty;
/** \struct ILight
\brief One light descriptor.
*/
typedef struct {
char name[MAXINDINAME]; /** index name */
char label[MAXINDILABEL]; /** this lights's label */
IPState s; /** this lights's state */
struct _ILightVectorProperty *lvp; /** pointer to parent */
void *aux; /** handy place to hang helper info */
} ILight;
/** \struct _ILightVectorProperty
\brief Light vector property descriptor.
*/
typedef struct _ILightVectorProperty {
/** device name */
char device[MAXINDIDEVICE];
/** property name */
char name[MAXINDINAME];
/** short description */
char label[MAXINDILABEL];
/** GUI grouping hint */
char group[MAXINDIGROUP];
/** current property state */
IPState s;
/** lights comprising this vector */
ILight *lp;
/** dimension of lp[] */
int nlp;
/** ISO 8601 timestamp of this event */
char timestamp[MAXINDITSTAMP];
/** handy place to hang helper info */
void *aux;
} ILightVectorProperty;
/** \struct IBLOB
\brief One Blob (Binary Large Object) descriptor.
*/
typedef struct { /* one BLOB descriptor */
/** index name */
char name[MAXINDINAME];
/** this BLOB's label */
char label[MAXINDILABEL];
/** format attr */
char format[MAXINDIBLOBFMT];
/** malloced binary large object bytes */
void *blob;
/** bytes in blob */
int bloblen;
/** n uncompressed bytes */
int size;
/** pointer to parent */
struct _IBLOBVectorProperty *bvp;
/** handy place to hang helper info */
void *aux0, *aux1, *aux2;
} IBLOB;
/** \struct _IBLOBVectorProperty
\brief BLOB (Binary Large Object) vector property descriptor.
*/
typedef struct _IBLOBVectorProperty { /* BLOB vector property descriptor */
/** device name */
char device[MAXINDIDEVICE];
/** property name */
char name[MAXINDINAME];
/** short description */
char label[MAXINDILABEL];
/** GUI grouping hint */
char group[MAXINDIGROUP];
/** client accessibility hint */
IPerm p;
/** current max time to change, secs */
double timeout;
/** current property state */
IPState s;
/** BLOBs comprising this vector */
IBLOB *bp;
/** dimension of bp[] */
int nbp;
/** ISO 8601 timestamp of this event */
char timestamp[MAXINDITSTAMP];
/** handy place to hang helper info */
void *aux;
} IBLOBVectorProperty;
/** \brief Handy macro to find the number of elements in array a[]. Must be used with actual array, not pointer.
*/
#define NARRAY(a) (sizeof(a)/sizeof(a[0]))
#endif
|