ols: Add option to use the falling edge of the external clock
This commit is contained in:
parent
c36a7d84ca
commit
f20c39d933
|
@ -37,6 +37,7 @@ static const uint32_t devopts[] = {
|
||||||
SR_CONF_TRIGGER_MATCH | SR_CONF_LIST,
|
SR_CONF_TRIGGER_MATCH | SR_CONF_LIST,
|
||||||
SR_CONF_CAPTURE_RATIO | SR_CONF_GET | SR_CONF_SET,
|
SR_CONF_CAPTURE_RATIO | SR_CONF_GET | SR_CONF_SET,
|
||||||
SR_CONF_EXTERNAL_CLOCK | SR_CONF_SET,
|
SR_CONF_EXTERNAL_CLOCK | SR_CONF_SET,
|
||||||
|
SR_CONF_CLOCK_EDGE | SR_CONF_GET | SR_CONF_SET | SR_CONF_LIST,
|
||||||
SR_CONF_PATTERN_MODE | SR_CONF_GET | SR_CONF_SET | SR_CONF_LIST,
|
SR_CONF_PATTERN_MODE | SR_CONF_GET | SR_CONF_SET | SR_CONF_LIST,
|
||||||
SR_CONF_SWAP | SR_CONF_SET,
|
SR_CONF_SWAP | SR_CONF_SET,
|
||||||
SR_CONF_RLE | SR_CONF_GET | SR_CONF_SET,
|
SR_CONF_RLE | SR_CONF_GET | SR_CONF_SET,
|
||||||
|
@ -47,6 +48,11 @@ static const int32_t trigger_matches[] = {
|
||||||
SR_TRIGGER_ONE,
|
SR_TRIGGER_ONE,
|
||||||
};
|
};
|
||||||
|
|
||||||
|
static const char* external_clock_edges[] = {
|
||||||
|
"rising", // positive edge
|
||||||
|
"falling" // negative edge
|
||||||
|
};
|
||||||
|
|
||||||
#define STR_PATTERN_NONE "None"
|
#define STR_PATTERN_NONE "None"
|
||||||
#define STR_PATTERN_EXTERNAL "External"
|
#define STR_PATTERN_EXTERNAL "External"
|
||||||
#define STR_PATTERN_INTERNAL "Internal"
|
#define STR_PATTERN_INTERNAL "Internal"
|
||||||
|
@ -223,6 +229,10 @@ static int config_get(uint32_t key, GVariant **data,
|
||||||
case SR_CONF_RLE:
|
case SR_CONF_RLE:
|
||||||
*data = g_variant_new_boolean(devc->capture_flags & CAPTURE_FLAG_RLE ? TRUE : FALSE);
|
*data = g_variant_new_boolean(devc->capture_flags & CAPTURE_FLAG_RLE ? TRUE : FALSE);
|
||||||
break;
|
break;
|
||||||
|
case SR_CONF_CLOCK_EDGE:
|
||||||
|
*data = g_variant_new_string(external_clock_edges[
|
||||||
|
devc->capture_flags & CAPTURE_FLAG_INVERT_EXT_CLOCK ? 1 : 0]);
|
||||||
|
break;
|
||||||
default:
|
default:
|
||||||
return SR_ERR_NA;
|
return SR_ERR_NA;
|
||||||
}
|
}
|
||||||
|
@ -266,6 +276,16 @@ static int config_set(uint32_t key, GVariant *data,
|
||||||
devc->capture_flags &= ~CAPTURE_FLAG_CLOCK_EXTERNAL;
|
devc->capture_flags &= ~CAPTURE_FLAG_CLOCK_EXTERNAL;
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
|
case SR_CONF_CLOCK_EDGE:
|
||||||
|
stropt = g_variant_get_string(data, NULL);
|
||||||
|
if (!strcmp(stropt, external_clock_edges[1])) {
|
||||||
|
sr_info("Triggering on falling edge of external clock.");
|
||||||
|
devc->capture_flags |= CAPTURE_FLAG_INVERT_EXT_CLOCK;
|
||||||
|
} else {
|
||||||
|
sr_info("Triggering on rising edge of external clock.");
|
||||||
|
devc->capture_flags &= ~CAPTURE_FLAG_INVERT_EXT_CLOCK;
|
||||||
|
}
|
||||||
|
break;
|
||||||
case SR_CONF_PATTERN_MODE:
|
case SR_CONF_PATTERN_MODE:
|
||||||
stropt = g_variant_get_string(data, NULL);
|
stropt = g_variant_get_string(data, NULL);
|
||||||
if (!strcmp(stropt, STR_PATTERN_NONE)) {
|
if (!strcmp(stropt, STR_PATTERN_NONE)) {
|
||||||
|
@ -325,6 +345,9 @@ static int config_list(uint32_t key, GVariant **data,
|
||||||
case SR_CONF_TRIGGER_MATCH:
|
case SR_CONF_TRIGGER_MATCH:
|
||||||
*data = std_gvar_array_i32(ARRAY_AND_SIZE(trigger_matches));
|
*data = std_gvar_array_i32(ARRAY_AND_SIZE(trigger_matches));
|
||||||
break;
|
break;
|
||||||
|
case SR_CONF_CLOCK_EDGE:
|
||||||
|
*data = std_gvar_array_str(ARRAY_AND_SIZE(external_clock_edges));
|
||||||
|
break;
|
||||||
case SR_CONF_PATTERN_MODE:
|
case SR_CONF_PATTERN_MODE:
|
||||||
*data = g_variant_new_strv(ARRAY_AND_SIZE(patterns));
|
*data = g_variant_new_strv(ARRAY_AND_SIZE(patterns));
|
||||||
break;
|
break;
|
||||||
|
@ -491,12 +514,15 @@ static int dev_acquisition_start(const struct sr_dev_inst *sdi)
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Flag register. */
|
/* Flag register. */
|
||||||
sr_dbg("Setting intpat %s, extpat %s, RLE %s, noise_filter %s, demux %s",
|
sr_dbg("Setting intpat %s, extpat %s, RLE %s, noise_filter %s, demux %s, %s clock%s",
|
||||||
devc->capture_flags & CAPTURE_FLAG_INTERNAL_TEST_MODE ? "on": "off",
|
devc->capture_flags & CAPTURE_FLAG_INTERNAL_TEST_MODE ? "on": "off",
|
||||||
devc->capture_flags & CAPTURE_FLAG_EXTERNAL_TEST_MODE ? "on": "off",
|
devc->capture_flags & CAPTURE_FLAG_EXTERNAL_TEST_MODE ? "on": "off",
|
||||||
devc->capture_flags & CAPTURE_FLAG_RLE ? "on" : "off",
|
devc->capture_flags & CAPTURE_FLAG_RLE ? "on" : "off",
|
||||||
devc->capture_flags & CAPTURE_FLAG_NOISE_FILTER ? "on": "off",
|
devc->capture_flags & CAPTURE_FLAG_NOISE_FILTER ? "on": "off",
|
||||||
devc->capture_flags & CAPTURE_FLAG_DEMUX ? "on" : "off");
|
devc->capture_flags & CAPTURE_FLAG_DEMUX ? "on" : "off",
|
||||||
|
devc->capture_flags & CAPTURE_FLAG_CLOCK_EXTERNAL ? "external" : "internal",
|
||||||
|
devc->capture_flags & CAPTURE_FLAG_CLOCK_EXTERNAL ? (devc->capture_flags & CAPTURE_FLAG_INVERT_EXT_CLOCK
|
||||||
|
? " on falling edge" : "on rising edge") : "");
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Enable/disable OLS channel groups in the flag register according
|
* Enable/disable OLS channel groups in the flag register according
|
||||||
|
|
Loading…
Reference in New Issue