]> sigrok.org Git - libsigrok.git/blobdiff - sigrok.h.in
sr: analog: Add MQ and UNIT enums.
[libsigrok.git] / sigrok.h.in
index adde2da337b38ba6241da2b733af652e7dfaf224..1d1f8caf8add72445a43a9232c9b970915d8738c 100644 (file)
@@ -35,32 +35,32 @@ extern "C" {
  */
 
 /** The libsigrok package 'major' version number. */
-#define LIBSIGROK_MAJOR_VERSION @LIBSIGROK_MAJOR_VERSION@
+#define SR_PACKAGE_VERSION_MAJOR @SR_PACKAGE_VERSION_MAJOR@
 
 /** The libsigrok package 'minor' version number. */
-#define LIBSIGROK_MINOR_VERSION @LIBSIGROK_MINOR_VERSION@
+#define SR_PACKAGE_VERSION_MINOR @SR_PACKAGE_VERSION_MINOR@
 
 /** The libsigrok package 'micro' version number. */
-#define LIBSIGROK_MICRO_VERSION @LIBSIGROK_MICRO_VERSION@
+#define SR_PACKAGE_VERSION_MICRO @SR_PACKAGE_VERSION_MICRO@
 
 /** The libsigrok package version ("major.minor.micro") as string. */
-#define LIBSIGROK_VERSION_STRING "@LIBSIGROK_VERSION@"
+#define SR_PACKAGE_VERSION_STRING "@SR_PACKAGE_VERSION@"
 
 /*
  * Library/libtool version macros (can be used for conditional compilation).
  */
 
 /** The libsigrok libtool 'current' version number. */
-#define LIBSIGROK_LT_CURRENT @LIBSIGROK_LT_CURRENT@
+#define SR_LIB_VERSION_CURRENT @SR_LIB_VERSION_CURRENT@
 
 /** The libsigrok libtool 'revision' version number. */
-#define LIBSIGROK_LT_REVISION @LIBSIGROK_LT_REVISION@
+#define SR_LIB_VERSION_REVISION @SR_LIB_VERSION_REVISION@
 
 /** The libsigrok libtool 'age' version number. */
-#define LIBSIGROK_LT_AGE @LIBSIGROK_LT_AGE@
+#define SR_LIB_VERSION_AGE @SR_LIB_VERSION_AGE@
 
 /** The libsigrok libtool version ("current:revision:age") as string. */
-#define LIBSIGROK_LT_VERSION_STRING "@LIBSIGROK_LT_VERSION@"
+#define SR_LIB_VERSION_STRING "@SR_LIB_VERSION@"
 
 /*
  * Status/error codes returned by libsigrok functions.
@@ -115,14 +115,25 @@ extern "C" {
  *
  * This uses the 'visibility' feature of gcc (requires gcc >= 4.0).
  *
+ * This feature is not available on MinGW/Windows, as it is a feature of
+ * ELF files and MinGW/Windows uses PE files.
+ *
  * Details: http://gcc.gnu.org/wiki/Visibility
  */
 
 /* Marks public libsigrok API symbols. */
+#ifndef _WIN32
 #define SR_API __attribute__((visibility("default")))
+#else
+#define SR_API
+#endif
 
 /* Marks private, non-public libsigrok symbols (not part of the API). */
+#ifndef _WIN32
 #define SR_PRIV __attribute__((visibility("hidden")))
+#else
+#define SR_PRIV
+#endif
 
 typedef int (*sr_receive_data_callback_t)(int fd, int revents, void *cb_data);
 
@@ -131,6 +142,16 @@ enum {
        SR_T_UINT64,
        SR_T_CHAR,
        SR_T_BOOL,
+       SR_T_FLOAT,
+       SR_T_RATIONAL_PERIOD,
+       SR_T_RATIONAL_VOLT,
+};
+
+struct sr_rational {
+       /* numerator */
+       uint64_t p;
+       /* denominator */
+       uint64_t q;
 };
 
 /* sr_datafeed_packet.type values */
@@ -139,7 +160,34 @@ enum {
        SR_DF_END,
        SR_DF_TRIGGER,
        SR_DF_LOGIC,
-       SR_DF_PD,
+       SR_DF_META_LOGIC,
+       SR_DF_ANALOG,
+       SR_DF_META_ANALOG,
+       SR_DF_FRAME_BEGIN,
+       SR_DF_FRAME_END,
+};
+
+/* sr_datafeed_analog.mq values */
+enum {
+       SR_MQ_VOLTAGE,
+       SR_MQ_CURRENT,
+       SR_MQ_RESISTANCE,
+       SR_MQ_CAPACITANCE,
+       SR_MQ_TEMPERATURE,
+       SR_MQ_FREQUENCY,
+       SR_MQ_DUTY_CYCLE,
+};
+
+/* sr_datafeed_analog.unit values */
+enum {
+       SR_UNIT_VOLT,
+       SR_UNIT_AMPERE,
+       SR_UNIT_OHM,
+       SR_UNIT_FARAD,
+       SR_UNIT_CELSIUS,
+       SR_UNIT_KELVIN,
+       SR_UNIT_HERTZ,
+       SR_UNIT_PERCENTAGE,
 };
 
 struct sr_datafeed_packet {
@@ -150,8 +198,11 @@ struct sr_datafeed_packet {
 struct sr_datafeed_header {
        int feed_version;
        struct timeval starttime;
+};
+
+struct sr_datafeed_meta_logic {
+       int num_probes;
        uint64_t samplerate;
-       int num_logic_probes;
 };
 
 struct sr_datafeed_logic {
@@ -160,6 +211,17 @@ struct sr_datafeed_logic {
        void *data;
 };
 
+struct sr_datafeed_meta_analog {
+       int num_probes;
+};
+
+struct sr_datafeed_analog {
+       int num_samples;
+       int mq; /* Measured quantity (e.g. voltage, current, temperature) */
+       int unit; /* Unit in which the MQ is measured. */
+       float *data;
+};
+
 struct sr_input {
        struct sr_input_format *format;
        char *param;
@@ -238,7 +300,8 @@ enum {
        /** The device can act as logic analyzer. */
        SR_HWCAP_LOGIC_ANALYZER,
 
-       /* TODO: SR_HWCAP_SCOPE, SW_HWCAP_PATTERN_GENERATOR, etc.? */
+       /** The device can act as an oscilloscope. */
+       SR_HWCAP_OSCILLOSCOPE,
 
        /*--- Device types --------------------------------------------------*/
 
@@ -264,6 +327,30 @@ enum {
        /** The device supports Run Length Encoding. */
        SR_HWCAP_RLE,
 
+       /** The device supports setting trigger slope. */
+       SR_HWCAP_TRIGGER_SLOPE,
+
+       /** Trigger source. */
+       SR_HWCAP_TRIGGER_SOURCE,
+
+       /** Horizontal trigger position */
+       SR_HWCAP_HORIZ_TRIGGERPOS,
+
+       /** Buffer size. */
+       SR_HWCAP_BUFFERSIZE,
+
+       /** Time base. */
+       SR_HWCAP_TIMEBASE,
+
+       /** Filter. */
+       SR_HWCAP_FILTER,
+
+       /** Volts/div. */
+       SR_HWCAP_VDIV,
+
+       /** Coupling. */
+       SR_HWCAP_COUPLING,
+
        /*--- Special stuff -------------------------------------------------*/
 
        /* TODO: Better description. */
@@ -292,6 +379,12 @@ enum {
         */
        SR_HWCAP_LIMIT_SAMPLES,
 
+       /**
+        * The device supports setting a frame limit, i.e. how many
+        * frames should be acquired.
+        */
+       SR_HWCAP_LIMIT_FRAMES,
+
        /**
         * The device supports continuous sampling, i.e. neither a time limit
         * nor a sample number limit has to be supplied, it will just acquire
@@ -299,7 +392,6 @@ enum {
         */
        SR_HWCAP_CONTINUOUS,
 
-       /* TODO: SR_HWCAP_JUST_SAMPLE or similar. */
 };
 
 struct sr_hwcap_option {
@@ -353,12 +445,24 @@ enum {
        SR_DI_PROBE_NAMES,
        /* Samplerates supported by this device, (struct sr_samplerates) */
        SR_DI_SAMPLERATES,
-       /* Types of trigger supported, out of "01crf" (char *) */
+       /* Types of logic trigger supported, out of "01crf" (char *) */
        SR_DI_TRIGGER_TYPES,
        /* The currently set samplerate in Hz (uint64_t) */
        SR_DI_CUR_SAMPLERATE,
        /* Supported patterns (in pattern generator mode) */
        SR_DI_PATTERNS,
+       /* Supported buffer sizes */
+       SR_DI_BUFFERSIZES,
+       /* Supported time bases */
+       SR_DI_TIMEBASES,
+       /* Supported trigger sources */
+       SR_DI_TRIGGER_SOURCES,
+       /* Supported filter targets */
+       SR_DI_FILTERS,
+       /* Valid volts/div values */
+       SR_DI_VDIVS,
+       /* Coupling options */
+       SR_DI_COUPLING,
 };
 
 /*
@@ -370,7 +474,7 @@ struct sr_samplerates {
        uint64_t low;
        uint64_t high;
        uint64_t step;
-       uint64_t *list;
+       const uint64_t *list;
 };
 
 struct sr_dev_driver {
@@ -384,10 +488,10 @@ struct sr_dev_driver {
        /* Device-specific */
        int (*dev_open) (int dev_index);
        int (*dev_close) (int dev_index);
-       void *(*dev_info_get) (int dev_index, int dev_info_id);
+       const void *(*dev_info_get) (int dev_index, int dev_info_id);
        int (*dev_status_get) (int dev_index);
-       int *(*hwcap_get_all) (void);
-       int (*dev_config_set) (int dev_index, int hwcap, void *value);
+       const int *(*hwcap_get_all) (void);
+       int (*dev_config_set) (int dev_index, int hwcap, const void *value);
        int (*dev_acquisition_start) (int dev_index, void *session_dev_id);
        int (*dev_acquisition_stop) (int dev_index, void *session_dev_id);
 };