X-Git-Url: https://sigrok.org/gitweb/?a=blobdiff_plain;f=libsigrok.h;h=dd776c35146ee4e62dc45b71673d7d778ff04b2d;hb=28731bab29640ee3d68b60c1ebdb471a0758e41b;hp=3235ddf26ddbdcd620b60debd16e30893b9667fb;hpb=831d7c70eb901788d6fa7551807644b1130cce32;p=libsigrok.git diff --git a/libsigrok.h b/libsigrok.h index 3235ddf2..dd776c35 100644 --- a/libsigrok.h +++ b/libsigrok.h @@ -41,9 +41,9 @@ extern "C" { * * The correct way to get/use the libsigrok API functions is: * - @code{.c} - #include - @endcode + * @code{.c} + * #include + * @endcode */ /* @@ -63,7 +63,7 @@ extern "C" { */ /** Status/error codes returned by libsigrok functions. */ -enum { +enum sr_error_code { SR_OK = 0, /**< No error. */ SR_ERR = -1, /**< Generic/unspecified error. */ SR_ERR_MALLOC = -2, /**< Malloc/calloc/realloc error. */ @@ -132,12 +132,12 @@ enum sr_loglevel { #endif /** Type definition for callback function for data reception. */ -typedef int (*sr_receive_data_callback_t)(int fd, int revents, void *cb_data); +typedef int (*sr_receive_data_callback)(int fd, int revents, void *cb_data); /** Data types used by sr_config_info(). */ enum sr_datatype { SR_T_UINT64 = 10000, - SR_T_CHAR, + SR_T_STRING, SR_T_BOOL, SR_T_FLOAT, SR_T_RATIONAL_PERIOD, @@ -236,7 +236,7 @@ enum sr_unit { * a unitless quantity, for example. */ SR_UNIT_UNITLESS, - /** Sound pressure level relative so 20 micropascals. */ + /** Sound pressure level, in decibels, relative to 20 micropascals. */ SR_UNIT_DECIBEL_SPL, /** * Normalized (0 to 1) concentration of a substance or compound with 0 @@ -304,6 +304,59 @@ enum sr_mqflag { SR_MQFLAG_AVG = 0x40000, }; +enum sr_trigger_matches { + SR_TRIGGER_ZERO = 1, + SR_TRIGGER_ONE, + SR_TRIGGER_RISING, + SR_TRIGGER_FALLING, + SR_TRIGGER_EDGE, + SR_TRIGGER_OVER, + SR_TRIGGER_UNDER, +}; + +/** The representation of a trigger, consisting of one or more stages + * containing one or more matches on a channel. + */ +struct sr_trigger { + /** A name for this trigger. This may be NULL if none is needed. */ + char *name; + /** List of pointers to struct sr_trigger_stage. */ + GSList *stages; +}; + +/** A trigger stage. */ +struct sr_trigger_stage { + /** Starts at 0. */ + int stage; + /** List of pointers to struct sr_trigger_match. */ + GSList *matches; +}; + +/** A channel to match and what to match it on. */ +struct sr_trigger_match { + /** The channel to trigger on. */ + struct sr_channel *channel; + /** The trigger match to use. + * For logic channels, only the following matches may be used: + * SR_TRIGGER_ZERO + * SR_TRIGGER_ONE + * SR_TRIGGER_RISING + * SR_TRIGGER_FALLING + * SR_TRIGGER_EDGE + * + * For analog channels, only these matches may be used: + * SR_TRIGGER_RISING + * SR_TRIGGER_FALLING + * SR_TRIGGER_OVER + * SR_TRIGGER_UNDER + * + */ + int match; + /** If the trigger match is one of SR_TRIGGER_OVER or SR_TRIGGER_UNDER, + * this contains the value to compare against. */ + float value; +}; + /** * @struct sr_context * Opaque structure representing a libsigrok context. @@ -535,7 +588,8 @@ enum sr_channeltype { /** Information on single channel. */ struct sr_channel { - /** Number of channels, starting at 0. */ + /** The index of this channel, starting at 0. Logic channels will + * be encoded according to this index in SR_DF_LOGIC packets. */ int index; /** Channel type (SR_CHANNEL_LOGIC, ...) */ int type; @@ -543,8 +597,6 @@ struct sr_channel { gboolean enabled; /** Name of channel. */ char *name; - /** Trigger string, format like used by sigrok-cli */ - char *trigger; }; /** Structure for groups of channels that have common properties. */ @@ -569,7 +621,7 @@ struct sr_config { struct sr_config_info { /** Config key like SR_CONF_CONN, etc. */ int key; - /** Data type like SR_T_CHAR, etc. */ + /** Data type like SR_T_STRING, etc. */ int datatype; /** Id string, e.g. "serialcomm". */ char *id; @@ -686,8 +738,8 @@ enum sr_configkey { /** Coupling. */ SR_CONF_COUPLING, - /** Trigger types. */ - SR_CONF_TRIGGER_TYPE, + /** Trigger matches. */ + SR_CONF_TRIGGER_MATCH, /** The device supports setting its sample interval, in ms. */ SR_CONF_SAMPLE_INTERVAL, @@ -864,7 +916,7 @@ struct sr_dev_inst { }; /** Types of device instance, struct sr_dev_inst.type */ -enum { +enum sr_dev_inst_type { /** Device instance type for USB devices. */ SR_INST_USB = 10000, /** Device instance type for serial port devices. */ @@ -874,7 +926,7 @@ enum { }; /** Device instance status, struct sr_dev_inst.status */ -enum { +enum sr_dev_inst_status { /** The device instance was not found. */ SR_ST_NOT_FOUND = 10000, /** The device instance was found, but is still booting. */ @@ -927,7 +979,7 @@ struct sr_dev_driver { const struct sr_dev_inst *sdi, const struct sr_channel_group *cg); /** Channel status change. - * @see sr_dev_channel_enable(), sr_dev_trigger_set(). */ + * @see sr_dev_channel_enable(). */ int (*config_channel_set) (const struct sr_dev_inst *sdi, struct sr_channel *ch, unsigned int changes); /** Apply configuration settings to the device hardware.