]> sigrok.org Git - libsigrok.git/blobdiff - src/hardware/hameg-hmo/protocol.h
hameg-hmo: Get SCPI_CMD_GET_HORIZONTAL_DIV at runtime.
[libsigrok.git] / src / hardware / hameg-hmo / protocol.h
index 932e3ec3ee1c62d85d5d6633979db270ca3fcee4..975ea7e342e311b3c3234e03f29323d5bc997b1a 100644 (file)
 #include <glib.h>
 #include <stdint.h>
 #include <string.h>
-#include "libsigrok.h"
+#include <libsigrok/libsigrok.h>
 #include "libsigrok-internal.h"
 
 #define LOG_PREFIX "hameg-hmo"
 
-#define MAX_INSTRUMENT_VERSIONS 10
-#define MAX_COMMAND_SIZE 31
+#define DIGITAL_CHANNELS_PER_POD       8
+
+#define MAX_INSTRUMENT_VERSIONS                10
+#define MAX_COMMAND_SIZE               128
+#define MAX_ANALOG_CHANNEL_COUNT       4
+#define MAX_DIGITAL_CHANNEL_COUNT      16
+#define MAX_DIGITAL_GROUP_COUNT                2
 
 struct scope_config {
        const char *name[MAX_INSTRUMENT_VERSIONS];
        const uint8_t analog_channels;
        const uint8_t digital_channels;
-       const uint8_t digital_pods;
+       uint8_t digital_pods;
 
        const char *(*analog_names)[];
        const char *(*digital_names)[];
 
-       const int32_t (*hw_caps)[];
-       const uint8_t num_hwcaps;
+       const uint32_t (*devopts)[];
+       const uint8_t num_devopts;
+
+       const uint32_t (*devopts_cg_analog)[];
+       const uint8_t num_devopts_cg_analog;
 
-       const int32_t (*analog_hwcaps)[];
-       const uint8_t num_analog_hwcaps;
+       const uint32_t (*devopts_cg_digital)[];
+       const uint8_t num_devopts_cg_digital;
 
        const char *(*coupling_options)[];
        const uint8_t num_coupling_options;
 
+       const char *(*logic_threshold)[];
+       const uint8_t num_logic_threshold;
+       const gboolean logic_threshold_for_pod;
+
        const char *(*trigger_sources)[];
        const uint8_t num_trigger_sources;
 
        const char *(*trigger_slopes)[];
+       const uint8_t num_trigger_slopes;
 
        const uint64_t (*timebases)[][2];
        const uint8_t num_timebases;
@@ -60,8 +73,8 @@ struct scope_config {
        const uint64_t (*vdivs)[][2];
        const uint8_t num_vdivs;
 
-       const uint8_t num_xdivs;
-       const uint8_t num_ydivs;
+       unsigned int num_xdivs;
+       const unsigned int num_ydivs;
 
        const char *(*scpi_dialect)[];
 };
@@ -73,24 +86,33 @@ struct analog_channel_state {
        float vertical_offset;
 
        gboolean state;
+       char probe_unit;
+};
+
+struct digital_pod_state {
+       gboolean state;
+
+       int threshold;
+       float user_threshold;
 };
 
 struct scope_state {
        struct analog_channel_state *analog_channels;
        gboolean *digital_channels;
-       gboolean *digital_pods;
+       struct digital_pod_state *digital_pods;
 
        int timebase;
        float horiz_triggerpos;
 
        int trigger_source;
        int trigger_slope;
+       char trigger_pattern[MAX_ANALOG_CHANNEL_COUNT + MAX_DIGITAL_CHANNEL_COUNT];
+
        uint64_t sample_rate;
 };
 
-/** Private, per-device-instance driver context. */
 struct dev_context {
-       void *model_config;
+       const void *model_config;
        void *model_state;
 
        struct sr_channel_group **analog_groups;
@@ -98,9 +120,14 @@ struct dev_context {
 
        GSList *enabled_channels;
        GSList *current_channel;
+       uint64_t num_samples;
        uint64_t num_frames;
 
+       uint64_t samples_limit;
        uint64_t frame_limit;
+
+       size_t pod_count;
+       GByteArray *logic_data;
 };
 
 SR_PRIV int hmo_init_device(struct sr_dev_inst *sdi);