X-Git-Url: https://sigrok.org/gitweb/?a=blobdiff_plain;f=src%2Fhardware%2Fscpi-pps%2Fapi.c;h=98ef0b9d7b01932fb902e77bdd21d13a9704c882;hb=f083ae63c7355b9b1d99775785b99b6fa91cd48a;hp=104a020d84e06859f716b0603963a8f81f32fd89;hpb=f2bbcc330a6bcb65500b298bec8c40974ed246d4;p=libsigrok.git diff --git a/src/hardware/scpi-pps/api.c b/src/hardware/scpi-pps/api.c index 104a020d..98ef0b9d 100644 --- a/src/hardware/scpi-pps/api.c +++ b/src/hardware/scpi-pps/api.c @@ -383,7 +383,8 @@ static int config_get(uint32_t key, GVariant **data, cmd = SCPI_CMD_GET_OVER_VOLTAGE_PROTECTION_ENABLED; break; case SR_CONF_OVER_VOLTAGE_PROTECTION_ACTIVE: - if (devc->device->dialect == SCPI_DIALECT_HP_66XXB) + if (devc->device->dialect == SCPI_DIALECT_HP_66XXB || + devc->device->dialect == SCPI_DIALECT_HP_COMP) gvtype = G_VARIANT_TYPE_STRING; else gvtype = G_VARIANT_TYPE_BOOLEAN; @@ -398,7 +399,8 @@ static int config_get(uint32_t key, GVariant **data, cmd = SCPI_CMD_GET_OVER_CURRENT_PROTECTION_ENABLED; break; case SR_CONF_OVER_CURRENT_PROTECTION_ACTIVE: - if (devc->device->dialect == SCPI_DIALECT_HP_66XXB) + if (devc->device->dialect == SCPI_DIALECT_HP_66XXB || + devc->device->dialect == SCPI_DIALECT_HP_COMP) gvtype = G_VARIANT_TYPE_STRING; else gvtype = G_VARIANT_TYPE_BOOLEAN; @@ -413,7 +415,8 @@ static int config_get(uint32_t key, GVariant **data, cmd = SCPI_CMD_GET_OVER_TEMPERATURE_PROTECTION; break; case SR_CONF_OVER_TEMPERATURE_PROTECTION_ACTIVE: - if (devc->device->dialect == SCPI_DIALECT_HP_66XXB) + if (devc->device->dialect == SCPI_DIALECT_HP_66XXB || + devc->device->dialect == SCPI_DIALECT_HP_COMP) gvtype = G_VARIANT_TYPE_STRING; else gvtype = G_VARIANT_TYPE_BOOLEAN; @@ -459,6 +462,22 @@ static int config_get(uint32_t key, GVariant **data, *data = g_variant_new_string("CC"); } } + if (devc->device->dialect == SCPI_DIALECT_HP_COMP) { + /* Evaluate Status Register from a HP 66xx in COMP mode. */ + s = g_variant_get_string(*data, NULL); + sr_atoi(s, ®); + g_variant_unref(*data); + if (reg & (1 << 0)) + *data = g_variant_new_string("CV"); + else if (reg & (1 << 1)) + *data = g_variant_new_string("CC"); + else if (reg & (1 << 2)) + *data = g_variant_new_string("UR"); + else if (reg & (1 << 9)) + *data = g_variant_new_string("CC-"); + else + *data = g_variant_new_string(""); + } if (devc->device->dialect == SCPI_DIALECT_HP_66XXB) { /* Evaluate Operational Status Register from a HP 66xxB. */ s = g_variant_get_string(*data, NULL); @@ -475,8 +494,8 @@ static int config_get(uint32_t key, GVariant **data, } s = g_variant_get_string(*data, NULL); - if (g_strcmp0(s, "CV") && g_strcmp0(s, "CC") && - g_strcmp0(s, "CC-") && g_strcmp0(s, "UR")) { + if (g_strcmp0(s, "CV") && g_strcmp0(s, "CC") && g_strcmp0(s, "CC-") && + g_strcmp0(s, "UR") && g_strcmp0(s, "")) { sr_err("Unknown response to SCPI_CMD_GET_OUTPUT_REGULATION: %s", s); ret = SR_ERR_DATA; @@ -484,6 +503,13 @@ static int config_get(uint32_t key, GVariant **data, } if (cmd == SCPI_CMD_GET_OVER_VOLTAGE_PROTECTION_ACTIVE) { + if (devc->device->dialect == SCPI_DIALECT_HP_COMP) { + /* Evaluate Status Register from a HP 66xx in COMP mode. */ + s = g_variant_get_string(*data, NULL); + sr_atoi(s, ®); + g_variant_unref(*data); + *data = g_variant_new_boolean(reg & (1 << 3)); + } 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); @@ -494,6 +520,13 @@ static int config_get(uint32_t key, GVariant **data, } if (cmd == SCPI_CMD_GET_OVER_CURRENT_PROTECTION_ACTIVE) { + if (devc->device->dialect == SCPI_DIALECT_HP_COMP) { + /* Evaluate Status Register from a HP 66xx in COMP mode. */ + s = g_variant_get_string(*data, NULL); + sr_atoi(s, ®); + g_variant_unref(*data); + *data = g_variant_new_boolean(reg & (1 << 6)); + } 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); @@ -504,6 +537,13 @@ static int config_get(uint32_t key, GVariant **data, } if (cmd == SCPI_CMD_GET_OVER_TEMPERATURE_PROTECTION_ACTIVE) { + if (devc->device->dialect == SCPI_DIALECT_HP_COMP) { + /* Evaluate Status Register from a HP 66xx in COMP mode. */ + s = g_variant_get_string(*data, NULL); + sr_atoi(s, ®); + g_variant_unref(*data); + *data = g_variant_new_boolean(reg & (1 << 4)); + } 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);