libsigrok.h   libsigrok.h 
skipping to change at line 20 skipping to change at line 20
* *
* This program is distributed in the hope that it will be useful, * This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of * but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details. * GNU General Public License for more details.
* *
* You should have received a copy of the GNU General Public License * You should have received a copy of the GNU General Public License
* along with this program. If not, see <http://www.gnu.org/licenses/>. * along with this program. If not, see <http://www.gnu.org/licenses/>.
*/ */
#ifndef LIBSIGROK_SIGROK_H #ifndef LIBSIGROK_LIBSIGROK_H
#define LIBSIGROK_SIGROK_H #define LIBSIGROK_LIBSIGROK_H
#include <stdio.h> #include <stdio.h>
#include <sys/time.h> #include <sys/time.h>
#include <stdint.h> #include <stdint.h>
#include <inttypes.h> #include <inttypes.h>
#include <glib.h> #include <glib.h>
#ifdef __cplusplus #ifdef __cplusplus
extern "C" { extern "C" {
#endif #endif
skipping to change at line 66 skipping to change at line 66
* return value as used by all other functions to indicate "malloc error". * return value as used by all other functions to indicate "malloc error".
* There must be no functions which indicate two different errors via the * There must be no functions which indicate two different errors via the
* same return code. * same return code.
* *
* Also, for compatibility reasons, no defined return codes are ever remove d * Also, for compatibility reasons, no defined return codes are ever remove d
* or reused for different errors later. You can only add new entries and * or reused for different errors later. You can only add new entries and
* return codes, but never remove or redefine existing ones. * return codes, but never remove or redefine existing ones.
*/ */
/** Status/error codes returned by libsigrok functions. */ /** Status/error codes returned by libsigrok functions. */
enum { enum sr_error_code {
SR_OK = 0, /**< No error. */ SR_OK = 0, /**< No error. */
SR_ERR = -1, /**< Generic/unspecified error. */ SR_ERR = -1, /**< Generic/unspecified error. */
SR_ERR_MALLOC = -2, /**< Malloc/calloc/realloc error. */ SR_ERR_MALLOC = -2, /**< Malloc/calloc/realloc error. */
SR_ERR_ARG = -3, /**< Function argument error. */ SR_ERR_ARG = -3, /**< Function argument error. */
SR_ERR_BUG = -4, /**< Errors hinting at internal bugs. */ SR_ERR_BUG = -4, /**< Errors hinting at internal bugs. */
SR_ERR_SAMPLERATE = -5, /**< Incorrect samplerate. */ SR_ERR_SAMPLERATE = -5, /**< Incorrect samplerate. */
SR_ERR_NA = -6, /**< Not applicable. */ SR_ERR_NA = -6, /**< Not applicable. */
SR_ERR_DEV_CLOSED = -7, /**< Device is closed, but needs to be open. SR_ERR_DEV_CLOSED = -7, /**< Device is closed, but must be open.
*/ */
SR_ERR_TIMEOUT = -8, /**< A timeout occurred. */ SR_ERR_TIMEOUT = -8, /**< A timeout occurred. */
SR_ERR_CHANNEL_GROUP = -9, /**< A channel group must be specified. *
/
/* /*
* Note: When adding entries here, don't forget to also update the * Note: When adding entries here, don't forget to also update the
* sr_strerror() and sr_strerror_name() functions in error.c. * sr_strerror() and sr_strerror_name() functions in error.c.
*/ */
}; };
#define SR_MAX_PROBENAME_LEN 32 #define SR_MAX_CHANNELNAME_LEN 32
/* Handy little macros */ /* Handy little macros */
#define SR_HZ(n) (n) #define SR_HZ(n) (n)
#define SR_KHZ(n) ((n) * (uint64_t)(1000ULL)) #define SR_KHZ(n) ((n) * (uint64_t)(1000ULL))
#define SR_MHZ(n) ((n) * (uint64_t)(1000000ULL)) #define SR_MHZ(n) ((n) * (uint64_t)(1000000ULL))
#define SR_GHZ(n) ((n) * (uint64_t)(1000000000ULL)) #define SR_GHZ(n) ((n) * (uint64_t)(1000000000ULL))
#define SR_HZ_TO_NS(n) ((uint64_t)(1000000000ULL) / (n)) #define SR_HZ_TO_NS(n) ((uint64_t)(1000000000ULL) / (n))
/** libsigrok loglevels. */ /** libsigrok loglevels. */
enum { enum sr_loglevel {
SR_LOG_NONE = 0, /**< Output no messages at all. */ SR_LOG_NONE = 0, /**< Output no messages at all. */
SR_LOG_ERR = 1, /**< Output error messages. */ SR_LOG_ERR = 1, /**< Output error messages. */
SR_LOG_WARN = 2, /**< Output warnings. */ SR_LOG_WARN = 2, /**< Output warnings. */
SR_LOG_INFO = 3, /**< Output informational messages. */ SR_LOG_INFO = 3, /**< Output informational messages. */
SR_LOG_DBG = 4, /**< Output debug messages. */ SR_LOG_DBG = 4, /**< Output debug messages. */
SR_LOG_SPEW = 5, /**< Output very noisy debug messages. */ SR_LOG_SPEW = 5, /**< Output very noisy debug messages. */
}; };
/* /*
* Use SR_API to mark public API symbols, and SR_PRIV for private symbols. * Use SR_API to mark public API symbols, and SR_PRIV for private symbols.
skipping to change at line 133 skipping to change at line 134
#define SR_API #define SR_API
#endif #endif
/* Marks private, non-public libsigrok symbols (not part of the API). */ /* Marks private, non-public libsigrok symbols (not part of the API). */
#ifndef _WIN32 #ifndef _WIN32
#define SR_PRIV __attribute__((visibility("hidden"))) #define SR_PRIV __attribute__((visibility("hidden")))
#else #else
#define SR_PRIV #define SR_PRIV
#endif #endif
typedef int (*sr_receive_data_callback_t)(int fd, int revents, void *cb_dat /** Type definition for callback function for data reception. */
a); typedef int (*sr_receive_data_callback)(int fd, int revents, void *cb_data)
;
/** Data types used by sr_config_info(). */ /** Data types used by sr_config_info(). */
enum { enum sr_datatype {
SR_T_UINT64 = 10000, SR_T_UINT64 = 10000,
SR_T_CHAR, SR_T_STRING,
SR_T_BOOL, SR_T_BOOL,
SR_T_FLOAT, SR_T_FLOAT,
SR_T_RATIONAL_PERIOD, SR_T_RATIONAL_PERIOD,
SR_T_RATIONAL_VOLT, SR_T_RATIONAL_VOLT,
SR_T_KEYVALUE, SR_T_KEYVALUE,
SR_T_UINT64_RANGE, SR_T_UINT64_RANGE,
SR_T_DOUBLE_RANGE, SR_T_DOUBLE_RANGE,
SR_T_INT32,
}; };
/** Value for sr_datafeed_packet.type. */ /** Value for sr_datafeed_packet.type. */
enum { enum sr_packettype {
/** Payload is sr_datafeed_header. */
SR_DF_HEADER = 10000, SR_DF_HEADER = 10000,
/** End of stream (no further data). */
SR_DF_END, SR_DF_END,
/** Payload is struct sr_datafeed_meta */
SR_DF_META, SR_DF_META,
/** The trigger matched at this point in the data feed. No payload. */
SR_DF_TRIGGER, SR_DF_TRIGGER,
/** Payload is struct sr_datafeed_logic. */
SR_DF_LOGIC, SR_DF_LOGIC,
/** Payload is struct sr_datafeed_analog. */
SR_DF_ANALOG, SR_DF_ANALOG,
/** Beginning of frame. No payload. */
SR_DF_FRAME_BEGIN, SR_DF_FRAME_BEGIN,
/** End of frame. No payload. */
SR_DF_FRAME_END, SR_DF_FRAME_END,
}; };
/** Values for sr_datafeed_analog.mq. */ /** Measured quantity, sr_datafeed_analog.mq. */
enum { enum sr_mq {
SR_MQ_VOLTAGE = 10000, SR_MQ_VOLTAGE = 10000,
SR_MQ_CURRENT, SR_MQ_CURRENT,
SR_MQ_RESISTANCE, SR_MQ_RESISTANCE,
SR_MQ_CAPACITANCE, SR_MQ_CAPACITANCE,
SR_MQ_TEMPERATURE, SR_MQ_TEMPERATURE,
SR_MQ_FREQUENCY, SR_MQ_FREQUENCY,
/** Duty cycle, e.g. on/off ratio. */
SR_MQ_DUTY_CYCLE, SR_MQ_DUTY_CYCLE,
/** Continuity test. */
SR_MQ_CONTINUITY, SR_MQ_CONTINUITY,
SR_MQ_PULSE_WIDTH, SR_MQ_PULSE_WIDTH,
SR_MQ_CONDUCTANCE, SR_MQ_CONDUCTANCE,
/** Electrical power, usually in W, or dBm. */ /** Electrical power, usually in W, or dBm. */
SR_MQ_POWER, SR_MQ_POWER,
/** Gain (a transistor's gain, or hFE, for example). */ /** Gain (a transistor's gain, or hFE, for example). */
SR_MQ_GAIN, SR_MQ_GAIN,
/** Logarithmic representation of sound pressure relative to a /** Logarithmic representation of sound pressure relative to a
* reference value. */ * reference value. */
SR_MQ_SOUND_PRESSURE_LEVEL, SR_MQ_SOUND_PRESSURE_LEVEL,
/** Carbon monoxide level */
SR_MQ_CARBON_MONOXIDE, SR_MQ_CARBON_MONOXIDE,
/** Humidity */
SR_MQ_RELATIVE_HUMIDITY, SR_MQ_RELATIVE_HUMIDITY,
/** Time */
SR_MQ_TIME,
}; };
/** Values for sr_datafeed_analog.unit. */ /** Unit of measured quantity, sr_datafeed_analog.unit. */
enum { enum sr_unit {
/** Volt */
SR_UNIT_VOLT = 10000, SR_UNIT_VOLT = 10000,
/** Ampere (current). */
SR_UNIT_AMPERE, SR_UNIT_AMPERE,
/** Ohm (resistance). */
SR_UNIT_OHM, SR_UNIT_OHM,
/** Farad (capacity). */
SR_UNIT_FARAD, SR_UNIT_FARAD,
/** Kelvin (temperature). */
SR_UNIT_KELVIN, SR_UNIT_KELVIN,
/** Degrees Celsius (temperature). */
SR_UNIT_CELSIUS, SR_UNIT_CELSIUS,
/** Degrees Fahrenheit (temperature). */
SR_UNIT_FAHRENHEIT, SR_UNIT_FAHRENHEIT,
/** Hertz (frequency, 1/s, [Hz]). */
SR_UNIT_HERTZ, SR_UNIT_HERTZ,
/** Percent value. */
SR_UNIT_PERCENTAGE, SR_UNIT_PERCENTAGE,
/** Boolean value. */
SR_UNIT_BOOLEAN, SR_UNIT_BOOLEAN,
/** Time in seconds. */
SR_UNIT_SECOND, SR_UNIT_SECOND,
/** Unit of conductance, the inverse of resistance. */ /** Unit of conductance, the inverse of resistance. */
SR_UNIT_SIEMENS, SR_UNIT_SIEMENS,
/** /**
* An absolute measurement of power, in decibels, referenced to * An absolute measurement of power, in decibels, referenced to
* 1 milliwatt (dBu). * 1 milliwatt (dBu).
*/ */
SR_UNIT_DECIBEL_MW, SR_UNIT_DECIBEL_MW,
/** Voltage in decibel, referenced to 1 volt (dBV). */ /** Voltage in decibel, referenced to 1 volt (dBV). */
SR_UNIT_DECIBEL_VOLT, SR_UNIT_DECIBEL_VOLT,
skipping to change at line 219 skipping to change at line 247
*/ */
SR_UNIT_UNITLESS, SR_UNIT_UNITLESS,
/** Sound pressure level relative so 20 micropascals. */ /** Sound pressure level relative so 20 micropascals. */
SR_UNIT_DECIBEL_SPL, SR_UNIT_DECIBEL_SPL,
/** /**
* Normalized (0 to 1) concentration of a substance or compound with 0 * Normalized (0 to 1) concentration of a substance or compound with 0
* representing a concentration of 0%, and 1 being 100%. This is * representing a concentration of 0%, and 1 being 100%. This is
* represented as the fraction of number of particles of the substan ce. * represented as the fraction of number of particles of the substan ce.
*/ */
SR_UNIT_CONCENTRATION, SR_UNIT_CONCENTRATION,
/** Revolutions per minute. */
SR_UNIT_REVOLUTIONS_PER_MINUTE, SR_UNIT_REVOLUTIONS_PER_MINUTE,
/** Apparent power [VA]. */
SR_UNIT_VOLT_AMPERE, SR_UNIT_VOLT_AMPERE,
/** Real power [W]. */
SR_UNIT_WATT, SR_UNIT_WATT,
/** Consumption [Wh]. */
SR_UNIT_WATT_HOUR, SR_UNIT_WATT_HOUR,
}; };
/** Values for sr_datafeed_analog.flags. */ /** Values for sr_datafeed_analog.flags. */
enum { enum sr_mqflag {
/** Voltage measurement is alternating current (AC). */ /** Voltage measurement is alternating current (AC). */
SR_MQFLAG_AC = 0x01, SR_MQFLAG_AC = 0x01,
/** Voltage measurement is direct current (DC). */ /** Voltage measurement is direct current (DC). */
SR_MQFLAG_DC = 0x02, SR_MQFLAG_DC = 0x02,
/** This is a true RMS measurement. */ /** This is a true RMS measurement. */
SR_MQFLAG_RMS = 0x04, SR_MQFLAG_RMS = 0x04,
/** Value is voltage drop across a diode, or NAN. */ /** Value is voltage drop across a diode, or NAN. */
SR_MQFLAG_DIODE = 0x08, SR_MQFLAG_DIODE = 0x08,
/** Device is in "hold" mode (repeating the last measurement). */ /** Device is in "hold" mode (repeating the last measurement). */
SR_MQFLAG_HOLD = 0x10, SR_MQFLAG_HOLD = 0x10,
skipping to change at line 269 skipping to change at line 301
SR_MQFLAG_SPL_TIME_WEIGHT_S = 0x2000, SR_MQFLAG_SPL_TIME_WEIGHT_S = 0x2000,
/** Sound pressure level measurement is F-weighted (125ms) in the /** Sound pressure level measurement is F-weighted (125ms) in the
* time domain. */ * time domain. */
SR_MQFLAG_SPL_TIME_WEIGHT_F = 0x4000, SR_MQFLAG_SPL_TIME_WEIGHT_F = 0x4000,
/** Sound pressure level is time-averaged (LAT), also known as /** Sound pressure level is time-averaged (LAT), also known as
* Equivalent Continuous A-weighted Sound Level (LEQ). */ * Equivalent Continuous A-weighted Sound Level (LEQ). */
SR_MQFLAG_SPL_LAT = 0x8000, SR_MQFLAG_SPL_LAT = 0x8000,
/** Sound pressure level represented as a percentage of measurements /** Sound pressure level represented as a percentage of measurements
* that were over a preset alarm level. */ * that were over a preset alarm level. */
SR_MQFLAG_SPL_PCT_OVER_ALARM = 0x10000, SR_MQFLAG_SPL_PCT_OVER_ALARM = 0x10000,
/** Time is duration (as opposed to epoch, ...). */
SR_MQFLAG_DURATION = 0x20000,
/** Device is in "avg" mode, averaging upon each new value. */
SR_MQFLAG_AVG = 0x40000,
}; };
/**
* @struct sr_context
* Opaque structure representing a libsigrok context.
*
* None of the fields of this structure are meant to be accessed directly.
*
* @see sr_init(), sr_exit().
*/
struct sr_context; struct sr_context;
/** Packet in a sigrok data feed. */
struct sr_datafeed_packet { struct sr_datafeed_packet {
uint16_t type; uint16_t type;
const void *payload; const void *payload;
}; };
/** Header of a sigrok data feed. */
struct sr_datafeed_header { struct sr_datafeed_header {
int feed_version; int feed_version;
struct timeval starttime; struct timeval starttime;
}; };
/** Datafeed payload for type SR_DF_META. */
struct sr_datafeed_meta { struct sr_datafeed_meta {
GSList *config; GSList *config;
}; };
/** Logic datafeed payload for type SR_DF_LOGIC. */
struct sr_datafeed_logic { struct sr_datafeed_logic {
uint64_t length; uint64_t length;
uint16_t unitsize; uint16_t unitsize;
void *data; void *data;
}; };
/** Analog datafeed payload for type SR_DF_ANALOG. */
struct sr_datafeed_analog { struct sr_datafeed_analog {
/** The probes for which data is included in this packet. */ /** The channels for which data is included in this packet. */
GSList *probes; GSList *channels;
/** Number of samples in data */
int num_samples; int num_samples;
/** Measured quantity (voltage, current, temperature, and so on). */ /** Measured quantity (voltage, current, temperature, and so on).
* Use SR_MQ_VOLTAGE, ... */
int mq; int mq;
/** Unit in which the MQ is measured. */ /** Unit in which the MQ is measured. Use SR_UNIT_VOLT, ... */
int unit; int unit;
/** Bitmap with extra information about the MQ. */ /** Bitmap with extra information about the MQ. Use SR_MQFLAG_AC, .. . */
uint64_t mqflags; uint64_t mqflags;
/** The analog value(s). The data is interleaved according to /** The analog value(s). The data is interleaved according to
* the probes list. */ * the channels list. */
float *data; float *data;
}; };
/** Input (file) format struct. */ /** Input (file) format struct. */
struct sr_input { struct sr_input {
/** /**
* A pointer to this input format's 'struct sr_input_format'. * A pointer to this input format's 'struct sr_input_format'.
* The frontend can use this to call the module's callbacks. * The frontend can use this to call the module's callbacks.
*/ */
struct sr_input_format *format; struct sr_input_format *format;
GHashTable *param; GHashTable *param;
struct sr_dev_inst *sdi; struct sr_dev_inst *sdi;
void *internal; void *internal;
}; };
/** Input (file) format driver. */
struct sr_input_format { struct sr_input_format {
/** The unique ID for this input format. Must not be NULL. */ /** The unique ID for this input format. Must not be NULL. */
char *id; char *id;
/** /**
* A short description of the input format, which can (for example) * A short description of the input format, which can (for example)
* be displayed to the user by frontends. Must not be NULL. * be displayed to the user by frontends. Must not be NULL.
*/ */
char *description; char *description;
/** /**
* Check if this input module can load and parse the specified file. * Check if this input module can load and parse the specified file.
* *
* @param filename The name (and path) of the file to check. * @param[in] filename The name (and path) of the file to check.
* *
* @return TRUE if this module knows the format, FALSE if it doesn't * @retval TRUE This module knows the format.
. * @retval FALSE This module does not know the format.
*/ */
int (*format_match) (const char *filename); int (*format_match) (const char *filename);
/** /**
* Initialize the input module. * Initialize the input module.
* *
* @param in A pointer to a valid 'struct sr_input' that the caller * @param in A pointer to a valid 'struct sr_input' that the caller
* has to allocate and provide to this function. It is als o * has to allocate and provide to this function. It is als o
* the responsibility of the caller to free it later. * the responsibility of the caller to free it later.
* @param filename The name (and path) of the file to use. * @param[in] filename The name (and path) of the file to use.
* *
* @return SR_OK upon success, a negative error code upon failure. * @retval SR_OK Success
* @retval other Negative error code.
*/ */
int (*init) (struct sr_input *in, const char *filename); int (*init) (struct sr_input *in, const char *filename);
/** /**
* Load a file, parsing the input according to the file's format. * Load a file, parsing the input according to the file's format.
* *
* This function will send datafeed packets to the session bus, so * This function will send datafeed packets to the session bus, so
* the calling frontend must have registered its session callbacks * the calling frontend must have registered its session callbacks
* beforehand. * beforehand.
* *
* The packet types sent across the session bus by this function mus t * The packet types sent across the session bus by this function mus t
* include at least SR_DF_HEADER, SR_DF_END, and an appropriate data * 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 * type such as SR_DF_LOGIC. It may also send a SR_DF_TRIGGER packet
* if appropriate. * if appropriate.
* *
* @param in A pointer to a valid 'struct sr_input' that the caller * @param in A pointer to a valid 'struct sr_input' that the caller
* has to allocate and provide to this function. It is als o * has to allocate and provide to this function. It is als o
* the responsibility of the caller to free it later. * the responsibility of the caller to free it later.
* @param filename The name (and path) of the file to use. * @param filename The name (and path) of the file to use.
* *
* @return SR_OK upon success, a negative error code upon failure. * @retval SR_OK Success
* @retval other Negative error code.
*/ */
int (*loadfile) (struct sr_input *in, const char *filename); int (*loadfile) (struct sr_input *in, const char *filename);
}; };
/** Output (file) format struct. */ /** Output (file) format struct. */
struct sr_output { struct sr_output {
/** /** A pointer to this output's format. */
* A pointer to this output format's 'struct sr_output_format'.
* The frontend can use this to call the module's callbacks.
*/
struct sr_output_format *format; struct sr_output_format *format;
/** /**
* The device for which this output module is creating output. This * The device for which this output module is creating output. This
* can be used by the module to find out probe names and numbers. * can be used by the module to find out channel names and numbers.
*/ */
struct sr_dev_inst *sdi; const struct sr_dev_inst *sdi;
/** /**
* An optional parameter which the frontend can pass in to the * An optional parameter which the frontend can pass in to the
* output module. How the string is interpreted is entirely up to * output module. How the string is interpreted is entirely up to
* the module. * the module.
*/ */
char *param; GHashTable *params;
/** /**
* A generic pointer which can be used by the module to keep interna l * A generic pointer which can be used by the module to keep interna l
* state between calls into its callback functions. * state between calls into its callback functions.
* *
* For example, the module might store a pointer to a chunk of outpu t * For example, the module might store a pointer to a chunk of outpu t
* there, and only flush it when it reaches a certain size. * there, and only flush it when it reaches a certain size.
*/ */
void *internal; void *internal;
}; };
/** Output (file) format driver. */
struct sr_output_format { struct sr_output_format {
/** /**
* A unique ID for this output format. Must not be NULL. * A unique ID for this output format. Must not be NULL.
* *
* It can be used by frontends to select this output format for use. * It can be used by frontends to select this output format for use.
* *
* For example, calling sigrok-cli with <code>-O hex</code> will * For example, calling sigrok-cli with <code>-O hex</code> will
* select the hexadecimal text output format. * select the hexadecimal text output format.
*/ */
char *id; char *id;
/** /**
* A short description of the output format. Must not be NULL. * A short description of the output format. Must not be NULL.
* *
* This can be displayed by frontends, e.g. when selecting the outpu t * This can be displayed by frontends, e.g. when selecting the outpu t
* format for saving a file. * format for saving a file.
*/ */
char *description; char *description;
int df_type;
/** /**
* This function is called once, at the beginning of an output strea m. * This function is called once, at the beginning of an output strea m.
* *
* The device struct will be available in the output struct passed i n, * The device struct will be available in the output struct passed i n,
* as well as the param field -- which may be NULL or an empty strin g, * as well as the param field -- which may be NULL or an empty strin g,
* if no parameter was passed. * if no parameter was passed.
* *
* The module can use this to initialize itself, create a struct for * The module can use this to initialize itself, create a struct for
* keeping state and storing it in the <code>internal</code> field. * keeping state and storing it in the <code>internal</code> field.
* *
* @param o Pointer to the respective 'struct sr_output'. * @param o Pointer to the respective 'struct sr_output'.
* *
* @return SR_OK upon success, a negative error code otherwise. * @retval SR_OK Success
* @retval other Negative error code.
*/ */
int (*init) (struct sr_output *o); int (*init) (struct sr_output *o);
/** /**
* Whenever a chunk of data comes in, it will be passed to the
* output module via this function. The <code>data_in</code> and
* <code>length_in</code> values refers to this data; the module
* must not alter or g_free() this buffer.
*
* The function must allocate a buffer for storing its output, and
* pass along a pointer to this buffer in the <code>data_out</code>
* parameter, as well as storing the length of the buffer in
* <code>length_out</code>. The calling frontend will g_free()
* this buffer when it's done with it.
*
* IMPORTANT: The memory allocation much happen using a glib memory
* allocation call (not a "normal" malloc) since g_free() will be
* used to free the memory!
*
* If there is no output, this function MUST store NULL in the
* <code>data_out</code> parameter, so the caller knows not to try
* and g_free() it.
*
* Note: This API call is obsolete, use receive() instead.
*
* @param o Pointer to the respective 'struct sr_output'.
* @param data_in Pointer to the input data buffer.
* @param length_in Length of the input.
* @param data_out Pointer to the allocated output buffer.
* @param length_out Length (in bytes) of the output.
*
* @return SR_OK upon success, a negative error code otherwise.
*/
int (*data) (struct sr_output *o, const uint8_t *data_in,
uint64_t length_in, uint8_t **data_out,
uint64_t *length_out);
/**
* This function is called when an event occurs in the datafeed
* which the output module may need to be aware of. No data is
* passed in, only the fact that the event occurs. The following
* events can currently be passed in:
*
* - SR_DF_TRIGGER: At this point in the datafeed, the trigger
* matched. The output module may mark this in some way, e.g. by
* plotting a red line on a graph.
*
* - SR_DF_END: This marks the end of the datafeed. No more calls
* into the output module will be done, so this is a good time to
* free up any memory used to keep state, for example.
*
* Any output generated by this function must have a reference to
* it stored in the <code>data_out</code> and <code>length_out</code
>
* parameters, or NULL if no output was generated.
*
* Note: This API call is obsolete, use receive() instead.
*
* @param o Pointer to the respective 'struct sr_output'.
* @param event_type Type of event that occured.
* @param data_out Pointer to the allocated output buffer.
* @param length_out Length (in bytes) of the output.
*
* @return SR_OK upon success, a negative error code otherwise.
*/
int (*event) (struct sr_output *o, int event_type, uint8_t **data_ou
t,
uint64_t *length_out);
/**
* This function is passed a copy of every packed in the data feed. * This function is passed a copy of every packed in the data feed.
* Any output generated by the output module in response to the * Any output generated by the output module in response to the
* packet should be returned in a newly allocated GString * packet should be returned in a newly allocated GString
* <code>out</code>, which will be freed by the caller. * <code>out</code>, which will be freed by the caller.
* *
* Packets not of interest to the output module can just be ignored, * Packets not of interest to the output module can just be ignored,
* and the <code>out</code> parameter set to NULL. * and the <code>out</code> parameter set to NULL.
* *
* @param o Pointer to the respective 'struct sr_output'. * @param o Pointer to the respective 'struct sr_output'.
* @param sdi The device instance that generated the packet. * @param sdi The device instance that generated the packet.
* @param packet The complete packet. * @param packet The complete packet.
* @param out A pointer where a GString * should be stored if * @param out A pointer where a GString * should be stored if
* the module generates output, or NULL if not. * the module generates output, or NULL if not.
* *
* @return SR_OK upon success, a negative error code otherwise. * @retval SR_OK Success
* @retval other Negative error code.
*/ */
int (*receive) (struct sr_output *o, const struct sr_dev_inst *sdi, int (*receive) (struct sr_output *o,
const struct sr_datafeed_packet *packet, GString **o ut); const struct sr_datafeed_packet *packet, GString **o ut);
/** /**
* This function is called after the caller is finished using * This function is called after the caller is finished using
* the output module, and can be used to free any internal * the output module, and can be used to free any internal
* resources the module may keep. * resources the module may keep.
* *
* @return SR_OK upon success, a negative error code otherwise. * @retval SR_OK Success
* @retval other Negative error code.
*/ */
int (*cleanup) (struct sr_output *o); int (*cleanup) (struct sr_output *o);
}; };
enum { /** Constants for channel type. */
SR_PROBE_LOGIC = 10000, enum sr_channeltype {
SR_PROBE_ANALOG, /** Channel type is logic channel. */
SR_CHANNEL_LOGIC = 10000,
/** Channel type is analog channel. */
SR_CHANNEL_ANALOG,
}; };
struct sr_probe { /** Information on single channel. */
/* The index field will go: use g_slist_length(sdi->probes) instead. struct sr_channel {
*/ /** Number of channels, starting at 0. */
int index; int index;
/** Channel type (SR_CHANNEL_LOGIC, ...) */
int type; int type;
/** Is this channel enabled? */
gboolean enabled; gboolean enabled;
/** Name of channel. */
char *name; char *name;
/** Trigger string, format like used by sigrok-cli */
char *trigger; char *trigger;
}; };
/** Structure for groups of channels that have common properties. */
struct sr_channel_group {
/** Name of the channel group. */
char *name;
/** List of sr_channel structs of the channels belonging to this gro
up. */
GSList *channels;
/** Private data for driver use. */
void *priv;
};
/** Used for setting or getting value of a config item. */
struct sr_config { struct sr_config {
/** Config key like SR_CONF_CONN, etc. */
int key; int key;
/** Key-specific data. */
GVariant *data; GVariant *data;
}; };
/** Information about a config key. */
struct sr_config_info { struct sr_config_info {
/** Config key like SR_CONF_CONN, etc. */
int key; int key;
/** Data type like SR_T_STRING, etc. */
int datatype; int datatype;
/** Id string, e.g. "serialcomm". */
char *id; char *id;
/** Name, e.g. "Serial communication". */
char *name; char *name;
/** Verbose description (unused currently). */
char *description; char *description;
}; };
enum { /** Constants for device classes */
enum sr_configkey {
/*--- Device classes ----------------------------------------------- -*/ /*--- Device classes ----------------------------------------------- -*/
/** The device can act as logic analyzer. */ /** The device can act as logic analyzer. */
SR_CONF_LOGIC_ANALYZER = 10000, SR_CONF_LOGIC_ANALYZER = 10000,
/** The device can act as an oscilloscope. */ /** The device can act as an oscilloscope. */
SR_CONF_OSCILLOSCOPE, SR_CONF_OSCILLOSCOPE,
/** The device can act as a multimeter. */ /** The device can act as a multimeter. */
SR_CONF_MULTIMETER, SR_CONF_MULTIMETER,
skipping to change at line 592 skipping to change at line 610
/** The device can measure temperature. */ /** The device can measure temperature. */
SR_CONF_THERMOMETER, SR_CONF_THERMOMETER,
/** The device can measure humidity. */ /** The device can measure humidity. */
SR_CONF_HYGROMETER, SR_CONF_HYGROMETER,
/** The device can measure energy consumption. */ /** The device can measure energy consumption. */
SR_CONF_ENERGYMETER, SR_CONF_ENERGYMETER,
/** The device can demodulate signals. */
SR_CONF_DEMODULATOR,
/** Programmable power supply. */
SR_CONF_POWER_SUPPLY,
/*--- Driver scan options ------------------------------------------ -*/ /*--- Driver scan options ------------------------------------------ -*/
/** /**
* Specification on how to connect to a device. * Specification on how to connect to a device.
* *
* In combination with SR_CONF_SERIALCOMM, this is a serial port in * In combination with SR_CONF_SERIALCOMM, this is a serial port in
* the form which makes sense to the OS (e.g., /dev/ttyS0). * the form which makes sense to the OS (e.g., /dev/ttyS0).
* Otherwise this specifies a USB device, either in the form of * Otherwise this specifies a USB device, either in the form of
* @verbatim <bus>.<address> @endverbatim (decimal, e.g. 1.65) or * @verbatim <bus>.<address> @endverbatim (decimal, e.g. 1.65) or
* @verbatim <vendorid>.<productid> @endverbatim * @verbatim <vendorid>.<productid> @endverbatim
skipping to change at line 695 skipping to change at line 719
/** Max hold mode. */ /** Max hold mode. */
SR_CONF_HOLD_MAX, SR_CONF_HOLD_MAX,
/** Min hold mode. */ /** Min hold mode. */
SR_CONF_HOLD_MIN, SR_CONF_HOLD_MIN,
/** Logic low-high threshold range. */ /** Logic low-high threshold range. */
SR_CONF_VOLTAGE_THRESHOLD, SR_CONF_VOLTAGE_THRESHOLD,
/** The device supports using a external clock. */ /** The device supports using an external clock. */
SR_CONF_EXTERNAL_CLOCK, SR_CONF_EXTERNAL_CLOCK,
/** /**
* The device supports swapping channels. Typical this is between * The device supports swapping channels. Typical this is between
* buffered and unbuffered channels. * buffered and unbuffered channels.
*/ */
SR_CONF_SWAP, SR_CONF_SWAP,
/** Center frequency.
* The input signal is downmixed by this frequency before the ADC
* anti-aliasing filter.
*/
SR_CONF_CENTER_FREQUENCY,
/** The device supports setting the number of logic channels. */
SR_CONF_NUM_LOGIC_CHANNELS,
/** The device supports setting the number of analog channels. */
SR_CONF_NUM_ANALOG_CHANNELS,
/** Output voltage. */
SR_CONF_OUTPUT_VOLTAGE,
/** Maximum output voltage. */
SR_CONF_OUTPUT_VOLTAGE_MAX,
/** Output current. */
SR_CONF_OUTPUT_CURRENT,
/** Maximum output current. */
SR_CONF_OUTPUT_CURRENT_MAX,
/** Enabling/disabling output. */
SR_CONF_OUTPUT_ENABLED,
/** Channel output configuration. */
SR_CONF_OUTPUT_CHANNEL,
/** Over-voltage protection (OVP) */
SR_CONF_OVER_VOLTAGE_PROTECTION,
/** Over-current protection (OCP) */
SR_CONF_OVER_CURRENT_PROTECTION,
/** Choice of clock edge for external clock ("r" or "f"). */
SR_CONF_CLOCK_EDGE,
/*--- Special stuff ------------------------------------------------ -*/ /*--- Special stuff ------------------------------------------------ -*/
/** Scan options supported by the driver. */ /** Scan options supported by the driver. */
SR_CONF_SCAN_OPTIONS = 40000, SR_CONF_SCAN_OPTIONS = 40000,
/** Device options for a particular device. */ /** Device options for a particular device. */
SR_CONF_DEVICE_OPTIONS, SR_CONF_DEVICE_OPTIONS,
/** Session filename. */ /** Session filename. */
SR_CONF_SESSIONFILE, SR_CONF_SESSIONFILE,
/** The device supports specifying a capturefile to inject. */ /** The device supports specifying a capturefile to inject. */
SR_CONF_CAPTUREFILE, SR_CONF_CAPTUREFILE,
/** The device supports specifying the capturefile unit size. */ /** The device supports specifying the capturefile unit size. */
SR_CONF_CAPTURE_UNITSIZE, SR_CONF_CAPTURE_UNITSIZE,
/** The device supports setting the number of probes. */
SR_CONF_CAPTURE_NUM_PROBES,
/** Power off the device. */ /** Power off the device. */
SR_CONF_POWER_OFF, SR_CONF_POWER_OFF,
/** Data source for acquisition. If not present, acquisition from /**
* Data source for acquisition. If not present, acquisition from
* the device is always "live", i.e. acquisition starts when the * the device is always "live", i.e. acquisition starts when the
* frontend asks and the results are sent out as soon as possible. * frontend asks and the results are sent out as soon as possible.
* *
* If present, it indicates that either the device has no live * If present, it indicates that either the device has no live
* acquisition capability (for example a pure data logger), or * acquisition capability (for example a pure data logger), or
* there is a choice. sr_config_list() returns those choices. * there is a choice. sr_config_list() returns those choices.
* *
* In any case if a device has live acquisition capabilities, it * In any case if a device has live acquisition capabilities, it
* is always the default. */ * is always the default.
*/
SR_CONF_DATA_SOURCE, SR_CONF_DATA_SOURCE,
/*--- Acquisition modes -------------------------------------------- -*/ /*--- Acquisition modes -------------------------------------------- -*/
/** /**
* The device supports setting a sample time limit (how long * The device supports setting a sample time limit (how long
* the sample acquisition should run, in ms). * the sample acquisition should run, in ms).
*/ */
SR_CONF_LIMIT_MSEC = 50000, SR_CONF_LIMIT_MSEC = 50000,
skipping to change at line 769 skipping to change at line 831
/** /**
* The device supports continuous sampling. Neither a time limit * The device supports continuous sampling. Neither a time limit
* nor a sample number limit has to be supplied, it will just acquir e * nor a sample number limit has to be supplied, it will just acquir e
* samples continuously, until explicitly stopped by a certain comma nd. * samples continuously, until explicitly stopped by a certain comma nd.
*/ */
SR_CONF_CONTINUOUS, SR_CONF_CONTINUOUS,
/** The device has internal storage, into which data is logged. This /** The device has internal storage, into which data is logged. This
* starts or stops the internal logging. */ * starts or stops the internal logging. */
SR_CONF_DATALOG, SR_CONF_DATALOG,
/** Device mode for multi-function devices. */
SR_CONF_DEVICE_MODE,
/** Self test mode. */
SR_CONF_TEST_MODE,
}; };
/** Device instance data
*/
struct sr_dev_inst { struct sr_dev_inst {
/** Device driver. */
struct sr_dev_driver *driver; struct sr_dev_driver *driver;
/** Index of device in driver. */
int index; int index;
/** Device instance status. SR_ST_NOT_FOUND, etc. */
int status; int status;
/** Device instance type. SR_INST_USB, etc. */
int inst_type; int inst_type;
/** Device vendor. */
char *vendor; char *vendor;
/** Device model. */
char *model; char *model;
/** Device version. */
char *version; char *version;
GSList *probes; /** List of channels. */
GSList *channels;
/** List of sr_channel_group structs */
GSList *channel_groups;
/** Device instance connection data (used?) */
void *conn; void *conn;
/** Device instance private data (used?) */
void *priv; void *priv;
}; };
/** Types of device instances (sr_dev_inst). */ /** Types of device instance, struct sr_dev_inst.type */
enum { enum sr_dev_inst_type {
/** Device instance type for USB devices. */ /** Device instance type for USB devices. */
SR_INST_USB = 10000, SR_INST_USB = 10000,
/** Device instance type for serial port devices. */ /** Device instance type for serial port devices. */
SR_INST_SERIAL, SR_INST_SERIAL,
/** Device instance type for SCPI devices. */
SR_INST_SCPI,
}; };
/** Device instance status. */ /** Device instance status, struct sr_dev_inst.status */
enum { enum sr_dev_inst_status {
/** The device instance was not found. */ /** The device instance was not found. */
SR_ST_NOT_FOUND = 10000, SR_ST_NOT_FOUND = 10000,
/** The device instance was found, but is still booting. */ /** The device instance was found, but is still booting. */
SR_ST_INITIALIZING, SR_ST_INITIALIZING,
/** The device instance is live, but not in use. */ /** The device instance is live, but not in use. */
SR_ST_INACTIVE, SR_ST_INACTIVE,
/** The device instance is actively in use in a session. */ /** The device instance is actively in use in a session. */
SR_ST_ACTIVE, SR_ST_ACTIVE,
/** The device is winding down its session. */ /** The device is winding down its session. */
SR_ST_STOPPING, SR_ST_STOPPING,
}; };
/** Device driver data. See also http://sigrok.org/wiki/Hardware_driver_API . */
struct sr_dev_driver { struct sr_dev_driver {
/* Driver-specific */ /* Driver-specific */
/** Driver name. Lowercase a-z, 0-9 and dashes (-) only. */
char *name; char *name;
/** Long name. Verbose driver name shown to user. */
char *longname; char *longname;
/** API version (currently 1). */
int api_version; int api_version;
/** Called when driver is loaded, e.g. program startup. */
int (*init) (struct sr_context *sr_ctx); int (*init) (struct sr_context *sr_ctx);
/** Called before driver is unloaded.
* Driver must free all resouces held by it. */
int (*cleanup) (void); int (*cleanup) (void);
/** 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) (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) (void);
/** Clear list of devices the driver knows about. */
int (*dev_clear) (void); int (*dev_clear) (void);
/** Query value of a configuration key in driver or given device ins
tance.
* @see sr_config_get().
*/
int (*config_get) (int id, GVariant **data, int (*config_get) (int id, GVariant **data,
const struct sr_dev_inst *sdi); const struct sr_dev_inst *sdi,
const struct sr_channel_group *cg);
/** Set value of a configuration key in driver or a given device ins
tance.
* @see sr_config_set(). */
int (*config_set) (int id, GVariant *data, int (*config_set) (int id, GVariant *data,
const struct sr_dev_inst *sdi); const struct sr_dev_inst *sdi,
const struct sr_channel_group *cg);
/** Channel status change.
* @see sr_dev_channel_enable(), sr_dev_trigger_set(). */
int (*config_channel_set) (const struct sr_dev_inst *sdi,
struct sr_channel *ch, unsigned int changes);
/** Apply configuration settings to the device hardware.
* @see sr_config_commit().*/
int (*config_commit) (const struct sr_dev_inst *sdi);
/** List all possible values for a configuration key in a device ins
tance.
* @see sr_config_list().
*/
int (*config_list) (int info_id, GVariant **data, int (*config_list) (int info_id, GVariant **data,
const struct sr_dev_inst *sdi); const struct sr_dev_inst *sdi,
const struct sr_channel_group *cg);
/* Device-specific */ /* Device-specific */
/** Open device */
int (*dev_open) (struct sr_dev_inst *sdi); int (*dev_open) (struct sr_dev_inst *sdi);
/** Close device */
int (*dev_close) (struct sr_dev_inst *sdi); 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, int (*dev_acquisition_start) (const struct sr_dev_inst *sdi,
void *cb_data); void *cb_data);
/** End data acquisition on the specified device. */
int (*dev_acquisition_stop) (struct sr_dev_inst *sdi, int (*dev_acquisition_stop) (struct sr_dev_inst *sdi,
void *cb_data); void *cb_data);
/* Dynamic */ /* Dynamic */
/** Device driver private data. Initialized by init(). */
void *priv; void *priv;
}; };
struct sr_session { /**
/** List of struct sr_dev pointers. */ * @struct sr_session
GSList *devs; *
/** List of struct datafeed_callback pointers. */ * Opaque data structure representing a libsigrok session. None of the fiel
GSList *datafeed_callbacks; ds
GTimeVal starttime; * of this structure are meant to be accessed directly.
gboolean running; */
struct sr_session;
unsigned int num_sources;
/*
* Both "sources" and "pollfds" are of the same size and contain pai
rs
* of descriptor and callback function. We can not embed the GPollFD
* into the source struct since we want to be able to pass the array
* of all poll descriptors to g_poll().
*/
struct source *sources;
GPollFD *pollfds;
int source_timeout;
/*
* These are our synchronization primitives for stopping the session
in
* an async fashion. We need to make sure the session is stopped fro
m
* within the session thread itself.
*/
GMutex stop_mutex;
gboolean abort_session;
};
#include "proto.h" #include "proto.h"
#include "version.h" #include "version.h"
#ifdef __cplusplus #ifdef __cplusplus
} }
#endif #endif
#endif #endif
 End of changes. 122 change blocks. 
