X-Git-Url: https://sigrok.org/gitweb/?p=libsigrok.git;a=blobdiff_plain;f=hardware%2Frigol-ds%2Fprotocol.h;h=0117628ca04e72e6451d4b5680c670889db19497;hp=f940da80d49a19906f801d905e2c4fd4f0fa44da;hb=43cd4637285833706f8a404ca027bcf0ee75b9ae;hpb=38354d9d9eb7d63ee10ee42636b0ce0075536cf4 diff --git a/hardware/rigol-ds/protocol.h b/hardware/rigol-ds/protocol.h index f940da80..0117628c 100644 --- a/hardware/rigol-ds/protocol.h +++ b/hardware/rigol-ds/protocol.h @@ -28,39 +28,23 @@ #define LOG_PREFIX "rigol-ds" -/* Analog waveform block sizes */ -#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 -#define DS2000_ANALOG_MEM_WAVEFORM_SIZE_1C 14000 -#define DS2000_ANALOG_MEM_WAVEFORM_SIZE_2C 7000 - -/* Digital waveform block size */ -#define DS1000_DIGITAL_WAVEFORM_SIZE 1200 -#define VS5000_DIGITAL_WAVEFORM_SIZE 4096 - /* Size of acquisition buffers */ #define ACQ_BUFFER_SIZE 32768 -#define MAX_ANALOG_PROBES 4 -#define MAX_DIGITAL_PROBES 16 - -enum rigol_ds_series { - RIGOL_VS5000, - RIGOL_DS1000, - RIGOL_DS1000Z, - RIGOL_DS2000, - RIGOL_DS4000, - RIGOL_DS6000, - AGILENT_DSO1000, +#define MAX_ANALOG_CHANNELS 4 +#define MAX_DIGITAL_CHANNELS 16 + +enum protocol_version { + PROTOCOL_V1, /* VS5000 */ + PROTOCOL_V2, /* DS1000 */ + PROTOCOL_V3, /* DS2000, DSO1000 */ }; -enum rigol_protocol_flavor { - /* Used by DS1000 and VS5000 series */ - PROTOCOL_LEGACY, - /* Used by DS2000, DS4000, DS6000, ... series */ - PROTOCOL_IEEE488_2, +enum data_format { + /* Used by DS1000 versions up to 2.02, and VS5000 series */ + FORMAT_RAW, + /* Used by DS1000 versions from 2.04 onwards and all later series */ + FORMAT_IEEE488_2, }; enum data_source { @@ -69,17 +53,29 @@ enum data_source { DATA_SOURCE_SEGMENTED, }; -struct rigol_ds_model { - char *vendor; - char *name; - enum rigol_ds_series series; - enum rigol_protocol_flavor protocol; - uint64_t min_timebase[2]; +struct rigol_ds_vendor { + const char *name; + const char *full_name; +}; + +struct rigol_ds_series { + const struct rigol_ds_vendor *vendor; + const char *name; + enum protocol_version protocol; + enum data_format format; uint64_t max_timebase[2]; uint64_t min_vdiv[2]; + int num_horizontal_divs; + int live_samples; + int buffer_samples; +}; + +struct rigol_ds_model { + const struct rigol_ds_series *series; + const char *name; + uint64_t min_timebase[2]; unsigned int analog_channels; bool has_digital; - int num_horizontal_divs; }; enum wait_events { @@ -93,7 +89,7 @@ enum wait_events { struct dev_context { /* Device model */ const struct rigol_ds_model *model; - enum rigol_protocol_flavor protocol; + enum data_format format; /* Device properties */ const uint64_t (*timebases)[2]; @@ -101,13 +97,13 @@ struct dev_context { const uint64_t (*vdivs)[2]; uint64_t num_vdivs; - /* Probe groups */ - struct sr_probe_group analog_groups[MAX_ANALOG_PROBES]; - struct sr_probe_group digital_group; + /* Channel groups */ + struct sr_channel_group analog_groups[MAX_ANALOG_CHANNELS]; + struct sr_channel_group digital_group; /* Acquisition settings */ - GSList *enabled_analog_probes; - GSList *enabled_digital_probes; + GSList *enabled_analog_channels; + GSList *enabled_digital_channels; uint64_t limit_frames; void *cb_data; enum data_source data_source; @@ -115,17 +111,17 @@ struct dev_context { uint64_t digital_frame_size; /* Device settings */ - gboolean analog_channels[MAX_ANALOG_PROBES]; - gboolean digital_channels[MAX_DIGITAL_PROBES]; + gboolean analog_channels[MAX_ANALOG_CHANNELS]; + gboolean digital_channels[MAX_DIGITAL_CHANNELS]; gboolean la_enabled; float timebase; - float vdiv[MAX_ANALOG_PROBES]; - int vert_reference[MAX_ANALOG_PROBES]; - float vert_offset[MAX_ANALOG_PROBES]; + float vdiv[MAX_ANALOG_CHANNELS]; + int vert_reference[MAX_ANALOG_CHANNELS]; + float vert_offset[MAX_ANALOG_CHANNELS]; char *trigger_source; float horiz_triggerpos; char *trigger_slope; - char *coupling[MAX_ANALOG_PROBES]; + char *coupling[MAX_ANALOG_CHANNELS]; /* Operational state */ @@ -135,6 +131,8 @@ struct dev_context { GSList *channel_entry; /* Number of bytes received for current channel. */ uint64_t num_channel_bytes; + /* Number of bytes of block header read */ + uint64_t num_header_bytes; /* Number of bytes in current data block, if 0 block header expected */ uint64_t num_block_bytes; /* Number of data block bytes already read */