SR_MQ_TEMPERATURE,
SR_MQ_FREQUENCY,
SR_MQ_DUTY_CYCLE,
+ SR_MQ_CONTINUITY,
};
/* sr_datafeed_analog.unit values */
SR_UNIT_AMPERE,
SR_UNIT_OHM,
SR_UNIT_FARAD,
- SR_UNIT_CELSIUS,
SR_UNIT_KELVIN,
+ SR_UNIT_CELSIUS,
+ SR_UNIT_FAHRENHEIT,
SR_UNIT_HERTZ,
SR_UNIT_PERCENTAGE,
+ SR_UNIT_BOOLEAN,
+};
+
+/** sr_datafeed_analog.flags values */
+enum {
+ /** Voltage measurement is alternating current. */
+ SR_MQFLAG_AC = 0x01,
+ /** Voltage measurement is direct current. */
+ SR_MQFLAG_DC = 0x02,
+ /** This is a true RMS measurement. */
+ SR_MQFLAG_RMS = 0x04,
+ /** Value is voltage drop across a diode, or NAN. */
+ SR_MQFLAG_DIODE = 0x08,
+ /** Device is in "hold" mode, i.e. repeating the last measurement. */
+ SR_MQFLAG_HOLD = 0x10,
+ /** Device is in "max" mode, only updating when a new max value is found. */
+ SR_MQFLAG_MAX = 0x20,
+ /** Device is in "min" mode, only updating when a new min value is found. */
+ SR_MQFLAG_MIN = 0x40,
+ /** Device is in autoranging mode. */
+ SR_MQFLAG_AUTORANGE = 0x80,
+ /** Device is in relative mode. */
+ SR_MQFLAG_RELATIVE = 0x100,
};
struct sr_datafeed_packet {
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. */
+ /** Measured quantity (e.g. voltage, current, temperature) */
+ int mq;
+ /** Unit in which the MQ is measured. */
+ int unit;
+ /** Bitmap with extra information about the MQ. */
+ uint64_t mqflags;
float *data;
};
uint64_t *length_out);
int (*event) (struct sr_output *o, int event_type, uint8_t **data_out,
uint64_t *length_out);
+ GString *(*recv) (struct sr_output *o, const struct sr_dev_inst *sdi,
+ struct sr_datafeed_packet *packet);
+ int (*cleanup) (struct sr_output *o);
};
struct sr_datastore {
enum {
SR_PROBE_LOGIC,
+ SR_PROBE_ANALOG,
};
struct sr_probe {
/** The device supports setting/changing its samplerate. */
SR_HWCAP_SAMPLERATE,
- /* TODO: Better description? Rename to PROBE_AND_TRIGGER_CONFIG? */
- /** The device supports setting a probe mask. */
- SR_HWCAP_PROBECONFIG,
-
/** The device supports setting a pre/post-trigger capture ratio. */
SR_HWCAP_CAPTURE_RATIO,
/* Device info IDs */
enum {
- /* struct sr_dev_inst for this specific device */
- /* TODO: obsolete */
- SR_DI_INST,
/* A list of options supported by the driver. */
SR_DI_HWOPTS,
/* A list of capabilities supported by the device. */
int (*init) (void);
int (*cleanup) (void);
GSList *(*scan) (GSList *options);
+ GSList *(*dev_list) (void);
+ int (*dev_clear) (void);
/* Device-specific */
- int (*dev_open) (int dev_index);
- int (*dev_close) (int dev_index);
- /* TODO remove this */
- const void *(*dev_info_get) (int dev_index, int dev_info_id);
- int (*info_get) (int dev_info_id, const void **data,
+ int (*dev_open) (struct sr_dev_inst *sdi);
+ int (*dev_close) (struct sr_dev_inst *sdi);
+ int (*info_get) (int info_id, const void **data,
const struct sr_dev_inst *sdi);
- int (*dev_status_get) (int dev_index);
int (*dev_config_set) (const struct sr_dev_inst *sdi, 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);
+ int (*dev_acquisition_start) (const struct sr_dev_inst *sdi,
+ void *cb_data);
+ int (*dev_acquisition_stop) (const struct sr_dev_inst *sdi,
+ void *cb_data);
/* Dynamic */
- GSList *instances;
+ void *priv;
};
struct sr_session {
/* list of sr_receive_data_callback_t */
GSList *datafeed_callbacks;
GTimeVal starttime;
- gboolean running;
unsigned int num_sources;