168 lines changed or deleted 271 lines changed or added


 proto.h   proto.h 
skipping to change at line 20 skipping to change at line 20
* *
* This program is distributed in the hope that it will be useful, * This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of * but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details. * GNU General Public License for more details.
* *
* You should have received a copy of the GNU General Public License * You should have received a copy of the GNU General Public License
* along with this program. If not, see <http://www.gnu.org/licenses/>. * along with this program. If not, see <http://www.gnu.org/licenses/>.
*/ */
#ifndef LIBSIGROK_SIGROK_PROTO_H #ifndef LIBSIGROK_PROTO_H
#define LIBSIGROK_SIGROK_PROTO_H #define LIBSIGROK_PROTO_H
/** /**
* @file * @file
* *
* Header file containing API function prototypes. * Header file containing API function prototypes.
*/ */
/*--- backend.c ----------------------------------------------------------- --*/ /*--- backend.c ----------------------------------------------------------- --*/
SR_API int sr_init(struct sr_context **ctx); SR_API int sr_init(struct sr_context **ctx);
SR_API int sr_exit(struct sr_context *ctx); SR_API int sr_exit(struct sr_context *ctx);
/*--- log.c --------------------------------------------------------------- --*/ /*--- log.c --------------------------------------------------------------- --*/
typedef int (*sr_log_callback_t)(void *cb_data, int loglevel, typedef int (*sr_log_callback)(void *cb_data, int loglevel,
const char *format, va_list args); const char *format, va_list args);
SR_API int sr_log_loglevel_set(int loglevel); SR_API int sr_log_loglevel_set(int loglevel);
SR_API int sr_log_loglevel_get(void); SR_API int sr_log_loglevel_get(void);
SR_API int sr_log_callback_set(sr_log_callback_t cb, void *cb_data); SR_API int sr_log_callback_set(sr_log_callback cb, void *cb_data);
SR_API int sr_log_callback_set_default(void); SR_API int sr_log_callback_set_default(void);
SR_API int sr_log_logdomain_set(const char *logdomain); SR_API int sr_log_logdomain_set(const char *logdomain);
SR_API char *sr_log_logdomain_get(void); SR_API char *sr_log_logdomain_get(void);
/*--- device.c ------------------------------------------------------------ --*/ /*--- device.c ------------------------------------------------------------ --*/
SR_API int sr_dev_probe_name_set(const struct sr_dev_inst *sdi, SR_API int sr_dev_channel_name_set(const struct sr_dev_inst *sdi,
int probenum, const char *name); int channelnum, const char *name);
SR_API int sr_dev_probe_enable(const struct sr_dev_inst *sdi, int probenum, SR_API int sr_dev_channel_enable(const struct sr_dev_inst *sdi, int channel
num,
gboolean state); gboolean state);
SR_API int sr_dev_trigger_set(const struct sr_dev_inst *sdi, int probenum, SR_API int sr_dev_trigger_set(const struct sr_dev_inst *sdi, int channelnum ,
const char *trigger); const char *trigger);
SR_API gboolean sr_dev_has_option(const struct sr_dev_inst *sdi, int key); SR_API gboolean sr_dev_has_option(const struct sr_dev_inst *sdi, int key);
SR_API GSList *sr_dev_list(const struct sr_dev_driver *driver); SR_API GSList *sr_dev_list(const struct sr_dev_driver *driver);
SR_API int sr_dev_clear(const struct sr_dev_driver *driver); SR_API int sr_dev_clear(const struct sr_dev_driver *driver);
SR_API int sr_dev_open(struct sr_dev_inst *sdi); SR_API int sr_dev_open(struct sr_dev_inst *sdi);
SR_API int sr_dev_close(struct sr_dev_inst *sdi); SR_API int sr_dev_close(struct sr_dev_inst *sdi);
/*--- filter.c ------------------------------------------------------------
--*/
SR_API int sr_filter_probes(unsigned int in_unitsize, unsigned int out_unit
size,
const GArray *probe_array, const uint8_t *data_i
n,
uint64_t length_in, uint8_t **data_out,
uint64_t *length_out);
/*--- hwdriver.c ---------------------------------------------------------- --*/ /*--- hwdriver.c ---------------------------------------------------------- --*/
SR_API struct sr_dev_driver **sr_driver_list(void); SR_API struct sr_dev_driver **sr_driver_list(void);
SR_API int sr_driver_init(struct sr_context *ctx, SR_API int sr_driver_init(struct sr_context *ctx,
struct sr_dev_driver *driver); struct sr_dev_driver *driver);
SR_API GSList *sr_driver_scan(struct sr_dev_driver *driver, GSList *options ); SR_API GSList *sr_driver_scan(struct sr_dev_driver *driver, GSList *options );
SR_API int sr_config_get(const struct sr_dev_driver *driver, int key, SR_API int sr_config_get(const struct sr_dev_driver *driver,
GVariant **data, const struct sr_dev_inst *sdi); const struct sr_dev_inst *sdi,
SR_API int sr_config_set(const struct sr_dev_inst *sdi, int key, const struct sr_channel_group *cg,
GVariant *data); int key, GVariant **data);
SR_API int sr_config_list(const struct sr_dev_driver *driver, int key, SR_API int sr_config_set(const struct sr_dev_inst *sdi,
GVariant **data, const struct sr_dev_inst *sdi); const struct sr_channel_group *cg,
int key, GVariant *data);
SR_API int sr_config_commit(const struct sr_dev_inst *sdi);
SR_API int sr_config_list(const struct sr_dev_driver *driver,
const struct sr_dev_inst *sdi,
const struct sr_channel_group *cg,
int key, GVariant **data);
SR_API const struct sr_config_info *sr_config_info_get(int key); SR_API const struct sr_config_info *sr_config_info_get(int key);
SR_API const struct sr_config_info *sr_config_info_name_get(const char *opt name); SR_API const struct sr_config_info *sr_config_info_name_get(const char *opt name);
/*--- session.c ----------------------------------------------------------- --*/ /*--- session.c ----------------------------------------------------------- --*/
typedef void (*sr_datafeed_callback_t)(const struct sr_dev_inst *sdi, typedef void (*sr_datafeed_callback)(const struct sr_dev_inst *sdi,
const struct sr_datafeed_packet *packet, void *cb_data); const struct sr_datafeed_packet *packet, void *cb_data);
/* Session setup */ /* Session setup */
SR_API int sr_session_load(const char *filename); SR_API int sr_session_load(const char *filename);
SR_API struct sr_session *sr_session_new(void); SR_API struct sr_session *sr_session_new(void);
SR_API int sr_session_destroy(void); SR_API int sr_session_destroy(void);
SR_API int sr_session_dev_remove_all(void); SR_API int sr_session_dev_remove_all(void);
SR_API int sr_session_dev_add(const struct sr_dev_inst *sdi); SR_API int sr_session_dev_add(const struct sr_dev_inst *sdi);
SR_API int sr_session_dev_list(GSList **devlist);
/* Datafeed setup */ /* Datafeed setup */
SR_API int sr_session_datafeed_callback_remove_all(void); SR_API int sr_session_datafeed_callback_remove_all(void);
SR_API int sr_session_datafeed_callback_add(sr_datafeed_callback_t cb, SR_API int sr_session_datafeed_callback_add(sr_datafeed_callback cb,
void *cb_data); void *cb_data);
/* Session control */ /* Session control */
SR_API int sr_session_start(void); SR_API int sr_session_start(void);
SR_API int sr_session_run(void); SR_API int sr_session_run(void);
SR_API int sr_session_stop(void); SR_API int sr_session_stop(void);
SR_API int sr_session_save(const char *filename, const struct sr_dev_inst * sdi, SR_API int sr_session_save(const char *filename, const struct sr_dev_inst * sdi,
unsigned char *buf, int unitsize, int units); unsigned char *buf, int unitsize, int units);
SR_API int sr_session_save_init(const char *filename, uint64_t samplerate,
char **channels);
SR_API int sr_session_append(const char *filename, unsigned char *buf,
int unitsize, int units);
SR_API int sr_session_source_add(int fd, int events, int timeout, SR_API int sr_session_source_add(int fd, int events, int timeout,
sr_receive_data_callback_t cb, void *cb_data); sr_receive_data_callback cb, void *cb_data);
SR_API int sr_session_source_add_pollfd(GPollFD *pollfd, int timeout, SR_API int sr_session_source_add_pollfd(GPollFD *pollfd, int timeout,
sr_receive_data_callback_t cb, void *cb_data); sr_receive_data_callback cb, void *cb_data);
SR_API int sr_session_source_add_channel(GIOChannel *channel, int events, SR_API int sr_session_source_add_channel(GIOChannel *channel, int events,
int timeout, sr_receive_data_callback_t cb, void *cb_data); int timeout, sr_receive_data_callback cb, void *cb_data);
SR_API int sr_session_source_remove(int fd); SR_API int sr_session_source_remove(int fd);
SR_API int sr_session_source_remove_pollfd(GPollFD *pollfd); SR_API int sr_session_source_remove_pollfd(GPollFD *pollfd);
SR_API int sr_session_source_remove_channel(GIOChannel *channel); SR_API int sr_session_source_remove_channel(GIOChannel *channel);
/*--- input/input.c ------------------------------------------------------- --*/ /*--- input/input.c ------------------------------------------------------- --*/
SR_API struct sr_input_format **sr_input_list(void); SR_API struct sr_input_format **sr_input_list(void);
/*--- output/output.c ----------------------------------------------------- --*/ /*--- output/output.c ----------------------------------------------------- --*/
SR_API struct sr_output_format **sr_output_list(void); SR_API struct sr_output_format **sr_output_list(void);
SR_API struct sr_output *sr_output_new(struct sr_output_format *of,
GHashTable *params, const struct sr_dev_inst *sdi);
SR_API int sr_output_send(struct sr_output *o,
const struct sr_datafeed_packet *packet, GString **out);
SR_API int sr_output_free(struct sr_output *o);
/*--- strutil.c ----------------------------------------------------------- --*/ /*--- strutil.c ----------------------------------------------------------- --*/
SR_API char *sr_si_string_u64(uint64_t x, const char *unit); SR_API char *sr_si_string_u64(uint64_t x, const char *unit);
SR_API char *sr_samplerate_string(uint64_t samplerate); SR_API char *sr_samplerate_string(uint64_t samplerate);
SR_API char *sr_period_string(uint64_t frequency); SR_API char *sr_period_string(uint64_t frequency);
SR_API char *sr_voltage_string(uint64_t v_p, uint64_t v_q); SR_API char *sr_voltage_string(uint64_t v_p, uint64_t v_q);
SR_API char **sr_parse_triggerstring(const struct sr_dev_inst *sdi, SR_API char **sr_parse_triggerstring(const struct sr_dev_inst *sdi,
const char *triggerstring); const char *triggerstring);
SR_API int sr_parse_sizestring(const char *sizestring, uint64_t *size); SR_API int sr_parse_sizestring(const char *sizestring, uint64_t *size);
 End of changes. 15 change blocks. 
