static int scpi_vxi_dev_inst_new(void *priv, struct drv_context *drvc,
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)
{
- vxi->client = clnt_create(vxi->address, DEVICE_CORE, DEVICE_CORE_VERSION, "tcp");
+ vxi = scpi->priv;
+ vxi->client = clnt_create(vxi->address,
+ DEVICE_CORE, DEVICE_CORE_VERSION, "tcp");
link_parms.clientId = (long) vxi->client;
link_parms.lockDevice = 0;
link_parms.lock_timeout = VXI_DEFAULT_TIMEOUT_MS;
link_parms.clientId = (long) vxi->client;
link_parms.lockDevice = 0;
link_parms.lock_timeout = VXI_DEFAULT_TIMEOUT_MS;
static int scpi_vxi_source_add(struct sr_session *session, void *priv,
int events, int timeout, sr_receive_data_callback 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)
{
write_parms.lid = vxi->link;
write_parms.io_timeout = VXI_DEFAULT_TIMEOUT_MS;
write_parms.lock_timeout = VXI_DEFAULT_TIMEOUT_MS;
write_parms.flags = DF_END;
write_parms.data.data_len = MIN(len, vxi->max_send_size);
write_parms.lid = vxi->link;
write_parms.io_timeout = VXI_DEFAULT_TIMEOUT_MS;
write_parms.lock_timeout = VXI_DEFAULT_TIMEOUT_MS;
write_parms.flags = DF_END;
write_parms.data.data_len = MIN(len, vxi->max_send_size);
- if (!(write_resp = device_write_1(&write_parms, vxi->client))
- || write_resp->error) {
+ write_resp = device_write_1(&write_parms, vxi->client);
+ if (!write_resp || write_resp->error) {
sr_err("Device write failed for %s with error %ld",
vxi->address, write_resp ? write_resp->error : 0);
return SR_ERR;
}
sr_err("Device write failed for %s with error %ld",
vxi->address, write_resp ? write_resp->error : 0);
return SR_ERR;
}
sr_dbg("Only sent %lu/%lu bytes of SCPI command: '%s'.",
write_resp->size, len, command);
sr_dbg("Only sent %lu/%lu bytes of SCPI command: '%s'.",
write_resp->size, len, command);
read_parms.lid = vxi->link;
read_parms.io_timeout = VXI_DEFAULT_TIMEOUT_MS;
read_parms.lock_timeout = VXI_DEFAULT_TIMEOUT_MS;
read_parms.lid = vxi->link;
read_parms.io_timeout = VXI_DEFAULT_TIMEOUT_MS;
read_parms.lock_timeout = VXI_DEFAULT_TIMEOUT_MS;
sr_err("Device read failed for %s with error %ld",
vxi->address, read_resp ? read_resp->error : 0);
sr_err("Device read failed for %s with error %ld",
vxi->address, read_resp ? read_resp->error : 0);
- vxi->read_complete = read_resp->reason & (RRR_SIZE | RRR_TERM | RRR_END);
+ g_free(read_resp->data.data_val);
+ read_resp->data.data_val = NULL;
+ vxi->read_complete = read_resp->reason & (RRR_TERM | RRR_END);
.priv_size = sizeof(struct scpi_vxi),
.dev_inst_new = scpi_vxi_dev_inst_new,
.open = scpi_vxi_open,
.priv_size = sizeof(struct scpi_vxi),
.dev_inst_new = scpi_vxi_dev_inst_new,
.open = scpi_vxi_open,
.source_add = scpi_vxi_source_add,
.source_remove = scpi_vxi_source_remove,
.send = scpi_vxi_send,
.source_add = scpi_vxi_source_add,
.source_remove = scpi_vxi_source_remove,
.send = scpi_vxi_send,