X-Git-Url: https://sigrok.org/gitweb/?a=blobdiff_plain;f=include%2Flibsigrok%2Flibsigrok.h;h=7d9260edabf714cc404b529fde981ac4c738afd1;hb=28c95cc6c45ede9ec9d184d606bfc16505834429;hp=1a076d6aad46cd5aa516e29e297fa50b5c9cd242;hpb=d4c937749a92ce6defa2f0095b34692181afe597;p=libsigrok.git diff --git a/include/libsigrok/libsigrok.h b/include/libsigrok/libsigrok.h index 1a076d6a..7d9260ed 100644 --- a/include/libsigrok/libsigrok.h +++ b/include/libsigrok/libsigrok.h @@ -74,11 +74,10 @@ enum sr_error_code { SR_ERR_DEV_CLOSED = -7, /**< Device is closed, but must be open. */ 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 @@ -146,6 +145,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. */ @@ -160,15 +162,17 @@ enum sr_packettype { SR_DF_TRIGGER, /** Payload is struct sr_datafeed_logic. */ SR_DF_LOGIC, - /** Payload is struct sr_datafeed_analog. */ - SR_DF_ANALOG, /** Beginning of frame. No payload. */ SR_DF_FRAME_BEGIN, /** End of frame. No payload. */ SR_DF_FRAME_END, + /** Payload is struct sr_datafeed_analog. */ + SR_DF_ANALOG, + + /* Update datafeed_dump() (session.c) upon changes! */ }; -/** Measured quantity, sr_datafeed_analog.mq. */ +/** Measured quantity, sr_analog_meaning.mq. */ enum sr_mq { SR_MQ_VOLTAGE = 10000, SR_MQ_CURRENT, @@ -199,9 +203,39 @@ enum sr_mq { SR_MQ_WIND_SPEED, /** Pressure */ SR_MQ_PRESSURE, + /** Parallel inductance (LCR meter model). */ + SR_MQ_PARALLEL_INDUCTANCE, + /** Parallel capacitance (LCR meter model). */ + SR_MQ_PARALLEL_CAPACITANCE, + /** Parallel resistance (LCR meter model). */ + SR_MQ_PARALLEL_RESISTANCE, + /** Series inductance (LCR meter model). */ + SR_MQ_SERIES_INDUCTANCE, + /** Series capacitance (LCR meter model). */ + SR_MQ_SERIES_CAPACITANCE, + /** Series resistance (LCR meter model). */ + SR_MQ_SERIES_RESISTANCE, + /** Dissipation factor. */ + SR_MQ_DISSIPATION_FACTOR, + /** Quality factor. */ + SR_MQ_QUALITY_FACTOR, + /** Phase angle. */ + 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. */ +/** Unit of measured quantity, sr_analog_meaning.unit. */ enum sr_unit { /** Volt */ SR_UNIT_VOLT = 10000, @@ -260,11 +294,42 @@ 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. */ +/** Values for sr_analog_meaning.mqflags. */ enum sr_mqflag { /** Voltage measurement is alternating current (AC). */ SR_MQFLAG_AC = 0x01, @@ -312,6 +377,17 @@ enum sr_mqflag { SR_MQFLAG_DURATION = 0x20000, /** Device is in "avg" mode, averaging upon each new value. */ SR_MQFLAG_AVG = 0x40000, + /** Reference value shown. */ + SR_MQFLAG_REFERENCE = 0x80000, + /** Unstable value (hasn't settled yet). */ + SR_MQFLAG_UNSTABLE = 0x100000, + /** Measurement is four wire (e.g. Kelvin connection). */ + SR_MQFLAG_FOUR_WIRE = 0x200000, + + /* + * Update mq_strings[] (analog.c) and fancyprint() (output/analog.c) + * upon changes! + */ }; enum sr_trigger_matches { @@ -387,6 +463,13 @@ struct sr_context; */ struct sr_session; +struct sr_rational { + /** Numerator of the rational number. */ + int64_t p; + /** Denominator of the rational number. */ + uint64_t q; +}; + /** Packet in a sigrok data feed. */ struct sr_datafeed_packet { uint16_t type; @@ -413,110 +496,80 @@ struct sr_datafeed_logic { /** Analog datafeed payload for type SR_DF_ANALOG. */ struct sr_datafeed_analog { - /** The channels for which data is included in this packet. */ + void *data; + uint32_t num_samples; + struct sr_analog_encoding *encoding; + struct sr_analog_meaning *meaning; + struct sr_analog_spec *spec; +}; + +struct sr_analog_encoding { + uint8_t unitsize; + gboolean is_signed; + gboolean is_float; + gboolean is_bigendian; + int8_t digits; + gboolean is_digits_decimal; + struct sr_rational scale; + struct sr_rational offset; +}; + +struct sr_analog_meaning { + enum sr_mq mq; + enum sr_unit unit; + enum sr_mqflag mqflags; GSList *channels; - /** Number of samples in data */ - int num_samples; - /** Measured quantity (voltage, current, temperature, and so on). - * Use SR_MQ_VOLTAGE, ... */ - int mq; - /** Unit in which the MQ is measured. Use SR_UNIT_VOLT, ... */ - int unit; - /** Bitmap with extra information about the MQ. Use SR_MQFLAG_AC, ... */ - uint64_t mqflags; - /** The analog value(s). The data is interleaved according to - * the channels list. */ - float *data; +}; + +struct sr_analog_spec { + int8_t spec_digits; }; /** Generic option struct used by various subsystems. */ struct sr_option { /* Short name suitable for commandline usage, [a-z0-9-]. */ - char *id; + const char *id; /* Short name suitable for GUI usage, can contain UTF-8. */ - char *name; + const char *name; /* Description of the option, in a sentence. */ - char *desc; + const char *desc; /* Default value for this option. */ GVariant *def; /* List of possible values, if this is an option with few values. */ GSList *values; }; -/** Input (file) module struct. */ -struct sr_input { - /** - * A pointer to this input module's 'struct sr_input_module'. - * The frontend can use this to call the module's callbacks. - */ - struct sr_input_module *module; - - GHashTable *param; - - struct sr_dev_inst *sdi; - - void *internal; +/** Resource type. + * @since 0.4.0 + */ +enum sr_resource_type { + SR_RESOURCE_FIRMWARE = 1, }; -/** Input (file) module driver. */ -struct sr_input_module { - /** The unique ID for this input module. Must not be NULL. */ - char *id; - - /** - * A short description of the input module, which can (for example) - * be displayed to the user by frontends. Must not be NULL. - */ - char *description; - - /** - * Check if this input module can load and parse the specified file. - * - * @param[in] filename The name (and path) of the file to check. - * - * @retval TRUE This module knows the format. - * @retval FALSE This module does not know the format. - */ - int (*format_match) (const char *filename); - - /** - * Initialize the input module. - * - * @param in A pointer to a valid 'struct sr_input' that the caller - * has to allocate and provide to this function. It is also - * the responsibility of the caller to free it later. - * @param[in] filename The name (and path) of the file to use. - * - * @retval SR_OK Success - * @retval other Negative error code. - */ - int (*init) (struct sr_input *in, const char *filename); +/** Resource descriptor. + * @since 0.4.0 + */ +struct sr_resource { + /** Size of resource in bytes; set by resource open callback. */ + uint64_t size; + /** File handle or equivalent; set by resource open callback. */ + void *handle; + /** Resource type (SR_RESOURCE_FIRMWARE, ...) */ + int type; +}; - /** - * Load a file, parsing the input according to the file's format. - * - * This function will send datafeed packets to the session bus, so - * the calling frontend must have registered its session callbacks - * beforehand. - * - * The packet types sent across the session bus by this function must - * include at least SR_DF_HEADER, SR_DF_END, and an appropriate data - * type such as SR_DF_LOGIC. It may also send a SR_DF_TRIGGER packet - * if appropriate. - * - * @param in A pointer to a valid 'struct sr_input' that the caller - * has to allocate and provide to this function. It is also - * the responsibility of the caller to free it later. - * @param filename The name (and path) of the file to use. - * - * @retval SR_OK Success - * @retval other Negative error code. - */ - int (*loadfile) (struct sr_input *in, const char *filename); +/** 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 { @@ -528,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; @@ -537,6 +592,8 @@ struct sr_channel { gboolean enabled; /** Name of channel. */ char *name; + /** Private data for driver use. */ + void *priv; }; /** Structure for groups of channels that have common properties. */ @@ -552,26 +609,42 @@ struct sr_channel_group { /** Used for setting or getting value of a config item. */ struct sr_config { /** Config key like SR_CONF_CONN, etc. */ - int key; + uint32_t key; /** Key-specific data. */ GVariant *data; }; -/** Information about a config key. */ -struct sr_config_info { - /** Config key like SR_CONF_CONN, etc. */ - int key; - /** Data type like SR_T_STRING, 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 if applicable. */ int datatype; - /** Id string, e.g. "serialcomm". */ - char *id; - /** Name, e.g. "Serial communication". */ - char *name; + /** Short, lowercase ID string, e.g. "serialcomm", "voltage". */ + const char *id; + /** Full capitalized name, e.g. "Serial communication". */ + const char *name; /** Verbose description (unused currently). */ - char *description; + const char *description; }; -/** Constants for device classes */ +/** Configuration capabilities. */ +enum sr_configcap { + /** Value can be read. */ + SR_CONF_GET = (1 << 31), + /** Value can be written. */ + SR_CONF_SET = (1 << 30), + /** Possible values can be enumerated. */ + SR_CONF_LIST = (1 << 29), +}; + +/** Configuration keys */ enum sr_configkey { /*--- Device classes ------------------------------------------------*/ @@ -599,12 +672,23 @@ enum sr_configkey { /** The device can measure energy consumption. */ SR_CONF_ENERGYMETER, - /** The device can demodulate signals. */ + /** The device can act as a signal demodulator. */ SR_CONF_DEMODULATOR, - /** Programmable power supply. */ + /** The device can act as a programmable power supply. */ SR_CONF_POWER_SUPPLY, + /** 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 -------------------------------------------*/ /** @@ -640,7 +724,17 @@ enum sr_configkey { */ SR_CONF_SERIALCOMM, - /*--- Device configuration ------------------------------------------*/ + /** + * 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. */ SR_CONF_SAMPLERATE = 30000, @@ -651,12 +745,21 @@ enum sr_configkey { /** The device supports setting a pattern (pattern generator mode). */ SR_CONF_PATTERN_MODE, - /** The device supports Run Length Encoding. */ + /** The device supports run-length encoding (RLE). */ SR_CONF_RLE, /** 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, @@ -684,8 +787,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, @@ -729,29 +832,100 @@ enum sr_configkey { /** The device supports setting the number of analog channels. */ SR_CONF_NUM_ANALOG_CHANNELS, - /** Output voltage. */ - SR_CONF_OUTPUT_VOLTAGE, + /** + * Current voltage. + * @arg type: double + * @arg get: get measured voltage + */ + SR_CONF_VOLTAGE, - /** Maximum output voltage. */ - SR_CONF_OUTPUT_VOLTAGE_MAX, + /** + * Maximum target voltage. + * @arg type: double + * @arg get: get target voltage + * @arg set: change target voltage + */ + SR_CONF_VOLTAGE_TARGET, - /** Output current. */ - SR_CONF_OUTPUT_CURRENT, + /** + * Current current. + * @arg type: double + * @arg get: get measured current + */ + SR_CONF_CURRENT, - /** Maximum output current. */ - SR_CONF_OUTPUT_CURRENT_MAX, + /** + * Current limit. + * @arg type: double + * @arg get: get current limit + * @arg set: change current limit + */ + SR_CONF_CURRENT_LIMIT, - /** Enabling/disabling output. */ - SR_CONF_OUTPUT_ENABLED, + /** + * Enabling/disabling channel. + * @arg type: boolean + * @arg get: @b true if currently enabled + * @arg set: enable/disable + */ + SR_CONF_ENABLED, - /** Channel output configuration. */ - SR_CONF_OUTPUT_CHANNEL, + /** + * Channel configuration. + * @arg type: string + * @arg get: get current setting + * @arg set: change current setting + * @arg list: array of possible values + */ + SR_CONF_CHANNEL_CONFIG, - /** Over-voltage protection (OVP) */ - SR_CONF_OVER_VOLTAGE_PROTECTION, + /** + * Over-voltage protection (OVP) feature + * @arg type: boolean + * @arg get: @b true if currently enabled + * @arg set: enable/disable + */ + SR_CONF_OVER_VOLTAGE_PROTECTION_ENABLED, - /** Over-current protection (OCP) */ - SR_CONF_OVER_CURRENT_PROTECTION, + /** + * Over-voltage protection (OVP) active + * @arg type: boolean + * @arg get: @b true if device has activated OVP, i.e. the output voltage + * exceeds the over-voltage protection threshold. + */ + SR_CONF_OVER_VOLTAGE_PROTECTION_ACTIVE, + + /** + * Over-voltage protection (OVP) threshold + * @arg type: double (voltage) + * @arg get: get current threshold + * @arg set: set new threshold + */ + SR_CONF_OVER_VOLTAGE_PROTECTION_THRESHOLD, + + /** + * Over-current protection (OCP) feature + * @arg type: boolean + * @arg get: @b true if currently enabled + * @arg set: enable/disable + */ + SR_CONF_OVER_CURRENT_PROTECTION_ENABLED, + + /** + * Over-current protection (OCP) active + * @arg type: boolean + * @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, + + /** + * Over-current protection (OCP) threshold + * @arg type: double (current) + * @arg get: get current threshold + * @arg set: set new threshold + */ + SR_CONF_OVER_CURRENT_PROTECTION_THRESHOLD, /** Choice of clock edge for external clock ("r" or "f"). */ SR_CONF_CLOCK_EDGE, @@ -759,16 +933,46 @@ enum sr_configkey { /** Amplitude of a source without strictly-defined MQ. */ SR_CONF_AMPLITUDE, - /*--- Special stuff -------------------------------------------------*/ + /** + * Channel regulation + * get: "CV", "CC" or "UR", denoting constant voltage, constant current + * or unregulated. + */ + SR_CONF_REGULATION, + + /** Over-temperature protection (OTP) */ + SR_CONF_OVER_TEMPERATURE_PROTECTION, + + /** Output frequency in Hz. */ + SR_CONF_OUTPUT_FREQUENCY, + + /** Output frequency target in Hz. */ + SR_CONF_OUTPUT_FREQUENCY_TARGET, + + /** Measured quantity. */ + SR_CONF_MEASURED_QUANTITY, + + /** Equivalent circuit model. */ + SR_CONF_EQUIV_CIRCUIT_MODEL, - /** Scan options supported by the driver. */ - SR_CONF_SCAN_OPTIONS = 40000, + /** Over-temperature protection (OTP) active. */ + SR_CONF_OVER_TEMPERATURE_PROTECTION_ACTIVE, - /** Device options for a particular device. */ - SR_CONF_DEVICE_OPTIONS, + /** Under-voltage condition. */ + SR_CONF_UNDER_VOLTAGE_CONDITION, + + /** Under-voltage condition active. */ + SR_CONF_UNDER_VOLTAGE_CONDITION_ACTIVE, + + /** Trigger level. */ + SR_CONF_TRIGGER_LEVEL, + + /* Update sr_key_info_config[] (hwdriver.c) upon changes! */ + + /*--- Special stuff -------------------------------------------------*/ /** Session filename. */ - SR_CONF_SESSIONFILE, + SR_CONF_SESSIONFILE = 40000, /** The device supports specifying a capturefile to inject. */ SR_CONF_CAPTUREFILE, @@ -793,7 +997,15 @@ enum sr_configkey { */ SR_CONF_DATA_SOURCE, - /*--- Acquisition modes ---------------------------------------------*/ + /** The device supports setting a probe factor. */ + SR_CONF_PROBE_FACTOR, + + /** Number of powerline cycles for ADC integration time. */ + SR_CONF_ADC_POWERLINE_CYCLES, + + /* Update sr_key_info_config[] (hwdriver.c) upon changes! */ + + /*--- Acquisition modes, sample limiting ----------------------------*/ /** * The device supports setting a sample time limit (how long @@ -829,36 +1041,16 @@ enum sr_configkey { /** Self test mode. */ SR_CONF_TEST_MODE, + + /* Update sr_key_info_config[] (hwdriver.c) upon changes! */ }; -/** Device instance data +/** + * Opaque structure representing a libsigrok device instance. + * + * None of the fields of this structure are meant to be accessed directly. */ -struct sr_dev_inst { - /** Device driver. */ - struct sr_dev_driver *driver; - /** Index of device in driver. */ - int index; - /** Device instance status. SR_ST_NOT_FOUND, etc. */ - int status; - /** Device instance type. SR_INST_USB, etc. */ - int inst_type; - /** Device vendor. */ - char *vendor; - /** Device model. */ - char *model; - /** Device version. */ - char *version; - /** List of channels. */ - GSList *channels; - /** List of sr_channel_group structs */ - GSList *channel_groups; - /** Device instance connection data (used?) */ - void *conn; - /** Device instance private data (used?) */ - void *priv; - /** Session to which this device is currently assigned. */ - struct sr_session *session; -}; +struct sr_dev_inst; /** Types of device instance, struct sr_dev_inst.type */ enum sr_dev_inst_type { @@ -868,6 +1060,10 @@ enum sr_dev_inst_type { SR_INST_SERIAL, /** Device instance type for SCPI devices. */ 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 */ @@ -888,39 +1084,39 @@ enum sr_dev_inst_status { struct sr_dev_driver { /* Driver-specific */ /** Driver name. Lowercase a-z, 0-9 and dashes (-) only. */ - char *name; + const char *name; /** Long name. Verbose driver name shown to user. */ - char *longname; + const char *longname; /** 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 resouces held by it. */ - int (*cleanup) (void); + * Driver must free all resources held by it. */ + 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(). */ - int (*config_get) (int id, GVariant **data, + int (*config_get) (uint32_t key, GVariant **data, const struct sr_dev_inst *sdi, const struct sr_channel_group *cg); /** Set value of a configuration key in driver or a given device instance. * @see sr_config_set(). */ - int (*config_set) (int id, GVariant *data, + int (*config_set) (uint32_t key, GVariant *data, const struct sr_dev_inst *sdi, const struct sr_channel_group *cg); /** Channel status change. @@ -933,7 +1129,7 @@ struct sr_dev_driver { /** List all possible values for a configuration key in a device instance. * @see sr_config_list(). */ - int (*config_list) (int info_id, GVariant **data, + int (*config_list) (uint32_t key, GVariant **data, const struct sr_dev_inst *sdi, const struct sr_channel_group *cg); @@ -943,27 +1139,25 @@ struct sr_dev_driver { /** Close device */ int (*dev_close) (struct sr_dev_inst *sdi); /** Begin data acquisition on the specified device. */ - int (*dev_acquisition_start) (const struct sr_dev_inst *sdi, - void *cb_data); + int (*dev_acquisition_start) (const struct sr_dev_inst *sdi); /** End data acquisition on the specified device. */ - int (*dev_acquisition_stop) (struct sr_dev_inst *sdi, - void *cb_data); + int (*dev_acquisition_stop) (struct sr_dev_inst *sdi); /* Dynamic */ - /** Device driver private data. Initialized by init(). */ - void *priv; + /** Device driver context, considered private. Initialized by init(). */ + void *context; }; -/** - * @struct sr_session - * - * Opaque data structure representing a libsigrok session. None of the fields - * of this structure are meant to be accessed directly. - */ -struct sr_session; +/** 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 "proto.h" -#include "version.h" +#include +#include #ifdef __cplusplus }