Signed-off-by: Bartosz Golaszewski <bgolaszew...@baylibre.com>
---
 Makefile.am                           |   6 ++
 configure.ac                          |   2 +
 src/drivers.c                         |   6 ++
 src/hardware/baylibre-acme/api.c      | 191 ++++++++++++++++++++++++++++++++++
 src/hardware/baylibre-acme/protocol.c |  40 +++++++
 src/hardware/baylibre-acme/protocol.h |  44 ++++++++
 6 files changed, 289 insertions(+)
 create mode 100644 src/hardware/baylibre-acme/api.c
 create mode 100644 src/hardware/baylibre-acme/protocol.c
 create mode 100644 src/hardware/baylibre-acme/protocol.h

diff --git a/Makefile.am b/Makefile.am
index 319f932..9c03973 100644
--- a/Makefile.am
+++ b/Makefile.am
@@ -140,6 +140,12 @@ libsigrok_la_SOURCES += \
        src/hardware/atten-pps3xxx/protocol.c \
        src/hardware/atten-pps3xxx/api.c
 endif
+if HW_BAYLIBRE_ACME
+libsigrok_la_SOURCES += \
+       src/hardware/baylibre-acme/protocol.h \
+       src/hardware/baylibre-acme/protocol.c \
+       src/hardware/baylibre-acme/api.c
+endif
 if HW_BEAGLELOGIC
 libsigrok_la_SOURCES += \
        src/hardware/beaglelogic/beaglelogic.h \
diff --git a/configure.ac b/configure.ac
index 595dafe..1c3fa14 100644
--- a/configure.ac
+++ b/configure.ac
@@ -109,6 +109,7 @@ DRIVER([Agilent DMM], [agilent-dmm])
 DRIVER([Appa 55II], [appa-55ii])
 DRIVER([ASIX SIGMA/SIGMA2], [asix-sigma])
 DRIVER([Atten PPS3xxx], [atten-pps3xxx])
+DRIVER([BayLibre ACME], [baylibre-acme])
 DRIVER([BeagleLogic], [beaglelogic])
 DRIVER([Brymen BM86x], [brymen-bm86x])
 DRIVER([Brymen DMM], [brymen-dmm])
@@ -473,6 +474,7 @@ DRIVER2([HW_AGILENT_DMM], [$HW_AGILENT_DMM], 
[HAVE_HW_AGILENT_DMM])
 DRIVER2([HW_APPA_55II], [$HW_APPA_55II], [HAVE_HW_APPA_55II])
 DRIVER2([HW_ASIX_SIGMA], [$HW_ASIX_SIGMA], [HAVE_HW_ASIX_SIGMA])
 DRIVER2([HW_ATTEN_PPS3XXX], [$HW_ATTEN_PPS3XXX], [HAVE_HW_ATTEN_PPS3XXX])
+DRIVER2([HW_BAYLIBRE_ACME], [$HW_BAYLIBRE_ACME], [HAVE_HW_BAYLIBRE_ACME])
 DRIVER2([HW_BEAGLELOGIC], [$HW_BEAGLELOGIC], [HAVE_HW_BEAGLELOGIC])
 DRIVER2([HW_BRYMEN_BM86X], [$HW_BRYMEN_BM86X], [HAVE_HW_BRYMEN_BM86X])
 DRIVER2([HW_BRYMEN_DMM], [$HW_BRYMEN_DMM], [HAVE_HW_BRYMEN_DMM])
diff --git a/src/drivers.c b/src/drivers.c
index 9b970fc..5421328 100644
--- a/src/drivers.c
+++ b/src/drivers.c
@@ -33,6 +33,9 @@ extern SR_PRIV struct sr_dev_driver asix_sigma_driver_info;
 #ifdef HAVE_HW_ATTEN_PPS3XXX
 extern SR_PRIV struct sr_dev_driver atten_pps3203_driver_info;
 #endif
+#ifdef HAVE_HW_BAYLIBRE_ACME
+extern SR_PRIV struct sr_dev_driver baylibre_acme_driver_info;
+#endif
 #ifdef HAVE_HW_BEAGLELOGIC
 extern SR_PRIV struct sr_dev_driver beaglelogic_driver_info;
 #endif
