X-Git-Url: https://sigrok.org/gitweb/?a=blobdiff_plain;f=src%2Fhardware%2Fhameg-hmo%2Fprotocol.h;h=975ea7e342e311b3c3234e03f29323d5bc997b1a;hb=29a9b1a0bd0af79e0eb2adee594f42895452344c;hp=932e3ec3ee1c62d85d5d6633979db270ca3fcee4;hpb=562b7ae513ed755ee93f233d6a460259cea535de;p=libsigrok.git diff --git a/src/hardware/hameg-hmo/protocol.h b/src/hardware/hameg-hmo/protocol.h index 932e3ec3..975ea7e3 100644 --- a/src/hardware/hameg-hmo/protocol.h +++ b/src/hardware/hameg-hmo/protocol.h @@ -23,36 +23,49 @@ #include #include #include -#include "libsigrok.h" +#include #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);