2
0
forked from Ivasoft/DSView

add trigger hold off time setting @ DSO mode

This commit is contained in:
DreamSourceLab
2015-06-17 21:46:37 +08:00
parent fe5bc15f1e
commit 248a446d67
10 changed files with 151 additions and 26 deletions

View File

@@ -88,6 +88,7 @@ static const int32_t sessions[] = {
SR_CONF_TRIGGER_SLOPE,
SR_CONF_TRIGGER_SOURCE,
SR_CONF_HORIZ_TRIGGERPOS,
SR_CONF_TRIGGER_HOLDOFF,
};
static const char *probe_names[] = {
@@ -584,6 +585,7 @@ static struct DSL_context *DSCope_dev_new(void)
devc->timebase = 10000;
devc->trigger_slope = DSO_TRIGGER_RISING;
devc->trigger_source = DSO_TRIGGER_AUTO;
devc->trigger_holdoff = 0;
devc->trigger_hpos = 0x0;
devc->trigger_hrate = 0;
devc->zero = FALSE;
@@ -902,6 +904,10 @@ static uint64_t dso_cmd_gen(struct sr_dev_inst *sdi, struct sr_channel* ch, int
case SR_CONF_ZERO_OVER:
cmd += 0x50;
break;
case SR_CONF_TRIGGER_HOLDOFF:
cmd += 0x58;
cmd += ((uint64_t)devc->trigger_holdoff << 8);
break;
case SR_CONF_DSO_SYNC:
cmd = 0xa5a5a500;
break;
@@ -1020,6 +1026,11 @@ static int dev_open(struct sr_dev_inst *sdi)
sr_err("Set Horiz Trigger Position command failed!");
return ret;
}
ret = command_dso_ctrl(usb->devhdl, dso_cmd_gen(sdi, NULL, SR_CONF_TRIGGER_HOLDOFF));
if (ret != SR_OK) {
sr_err("Set Trigger Holdoff Time command failed!");
return ret;
}
ret = command_dso_ctrl(usb->devhdl, dso_cmd_gen(sdi, NULL, SR_CONF_TRIGGER_SLOPE));
if (ret != SR_OK) {
sr_err("Set Trigger Slope command failed!");
@@ -1234,6 +1245,12 @@ static int config_get(int id, GVariant **data, const struct sr_dev_inst *sdi,
devc = sdi->priv;
*data = g_variant_new_byte(devc->trigger_hrate);
break;
case SR_CONF_TRIGGER_HOLDOFF:
if (!sdi)
return SR_ERR;
devc = sdi->priv;
*data = g_variant_new_uint64(devc->trigger_holdoff);
break;
case SR_CONF_ZERO:
if (!sdi)
return SR_ERR;
@@ -1509,6 +1526,17 @@ static int config_set(int id, GVariant *data, struct sr_dev_inst *sdi,
else
sr_dbg("%s: setting DSO Horiz Trigger Position to %d failed",
__func__, devc->trigger_hpos);
} else if (id == SR_CONF_TRIGGER_HOLDOFF) {
devc->trigger_holdoff = g_variant_get_uint64(data);
if (sdi->mode == DSO) {
ret = command_dso_ctrl(usb->devhdl, dso_cmd_gen(sdi, NULL, SR_CONF_TRIGGER_HOLDOFF));
}
if (ret == SR_OK)
sr_dbg("%s: setting Trigger Holdoff Time to %d",
__func__, devc->trigger_holdoff);
else
sr_dbg("%s: setting Trigger Holdoff Time to %d failed",
__func__, devc->trigger_holdoff);
} else if (id == SR_CONF_ZERO) {
devc->zero = g_variant_get_boolean(data);
} else if (id == SR_CONF_ZERO_SET) {
@@ -2059,7 +2087,11 @@ static int dev_transfer_start(const struct sr_dev_inst *sdi)
// num_transfers = get_number_of_transfers(devc);
// size = get_buffer_size(devc);
timeout = 500;
#ifndef _WIN32
num_transfers = 1;
#else
num_transfers = buffer_cnt;
#endif
uint16_t channel_en_cnt = 0;
uint16_t channel_cnt = 0;
GSList *l;