]> sigrok.org Git - libsigrok.git/blobdiff - hardware/common/scpi_vxi.c
build: Portability fixes.
[libsigrok.git] / hardware / common / scpi_vxi.c
index 4d713dceb9446f9fe6ff0dd4669d88072e645ab8..271917b082dfedeaab67419d581e8806eecd9844 100644 (file)
@@ -21,6 +21,8 @@
  */
 
 #include <rpc/rpc.h>
+#include <string.h>
+
 #include "vxi.h"
 #include "libsigrok.h"
 #include "libsigrok-internal.h"
@@ -37,11 +39,12 @@ struct scpi_vxi {
        unsigned int read_complete;
 };
 
-static int scpi_vxi_dev_inst_new(void *priv, const char *resource,
-               char **params, const char *serialcomm)
+static int scpi_vxi_dev_inst_new(void *priv, struct drv_context *drvc,
+               const char *resource, char **params, const char *serialcomm)
 {
        struct scpi_vxi *vxi = priv;
 
+       (void)drvc;
        (void)resource;
        (void)serialcomm;
 
@@ -88,20 +91,20 @@ static int scpi_vxi_open(void *priv)
        return SR_OK;
 }
 
-static int scpi_vxi_source_add(void *priv, int events, int timeout,
-                       sr_receive_data_callback_t cb, void *cb_data)
+static int scpi_vxi_source_add(struct sr_session *session, void *priv,
+               int events, int timeout, sr_receive_data_callback cb, void *cb_data)
 {
        (void)priv;
 
        /* Hook up a dummy handler to receive data from the device. */
-       return sr_source_add(-1, events, timeout, cb, cb_data);
+       return sr_session_source_add(session, -1, events, timeout, cb, cb_data);
 }
 
-static int scpi_vxi_source_remove(void *priv)
+static int scpi_vxi_source_remove(struct sr_session *session, void *priv)
 {
        (void)priv;
 
-       return sr_source_remove(-1);
+       return sr_session_source_remove(session, -1);
 }
 
 /* Operation Flags */
@@ -196,12 +199,16 @@ static int scpi_vxi_close(void *priv)
        struct scpi_vxi *vxi = priv;
        Device_Error *dev_error;
 
+       if (!vxi->client)
+               return SR_ERR;
+
        if (!(dev_error = destroy_link_1(&vxi->link, vxi->client))) {
                sr_err("Link destruction failed for %s", vxi->address);
                return SR_ERR;
        }
 
        clnt_destroy(vxi->client);
+       vxi->client = NULL;
 
        return SR_OK;
 }