asix-sigma: Use new trigger API.
This commit is contained in:
parent
9f00e5aefb
commit
39c64c6a4f
|
@ -36,7 +36,6 @@
|
||||||
#define USB_DESCRIPTION "ASIX SIGMA"
|
#define USB_DESCRIPTION "ASIX SIGMA"
|
||||||
#define USB_VENDOR_NAME "ASIX"
|
#define USB_VENDOR_NAME "ASIX"
|
||||||
#define USB_MODEL_NAME "SIGMA"
|
#define USB_MODEL_NAME "SIGMA"
|
||||||
#define TRIGGER_TYPE "rf10"
|
|
||||||
|
|
||||||
SR_PRIV struct sr_dev_driver asix_sigma_driver_info;
|
SR_PRIV struct sr_dev_driver asix_sigma_driver_info;
|
||||||
static struct sr_dev_driver *di = &asix_sigma_driver_info;
|
static struct sr_dev_driver *di = &asix_sigma_driver_info;
|
||||||
|
@ -74,11 +73,18 @@ static const char *channel_names[] = {
|
||||||
static const int32_t hwcaps[] = {
|
static const int32_t hwcaps[] = {
|
||||||
SR_CONF_LOGIC_ANALYZER,
|
SR_CONF_LOGIC_ANALYZER,
|
||||||
SR_CONF_SAMPLERATE,
|
SR_CONF_SAMPLERATE,
|
||||||
SR_CONF_TRIGGER_TYPE,
|
SR_CONF_TRIGGER_MATCH,
|
||||||
SR_CONF_CAPTURE_RATIO,
|
SR_CONF_CAPTURE_RATIO,
|
||||||
SR_CONF_LIMIT_MSEC,
|
SR_CONF_LIMIT_MSEC,
|
||||||
};
|
};
|
||||||
|
|
||||||
|
static const int32_t trigger_matches[] = {
|
||||||
|
SR_TRIGGER_ZERO,
|
||||||
|
SR_TRIGGER_ONE,
|
||||||
|
SR_TRIGGER_RISING,
|
||||||
|
SR_TRIGGER_FALLING,
|
||||||
|
};
|
||||||
|
|
||||||
static const char *sigma_firmware_files[] = {
|
static const char *sigma_firmware_files[] = {
|
||||||
/* 50 MHz, supports 8 bit fractions */
|
/* 50 MHz, supports 8 bit fractions */
|
||||||
FIRMWARE_DIR "/asix-sigma-50.fw",
|
FIRMWARE_DIR "/asix-sigma-50.fw",
|
||||||
|
@ -708,56 +714,62 @@ static int set_samplerate(const struct sr_dev_inst *sdi, uint64_t samplerate)
|
||||||
* The Sigma supports complex triggers using boolean expressions, but this
|
* The Sigma supports complex triggers using boolean expressions, but this
|
||||||
* has not been implemented yet.
|
* has not been implemented yet.
|
||||||
*/
|
*/
|
||||||
static int configure_channels(const struct sr_dev_inst *sdi)
|
static int convert_trigger(const struct sr_dev_inst *sdi)
|
||||||
{
|
{
|
||||||
struct dev_context *devc = sdi->priv;
|
struct dev_context *devc;
|
||||||
const struct sr_channel *ch;
|
struct sr_trigger *trigger;
|
||||||
const GSList *l;
|
struct sr_trigger_stage *stage;
|
||||||
int trigger_set = 0;
|
struct sr_trigger_match *match;
|
||||||
int channelbit;
|
const GSList *l, *m;
|
||||||
|
int channelbit, trigger_set;
|
||||||
|
|
||||||
|
devc = sdi->priv;
|
||||||
memset(&devc->trigger, 0, sizeof(struct sigma_trigger));
|
memset(&devc->trigger, 0, sizeof(struct sigma_trigger));
|
||||||
|
if (!(trigger = sr_session_trigger_get()))
|
||||||
|
return SR_OK;
|
||||||
|
|
||||||
for (l = sdi->channels; l; l = l->next) {
|
trigger_set = 0;
|
||||||
ch = (struct sr_channel *)l->data;
|
for (l = trigger->stages; l; l = l->next) {
|
||||||
channelbit = 1 << (ch->index);
|
stage = l->data;
|
||||||
|
for (m = stage->matches; m; m = m->next) {
|
||||||
if (!ch->enabled || !ch->trigger)
|
match = m->data;
|
||||||
|
if (!match->channel->enabled)
|
||||||
|
/* Ignore disabled channels with a trigger. */
|
||||||
continue;
|
continue;
|
||||||
|
channelbit = 1 << (match->channel->index);
|
||||||
if (devc->cur_samplerate >= SR_MHZ(100)) {
|
if (devc->cur_samplerate >= SR_MHZ(100)) {
|
||||||
/* Fast trigger support. */
|
/* Fast trigger support. */
|
||||||
if (trigger_set) {
|
if (trigger_set) {
|
||||||
sr_err("Only a single pin trigger in 100 and "
|
sr_err("Only a single pin trigger is "
|
||||||
"200MHz mode is supported.");
|
"supported in 100 and 200MHz mode.");
|
||||||
return SR_ERR;
|
return SR_ERR;
|
||||||
}
|
}
|
||||||
if (ch->trigger[0] == 'f')
|
if (match->match == SR_TRIGGER_FALLING)
|
||||||
devc->trigger.fallingmask |= channelbit;
|
devc->trigger.fallingmask |= channelbit;
|
||||||
else if (ch->trigger[0] == 'r')
|
else if (match->match == SR_TRIGGER_RISING)
|
||||||
devc->trigger.risingmask |= channelbit;
|
devc->trigger.risingmask |= channelbit;
|
||||||
else {
|
else {
|
||||||
sr_err("Only rising/falling trigger in 100 "
|
sr_err("Only rising/falling trigger is "
|
||||||
"and 200MHz mode is supported.");
|
"supported in 100 and 200MHz mode.");
|
||||||
return SR_ERR;
|
return SR_ERR;
|
||||||
}
|
}
|
||||||
|
|
||||||
++trigger_set;
|
++trigger_set;
|
||||||
} else {
|
} else {
|
||||||
/* Simple trigger support (event). */
|
/* Simple trigger support (event). */
|
||||||
if (ch->trigger[0] == '1') {
|
if (match->match == SR_TRIGGER_ONE) {
|
||||||
devc->trigger.simplevalue |= channelbit;
|
devc->trigger.simplevalue |= channelbit;
|
||||||
devc->trigger.simplemask |= channelbit;
|
devc->trigger.simplemask |= channelbit;
|
||||||
}
|
}
|
||||||
else if (ch->trigger[0] == '0') {
|
else if (match->match == SR_TRIGGER_ZERO) {
|
||||||
devc->trigger.simplevalue &= ~channelbit;
|
devc->trigger.simplevalue &= ~channelbit;
|
||||||
devc->trigger.simplemask |= channelbit;
|
devc->trigger.simplemask |= channelbit;
|
||||||
}
|
}
|
||||||
else if (ch->trigger[0] == 'f') {
|
else if (match->match == SR_TRIGGER_FALLING) {
|
||||||
devc->trigger.fallingmask |= channelbit;
|
devc->trigger.fallingmask |= channelbit;
|
||||||
++trigger_set;
|
++trigger_set;
|
||||||
}
|
}
|
||||||
else if (ch->trigger[0] == 'r') {
|
else if (match->match == SR_TRIGGER_RISING) {
|
||||||
devc->trigger.risingmask |= channelbit;
|
devc->trigger.risingmask |= channelbit;
|
||||||
++trigger_set;
|
++trigger_set;
|
||||||
}
|
}
|
||||||
|
@ -773,10 +785,9 @@ static int configure_channels(const struct sr_dev_inst *sdi)
|
||||||
return SR_ERR;
|
return SR_ERR;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if (trigger_set)
|
|
||||||
devc->use_triggers = 1;
|
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
return SR_OK;
|
return SR_OK;
|
||||||
}
|
}
|
||||||
|
@ -894,8 +905,10 @@ static int config_list(int key, GVariant **data, const struct sr_dev_inst *sdi,
|
||||||
g_variant_builder_add(&gvb, "{sv}", "samplerates", gvar);
|
g_variant_builder_add(&gvb, "{sv}", "samplerates", gvar);
|
||||||
*data = g_variant_builder_end(&gvb);
|
*data = g_variant_builder_end(&gvb);
|
||||||
break;
|
break;
|
||||||
case SR_CONF_TRIGGER_TYPE:
|
case SR_CONF_TRIGGER_MATCH:
|
||||||
*data = g_variant_new_string(TRIGGER_TYPE);
|
*data = g_variant_new_fixed_array(G_VARIANT_TYPE_INT32,
|
||||||
|
trigger_matches, ARRAY_SIZE(trigger_matches),
|
||||||
|
sizeof(int32_t));
|
||||||
break;
|
break;
|
||||||
default:
|
default:
|
||||||
return SR_ERR_NA;
|
return SR_ERR_NA;
|
||||||
|
@ -1410,8 +1423,8 @@ static int dev_acquisition_start(const struct sr_dev_inst *sdi, void *cb_data)
|
||||||
|
|
||||||
devc = sdi->priv;
|
devc = sdi->priv;
|
||||||
|
|
||||||
if (configure_channels(sdi) != SR_OK) {
|
if (convert_trigger(sdi) != SR_OK) {
|
||||||
sr_err("Failed to configure channels.");
|
sr_err("Failed to configure triggers.");
|
||||||
return SR_ERR;
|
return SR_ERR;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue