X-Git-Url: https://sigrok.org/gitweb/?a=blobdiff_plain;f=include%2Flibsigrok%2Flibsigrok.h;h=63e60fba3ef5ea796a1a97b6038b266652c49aa3;hb=75772c721d45d3b33618388e41d2d874c4f88302;hp=f05fb47bcc8349f204268d60f5746b3bfc9ce8bc;hpb=54ab1dcdc4d372765401bc2513f2692f488f4e1d;p=libsigrok.git diff --git a/include/libsigrok/libsigrok.h b/include/libsigrok/libsigrok.h index f05fb47b..63e60fba 100644 --- a/include/libsigrok/libsigrok.h +++ b/include/libsigrok/libsigrok.h @@ -76,11 +76,9 @@ enum sr_error_code { SR_ERR_TIMEOUT = -8, /**< A timeout occurred. */ SR_ERR_CHANNEL_GROUP = -9, /**< A channel group must be specified. */ SR_ERR_DATA =-10, /**< Data is invalid. */ + SR_ERR_IO =-11, /**< Input/output error. */ - /* - * Note: When adding entries here, don't forget to also update the - * sr_strerror() and sr_strerror_name() functions in error.c. - */ + /* Update sr_strerror()/sr_strerror_name() (error.c) upon changes! */ }; #define SR_MAX_CHANNELNAME_LEN 32 @@ -148,6 +146,9 @@ enum sr_datatype { SR_T_UINT64_RANGE, SR_T_DOUBLE_RANGE, SR_T_INT32, + SR_T_MQ, + + /* Update sr_variant_type_get() (hwdriver.c) upon changes! */ }; /** Value for sr_datafeed_packet.type. */ @@ -170,6 +171,8 @@ enum sr_packettype { SR_DF_FRAME_END, /** Payload is struct sr_datafeed_analog2. */ SR_DF_ANALOG2, + + /* Update datafeed_dump() (session.c) upon changes! */ }; /** Measured quantity, sr_datafeed_analog.mq. */ @@ -223,6 +226,16 @@ enum sr_mq { SR_MQ_PHASE_ANGLE, /** Difference from reference value. */ SR_MQ_DIFFERENCE, + /** Count. */ + SR_MQ_COUNT, + /** Power factor. */ + SR_MQ_POWER_FACTOR, + /** Apparent power */ + SR_MQ_APPARENT_POWER, + /** Mass */ + SR_MQ_MASS, + + /* Update sr_key_info_mq[] (hwdriver.c) upon changes! */ }; /** Unit of measured quantity, sr_datafeed_analog.unit. */ @@ -284,12 +297,39 @@ enum sr_unit { SR_UNIT_METER_SECOND, /** Pressure in hectopascal */ SR_UNIT_HECTOPASCAL, - /** Relative humidity assuming air temperature of 293 kelvin (%rF). */ + /** Relative humidity assuming air temperature of 293 Kelvin (%rF). */ SR_UNIT_HUMIDITY_293K, /** Plane angle in 1/360th of a full circle. */ SR_UNIT_DEGREE, /** Henry (inductance). */ SR_UNIT_HENRY, + /** Mass in gram [g]. */ + SR_UNIT_GRAM, + /** Mass in carat [ct]. */ + SR_UNIT_CARAT, + /** Mass in ounce [oz]. */ + SR_UNIT_OUNCE, + /** Mass in troy ounce [oz t]. */ + SR_UNIT_TROY_OUNCE, + /** Mass in pound [lb]. */ + SR_UNIT_POUND, + /** Mass in pennyweight [dwt]. */ + SR_UNIT_PENNYWEIGHT, + /** Mass in grain [gr]. */ + SR_UNIT_GRAIN, + /** Mass in tael (variants: Hong Kong, Singapore/Malaysia, Taiwan) */ + SR_UNIT_TAEL, + /** Mass in momme. */ + SR_UNIT_MOMME, + /** Mass in tola. */ + SR_UNIT_TOLA, + /** Pieces (number of items). */ + SR_UNIT_PIECE, + + /* + * Update unit_strings[] (analog.c) and fancyprint() (output/analog.c) + * upon changes! + */ }; /** Values for sr_datafeed_analog.flags. */ @@ -342,6 +382,13 @@ enum sr_mqflag { SR_MQFLAG_AVG = 0x40000, /** Reference value shown. */ SR_MQFLAG_REFERENCE = 0x80000, + /** Unstable value (hasn't settled yet). */ + SR_MQFLAG_UNSTABLE = 0x100000, + + /* + * Update mq_strings[] (analog.c) and fancyprint() (output/analog.c) + * upon changes! + */ }; enum sr_trigger_matches { @@ -511,10 +558,18 @@ struct sr_option { GSList *values; }; +/** Output module flags. */ +enum sr_output_flag { + /** If set, this output module writes the output itself. */ + SR_OUTPUT_INTERNAL_IO_HANDLING = 0x01, +}; + struct sr_input; struct sr_input_module; struct sr_output; struct sr_output_module; +struct sr_transform; +struct sr_transform_module; /** Constants for channel type. */ enum sr_channeltype { @@ -526,6 +581,8 @@ enum sr_channeltype { /** Information on single channel. */ struct sr_channel { + /** The device this channel is attached to. */ + struct sr_dev_inst *sdi; /** The index of this channel, starting at 0. Logic channels will * be encoded according to this index in SR_DF_LOGIC packets. */ int index; @@ -557,15 +614,21 @@ struct sr_config { GVariant *data; }; -/** Information about a config key. */ -struct sr_config_info { - /** Config key like SR_CONF_CONN, etc. */ +enum sr_keytype { + SR_KEY_CONFIG, + SR_KEY_MQ, + SR_KEY_MQFLAGS, +}; + +/** Information about a key. */ +struct sr_key_info { + /** Config key like SR_CONF_CONN, MQ value like SR_MQ_VOLTAGE, etc. */ uint32_t key; - /** Data type like SR_T_STRING, etc. */ + /** Data type like SR_T_STRING, etc if applicable. */ int datatype; - /** Id string, e.g. "serialcomm". */ + /** Short, lowercase ID string, e.g. "serialcomm", "voltage". */ char *id; - /** Name, e.g. "Serial communication". */ + /** Full capitalized name, e.g. "Serial communication". */ char *name; /** Verbose description (unused currently). */ char *description; @@ -613,6 +676,14 @@ enum sr_configkey { /** The device can act as an LCR meter. */ SR_CONF_LCRMETER, + /** The device can act as an electronic load. */ + SR_CONF_ELECTRONIC_LOAD, + + /** The device can act as a scale. */ + SR_CONF_SCALE, + + /* Update sr_key_info_config[] (hwdriver.c) upon changes! */ + /*--- Driver scan options -------------------------------------------*/ /** @@ -648,6 +719,16 @@ enum sr_configkey { */ SR_CONF_SERIALCOMM, + /** + * Modbus slave address specification. + * + * This is always an optional parameter, since a driver typically + * knows the default slave address of the device. + */ + SR_CONF_MODBUSADDR, + + /* Update sr_key_info_config[] (hwdriver.c) upon changes! */ + /*--- Device (or channel group) configuration -----------------------*/ /** The device supports setting its samplerate, in Hz. */ @@ -665,6 +746,15 @@ enum sr_configkey { /** The device supports setting trigger slope. */ SR_CONF_TRIGGER_SLOPE, + /** The device supports averaging. */ + SR_CONF_AVERAGING, + + /** + * The device supports setting number of samples to be + * averaged over. + */ + SR_CONF_AVG_SAMPLES, + /** Trigger source. */ SR_CONF_TRIGGER_SOURCE, @@ -692,8 +782,8 @@ enum sr_configkey { /** The device supports setting its sample interval, in ms. */ SR_CONF_SAMPLE_INTERVAL, - /** Number of timebases, as related to SR_CONF_TIMEBASE. */ - SR_CONF_NUM_TIMEBASE, + /** Number of horizontal divisions, as related to SR_CONF_TIMEBASE. */ + SR_CONF_NUM_HDIV, /** Number of vertical divisions, as related to SR_CONF_VDIV. */ SR_CONF_NUM_VDIV, @@ -738,51 +828,51 @@ enum sr_configkey { SR_CONF_NUM_ANALOG_CHANNELS, /** - * Output voltage. + * Current voltage. * @arg type: double - * @arg get: get measured output voltage + * @arg get: get measured voltage */ - SR_CONF_OUTPUT_VOLTAGE, + SR_CONF_VOLTAGE, /** - * Maximum output voltage target. + * Maximum target voltage. * @arg type: double - * @arg get: get output voltage target - * @arg set: change output voltage target + * @arg get: get target voltage + * @arg set: change target voltage */ - SR_CONF_OUTPUT_VOLTAGE_TARGET, + SR_CONF_VOLTAGE_TARGET, /** - * Output current. + * Current current. * @arg type: double - * @arg get: get measured output current + * @arg get: get measured current */ - SR_CONF_OUTPUT_CURRENT, + SR_CONF_CURRENT, /** - * Output current limit. + * Current limit. * @arg type: double - * @arg get: get output current limit - * @arg set: change output current limit + * @arg get: get current limit + * @arg set: change current limit */ - SR_CONF_OUTPUT_CURRENT_LIMIT, + SR_CONF_CURRENT_LIMIT, /** - * Enabling/disabling output. + * Enabling/disabling channel. * @arg type: boolean * @arg get: @b true if currently enabled * @arg set: enable/disable */ - SR_CONF_OUTPUT_ENABLED, + SR_CONF_ENABLED, /** - * Output channel configuration. + * Channel configuration. * @arg type: string * @arg get: get current setting * @arg set: change current setting * @arg list: array of possible values */ - SR_CONF_OUTPUT_CHANNEL_CONFIG, + SR_CONF_CHANNEL_CONFIG, /** * Over-voltage protection (OVP) feature @@ -819,7 +909,7 @@ enum sr_configkey { /** * Over-current protection (OCP) active * @arg type: boolean - * @arg get: @b true if device has activated OCP, i.e. the output current + * @arg get: @b true if device has activated OCP, i.e. the current current * exceeds the over-current protection threshold. */ SR_CONF_OVER_CURRENT_PROTECTION_ACTIVE, @@ -839,11 +929,11 @@ enum sr_configkey { SR_CONF_AMPLITUDE, /** - * Output channel regulation + * Channel regulation * get: "CV", "CC" or "UR", denoting constant voltage, constant current * or unregulated. */ - SR_CONF_OUTPUT_REGULATION, + SR_CONF_REGULATION, /** Over-temperature protection (OTP) */ SR_CONF_OVER_TEMPERATURE_PROTECTION, @@ -851,6 +941,9 @@ enum sr_configkey { /** Output frequency in Hz. */ SR_CONF_OUTPUT_FREQUENCY, + /** Output frequency target in Hz. */ + SR_CONF_OUTPUT_FREQUENCY_TARGET, + /** Measured quantity. */ SR_CONF_MEASURED_QUANTITY, @@ -860,6 +953,11 @@ enum sr_configkey { /** Equivalent circuit model. */ SR_CONF_EQUIV_CIRCUIT_MODEL, + /** Over-temperature protection (OTP) active. */ + SR_CONF_OVER_TEMPERATURE_PROTECTION_ACTIVE, + + /* Update sr_key_info_config[] (hwdriver.c) upon changes! */ + /*--- Special stuff -------------------------------------------------*/ /** Scan options supported by the driver. */ @@ -894,6 +992,11 @@ enum sr_configkey { */ SR_CONF_DATA_SOURCE, + /** The device supports setting a probe factor. */ + SR_CONF_PROBE_FACTOR, + + /* Update sr_key_info_config[] (hwdriver.c) upon changes! */ + /*--- Acquisition modes, sample limiting ----------------------------*/ /** @@ -930,6 +1033,8 @@ enum sr_configkey { /** Self test mode. */ SR_CONF_TEST_MODE, + + /* Update sr_key_info_config[] (hwdriver.c) upon changes! */ }; /** @@ -949,6 +1054,8 @@ enum sr_dev_inst_type { SR_INST_SCPI, /** Device-instance type for user-created "devices". */ SR_INST_USER, + /** Device instance type for Modbus devices. */ + SR_INST_MODBUS, }; /** Device instance status, struct sr_dev_inst.status */ @@ -975,24 +1082,24 @@ struct sr_dev_driver { /** API version (currently 1). */ int api_version; /** Called when driver is loaded, e.g. program startup. */ - int (*init) (struct sr_context *sr_ctx); + int (*init) (struct sr_dev_driver *driver, struct sr_context *sr_ctx); /** Called before driver is unloaded. * Driver must free all resources held by it. */ - int (*cleanup) (void); + int (*cleanup) (const struct sr_dev_driver *driver); /** Scan for devices. Driver should do all initialisation required. * Can be called several times, e.g. with different port options. - * \retval NULL Error or no devices found. - * \retval other GSList of a struct sr_dev_inst for each device. + * @retval NULL Error or no devices found. + * @retval other GSList of a struct sr_dev_inst for each device. * Must be freed by caller! */ - GSList *(*scan) (GSList *options); + GSList *(*scan) (struct sr_dev_driver *driver, GSList *options); /** Get list of device instances the driver knows about. - * \returns NULL or GSList of a struct sr_dev_inst for each device. + * @returns NULL or GSList of a struct sr_dev_inst for each device. * Must not be freed by caller! */ - GSList *(*dev_list) (void); + GSList *(*dev_list) (const struct sr_dev_driver *driver); /** Clear list of devices the driver knows about. */ - int (*dev_clear) (void); + int (*dev_clear) (const struct sr_dev_driver *driver); /** Query value of a configuration key in driver or given device instance. * @see sr_config_get(). */ @@ -1031,8 +1138,8 @@ struct sr_dev_driver { void *cb_data); /* Dynamic */ - /** Device driver private data. Initialized by init(). */ - void *priv; + /** Device driver context, considered private. Initialized by init(). */ + void *context; }; /** @@ -1043,8 +1150,16 @@ struct sr_dev_driver { */ struct sr_session; -#include "proto.h" -#include "version.h" +/** Serial port descriptor. */ +struct sr_serial_port { + /** The OS dependent name of the serial port. */ + char *name; + /** An end user friendly description for the serial port. */ + char *description; +}; + +#include +#include #ifdef __cplusplus }