X-Git-Url: http://sigrok.org/gitweb/?a=blobdiff_plain;f=hardware%2Frigol-ds%2Fprotocol.h;h=e19ac490358d8151baa0d64c25c6e538bd6afa0e;hb=904fd29b7255958f499719f4b7f8f653596e33c6;hp=853fbe6e61e19a33a03f421664065cdb91b84012;hpb=962af1a379f2c1715b22f0779ed3ebc6f0d8c2ec;p=libsigrok.git diff --git a/hardware/rigol-ds/protocol.h b/hardware/rigol-ds/protocol.h index 853fbe6e..e19ac490 100644 --- a/hardware/rigol-ds/protocol.h +++ b/hardware/rigol-ds/protocol.h @@ -26,18 +26,12 @@ #include "libsigrok.h" #include "libsigrok-internal.h" -/* Message logging helpers with subsystem-specific prefix string. */ -#define LOG_PREFIX "rigol-ds: " -#define sr_log(l, s, args...) sr_log(l, LOG_PREFIX s, ## args) -#define sr_spew(s, args...) sr_spew(LOG_PREFIX s, ## args) -#define sr_dbg(s, args...) sr_dbg(LOG_PREFIX s, ## args) -#define sr_info(s, args...) sr_info(LOG_PREFIX s, ## args) -#define sr_warn(s, args...) sr_warn(LOG_PREFIX s, ## args) -#define sr_err(s, args...) sr_err(LOG_PREFIX s, ## args) +#define LOG_PREFIX "rigol-ds" #define DS1000_ANALOG_LIVE_WAVEFORM_SIZE 600 #define DS2000_ANALOG_LIVE_WAVEFORM_SIZE 1400 #define VS5000_ANALOG_LIVE_WAVEFORM_SIZE 2048 +#define DSO1000_ANALOG_LIVE_WAVEFORM_SIZE 600 /* Needs to be made configurable later */ #define DS2000_ANALOG_MEM_WAVEFORM_SIZE_1C 14000 #define DS2000_ANALOG_MEM_WAVEFORM_SIZE_2C 7000 @@ -45,6 +39,9 @@ /* Size of acquisition buffers */ #define ACQ_BUFFER_SIZE 32768 +#define MAX_ANALOG_PROBES 4 +#define MAX_DIGITAL_PROBES 16 + enum rigol_ds_series { RIGOL_DS1000, RIGOL_DS1000Z, @@ -52,6 +49,7 @@ enum rigol_ds_series { RIGOL_DS4000, RIGOL_DS6000, RIGOL_VS5000, + AGILENT_DSO1000, }; enum rigol_protocol_flavor { @@ -68,12 +66,14 @@ enum data_source { }; struct rigol_ds_model { + char *vendor; char *name; enum rigol_ds_series series; enum rigol_protocol_flavor protocol; uint64_t min_timebase[2]; uint64_t max_timebase[2]; uint64_t min_vdiv[2]; + unsigned int analog_channels; bool has_digital; int num_horizontal_divs; }; @@ -97,7 +97,7 @@ struct dev_context { uint64_t num_vdivs; /* Probe groups */ - struct sr_probe_group analog_groups[2]; + struct sr_probe_group analog_groups[MAX_ANALOG_PROBES]; struct sr_probe_group digital_group; /* Acquisition settings */ @@ -109,22 +109,26 @@ struct dev_context { uint64_t analog_frame_size; /* Device settings */ - gboolean analog_channels[2]; - gboolean digital_channels[16]; + gboolean analog_channels[MAX_ANALOG_PROBES]; + gboolean digital_channels[MAX_DIGITAL_PROBES]; + gboolean la_enabled; float timebase; - float vdiv[2]; - int vert_reference[2]; - float vert_offset[2]; + float vdiv[MAX_ANALOG_PROBES]; + int vert_reference[MAX_ANALOG_PROBES]; + float vert_offset[MAX_ANALOG_PROBES]; char *trigger_source; float horiz_triggerpos; char *trigger_slope; - char *coupling[2]; + char *coupling[MAX_ANALOG_PROBES]; /* Operational state */ + + /* Number of frames received in total. */ uint64_t num_frames; - /* FIXME: misnomer, actually this is number of frame samples? */ - uint64_t num_frame_bytes; - struct sr_probe *channel_frame; + /* GSList entry for the current channel. */ + GSList *channel_entry; + /* Number of samples received in current frame. */ + uint64_t num_frame_samples; /* Number of bytes in current data block, if 0 block header expected */ uint64_t num_block_bytes; /* Number of data block bytes already read */ @@ -139,6 +143,7 @@ struct dev_context { }; SR_PRIV int rigol_ds_capture_start(const struct sr_dev_inst *sdi); +SR_PRIV int rigol_ds_channel_start(const struct sr_dev_inst *sdi); SR_PRIV int rigol_ds_receive(int fd, int revents, void *cb_data); SR_PRIV int rigol_ds_get_dev_cfg(const struct sr_dev_inst *sdi);