From: Bert Vermeulen Date: Mon, 10 Sep 2012 20:31:29 +0000 (+0200) Subject: fluke-dmm: initial driver skeleton X-Git-Tag: dsupstream~692 X-Git-Url: https://sigrok.org/gitaction?a=commitdiff_plain;h=883a2e9e71d4d0f84d9f8df6a6a5e754052bad8a;p=libsigrok.git fluke-dmm: initial driver skeleton --- diff --git a/configure.ac b/configure.ac index 341df8e2..7b47ec8e 100644 --- a/configure.ac +++ b/configure.ac @@ -113,6 +113,15 @@ if test "x$LA_CHRONOVU_LA8" = "xyes"; then AC_DEFINE(HAVE_LA_CHRONOVU_LA8, 1, [ChronoVu LA8 support]) fi +AC_ARG_ENABLE(fluke-dmm, AC_HELP_STRING([--enable-fluke-dmm], + [Enable Fluke DMM support. [default=yes]]), + [HW_FLUKE_DMM="$enableval"], + [HW_FLUKE_DMM=yes]) +AM_CONDITIONAL(HW_FLUKE_DMM, test x$HW_FLUKE_DMM = xyes) +if test "x$HW_FLUKE_DMM" = "xyes"; then + AC_DEFINE(HAVE_HW_FLUKE_DMM, 1, [Fluke DMM support]) +fi + AC_ARG_ENABLE(fx2lafw, AC_HELP_STRING([--enable-fx2lafw], [enable fx2lafw support (for FX2 LAs). [default=yes]]), [LA_FX2LAFW="$enableval"], @@ -303,6 +312,7 @@ AC_CONFIG_FILES([Makefile hardware/chronovu-la8/Makefile hardware/common/Makefile hardware/demo/Makefile + hardware/fluke-dmm/Makefile hardware/fx2lafw/Makefile hardware/genericdmm/Makefile hardware/link-mso19/Makefile @@ -346,6 +356,7 @@ echo " - Agilent DMM..................... $HW_AGILENT_DMM" echo " - ASIX SIGMA/SIGMA2............... $LA_ASIX_SIGMA" echo " - ChronoVu LA8.................... $LA_CHRONOVU_LA8" echo " - Demo driver..................... $LA_DEMO" +echo " - Fluke DMM....................... $HW_FLUKE_DMM" echo " - fx2lafw (for FX2 LAs)........... $LA_FX2LAFW" echo " - Generic DMM..................... $HW_GENERICDMM" echo " - Link MSO-19..................... $LA_LINK_MSO19" diff --git a/hardware/Makefile.am b/hardware/Makefile.am index d986d884..db5691d5 100644 --- a/hardware/Makefile.am +++ b/hardware/Makefile.am @@ -24,6 +24,7 @@ SUBDIRS = \ chronovu-la8 \ common \ demo \ + fluke-dmm \ fx2lafw \ genericdmm \ link-mso19 \ @@ -58,6 +59,10 @@ if LA_DEMO libsigrokhardware_la_LIBADD += demo/libsigrokhwdemo.la endif +if HW_FLUKE_DMM +libsigrokhardware_la_LIBADD += fluke-dmm/libsigrokhwflukedmm.la +endif + if LA_FX2LAFW libsigrokhardware_la_LIBADD += fx2lafw/libsigrokhwfx2lafw.la endif diff --git a/hardware/fluke-dmm/Makefile.am b/hardware/fluke-dmm/Makefile.am new file mode 100644 index 00000000..f99d331d --- /dev/null +++ b/hardware/fluke-dmm/Makefile.am @@ -0,0 +1,31 @@ +## +## This file is part of the sigrok project. +## +## Copyright (C) 2012 Bert Vermeulen +## +## 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 . +## + +if HW_FLUKE_DMM + +# Local lib, this is NOT meant to be installed! +noinst_LTLIBRARIES = libsigrokhwflukedmm.la + +libsigrokhwflukedmm_la_SOURCES = \ + api.c + +libsigrokhwflukedmm_la_CFLAGS = \ + -I$(top_srcdir) + +endif diff --git a/hardware/fluke-dmm/api.c b/hardware/fluke-dmm/api.c new file mode 100644 index 00000000..1662afc4 --- /dev/null +++ b/hardware/fluke-dmm/api.c @@ -0,0 +1,202 @@ +/* + * This file is part of the sigrok project. + * + * Copyright (C) 2012 Bert Vermeulen + * + * 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 . + */ + +#include +#include "libsigrok.h" +#include "libsigrok-internal.h" +#include "config.h" + + +SR_PRIV struct sr_dev_driver driver_info; +static struct sr_dev_driver *di = &driver_info; + +/* TODO move to header file */ +struct drv_context { GSList *instances; }; +struct dev_context { }; + +/* Properly close and free all devices. */ +static int clear_instances(void) +{ + struct sr_dev_inst *sdi; + struct drv_context *drvc; + struct dev_context *devc; + GSList *l; + + drvc = di->priv; + for (l = drvc->instances; l; l = l->next) { + if (!(sdi = l->data)) { + /* Log error, but continue cleaning up the rest. */ + sr_err("TODO: %s: sdi was NULL, continuing", __func__); + continue; + } + if (!(devc = sdi->priv)) { + /* Log error, but continue cleaning up the rest. */ + sr_err("TODO: %s: sdi->priv was NULL, continuing", __func__); + continue; + } + + /* TODO */ + + sr_dev_inst_free(sdi); + } + + g_slist_free(drvc->instances); + drvc->instances = NULL; + + return SR_OK; +} + +static int hw_init(void) +{ + struct drv_context *drvc; + + if (!(drvc = g_try_malloc0(sizeof(struct drv_context)))) { + sr_err("TODO: driver context malloc failed."); + return SR_ERR; + } + + /* TODO */ + + di->priv = drvc; + + return SR_OK; +} + +static GSList *hw_scan(GSList *options) +{ + struct drv_context *drvc; + GSList *devices; + + (void)options; + devices = NULL; + drvc = di->priv; + drvc->instances = NULL; + + /* TODO */ + + return devices; +} + +static GSList *hw_dev_list(void) +{ + struct drv_context *drvc; + + drvc = di->priv; + + return drvc->instances; +} + +static int hw_dev_open(struct sr_dev_inst *sdi) +{ + + /* TODO */ + + return SR_OK; +} + +static int hw_dev_close(struct sr_dev_inst *sdi) +{ + + /* TODO */ + + return SR_OK; +} + +static int hw_cleanup(void) +{ + + clear_instances(); + + /* TODO */ + + return SR_OK; +} + +static int hw_info_get(int info_id, const void **data, + const struct sr_dev_inst *sdi) +{ + + + switch (info_id) { + /* TODO */ + default: + return SR_ERR_ARG; + } + + return SR_OK; +} + +static int hw_dev_config_set(const struct sr_dev_inst *sdi, int hwcap, + const void *value) +{ + int ret; + + if (sdi->status != SR_ST_ACTIVE) + return SR_ERR; + + ret = SR_OK; + switch (hwcap) { + /* TODO */ + default: + ret = SR_ERR_ARG; + } + + return ret; +} + +static int hw_dev_acquisition_start(const struct sr_dev_inst *sdi, + void *cb_data) +{ + + /* TODO */ + + return SR_OK; +} + +static int hw_dev_acquisition_stop(const struct sr_dev_inst *sdi, + void *cb_data) +{ + + (void)cb_data; + + if (sdi->status != SR_ST_ACTIVE) + return SR_ERR; + + /* TODO */ + + return SR_OK; +} + +SR_PRIV struct sr_dev_driver driver_info = { + .name = "fluke-dmm", + .longname = "Fluke 18x/28x series DMMs", + .api_version = 1, + .init = hw_init, + .cleanup = hw_cleanup, + .scan = hw_scan, + .dev_list = hw_dev_list, + .dev_clear = clear_instances, + .dev_open = hw_dev_open, + .dev_close = hw_dev_close, + .info_get = hw_info_get, + .dev_config_set = hw_dev_config_set, + .dev_acquisition_start = hw_dev_acquisition_start, + .dev_acquisition_stop = hw_dev_acquisition_stop, + .priv = NULL, +};