#include "libsigrok.h"
#include "libsigrok-internal.h"
-/* Message logging helpers with driver-specific prefix string. */
-#define DRIVER_LOG_DOMAIN "virtual-session: "
-#define sr_log(l, s, args...) sr_log(l, DRIVER_LOG_DOMAIN s, ## args)
-#define sr_spew(s, args...) sr_spew(DRIVER_LOG_DOMAIN s, ## args)
-#define sr_dbg(s, args...) sr_dbg(DRIVER_LOG_DOMAIN s, ## args)
-#define sr_info(s, args...) sr_info(DRIVER_LOG_DOMAIN s, ## args)
-#define sr_warn(s, args...) sr_warn(DRIVER_LOG_DOMAIN s, ## args)
-#define sr_err(s, args...) sr_err(DRIVER_LOG_DOMAIN s, ## args)
+/* Message logging helpers with subsystem-specific prefix string. */
+#define LOG_PREFIX "virtual-session: "
+#define sr_log(l, s, args...) sr_log(l, LOG_PREFIX s, ## args)
+#define sr_spew(s, args...) sr_spew(LOG_PREFIX s, ## args)
+#define sr_dbg(s, args...) sr_dbg(LOG_PREFIX s, ## args)
+#define sr_info(s, args...) sr_info(LOG_PREFIX s, ## args)
+#define sr_warn(s, args...) sr_warn(LOG_PREFIX s, ## args)
+#define sr_err(s, args...) sr_err(LOG_PREFIX s, ## args)
/* size of payloads sent across the session bus */
/** @cond PRIVATE */
struct zip_file *capfile;
int bytes_read;
uint64_t samplerate;
+ uint64_t total_samples;
int unitsize;
int num_probes;
};
0,
};
-static int receive_data(int fd, int revents, void *cb_data)
+static int receive_data(int fd, int revents, const struct sr_dev_inst *cb_sdi)
{
struct sr_dev_inst *sdi;
struct session_vdev *vdev;
logic.unitsize = vdev->unitsize;
logic.data = buf;
vdev->bytes_read += ret;
- sr_session_send(cb_data, &packet);
+ sr_session_send(cb_sdi, &packet);
} else {
/* done with this capture file */
zip_fclose(vdev->capfile);
if (!got_data) {
packet.type = SR_DF_END;
- sr_session_send(cb_data, &packet);
+ sr_session_send(cb_sdi, &packet);
sr_session_source_remove(-1);
}
} else
return SR_ERR;
break;
+ case SR_CONF_LIMIT_SAMPLES:
+ if (sdi) {
+ vdev = sdi->priv;
+ *data = g_variant_new_uint64(vdev->total_samples);
+ } else
+ return SR_ERR;
+ break;
default:
return SR_ERR_ARG;
}
case SR_CONF_CAPTURE_UNITSIZE:
vdev->unitsize = g_variant_get_uint64(data);
break;
+ case SR_CONF_LIMIT_SAMPLES:
+ vdev->total_samples = g_variant_get_uint64(data);
+ break;
case SR_CONF_CAPTURE_NUM_PROBES:
vdev->num_probes = g_variant_get_uint64(data);
break;
switch (key) {
case SR_CONF_DEVICE_OPTIONS:
- *data = g_variant_new_fixed_array(G_VARIANT_TYPE_INT32,
- hwcaps, ARRAY_SIZE(hwcaps), sizeof(int32_t));
+// *data = g_variant_new_fixed_array(G_VARIANT_TYPE_INT32,
+// hwcaps, ARRAY_SIZE(hwcaps), sizeof(int32_t));
+ *data = g_variant_new_from_data(G_VARIANT_TYPE("ai"),
+ hwcaps, ARRAY_SIZE(hwcaps)*sizeof(int32_t), TRUE, NULL, NULL);
break;
default:
return SR_ERR_ARG;
}
/* Send header packet to the session bus. */
- std_session_send_df_header(cb_data, DRIVER_LOG_DOMAIN);
+ std_session_send_df_header(sdi, LOG_PREFIX);
/* freewheeling source */
- sr_session_source_add(-1, 0, 0, receive_data, cb_data);
+ sr_session_source_add(-1, 0, 0, receive_data, sdi);
return SR_OK;
}