X-Git-Url: https://sigrok.org/gitweb/?a=blobdiff_plain;f=src%2Fhardware%2Fscpi-pps%2Fapi.c;h=813bf7f375aeeffefdc044a4220696430e1fe4f0;hb=624503ae90a3583edd34fc28a62a037640984e36;hp=e02515296b5afc529a60a2acc6f5cf73f4239100;hpb=60475cd78820ede32383cc838326d691bb364b07;p=libsigrok.git diff --git a/src/hardware/scpi-pps/api.c b/src/hardware/scpi-pps/api.c index e0251529..813bf7f3 100644 --- a/src/hardware/scpi-pps/api.c +++ b/src/hardware/scpi-pps/api.c @@ -153,7 +153,9 @@ static int dev_clear(void) static int dev_open(struct sr_dev_inst *sdi) { + struct dev_context *devc; struct sr_scpi_dev_inst *scpi; + GVariant *beeper; if (sdi->status != SR_ST_ACTIVE) return SR_ERR; @@ -165,6 +167,15 @@ static int dev_open(struct sr_dev_inst *sdi) sdi->status = SR_ST_ACTIVE; scpi_cmd(sdi, SCPI_CMD_REMOTE); + devc = sdi->priv; + devc->beeper_was_set = FALSE; + if (scpi_cmd_resp(sdi, &beeper, G_VARIANT_TYPE_BOOLEAN, SCPI_CMD_BEEPER) == SR_OK) { + if (g_variant_get_boolean(beeper)) { + devc->beeper_was_set = TRUE; + scpi_cmd(sdi, SCPI_CMD_BEEPER_DISABLE); + } + g_variant_unref(beeper); + } return SR_OK; } @@ -172,12 +183,16 @@ static int dev_open(struct sr_dev_inst *sdi) static int dev_close(struct sr_dev_inst *sdi) { struct sr_scpi_dev_inst *scpi; + struct dev_context *devc; if (sdi->status != SR_ST_ACTIVE) return SR_ERR_DEV_CLOSED; + devc = sdi->priv; scpi = sdi->conn; if (scpi) { + if (devc->beeper_was_set) + scpi_cmd(sdi, SCPI_CMD_BEEPER_ENABLE); scpi_cmd(sdi, SCPI_CMD_LOCAL); sr_scpi_close(scpi); sdi->status = SR_ST_INACTIVE; @@ -188,7 +203,7 @@ static int dev_close(struct sr_dev_inst *sdi) static int cleanup(void) { - return SR_OK; + return std_dev_clear(di, NULL); } static int config_get(uint32_t key, GVariant **data, const struct sr_dev_inst *sdi, @@ -510,6 +525,7 @@ static int dev_acquisition_start(const struct sr_dev_inst *sdi, static int dev_acquisition_stop(struct sr_dev_inst *sdi, void *cb_data) { + struct sr_datafeed_packet packet; struct sr_scpi_dev_inst *scpi; float f; @@ -528,6 +544,9 @@ static int dev_acquisition_stop(struct sr_dev_inst *sdi, void *cb_data) sr_scpi_get_float(scpi, NULL, &f); sr_scpi_source_remove(sdi->session, scpi); + packet.type = SR_DF_END; + sr_session_send(sdi, &packet); + return SR_OK; }