Avoid future ABI breakage by hardcoding enum values.

Whenever we added a field to the enums in libsigrok.h, we were running
the risk of breaking ABI compatibility. Any reordering of existing values
or the addition of entries other than at the bottom of the list would
cause an ABI breakage.

By hardcoding the values we ensure that any added field will have an
unused value, and will not take a value previously used by a different
flag. By doing this, we avoid confusing frontends compiled with an
earlier API.

We use 10000 as the first entry of each enum, and each "category" gets
an explicit number (10000, 20000, 30000, and so on).

Also avoid making the first value of an enum zero. A value of zero is
used as terminator item in some lists.

Remove explicit "DUMMY" (terminator) enum entries, they're not needed.

Signed-off-by: Alexandru Gagniuc <mr.nuke.me@gmail.com>
This commit is contained in:
Alexandru Gagniuc 2012-11-02 11:56:56 -05:00 committed by Uwe Hermann
parent 83e3c368c6
commit 24d04d1e3d
1 changed files with 13 additions and 22 deletions

View File

@ -127,7 +127,7 @@ typedef int (*sr_receive_data_callback_t)(int fd, int revents, void *cb_data);
/** Data types used by hardware drivers for dev_config_set(). */ /** Data types used by hardware drivers for dev_config_set(). */
enum { enum {
SR_T_UINT64, SR_T_UINT64 = 10000,
SR_T_CHAR, SR_T_CHAR,
SR_T_BOOL, SR_T_BOOL,
SR_T_FLOAT, SR_T_FLOAT,
@ -146,7 +146,7 @@ struct sr_rational {
/** Value for sr_datafeed_packet.type. */ /** Value for sr_datafeed_packet.type. */
enum { enum {
SR_DF_HEADER, SR_DF_HEADER = 10000,
SR_DF_END, SR_DF_END,
SR_DF_TRIGGER, SR_DF_TRIGGER,
SR_DF_LOGIC, SR_DF_LOGIC,
@ -159,7 +159,7 @@ enum {
/** Values for sr_datafeed_analog.mq. */ /** Values for sr_datafeed_analog.mq. */
enum { enum {
SR_MQ_VOLTAGE, SR_MQ_VOLTAGE = 10000,
SR_MQ_CURRENT, SR_MQ_CURRENT,
SR_MQ_RESISTANCE, SR_MQ_RESISTANCE,
SR_MQ_CAPACITANCE, SR_MQ_CAPACITANCE,
@ -180,7 +180,7 @@ enum {
/** Values for sr_datafeed_analog.unit. */ /** Values for sr_datafeed_analog.unit. */
enum { enum {
SR_UNIT_VOLT, SR_UNIT_VOLT = 10000,
SR_UNIT_AMPERE, SR_UNIT_AMPERE,
SR_UNIT_OHM, SR_UNIT_OHM,
SR_UNIT_FARAD, SR_UNIT_FARAD,
@ -357,7 +357,7 @@ struct sr_dev {
}; };
enum { enum {
SR_PROBE_LOGIC, SR_PROBE_LOGIC = 10000,
SR_PROBE_ANALOG, SR_PROBE_ANALOG,
}; };
@ -376,14 +376,11 @@ struct sr_hwopt {
/** Hardware driver options. */ /** Hardware driver options. */
enum { enum {
/** Used to terminate lists. */
SR_HWOPT_DUMMY = 0, /* Must be 0! */
/** /**
* Some drivers cannot detect the exact model they're talking to * Some drivers cannot detect the exact model they're talking to
* (may be phased out). * (may be phased out).
*/ */
SR_HWOPT_MODEL, SR_HWOPT_MODEL = 10000,
/** /**
* Specification on how to connect to a device. * Specification on how to connect to a device.
@ -412,13 +409,10 @@ enum {
/** Hardware device capabilities. */ /** Hardware device capabilities. */
enum { enum {
/** Used to terminate lists. */
SR_HWCAP_DUMMY = 0, /* Must be 0! */
/*--- Device classes ------------------------------------------------*/ /*--- Device classes ------------------------------------------------*/
/** The device can act as logic analyzer. */ /** The device can act as logic analyzer. */
SR_HWCAP_LOGIC_ANALYZER, SR_HWCAP_LOGIC_ANALYZER = 10000,
/** The device can act as an oscilloscope. */ /** The device can act as an oscilloscope. */
SR_HWCAP_OSCILLOSCOPE, SR_HWCAP_OSCILLOSCOPE,
@ -435,7 +429,7 @@ enum {
/*--- Device configuration ------------------------------------------*/ /*--- Device configuration ------------------------------------------*/
/** The device supports setting/changing its samplerate. */ /** The device supports setting/changing its samplerate. */
SR_HWCAP_SAMPLERATE, SR_HWCAP_SAMPLERATE = 20000,
/** The device supports setting a pre/post-trigger capture ratio. */ /** The device supports setting a pre/post-trigger capture ratio. */
SR_HWCAP_CAPTURE_RATIO, SR_HWCAP_CAPTURE_RATIO,
@ -471,11 +465,10 @@ enum {
/** Coupling. */ /** Coupling. */
SR_HWCAP_COUPLING, SR_HWCAP_COUPLING,
/*--- Special stuff -------------------------------------------------*/ /*--- Special stuff -------------------------------------------------*/
/** Session filename. */ /** Session filename. */
SR_HWCAP_SESSIONFILE, SR_HWCAP_SESSIONFILE = 30000,
/* TODO: Better description. */ /* TODO: Better description. */
/** The device supports specifying a capturefile to inject. */ /** The device supports specifying a capturefile to inject. */
@ -489,14 +482,13 @@ enum {
/** The device supports setting the number of probes. */ /** The device supports setting the number of probes. */
SR_HWCAP_CAPTURE_NUM_PROBES, SR_HWCAP_CAPTURE_NUM_PROBES,
/*--- 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_HWCAP_LIMIT_MSEC, SR_HWCAP_LIMIT_MSEC = 40000,
/** /**
* The device supports setting a sample number limit (how many * The device supports setting a sample number limit (how many
@ -516,7 +508,6 @@ enum {
* samples continuously, until explicitly stopped by a certain command. * samples continuously, until explicitly stopped by a certain command.
*/ */
SR_HWCAP_CONTINUOUS, SR_HWCAP_CONTINUOUS,
}; };
struct sr_hwcap_option { struct sr_hwcap_option {
@ -541,7 +532,7 @@ struct sr_dev_inst {
/** Types of device instances (sr_dev_inst). */ /** Types of device instances (sr_dev_inst). */
enum { enum {
/** Device instance type for USB devices. */ /** Device instance type for USB devices. */
SR_INST_USB, SR_INST_USB = 10000,
/** Device instance type for serial port devices. */ /** Device instance type for serial port devices. */
SR_INST_SERIAL, SR_INST_SERIAL,
}; };
@ -549,7 +540,7 @@ enum {
/** Device instance status. */ /** Device instance status. */
enum { enum {
/** The device instance was not found. */ /** The device instance was not found. */
SR_ST_NOT_FOUND, 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. */
@ -566,7 +557,7 @@ enum {
/** Device info IDs. */ /** Device info IDs. */
enum { enum {
/** A list of options supported by the driver. */ /** A list of options supported by the driver. */
SR_DI_HWOPTS, SR_DI_HWOPTS = 10000,
/** A list of capabilities supported by the device. */ /** A list of capabilities supported by the device. */
SR_DI_HWCAPS, SR_DI_HWCAPS,
/** The number of probes connected to this device. */ /** The number of probes connected to this device. */