ols: Add option to use the falling edge of the external clock

This commit is contained in:
v1ne 2020-03-31 20:29:48 +02:00 committed by Gerhard Sittig
parent c36a7d84ca
commit f20c39d933
1 changed files with 28 additions and 2 deletions

View File

@ -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