]> sigrok.org Git - libsigrok.git/blobdiff - hardware/center-3xx/protocol.h
center-3xx: Initial Center 309 / Voltcraft K204 support.
[libsigrok.git] / hardware / center-3xx / protocol.h
index f3bda5668a31843be6bbb96784d0a8102a8002ae..10179db31cf6bc7f25b98c475b2257e2f942818c 100644 (file)
@@ -22,6 +22,9 @@
 #define LIBSIGROK_HARDWARE_CENTER_3XX_PROTOCOL_H
 
 #include <stdint.h>
+#include <string.h>
+#include <ctype.h>
+#include <math.h>
 #include <glib.h>
 #include "libsigrok.h"
 #include "libsigrok-internal.h"
 #define sr_warn(s, args...) sr_warn(LOG_PREFIX s, ## args)
 #define sr_err(s, args...) sr_err(LOG_PREFIX s, ## args)
 
+/* Note: When adding entries here, don't forget to update CENTER_DEV_COUNT. */
+enum {
+       CENTER_309,
+       VOLTCRAFT_K204,
+};
+
+#define CENTER_DEV_COUNT 2
+
+struct center_dev_info {
+       char *vendor;
+       char *device;
+       char *conn;
+       int num_channels;
+       uint32_t max_sample_points;
+       uint8_t packet_size;
+       gboolean (*packet_valid)(const uint8_t *);
+       struct sr_dev_driver *di;
+       int (*receive_data)(int, int, void *);
+};
+
+extern SR_PRIV const struct center_dev_info center_devs[CENTER_DEV_COUNT];
+
+#define SERIAL_BUFSIZE 256
+
 /** Private, per-device-instance driver context. */
 struct dev_context {
-       /* Model-specific information */
+       /** The current sampling limit (in number of samples). */
+       uint64_t limit_samples;
 
-       /* Acquisition settings */
+       /** The current sampling limit (in ms). */
+       uint64_t limit_msec;
 
-       /* Operational state */
+       /** Opaque pointer passed in by the frontend. */
+       void *cb_data;
 
-       /* Temporary state across callbacks */
+       /** The current number of already received samples. */
+       uint64_t num_samples;
 
+       int64_t starttime;
+
+       uint8_t buf[SERIAL_BUFSIZE];
+       int bufoffset;
+       int buflen;
 };
 
-SR_PRIV int center_3xx_receive_data(int fd, int revents, void *cb_data);
+SR_PRIV gboolean center_3xx_packet_valid(const uint8_t *buf);
+
+SR_PRIV int receive_data_CENTER_309(int fd, int revents, void *cb_data);
+SR_PRIV int receive_data_VOLTCRAFT_K204(int fd, int revents, void *cb_data);
 
 #endif