#ifdef HAVE_LIBUSB_1_0
#include <libusb.h>
#endif
+#ifdef HAVE_LIBSERIALPORT
+#include <libserialport.h>
+#endif
/**
* @file
};
#endif
-#define SERIAL_PARITY_NONE 0
-#define SERIAL_PARITY_EVEN 1
-#define SERIAL_PARITY_ODD 2
+#ifdef HAVE_LIBSERIALPORT
+#define SERIAL_PARITY_NONE SP_PARITY_NONE
+#define SERIAL_PARITY_EVEN SP_PARITY_EVEN
+#define SERIAL_PARITY_ODD SP_PARITY_ODD
struct sr_serial_dev_inst {
char *port;
char *serialcomm;
int fd;
+ int nonblocking;
+ struct sp_port *data;
+};
+#endif
+
+struct sr_usbtmc_dev_inst {
+ char *device;
+ int fd;
};
/* Private driver context. */
SR_PRIV void sr_usb_dev_inst_free(struct sr_usb_dev_inst *usb);
#endif
+#ifdef HAVE_LIBSERIALPORT
/* Serial-specific instances */
SR_PRIV struct sr_serial_dev_inst *sr_serial_dev_inst_new(const char *port,
const char *serialcomm);
SR_PRIV void sr_serial_dev_inst_free(struct sr_serial_dev_inst *serial);
+#endif
+/* USBTMC-specific instances */
+SR_PRIV struct sr_usbtmc_dev_inst *sr_usbtmc_dev_inst_new(const char *device);
+SR_PRIV void sr_usbtmc_dev_inst_free(struct sr_usbtmc_dev_inst *usbtmc);
/*--- hwdriver.c ------------------------------------------------------------*/
/*--- session.c -------------------------------------------------------------*/
+struct sr_session {
+ /** List of struct sr_dev pointers. */
+ GSList *devs;
+ /** List of struct datafeed_callback pointers. */
+ GSList *datafeed_callbacks;
+ GTimeVal starttime;
+ gboolean running;
+
+ unsigned int num_sources;
+
+ /*
+ * Both "sources" and "pollfds" are of the same size and contain pairs
+ * of descriptor and callback function. We can not embed the GPollFD
+ * into the source struct since we want to be able to pass the array
+ * of all poll descriptors to g_poll().
+ */
+ struct source *sources;
+ GPollFD *pollfds;
+ int source_timeout;
+
+ /*
+ * These are our synchronization primitives for stopping the session in
+ * an async fashion. We need to make sure the session is stopped from
+ * within the session thread itself.
+ */
+ GMutex stop_mutex;
+ gboolean abort_session;
+};
+
SR_PRIV int sr_session_send(const struct sr_dev_inst *sdi,
const struct sr_datafeed_packet *packet);
SR_PRIV int sr_session_stop_sync(void);
SR_PRIV int std_init(struct sr_context *sr_ctx, struct sr_dev_driver *di,
const char *prefix);
+#ifdef HAVE_LIBSERIALPORT
SR_PRIV int std_dev_acquisition_stop_serial(struct sr_dev_inst *sdi,
void *cb_data, dev_close_t dev_close_fn,
struct sr_serial_dev_inst *serial, const char *prefix);
+#endif
SR_PRIV int std_session_send_df_header(const struct sr_dev_inst *sdi,
const char *prefix);
SR_PRIV int std_dev_clear(const struct sr_dev_driver *driver,
/*--- hardware/common/serial.c ----------------------------------------------*/
+#ifdef HAVE_LIBSERIALPORT
enum {
SERIAL_RDWR = 1,
SERIAL_RDONLY = 2,
uint8_t *buf, size_t *buflen,
size_t packet_size, packet_valid_t is_valid,
uint64_t timeout_ms, int baudrate);
+#endif
/*--- hardware/common/ezusb.c -----------------------------------------------*/
gboolean is_unitless;
};
+#ifdef HAVE_LIBSERIALPORT
SR_PRIV int sr_metex14_packet_request(struct sr_serial_dev_inst *serial);
+#endif
SR_PRIV gboolean sr_metex14_packet_valid(const uint8_t *buf);
SR_PRIV int sr_metex14_parse(const uint8_t *buf, float *floatval,
struct sr_datafeed_analog *analog, void *info);