X-Git-Url: https://sigrok.org/gitweb/?a=blobdiff_plain;f=include%2Flibsigrok%2Flibsigrok.h;h=233e04a6ce969dd881c02f3c6d5092536e9a356e;hb=41812aca436805b0614f2a8f31cf2f8ce494aea0;hp=2e8260e96bf070eb93aeaa990c940f629a30cec3;hpb=0ffce50d449bb9d6ea79e20409f03ba108be344f;p=libsigrok.git diff --git a/include/libsigrok/libsigrok.h b/include/libsigrok/libsigrok.h index 2e8260e9..233e04a6 100644 --- a/include/libsigrok/libsigrok.h +++ b/include/libsigrok/libsigrok.h @@ -76,6 +76,7 @@ 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 @@ -168,6 +169,8 @@ enum sr_packettype { SR_DF_FRAME_BEGIN, /** End of frame. No payload. */ SR_DF_FRAME_END, + /** Payload is struct sr_datafeed_analog2. */ + SR_DF_ANALOG2, }; /** Measured quantity, sr_datafeed_analog.mq. */ @@ -207,12 +210,12 @@ enum sr_mq { SR_MQ_PARALLEL_CAPACITANCE, /** Parallel resistance (LCR meter model). */ SR_MQ_PARALLEL_RESISTANCE, - /** Serial inductance (LCR meter model). */ - SR_MQ_SERIAL_INDUCTANCE, - /** Serial capacitance (LCR meter model). */ - SR_MQ_SERIAL_CAPACITANCE, - /** Serial resistance (LCR meter model). */ - SR_MQ_SERIAL_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. */ @@ -221,6 +224,12 @@ 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, }; /** Unit of measured quantity, sr_datafeed_analog.unit. */ @@ -282,7 +291,7 @@ 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, @@ -340,10 +349,6 @@ enum sr_mqflag { SR_MQFLAG_AVG = 0x40000, /** Reference value shown. */ SR_MQFLAG_REFERENCE = 0x80000, - /** Device selects the measured quantity automatically. */ - SR_MQFLAG_AUTOMQ = 0x100000, - /** Device selects the measurement model automatically. */ - SR_MQFLAG_AUTOMODEL = 0x200000, }; enum sr_trigger_matches { @@ -419,6 +424,13 @@ struct sr_context; */ struct sr_session; +struct sr_rational { + /** Numerator of the rational number. */ + uint64_t p; + /** Denominator of the rational number. */ + uint64_t q; +}; + /** Packet in a sigrok data feed. */ struct sr_datafeed_packet { uint16_t type; @@ -461,6 +473,37 @@ struct sr_datafeed_analog { float *data; }; +/** Analog datafeed payload for type SR_DF_ANALOG2. */ +struct sr_datafeed_analog2 { + 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; + uint8_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; +}; + +struct sr_analog_spec { + uint8_t spec_digits; +}; + /** Generic option struct used by various subsystems. */ struct sr_option { /* Short name suitable for commandline usage, [a-z0-9-]. */ @@ -479,6 +522,8 @@ 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 { @@ -490,6 +535,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; @@ -540,7 +587,7 @@ struct sr_config_info { #define SR_CONF_LIST (1 << 29) #define SR_CONF_MASK 0x1fffffff -/** Constants for device classes */ +/** Configuration keys */ enum sr_configkey { /*--- Device classes ------------------------------------------------*/ @@ -568,14 +615,17 @@ 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, - /** LCR meter. */ - SR_CONF_LCR_METER, + /** The device can act as an LCR meter. */ + SR_CONF_LCRMETER, + + /** The device can act as an electronic load. */ + SR_CONF_ELECTRONIC_LOAD, /*--- Driver scan options -------------------------------------------*/ @@ -612,7 +662,15 @@ 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, + + /*--- Device (or channel group) configuration -----------------------*/ /** The device supports setting its samplerate, in Hz. */ SR_CONF_SAMPLERATE = 30000, @@ -623,12 +681,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, @@ -656,8 +723,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, @@ -702,51 +769,51 @@ enum sr_configkey { SR_CONF_NUM_ANALOG_CHANNELS, /** - * Output voltage. + * Current voltage. * @arg type: double - * @arg get: get output voltage + * @arg get: get measured voltage */ - SR_CONF_OUTPUT_VOLTAGE, + SR_CONF_VOLTAGE, /** - * Maximum output voltage. + * Maximum target voltage. * @arg type: double - * @arg get: get maximum output voltage limit - * @arg set: change output voltage limit + * @arg get: get target voltage + * @arg set: change target voltage */ - SR_CONF_OUTPUT_VOLTAGE_MAX, + SR_CONF_VOLTAGE_TARGET, /** - * Output current. + * Current current. * @arg type: double - * @arg get: get output current + * @arg get: get measured current */ - SR_CONF_OUTPUT_CURRENT, + SR_CONF_CURRENT, /** - * Maximum output current. + * Current limit. * @arg type: double - * @arg get: get maximum output voltage limit - * @arg set: change output voltage limit + * @arg get: get current limit + * @arg set: change current limit */ - SR_CONF_OUTPUT_CURRENT_MAX, + 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 @@ -783,7 +850,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, @@ -803,15 +870,33 @@ 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, + /** Output frequency in Hz. */ + SR_CONF_OUTPUT_FREQUENCY, + + /** Measured quantity. */ + SR_CONF_MEASURED_QUANTITY, + + /** Measured secondary quantity. */ + SR_CONF_MEASURED_2ND_QUANTITY, + + /** Equivalent circuit model. */ + SR_CONF_EQUIV_CIRCUIT_MODEL, + + /* Output frequency target in Hz. */ + SR_CONF_OUTPUT_FREQUENCY_TARGET, + + /** Over-temperature protection (OTP) active. */ + SR_CONF_OVER_TEMPERATURE_PROTECTION_ACTIVE, + /*--- Special stuff -------------------------------------------------*/ /** Scan options supported by the driver. */ @@ -846,7 +931,10 @@ enum sr_configkey { */ SR_CONF_DATA_SOURCE, - /*--- Acquisition modes ---------------------------------------------*/ + /** The device supports setting a probe factor. */ + SR_CONF_PROBE_FACTOR, + + /*--- Acquisition modes, sample limiting ----------------------------*/ /** * The device supports setting a sample time limit (how long @@ -884,36 +972,12 @@ enum sr_configkey { SR_CONF_TEST_MODE, }; -/** 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; - /** 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; - /** Serial number. */ - char *serial_num; - /** Connection string to uniquely identify devices. */ - char *connection_id; - /** 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 { @@ -923,6 +987,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 */ @@ -949,24 +1017,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 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. * 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. * 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(). */ @@ -1005,8 +1073,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; }; /** @@ -1017,6 +1085,14 @@ struct sr_dev_driver { */ 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"