@@ -229,6 +232,9 @@ SR_PRIV struct sr_dev_driver *drivers_list[] = {
 #ifdef HAVE_HW_ATTEN_PPS3XXX
        &atten_pps3203_driver_info,
 #endif
+#ifdef HAVE_HW_BAYLIBRE_ACME
+       &baylibre_acme_driver_info,
+#endif
 #ifdef HAVE_HW_BEAGLELOGIC
        &beaglelogic_driver_info,
 #endif
diff --git a/src/hardware/baylibre-acme/api.c b/src/hardware/baylibre-acme/api.c
new file mode 100644
index 0000000..b13e2e0
--- /dev/null
+++ b/src/hardware/baylibre-acme/api.c
@@ -0,0 +1,191 @@
+/*
+ * This file is part of the libsigrok project.
+ *
+ * Copyright (C) 2015 Bartosz Golaszewski <bgolaszew...@baylibre.com>
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program.  If not, see <http://www.gnu.org/licenses/>.
+ */
+
+#include "protocol.h"
+
+SR_PRIV struct sr_dev_driver baylibre_acme_driver_info;
+static struct sr_dev_driver *di = &baylibre_acme_driver_info;
+
+static int init(struct sr_context *sr_ctx)
+{
+       return std_init(sr_ctx, di, LOG_PREFIX);
+}
+
+static GSList *scan(GSList *options)
+{
+       struct drv_context *drvc;
+       GSList *devices;
+
+       (void)options;
+
+       devices = NULL;
+       drvc = di->priv;
+       drvc->instances = NULL;
+
+       /* TODO: scan for devices, either based on a SR_CONF_CONN option
+        * or on a USB scan. */
+
+       return devices;
+}
+
+static GSList *dev_list(void)
+{
+       return ((struct drv_context *)(di->priv))->instances;
+}
+
+static int dev_clear(void)
+{
+       return std_dev_clear(di, NULL);
+}
+
+static int dev_open(struct sr_dev_inst *sdi)
+{
+       (void)sdi;
+
+       /* TODO: get handle from sdi->conn and open it. */
+
+       sdi->status = SR_ST_ACTIVE;
+
+       return SR_OK;
+}
+
+static int dev_close(struct sr_dev_inst *sdi)
+{
+       (void)sdi;
+
+       /* TODO: get handle from sdi->conn and close it. */
+
+       sdi->status = SR_ST_INACTIVE;
+
+       return SR_OK;
+}
+
+static int cleanup(void)
+{
+       dev_clear();
+
+       /* TODO: free other driver resources, if any. */
+
+       return SR_OK;
+}
+
+static int config_get(uint32_t key, GVariant **data, const struct sr_dev_inst 
*sdi,
+               const struct sr_channel_group *cg)
+{
+       int ret;
+
+       (void)sdi;
+       (void)data;
+       (void)cg;
+
+       ret = SR_OK;
+       switch (key) {
+       /* TODO */
+       default:
+               return SR_ERR_NA;
+       }
+
+       return ret;
+}
+
+static int config_set(uint32_t key, GVariant *data, const struct sr_dev_inst 
*sdi,
+               const struct sr_channel_group *cg)
+{
+       int ret;
+
+       (void)data;
+       (void)cg;
+
+       if (sdi->status != SR_ST_ACTIVE)
+               return SR_ERR_DEV_CLOSED;
+
+       ret = SR_OK;
+       switch (key) {
+       /* TODO */
+       default:
+               ret = SR_ERR_NA;
+       }
+
+       return ret;
+}
+
+static int config_list(uint32_t key, GVariant **data, const struct sr_dev_inst 
*sdi,
+               const struct sr_channel_group *cg)
+{
+       int ret;
+
+       (void)sdi;
+       (void)data;
+       (void)cg;
+
+       ret = SR_OK;
+       switch (key) {
+       /* TODO */
+       default:
+               return SR_ERR_NA;
+       }
+
+       return ret;
+}
+
+static int dev_acquisition_start(const struct sr_dev_inst *sdi,
+               void *cb_data)
+{
+       (void)sdi;
+       (void)cb_data;
+
+       if (sdi->status != SR_ST_ACTIVE)
+               return SR_ERR_DEV_CLOSED;
+
+       /* TODO: configure hardware, reset acquisition state, set up
+        * callbacks and send header packet. */
+
+       return SR_OK;
+}
+
+static int dev_acquisition_stop(struct sr_dev_inst *sdi, void *cb_data)
+{
+       (void)cb_data;
+
+       if (sdi->status != SR_ST_ACTIVE)
+               return SR_ERR_DEV_CLOSED;
+
+       /* TODO: stop acquisition. */
+
+       return SR_OK;
+}
+
+SR_PRIV struct sr_dev_driver baylibre_acme_driver_info = {
+       .name = "baylibre-acme",
+       .longname = "baylibre-acme",
+       .api_version = 1,
+       .init = init,
+       .cleanup = cleanup,
+       .scan = scan,
+       .dev_list = dev_list,
+       .dev_clear = dev_clear,
+       .config_get = config_get,
+       .config_set = config_set,
+       .config_list = config_list,
+       .dev_open = dev_open,
+       .dev_close = dev_close,
+       .dev_acquisition_start = dev_acquisition_start,
+       .dev_acquisition_stop = dev_acquisition_stop,
+       .priv = NULL,
+};
diff --git a/src/hardware/baylibre-acme/protocol.c 
b/src/hardware/baylibre-acme/protocol.c
new file mode 100644
index 0000000..b9f8096
--- /dev/null
+++ b/src/hardware/baylibre-acme/protocol.c
@@ -0,0 +1,40 @@
+/*
+ * This file is part of the libsigrok project.
+ *
+ * Copyright (C) 2015 Bartosz Golaszewski <bgolaszew...@baylibre.com>
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program.  If not, see <http://www.gnu.org/licenses/>.
+ */
+
+#include "protocol.h"
+
+SR_PRIV int baylibre_acme_receive_data(int fd, int revents, void *cb_data)
+{
+       const struct sr_dev_inst *sdi;
+       struct dev_context *devc;
+
+       (void)fd;
+
+       if (!(sdi = cb_data))
+               return TRUE;
+
+       if (!(devc = sdi->priv))
+               return TRUE;
+
+       if (revents == G_IO_IN) {
+               /* TODO */
+       }
+
+       return TRUE;
+}
diff --git a/src/hardware/baylibre-acme/protocol.h 
b/src/hardware/baylibre-acme/protocol.h
new file mode 100644
index 0000000..599fdd9
--- /dev/null
+++ b/src/hardware/baylibre-acme/protocol.h
@@ -0,0 +1,44 @@
+/*
+ * This file is part of the libsigrok project.
+ *
+ * Copyright (C) 2015 Bartosz Golaszewski <bgolaszew...@baylibre.com>
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program.  If not, see <http://www.gnu.org/licenses/>.
+ */
+
+#ifndef LIBSIGROK_HARDWARE_BAYLIBRE_ACME_PROTOCOL_H
+#define LIBSIGROK_HARDWARE_BAYLIBRE_ACME_PROTOCOL_H
+
+#include <stdint.h>
+#include <glib.h>
+#include "libsigrok.h"
+#include "libsigrok-internal.h"
+
+#define LOG_PREFIX "baylibre-acme"
+
+/** Private, per-device-instance driver context. */
+struct dev_context {
+       /* Model-specific information */
+
+       /* Acquisition settings */
+
+       /* Operational state */
+
+       /* Temporary state across callbacks */
+
+};
+
+SR_PRIV int baylibre_acme_receive_data(int fd, int revents, void *cb_data);
+
+#endif
-- 
2.1.4


------------------------------------------------------------------------------
Dive into the World of Parallel Programming. The Go Parallel Website,
sponsored by Intel and developed in partnership with Slashdot Media, is your
hub for all things parallel software development, from weekly thought
leadership blogs to news, videos, case studies, tutorials and more. Take a
look and join the conversation now. http://goparallel.sourceforge.net/
_______________________________________________
sigrok-devel mailing list
sigrok-devel@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/sigrok-devel

Reply via email to