* This file is part of the libsigrok project.
*
* Copyright (C) 2014 Bert Vermeulen <bert@biot.com>
- * Copyright (C) 2017 Frank Stettner <frank-stettner@gmx.net>
+ * Copyright (C) 2017,2019 Frank Stettner <frank-stettner@gmx.net>
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
for (l = sdi->channels; l; l = l->next) {
ch = l->data;
pch = ch->priv;
+ /* Add mqflags from channel_group_spec only to voltage
+ * and current channels
+ */
+ if (pch->mq == SR_MQ_VOLTAGE || pch->mq == SR_MQ_CURRENT)
+ pch->mqflags = cgs->mqflags;
+ else
+ pch->mqflags = 0;
if (pch->hw_output_idx == j)
cg->channels = g_slist_append(cg->channels, ch);
}
char *channel_group_name;
int cmd, ret;
const char *s;
- int oper_cond;
+ int reg;
if (!sdi)
return SR_ERR_ARG;
cmd = SCPI_CMD_GET_OVER_VOLTAGE_PROTECTION_ENABLED;
break;
case SR_CONF_OVER_VOLTAGE_PROTECTION_ACTIVE:
- gvtype = G_VARIANT_TYPE_BOOLEAN;
+ if (devc->device->dialect == SCPI_DIALECT_HP_66XXB)
+ gvtype = G_VARIANT_TYPE_STRING;
+ else
+ gvtype = G_VARIANT_TYPE_BOOLEAN;
cmd = SCPI_CMD_GET_OVER_VOLTAGE_PROTECTION_ACTIVE;
break;
case SR_CONF_OVER_VOLTAGE_PROTECTION_THRESHOLD:
cmd = SCPI_CMD_GET_OVER_CURRENT_PROTECTION_ENABLED;
break;
case SR_CONF_OVER_CURRENT_PROTECTION_ACTIVE:
- gvtype = G_VARIANT_TYPE_BOOLEAN;
+ if (devc->device->dialect == SCPI_DIALECT_HP_66XXB)
+ gvtype = G_VARIANT_TYPE_STRING;
+ else
+ gvtype = G_VARIANT_TYPE_BOOLEAN;
cmd = SCPI_CMD_GET_OVER_CURRENT_PROTECTION_ACTIVE;
break;
case SR_CONF_OVER_CURRENT_PROTECTION_THRESHOLD:
gvtype = G_VARIANT_TYPE_BOOLEAN;
cmd = SCPI_CMD_GET_OVER_TEMPERATURE_PROTECTION;
break;
+ case SR_CONF_OVER_TEMPERATURE_PROTECTION_ACTIVE:
+ if (devc->device->dialect == SCPI_DIALECT_HP_66XXB)
+ gvtype = G_VARIANT_TYPE_STRING;
+ else
+ gvtype = G_VARIANT_TYPE_BOOLEAN;
+ cmd = SCPI_CMD_GET_OVER_TEMPERATURE_PROTECTION_ACTIVE;
+ break;
case SR_CONF_REGULATION:
gvtype = G_VARIANT_TYPE_STRING;
cmd = SCPI_CMD_GET_OUTPUT_REGULATION;
if (devc->device->dialect == SCPI_DIALECT_HP_66XXB) {
/* Evaluate Operational Status Register from a HP 66xxB. */
s = g_variant_get_string(*data, NULL);
- sr_atoi(s, &oper_cond);
+ sr_atoi(s, ®);
g_variant_unref(*data);
- if (oper_cond & (1 << 8))
+ if (reg & (1 << 8))
*data = g_variant_new_string("CV");
- else if (oper_cond & (1 << 10))
+ else if (reg & (1 << 10))
*data = g_variant_new_string("CC");
- else if (oper_cond & (1 << 11))
+ else if (reg & (1 << 11))
*data = g_variant_new_string("CC-");
else
*data = g_variant_new_string("UR");
}
}
+ if (cmd == SCPI_CMD_GET_OVER_VOLTAGE_PROTECTION_ACTIVE) {
+ if (devc->device->dialect == SCPI_DIALECT_HP_66XXB) {
+ /* Evaluate Questionable Status Register bit 0 from a HP 66xxB. */
+ s = g_variant_get_string(*data, NULL);
+ sr_atoi(s, ®);
+ g_variant_unref(*data);
+ *data = g_variant_new_boolean(reg & (1 << 0));
+ }
+ }
+
+ if (cmd == SCPI_CMD_GET_OVER_CURRENT_PROTECTION_ACTIVE) {
+ if (devc->device->dialect == SCPI_DIALECT_HP_66XXB) {
+ /* Evaluate Questionable Status Register bit 1 from a HP 66xxB. */
+ s = g_variant_get_string(*data, NULL);
+ sr_atoi(s, ®);
+ g_variant_unref(*data);
+ *data = g_variant_new_boolean(reg & (1 << 1));
+ }
+ }
+
+ if (cmd == SCPI_CMD_GET_OVER_TEMPERATURE_PROTECTION_ACTIVE) {
+ if (devc->device->dialect == SCPI_DIALECT_HP_66XXB) {
+ /* Evaluate Questionable Status Register bit 4 from a HP 66xxB. */
+ s = g_variant_get_string(*data, NULL);
+ sr_atoi(s, ®);
+ g_variant_unref(*data);
+ *data = g_variant_new_boolean(reg & (1 << 4));
+ }
+ }
+
return ret;
}
/* Prime the pipe with the first channel. */
devc->cur_acquisition_channel = sr_next_enabled_channel(sdi, NULL);
+ /* Device specific initialization before aquisition starts. */
+ if (devc->device->init_aquisition)
+ devc->device->init_aquisition(sdi);
+
if ((ret = sr_scpi_source_add(sdi->session, scpi, G_IO_IN, 10,
scpi_pps_receive_data, (void *)sdi)) != SR_OK)
return ret;