X-Git-Url: http://sigrok.org/gitweb/?a=blobdiff_plain;f=libsigrok.h;h=1e45a5e1a1d4828f1a579490a43afc440a7c5a20;hb=ae67644fe5340d9c6e450fb0443178af356e0647;hp=dbd0c594f0097461218ca713aa82fd8f6ef9becf;hpb=9fd6bc205433eae242960e9e976d28ac0fd20254;p=libsigrok.git diff --git a/libsigrok.h b/libsigrok.h index dbd0c594..1e45a5e1 100644 --- a/libsigrok.h +++ b/libsigrok.h @@ -73,6 +73,7 @@ enum { SR_ERR_NA = -6, /**< Not applicable. */ SR_ERR_DEV_CLOSED = -7, /**< Device is closed, but needs to be open. */ SR_ERR_TIMEOUT = -8, /**< A timeout occurred. */ + SR_ERR_PROBE_GROUP= -9, /**< A probe group must be specified. */ /* * Note: When adding entries here, don't forget to also update the @@ -141,6 +142,8 @@ enum { SR_T_RATIONAL_PERIOD, SR_T_RATIONAL_VOLT, SR_T_KEYVALUE, + SR_T_UINT64_RANGE, + SR_T_DOUBLE_RANGE, }; /** Value for sr_datafeed_packet.type. */ @@ -176,6 +179,7 @@ enum { SR_MQ_SOUND_PRESSURE_LEVEL, SR_MQ_CARBON_MONOXIDE, SR_MQ_RELATIVE_HUMIDITY, + SR_MQ_TIME, /**< Time */ }; /** Values for sr_datafeed_analog.unit. */ @@ -214,6 +218,10 @@ enum { * represented as the fraction of number of particles of the substance. */ SR_UNIT_CONCENTRATION, + SR_UNIT_REVOLUTIONS_PER_MINUTE, + SR_UNIT_VOLT_AMPERE, + SR_UNIT_WATT, + SR_UNIT_WATT_HOUR, }; /** Values for sr_datafeed_analog.flags. */ @@ -260,6 +268,8 @@ enum { /** Sound pressure level represented as a percentage of measurements * that were over a preset alarm level. */ SR_MQFLAG_SPL_PCT_OVER_ALARM = 0x10000, + /** Time is duration (as opposed to epoch, ...). */ + SR_MQFLAG_DURATION = 0x20000, }; struct sr_context; @@ -543,6 +553,16 @@ struct sr_probe { char *trigger; }; +/** Structure for groups of probes that have common properties. */ +struct sr_probe_group { + /** Name of the probe group. */ + char *name; + /** List of sr_probe structs of the probes belonging to this group. */ + GSList *probes; + /** Private data for driver use. */ + void *priv; +}; + struct sr_config { int key; GVariant *data; @@ -580,6 +600,9 @@ enum { /** The device can measure humidity. */ SR_CONF_HYGROMETER, + /** The device can measure energy consumption. */ + SR_CONF_ENERGYMETER, + /*--- Driver scan options -------------------------------------------*/ /** @@ -671,12 +694,27 @@ enum { /** Sound pressure level time weighting. */ SR_CONF_SPL_WEIGHT_TIME, + /** Sound pressure level measurement range. */ + SR_CONF_SPL_MEASUREMENT_RANGE, + /** Max hold mode. */ SR_CONF_HOLD_MAX, /** Min hold mode. */ SR_CONF_HOLD_MIN, + /** Logic low-high threshold range. */ + SR_CONF_VOLTAGE_THRESHOLD, + + /** The device supports using a external clock. */ + SR_CONF_EXTERNAL_CLOCK, + + /** + * The device supports swapping channels. Typical this is between + * buffered and unbuffered channels. + */ + SR_CONF_SWAP, + /*--- Special stuff -------------------------------------------------*/ /** Scan options supported by the driver. */ @@ -697,6 +735,21 @@ enum { /** The device supports setting the number of probes. */ SR_CONF_CAPTURE_NUM_PROBES, + /** Power off the device. */ + SR_CONF_POWER_OFF, + + /** Data source for acquisition. If not present, acquisition from + * the device is always "live", i.e. acquisition starts when the + * frontend asks and the results are sent out as soon as possible. + * + * If present, it indicates that either the device has no live + * acquisition capability (for example a pure data logger), or + * there is a choice. sr_config_list() returns those choices. + * + * In any case if a device has live acquisition capabilities, it + * is always the default. */ + SR_CONF_DATA_SOURCE, + /*--- Acquisition modes ---------------------------------------------*/ /** @@ -738,6 +791,8 @@ struct sr_dev_inst { char *model; char *version; GSList *probes; + /* List of sr_probe_group structs */ + GSList *probe_groups; void *conn; void *priv; }; @@ -748,6 +803,8 @@ enum { SR_INST_USB = 10000, /** Device instance type for serial port devices. */ SR_INST_SERIAL, + /** Device instance type for USBTMC devices. */ + SR_INST_USBTMC, }; /** Device instance status. */ @@ -775,11 +832,14 @@ struct sr_dev_driver { GSList *(*dev_list) (void); int (*dev_clear) (void); int (*config_get) (int id, GVariant **data, - const struct sr_dev_inst *sdi); + const struct sr_dev_inst *sdi, + const struct sr_probe_group *probe_group); int (*config_set) (int id, GVariant *data, - const struct sr_dev_inst *sdi); + const struct sr_dev_inst *sdi, + const struct sr_probe_group *probe_group); int (*config_list) (int info_id, GVariant **data, - const struct sr_dev_inst *sdi); + const struct sr_dev_inst *sdi, + const struct sr_probe_group *probe_group); /* Device-specific */ int (*dev_open) (struct sr_dev_inst *sdi); @@ -793,33 +853,11 @@ struct sr_dev_driver { void *priv; }; -struct sr_session { - /** List of struct sr_dev pointers. */ - GSList *devs; - /** List of struct datafeed_callback pointers. */ - GSList *datafeed_callbacks; - GTimeVal starttime; - - unsigned int num_sources; - - /* - * Both "sources" and "pollfds" are of the same size and contain pairs - * of descriptor and callback function. We can not embed the GPollFD - * into the source struct since we want to be able to pass the array - * of all poll descriptors to g_poll(). - */ - struct source *sources; - GPollFD *pollfds; - int source_timeout; - - /* - * These are our synchronization primitives for stopping the session in - * an async fashion. We need to make sure the session is stopped from - * within the session thread itself. - */ - GMutex stop_mutex; - gboolean abort_session; -}; +/** + * Opaque data structure representing a libsigrok session. None of the fields + * of this structure are meant to be accessed directly. + */ +struct sr_session; #include "proto.h" #include "version.h"