]> sigrok.org Git - libsigrok.git/commitdiff
scpi/libgpib: Place device in local mode before closing handle
authorAlexandru Gagniuc <redacted>
Sun, 28 Feb 2016 18:32:19 +0000 (10:32 -0800)
committerUwe Hermann <redacted>
Wed, 30 Mar 2016 10:39:20 +0000 (12:39 +0200)
Devices connected on a real GPIB bus are placed in remote mode when
opening them. libgpib does not automatically place devices back in
local mode when closing the handle. It is thus possible to lock out a
GPIB device by probing it with libsigrok.

This happens on the HP 3457A meter, which does not have a "LOCAL"
command, and must be put back in local mode via GPIB handshake.
ibloc() takes care of this, and it does it on a per-device basis,
such that other devices on the GPIB bus are not affected.

src/scpi/scpi_libgpib.c

index ed499cca5bad7bacd0e1e1fa07b70fc4ab7041a9..cab72df720f426bfcfc9f7f19909bb9862da7e03 100644 (file)
@@ -139,6 +139,9 @@ static int scpi_gpib_close(struct sr_scpi_dev_inst *scpi)
 {
        struct scpi_gpib *gscpi = scpi->priv;
 
+       /* Put device in back local mode to prevent lock-out of front panel. */
+       ibloc(gscpi->descriptor);
+       /* Now it's safe to close the handle. */
        ibonl(gscpi->descriptor, 0);
 
        return SR_OK;