]> sigrok.org Git - libsigrok.git/blobdiff - libsigrok.h
doxygen: Add more input format docs.
[libsigrok.git] / libsigrok.h
index 90e5e537aaba8dfc80153733fe9b9ae142878be7..4601f60be40ba5b4527fa6726ea290a3293961c2 100644 (file)
@@ -286,6 +286,7 @@ struct sr_datafeed_logic {
 };
 
 struct sr_datafeed_analog {
+       /** The probes for which data is included in this packet. */
        GSList *probes;
        int num_samples;
        /** Measured quantity (voltage, current, temperature, and so on). */
@@ -294,22 +295,76 @@ struct sr_datafeed_analog {
        int unit;
        /** Bitmap with extra information about the MQ. */
        uint64_t mqflags;
-       /** The analog value. */
+       /** The analog value(s). The data is interleaved according to
+        * the probes list. */
        float *data;
 };
 
+/** Input (file) format struct. */
 struct sr_input {
+       /**
+        * A pointer to this input format's 'struct sr_input_format'.
+        * The frontend can use this to call the module's callbacks.
+        */
        struct sr_input_format *format;
+
        GHashTable *param;
+
        struct sr_dev_inst *sdi;
+
        void *internal;
 };
 
 struct sr_input_format {
+       /** The unique ID for this input format. Must not be NULL. */
        char *id;
+
+       /**
+        * A short description of the input format, 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 filename The name (and path) of the file to check.
+        *
+        * @return TRUE if this module knows the format, FALSE if it doesn't.
+        */
        int (*format_match) (const char *filename);
-       int (*init) (struct sr_input *in);
+
+       /**
+        * 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 filename The name (and path) of the file to use.
+        *
+        * @return SR_OK upon success, a negative error code upon failure.
+        */
+       int (*init) (struct sr_input *in, const char *filename);
+
+       /**
+        * 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.
+        *
+        * @return SR_OK upon success, a negative error code upon failure.
+        */
        int (*loadfile) (struct sr_input *in, const char *filename);
 };
 
@@ -388,7 +443,7 @@ enum {
        /** The device can measure humidity. */
        SR_CONF_HYGROMETER,
 
-       /*--- Driver options ------------------------------------------------*/
+       /*--- Driver scan options -------------------------------------------*/
 
        /**
         * Specification on how to connect to a device.
@@ -461,20 +516,26 @@ enum {
        /** Coupling. */
        SR_CONF_COUPLING,
 
+       /** Trigger types.  */
+       SR_CONF_TRIGGER_TYPE,
+
        /*--- Special stuff -------------------------------------------------*/
 
+       /** Scan options supported by the driver. */
+       SR_CONF_SCAN_OPTIONS = 40000,
+
+       /** Device options for a particular device. */
+       SR_CONF_DEVICE_OPTIONS,
+
        /** Session filename. */
-       SR_CONF_SESSIONFILE = 40000,
+       SR_CONF_SESSIONFILE,
 
-       /* TODO: Better description. */
        /** The device supports specifying a capturefile to inject. */
        SR_CONF_CAPTUREFILE,
 
-       /* TODO: Better description. */
        /** The device supports specifying the capturefile unit size. */
        SR_CONF_CAPTURE_UNITSIZE,
 
-       /* TODO: Better description. */
        /** The device supports setting the number of probes. */
        SR_CONF_CAPTURE_NUM_PROBES,
 
@@ -540,39 +601,6 @@ enum {
        SR_ST_STOPPING,
 };
 
-/*
- * TODO: This sucks, you just kinda have to "know" the returned type.
- * TODO: Need a DI to return the number of trigger stages supported.
- */
-
-/** Device info IDs. */
-enum {
-       /** A list of options supported by the driver. */
-       SR_DI_HWOPTS = 10000,
-       /** A list of capabilities supported by the device. */
-       SR_DI_HWCAPS,
-       /** Samplerates supported by this device (struct sr_samplerates). */
-       SR_DI_SAMPLERATES,
-       /** 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,
-};
-
 /*
  * A device supports either a range of samplerates with steps of a given
  * granularity, or is limited to a set of defined samplerates. Use either
@@ -599,6 +627,8 @@ struct sr_dev_driver {
                        const struct sr_dev_inst *sdi);
        int (*config_set) (int id, const void *value,
                        const struct sr_dev_inst *sdi);
+       int (*config_list) (int info_id, const void **data,
+                       const struct sr_dev_inst *sdi);
 
        /* Device-specific */
        int (*dev_open) (struct sr_dev_inst *sdi);