]> sigrok.org Git - libsigrok.git/blobdiff - src/hardware/baylibre-acme/protocol.h
output/csv: use intermediate time_t var, silence compiler warning
[libsigrok.git] / src / hardware / baylibre-acme / protocol.h
index 599fdd98c27d179eedd6159d3a475e0ad0f62169..2425c992648f72ebdce4e0525bb8f79ac36d2147 100644 (file)
 
 #include <stdint.h>
 #include <glib.h>
-#include "libsigrok.h"
+#include <unistd.h>
+#include <libsigrok/libsigrok.h>
 #include "libsigrok-internal.h"
 
 #define LOG_PREFIX "baylibre-acme"
 
-/** Private, per-device-instance driver context. */
-struct dev_context {
-       /* Model-specific information */
+/* We support up to 8 energy/temperature probes. */
+#define MAX_PROBES             8
+
+/*
+ * Temperature probes can be connected to the last four ports on the
+ * ACME cape. When scanning, first look for temperature probes starting
+ * from this index.
+ */
+#define TEMP_PRB_START_INDEX   4
 
-       /* Acquisition settings */
+#define ENRG_PROBE_NAME                "ina226"
+#define TEMP_PROBE_NAME                "tmp435"
 
-       /* Operational state */
+/* For the user we number the probes starting from 1. */
+#define PROBE_NUM(n) ((n) + 1)
 
-       /* Temporary state across callbacks */
+enum probe_type {
+       PROBE_ENRG = 1,
+       PROBE_TEMP,
+};
+
+struct dev_context {
+       uint64_t samplerate;
+       struct sr_sw_limits limits;
 
+       uint32_t num_channels;
+       uint64_t samples_missed;
+       int timer_fd;
+       GIOChannel *channel;
 };
 
-SR_PRIV int baylibre_acme_receive_data(int fd, int revents, void *cb_data);
+SR_PRIV uint8_t bl_acme_get_enrg_addr(int index);
+SR_PRIV uint8_t bl_acme_get_temp_addr(int index);
+
+SR_PRIV gboolean bl_acme_is_sane(void);
+
+SR_PRIV gboolean bl_acme_detect_probe(unsigned int addr,
+                                     int prb_num, const char *prb_name);
+SR_PRIV gboolean bl_acme_register_probe(struct sr_dev_inst *sdi, int type,
+                                       unsigned int addr, int prb_num);
+
+SR_PRIV int bl_acme_get_probe_type(const struct sr_channel_group *cg);
+SR_PRIV int bl_acme_probe_has_pws(const struct sr_channel_group *cg);
+
+SR_PRIV void bl_acme_maybe_set_update_interval(const struct sr_dev_inst *sdi,
+                                              uint64_t samplerate);
+
+SR_PRIV int bl_acme_get_shunt(const struct sr_channel_group *cg,
+                             uint64_t *shunt);
+SR_PRIV int bl_acme_set_shunt(const struct sr_channel_group *cg,
+                             uint64_t shunt);
+SR_PRIV int bl_acme_read_power_state(const struct sr_channel_group *cg,
+                                    gboolean *off);
+SR_PRIV int bl_acme_set_power_off(const struct sr_channel_group *cg,
+                                 gboolean off);
+
+SR_PRIV int bl_acme_receive_data(int fd, int revents, void *cb_data);
+
+SR_PRIV int bl_acme_open_channel(struct sr_channel *ch);
 
+SR_PRIV void bl_acme_close_channel(struct sr_channel *ch);
 #endif