30 lines changed or deleted 37 lines changed or added


 version.h   version.h 
skipping to change at line 43 skipping to change at line 43
*/ */
/* /*
* Package version macros (can be used for conditional compilation). * Package version macros (can be used for conditional compilation).
*/ */
/** The libsigrok package 'major' version number. */ /** The libsigrok package 'major' version number. */
#define SR_PACKAGE_VERSION_MAJOR 0 #define SR_PACKAGE_VERSION_MAJOR 0
/** The libsigrok package 'minor' version number. */ /** The libsigrok package 'minor' version number. */
#define SR_PACKAGE_VERSION_MINOR 2 #define SR_PACKAGE_VERSION_MINOR 3
/** The libsigrok package 'micro' version number. */ /** The libsigrok package 'micro' version number. */
#define SR_PACKAGE_VERSION_MICRO 2 #define SR_PACKAGE_VERSION_MICRO 0
/** The libsigrok package version ("major.minor.micro") as string. */ /** The libsigrok package version ("major.minor.micro") as string. */
#define SR_PACKAGE_VERSION_STRING "0.2.2" #define SR_PACKAGE_VERSION_STRING "0.3.0"
/* /*
* Library/libtool version macros (can be used for conditional compilation) . * Library/libtool version macros (can be used for conditional compilation) .
*/ */
/** The libsigrok libtool 'current' version number. */ /** The libsigrok libtool 'current' version number. */
#define SR_LIB_VERSION_CURRENT 1 #define SR_LIB_VERSION_CURRENT 2
/** The libsigrok libtool 'revision' version number. */ /** The libsigrok libtool 'revision' version number. */
#define SR_LIB_VERSION_REVISION 2 #define SR_LIB_VERSION_REVISION 0
/** The libsigrok libtool 'age' version number. */ /** The libsigrok libtool 'age' version number. */
#define SR_LIB_VERSION_AGE 0 #define SR_LIB_VERSION_AGE 0
/** The libsigrok libtool version ("current:revision:age") as string. */ /** The libsigrok libtool version ("current:revision:age") as string. */
#define SR_LIB_VERSION_STRING "1:2:0" #define SR_LIB_VERSION_STRING "2:0:0"
/** @} */ /** @} */
#endif #endif
 End of changes. 6 change blocks. 
6 lines changed or deleted 6 lines changed or added

This html diff was produced by rfcdiff 1.41. The latest version is available from http://tools.ietf.org/tools/rfcdiff/