SR_CONF_TRIGGER_TYPE,
SR_CONF_CAPTURE_RATIO,
SR_CONF_LIMIT_SAMPLES,
+ SR_CONF_PATTERN_MODE,
SR_CONF_RLE,
};
+#define STR_PATTERN_EXTERNAL "external"
+#define STR_PATTERN_INTERNAL "internal"
+
+/* Supported methods of test pattern outputs */
+enum {
+ /**
+ * Capture pins 31:16 (unbuffered wing) output a test pattern
+ * that can captured on pins 0:15.
+ */
+ PATTERN_EXTERNAL,
+
+ /** Route test pattern internally to capture buffer. */
+ PATTERN_INTERNAL,
+};
+
/* Probes are numbered 0-31 (on the PCB silkscreen). */
SR_PRIV const char *ols_probe_names[NUM_PROBES + 1] = {
"0", "1", "2", "3", "4", "5", "6", "7", "8", "9", "10", "11", "12",
case SR_CONF_LIMIT_SAMPLES:
*data = g_variant_new_uint64(devc->limit_samples);
break;
+ case SR_CONF_PATTERN_MODE:
+ if (devc->flag_reg & FLAG_EXTERNAL_TEST_MODE)
+ *data = g_variant_new_string(STR_PATTERN_EXTERNAL);
+ else if (devc->flag_reg & FLAG_INTERNAL_TEST_MODE)
+ *data = g_variant_new_string(STR_PATTERN_INTERNAL);
+ break;
case SR_CONF_RLE:
*data = g_variant_new_boolean(devc->flag_reg & FLAG_RLE ? TRUE : FALSE);
break;
struct dev_context *devc;
int ret;
uint64_t tmp_u64;
+ const char *stropt;
if (sdi->status != SR_ST_ACTIVE)
return SR_ERR_DEV_CLOSED;
} else
ret = SR_OK;
break;
+ case SR_CONF_PATTERN_MODE:
+ stropt = g_variant_get_string(data, NULL);
+ ret = SR_OK;
+ if (!strcmp(stropt, STR_PATTERN_INTERNAL)) {
+ sr_info("Enabling internal test mode.");
+ devc->flag_reg |= FLAG_INTERNAL_TEST_MODE;
+ } else if (!strcmp(stropt, STR_PATTERN_EXTERNAL)) {
+ sr_info("Enabling external test mode.");
+ devc->flag_reg |= FLAG_EXTERNAL_TEST_MODE;
+ } else {
+ ret = SR_ERR;
+ }
+ break;
case SR_CONF_RLE:
if (g_variant_get_boolean(data)) {
sr_info("Enabling RLE.");
/* Command opcodes */
#define CMD_RESET 0x00
#define CMD_RUN 0x01
+#define CMD_TESTMODE 0x03
#define CMD_ID 0x02
#define CMD_METADATA 0x04
#define CMD_SET_FLAGS 0x82
#define FLAG_CLOCK_EXTERNAL 0x40
#define FLAG_CLOCK_INVERTED 0x80
#define FLAG_RLE 0x0100
+#define FLAG_EXTERNAL_TEST_MODE 0x0400
+#define FLAG_INTERNAL_TEST_MODE 0x0800
/* Private, per-device-instance driver context. */
struct dev_context {