summaryrefslogtreecommitdiffstats
path: root/clients
diff options
context:
space:
mode:
authorTimothy Pearson <kb9vqf@pearsoncomputing.net>2014-02-27 00:59:35 -0600
committerTimothy Pearson <kb9vqf@pearsoncomputing.net>2014-02-27 00:59:35 -0600
commit1fbfe130665dc4bce56869ed9158531137406129 (patch)
tree384969dfeec5cd31d2e71e9cdf068b84d27eb8b7 /clients
parent6ae28a47f75bc1096b056ba398a558bd9fcacf73 (diff)
downloadulab-1fbfe130665dc4bce56869ed9158531137406129.tar.gz
ulab-1fbfe130665dc4bce56869ed9158531137406129.zip
First pass of logic analyzer functionality (client and FPGA core)
Diffstat (limited to 'clients')
-rw-r--r--clients/tde/src/part/Makefile.am2
-rw-r--r--clients/tde/src/part/commanalyzer/part.cpp2
-rw-r--r--clients/tde/src/part/logicanalyzer/Makefile.am12
-rw-r--r--clients/tde/src/part/logicanalyzer/Makefile.in908
-rw-r--r--clients/tde/src/part/logicanalyzer/hi16-action-libremotelab_logicanalyzer.pngbin0 -> 684 bytes
-rw-r--r--clients/tde/src/part/logicanalyzer/hi64-action-libremotelab_logicanalyzer.pngbin0 -> 3816 bytes
-rw-r--r--clients/tde/src/part/logicanalyzer/layout.ui159
-rw-r--r--clients/tde/src/part/logicanalyzer/part.cpp1275
-rw-r--r--clients/tde/src/part/logicanalyzer/part.h94
-rw-r--r--clients/tde/src/part/scope/part.cpp28
-rw-r--r--clients/tde/src/part/sensormonitor/part.cpp2
-rw-r--r--clients/tde/src/widgets/tracewidget.cpp167
-rw-r--r--clients/tde/src/widgets/tracewidget.h37
13 files changed, 2628 insertions, 58 deletions
diff --git a/clients/tde/src/part/Makefile.am b/clients/tde/src/part/Makefile.am
index 17387e4..2e4b01a 100644
--- a/clients/tde/src/part/Makefile.am
+++ b/clients/tde/src/part/Makefile.am
@@ -1 +1 @@
-SUBDIRS = scope commanalyzer fpgaview fpgaprogram sensormonitor adminconsole adminusermgmt serialconsole prototerminal
+SUBDIRS = scope logicanalyzer commanalyzer fpgaview fpgaprogram sensormonitor adminconsole adminusermgmt serialconsole prototerminal
diff --git a/clients/tde/src/part/commanalyzer/part.cpp b/clients/tde/src/part/commanalyzer/part.cpp
index ac95cd1..f73b08e 100644
--- a/clients/tde/src/part/commanalyzer/part.cpp
+++ b/clients/tde/src/part/commanalyzer/part.cpp
@@ -89,7 +89,7 @@ CommAnalyzerPart::CommAnalyzerPart( TQWidget *parentWidget, const char *widgetNa
m_traceWidget->setZoomBoxEnabled(true);
m_base->traceZoomWidget->setSizePolicy(TQSizePolicy(TQSizePolicy::MinimumExpanding, TQSizePolicy::MinimumExpanding));
- m_base->traceZoomWidget->setTraceEnabled(0, true, false);
+ m_base->traceZoomWidget->setTraceEnabled(0, true, TraceWidget::SummaryText);
m_base->traceZoomWidget->setTraceName(0, "Trace 1");
m_base->traceZoomWidget->setTraceHorizontalUnits(0, "Hz");
m_base->traceZoomWidget->setTraceVerticalUnits(0, "dBm");
diff --git a/clients/tde/src/part/logicanalyzer/Makefile.am b/clients/tde/src/part/logicanalyzer/Makefile.am
new file mode 100644
index 0000000..cc29361
--- /dev/null
+++ b/clients/tde/src/part/logicanalyzer/Makefile.am
@@ -0,0 +1,12 @@
+INCLUDES = $(all_includes) -I$(top_srcdir)/src -I$(top_srcdir)/src/widgets $(KDE_INCLUDES)/tde
+KDE_CXXFLAGS = $(USE_EXCEPTIONS)
+METASOURCES = AUTO
+
+KDE_ICON = libremotelab_logicanalyzer
+
+#Part
+kde_module_LTLIBRARIES = libremotelab_logicanalyzer.la
+libremotelab_logicanalyzer_la_LIBADD = ../../widgets/libtracewidget.la ../../widgets/libfloatspinbox.la $(LIB_KFILE) $(LIB_TDEPARTS) $(LIB_TDEUI) $(LIB_QT)
+libremotelab_logicanalyzer_la_LDFLAGS = $(all_libraries) $(KDE_PLUGIN) -ltdecore -ltdeui -ltdeio -ltdefx -ltdekrbsocket -ltqtrla
+libremotelab_logicanalyzer_la_SOURCES = \
+ part.cpp layout.ui
diff --git a/clients/tde/src/part/logicanalyzer/Makefile.in b/clients/tde/src/part/logicanalyzer/Makefile.in
new file mode 100644
index 0000000..d07efc9
--- /dev/null
+++ b/clients/tde/src/part/logicanalyzer/Makefile.in
@@ -0,0 +1,908 @@
+# Makefile.in generated by automake 1.11.6 from Makefile.am.
+# KDE tags expanded automatically by am_edit - $Revision$
+# @configure_input@
+
+# Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002,
+# 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010, 2011 Free Software
+# Foundation, Inc.
+# This Makefile.in is free software; the Free Software Foundation
+# gives unlimited permission to copy and/or distribute it,
+# with or without modifications, as long as this notice is preserved.
+
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY, to the extent permitted by law; without
+# even the implied warranty of MERCHANTABILITY or FITNESS FOR A
+# PARTICULAR PURPOSE.
+
+@SET_MAKE@
+
+VPATH = @srcdir@
+am__make_dryrun = \
+ { \
+ am__dry=no; \
+ case $$MAKEFLAGS in \
+ *\\[\ \ ]*) \
+ echo 'am--echo: ; @echo "AM" OK' | $(MAKE) -f - 2>/dev/null \
+ | grep '^AM OK$$' >/dev/null || am__dry=yes;; \
+ *) \
+ for am__flg in $$MAKEFLAGS; do \
+ case $$am__flg in \
+ *=*|--*) ;; \
+ *n*) am__dry=yes; break;; \
+ esac; \
+ done;; \
+ esac; \
+ test $$am__dry = yes; \
+ }
+pkgdatadir = $(datadir)/@PACKAGE@
+pkgincludedir = $(includedir)/@PACKAGE@
+pkglibdir = $(libdir)/@PACKAGE@
+pkglibexecdir = $(libexecdir)/@PACKAGE@
+am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd
+install_sh_DATA = $(install_sh) -c -m 644
+install_sh_PROGRAM = $(install_sh) -c
+install_sh_SCRIPT = $(install_sh) -c
+INSTALL_HEADER = $(INSTALL_DATA)
+transform = $(program_transform_name)
+NORMAL_INSTALL = :
+PRE_INSTALL = :
+POST_INSTALL = :
+NORMAL_UNINSTALL = :
+PRE_UNINSTALL = :
+POST_UNINSTALL = :
+build_triplet = @build@
+host_triplet = @host@
+target_triplet = @target@
+subdir = src/part/logicanalyzer
+DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.in
+ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
+am__aclocal_m4_deps = $(top_srcdir)/acinclude.m4 \
+ $(top_srcdir)/configure.in
+am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
+ $(ACLOCAL_M4)
+mkinstalldirs = $(SHELL) $(top_srcdir)/admin/mkinstalldirs
+CONFIG_HEADER = $(top_builddir)/config.h
+CONFIG_CLEAN_FILES =
+CONFIG_CLEAN_VPATH_FILES =
+am__vpath_adj_setup = srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`;
+am__vpath_adj = case $$p in \
+ $(srcdir)/*) f=`echo "$$p" | sed "s|^$$srcdirstrip/||"`;; \
+ *) f=$$p;; \
+ esac;
+am__strip_dir = f=`echo $$p | sed -e 's|^.*/||'`;
+am__install_max = 40
+am__nobase_strip_setup = \
+ srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*|]/\\\\&/g'`
+am__nobase_strip = \
+ for p in $$list; do echo "$$p"; done | sed -e "s|$$srcdirstrip/||"
+am__nobase_list = $(am__nobase_strip_setup); \
+ for p in $$list; do echo "$$p $$p"; done | \
+ sed "s| $$srcdirstrip/| |;"' / .*\//!s/ .*/ ./; s,\( .*\)/[^/]*$$,\1,' | \
+ $(AWK) 'BEGIN { files["."] = "" } { files[$$2] = files[$$2] " " $$1; \
+ if (++n[$$2] == $(am__install_max)) \
+ { print $$2, files[$$2]; n[$$2] = 0; files[$$2] = "" } } \
+ END { for (dir in files) print dir, files[dir] }'
+am__base_list = \
+ sed '$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;s/\n/ /g' | \
+ sed '$$!N;$$!N;$$!N;$$!N;s/\n/ /g'
+am__uninstall_files_from_dir = { \
+ test -z "$$files" \
+ || { test ! -d "$$dir" && test ! -f "$$dir" && test ! -r "$$dir"; } \
+ || { echo " ( cd '$$dir' && rm -f" $$files ")"; \
+ $(am__cd) "$$dir" && rm -f $$files; }; \
+ }
+am__installdirs = "$(DESTDIR)$(kde_moduledir)"
+LTLIBRARIES = $(kde_module_LTLIBRARIES)
+am__DEPENDENCIES_1 =
+libremotelab_logicanalyzer_la_DEPENDENCIES = \
+ ../../widgets/libtracewidget.la \
+ ../../widgets/libfloatspinbox.la $(am__DEPENDENCIES_1) \
+ $(am__DEPENDENCIES_1) $(am__DEPENDENCIES_1)
+am_libremotelab_logicanalyzer_la_OBJECTS = part.lo
+#>- libremotelab_logicanalyzer_la_OBJECTS = \
+#>- $(am_libremotelab_logicanalyzer_la_OBJECTS)
+#>+ 4
+libremotelab_logicanalyzer_la_final_OBJECTS = libremotelab_logicanalyzer_la.all_cpp.lo
+libremotelab_logicanalyzer_la_nofinal_OBJECTS = part.lo layout.lo
+@KDE_USE_FINAL_FALSE@libremotelab_logicanalyzer_la_OBJECTS = $(libremotelab_logicanalyzer_la_nofinal_OBJECTS)
+@KDE_USE_FINAL_TRUE@libremotelab_logicanalyzer_la_OBJECTS = $(libremotelab_logicanalyzer_la_final_OBJECTS)
+#>- libremotelab_logicanalyzer_la_LINK = $(LIBTOOL) --tag=CXX \
+#>- $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=link $(CXXLD) \
+#>- $(AM_CXXFLAGS) $(CXXFLAGS) \
+#>- $(libremotelab_logicanalyzer_la_LDFLAGS) $(LDFLAGS) -o $@
+#>+ 4
+libremotelab_logicanalyzer_la_LINK = $(LIBTOOL) --tag=CXX \
+ $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=link $(CXXLD) \
+ $(AM_CXXFLAGS) $(CXXFLAGS) $(KDE_CXXFLAGS) \
+ $(libremotelab_logicanalyzer_la_LDFLAGS) $(LDFLAGS) -o $@
+DEFAULT_INCLUDES = -I.@am__isrc@ -I$(top_builddir)
+depcomp = $(SHELL) $(top_srcdir)/admin/depcomp
+am__depfiles_maybe = depfiles
+am__mv = mv -f
+#>- CXXCOMPILE = $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) \
+#>- $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS)
+#>+ 2
+CXXCOMPILE = $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) \
+ $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) $(KDE_CXXFLAGS)
+#>- LTCXXCOMPILE = $(LIBTOOL) --tag=CXX $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) \
+#>- --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) \
+#>- $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS)
+#>+ 3
+LTCXXCOMPILE = $(LIBTOOL) --tag=CXX $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) \
+ --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) \
+ $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) $(KDE_CXXFLAGS)
+CXXLD = $(CXX)
+#>- CXXLINK = $(LIBTOOL) --tag=CXX $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) \
+#>- --mode=link $(CXXLD) $(AM_CXXFLAGS) $(CXXFLAGS) $(AM_LDFLAGS) \
+#>- $(LDFLAGS) -o $@
+#>+ 3
+CXXLINK = $(LIBTOOL) --tag=CXX $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) \
+ --mode=link $(CXXLD) $(AM_CXXFLAGS) $(CXXFLAGS) $(KDE_CXXFLAGS) $(AM_LDFLAGS) \
+ $(LDFLAGS) -o $@
+SOURCES = $(libremotelab_logicanalyzer_la_SOURCES)
+DIST_SOURCES = $(libremotelab_logicanalyzer_la_SOURCES)
+am__can_run_installinfo = \
+ case $$AM_UPDATE_INFO_DIR in \
+ n|no|NO) false;; \
+ *) (install-info --version) >/dev/null 2>&1;; \
+ esac
+ETAGS = etags
+CTAGS = ctags
+#>- DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
+#>+ 1
+DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) $(KDE_DIST)
+ACLOCAL = @ACLOCAL@
+AMTAR = @AMTAR@
+AR = @AR@
+ARTSCCONFIG = @ARTSCCONFIG@
+AUTOCONF = @AUTOCONF@
+AUTODIRS = @AUTODIRS@
+AUTOHEADER = @AUTOHEADER@
+AUTOMAKE = @AUTOMAKE@
+AWK = @AWK@
+CC = @CC@
+CCDEPMODE = @CCDEPMODE@
+CFLAGS = @CFLAGS@
+CONF_FILES = @CONF_FILES@
+CPP = @CPP@
+CPPFLAGS = @CPPFLAGS@
+CXX = @CXX@
+CXXCPP = @CXXCPP@
+CXXDEPMODE = @CXXDEPMODE@
+CXXFLAGS = @CXXFLAGS@
+CYGPATH_W = @CYGPATH_W@
+DCOPIDL = @DCOPIDL@
+DCOPIDL2CPP = @DCOPIDL2CPP@
+DCOPIDLNG = @DCOPIDLNG@
+DCOP_DEPENDENCIES = @DCOP_DEPENDENCIES@
+DEFS = @DEFS@
+DEPDIR = @DEPDIR@
+DLLTOOL = @DLLTOOL@
+DOXYGEN = @DOXYGEN@
+DOXYGEN_PROJECT_NAME = @DOXYGEN_PROJECT_NAME@
+DOXYGEN_PROJECT_NUMBER = @DOXYGEN_PROJECT_NUMBER@
+DSYMUTIL = @DSYMUTIL@
+DUMPBIN = @DUMPBIN@
+ECHO_C = @ECHO_C@
+ECHO_N = @ECHO_N@
+ECHO_T = @ECHO_T@
+EGREP = @EGREP@
+ENABLE_PERMISSIVE_FLAG = @ENABLE_PERMISSIVE_FLAG@
+EXEEXT = @EXEEXT@
+FGREP = @FGREP@
+FRAMEWORK_COREAUDIO = @FRAMEWORK_COREAUDIO@
+GMSGFMT = @GMSGFMT@
+GREP = @GREP@
+HAVE_GCC_VISIBILITY = @HAVE_GCC_VISIBILITY@
+INSTALL = @INSTALL@
+INSTALL_DATA = @INSTALL_DATA@
+INSTALL_PROGRAM = @INSTALL_PROGRAM@
+INSTALL_SCRIPT = @INSTALL_SCRIPT@
+INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@
+KCFG_DEPENDENCIES = @KCFG_DEPENDENCIES@
+KCONFIG_COMPILER = @KCONFIG_COMPILER@
+KDECONFIG = @KDECONFIG@
+KDE_CHECK_PLUGIN = @KDE_CHECK_PLUGIN@
+KDE_EXTRA_RPATH = @KDE_EXTRA_RPATH@
+KDE_HAS_DOXYGEN = @KDE_HAS_DOXYGEN@
+KDE_HAVE_DOT = @KDE_HAVE_DOT@
+KDE_INCLUDES = @KDE_INCLUDES@
+KDE_LDFLAGS = @KDE_LDFLAGS@
+KDE_MT_LDFLAGS = @KDE_MT_LDFLAGS@
+KDE_MT_LIBS = @KDE_MT_LIBS@
+KDE_NO_UNDEFINED = @KDE_NO_UNDEFINED@
+KDE_PLUGIN = @KDE_PLUGIN@
+KDE_RPATH = @KDE_RPATH@
+KDE_USE_CLOSURE_FALSE = @KDE_USE_CLOSURE_FALSE@
+KDE_USE_CLOSURE_TRUE = @KDE_USE_CLOSURE_TRUE@
+KDE_USE_FINAL_FALSE = @KDE_USE_FINAL_FALSE@
+KDE_USE_FINAL_TRUE = @KDE_USE_FINAL_TRUE@
+KDE_USE_FPIE = @KDE_USE_FPIE@
+KDE_USE_NMCHECK_FALSE = @KDE_USE_NMCHECK_FALSE@
+KDE_USE_NMCHECK_TRUE = @KDE_USE_NMCHECK_TRUE@
+KDE_USE_PIE = @KDE_USE_PIE@
+KDE_XSL_STYLESHEET = @KDE_XSL_STYLESHEET@
+LD = @LD@
+LDFLAGS = @LDFLAGS@
+LDFLAGS_AS_NEEDED = @LDFLAGS_AS_NEEDED@
+LDFLAGS_NEW_DTAGS = @LDFLAGS_NEW_DTAGS@
+LIBCOMPAT = @LIBCOMPAT@
+LIBCRYPT = @LIBCRYPT@
+LIBDL = @LIBDL@
+LIBJPEG = @LIBJPEG@
+LIBOBJS = @LIBOBJS@
+LIBPNG = @LIBPNG@
+LIBPTHREAD = @LIBPTHREAD@
+LIBRESOLV = @LIBRESOLV@
+LIBS = @LIBS@
+LIBSM = @LIBSM@
+LIBSOCKET = @LIBSOCKET@
+LIBTOOL = @LIBTOOL@
+LIBTQT_LDFLAGS = @LIBTQT_LDFLAGS@
+LIBUCB = @LIBUCB@
+LIBUTIL = @LIBUTIL@
+LIBZ = @LIBZ@
+LIB_ARTS = @LIB_ARTS@
+LIB_KAB = @LIB_KAB@
+LIB_KDED = @LIB_KDED@
+LIB_KFM = @LIB_KFM@
+LIB_KJS = @LIB_KJS@
+LIB_KNEWSTUFF = @LIB_KNEWSTUFF@
+LIB_POLL = @LIB_POLL@
+LIB_QPE = @LIB_QPE@
+LIB_QT = @LIB_QT@
+LIB_QUI = @LIB_QUI@
+LIB_SMB = @LIB_SMB@
+LIB_TDEABC = @LIB_TDEABC@
+LIB_TDECORE = @LIB_TDECORE@
+LIB_TDEDNSSD = @LIB_TDEDNSSD@
+LIB_TDEFILE = @LIB_TDEFILE@
+LIB_TDEHTML = @LIB_TDEHTML@
+LIB_TDEIMPROXY = @LIB_TDEIMPROXY@
+LIB_TDEIO = @LIB_TDEIO@
+LIB_TDEPARTS = @LIB_TDEPARTS@
+LIB_TDEPIM = @LIB_TDEPIM@
+LIB_TDEPRINT = @LIB_TDEPRINT@
+LIB_TDESPELL = @LIB_TDESPELL@
+LIB_TDESYCOCA = @LIB_TDESYCOCA@
+LIB_TDEUI = @LIB_TDEUI@
+LIB_TDEUNITTEST = @LIB_TDEUNITTEST@
+LIB_TDEUTILS = @LIB_TDEUTILS@
+LIB_X11 = @LIB_X11@
+LIB_XEXT = @LIB_XEXT@
+LIB_XRENDER = @LIB_XRENDER@
+LIPO = @LIPO@
+LN_S = @LN_S@
+LTLIBOBJS = @LTLIBOBJS@
+MAKEINFO = @MAKEINFO@
+MAKETDEWIDGETS = @MAKETDEWIDGETS@
+MANIFEST_TOOL = @MANIFEST_TOOL@
+MCOPIDL = @MCOPIDL@
+MEINPROC = @MEINPROC@
+MKDIR_P = @MKDIR_P@
+MOC = @MOC@
+MSGFMT = @MSGFMT@
+NM = @NM@
+NMEDIT = @NMEDIT@
+NOOPT_CFLAGS = @NOOPT_CFLAGS@
+NOOPT_CXXFLAGS = @NOOPT_CXXFLAGS@
+OBJDUMP = @OBJDUMP@
+OBJEXT = @OBJEXT@
+OTOOL = @OTOOL@
+OTOOL64 = @OTOOL64@
+PACKAGE = @PACKAGE@
+PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@
+PACKAGE_NAME = @PACKAGE_NAME@
+PACKAGE_STRING = @PACKAGE_STRING@
+PACKAGE_TARNAME = @PACKAGE_TARNAME@
+PACKAGE_URL = @PACKAGE_URL@
+PACKAGE_VERSION = @PACKAGE_VERSION@
+PATH_SEPARATOR = @PATH_SEPARATOR@
+PERL = @PERL@
+PKG_CONFIG = @PKG_CONFIG@
+QTDOCDIR = @QTDOCDIR@
+QTE_NORTTI = @QTE_NORTTI@
+QT_INCLUDES = @QT_INCLUDES@
+QT_LDFLAGS = @QT_LDFLAGS@
+RANLIB = @RANLIB@
+SED = @SED@
+SET_MAKE = @SET_MAKE@
+SHELL = @SHELL@
+STRIP = @STRIP@
+TOPSUBDIRS = @TOPSUBDIRS@
+TQTDCOPIDL = @TQTDCOPIDL@
+TQTDCOPIDL2CPP = @TQTDCOPIDL2CPP@
+TQTDCOPIDLNG = @TQTDCOPIDLNG@
+TQTMCOPIDL = @TQTMCOPIDL@
+TQTMOC = @TQTMOC@
+UIC = @UIC@
+UIC_TR = @UIC_TR@
+USER_INCLUDES = @USER_INCLUDES@
+USER_LDFLAGS = @USER_LDFLAGS@
+USE_EXCEPTIONS = @USE_EXCEPTIONS@
+USE_RTTI = @USE_RTTI@
+USE_THREADS = @USE_THREADS@
+VERSION = @VERSION@
+WOVERLOADED_VIRTUAL = @WOVERLOADED_VIRTUAL@
+XGETTEXT = @XGETTEXT@
+XMKMF = @XMKMF@
+XMLLINT = @XMLLINT@
+X_EXTRA_LIBS = @X_EXTRA_LIBS@
+X_INCLUDES = @X_INCLUDES@
+X_LDFLAGS = @X_LDFLAGS@
+X_PRE_LIBS = @X_PRE_LIBS@
+X_RPATH = @X_RPATH@
+abs_builddir = @abs_builddir@
+abs_srcdir = @abs_srcdir@
+abs_top_builddir = @abs_top_builddir@
+abs_top_srcdir = @abs_top_srcdir@
+ac_ct_AR = @ac_ct_AR@
+ac_ct_CC = @ac_ct_CC@
+ac_ct_CXX = @ac_ct_CXX@
+ac_ct_DUMPBIN = @ac_ct_DUMPBIN@
+all_includes = @all_includes@
+all_libraries = @all_libraries@
+am__include = @am__include@
+am__leading_dot = @am__leading_dot@
+am__quote = @am__quote@
+am__tar = @am__tar@
+am__untar = @am__untar@
+bindir = @bindir@
+build = @build@
+build_alias = @build_alias@
+build_cpu = @build_cpu@
+build_os = @build_os@
+build_vendor = @build_vendor@
+builddir = @builddir@
+datadir = @datadir@
+datarootdir = @datarootdir@
+docdir = @docdir@
+dvidir = @dvidir@
+exec_prefix = @exec_prefix@
+host = @host@
+host_alias = @host_alias@
+host_cpu = @host_cpu@
+host_os = @host_os@
+host_vendor = @host_vendor@
+htmldir = @htmldir@
+includedir = @includedir@
+infodir = @infodir@
+install_sh = @install_sh@
+kde_appsdir = @kde_appsdir@
+kde_bindir = @kde_bindir@
+kde_confdir = @kde_confdir@
+kde_datadir = @kde_datadir@
+kde_htmldir = @kde_htmldir@
+kde_icondir = @kde_icondir@
+kde_includes = @kde_includes@
+kde_kcfgdir = @kde_kcfgdir@
+kde_libraries = @kde_libraries@
+kde_libs_htmldir = @kde_libs_htmldir@
+kde_libs_prefix = @kde_libs_prefix@
+kde_locale = @kde_locale@
+kde_mimedir = @kde_mimedir@
+kde_moduledir = @kde_moduledir@
+kde_qtver = @kde_qtver@
+kde_servicesdir = @kde_servicesdir@
+kde_servicetypesdir = @kde_servicetypesdir@
+kde_sounddir = @kde_sounddir@
+kde_styledir = @kde_styledir@
+kde_templatesdir = @kde_templatesdir@
+kde_wallpaperdir = @kde_wallpaperdir@
+kde_widgetdir = @kde_widgetdir@
+libdir = @libdir@
+libexecdir = @libexecdir@
+localedir = @localedir@
+localstatedir = @localstatedir@
+mandir = @mandir@
+mkdir_p = @mkdir_p@
+oldincludedir = @oldincludedir@
+pdfdir = @pdfdir@
+prefix = @prefix@
+program_transform_name = @program_transform_name@
+psdir = @psdir@
+qt_includes = @qt_includes@
+qt_libraries = @qt_libraries@
+sbindir = @sbindir@
+sharedstatedir = @sharedstatedir@
+srcdir = @srcdir@
+sysconfdir = @sysconfdir@
+target = @target@
+target_alias = @target_alias@
+target_cpu = @target_cpu@
+target_os = @target_os@
+target_vendor = @target_vendor@
+tdeinitdir = @tdeinitdir@
+top_build_prefix = @top_build_prefix@
+top_builddir = @top_builddir@
+top_srcdir = @top_srcdir@
+x_includes = @x_includes@
+x_libraries = @x_libraries@
+xdg_appsdir = @xdg_appsdir@
+xdg_directorydir = @xdg_directorydir@
+xdg_menudir = @xdg_menudir@
+INCLUDES = $(all_includes) -I$(top_srcdir)/src -I$(top_srcdir)/src/widgets $(KDE_INCLUDES)/tde
+KDE_CXXFLAGS = $(USE_EXCEPTIONS)
+#>- METASOURCES = AUTO
+KDE_ICON = libremotelab_logicanalyzer
+
+#Part
+kde_module_LTLIBRARIES = libremotelab_logicanalyzer.la
+libremotelab_logicanalyzer_la_LIBADD = ../../widgets/libtracewidget.la ../../widgets/libfloatspinbox.la $(LIB_KFILE) $(LIB_TDEPARTS) $(LIB_TDEUI) $(LIB_QT)
+libremotelab_logicanalyzer_la_LDFLAGS = $(all_libraries) $(KDE_PLUGIN) -ltdecore -ltdeui -ltdeio -ltdefx -ltdekrbsocket -ltqtrla
+#>- libremotelab_logicanalyzer_la_SOURCES = \
+#>- part.cpp layout.ui
+#>+ 2
+libremotelab_logicanalyzer_la_SOURCES=\
+ part.cpp layout.cpp
+
+#>- all: all-am
+#>+ 1
+all: docs-am all-am
+
+.SUFFIXES:
+.SUFFIXES: .cpp .lo .o .obj
+$(srcdir)/Makefile.in: $(srcdir)/Makefile.am $(am__configure_deps)
+#>- @for dep in $?; do \
+#>- case '$(am__configure_deps)' in \
+#>- *$$dep*) \
+#>- ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \
+#>- && { if test -f $@; then exit 0; else break; fi; }; \
+#>- exit 1;; \
+#>- esac; \
+#>- done; \
+#>- echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu src/part/logicanalyzer/Makefile'; \
+#>- $(am__cd) $(top_srcdir) && \
+#>- $(AUTOMAKE) --gnu src/part/logicanalyzer/Makefile
+#>+ 12
+ @for dep in $?; do \
+ case '$(am__configure_deps)' in \
+ *$$dep*) \
+ ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \
+ && { if test -f $@; then exit 0; else break; fi; }; \
+ exit 1;; \
+ esac; \
+ done; \
+ echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu src/part/logicanalyzer/Makefile'; \
+ $(am__cd) $(top_srcdir) && \
+ $(AUTOMAKE) --gnu src/part/logicanalyzer/Makefile
+ cd $(top_srcdir) && perl admin/am_edit src/part/logicanalyzer/Makefile.in
+.PRECIOUS: Makefile
+Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status
+ @case '$?' in \
+ *config.status*) \
+ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \
+ *) \
+ echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \
+ cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \
+ esac;
+
+$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES)
+ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+
+$(top_srcdir)/configure: $(am__configure_deps)
+ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+$(ACLOCAL_M4): $(am__aclocal_m4_deps)
+ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+$(am__aclocal_m4_deps):
+install-kde_moduleLTLIBRARIES: $(kde_module_LTLIBRARIES)
+ @$(NORMAL_INSTALL)
+ @list='$(kde_module_LTLIBRARIES)'; test -n "$(kde_moduledir)" || list=; \
+ list2=; for p in $$list; do \
+ if test -f $$p; then \
+ list2="$$list2 $$p"; \
+ else :; fi; \
+ done; \
+ test -z "$$list2" || { \
+ echo " $(MKDIR_P) '$(DESTDIR)$(kde_moduledir)'"; \
+ $(MKDIR_P) "$(DESTDIR)$(kde_moduledir)" || exit 1; \
+ echo " $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=install $(INSTALL) $(INSTALL_STRIP_FLAG) $$list2 '$(DESTDIR)$(kde_moduledir)'"; \
+ $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=install $(INSTALL) $(INSTALL_STRIP_FLAG) $$list2 "$(DESTDIR)$(kde_moduledir)"; \
+ }
+
+uninstall-kde_moduleLTLIBRARIES:
+ @$(NORMAL_UNINSTALL)
+ @list='$(kde_module_LTLIBRARIES)'; test -n "$(kde_moduledir)" || list=; \
+ for p in $$list; do \
+ $(am__strip_dir) \
+ echo " $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=uninstall rm -f '$(DESTDIR)$(kde_moduledir)/$$f'"; \
+ $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=uninstall rm -f "$(DESTDIR)$(kde_moduledir)/$$f"; \
+ done
+
+clean-kde_moduleLTLIBRARIES:
+ -test -z "$(kde_module_LTLIBRARIES)" || rm -f $(kde_module_LTLIBRARIES)
+ @list='$(kde_module_LTLIBRARIES)'; for p in $$list; do \
+ dir="`echo $$p | sed -e 's|/[^/]*$$||'`"; \
+ test "$$dir" != "$$p" || dir=.; \
+ echo "rm -f \"$${dir}/so_locations\""; \
+ rm -f "$${dir}/so_locations"; \
+ done
+libremotelab_logicanalyzer.la: $(libremotelab_logicanalyzer_la_OBJECTS) $(libremotelab_logicanalyzer_la_DEPENDENCIES) $(EXTRA_libremotelab_logicanalyzer_la_DEPENDENCIES)
+ $(libremotelab_logicanalyzer_la_LINK) -rpath $(kde_moduledir) $(libremotelab_logicanalyzer_la_OBJECTS) $(libremotelab_logicanalyzer_la_LIBADD) $(LIBS)
+
+mostlyclean-compile:
+ -rm -f *.$(OBJEXT)
+
+distclean-compile:
+ -rm -f *.tab.c
+
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/part.Plo@am__quote@
+
+.cpp.o:
+@am__fastdepCXX_TRUE@ $(CXXCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $<
+@am__fastdepCXX_TRUE@ $(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po
+@AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='$<' object='$@' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCXX_FALSE@ $(CXXCOMPILE) -c -o $@ $<
+
+.cpp.obj:
+@am__fastdepCXX_TRUE@ $(CXXCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ `$(CYGPATH_W) '$<'`
+@am__fastdepCXX_TRUE@ $(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po
+@AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='$<' object='$@' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCXX_FALSE@ $(CXXCOMPILE) -c -o $@ `$(CYGPATH_W) '$<'`
+
+.cpp.lo:
+@am__fastdepCXX_TRUE@ $(LTCXXCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $<
+@am__fastdepCXX_TRUE@ $(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Plo
+@AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='$<' object='$@' libtool=yes @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCXX_FALSE@ $(LTCXXCOMPILE) -c -o $@ $<
+
+mostlyclean-libtool:
+ -rm -f *.lo
+
+clean-libtool:
+ -rm -rf .libs _libs
+
+ID: $(HEADERS) $(SOURCES) $(LISP) $(TAGS_FILES)
+ list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \
+ unique=`for i in $$list; do \
+ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
+ done | \
+ $(AWK) '{ files[$$0] = 1; nonempty = 1; } \
+ END { if (nonempty) { for (i in files) print i; }; }'`; \
+ mkid -fID $$unique
+tags: TAGS
+
+TAGS: $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \
+ $(TAGS_FILES) $(LISP)
+ set x; \
+ here=`pwd`; \
+ list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \
+ unique=`for i in $$list; do \
+ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
+ done | \
+ $(AWK) '{ files[$$0] = 1; nonempty = 1; } \
+ END { if (nonempty) { for (i in files) print i; }; }'`; \
+ shift; \
+ if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \
+ test -n "$$unique" || unique=$$empty_fix; \
+ if test $$# -gt 0; then \
+ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \
+ "$$@" $$unique; \
+ else \
+ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \
+ $$unique; \
+ fi; \
+ fi
+ctags: CTAGS
+CTAGS: $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \
+ $(TAGS_FILES) $(LISP)
+ list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \
+ unique=`for i in $$list; do \
+ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
+ done | \
+ $(AWK) '{ files[$$0] = 1; nonempty = 1; } \
+ END { if (nonempty) { for (i in files) print i; }; }'`; \
+ test -z "$(CTAGS_ARGS)$$unique" \
+ || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \
+ $$unique
+
+GTAGS:
+ here=`$(am__cd) $(top_builddir) && pwd` \
+ && $(am__cd) $(top_srcdir) \
+ && gtags -i $(GTAGS_ARGS) "$$here"
+
+distclean-tags:
+ -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags
+
+distdir: $(DISTFILES)
+ @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
+ topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
+ list='$(DISTFILES)'; \
+ dist_files=`for file in $$list; do echo $$file; done | \
+ sed -e "s|^$$srcdirstrip/||;t" \
+ -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \
+ case $$dist_files in \
+ */*) $(MKDIR_P) `echo "$$dist_files" | \
+ sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \
+ sort -u` ;; \
+ esac; \
+ for file in $$dist_files; do \
+ if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \
+ if test -d $$d/$$file; then \
+ dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \
+ if test -d "$(distdir)/$$file"; then \
+ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \
+ fi; \
+ if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \
+ cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \
+ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \
+ fi; \
+ cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \
+ else \
+ test -f "$(distdir)/$$file" \
+ || cp -p $$d/$$file "$(distdir)/$$file" \
+ || exit 1; \
+ fi; \
+ done
+check-am: all-am
+check: check-am
+all-am: Makefile $(LTLIBRARIES)
+installdirs:
+ for dir in "$(DESTDIR)$(kde_moduledir)"; do \
+ test -z "$$dir" || $(MKDIR_P) "$$dir"; \
+ done
+install: install-am
+install-exec: install-exec-am
+install-data: install-data-am
+uninstall: uninstall-am
+
+install-am: all-am
+ @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am
+
+installcheck: installcheck-am
+install-strip:
+ if test -z '$(STRIP)'; then \
+ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
+ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
+ install; \
+ else \
+ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
+ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
+ "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'" install; \
+ fi
+mostlyclean-generic:
+
+clean-generic:
+
+distclean-generic:
+ -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES)
+ -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES)
+
+maintainer-clean-generic:
+ @echo "This command is intended for maintainers to use"
+ @echo "it deletes files that may require special tools to rebuild."
+#>- clean: clean-am
+#>+ 1
+clean: kde-rpo-clean clean-am
+
+#>- clean-am: clean-generic clean-kde_moduleLTLIBRARIES clean-libtool \
+#>- mostlyclean-am
+#>+ 2
+clean-am: clean-metasources clean-ui clean-bcheck clean-final clean-generic clean-kde_moduleLTLIBRARIES clean-libtool \
+ mostlyclean-am
+
+distclean: distclean-am
+ -rm -rf ./$(DEPDIR)
+ -rm -f Makefile
+distclean-am: clean-am distclean-compile distclean-generic \
+ distclean-tags
+
+dvi: dvi-am
+
+dvi-am:
+
+html: html-am
+
+html-am:
+
+info: info-am
+
+info-am:
+
+#>- install-data-am: install-kde_moduleLTLIBRARIES
+#>+ 1
+install-data-am: install-kde-icons
+
+install-dvi: install-dvi-am
+
+install-dvi-am:
+
+#>- install-exec-am:
+#>+ 1
+install-exec-am: install-kde_moduleLTLIBRARIES
+
+install-html: install-html-am
+
+install-html-am:
+
+install-info: install-info-am
+
+install-info-am:
+
+install-man:
+
+install-pdf: install-pdf-am
+
+install-pdf-am:
+
+install-ps: install-ps-am
+
+install-ps-am:
+
+installcheck-am:
+
+maintainer-clean: maintainer-clean-am
+ -rm -rf ./$(DEPDIR)
+ -rm -f Makefile
+maintainer-clean-am: distclean-am maintainer-clean-generic
+
+mostlyclean: mostlyclean-am
+
+mostlyclean-am: mostlyclean-compile mostlyclean-generic \
+ mostlyclean-libtool
+
+pdf: pdf-am
+
+pdf-am:
+
+ps: ps-am
+
+ps-am:
+
+#>- uninstall-am: uninstall-kde_moduleLTLIBRARIES
+#>+ 1
+uninstall-am: uninstall-kde-icons uninstall-kde_moduleLTLIBRARIES
+
+.MAKE: install-am install-strip
+
+.PHONY: CTAGS GTAGS all all-am check check-am clean clean-generic \
+ clean-kde_moduleLTLIBRARIES clean-libtool ctags distclean \
+ distclean-compile distclean-generic distclean-libtool \
+ distclean-tags distdir dvi dvi-am html html-am info info-am \
+ install install-am install-data install-data-am install-dvi \
+ install-dvi-am install-exec install-exec-am install-html \
+ install-html-am install-info install-info-am \
+ install-kde_moduleLTLIBRARIES install-man install-pdf \
+ install-pdf-am install-ps install-ps-am install-strip \
+ installcheck installcheck-am installdirs maintainer-clean \
+ maintainer-clean-generic mostlyclean mostlyclean-compile \
+ mostlyclean-generic mostlyclean-libtool pdf pdf-am ps ps-am \
+ tags uninstall uninstall-am uninstall-kde_moduleLTLIBRARIES
+
+
+# Tell versions [3.59,3.63) of GNU make to not export all variables.
+# Otherwise a system limit (for SysV at least) may be exceeded.
+.NOEXPORT:
+
+#>+ 3
+part.moc: $(srcdir)/part.h
+ $(TQTMOC) $(srcdir)/part.h -o part.moc
+
+#>+ 2
+mocs: part.moc
+
+#>+ 3
+clean-metasources:
+ -rm -f part.moc
+
+#>+ 2
+KDE_DIST=hi16-action-libremotelab_logicanalyzer.png layout.ui Makefile.am Makefile.in hi64-action-libremotelab_logicanalyzer.png part.h
+
+#>+ 4
+clean-ui:
+ -rm -f \
+ layout.cpp layout.h layout.moc
+
+#>+ 2
+docs-am:
+
+#>+ 10
+install-kde-icons:
+ $(mkinstalldirs) $(DESTDIR)$(kde_icondir)/hicolor/16x16/actions
+ $(INSTALL_DATA) $(srcdir)/hi16-action-libremotelab_logicanalyzer.png $(DESTDIR)$(kde_icondir)/hicolor/16x16/actions/libremotelab_logicanalyzer.png
+ $(mkinstalldirs) $(DESTDIR)$(kde_icondir)/hicolor/64x64/actions
+ $(INSTALL_DATA) $(srcdir)/hi64-action-libremotelab_logicanalyzer.png $(DESTDIR)$(kde_icondir)/hicolor/64x64/actions/libremotelab_logicanalyzer.png
+
+uninstall-kde-icons:
+ -rm -f $(DESTDIR)$(kde_icondir)/hicolor/16x16/actions/libremotelab_logicanalyzer.png
+ -rm -f $(DESTDIR)$(kde_icondir)/hicolor/64x64/actions/libremotelab_logicanalyzer.png
+
+#>+ 15
+force-reedit:
+ @for dep in $?; do \
+ case '$(am__configure_deps)' in \
+ *$$dep*) \
+ ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \
+ && { if test -f $@; then exit 0; else break; fi; }; \
+ exit 1;; \
+ esac; \
+ done; \
+ echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu src/part/logicanalyzer/Makefile'; \
+ $(am__cd) $(top_srcdir) && \
+ $(AUTOMAKE) --gnu src/part/logicanalyzer/Makefile
+ cd $(top_srcdir) && perl admin/am_edit src/part/logicanalyzer/Makefile.in
+
+
+#>+ 21
+clean-bcheck:
+ rm -f *.bchecktest.cc *.bchecktest.cc.class a.out
+
+bcheck: bcheck-am
+
+bcheck-am:
+ @for i in ; do \
+ if test $(srcdir)/$$i -nt $$i.bchecktest.cc; then \
+ echo "int main() {return 0;}" > $$i.bchecktest.cc ; \
+ echo "#include \"$$i\"" >> $$i.bchecktest.cc ; \
+ echo "$$i"; \
+ if ! $(CXXCOMPILE) --dump-class-hierarchy -c $$i.bchecktest.cc; then \
+ rm -f $$i.bchecktest.cc; exit 1; \
+ fi ; \
+ echo "" >> $$i.bchecktest.cc.class; \
+ perl $(top_srcdir)/admin/bcheck.pl $$i.bchecktest.cc.class || { rm -f $$i.bchecktest.cc; exit 1; }; \
+ rm -f a.out; \
+ fi ; \
+ done
+
+
+#>+ 11
+libremotelab_logicanalyzer_la.all_cpp.cpp: $(srcdir)/Makefile.in $(srcdir)/part.cpp layout.cpp layout.moc part.moc
+ @echo 'creating libremotelab_logicanalyzer_la.all_cpp.cpp ...'; \
+ rm -f libremotelab_logicanalyzer_la.all_cpp.files libremotelab_logicanalyzer_la.all_cpp.final; \
+ echo "#define KDE_USE_FINAL 1" >> libremotelab_logicanalyzer_la.all_cpp.final; \
+ for file in part.cpp layout.cpp ; do \
+ echo "#include \"$$file\"" >> libremotelab_logicanalyzer_la.all_cpp.files; \
+ test ! -f $(srcdir)/$$file || egrep '^#pragma +implementation' $(srcdir)/$$file >> libremotelab_logicanalyzer_la.all_cpp.final; \
+ done; \
+ cat libremotelab_logicanalyzer_la.all_cpp.final libremotelab_logicanalyzer_la.all_cpp.files > libremotelab_logicanalyzer_la.all_cpp.cpp; \
+ rm -f libremotelab_logicanalyzer_la.all_cpp.final libremotelab_logicanalyzer_la.all_cpp.files
+
+#>+ 3
+clean-final:
+ -rm -f libremotelab_logicanalyzer_la.all_cpp.cpp
+
+#>+ 3
+final:
+ $(MAKE) libremotelab_logicanalyzer_la_OBJECTS="$(libremotelab_logicanalyzer_la_final_OBJECTS)" all-am
+
+#>+ 3
+final-install:
+ $(MAKE) libremotelab_logicanalyzer_la_OBJECTS="$(libremotelab_logicanalyzer_la_final_OBJECTS)" install-am
+
+#>+ 3
+no-final:
+ $(MAKE) libremotelab_logicanalyzer_la_OBJECTS="$(libremotelab_logicanalyzer_la_nofinal_OBJECTS)" all-am
+
+#>+ 3
+no-final-install:
+ $(MAKE) libremotelab_logicanalyzer_la_OBJECTS="$(libremotelab_logicanalyzer_la_nofinal_OBJECTS)" install-am
+
+#>+ 3
+kde-rpo-clean:
+ -rm -f *.rpo
+
+#>+ 6
+nmcheck:
+nmcheck-am: nmcheck
+$(srcdir)/part.cpp: layout.h
+part.lo: part.moc
+part.o: part.moc
+
+#>+ 15
+layout.cpp: $(srcdir)/layout.ui layout.h layout.moc
+ rm -f layout.cpp
+ echo '#include <kdialog.h>' > layout.cpp
+ echo '#include <tdelocale.h>' >> layout.cpp
+ $(UIC) -tr ${UIC_TR} -i layout.h $(srcdir)/layout.ui > layout.cpp.temp ; ret=$$?; \
+ $(PERL) -pe "s,${UIC_TR}( \"\" ),QString::null,g" layout.cpp.temp | $(PERL) -pe "s,${UIC_TR}( \"\"\, \"\" ),QString::null,g" | $(PERL) -pe "s,image([0-9][0-9]*)_data,img\$$1_layout,g" | $(PERL) -pe "s,: TQWizard\(,: KWizard(,g; s,: QWizard\(,: KWizard(,g;" >> layout.cpp ;\
+ rm -f layout.cpp.temp ;\
+ if test "$$ret" = 0; then echo '#include "layout.moc"' >> layout.cpp; else rm -f layout.cpp ; exit $$ret ; fi
+
+layout.h: $(srcdir)/layout.ui
+ rm -rf layout.h;
+ $(UIC) $(srcdir)/layout.ui | $(PERL) -pi -e "s,public TQWizard,public KWizard,g; s,#include <ntqwizard.h>,#include <kwizard.h>,g; s,public QWizard,public KWizard,g; s,#include <qwizard.h>,#include <kwizard.h>,g" >> layout.h ;
+layout.moc: layout.h
+ $(TQTMOC) layout.h -o layout.moc
diff --git a/clients/tde/src/part/logicanalyzer/hi16-action-libremotelab_logicanalyzer.png b/clients/tde/src/part/logicanalyzer/hi16-action-libremotelab_logicanalyzer.png
new file mode 100644
index 0000000..61e5f5b
--- /dev/null
+++ b/clients/tde/src/part/logicanalyzer/hi16-action-libremotelab_logicanalyzer.png
Binary files differ
diff --git a/clients/tde/src/part/logicanalyzer/hi64-action-libremotelab_logicanalyzer.png b/clients/tde/src/part/logicanalyzer/hi64-action-libremotelab_logicanalyzer.png
new file mode 100644
index 0000000..bc2774e
--- /dev/null
+++ b/clients/tde/src/part/logicanalyzer/hi64-action-libremotelab_logicanalyzer.png
Binary files differ
diff --git a/clients/tde/src/part/logicanalyzer/layout.ui b/clients/tde/src/part/logicanalyzer/layout.ui
new file mode 100644
index 0000000..9175fa5
--- /dev/null
+++ b/clients/tde/src/part/logicanalyzer/layout.ui
@@ -0,0 +1,159 @@
+<!DOCTYPE UI><UI version="3.0" stdsetdef="1">
+ <class>LogicAnalyzerBase</class>
+ <widget class="TQWidget">
+ <property name="name">
+ <cstring>LogicAnalyzerBase</cstring>
+ </property>
+ <property name="geometry">
+ <rect>
+ <x>0</x>
+ <y>0</y>
+ <width>519</width>
+ <height>356</height>
+ </rect>
+ </property>
+ <grid>
+ <property name="name">
+ <cstring>unnamed</cstring>
+ </property>
+ <widget class="TQGroupBox" row="0" column="0">
+ <property name="name">
+ <cstring>groupLogicAnalyzer</cstring>
+ </property>
+ <property name="title">
+ <string>Logic Analyzer</string>
+ </property>
+ <grid>
+ <property name="name">
+ <cstring>unnamed</cstring>
+ </property>
+ <widget class="TQGroupBox" row="0" column="0" rowspan="10">
+ <property name="name">
+ <cstring>groupLogicAnalyzerView</cstring>
+ </property>
+ <property name="title">
+ <string>Trace Viewer</string>
+ </property>
+ <property name="sizePolicy">
+ <sizepolicy>
+ <hsizetype>7</hsizetype>
+ <vsizetype>7</vsizetype>
+ <horstretch>1</horstretch>
+ <verstretch>1</verstretch>
+ </sizepolicy>
+ </property>
+ <grid>
+ <property name="name">
+ <cstring>unnamed</cstring>
+ </property>
+ <widget class="TQSplitter" row="0" column="0" colspan="1">
+ <property name="name">
+ <cstring>splitter1</cstring>
+ </property>
+ <property name="orientation">
+ <enum>Vertical</enum>
+ </property>
+ <widget class="TraceScrollWidget" row="0" column="0" colspan="1">
+ <property name="name">
+ <cstring>traceScrollWidget</cstring>
+ </property>
+ <property name="minimumSize">
+ <size>
+ <width>0</width>
+ <height>0</height>
+ </size>
+ </property>
+ <property name="resizePolicy">
+ <enum>AutoOneFit</enum>
+ </property>
+ </widget>
+ </widget>
+ </grid>
+ </widget>
+ <widget class="TQGroupBox" row="0" column="1">
+ <property name="name">
+ <cstring>groupLogicAnalyzerCaptureControls</cstring>
+ </property>
+ <property name="title">
+ <string>Capture Controls</string>
+ </property>
+ <grid>
+ <widget class="TQPushButton" row="0" column="0" colspan="1">
+ <property name="name">
+ <cstring>runControlStartButton</cstring>
+ </property>
+ <property name="text">
+ <string>Run</string>
+ </property>
+ </widget>
+ <widget class="TQPushButton" row="0" column="1" colspan="1">
+ <property name="name">
+ <cstring>runControlStopButton</cstring>
+ </property>
+ <property name="text">
+ <string>Stop</string>
+ </property>
+ </widget>
+ <widget class="TQWidget" row="1" column="0" colspan="2">
+ <property name="name">
+ <cstring>traceControlLayoutWidget</cstring>
+ </property>
+ </widget>
+ </grid>
+ </widget>
+ <widget class="TQGroupBox" row="1" column="1">
+ <property name="name">
+ <cstring>groupLogicAnalyzerAcquisitionControls</cstring>
+ </property>
+ <property name="title">
+ <string>Acquisition Controls</string>
+ </property>
+ <grid>
+ <widget class="TQPushButton" row="0" column="0" colspan="1">
+ <property name="name">
+ <cstring>acqStart</cstring>
+ </property>
+ <property name="text">
+ <string>Start Acquisition</string>
+ </property>
+ </widget>
+ <widget class="TQPushButton" row="0" column="1" colspan="1">
+ <property name="name">
+ <cstring>acqStop</cstring>
+ </property>
+ <property name="text">
+ <string>Stop Acquisition</string>
+ </property>
+ </widget>
+ <widget class="TQPushButton" row="1" column="0" colspan="1">
+ <property name="name">
+ <cstring>waveformSave</cstring>
+ </property>
+ <property name="text">
+ <string>Save Waveforms</string>
+ </property>
+ </widget>
+ <widget class="TQPushButton" row="1" column="1" colspan="1">
+ <property name="name">
+ <cstring>waveformRecall</cstring>
+ </property>
+ <property name="text">
+ <string>Recall Waveforms</string>
+ </property>
+ </widget>
+ </grid>
+ </widget>
+ </grid>
+ </widget>
+ </grid>
+ </widget>
+ <includes>
+ <include location="local" impldecl="in implementation">LogicAnalyzerBase.ui.h</include>
+ </includes>
+ <includes>
+ <include location="local" impldecl="in implementation">tracewidget.h</include>
+ <include location="local" impldecl="in implementation">floatspinbox.h</include>
+ </includes>
+ <layoutdefaults spacing="3" margin="6"/>
+ <layoutfunctions spacing="KDialog::spacingHint" margin="KDialog::marginHint"/>
+</UI>
diff --git a/clients/tde/src/part/logicanalyzer/part.cpp b/clients/tde/src/part/logicanalyzer/part.cpp
new file mode 100644
index 0000000..6644b34
--- /dev/null
+++ b/clients/tde/src/part/logicanalyzer/part.cpp
@@ -0,0 +1,1275 @@
+//Author: Timothy Pearson <kb9vqf@pearsoncomputing.net>, (C) 2014
+//Copyright: See COPYING file that comes with this distribution
+
+#include "define.h"
+#include "part.h"
+
+#include <tdeaboutdata.h> //::createAboutData()
+#include <tdeaction.h>
+#include <tdelocale.h>
+#include <tdemessagebox.h> //::start()
+#include <tdefiledialog.h>
+#include <tdeparts/genericfactory.h>
+#include <kstatusbar.h>
+#include <kstdaction.h>
+#include <tqfile.h> //encodeName()
+#include <tqtimer.h>
+#include <tqvbox.h>
+#include <tqsocket.h>
+#include <tqmutex.h>
+#include <tqgroupbox.h>
+#include <tqlayout.h>
+#include <tqcombobox.h>
+#include <tqcheckbox.h>
+#include <tqpushbutton.h>
+#include <tqeventloop.h>
+#include <tqapplication.h>
+#include <unistd.h> //access()
+#include <stdint.h>
+#include <cmath>
+
+#include "tracewidget.h"
+#include "floatspinbox.h"
+#include "layout.h"
+
+#define NETWORK_COMM_TIMEOUT_MS 15000
+
+/* exception handling */
+struct exit_exception {
+ int c;
+ exit_exception(int c):c(c) { }
+};
+
+enum connectionStates {
+ LogicAnalyzerState_InitialRequest = 0,
+ LogicAnalyzerState_ResetRequest = 2,
+ LogicAnalyzerState_HorizontalDivCountRequest = 4,
+ LogicAnalyzerState_ChannelCountRequest = 8,
+ LogicAnalyzerState_ChannelNameRequest = 10,
+ LogicAnalyzerState_ChannelActiveStateRequest = 12,
+ LogicAnalyzerState_TraceSampleCountRequest = 14,
+ LogicAnalyzerState_TraceSecondsDivRequest = 16,
+ LogicAnalyzerState_RunningRequest = 18,
+ LogicAnalyzerState_TraceRequest = 50,
+ LogicAnalyzerState_ChannelActiveStateUpdate = 100,
+ LogicAnalyzerState_TraceVoltsDivUpdate = 102,
+ LogicAnalyzerState_RunningUpdate = 106,
+ LogicAnalyzerState_ExternalCommandRequest = 255
+};
+
+namespace RemoteLab {
+
+typedef KParts::GenericFactory<RemoteLab::LogicAnalyzerPart> Factory;
+#define CLIENT_LIBRARY "libremotelab_logicanalyzer"
+K_EXPORT_COMPONENT_FACTORY( libremotelab_logicanalyzer, RemoteLab::Factory )
+
+LogicAnalyzerPart::LogicAnalyzerPart( TQWidget *parentWidget, const char *widgetName, TQObject *parent, const char *name, const TQStringList& )
+ : RemoteInstrumentPart( parent, name ), m_traceWidget(0), m_commHandlerState(-1), m_commHandlerMode(0), m_commHandlerCommandState(0), m_connectionActiveAndValid(false),
+ m_base(0), stopTraceUpdate(false)
+{
+ // Initialize important base class variables
+ m_clientLibraryName = CLIENT_LIBRARY;
+
+ // Initialize mutex
+ m_instrumentMutex = new TQMutex(false);
+
+ // Initialize kpart
+ setInstance(Factory::instance());
+ setWidget(new TQVBox(parentWidget, widgetName));
+
+ // Create timers
+ m_forcedUpdateTimer = new TQTimer(this);
+ connect(m_forcedUpdateTimer, SIGNAL(timeout()), this, SLOT(mainEventLoop()));
+ m_updateTimeoutTimer = new TQTimer(this);
+ connect(m_updateTimeoutTimer, SIGNAL(timeout()), this, SLOT(mainEventLoop()));
+
+ // Initialize data
+ m_hdivs = 0;
+ m_vdivs = 0;
+ for (int traceno=0; traceno<=MAXTRACES; traceno++) {
+ m_samplesInTrace[traceno] = 0;
+ m_channelActive[traceno] = false;
+ m_channelName[traceno] = TQString("Channel %1").arg(traceno);
+ m_voltsDiv[traceno] = 0;
+ m_secsDiv[traceno] = 0;
+
+ m_voltsDivSet[traceno] = false;
+ m_channelActiveSet[traceno] = false;
+ }
+ m_runningSet = false;
+
+ // Create widgets
+ m_base = new LogicAnalyzerBase(widget());
+ m_traceControlWidgetGrid = new TQGridLayout(m_base->traceControlLayoutWidget);
+ m_traceWidget = m_base->traceScrollWidget->traceWidget();
+ m_base->traceScrollWidget->setSizePolicy(TQSizePolicy(TQSizePolicy::MinimumExpanding, TQSizePolicy::MinimumExpanding));
+ m_base->traceScrollWidget->setHScrollBarMode(TQScrollView::Auto);
+ m_base->traceScrollWidget->setVScrollBarMode(TQScrollView::Auto);
+ m_traceWidget->showLeftTraceInfoArea(true);
+ m_traceWidget->fitLeftTraceInfoArea(true);
+ m_traceWidget->setLeftTraceInfoAreaFitSpacing(10);
+ m_traceWidget->setMinimumPixelsPerHorizDiv(30);
+ m_traceWidget->setNumberOfCursors(2);
+ m_traceWidget->setCursorColor(0, TQColor(0, 255, 0));
+ m_traceWidget->setCursorColor(1, TQColor(0, 255, 0));
+ m_traceWidget->setCursorHighlightColor(0, TQColor(192, 255, 192));
+ m_traceWidget->setCursorHighlightColor(1, TQColor(192, 255, 192));
+ m_traceWidget->setCursorOrientation(0, TQt::Vertical);
+ m_traceWidget->setCursorOrientation(1, TQt::Vertical);
+ m_traceWidget->setCursorEnabled(0, true);
+ m_traceWidget->setCursorEnabled(1, true);
+ m_traceWidget->setCursorName(0, "Cursor V1");
+ m_traceWidget->setCursorName(1, "Cursor V2");
+ m_traceWidget->setCursorPosition(0, 25);
+ m_traceWidget->setCursorPosition(1, 75);
+ TraceNumberList activeTraces;
+ for (uint trace=0; trace<1; trace++) {
+ activeTraces.append(trace);
+ }
+ m_traceWidget->setCursorActiveTraceList(0, activeTraces);
+ m_traceWidget->setCursorActiveTraceList(1, activeTraces);
+ m_traceWidget->setZoomBoxEnabled(false);
+
+ connect(m_base->acqStart, SIGNAL(clicked()), this, SLOT(startDAQ()));
+ connect(m_base->acqStop, SIGNAL(clicked()), this, SLOT(stopDAQ()));
+ connect(m_base->runControlStartButton, SIGNAL(clicked()), this, SLOT(startLogicAnalyzer()));
+ connect(m_base->runControlStopButton, SIGNAL(clicked()), this, SLOT(stopLogicAnalyzer()));
+
+ connect(m_base->waveformSave, SIGNAL(clicked()), this, SLOT(saveWaveforms()));
+ connect(m_base->waveformRecall, SIGNAL(clicked()), this, SLOT(recallWaveforms()));
+
+ TQTimer::singleShot(0, this, TQT_SLOT(postInit()));
+}
+
+LogicAnalyzerPart::~LogicAnalyzerPart() {
+ if (m_instrumentMutex->locked()) {
+ printf("[WARNING] Exiting when data transfer still in progress!\n\r"); fflush(stdout);
+ }
+
+ disconnectFromServer();
+ delete m_instrumentMutex;
+}
+
+void LogicAnalyzerPart::postInit() {
+ setUsingFixedSize(false);
+}
+
+bool LogicAnalyzerPart::openURL(const KURL &url) {
+ int ret;
+ m_connectionActiveAndValid = false;
+ ret = connectToServer(url.url());
+ processLockouts();
+ return (ret != 0);
+}
+
+bool LogicAnalyzerPart::closeURL() {
+ disconnectFromServer();
+ m_url = KURL();
+ return true;
+}
+
+void LogicAnalyzerPart::processLockouts() {
+ // Largest area
+ if (m_connectionActiveAndValid) {
+ if ((m_commHandlerMode < 2) && (m_commHandlerState < 2)) {
+ m_base->setEnabled(false);
+ }
+ else {
+ m_base->setEnabled(true);
+ }
+ }
+ else {
+ m_base->setEnabled(false);
+ }
+
+ // Middle area
+ if (((m_commHandlerMode < 2) && (m_commHandlerState < 50)) || (stopTraceUpdate)) {
+ m_base->groupLogicAnalyzerCaptureControls->setEnabled(false);
+ }
+ else {
+ m_base->groupLogicAnalyzerCaptureControls->setEnabled(true);
+ }
+
+ // Least area
+ if (stopTraceUpdate) {
+ m_base->acqStop->setEnabled(false);
+ m_base->acqStart->setEnabled(true);
+ m_base->waveformSave->setEnabled(true);
+ m_base->waveformRecall->setEnabled(true);
+ }
+ else {
+ m_base->acqStop->setEnabled(true);
+ m_base->acqStart->setEnabled(false);
+ m_base->waveformSave->setEnabled(false);
+ m_base->waveformRecall->setEnabled(false);
+ }
+ if (m_running) {
+ m_base->runControlStartButton->setEnabled(false);
+ m_base->runControlStopButton->setEnabled(true);
+ }
+ else {
+ m_base->runControlStartButton->setEnabled(true);
+ m_base->runControlStopButton->setEnabled(false);
+ }
+}
+
+void LogicAnalyzerPart::disconnectFromServerCallback() {
+ m_forcedUpdateTimer->stop();
+ m_updateTimeoutTimer->stop();
+ m_connectionActiveAndValid = false;
+}
+
+void LogicAnalyzerPart::connectionFinishedCallback() {
+ connect(m_socket, SIGNAL(readyRead()), m_socket, SLOT(processPendingData()));
+ m_socket->processPendingData();
+ connect(m_socket, SIGNAL(newDataReceived()), this, SLOT(mainEventLoop()));
+ m_tickerState = 0;
+ m_commHandlerState = 0;
+ m_commHandlerMode = 0;
+ m_socket->setDataTimeout(NETWORK_COMM_TIMEOUT_MS);
+ m_updateTimeoutTimer->start(NETWORK_COMM_TIMEOUT_MS, TRUE);
+ processLockouts();
+ mainEventLoop();
+ return;
+}
+
+void LogicAnalyzerPart::connectionStatusChangedCallback() {
+ processLockouts();
+}
+
+void LogicAnalyzerPart::setTickerMessage(TQString message) {
+ int i;
+ bool updatesPending = false;
+ for (i=0; i<=MAXTRACES;i++) {
+ if (m_channelActiveSet[i]) updatesPending = true;
+ if (m_voltsDivSet[i]) updatesPending = true;
+ if (m_runningSet) updatesPending = true;
+ }
+
+ m_connectionActiveAndValid = true;
+ TQString tickerChar;
+ switch (m_tickerState) {
+ case 0:
+ tickerChar = "-";
+ break;
+ case 1:
+ tickerChar = "\\";
+ break;
+ case 2:
+ tickerChar = "|";
+ break;
+ case 3:
+ tickerChar = "/";
+ break;
+ }
+ if (updatesPending) {
+ setStatusMessage(i18n("Updates pending") + ", " + message + TQString("... %1").arg(tickerChar));
+ }
+ else {
+ setStatusMessage(message + TQString("... %1").arg(tickerChar));
+ }
+ m_tickerState++;
+ if (m_tickerState > 3) {
+ m_tickerState = 0;
+ }
+}
+
+#define UPDATEDISPLAY_TIMEOUT m_connectionActiveAndValid = false; \
+ m_tickerState = 0; \
+ m_commHandlerState = LogicAnalyzerState_ResetRequest; \
+ m_commHandlerMode = 0; \
+ m_socket->clearIncomingData(); \
+ setStatusMessage(i18n("Server ping timeout. Please verify the status of your network connection.")); \
+ m_updateTimeoutTimer->start(NETWORK_COMM_TIMEOUT_MS, TRUE); \
+ m_instrumentMutex->unlock(); \
+ return;
+
+#define COMMUNICATIONS_FAILED m_connectionActiveAndValid = false; \
+ m_tickerState = 0; \
+ m_commHandlerState = LogicAnalyzerState_ResetRequest; \
+ m_commHandlerMode = 0; \
+ m_socket->clearIncomingData(); \
+ setStatusMessage(i18n("Instrument communication failure. Please verify the status of your network connection.")); \
+ m_updateTimeoutTimer->start(NETWORK_COMM_TIMEOUT_MS, TRUE); \
+ m_instrumentMutex->unlock(); \
+ return;
+
+#define SET_WATCHDOG_TIMER if (!m_updateTimeoutTimer->isActive()) m_updateTimeoutTimer->start(NETWORK_COMM_TIMEOUT_MS, TRUE);
+#define PAT_WATCHDOG_TIMER m_updateTimeoutTimer->stop(); m_updateTimeoutTimer->start(NETWORK_COMM_TIMEOUT_MS, TRUE);
+
+#define SET_NEXT_STATE(x) if (m_commHandlerMode == 0) { \
+ m_commHandlerState = x; \
+ } \
+ else { \
+ m_commHandlerState = LogicAnalyzerState_ExternalCommandRequest; \
+ EXEC_NEXT_STATE_IMMEDIATELY \
+ }
+#define SET_NEXT_STATE_DATA_WAITING(x) m_commHandlerState = x;
+
+#define EXEC_NEXT_STATE_IMMEDIATELY m_forcedUpdateTimer->start(0, TRUE);
+
+int getNextActiveChannel(int current, bool* activity, int maxtracenumber) {
+ int ret = -1;
+ for (int i=current+1; i<=maxtracenumber; i++) {
+ if (activity[i]) {
+ ret = i;
+ break;
+ }
+ }
+ return ret;
+}
+
+void LogicAnalyzerPart::mainEventLoop() {
+ TQDataStream ds(m_socket);
+ ds.setPrintableData(true);
+
+ if (!m_instrumentMutex->tryLock()) {
+ EXEC_NEXT_STATE_IMMEDIATELY
+ return;
+ }
+
+ if (m_socket) {
+ if ((m_commHandlerMode == 0) || (m_commHandlerMode == 1)) {
+ if (m_commHandlerState == LogicAnalyzerState_InitialRequest) {
+ // Request logic analyzer access
+ ds << TQString("LOGICANALYZER");
+ m_socket->writeEndOfFrame();
+
+ m_commHandlerState = LogicAnalyzerState_InitialRequest+1;
+ EXEC_NEXT_STATE_IMMEDIATELY
+ }
+ else if (m_commHandlerState == LogicAnalyzerState_InitialRequest+1) {
+ // Get response data
+ if (m_socket->canReadFrame()) {
+ PAT_WATCHDOG_TIMER
+ setTickerMessage(i18n("Connected"));
+
+ // Get command status
+ TQString result;
+ ds >> result;
+ m_socket->clearFrameTail();
+
+ if (result == "ACK") {
+ SET_NEXT_STATE(LogicAnalyzerState_ResetRequest)
+ EXEC_NEXT_STATE_IMMEDIATELY
+ }
+ else {
+ if (stopTraceUpdate == false) {
+ COMMUNICATIONS_FAILED
+ }
+ else {
+ setTickerMessage(i18n("Data acquisition stopped"));
+ }
+ }
+ }
+ else {
+ if (!m_updateTimeoutTimer->isActive()) {
+ if (stopTraceUpdate == false) {
+ UPDATEDISPLAY_TIMEOUT
+ }
+ else {
+ setTickerMessage(i18n("Data acquisition stopped"));
+ }
+ }
+ }
+ }
+ else if (m_commHandlerState == LogicAnalyzerState_ResetRequest) {
+ // Reset logicanalyzer
+ ds << TQString("RESET");
+ m_socket->writeEndOfFrame();
+
+ SET_NEXT_STATE_DATA_WAITING(LogicAnalyzerState_ResetRequest+1)
+ EXEC_NEXT_STATE_IMMEDIATELY
+ }
+ else if (m_commHandlerState == LogicAnalyzerState_ResetRequest+1) {
+ // Get response data
+ if (m_socket->canReadFrame()) {
+ PAT_WATCHDOG_TIMER
+ setTickerMessage(i18n("Loading [Reset complete]"));
+
+ // Get command status
+ TQString result;
+ ds >> result;
+ m_socket->clearFrameTail();
+
+ if (result == "ACK") {
+ SET_NEXT_STATE(LogicAnalyzerState_HorizontalDivCountRequest)
+ EXEC_NEXT_STATE_IMMEDIATELY
+ }
+ else {
+ if (stopTraceUpdate == false) {
+ COMMUNICATIONS_FAILED
+ }
+ else {
+ setTickerMessage(i18n("Data acquisition stopped"));
+ }
+ }
+ }
+ else {
+ if (!m_updateTimeoutTimer->isActive()) {
+ if (stopTraceUpdate == false) {
+ UPDATEDISPLAY_TIMEOUT
+ }
+ else {
+ setTickerMessage(i18n("Data acquisition stopped"));
+ }
+ }
+ }
+ }
+ else if (m_commHandlerState == LogicAnalyzerState_HorizontalDivCountRequest) {
+ // Get number of horizontal divisions, step 1
+ ds << TQString("GETHORIZONTALDIVCOUNT");
+ m_socket->writeEndOfFrame();
+
+ SET_NEXT_STATE_DATA_WAITING(LogicAnalyzerState_HorizontalDivCountRequest+1)
+ EXEC_NEXT_STATE_IMMEDIATELY
+ }
+ else if (m_commHandlerState == LogicAnalyzerState_HorizontalDivCountRequest+1) {
+ // Get response data
+ if (m_socket->canReadFrame()) {
+ PAT_WATCHDOG_TIMER
+ setTickerMessage(i18n("Loading [Received horizontal division count]"));
+
+ // Get number of horizontal divisions, step 2
+ TQString result;
+ ds >> result;
+ if (result == "ACK") {
+ ds >> m_hdivs;
+ }
+ m_socket->clearFrameTail();
+
+ if (result == "ACK") {
+ SET_NEXT_STATE(LogicAnalyzerState_ChannelCountRequest)
+ EXEC_NEXT_STATE_IMMEDIATELY
+ }
+ else {
+ if (stopTraceUpdate == false) {
+ COMMUNICATIONS_FAILED
+ }
+ else {
+ setTickerMessage(i18n("Data acquisition stopped"));
+ }
+ }
+ }
+ else {
+ if (!m_updateTimeoutTimer->isActive()) {
+ if (stopTraceUpdate == false) {
+ UPDATEDISPLAY_TIMEOUT
+ }
+ else {
+ setTickerMessage(i18n("Data acquisition stopped"));
+ }
+ }
+ }
+ }
+ else if (m_commHandlerState == LogicAnalyzerState_ChannelCountRequest) {
+ // Get number of channels, step 1
+ ds << TQString("GETNUMBEROFCHANNELS");
+ m_socket->writeEndOfFrame();
+
+ SET_NEXT_STATE_DATA_WAITING(LogicAnalyzerState_ChannelCountRequest+1)
+ EXEC_NEXT_STATE_IMMEDIATELY
+ }
+ else if (m_commHandlerState == LogicAnalyzerState_ChannelCountRequest+1) {
+ // Get response data
+ if (m_socket->canReadFrame()) {
+ PAT_WATCHDOG_TIMER
+ setTickerMessage(i18n("Loading [Received number of channels]"));
+
+ // Get number of channels, step 2
+ TQString result;
+ ds >> result;
+ if (result == "ACK") {
+ ds >> m_maxNumberOfTraces;
+ if (m_maxNumberOfTraces > MAXTRACES) {
+ m_maxNumberOfTraces = MAXTRACES;
+ }
+
+ // Lock the number of vertical divisions to the number of traces
+ // This provides a useful baseline effect whereby each trace has a dotted zero line
+ m_vdivs = m_maxNumberOfTraces;
+
+ // Set true/false (0-1) to one division
+ double voltsDiv = 1.5;
+ int traceno;
+ for (traceno=0; traceno<m_maxNumberOfTraces; traceno++) {
+ m_voltsDiv[traceno+1] = voltsDiv;
+ }
+
+ // Stack all channels vertically
+ double offset = ((double)m_vdivs/2)*voltsDiv;
+ double step = ((double)m_vdivs/m_maxNumberOfTraces)*voltsDiv;
+ offset = offset - step; // Make sure the first channel text is visible
+ for (int i=0;i<m_maxNumberOfTraces; i++) {
+ m_traceWidget->setTraceOffset(i, offset, true);
+ m_traceWidget->setTraceTextOffset(i, 0.75, true);
+ offset = offset - step;
+ }
+ }
+ m_socket->clearFrameTail();
+
+ if (result == "ACK") {
+ m_currentOpChannel = 1;
+ SET_NEXT_STATE(LogicAnalyzerState_ChannelNameRequest)
+ EXEC_NEXT_STATE_IMMEDIATELY
+ }
+ else {
+ if (stopTraceUpdate == false) {
+ COMMUNICATIONS_FAILED
+ }
+ else {
+ setTickerMessage(i18n("Data acquisition stopped"));
+ }
+ }
+ }
+ else {
+ if (!m_updateTimeoutTimer->isActive()) {
+ if (stopTraceUpdate == false) {
+ UPDATEDISPLAY_TIMEOUT
+ }
+ else {
+ setTickerMessage(i18n("Data acquisition stopped"));
+ }
+ }
+ }
+ }
+ else if (m_commHandlerState == LogicAnalyzerState_ChannelNameRequest) {
+ // Get channel name, step 1
+ ds << TQString("GETCHANNELNAME");
+ m_socket->writeEndOfFrame();
+
+ SET_NEXT_STATE_DATA_WAITING(LogicAnalyzerState_ChannelNameRequest+1)
+ EXEC_NEXT_STATE_IMMEDIATELY
+ }
+ else if (m_commHandlerState == LogicAnalyzerState_ChannelNameRequest+1) {
+ // Get response data
+ if (m_socket->canReadFrame()) {
+ PAT_WATCHDOG_TIMER
+ setTickerMessage(i18n("Loading [Received channel names]"));
+
+ // Get channel status, step 2
+ TQString result;
+ ds >> result;
+ if (result == "ACK") {
+ int traceno;
+ for (traceno=0; traceno<m_maxNumberOfTraces; traceno++) {
+ ds >> m_channelName[traceno+1];
+ }
+ }
+ m_socket->clearFrameTail();
+
+ if (result == "ACK") {
+ SET_NEXT_STATE(LogicAnalyzerState_ChannelActiveStateRequest)
+ EXEC_NEXT_STATE_IMMEDIATELY
+ }
+ else {
+ if (stopTraceUpdate == false) {
+ COMMUNICATIONS_FAILED
+ }
+ else {
+ setTickerMessage(i18n("Data acquisition stopped"));
+ }
+ }
+ }
+ else {
+ if (!m_updateTimeoutTimer->isActive()) {
+ if (stopTraceUpdate == false) {
+ UPDATEDISPLAY_TIMEOUT
+ }
+ else {
+ setTickerMessage(i18n("Data acquisition stopped"));
+ }
+ }
+ }
+ }
+ else if (m_commHandlerState == LogicAnalyzerState_ChannelActiveStateRequest) {
+ // Get channel status, step 1
+ ds << TQString("GETCHANNELACTIVE");
+ m_socket->writeEndOfFrame();
+
+ SET_NEXT_STATE_DATA_WAITING(LogicAnalyzerState_ChannelActiveStateRequest+1)
+ EXEC_NEXT_STATE_IMMEDIATELY
+ }
+ else if (m_commHandlerState == LogicAnalyzerState_ChannelActiveStateRequest+1) {
+ // Get response data
+ if (m_socket->canReadFrame()) {
+ PAT_WATCHDOG_TIMER
+ setTickerMessage(i18n("Loading [Received channel activity status]"));
+
+ // Get channel status, step 2
+ TQString result;
+ ds >> result;
+ if (result == "ACK") {
+ int traceno;
+ for (traceno=0; traceno<m_maxNumberOfTraces; traceno++) {
+ TQ_INT16 active;
+ ds >> active;
+ m_channelActive[traceno+1] = (active != 0);
+ }
+ }
+ m_socket->clearFrameTail();
+
+ if (result == "ACK") {
+ SET_NEXT_STATE(LogicAnalyzerState_TraceSampleCountRequest)
+ EXEC_NEXT_STATE_IMMEDIATELY
+ }
+ else {
+ if (stopTraceUpdate == false) {
+ COMMUNICATIONS_FAILED
+ }
+ else {
+ setTickerMessage(i18n("Data acquisition stopped"));
+ }
+ }
+ }
+ else {
+ if (!m_updateTimeoutTimer->isActive()) {
+ if (stopTraceUpdate == false) {
+ UPDATEDISPLAY_TIMEOUT
+ }
+ else {
+ setTickerMessage(i18n("Data acquisition stopped"));
+ }
+ }
+ }
+ }
+ else if (m_commHandlerState == LogicAnalyzerState_TraceSampleCountRequest) {
+ // Get number of samples in trace, step 1
+ ds << TQString("GETTRACESAMPLECOUNT");
+ m_socket->writeEndOfFrame();
+
+ SET_NEXT_STATE_DATA_WAITING(LogicAnalyzerState_TraceSampleCountRequest+1)
+ EXEC_NEXT_STATE_IMMEDIATELY
+ }
+ else if (m_commHandlerState == LogicAnalyzerState_TraceSampleCountRequest+1) {
+ // Get response data
+ if (m_socket->canReadFrame()) {
+ PAT_WATCHDOG_TIMER
+ setTickerMessage(i18n("Loading [Received trace sample count]"));
+
+ // Get number of samples in trace, step 2
+ TQString result;
+ ds >> result;
+ if (result == "ACK") {
+ int traceno;
+ for (traceno=0; traceno<m_maxNumberOfTraces; traceno++) {
+ ds >> m_samplesInTrace[traceno+1];
+ }
+ }
+ m_socket->clearFrameTail();
+
+ if (result == "ACK") {
+ SET_NEXT_STATE(LogicAnalyzerState_TraceSecondsDivRequest)
+ EXEC_NEXT_STATE_IMMEDIATELY
+ }
+ else {
+ if (stopTraceUpdate == false) {
+ COMMUNICATIONS_FAILED
+ }
+ else {
+ setTickerMessage(i18n("Data acquisition stopped"));
+ }
+ }
+ }
+ else {
+ if (!m_updateTimeoutTimer->isActive()) {
+ if (stopTraceUpdate == false) {
+ UPDATEDISPLAY_TIMEOUT
+ }
+ else {
+ setTickerMessage(i18n("Data acquisition stopped"));
+ }
+ }
+ }
+ }
+ else if (m_commHandlerState == LogicAnalyzerState_TraceSecondsDivRequest) {
+ // Get seconds per division, step 1
+ ds << TQString("GETSECONDSSDIV");
+ m_socket->writeEndOfFrame();
+
+ SET_NEXT_STATE_DATA_WAITING(LogicAnalyzerState_TraceSecondsDivRequest+1)
+ EXEC_NEXT_STATE_IMMEDIATELY
+ }
+ else if (m_commHandlerState == LogicAnalyzerState_TraceSecondsDivRequest+1) {
+ // Get response data
+ if (m_socket->canReadFrame()) {
+ PAT_WATCHDOG_TIMER
+ setTickerMessage(i18n("Loading [Received seconds/div]"));
+
+ // Get seconds per division, step 2
+ TQString result;
+ ds >> result;
+ if (result == "ACK") {
+ int traceno;
+ for (traceno=0; traceno<m_maxNumberOfTraces; traceno++) {
+ ds >> m_secsDiv[traceno+1];
+ }
+ }
+ m_socket->clearFrameTail();
+
+ if (result == "ACK") {
+ SET_NEXT_STATE(LogicAnalyzerState_RunningRequest)
+ EXEC_NEXT_STATE_IMMEDIATELY
+ }
+ else {
+ if (stopTraceUpdate == false) {
+ COMMUNICATIONS_FAILED
+ }
+ else {
+ setTickerMessage(i18n("Data acquisition stopped"));
+ }
+ }
+ }
+ else {
+ if (!m_updateTimeoutTimer->isActive()) {
+ if (stopTraceUpdate == false) {
+ UPDATEDISPLAY_TIMEOUT
+ }
+ else {
+ setTickerMessage(i18n("Data acquisition stopped"));
+ }
+ }
+ }
+ }
+ else if (m_commHandlerState == LogicAnalyzerState_RunningRequest) {
+ // Get running, step 1
+ ds << TQString("GETRUNNING");
+ ds << m_currentOpChannel;
+ m_socket->writeEndOfFrame();
+
+ SET_NEXT_STATE_DATA_WAITING(LogicAnalyzerState_RunningRequest+1)
+ EXEC_NEXT_STATE_IMMEDIATELY
+ }
+ else if (m_commHandlerState == LogicAnalyzerState_RunningRequest+1) {
+ // Get response data
+ if (m_socket->canReadFrame()) {
+ PAT_WATCHDOG_TIMER
+ setTickerMessage(i18n("Loading [Received run status]"));
+
+ // Get running, step 2
+ TQString result;
+ ds >> result;
+ if (result == "ACK") {
+ TQ_INT16 status;
+ ds >> status;
+ m_running = (status != 0);
+ }
+ m_socket->clearFrameTail();
+
+ if (result == "ACK") {
+ // Update display widget(s)
+ updateGraticule();
+ }
+
+ if (result == "ACK") {
+ m_currentOpChannel = getNextActiveChannel(0, m_channelActive, m_maxNumberOfTraces);
+ SET_NEXT_STATE(LogicAnalyzerState_TraceRequest)
+ EXEC_NEXT_STATE_IMMEDIATELY
+ }
+ else {
+ if (stopTraceUpdate == false) {
+ COMMUNICATIONS_FAILED
+ }
+ else {
+ setTickerMessage(i18n("Data acquisition stopped"));
+ }
+ }
+ }
+ else {
+ if (!m_updateTimeoutTimer->isActive()) {
+ if (stopTraceUpdate == false) {
+ UPDATEDISPLAY_TIMEOUT
+ }
+ else {
+ setTickerMessage(i18n("Data acquisition stopped"));
+ }
+ }
+ }
+ }
+ else if (m_commHandlerState == LogicAnalyzerState_TraceRequest) {
+ // Get trace, step 1
+ ds << TQString("GETLOGICTRACES");
+ ds << m_currentOpChannel;
+ m_socket->writeEndOfFrame();
+
+ m_lastChangesRequireFullUpdate = false;
+ SET_NEXT_STATE_DATA_WAITING(LogicAnalyzerState_TraceRequest+1)
+ EXEC_NEXT_STATE_IMMEDIATELY
+ }
+ else if (m_commHandlerState == LogicAnalyzerState_TraceRequest+1) {
+ // Get response data
+ if (m_socket->canReadFrame()) {
+ PAT_WATCHDOG_TIMER
+ setTickerMessage(i18n("Running [Received traces]"));
+
+ // Get trace, step 2
+ TQString result;
+ ds >> result;
+
+ if (result == "ACK") {
+ int traceno;
+ for (traceno=0; traceno<m_maxNumberOfTraces; traceno++) {
+ TQDoubleArray trace;
+ TQDoubleArray positions;
+
+ // Get trace data
+ ds >> trace;
+ ds >> positions;
+
+ // Set trace widgets
+ m_traceWidget->setSamples(traceno, trace, true);
+ m_traceWidget->setPositions(traceno, positions, (traceno<(m_maxNumberOfTraces-1))?true:false);
+ }
+ }
+ m_socket->clearFrameTail();
+
+ // Update display widget(s)
+ postProcessTrace();
+ m_traceWidget->repaint(false);
+
+ if (result == "ACK") {
+ if ((m_channelActiveSet[m_currentOpChannel] == false)
+ && (m_voltsDivSet[m_currentOpChannel] == false)
+ && (m_runningSet == false)
+ ) {
+ SET_NEXT_STATE(LogicAnalyzerState_TraceRequest)
+ }
+ else {
+ m_currentOpChannel = getNextActiveChannel(0, m_channelActive, m_maxNumberOfTraces);
+ SET_NEXT_STATE(LogicAnalyzerState_ChannelActiveStateUpdate)
+ }
+ EXEC_NEXT_STATE_IMMEDIATELY
+ }
+ else {
+ if (stopTraceUpdate == false) {
+ COMMUNICATIONS_FAILED
+ }
+ else {
+ setTickerMessage(i18n("Data acquisition stopped"));
+ }
+ }
+ }
+ else {
+ if (!m_updateTimeoutTimer->isActive()) {
+ if (stopTraceUpdate == false) {
+ UPDATEDISPLAY_TIMEOUT
+ }
+ else {
+ setTickerMessage(i18n("Data acquisition stopped"));
+ }
+ }
+ }
+ }
+ else if (m_commHandlerState == LogicAnalyzerState_ChannelActiveStateUpdate) {
+ if (m_channelActiveSet[m_currentOpChannel]) {
+ // Set channel active, step 1
+ ds << TQString("SETCHANNELACTIVE");
+ ds << m_currentOpChannel;
+ TQ_INT16 active = (m_channelActive[m_currentOpChannel])?1:0;
+ ds << active;
+ m_socket->writeEndOfFrame();
+
+ m_lastChangesRequireFullUpdate = true;
+ m_channelActiveSet[m_currentOpChannel] = false;
+ SET_NEXT_STATE_DATA_WAITING(LogicAnalyzerState_ChannelActiveStateUpdate+1)
+ }
+ else {
+ if (m_currentOpChannel < (m_maxNumberOfTraces-1)) {
+ m_currentOpChannel++;
+ SET_NEXT_STATE(LogicAnalyzerState_ChannelActiveStateUpdate)
+ }
+ else {
+ m_currentOpChannel = getNextActiveChannel(0, m_channelActive, m_maxNumberOfTraces);
+ if (m_lastChangesRequireFullUpdate) {
+ SET_NEXT_STATE(LogicAnalyzerState_TraceSecondsDivRequest)
+ }
+ else {
+ SET_NEXT_STATE(LogicAnalyzerState_TraceVoltsDivUpdate)
+ }
+ }
+ }
+ EXEC_NEXT_STATE_IMMEDIATELY
+ }
+ else if (m_commHandlerState == LogicAnalyzerState_ChannelActiveStateUpdate+1) {
+ // Get response data
+ if (m_socket->canReadFrame()) {
+ PAT_WATCHDOG_TIMER
+ setTickerMessage(i18n("Updating [Set channel %1 activity status]").arg(m_currentOpChannel));
+
+ // Set channel active, step 2
+ TQString result;
+ ds >> result;
+ m_socket->clearFrameTail();
+
+ if (result == "ACK") {
+ m_currentOpChannel = getNextActiveChannel(m_currentOpChannel, m_channelActive, m_maxNumberOfTraces);
+ if (m_currentOpChannel > 0) {
+ SET_NEXT_STATE(LogicAnalyzerState_ChannelActiveStateUpdate)
+ }
+ else {
+ m_currentOpChannel = getNextActiveChannel(0, m_channelActive, m_maxNumberOfTraces);
+ if (m_lastChangesRequireFullUpdate) {
+ SET_NEXT_STATE(LogicAnalyzerState_TraceSecondsDivRequest)
+ }
+ else {
+ SET_NEXT_STATE(LogicAnalyzerState_TraceVoltsDivUpdate)
+ }
+ }
+ EXEC_NEXT_STATE_IMMEDIATELY
+ }
+ else {
+ if (stopTraceUpdate == false) {
+ COMMUNICATIONS_FAILED
+ }
+ else {
+ setTickerMessage(i18n("Data acquisition stopped"));
+ }
+ }
+ }
+ else {
+ if (!m_updateTimeoutTimer->isActive()) {
+ if (stopTraceUpdate == false) {
+ UPDATEDISPLAY_TIMEOUT
+ }
+ else {
+ setTickerMessage(i18n("Data acquisition stopped"));
+ }
+ }
+ }
+ }
+ else if (m_commHandlerState == LogicAnalyzerState_TraceVoltsDivUpdate) {
+ if (m_voltsDivSet[m_currentOpChannel]) {
+ // Set volts per division, step 1
+ ds << TQString("SETVOLTSDIV");
+ ds << m_currentOpChannel;
+ ds << m_voltsDiv[m_currentOpChannel];
+ m_socket->writeEndOfFrame();
+
+ m_voltsDivSet[m_currentOpChannel] = false;
+ SET_NEXT_STATE_DATA_WAITING(LogicAnalyzerState_TraceVoltsDivUpdate+1)
+ }
+ else {
+ m_currentOpChannel = getNextActiveChannel(m_currentOpChannel, m_channelActive, m_maxNumberOfTraces);
+ if (m_currentOpChannel > 0) {
+ SET_NEXT_STATE(LogicAnalyzerState_TraceVoltsDivUpdate)
+ }
+ else {
+ SET_NEXT_STATE(LogicAnalyzerState_RunningUpdate)
+ }
+ }
+ EXEC_NEXT_STATE_IMMEDIATELY
+ }
+ else if (m_commHandlerState == LogicAnalyzerState_TraceVoltsDivUpdate+1) {
+ // Get response data
+ if (m_socket->canReadFrame()) {
+ PAT_WATCHDOG_TIMER
+ setTickerMessage(i18n("Updating [Set volts/div for channel %1]").arg(m_currentOpChannel));
+
+ // Set volts per division, step 2
+ TQString result;
+ ds >> result;
+ m_socket->clearFrameTail();
+
+ if (result == "ACK") {
+ m_currentOpChannel = getNextActiveChannel(m_currentOpChannel, m_channelActive, m_maxNumberOfTraces);
+ if (m_currentOpChannel > 0) {
+ SET_NEXT_STATE(LogicAnalyzerState_TraceVoltsDivUpdate)
+ }
+ else {
+ SET_NEXT_STATE(LogicAnalyzerState_RunningUpdate)
+ }
+ EXEC_NEXT_STATE_IMMEDIATELY
+ }
+ else {
+ if (stopTraceUpdate == false) {
+ COMMUNICATIONS_FAILED
+ }
+ else {
+ setTickerMessage(i18n("Data acquisition stopped"));
+ }
+ }
+ }
+ else {
+ if (!m_updateTimeoutTimer->isActive()) {
+ if (stopTraceUpdate == false) {
+ UPDATEDISPLAY_TIMEOUT
+ }
+ else {
+ setTickerMessage(i18n("Data acquisition stopped"));
+ }
+ }
+ }
+ }
+ else if (m_commHandlerState == LogicAnalyzerState_RunningUpdate) {
+ if (m_runningSet) {
+ // Set running, step 1
+ ds << TQString("SETRUNNING");
+ TQ_INT16 running = (m_running)?1:0;
+ ds << running;
+ m_socket->writeEndOfFrame();
+
+ m_runningSet = false;
+ SET_NEXT_STATE_DATA_WAITING(LogicAnalyzerState_RunningUpdate+1)
+ }
+ else {
+ m_currentOpChannel = getNextActiveChannel(0, m_channelActive, m_maxNumberOfTraces);
+ SET_NEXT_STATE(LogicAnalyzerState_TraceRequest)
+ }
+ EXEC_NEXT_STATE_IMMEDIATELY
+ }
+ else if (m_commHandlerState == LogicAnalyzerState_RunningUpdate+1) {
+ // Get response data
+ if (m_socket->canReadFrame()) {
+ PAT_WATCHDOG_TIMER
+ setTickerMessage(i18n("Updating [Set run status]"));
+
+ // Set running, step 2
+ TQString result;
+ ds >> result;
+ m_socket->clearFrameTail();
+
+ if (result == "ACK") {
+ m_currentOpChannel = getNextActiveChannel(0, m_channelActive, m_maxNumberOfTraces);
+ SET_NEXT_STATE(LogicAnalyzerState_TraceRequest)
+ EXEC_NEXT_STATE_IMMEDIATELY
+ }
+ else {
+ if (stopTraceUpdate == false) {
+ COMMUNICATIONS_FAILED
+ }
+ else {
+ setTickerMessage(i18n("Data acquisition stopped"));
+ }
+ }
+ }
+ else {
+ if (!m_updateTimeoutTimer->isActive()) {
+ if (stopTraceUpdate == false) {
+ UPDATEDISPLAY_TIMEOUT
+ }
+ else {
+ setTickerMessage(i18n("Data acquisition stopped"));
+ }
+ }
+ }
+ }
+ else if (m_commHandlerState == LogicAnalyzerState_ExternalCommandRequest) {
+ // Execute pending command
+ m_commHandlerMode = 2;
+ m_socket->clearIncomingData();
+ EXEC_NEXT_STATE_IMMEDIATELY
+ }
+ SET_WATCHDOG_TIMER
+ }
+ else if (m_commHandlerMode == 2) {
+ if (m_commHandlerCommandState == 0) {
+ m_commHandlerMode = 0;
+ m_commHandlerState = LogicAnalyzerState_ChannelActiveStateRequest;
+ EXEC_NEXT_STATE_IMMEDIATELY
+ }
+ else if (m_commHandlerCommandState == 1) {
+ // Set channel active
+ ds << TQString("SETCHANNELACTIVE");
+ ds << m_nextOpChannel;
+ ds << m_nextOpParameter16;
+ m_socket->writeEndOfFrame();
+
+ m_commHandlerCommandState = 2;
+ EXEC_NEXT_STATE_IMMEDIATELY
+ }
+ else if (m_commHandlerCommandState == 2) {
+ // Get response data
+ if (m_socket->canReadFrame()) {
+ PAT_WATCHDOG_TIMER
+ setTickerMessage(i18n("Connected"));
+
+ // Set channel active, step 2
+ TQString result;
+ ds >> result;
+ m_socket->clearFrameTail();
+
+ if (result == "ACK") {
+ m_commHandlerCommandState = 0;
+ EXEC_NEXT_STATE_IMMEDIATELY
+ }
+ else {
+ if (stopTraceUpdate == false) {
+ COMMUNICATIONS_FAILED
+ }
+ else {
+ setTickerMessage(i18n("Data acquisition stopped"));
+ }
+ }
+ }
+ else {
+ if (!m_updateTimeoutTimer->isActive()) {
+ if (stopTraceUpdate == false) {
+ UPDATEDISPLAY_TIMEOUT
+ }
+ else {
+ setTickerMessage(i18n("Data acquisition stopped"));
+ }
+ }
+ }
+ }
+ else if (m_commHandlerCommandState == 3) {
+ if (stopTraceUpdate == false) {
+ m_commHandlerCommandState = 0;
+ EXEC_NEXT_STATE_IMMEDIATELY
+ }
+ else {
+ setTickerMessage(i18n("Data acquisition stopped"));
+ }
+ }
+ }
+ }
+ else {
+ m_commHandlerState = LogicAnalyzerState_ResetRequest;
+ m_commHandlerCommandState = 0;
+ }
+
+ processLockouts();
+
+ m_instrumentMutex->unlock();
+}
+
+void LogicAnalyzerPart::postProcessTrace() {
+ return;
+}
+
+void LogicAnalyzerPart::startDAQ() {
+ stopTraceUpdate = false;
+ if (m_socket) m_socket->clearIncomingData();
+ EXEC_NEXT_STATE_IMMEDIATELY
+}
+
+void LogicAnalyzerPart::stopDAQ() {
+ if (m_commHandlerMode < 2) {
+ stopTraceUpdate = true;
+ for (int i=0; i<=MAXTRACES;i++) {
+ m_channelActiveSet[i] = false;
+ m_voltsDivSet[i] = false;
+ }
+ m_runningSet = false;
+ m_commHandlerMode = 1;
+ m_commHandlerCommandState = 3;
+ mainEventLoop();
+ }
+}
+
+#define WAVEFORM_MAGIC_NUMBER 1
+#define WAVEFORM_FILE_VERSION 1
+
+void LogicAnalyzerPart::saveWaveforms() {
+ TQString saveFileName = KFileDialog::getSaveFileName(TQString::null, "*.wfm|Waveform Files (*.wfm)", 0, i18n("Save waveforms..."));
+ if (saveFileName != "") {
+ TQFile file(saveFileName);
+ file.open(IO_WriteOnly);
+ TQDataStream ds(&file);
+ TQ_INT32 magicNumber = WAVEFORM_MAGIC_NUMBER;
+ TQ_INT32 version = WAVEFORM_FILE_VERSION;
+ ds << magicNumber;
+ ds << version;
+ ds << m_hdivs;
+ ds << m_vdivs;
+ ds << m_maxNumberOfTraces;
+ for (int traceno=1; traceno<=m_maxNumberOfTraces; traceno++) {
+ TQ_UINT8 boolValue;
+ boolValue = m_channelActive[traceno];
+ ds << boolValue;
+ ds << m_samplesInTrace[traceno];
+ ds << m_voltsDiv[traceno];
+ ds << m_secsDiv[traceno];
+ ds << m_traceWidget->samples(traceno-1);
+ ds << m_traceWidget->positions(traceno-1);
+ }
+ for (int cursorno=0; cursorno<5; cursorno++) {
+ ds << m_traceWidget->cursorPosition(cursorno);
+ }
+ }
+}
+
+void LogicAnalyzerPart::recallWaveforms() {
+ TQString openFileName = KFileDialog::getOpenFileName(TQString::null, "*.wfm|Waveform Files (*.wfm)", 0, i18n("Open waveforms..."));
+ if (openFileName != "") {
+ TQFile file(openFileName);
+ file.open(IO_ReadOnly);
+ TQDataStream ds(&file);
+ TQ_INT32 magicNumber;
+ TQ_INT32 version;
+ ds >> magicNumber;
+ if (magicNumber == WAVEFORM_MAGIC_NUMBER) {
+ ds >> version;
+ if (version == WAVEFORM_FILE_VERSION) {
+ ds >> m_hdivs;
+ ds >> m_vdivs;
+ ds >> m_maxNumberOfTraces;
+ for (int traceno=1; traceno<=m_maxNumberOfTraces; traceno++) {
+ TQ_UINT8 boolValue;
+ ds >> boolValue;
+ m_channelActive[traceno] = (boolValue!=0)?true:false;
+ ds >> m_samplesInTrace[traceno];
+ ds >> m_voltsDiv[traceno];
+ ds >> m_secsDiv[traceno];
+ double offset;
+ TQDoubleArray values;
+ TQDoubleArray positions;
+ ds >> offset;
+ ds >> values;
+ ds >> positions;
+ m_traceWidget->setSamples(traceno-1, values);
+ m_traceWidget->setPositions(traceno-1, positions);
+ m_traceWidget->setTraceOffset(traceno-1, offset);
+ }
+ for (int cursorno=0; cursorno<5; cursorno++) {
+ double cursorPos;
+ ds >> cursorPos;
+ m_traceWidget->setCursorPosition(cursorno, cursorPos);
+ }
+ updateGraticule();
+ postProcessTrace();
+ m_traceWidget->repaint(false);
+ }
+ else {
+ KMessageBox::error(0, i18n("<qt>The selected waveform file version does not match this client</qt>"), i18n("Invalid File"));
+ }
+ }
+ else {
+ KMessageBox::error(0, i18n("<qt>Invalid waveform file selected</qt>"), i18n("Invalid File"));
+ }
+ }
+}
+
+void LogicAnalyzerPart::updateGraticule() {
+ m_traceWidget->setNumberOfHorizontalDivisions(m_hdivs);
+ m_traceWidget->setNumberOfVerticalDivisions(m_vdivs);
+
+ for (int traceno=1; traceno<=m_maxNumberOfTraces; traceno++) {
+ m_traceWidget->setTraceEnabled(traceno-1, m_channelActive[traceno], TraceWidget::NoText, true);
+ m_traceWidget->setTraceName(traceno-1, m_channelName[traceno], true);
+ m_traceWidget->setTraceHorizontalUnits(traceno-1, "s", true);
+ m_traceWidget->setTraceVerticalUnits(traceno-1, "", true);
+
+ m_traceWidget->setNumberOfSamples(traceno-1, m_samplesInTrace[traceno], true);
+
+ m_traceWidget->setDisplayLimits(traceno-1, TQRectF(0.0, (m_voltsDiv[traceno]*m_vdivs)/2.0, (m_secsDiv[traceno]*m_hdivs), (m_voltsDiv[traceno]*m_vdivs)/-2.0), (traceno<m_maxNumberOfTraces)?true:false);
+ }
+}
+
+void LogicAnalyzerPart::startLogicAnalyzer() {
+ m_running = true;
+ m_runningSet = true;
+}
+
+void LogicAnalyzerPart::stopLogicAnalyzer() {
+ m_running = false;
+ m_runningSet = true;
+}
+
+TDEAboutData* LogicAnalyzerPart::createAboutData() {
+ return new TDEAboutData( APP_NAME, I18N_NOOP( APP_PRETTYNAME ), APP_VERSION );
+}
+
+} //namespace RemoteLab
+
+#include "part.moc"
diff --git a/clients/tde/src/part/logicanalyzer/part.h b/clients/tde/src/part/logicanalyzer/part.h
new file mode 100644
index 0000000..09d5605
--- /dev/null
+++ b/clients/tde/src/part/logicanalyzer/part.h
@@ -0,0 +1,94 @@
+//Author: Timothy Pearson <kb9vqf@pearsoncomputing.net>, (C) 2014
+//Copyright: See COPYING file that comes with this distribution
+
+#ifndef REMOTELAB_LOGICANALYZERPART_H
+#define REMOTELAB_LOGICANALYZERPART_H
+
+#include <tdeparts/browserextension.h>
+#include <tdeparts/statusbarextension.h>
+#include <tdeparts/part.h>
+#include <kurl.h>
+
+#include <tqtrla.h>
+
+#define MAXTRACES 255
+
+class TDEAboutData;
+using KParts::StatusBarExtension;
+class TraceWidget;
+class TQSocket;
+class TQTimer;
+class TQMutex;
+class TQRectF;
+class TQGridLayout;
+class TQCheckBox;
+class TQGroupBox;
+class LogicAnalyzerBase;
+
+namespace RemoteLab
+{
+ class LogicAnalyzerPart : public KParts::RemoteInstrumentPart
+ {
+ Q_OBJECT
+
+ public:
+ LogicAnalyzerPart( QWidget *, const char *, TQObject *, const char *, const TQStringList&);
+ ~LogicAnalyzerPart();
+
+ virtual bool openFile() { return false; } // pure virtual in the base class
+ virtual bool closeURL();
+ static TDEAboutData *createAboutData();
+
+ public slots:
+ virtual bool openURL(const KURL &url);
+
+ private slots:
+ void postInit();
+ void processLockouts();
+ void updateGraticule();
+ void connectionFinishedCallback();
+ void disconnectFromServerCallback();
+ void connectionStatusChangedCallback();
+ void setTickerMessage(TQString message);
+ void mainEventLoop();
+ void startDAQ();
+ void stopDAQ();
+ void startLogicAnalyzer();
+ void stopLogicAnalyzer();
+ void saveWaveforms();
+ void recallWaveforms();
+ virtual void postProcessTrace();
+
+ private:
+ TraceWidget* m_traceWidget;
+ TQGridLayout* m_traceControlWidgetGrid;
+ int m_commHandlerState;
+ int m_commHandlerMode;
+ int m_commHandlerCommandState;
+ TQTimer* m_forcedUpdateTimer;
+ TQTimer* m_updateTimeoutTimer;
+ bool m_connectionActiveAndValid;
+ unsigned char m_tickerState;
+ TQ_INT16 m_maxNumberOfTraces;
+ TQ_INT32 m_currentOpChannel;
+ TQ_INT32 m_nextOpChannel;
+ TQ_INT16 m_nextOpParameter16;
+ TQ_INT16 m_hdivs;
+ TQ_INT16 m_vdivs;
+ bool m_running;
+ TQ_INT32 m_samplesInTrace[MAXTRACES+1];
+ bool m_channelActive[MAXTRACES+1];
+ TQString m_channelName[MAXTRACES+1];
+ double m_voltsDiv[MAXTRACES+1];
+ double m_secsDiv[MAXTRACES+1];
+ bool m_runningSet;
+ bool m_voltsDivSet[MAXTRACES+1];
+ bool m_channelActiveSet[MAXTRACES+1];
+ bool m_lastChangesRequireFullUpdate;
+ LogicAnalyzerBase* m_base;
+ TQMutex* m_instrumentMutex;
+ bool stopTraceUpdate;
+ };
+}
+
+#endif
diff --git a/clients/tde/src/part/scope/part.cpp b/clients/tde/src/part/scope/part.cpp
index 94990b4..48d7211 100644
--- a/clients/tde/src/part/scope/part.cpp
+++ b/clients/tde/src/part/scope/part.cpp
@@ -681,7 +681,7 @@ void ScopePart::mainEventLoop() {
m_socket->clearFrameTail();
if (result == "ACK") {
- if (m_currentOpChannel < m_maxNumberOfTraces) {
+ if (m_currentOpChannel < (m_maxNumberOfTraces-1)) {
m_currentOpChannel++;
SET_NEXT_STATE(ScopeState_ChannelActiveStateRequest)
}
@@ -799,7 +799,7 @@ void ScopePart::mainEventLoop() {
m_socket->clearFrameTail();
if (result == "ACK") {
- if (m_currentOpChannel < m_maxNumberOfTraces) {
+ if (m_currentOpChannel < (m_maxNumberOfTraces-1)) {
m_currentOpChannel++;
SET_NEXT_STATE(ScopeState_TracePermittedVoltsDivRequest)
}
@@ -1178,7 +1178,7 @@ void ScopePart::mainEventLoop() {
SET_NEXT_STATE_DATA_WAITING(ScopeState_ChannelActiveStateUpdate+1)
}
else {
- if (m_currentOpChannel < m_maxNumberOfTraces) {
+ if (m_currentOpChannel < (m_maxNumberOfTraces-1)) {
m_currentOpChannel++;
SET_NEXT_STATE(ScopeState_ChannelActiveStateUpdate)
}
@@ -1646,20 +1646,20 @@ void ScopePart::updateGraticule() {
if (m_maxNumberOfTraces > 3) m_base->traceZoomWidget->setTraceColor(3, TQColor(128, 128, 255));
for (int traceno=1; traceno<=m_maxNumberOfTraces; traceno++) {
- m_traceWidget->setTraceEnabled(traceno-1, m_channelActive[traceno]);
- m_traceWidget->setTraceName(traceno-1, TQString("Channel %1").arg(traceno));
- m_traceWidget->setTraceHorizontalUnits(traceno-1, "s");
- m_traceWidget->setTraceVerticalUnits(traceno-1, "V");
+ m_traceWidget->setTraceEnabled(traceno-1, m_channelActive[traceno], TraceWidget::FullText, true);
+ m_traceWidget->setTraceName(traceno-1, TQString("Channel %1").arg(traceno), true);
+ m_traceWidget->setTraceHorizontalUnits(traceno-1, "s", true);
+ m_traceWidget->setTraceVerticalUnits(traceno-1, "V", true);
- m_base->traceZoomWidget->setTraceEnabled(traceno-1, m_channelActive[traceno], false);
- m_base->traceZoomWidget->setTraceName(traceno-1, TQString("Channel %1").arg(traceno));
- m_base->traceZoomWidget->setTraceHorizontalUnits(traceno-1, "s");
- m_base->traceZoomWidget->setTraceVerticalUnits(traceno-1, "V");
+ m_base->traceZoomWidget->setTraceEnabled(traceno-1, m_channelActive[traceno], TraceWidget::SummaryText, true);
+ m_base->traceZoomWidget->setTraceName(traceno-1, TQString("Channel %1").arg(traceno), true);
+ m_base->traceZoomWidget->setTraceHorizontalUnits(traceno-1, "s", true);
+ m_base->traceZoomWidget->setTraceVerticalUnits(traceno-1, "V", true);
- m_traceWidget->setNumberOfSamples(traceno-1, m_samplesInTrace[traceno]);
- m_base->traceZoomWidget->setNumberOfSamples(traceno-1, m_samplesInTrace[traceno]);
+ m_traceWidget->setNumberOfSamples(traceno-1, m_samplesInTrace[traceno], true);
+ m_base->traceZoomWidget->setNumberOfSamples(traceno-1, m_samplesInTrace[traceno], (traceno<m_maxNumberOfTraces)?true:false);
- m_traceWidget->setDisplayLimits(traceno-1, TQRectF(0.0, (m_voltsDiv[traceno]*m_vdivs)/2.0, (m_secsDiv[traceno]*m_hdivs), (m_voltsDiv[traceno]*m_vdivs)/-2.0));
+ m_traceWidget->setDisplayLimits(traceno-1, TQRectF(0.0, (m_voltsDiv[traceno]*m_vdivs)/2.0, (m_secsDiv[traceno]*m_hdivs), (m_voltsDiv[traceno]*m_vdivs)/-2.0), (traceno<m_maxNumberOfTraces)?true:false);
if (m_traceControlWidgetList[traceno-1]) {
m_traceControlWidgetList[traceno-1]->setSelectedVoltsPerDiv(m_voltsDiv[traceno]);
m_traceControlWidgetList[traceno-1]->setTraceEnabled(m_channelActive[traceno]);
diff --git a/clients/tde/src/part/sensormonitor/part.cpp b/clients/tde/src/part/sensormonitor/part.cpp
index 61d7b94..abee954 100644
--- a/clients/tde/src/part/sensormonitor/part.cpp
+++ b/clients/tde/src/part/sensormonitor/part.cpp
@@ -696,7 +696,7 @@ void SensorMonitorPart::updateGraticule() {
m_traceWidget->setTraceHorizontalUnits(traceno, "s");
m_traceWidget->setTraceVerticalUnits(traceno, m_sensorList[traceno].units);
- m_base->traceZoomWidget->setTraceEnabled(traceno, m_channelActive[traceno], false);
+ m_base->traceZoomWidget->setTraceEnabled(traceno, m_channelActive[traceno], TraceWidget::SummaryText);
m_base->traceZoomWidget->setTraceName(traceno, i18n("Sensor %1").arg(m_sensorList[traceno].name));
m_base->traceZoomWidget->setTraceHorizontalUnits(traceno, "s");
m_base->traceZoomWidget->setTraceVerticalUnits(traceno, m_sensorList[traceno].units);
diff --git a/clients/tde/src/widgets/tracewidget.cpp b/clients/tde/src/widgets/tracewidget.cpp
index 6f11ffc..04a2a00 100644
--- a/clients/tde/src/widgets/tracewidget.cpp
+++ b/clients/tde/src/widgets/tracewidget.cpp
@@ -205,7 +205,7 @@ void TraceLabelLayout::setGeometry(const TQRect &rect) {
int font_vertical_offset = font_height/2;
int graticule_height = m_traceWidget->m_graticuleWidget->height();
- int y = (((currentTrace->offset-currentTrace->topEdge)/(currentTrace->bottomEdge-currentTrace->topEdge))*(graticule_height))-font_vertical_offset;
+ int y = ((((currentTrace->offset+currentTrace->textOffset)-currentTrace->topEdge)/(currentTrace->bottomEdge-currentTrace->topEdge))*(graticule_height))-font_vertical_offset;
if (m_traceWidget->m_showLeftTraceInfoArea) {
if ((y < 0) || ((y+font_height) > graticule_height)) {
currentTrace->leftLabel->hide();
@@ -228,6 +228,7 @@ void TraceLabelLayout::invalidate() {
TQSize TraceLabelLayout::sizeHint() const
{
+ TQSize size;
if (!m_traceWidget->m_showLeftTraceInfoArea) {
return TQSize(0, 0);
}
@@ -239,11 +240,19 @@ TQSize TraceLabelLayout::sizeHint() const
++it;
s = s.expandedTo(item->sizeHint());
}
- return s + TQSize(spacing(), spacing());
+ size = s + TQSize(spacing(), spacing());
+
+ if (m_traceWidget->m_leftTraceInfoLabelsFit && list.getFirst()) {
+ return TQSize(size.width(), ((list.getFirst()->sizeHint().height() + m_traceWidget->m_leftTraceInfoAreaFitSpacing) * list.count()));
+ }
+ else {
+ return size;
+ }
}
TQSize TraceLabelLayout::minimumSize() const
{
+ TQSize minSize;
if (!m_traceWidget->m_showLeftTraceInfoArea) {
return TQSize(0, 0);
}
@@ -255,7 +264,14 @@ TQSize TraceLabelLayout::minimumSize() const
++it;
s = s.expandedTo(item->minimumSize());
}
- return s + TQSize(spacing(), spacing());
+ minSize = s + TQSize(spacing(), spacing());
+
+ if (m_traceWidget->m_leftTraceInfoLabelsFit && list.getFirst()) {
+ return TQSize(minSize.width(), ((list.getFirst()->minimumSize().height()+ m_traceWidget->m_leftTraceInfoAreaFitSpacing) * list.count()));
+ }
+ else {
+ return minSize;
+ }
}
TraceData::TraceData(TraceWidget* parent, TQWidget* labelParent) : TQObject(), parentWidget(parent) {
@@ -264,6 +280,7 @@ TraceData::TraceData(TraceWidget* parent, TQWidget* labelParent) : TQObject(), p
leftEdgeIndex = -1;
rightEdgeIndex = -1;
offset = 0.0;
+ textOffset = 0.0;
leftEdge = 0;
rightEdge = 0;
topEdge = 0;
@@ -286,7 +303,7 @@ TraceData::TraceData(TraceWidget* parent, TQWidget* labelParent) : TQObject(), p
leftLabel = new TQLabel(labelParent);
leftLabel->setPaletteBackgroundColor(labelParent->paletteBackgroundColor());
leftLabel->setPaletteForegroundColor(color);
- leftLabel->setAlignment(TQt::AlignHCenter|TQt::AlignVCenter|TQt::SingleLine);
+ leftLabel->setAlignment(TQt::AlignLeft|TQt::AlignVCenter|TQt::SingleLine);
font = leftLabel->font();
font.setPointSize(font.pointSize()-1);
leftLabel->setFont(font);
@@ -421,7 +438,7 @@ void TraceData::drawTrace(TQPainter* p, int graticule_width, int graticule_heigh
int font_height = p->fontMetrics().boundingRect("→").height();
x = 0;
- y = (((offset-topEdge)/(bottomEdge-topEdge))*(graticule_height))+(font_height/2)-(font_vertical_offset/2);
+ y = ((((offset+textOffset)-topEdge)/(bottomEdge-topEdge))*(graticule_height))+(font_height/2)-(font_vertical_offset/2);
if (y > graticule_height) {
font_height = p->fontMetrics().boundingRect("↓").height();
y = graticule_height-font_vertical_offset;
@@ -1047,7 +1064,10 @@ TraceWidget::TraceWidget(TQWidget* parent, const char* name) : TQWidget(parent,
m_zoomCursorStartIndex(0),
m_zoomBoxEnabled(false),
m_useAbsoluteHorizontalRange(true),
- m_showLeftTraceInfoArea(false) {
+ m_showLeftTraceInfoArea(false),
+ m_leftTraceInfoLabelsFit(false),
+ m_leftTraceInfoAreaFitSpacing(0),
+ m_minimumPixelsPerHorizDiv(0) {
setBackgroundMode(NoBackground);
setSizePolicy(TQSizePolicy(TQSizePolicy::MinimumExpanding, TQSizePolicy::MinimumExpanding));
@@ -1115,17 +1135,28 @@ void TraceWidget::setBackgroundColor(const TQColor color) {
}
}
-void TraceWidget::setNumberOfSamples(uint traceNumber, unsigned int samples) {
+void TraceWidget::setNumberOfSamples(uint traceNumber, unsigned int samples, bool deferUpdate) {
VERIFY_TRACE_ARRAY_SIZE
+ int i;
+ int prev_samples = m_traceArray[traceNumber]->sampleArray.count();
+
m_traceArray[traceNumber]->numberOfSamples = samples;
m_traceArray[traceNumber]->sampleArray.resize(samples);
m_traceArray[traceNumber]->positionArray.resize(samples);
m_traceArray[traceNumber]->leftEdgeIndex = -1;
m_traceArray[traceNumber]->rightEdgeIndex = -1;
- m_graticuleWidget->updateGraticule();
- updateTraceText();
+ // Zero the uninitialized portion of the data arrays to avoid ugly drawing artifacts on resize
+ for (i=prev_samples; i<samples; i++) {
+ m_traceArray[traceNumber]->sampleArray[i] = 0;
+ m_traceArray[traceNumber]->positionArray[i] = 0;
+ }
+
+ if (!deferUpdate) {
+ m_graticuleWidget->updateGraticule();
+ updateTraceText();
+ }
}
void TraceWidget::setNumberOfHorizontalDivisions(unsigned int divisions) {
@@ -1142,7 +1173,7 @@ void TraceWidget::setNumberOfVerticalDivisions(unsigned int divisions) {
updateCursorText();
}
-void TraceWidget::setDisplayLimits(uint traceNumber, TQRectF limits) {
+void TraceWidget::setDisplayLimits(uint traceNumber, TQRectF limits, bool deferUpdate) {
VERIFY_TRACE_ARRAY_SIZE
m_traceArray[traceNumber]->leftEdge = limits.x();
@@ -1152,10 +1183,12 @@ void TraceWidget::setDisplayLimits(uint traceNumber, TQRectF limits) {
m_traceArray[traceNumber]->leftEdgeIndex = -1;
m_traceArray[traceNumber]->rightEdgeIndex = -1;
- m_graticuleWidget->updateGraticule();
- m_graticuleWidget->repaint(false);
- updateTraceText();
- updateCursorText();
+ if (!deferUpdate) {
+ m_graticuleWidget->updateGraticule();
+ m_graticuleWidget->repaint(false);
+ updateTraceText();
+ updateCursorText();
+ }
}
TQRectF TraceWidget::displayLimits(uint traceNumber) {
@@ -1266,13 +1299,15 @@ TQDoubleArray& TraceWidget::samples(uint traceNumber) {
return m_traceArray[traceNumber]->sampleArray;
}
-void TraceWidget::setSamples(uint traceNumber, TQDoubleArray& tqda) {
+void TraceWidget::setSamples(uint traceNumber, TQDoubleArray& tqda, bool deferUpdate) {
VERIFY_TRACE_ARRAY_SIZE
m_traceArray[traceNumber]->sampleArray = tqda;
m_traceArray[traceNumber]->numberOfSamples = tqda.size();
- m_graticuleWidget->repaint(false);
+ if (!deferUpdate) {
+ m_graticuleWidget->repaint(false);
+ }
}
TQDoubleArray& TraceWidget::positions(uint traceNumber) {
@@ -1281,7 +1316,7 @@ TQDoubleArray& TraceWidget::positions(uint traceNumber) {
return m_traceArray[traceNumber]->positionArray;
}
-void TraceWidget::setPositions(uint traceNumber, TQDoubleArray& tqda) {
+void TraceWidget::setPositions(uint traceNumber, TQDoubleArray& tqda, bool deferUpdate) {
VERIFY_TRACE_ARRAY_SIZE
m_traceArray[traceNumber]->positionArray = tqda;
@@ -1289,7 +1324,9 @@ void TraceWidget::setPositions(uint traceNumber, TQDoubleArray& tqda) {
m_traceArray[traceNumber]->leftEdgeIndex = -1;
m_traceArray[traceNumber]->rightEdgeIndex = -1;
- m_graticuleWidget->repaint(false);
+ if (!deferUpdate) {
+ m_graticuleWidget->repaint(false);
+ }
}
TQColor TraceWidget::traceColor(uint traceNumber) {
@@ -1314,12 +1351,12 @@ bool TraceWidget::traceEnabled(uint traceNumber) {
return m_traceArray[traceNumber]->enabled;
}
-void TraceWidget::setTraceEnabled(uint traceNumber, bool enabled, bool showText) {
+void TraceWidget::setTraceEnabled(uint traceNumber, bool enabled, TextDisplayType showText, bool deferUpdate) {
VERIFY_TRACE_ARRAY_SIZE
m_traceArray[traceNumber]->enabled = enabled;
if (enabled) {
- if (showText) {
+ if (showText == FullText) {
m_traceArray[traceNumber]->paramLabel->show();
m_traceArray[traceNumber]->leftLabel->show();
m_traceArray[traceNumber]->graphStatusLabel->show();
@@ -1333,7 +1370,12 @@ void TraceWidget::setTraceEnabled(uint traceNumber, bool enabled, bool showText)
m_traceArray[traceNumber]->paramLabel->hide();
m_traceArray[traceNumber]->leftLabel->hide();
m_traceArray[traceNumber]->graphStatusLabel->hide();
- m_traceArray[traceNumber]->graphStatusLabelInner->show();
+ if (showText == SummaryText) {
+ m_traceArray[traceNumber]->graphStatusLabelInner->show();
+ }
+ else {
+ m_traceArray[traceNumber]->graphStatusLabelInner->hide();
+ }
m_traceArray[traceNumber]->singleIncrBtn->hide();
m_traceArray[traceNumber]->singleDecrBtn->hide();
m_traceArray[traceNumber]->posResetBtn->hide();
@@ -1351,9 +1393,11 @@ void TraceWidget::setTraceEnabled(uint traceNumber, bool enabled, bool showText)
m_traceArray[traceNumber]->posSetBtn->hide();
}
- m_graticuleWidget->updateGraticule();
- m_graticuleWidget->repaint(false);
- updateTraceText();
+ if (!deferUpdate) {
+ m_graticuleWidget->updateGraticule();
+ m_graticuleWidget->repaint(false);
+ updateTraceText();
+ }
}
TQString TraceWidget::traceName(uint traceNumber) {
@@ -1362,11 +1406,13 @@ TQString TraceWidget::traceName(uint traceNumber) {
return m_traceArray[traceNumber]->traceName;
}
-void TraceWidget::setTraceName(uint traceNumber, TQString name) {
+void TraceWidget::setTraceName(uint traceNumber, TQString name, bool deferUpdate) {
VERIFY_TRACE_ARRAY_SIZE
m_traceArray[traceNumber]->traceName = name;
- updateTraceText();
+ if (!deferUpdate) {
+ updateTraceText();
+ }
}
TQString TraceWidget::traceHorizontalUnits(uint traceNumber) {
@@ -1375,11 +1421,13 @@ TQString TraceWidget::traceHorizontalUnits(uint traceNumber) {
return m_traceArray[traceNumber]->horizontalUnits;
}
-void TraceWidget::setTraceHorizontalUnits(uint traceNumber, TQString units) {
+void TraceWidget::setTraceHorizontalUnits(uint traceNumber, TQString units, bool deferUpdate) {
VERIFY_TRACE_ARRAY_SIZE
m_traceArray[traceNumber]->horizontalUnits = units;
- updateTraceText();
+ if (!deferUpdate) {
+ updateTraceText();
+ }
}
TQString TraceWidget::traceVerticalUnits(uint traceNumber) {
@@ -1388,11 +1436,13 @@ TQString TraceWidget::traceVerticalUnits(uint traceNumber) {
return m_traceArray[traceNumber]->verticalUnits;
}
-void TraceWidget::setTraceVerticalUnits(uint traceNumber, TQString units) {
+void TraceWidget::setTraceVerticalUnits(uint traceNumber, TQString units, bool deferUpdate) {
VERIFY_TRACE_ARRAY_SIZE
m_traceArray[traceNumber]->verticalUnits = units;
- updateTraceText();
+ if (!deferUpdate) {
+ updateTraceText();
+ }
}
double TraceWidget::cursorPosition(uint cursorNumber) {
@@ -1714,6 +1764,20 @@ void TraceWidget::showLeftTraceInfoArea(bool show) {
}
}
+void TraceWidget::fitLeftTraceInfoArea(bool fit) {
+ m_leftTraceInfoLabelsFit = fit;
+ m_traceLeftLabelLayout->invalidate();
+}
+
+void TraceWidget::setLeftTraceInfoAreaFitSpacing(int spacing) {
+ m_leftTraceInfoAreaFitSpacing = spacing;
+ m_traceLeftLabelLayout->invalidate();
+}
+
+void TraceWidget::setMinimumPixelsPerHorizDiv(unsigned int pixels) {
+ m_minimumPixelsPerHorizDiv = pixels;
+}
+
TQString TraceWidget::prettyFormat(double value, double rangeDetectValue, TQString baseUnits, unsigned int precision) {
TQString result;
TQString unitMultiplier;
@@ -1789,12 +1853,39 @@ double TraceWidget::traceOffset(uint traceNumber) {
}
void TraceWidget::setTraceOffset(uint traceNumber, double offset) {
+ setTraceOffset(traceNumber, offset, false);
+}
+
+void TraceWidget::setTraceOffset(uint traceNumber, double offset, bool deferUpdate) {
VERIFY_TRACE_ARRAY_SIZE
m_traceArray[traceNumber]->offset = offset;
- m_graticuleWidget->repaint(false);
- updateTraceText();
+ if (!deferUpdate) {
+ m_graticuleWidget->repaint(false);
+ updateTraceText();
+ }
+}
+
+double TraceWidget::traceTextOffset(uint traceNumber) {
+ VERIFY_TRACE_ARRAY_SIZE
+
+ return m_traceArray[traceNumber]->textOffset;
+}
+
+void TraceWidget::setTraceTextOffset(uint traceNumber, double offset) {
+ setTraceOffset(traceNumber, offset, false);
+}
+
+void TraceWidget::setTraceTextOffset(uint traceNumber, double offset, bool deferUpdate) {
+ VERIFY_TRACE_ARRAY_SIZE
+
+ m_traceArray[traceNumber]->textOffset = offset;
+
+ if (!deferUpdate) {
+ m_graticuleWidget->repaint(false);
+ updateTraceText();
+ }
}
void TraceWidget::processChangedOffset(double offset) {
@@ -1904,6 +1995,16 @@ void TraceWidget::resizeCursorArray(uint newsize) {
}
}
+TQSize TraceWidget::sizeHint() const {
+ TQSize widgetSizeHint = TQWidget::sizeHint();
+ unsigned int minimumHorizWidth = m_horizDivs * m_minimumPixelsPerHorizDiv;
+ return TQSize(TQMAX(minimumHorizWidth, widgetSizeHint.height()), widgetSizeHint.height());
+}
+
+TQSize TraceWidget::minimumSizeHint() const {
+ return TQWidget::minimumSizeHint();
+}
+
TraceScrollWidget::TraceScrollWidget(TQWidget* parent, const char* name) : TQScrollView(parent, name) {
m_traceWidget = new TraceWidget(viewport());
addChild(m_traceWidget);
@@ -1915,7 +2016,7 @@ TraceScrollWidget::~TraceScrollWidget() {
}
TQSize TraceScrollWidget::sizeHint() const {
- return m_traceWidget->sizeHint();
+ return TQScrollView::sizeHint();
}
TQSize TraceScrollWidget::minimumSizeHint() const {
diff --git a/clients/tde/src/widgets/tracewidget.h b/clients/tde/src/widgets/tracewidget.h
index c034149..6461d35 100644
--- a/clients/tde/src/widgets/tracewidget.h
+++ b/clients/tde/src/widgets/tracewidget.h
@@ -71,6 +71,7 @@ class TraceData : public TQObject
long leftEdgeIndex;
long rightEdgeIndex;
double offset;
+ double textOffset;
TQColor color;
bool enabled;
double leftEdge;
@@ -187,33 +188,40 @@ class GraticuleWidget : public TQWidget
class TraceWidget : public TQWidget
{
Q_OBJECT
+
+ public:
+ enum TextDisplayType {
+ FullText,
+ SummaryText,
+ NoText
+ };
public:
TraceWidget(TQWidget* = 0, const char* = 0);
~TraceWidget();
- void setNumberOfSamples(uint traceNumber, unsigned int samples);
+ void setNumberOfSamples(uint traceNumber, unsigned int samples, bool deferUpdate=false);
void setNumberOfHorizontalDivisions(unsigned int divisions);
void setNumberOfVerticalDivisions(unsigned int divisions);
- void setDisplayLimits(uint traceNumber, TQRectF limits);
+ void setDisplayLimits(uint traceNumber, TQRectF limits, bool deferUpdate=false);
TQRectF displayLimits(uint traceNumber);
void setNumberOfTraces(uint traceNumber);
void setNumberOfCursors(uint traceNumber);
TQDoubleArray& samples(uint traceNumber);
- void setSamples(uint traceNumber, TQDoubleArray&);
+ void setSamples(uint traceNumber, TQDoubleArray&, bool deferUpdate=false);
TQDoubleArray& positions(uint traceNumber);
- void setPositions(uint traceNumber, TQDoubleArray&);
+ void setPositions(uint traceNumber, TQDoubleArray&, bool deferUpdate=false);
TQColor traceColor(uint traceNumber);
void setTraceColor(uint traceNumber, TQColor);
bool traceEnabled(uint traceNumber);
- void setTraceEnabled(uint traceNumber, bool enabled, bool showText=true);
+ void setTraceEnabled(uint traceNumber, bool enabled, TextDisplayType showText=FullText, bool deferUpdate=false);
TQString traceName(uint traceNumber);
- void setTraceName(uint traceNumber, TQString name);
+ void setTraceName(uint traceNumber, TQString name, bool deferUpdate=false);
TQString traceHorizontalUnits(uint traceNumber);
- void setTraceHorizontalUnits(uint traceNumber, TQString units);
+ void setTraceHorizontalUnits(uint traceNumber, TQString units, bool deferUpdate=false);
TQString traceVerticalUnits(uint traceNumber);
- void setTraceVerticalUnits(uint traceNumber, TQString units);
+ void setTraceVerticalUnits(uint traceNumber, TQString units, bool deferUpdate=false);
double cursorPosition(uint cursorNumber);
void setCursorPosition(uint cursorNumber, double position);
@@ -240,13 +248,23 @@ class TraceWidget : public TQWidget
void setZoomCursorStartIndex(unsigned int index);
void showLeftTraceInfoArea(bool show);
+ void fitLeftTraceInfoArea(bool fit);
+ void setLeftTraceInfoAreaFitSpacing(int spacing);
+ void setMinimumPixelsPerHorizDiv(unsigned int pixels);
double traceOffset(uint traceNumber);
+ void setTraceOffset(uint traceNumber, double offset, bool deferUpdate);
+ double traceTextOffset(uint traceNumber);
+ void setTraceTextOffset(uint traceNumber, double offset, bool deferUpdate);
static TQString prettyFormat(double value, double rangeDetectValue, TQString baseUnits, unsigned int precision=3);
+ virtual TQSize sizeHint() const;
+ virtual TQSize minimumSizeHint() const;
+
public slots:
void setTraceOffset(uint traceNumber, double offset);
+ void setTraceTextOffset(uint traceNumber, double offset);
private slots:
void updateTraceText();
@@ -287,6 +305,9 @@ class TraceWidget : public TQWidget
GraticuleWidget* m_graticuleWidget;
bool m_useAbsoluteHorizontalRange;
bool m_showLeftTraceInfoArea;
+ bool m_leftTraceInfoLabelsFit;
+ int m_leftTraceInfoAreaFitSpacing;
+ unsigned int m_minimumPixelsPerHorizDiv;
friend class GraticuleWidget;
friend class TraceData;