]> sigrok.org Git - libsigrok.git/blobdiff - src/hardware/hameg-hmo/protocol.c
Revert "hameg-hmo: Support BE format for SCPI sample downloads"
[libsigrok.git] / src / hardware / hameg-hmo / protocol.c
index 029edbd76750bf378988e0388ba0a707cfa0c85f..528d7b04295dac4eda31220d537c71ac614e35af 100644 (file)
@@ -123,6 +123,35 @@ static const char *hmo_compact4_trigger_sources[] = {
        NULL,
 };
 
+static const char *hmo_compact4_dig16_trigger_sources[] = {
+       "CH1",
+       "CH2",
+       "CH3",
+       "CH4",
+       "LINE",
+       "EXT",
+       "PATT",
+       "BUS1",
+       "BUS2",
+       "D0",
+       "D1",
+       "D2",
+       "D3",
+       "D4",
+       "D5",
+       "D6",
+       "D7",
+       "D8",
+       "D9",
+       "D10",
+       "D11",
+       "D12",
+       "D13",
+       "D14",
+       "D15",
+       NULL,
+};
+
 static const uint64_t hmo_timebases[][2] = {
        /* nanoseconds */
        { 2, 1000000000 },
@@ -242,9 +271,7 @@ static const struct scope_config scope_models[] = {
                .scpi_dialect = &hameg_scpi_dialect,
        },
        {
-               /* HMO2524/3034/3044/3054 support 16 digital channels but they're not supported yet. */
-               .name = {"HMO724", "HMO1024", "HMO1524", "HMO2024", "HMO2524",
-                               "HMO3034", "HMO3044", "HMO3054", NULL},
+               .name = {"HMO724", "HMO1024", "HMO1524", "HMO2024", NULL},
                .analog_channels = 4,
                .digital_channels = 8,
                .digital_pods = 1,
@@ -271,6 +298,36 @@ static const struct scope_config scope_models[] = {
                .num_xdivs = 12,
                .num_ydivs = 8,
 
+               .scpi_dialect = &hameg_scpi_dialect,
+       },
+       {
+               .name = {"HMO2524", "HMO3034", "HMO3044", "HMO3054", NULL},
+               .analog_channels = 4,
+               .digital_channels = 16,
+               .digital_pods = 2,
+
+               .analog_names = &scope_analog_channel_names,
+               .digital_names = &scope_digital_channel_names,
+
+               .devopts = &hmo_devopts,
+               .num_devopts = ARRAY_SIZE(hmo_devopts),
+
+               .analog_devopts = &hmo_analog_devopts,
+               .num_analog_devopts = ARRAY_SIZE(hmo_analog_devopts),
+
+               .coupling_options = &hmo_coupling_options,
+               .trigger_sources = &hmo_compact4_dig16_trigger_sources,
+               .trigger_slopes = &scope_trigger_slopes,
+
+               .timebases = &hmo_timebases,
+               .num_timebases = ARRAY_SIZE(hmo_timebases),
+
+               .vdivs = &hmo_vdivs,
+               .num_vdivs = ARRAY_SIZE(hmo_vdivs),
+
+               .num_xdivs = 12,
+               .num_ydivs = 8,
+
                .scpi_dialect = &hameg_scpi_dialect,
        },
 };
@@ -284,7 +341,7 @@ static void scope_state_dump(const struct scope_config *config,
        for (i = 0; i < config->analog_channels; i++) {
                tmp = sr_voltage_string((*config->vdivs)[state->analog_channels[i].vdiv][0],
                                             (*config->vdivs)[state->analog_channels[i].vdiv][1]);
-               sr_info("State of analog channel  %d -> %s : %s (coupling) %s (vdiv) %2.2e (offset)",
+               sr_info("State of analog channel %d -> %s : %s (coupling) %s (vdiv) %2.2e (offset)",
                        i + 1, state->analog_channels[i].state ? "On" : "Off",
                        (*config->coupling_options)[state->analog_channels[i].coupling],
                        tmp, state->analog_channels[i].vertical_offset);
@@ -631,7 +688,7 @@ SR_PRIV int hmo_init_device(struct sr_dev_inst *sdi)
 {
        char tmp[25];
        int model_index;
-       unsigned int i, j;
+       unsigned int i, j, group;
        struct sr_channel *ch;
        struct dev_context *devc;
 
@@ -684,7 +741,7 @@ SR_PRIV int hmo_init_device(struct sr_dev_inst *sdi)
 
                devc->digital_groups[i]->name = g_strdup(tmp);
                sdi->channel_groups = g_slist_append(sdi->channel_groups,
-                                  devc->digital_groups[i < 8 ? 0 : 1]);
+                                  devc->digital_groups[i]);
        }
 
        /* Add digital channels. */
@@ -692,8 +749,9 @@ SR_PRIV int hmo_init_device(struct sr_dev_inst *sdi)
                ch = sr_channel_new(sdi, i, SR_CHANNEL_LOGIC, TRUE,
                           (*scope_models[model_index].digital_names)[i]);
 
-               devc->digital_groups[i < 8 ? 0 : 1]->channels = g_slist_append(
-                       devc->digital_groups[i < 8 ? 0 : 1]->channels, ch);
+               group = i / 8;
+               devc->digital_groups[group]->channels = g_slist_append(
+                       devc->digital_groups[group]->channels, ch);
        }
 
        devc->model_config = &scope_models[model_index];
@@ -764,7 +822,8 @@ SR_PRIV int hmo_receive_data(int fd, int revents, void *cb_data)
                encoding.is_signed = TRUE;
                encoding.is_float = TRUE;
                encoding.is_bigendian = FALSE;
-               encoding.digits = 0;
+               /* TODO: Use proper 'digits' value for this device (and its modes). */
+               encoding.digits = 2;
                encoding.is_digits_decimal = FALSE;
                encoding.scale.p = 1;
                encoding.scale.q = 1;
@@ -779,7 +838,8 @@ SR_PRIV int hmo_receive_data(int fd, int revents, void *cb_data)
                }
                meaning.mqflags = 0;
                meaning.channels = g_slist_append(NULL, ch);
-               spec.spec_digits = 0;
+               /* TODO: Use proper 'digits' value for this device (and its modes). */
+               spec.spec_digits = 2;
                packet.payload = &analog;
                sr_session_send(sdi, &packet);
                g_slist_free(meaning.channels);