]> sigrok.org Git - libsigrok.git/blobdiff - hardware/rigol-ds1xx2/protocol.h
Don't accept over 64 probes.
[libsigrok.git] / hardware / rigol-ds1xx2 / protocol.h
index f7020e0d1d7743bb487911e436cc8c50a0c25a62..ff345fd23059f532fb17b596149209cfaec1a858 100644 (file)
@@ -2,6 +2,7 @@
  * This file is part of the libsigrok project.
  *
  * Copyright (C) 2012 Martin Ling <martin-git@earth.li>
+ * Copyright (C) 2013 Bert Vermeulen <bert@biot.com>
  *
  * This program is free software: you can redistribute it and/or modify
  * it under the terms of the GNU General Public License as published by
 #include "libsigrok.h"
 #include "libsigrok-internal.h"
 
-/* Message logging helpers with driver-specific prefix string. */
-#define DRIVER_LOG_DOMAIN "rigol-ds1xx2: "
-#define sr_log(l, s, args...) sr_log(l, DRIVER_LOG_DOMAIN s, ## args)
-#define sr_spew(s, args...) sr_spew(DRIVER_LOG_DOMAIN s, ## args)
-#define sr_dbg(s, args...) sr_dbg(DRIVER_LOG_DOMAIN s, ## args)
-#define sr_info(s, args...) sr_info(DRIVER_LOG_DOMAIN s, ## args)
-#define sr_warn(s, args...) sr_warn(DRIVER_LOG_DOMAIN s, ## args)
-#define sr_err(s, args...) sr_err(DRIVER_LOG_DOMAIN s, ## args)
+/* Message logging helpers with subsystem-specific prefix string. */
+#define LOG_PREFIX "rigol-ds1xx2: "
+#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 WAVEFORM_SIZE 600
+#define ANALOG_WAVEFORM_SIZE 600
+#define DIGITAL_WAVEFORM_SIZE 1210
 
 /** Private, per-device-instance driver context. */
 struct dev_context {
-       /** The current frame limit */
-       uint64_t limit_frames;
-
-       /** The current sampling limit (in number of samples). */
-       uint64_t limit_samples;
+       /* Device features */
+       gboolean has_digital;
 
-       /** The current sampling limit (in ms). */
-       uint64_t limit_msec;
+       /* Probe groups */
+       struct sr_probe_group analog_groups[2];
+       struct sr_probe_group digital_group;
 
-       /** Opaque pointer passed in by the frontend. */
+       /* Acquisition settings */
+       GSList *enabled_analog_probes;
+       GSList *enabled_digital_probes;
+       uint64_t limit_frames;
        void *cb_data;
 
-       /** The current number of already received frames. */
+       /* Device settings */
+       gboolean analog_channels[2];
+       gboolean digital_channels[16];
+       float timebase;
+       float vdiv[2];
+       float vert_offset[2];
+       char *trigger_source;
+       float horiz_triggerpos;
+       char *trigger_slope;
+       char *coupling[2];
+
+       /* Operational state */
        uint64_t num_frames;
-
-       /** The current number of already received samples. */
-       uint64_t num_samples;
-
-       /** Current scale setting. */
-       float scale;
-
-       /** Current offset setting. */
-       float offset;
-
-       /** Path to USBTMC character device file. */
-       char *device;
-
-       /** USBTMC character device file descriptor. */
-       int fd;
+       uint64_t num_frame_bytes;
+       struct sr_probe *channel_frame;
 };
 
-SR_PRIV int rigol_ds1xx2_receive_data(int fd, int revents, void *cb_data);
-
-SR_PRIV int rigol_ds1xx2_send_data(int fd, const char *format, ...);
+SR_PRIV int rigol_ds1xx2_receive(int fd, int revents, void *cb_data);
+SR_PRIV int rigol_ds1xx2_send(const struct sr_dev_inst *sdi, const char *format, ...);
+SR_PRIV int rigol_ds1xx2_get_dev_cfg(const struct sr_dev_inst *sdi);
 
 #endif