X-Git-Url: https://sigrok.org/gitweb/?a=blobdiff_plain;f=libsigrok.h;h=825591d62b78c2b4c95aea754c3a9d82fcc4cf62;hb=1953564a96798bc298d1c94eb90c129adbde1c9e;hp=49d5aa8135722f897e759f9daa7c45d857b6e7ae;hpb=1f345a21d24e52f482a06da9e434f751abdff203;p=libsigrok.git diff --git a/libsigrok.h b/libsigrok.h index 49d5aa81..825591d6 100644 --- a/libsigrok.h +++ b/libsigrok.h @@ -127,7 +127,7 @@ typedef int (*sr_receive_data_callback_t)(int fd, int revents, void *cb_data); /** Data types used by hardware drivers for dev_config_set(). */ enum { - SR_T_UINT64, + SR_T_UINT64 = 10000, SR_T_CHAR, SR_T_BOOL, SR_T_FLOAT, @@ -146,20 +146,19 @@ struct sr_rational { /** Value for sr_datafeed_packet.type. */ enum { - SR_DF_HEADER, + SR_DF_HEADER = 10000, SR_DF_END, + SR_DF_META, SR_DF_TRIGGER, SR_DF_LOGIC, - SR_DF_META_LOGIC, SR_DF_ANALOG, - SR_DF_META_ANALOG, SR_DF_FRAME_BEGIN, SR_DF_FRAME_END, }; /** Values for sr_datafeed_analog.mq. */ enum { - SR_MQ_VOLTAGE, + SR_MQ_VOLTAGE = 10000, SR_MQ_CURRENT, SR_MQ_RESISTANCE, SR_MQ_CAPACITANCE, @@ -173,11 +172,16 @@ enum { SR_MQ_POWER, /** Gain (a transistor's gain, or hFE, for example). */ SR_MQ_GAIN, + /** Logarithmic representation of sound pressure relative to a + * reference value. */ + SR_MQ_SOUND_PRESSURE_LEVEL, + SR_MQ_CARBON_MONOXIDE, + SR_MQ_RELATIVE_HUMIDITY, }; /** Values for sr_datafeed_analog.unit. */ enum { - SR_UNIT_VOLT, + SR_UNIT_VOLT = 10000, SR_UNIT_AMPERE, SR_UNIT_OHM, SR_UNIT_FARAD, @@ -203,6 +207,14 @@ enum { * a unitless quantity, for example. */ SR_UNIT_UNITLESS, + /** Sound pressure level relative so 20 micropascals. */ + SR_UNIT_DECIBEL_SPL, + /** + * Normalized (0 to 1) concentration of a substance or compound with 0 + * representing a concentration of 0%, and 1 being 100%. This is + * represented as the fraction of number of particles of the substance. + */ + SR_UNIT_CONCENTRATION, }; /** Values for sr_datafeed_analog.flags. */ @@ -225,13 +237,37 @@ enum { SR_MQFLAG_AUTORANGE = 0x80, /** Device is in relative mode. */ SR_MQFLAG_RELATIVE = 0x100, + /** Sound pressure level is A-weighted in the frequency domain, + * according to IEC 61672:2003. */ + SR_MQFLAG_SPL_FREQ_WEIGHT_A = 0x200, + /** Sound pressure level is C-weighted in the frequency domain, + * according to IEC 61672:2003. */ + SR_MQFLAG_SPL_FREQ_WEIGHT_C = 0x400, + /** Sound pressure level is Z-weighted (i.e. not at all) in the + * frequency domain, according to IEC 61672:2003. */ + SR_MQFLAG_SPL_FREQ_WEIGHT_Z = 0x800, + /** Sound pressure level is not weighted in the frequency domain, + * albeit without standards-defined low and high frequency limits. */ + SR_MQFLAG_SPL_FREQ_WEIGHT_FLAT = 0x1000, + /** Sound pressure level measurement is S-weighted (1s) in the + * time domain. */ + SR_MQFLAG_SPL_TIME_WEIGHT_S = 0x2000, + /** Sound pressure level measurement is F-weighted (125ms) in the + * time domain. */ + SR_MQFLAG_SPL_TIME_WEIGHT_F = 0x4000, + /** Sound pressure level is time-averaged (LAT), also known as + * Equivalent Continuous A-weighted Sound Level (LEQ). */ + SR_MQFLAG_SPL_LAT = 0x8000, + /** Sound pressure level represented as a percentage of measurements + * that were over a preset alarm level. */ + SR_MQFLAG_SPL_PCT_OVER_ALARM = 0x10000, }; struct sr_context; struct sr_datafeed_packet { uint16_t type; - void *payload; + const void *payload; }; struct sr_datafeed_header { @@ -239,6 +275,10 @@ struct sr_datafeed_header { struct timeval starttime; }; +struct sr_datafeed_meta { + GSList *config; +}; + struct sr_datafeed_meta_logic { int num_probes; uint64_t samplerate; @@ -299,17 +339,10 @@ struct sr_output_format { int (*event) (struct sr_output *o, int event_type, uint8_t **data_out, uint64_t *length_out); GString *(*recv) (struct sr_output *o, const struct sr_dev_inst *sdi, - struct sr_datafeed_packet *packet); + const struct sr_datafeed_packet *packet); int (*cleanup) (struct sr_output *o); }; -struct sr_datastore { - /** Size in bytes of the number of units stored in this datastore. */ - int ds_unitsize; - unsigned int num_units; /* TODO: uint64_t */ - GSList *chunklist; -}; - /* * This represents a generic device connected to the system. * For device-specific information, ask the driver. The driver_index refers @@ -323,12 +356,10 @@ struct sr_dev { int driver_index; /** List of struct sr_probe pointers. */ GSList *probes; - /** Data acquired by this device, if any. */ - struct sr_datastore *datastore; }; enum { - SR_PROBE_LOGIC, + SR_PROBE_LOGIC = 10000, SR_PROBE_ANALOG, }; @@ -340,33 +371,56 @@ struct sr_probe { char *trigger; }; -struct sr_hwopt { - int hwopt; +struct sr_config { + int key; const void *value; }; -/** Hardware driver options. */ +struct sr_config_info { + int key; + int datatype; + char *id; + char *name; + char *description; +}; + enum { - /** Used to terminate lists. */ - SR_HWOPT_DUMMY = 0, /* Must be 0! */ + /*--- Device classes ------------------------------------------------*/ - /** - * Some drivers cannot detect the exact model they're talking to - * (may be phased out). - */ - SR_HWOPT_MODEL, + /** The device can act as logic analyzer. */ + SR_CONF_LOGIC_ANALYZER = 10000, + + /** The device can act as an oscilloscope. */ + SR_CONF_OSCILLOSCOPE, + + /** The device can act as a multimeter. */ + SR_CONF_MULTIMETER, + + /** The device is a demo device. */ + SR_CONF_DEMO_DEV, + + /** The device can act as a sound level meter. */ + SR_CONF_SOUNDLEVELMETER, + + /** The device can measure temperature. */ + SR_CONF_THERMOMETER, + + /** The device can measure humidity. */ + SR_CONF_HYGROMETER, + + /*--- Driver options ------------------------------------------------*/ /** * Specification on how to connect to a device. * - * In combination with SR_HWOPT_SERIALCOMM, this is a serial port in + * In combination with SR_CONF_SERIALCOMM, this is a serial port in * the form which makes sense to the OS (e.g., /dev/ttyS0). * Otherwise this specifies a USB device, either in the form of * @verbatim .
@endverbatim (decimal, e.g. 1.65) or * @verbatim . @endverbatim * (hexadecimal, e.g. 1d6b.0001). */ - SR_HWOPT_CONN, + SR_CONF_CONN = 20000, /** * Serial communication specification, in the form: @@ -375,89 +429,74 @@ enum { * * Example: 9600/8n1 * + * The string may also be followed by one or more special settings, + * in the form "/key=value". Supported keys and their values are: + * + * rts 0,1 set the port's RTS pin to low or high + * dtr 0,1 set the port's DTR pin to low or high + * flow 0 no flow control + * 1 hardware-based (RTS/CTS) flow control + * 2 software-based (XON/XOFF) flow control + * * This is always an optional parameter, since a driver typically * knows the speed at which the device wants to communicate. */ - SR_HWOPT_SERIALCOMM, -}; - -/** Hardware device capabilities. */ -enum { - /** Used to terminate lists. */ - SR_HWCAP_DUMMY = 0, /* Must be 0! */ - - /*--- Device classes ------------------------------------------------*/ - - /** The device can act as logic analyzer. */ - SR_HWCAP_LOGIC_ANALYZER, - - /** The device can act as an oscilloscope. */ - SR_HWCAP_OSCILLOSCOPE, - - /** The device can act as a multimeter. */ - SR_HWCAP_MULTIMETER, - - /** The device is a demo device. */ - SR_HWCAP_DEMO_DEV, - + SR_CONF_SERIALCOMM, /*--- Device configuration ------------------------------------------*/ /** The device supports setting/changing its samplerate. */ - SR_HWCAP_SAMPLERATE, + SR_CONF_SAMPLERATE = 30000, /** The device supports setting a pre/post-trigger capture ratio. */ - SR_HWCAP_CAPTURE_RATIO, + SR_CONF_CAPTURE_RATIO, - /* TODO? */ /** The device supports setting a pattern (pattern generator mode). */ - SR_HWCAP_PATTERN_MODE, + SR_CONF_PATTERN_MODE, /** The device supports Run Length Encoding. */ - SR_HWCAP_RLE, + SR_CONF_RLE, /** The device supports setting trigger slope. */ - SR_HWCAP_TRIGGER_SLOPE, + SR_CONF_TRIGGER_SLOPE, /** Trigger source. */ - SR_HWCAP_TRIGGER_SOURCE, + SR_CONF_TRIGGER_SOURCE, /** Horizontal trigger position. */ - SR_HWCAP_HORIZ_TRIGGERPOS, + SR_CONF_HORIZ_TRIGGERPOS, /** Buffer size. */ - SR_HWCAP_BUFFERSIZE, + SR_CONF_BUFFERSIZE, /** Time base. */ - SR_HWCAP_TIMEBASE, + SR_CONF_TIMEBASE, /** Filter. */ - SR_HWCAP_FILTER, + SR_CONF_FILTER, /** Volts/div. */ - SR_HWCAP_VDIV, + SR_CONF_VDIV, /** Coupling. */ - SR_HWCAP_COUPLING, - + SR_CONF_COUPLING, /*--- Special stuff -------------------------------------------------*/ /** Session filename. */ - SR_HWCAP_SESSIONFILE, + SR_CONF_SESSIONFILE = 40000, /* TODO: Better description. */ /** The device supports specifying a capturefile to inject. */ - SR_HWCAP_CAPTUREFILE, + SR_CONF_CAPTUREFILE, /* TODO: Better description. */ /** The device supports specifying the capturefile unit size. */ - SR_HWCAP_CAPTURE_UNITSIZE, + SR_CONF_CAPTURE_UNITSIZE, /* TODO: Better description. */ /** The device supports setting the number of probes. */ - SR_HWCAP_CAPTURE_NUM_PROBES, - + SR_CONF_CAPTURE_NUM_PROBES, /*--- Acquisition modes ---------------------------------------------*/ @@ -465,34 +504,26 @@ enum { * The device supports setting a sample time limit (how long * the sample acquisition should run, in ms). */ - SR_HWCAP_LIMIT_MSEC, + SR_CONF_LIMIT_MSEC = 50000, /** * The device supports setting a sample number limit (how many * samples should be acquired). */ - SR_HWCAP_LIMIT_SAMPLES, + SR_CONF_LIMIT_SAMPLES, /** * The device supports setting a frame limit (how many * frames should be acquired). */ - SR_HWCAP_LIMIT_FRAMES, + SR_CONF_LIMIT_FRAMES, /** * The device supports continuous sampling. Neither a time limit * nor a sample number limit has to be supplied, it will just acquire * samples continuously, until explicitly stopped by a certain command. */ - SR_HWCAP_CONTINUOUS, - -}; - -struct sr_hwcap_option { - int hwcap; - int type; - char *description; - char *shortname; + SR_CONF_CONTINUOUS, }; struct sr_dev_inst { @@ -510,7 +541,7 @@ struct sr_dev_inst { /** Types of device instances (sr_dev_inst). */ enum { /** Device instance type for USB devices. */ - SR_INST_USB, + SR_INST_USB = 10000, /** Device instance type for serial port devices. */ SR_INST_SERIAL, }; @@ -518,13 +549,15 @@ enum { /** Device instance status. */ enum { /** The device instance was not found. */ - SR_ST_NOT_FOUND, + SR_ST_NOT_FOUND = 10000, /** The device instance was found, but is still booting. */ SR_ST_INITIALIZING, /** The device instance is live, but not in use. */ SR_ST_INACTIVE, /** The device instance is actively in use in a session. */ SR_ST_ACTIVE, + /** The device is winding down its session. */ + SR_ST_STOPPING, }; /* @@ -535,13 +568,9 @@ enum { /** Device info IDs. */ enum { /** A list of options supported by the driver. */ - SR_DI_HWOPTS, + SR_DI_HWOPTS = 10000, /** A list of capabilities supported by the device. */ SR_DI_HWCAPS, - /** The number of probes connected to this device. */ - SR_DI_NUM_PROBES, - /** The probe names on this device. */ - SR_DI_PROBE_NAMES, /** Samplerates supported by this device (struct sr_samplerates). */ SR_DI_SAMPLERATES, /** Types of logic trigger supported, out of "01crf" (char *). */ @@ -581,7 +610,7 @@ struct sr_dev_driver { char *name; char *longname; int api_version; - int (*init) (void); + int (*init) (struct sr_context *sr_ctx); int (*cleanup) (void); GSList *(*scan) (GSList *options); GSList *(*dev_list) (void); @@ -596,7 +625,7 @@ struct sr_dev_driver { const void *value); int (*dev_acquisition_start) (const struct sr_dev_inst *sdi, void *cb_data); - int (*dev_acquisition_stop) (const struct sr_dev_inst *sdi, + int (*dev_acquisition_stop) (struct sr_dev_inst *sdi, void *cb_data); /* Dynamic */