X-Git-Url: https://sigrok.org/gitweb/?a=blobdiff_plain;f=include%2Flibsigrok%2Flibsigrok.h;h=a384f611d53cf687a1c52cac90b44d13df1dcf44;hb=7d7fd93c947dcaa94f3d90bfb6b0bf3ce01d774d;hp=4cd68930c132487fd2c5b36fcc042f2bc8c1b683;hpb=c4b78389227b4d94ed211618f12a25f49d1ba8a3;p=libsigrok.git diff --git a/include/libsigrok/libsigrok.h b/include/libsigrok/libsigrok.h index 4cd68930..a384f611 100644 --- a/include/libsigrok/libsigrok.h +++ b/include/libsigrok/libsigrok.h @@ -64,7 +64,6 @@ extern "C" { /** Status/error codes returned by libsigrok functions. */ enum sr_error_code { - SR_OK_CONTINUE = 1, /**< Keep going. */ SR_OK = 0, /**< No error. */ SR_ERR = -1, /**< Generic/unspecified error. */ SR_ERR_MALLOC = -2, /**< Malloc/calloc/realloc error. */ @@ -78,10 +77,7 @@ enum sr_error_code { 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 @@ -149,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. */ @@ -163,17 +162,19 @@ enum sr_packettype { SR_DF_TRIGGER, /** Payload is struct sr_datafeed_logic. */ SR_DF_LOGIC, - /** Payload is struct sr_datafeed_analog. */ - SR_DF_ANALOG, + /** DEPRECATED! Use SR_DF_ANALOG instead. */ + SR_DF_ANALOG_OLD, /** Beginning of frame. No payload. */ SR_DF_FRAME_BEGIN, /** End of frame. No payload. */ SR_DF_FRAME_END, - /** Payload is struct sr_datafeed_analog2. */ - SR_DF_ANALOG2, + /** 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, @@ -230,9 +231,13 @@ enum sr_mq { 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, @@ -297,9 +302,36 @@ enum sr_unit { 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, @@ -349,6 +381,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 { @@ -426,7 +465,7 @@ struct sr_session; struct sr_rational { /** Numerator of the rational number. */ - uint64_t p; + int64_t p; /** Denominator of the rational number. */ uint64_t q; }; @@ -455,8 +494,8 @@ struct sr_datafeed_logic { void *data; }; -/** Analog datafeed payload for type SR_DF_ANALOG. */ -struct sr_datafeed_analog { +/** Analog datafeed payload for type SR_DF_ANALOG_OLD. */ +struct sr_datafeed_analog_old { /** The channels for which data is included in this packet. */ GSList *channels; /** Number of samples in data */ @@ -473,8 +512,8 @@ struct sr_datafeed_analog { float *data; }; -/** Analog datafeed payload for type SR_DF_ANALOG2. */ -struct sr_datafeed_analog2 { +/** Analog datafeed payload for type SR_DF_ANALOG. */ +struct sr_datafeed_analog { void *data; uint32_t num_samples; struct sr_analog_encoding *encoding; @@ -507,17 +546,42 @@ struct sr_analog_spec { /** 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; }; +/** Resource type. + * @since 0.4.0 + */ +enum sr_resource_type { + SR_RESOURCE_FIRMWARE = 1, +}; + +/** 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; +}; + +/** 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; @@ -568,24 +632,35 @@ 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". */ - 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; }; -#define SR_CONF_GET (1 << 31) -#define SR_CONF_SET (1 << 30) -#define SR_CONF_LIST (1 << 29) -#define SR_CONF_MASK 0x1fffffff +/** 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 { @@ -624,6 +699,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 -------------------------------------------*/ /** @@ -667,6 +750,8 @@ enum sr_configkey { */ 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. */ @@ -879,31 +964,24 @@ 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, - /** 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. */ - SR_CONF_SCAN_OPTIONS = 40000, + /* Update sr_key_info_config[] (hwdriver.c) upon changes! */ - /** Device options for a particular device. */ - SR_CONF_DEVICE_OPTIONS, + /*--- Special stuff -------------------------------------------------*/ /** Session filename. */ - SR_CONF_SESSIONFILE, + SR_CONF_SESSIONFILE = 40000, /** The device supports specifying a capturefile to inject. */ SR_CONF_CAPTUREFILE, @@ -931,6 +1009,8 @@ enum sr_configkey { /** The device supports setting a probe factor. */ SR_CONF_PROBE_FACTOR, + /* Update sr_key_info_config[] (hwdriver.c) upon changes! */ + /*--- Acquisition modes, sample limiting ----------------------------*/ /** @@ -967,6 +1047,8 @@ enum sr_configkey { /** Self test mode. */ SR_CONF_TEST_MODE, + + /* Update sr_key_info_config[] (hwdriver.c) upon changes! */ }; /** @@ -986,7 +1068,7 @@ enum sr_dev_inst_type { SR_INST_SCPI, /** Device-instance type for user-created "devices". */ SR_INST_USER, - /** Device instance type for modbus devices. */ + /** Device instance type for Modbus devices. */ SR_INST_MODBUS, }; @@ -1008,9 +1090,9 @@ 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. */ @@ -1020,13 +1102,13 @@ struct sr_dev_driver { 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) (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) (const struct sr_dev_driver *driver); @@ -1070,18 +1152,10 @@ 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; }; -/** - * @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. */ @@ -1090,8 +1164,8 @@ struct sr_serial_port { char *description; }; -#include "proto.h" -#include "version.h" +#include +#include #ifdef __cplusplus }