From 4a2ead0c42fdd64fc43e722d5912dbea52bef01e Mon Sep 17 00:00:00 2001 From: Matthias Toussaint Date: Sat, 12 Apr 2014 09:56:49 +0100 Subject: [PATCH] Release 0.8.14 --- CHANGELOG | 4 + README | 4 +- src/Makefile | 14 ++-- src/configdlg.cpp | 24 ++++++ src/configdlg.h | 5 ++ src/displaywid.cpp | 21 +++-- src/dmm.cpp | 196 +++++++++++++++++++++++++++++++++---------- src/dmm.h | 12 ++- src/dmmprefs.cpp | 156 +++++++++++++++++++++------------- src/dmmprefs.h | 8 ++ src/mainwid.cpp | 5 +- src/mainwin.cpp | 2 +- src/readerthread.cpp | 2 +- src/src.pro | 2 +- src/uidmmprefs.ui | 92 ++++++++++++++++---- 15 files changed, 411 insertions(+), 136 deletions(-) diff --git a/CHANGELOG b/CHANGELOG index 36dd942..e224fe9 100644 --- a/CHANGELOG +++ b/CHANGELOG @@ -1,3 +1,7 @@ +11/07/2009 0.8.14 + - terminal flags + - VC 920 + 11/07/2009 0.8.13 - One hour recording crash bug - Metex M-4650C settings (Samuel Hildebrandt) diff --git a/README b/README index ef9e5e2..5b99055 100644 --- a/README +++ b/README @@ -39,6 +39,8 @@ is known to work with the following DMM's: Voltcraft VC 670 Voltcraft VC 820 Voltcraft VC 840 + Voltcraft VC 920 + Voltcraft VC 940 The following models should work but need to be confirmed by a user: @@ -64,7 +66,7 @@ QtDMM is distributed under the GNU Public License, version 2. The tab size of the sourcefiles is 2 --- 20/12/2005 +-- 19/12/2011 Matthias Toussaint diff --git a/src/Makefile b/src/Makefile index 23c0b70..846688c 100644 --- a/src/Makefile +++ b/src/Makefile @@ -1,6 +1,6 @@ ############################################################################# # Makefile for building: ../bin/qtdmm -# Generated by qmake (1.07a) (Qt 3.3.5) on: Sun Aug 19 20:18:40 2007 +# Generated by qmake (1.07a) (Qt 3.3.8) on: Mon Dec 19 11:52:35 2011 # Project: src.pro # Template: app # Command: $(QMAKE) -o Makefile src.pro @@ -12,14 +12,14 @@ CC = gcc CXX = g++ LEX = flex YACC = yacc -CFLAGS = -pipe -O2 -march=i586 -mtune=i686 -fmessage-length=0 -Wall -D_FORTIFY_SOURCE=2 -g -fno-strict-aliasing -Wall -W -O2 -march=i586 -mtune=i686 -fmessage-length=0 -Wall -D_FORTIFY_SOURCE=2 -g -fno-strict-aliasing -D_REENTRANT -DQT_NO_DEBUG -DQT_THREAD_SUPPORT -CXXFLAGS = -pipe -O2 -march=i586 -mtune=i686 -fmessage-length=0 -Wall -D_FORTIFY_SOURCE=2 -g -fno-strict-aliasing -Wall -W -O2 -march=i586 -mtune=i686 -fmessage-length=0 -Wall -D_FORTIFY_SOURCE=2 -g -fno-strict-aliasing -D_REENTRANT -DQT_NO_DEBUG -DQT_THREAD_SUPPORT +CFLAGS = -pipe -Wall -W -O2 -D_REENTRANT -DQT_NO_DEBUG -DQT_THREAD_SUPPORT -DQT_SHARED +CXXFLAGS = -pipe -Wall -W -O2 -D_REENTRANT -DQT_NO_DEBUG -DQT_THREAD_SUPPORT -DQT_SHARED LEXFLAGS = YACCFLAGS= -d -INCPATH = -I/usr/lib/qt3/mkspecs/default -I. -I. -Imoc -Ixpm -I/usr/include -I$(QTDIR)/include -Imoc/ +INCPATH = -I/home/mt/RAID/src/Qt3/qt-x11-free-3.3.8/mkspecs/default -I. -I. -Imoc -Ixpm -I$(QTDIR)/include -Imoc/ LINK = g++ -LFLAGS = -LIBS = $(SUBLIBS) -L/usr/lib/ -L$(QTDIR)/lib/ -L/usr/X11R6/lib/ -lqt-mt -lXext -lX11 -lm -lpthread +LFLAGS = -Wl,-rpath,$(QTDIR)/lib +LIBS = $(SUBLIBS) -L$(QTDIR)/lib -L/usr/X11R6/lib -lqt-mt -lXext -lX11 -lm -lpthread AR = ar cqs RANLIB = MOC = $(QTDIR)/bin/moc @@ -260,7 +260,7 @@ uicables: $(UICDECLS) $(UICIMPLS) $(MOC): ( cd $(QTDIR)/src/moc && $(MAKE) ) -Makefile: src.pro /usr/lib/qt3/mkspecs/default/qmake.conf +Makefile: src.pro /home/mt/RAID/src/Qt3/qt-x11-free-3.3.8/mkspecs/default/qmake.conf /home/mt/RAID/src/Qt3/qt-x11-free-3.3.8/lib/libqt-mt.prl $(QMAKE) -o Makefile src.pro qmake: @$(QMAKE) -o Makefile src.pro diff --git a/src/configdlg.cpp b/src/configdlg.cpp index d08fc3e..30ae77c 100755 --- a/src/configdlg.cpp +++ b/src/configdlg.cpp @@ -690,6 +690,30 @@ ConfigDlg::intPointMode() const ///////////////////////////////////////////////////////////////// // DMM // +bool +ConfigDlg::rts() const +{ + return m_dmm->rts(); +} + +bool +ConfigDlg::cts() const +{ + return m_dmm->cts(); +} + +bool +ConfigDlg::dsr() const +{ + return m_dmm->dsr(); +} + +bool +ConfigDlg::dtr() const +{ + return m_dmm->dtr(); +} + int ConfigDlg::parity() const { diff --git a/src/configdlg.h b/src/configdlg.h index c7a3edc..0ac0ed3 100755 --- a/src/configdlg.h +++ b/src/configdlg.h @@ -77,6 +77,11 @@ public: int bits() const; int stopBits() const; int numValues() const; + bool rts() const; + bool cts() const; + bool dsr() const; + bool dtr() const; + QColor bgColor() const; QColor gridColor() const; QColor dataColor() const; diff --git a/src/displaywid.cpp b/src/displaywid.cpp index 776d097..6645c85 100755 --- a/src/displaywid.cpp +++ b/src/displaywid.cpp @@ -233,6 +233,9 @@ DisplayWid::setDisplayMode( int dm, bool minMax, bool bar, int numValues ) case 8: m_range = 6000; + + case 9: + m_range = 40000; break; } @@ -370,7 +373,7 @@ DisplayWid::paintEvent( QPaintEvent * ) step /= 20; off = (width()-20*step)/2-2; } - else if (1 == m_displayMode || 3 == m_displayMode) + else if (1 == m_displayMode || 3 == m_displayMode || 9 == m_displayMode) { step /= 40; off = (width()-40*step)/2-2; @@ -435,16 +438,19 @@ void DisplayWid::drawSmallNumber( QPainter *p, const QString & num ) { int x = 0; - int offset = ((m_displayMode > 1) && (m_displayMode != 8) ? 0 : 1); + int offset = 0; + while (num[offset] == ' ' && offsetdrawPixmap( 0, 9, *m_smallMinus ); + offset++; } x += 12; - for (unsigned i=1+offset; idrawPixmap( x, 0, *m_bigHz ); } - else if (str.mid(index) == "F") + else if (str.mid(index) == "F") // ignore Farenheit { p->drawPixmap( x, 0, *m_bigF ); } @@ -702,17 +708,19 @@ void DisplayWid::drawBigNumber( QPainter *p, const QString & num ) { int x = 0; - int offset = ((m_displayMode > 1) && (m_displayMode != 8) ? 0 : 1); + int offset = 0; + while (num[offset] == ' ' && offsetdrawPixmap( x, 0, *m_bigMinus ); + offset++; } x += 28; - for (unsigned i=1+offset; istring()[i]; - } - if (re->string()[4]&0x0f != 0x0a) - { - val += re->string()[4]; - } double scale = 1.0; int function = re->string()[6] & 0x0f; int range = re->string()[5] & 0x0f; + int mode = re->string()[7]; + int mode2 = re->string()[8]; + + if (function != 12 && mode2 & 0x04) val = "-"; + + for (int i=0; i<4; ++i) + { + val += re->string()[i]; + } + if (re->string()[4] != 'A') + { + val += re->string()[4]; + } switch (function) { case 0: - insertCommaIT( val, 3 ); + val = insertCommaIT( val, 3 ); special = "AC"; unit = "mV"; scale = 1e-3; break; case 1: - insertCommaIT( val, range ); + val = insertCommaIT( val, range ); special = "DC"; unit = "V"; break; case 2: - insertCommaIT( val, range ); + val = insertCommaIT( val, range ); special = "AC"; unit = "V"; break; case 3: - insertCommaIT( val, 3 ); + val = insertCommaIT( val, 3 ); special = "DC"; unit = "mV"; scale = 1e-3; @@ -464,25 +492,30 @@ void DMM::readVC940Continuous( ReadEvent *re ) switch (range) { case 1: - insertCommaIT( val, 3 ); + val = insertCommaIT( val, 3 ); break; case 2: - insertCommaIT( val, 4 ); + val = insertCommaIT( val, 1 ); + unit = "kOhm"; + scale = 1e3; break; case 3: + val = insertCommaIT( val, 2 ); + unit = "kOhm"; + scale = 1e3; break; case 4: - insertCommaIT( val, 3 ); + val = insertCommaIT( val, 3 ); unit = "kOhm"; scale = 1e3; break; case 5: - insertCommaIT( val, 1 ); + val = insertCommaIT( val, 1 ); unit = "MOhm"; scale = 1e6; break; case 6: - insertCommaIT( val, 2 ); + val = insertCommaIT( val, 2 ); unit = "MOhm"; scale = 1e6; break; @@ -494,37 +527,37 @@ void DMM::readVC940Continuous( ReadEvent *re ) switch (range) { case 1: - insertCommaIT( val, 2 ); + val = insertCommaIT( val, 2 ); unit = "nF"; scale = 1e-9; break; case 2: - insertCommaIT( val, 3 ); + val = insertCommaIT( val, 3 ); unit = "nF"; scale = 1e-9; break; case 3: - insertCommaIT( val, 4 ); - unit = "nF"; - scale = 1e-9; + val = insertCommaIT( val, 1 ); + unit = "uF"; + scale = 1e-6; break; case 4: - insertCommaIT( val, 2 ); + val = insertCommaIT( val, 2 ); unit = "uF"; scale = 1e-6; break; case 5: - insertCommaIT( val, 3 ); + val = insertCommaIT( val, 3 ); unit = "uF"; scale = 1e-6; break; case 6: - insertCommaIT( val, 4 ); + val = insertCommaIT( val, 4 ); unit = "uF"; scale = 1e-6; break; case 7: - insertCommaIT( val, 2 ); + val = insertCommaIT( val, 2 ); unit = "mF"; scale = 1e-3; break; @@ -534,51 +567,130 @@ void DMM::readVC940Continuous( ReadEvent *re ) case 6: special = "TE"; unit = "C"; + val = insertCommaIT( val, 4 ); break; case 7: - special = "DC"; + if (mode & 0x01) + { + // can't handle AC+DC + special = "AC"; + } + else special = "DC"; switch (range) { case 0: - insertCommaIT( val, 3 ); + val = insertCommaIT( val, 3 ); break; case 1: - insertCommaIT( val, 4 ); + val = insertCommaIT( val, 4 ); break; } unit = "uA"; scale = 1e-6; break; case 8: - special = "DC"; + if (mode & 0x01) + { + // can't handle AC+DC + special = "AC"; + } + else special = "DC"; switch (range) { case 0: - insertCommaIT( val, 2 ); + val = insertCommaIT( val, 2 ); break; case 1: - insertCommaIT( val, 3 ); + val = insertCommaIT( val, 3 ); break; } unit = "mA"; scale = 1e-3; break; case 9: - special = "DC"; + if (mode & 0x01) + { + // can't handle AC+DC + special = "AC"; + } + else special = "DC"; + val = insertCommaIT( val, 2 ); unit = "A"; break; - case 10: // what the heck is this? - special = "FR"; - unit = "Hz"; + case 10: // buzzer + special = "OH"; + unit = "Ohm"; + val = insertCommaIT( val, 3 ); break; case 11: special = "DI"; - unit = ""; + unit = "V"; + val = insertCommaIT( val, 1 ); break; + case 12: + if (mode2 & 0x04) + { + special = "PC"; + unit = "%"; + val = insertCommaIT( val, 3 ); + } + else + { + special = "FR"; + unit = "Hz"; + switch (range) + { + case 0: + val = insertCommaIT( val, 2 ); + break; + case 1: + val = insertCommaIT( val, 3 ); + break; + case 2: + val = insertCommaIT( val, 1 ); + unit = "kHz"; + scale = 1e3; + break; + case 3: + val = insertCommaIT( val, 2 ); + unit = "kHz"; + scale = 1e3; + break; + case 4: + val = insertCommaIT( val, 3 ); + unit = "kHz"; + scale = 1e3; + break; + case 5: + val = insertCommaIT( val, 1 ); + unit = "MHz"; + scale = 1e6; + break; + case 6: + val = insertCommaIT( val, 2 ); + unit = "MHz"; + scale = 1e6; + break; + case 7: + val = insertCommaIT( val, 3 ); + unit = "MHz"; + scale = 1e6; + break; + } + } + break; + case 13: + special = "TE"; + unit = "F"; + val = insertCommaIT( val, 4 ); + break; + } double d_val = val.toDouble() * scale; + //printf( "d_val=%f val=%s unit=%s special=%s\n", d_val, val.latin1(), unit.latin1(), special.latin1() ); + emit value( d_val, val, unit, special, true, re->id() ); m_error = tr( "Connected" ) + " (" + m_name + " @ " + m_device + ")"; diff --git a/src/dmm.h b/src/dmm.h index 67ccc27..36e8022 100755 --- a/src/dmm.h +++ b/src/dmm.h @@ -33,6 +33,13 @@ class DMM : public QObject Q_OBJECT public: + enum { + f_rts=1, + f_cts=2, + f_dsr=4, + f_dtr=8 + }; + DMM( QObject *parent=0, const char *name=0 ); virtual ~DMM(); @@ -44,7 +51,7 @@ public: bool isOpen() const { return m_handle >= 0; } void setFormat( ReadEvent::DataFormat ); void setName( const QString & ); - void setPortSettings( int bits, int stopBits, int parity, bool externalSetup ); + void setPortSettings( int bits, int stopBits, int parity, bool externalSetup, bool rts, bool cts, bool dsr, bool dtr ); void setNumValues( int ); void setConsoleLogging( bool on ) { m_consoleLogging = on; } @@ -70,7 +77,8 @@ protected: struct termios m_oldSettings; bool m_consoleLogging; bool m_externalSetup; - + int m_flags; + void timerEvent( QTimerEvent * ); void customEvent( QCustomEvent * ); QString insertComma( const QString &, int ); diff --git a/src/dmmprefs.cpp b/src/dmmprefs.cpp index 5df40ee..28ca73b 100755 --- a/src/dmmprefs.cpp +++ b/src/dmmprefs.cpp @@ -63,79 +63,80 @@ struct DMMInfo dmm_info[] = { - {"Digitek DT-9062", 3, 5, 8, 1, 1, 0, 1, 0}, - {"Digitek INO2513", 3, 5, 8, 1, 1, 0, 1, 0}, // no image + {"Digitek DT-9062", 3, 5, 8, 1, 1, 0, 1, 0, 0,1,1,1}, + {"Digitek INO2513", 3, 5, 8, 1, 1, 0, 1, 0, 0,1,1,1}, // no image - {"Digitech QM1350", 0, 0, 7, 2, 1, 0, 1, 0}, // no image - {"Digitech QM1462", 3, 5, 8, 1, 1, 0, 1, 0}, // no image - {"Digitech QM1538", 3, 5, 8, 1, 1, 0, 1, 0}, // no image - {"Digitech QM1537", 3, 8, 8, 1, 1, 0, 1, 0}, // no image + {"Digitech QM1350", 0, 0, 7, 2, 1, 0, 1, 0, 0,1,1,1}, // no image + {"Digitech QM1462", 3, 5, 8, 1, 1, 0, 1, 0, 0,1,1,1}, // no image + {"Digitech QM1538", 3, 5, 8, 1, 1, 0, 1, 0, 0,1,1,1}, // no image + {"Digitech QM1537", 3, 8, 8, 1, 1, 0, 1, 0, 0,1,1,1}, // no image - {"ELV M9803R", 5, 4, 7, 1, 1, 1, 1, 0}, // no image + {"ELV M9803R", 5, 4, 7, 1, 1, 1, 1, 0, 0,1,1,1}, // no image - {"Iso-Tech IDM 73", 6, 6, 7, 1, 1, 2, 8, 0}, // no image + {"Iso-Tech IDM 73", 6, 6, 7, 1, 1, 2, 8, 0, 0,1,1,1}, // no image - {"MASTECH MAS-343", 0, 0, 7, 2, 1, 0, 1, 0}, - {"MASTECH MAS-345", 0, 0, 7, 2, 1, 0, 1, 0}, - {"MASTECH M9803R", 5, 4, 7, 1, 1, 1, 1, 0}, + {"MASTECH MAS-343", 0, 0, 7, 2, 1, 0, 1, 0, 0,1,1,1}, + {"MASTECH MAS-345", 0, 0, 7, 2, 1, 0, 1, 0, 0,1,1,1}, + {"MASTECH M9803R", 5, 4, 7, 1, 1, 1, 1, 0, 0,1,1,1}, - {"McVoice M-345pro", 0, 0, 7, 2, 1, 0, 1, 0}, - {"McVoice M-980T", 5, 4, 7, 1, 1, 0, 1, 0}, + {"McVoice M-345pro", 0, 0, 7, 2, 1, 0, 1, 0, 0,1,1,1}, + {"McVoice M-980T", 5, 4, 7, 1, 1, 0, 1, 0, 0,1,1,1}, - {"Metex M-3660D", 1, 0, 7, 2, 1, 0, 1, 0}, - {"Metex M-3830D", 1, 0, 7, 2, 4, 0, 1, 0}, // no image - {"Metex M-3850D", 1, 0, 7, 2, 4, 0, 1, 0}, - {"Metex M-3850M", 5, 0, 7, 2, 4, 0, 1, 0}, - {"Metex M-3870D", 1, 0, 7, 1, 1, 0, 1, 0}, - {"Metex M-4650C", 1, 0, 7, 2, 4, 0, 2, 0}, - {"Metex ME-11", 0, 0, 7, 2, 1, 0, 1, 0}, - {"Metex ME-22", 3, 0, 7, 2, 1, 0, 1, 0}, - {"Metex ME-32", 0, 0, 7, 2, 1, 0, 1, 0}, - {"Metex ME-42", 0, 0, 7, 2, 1, 0, 1, 0}, - {"Metex universal system 9160", 1, 0, 7, 2, 4, 0, 1, 0}, + {"Metex M-3660D", 1, 0, 7, 2, 1, 0, 1, 0, 0,1,1,1}, + {"Metex M-3830D", 1, 0, 7, 2, 4, 0, 1, 0, 0,1,1,1}, // no image + {"Metex M-3850D", 1, 0, 7, 2, 4, 0, 1, 0, 0,1,1,1}, + {"Metex M-3850M", 5, 0, 7, 2, 4, 0, 1, 0, 0,1,1,1}, + {"Metex M-3870D", 1, 0, 7, 1, 1, 0, 1, 0, 0,1,1,1}, + {"Metex M-4650C", 1, 0, 7, 2, 4, 0, 2, 0, 0,1,1,1}, + {"Metex ME-11", 0, 0, 7, 2, 1, 0, 1, 0, 0,1,1,1}, + {"Metex ME-22", 3, 0, 7, 2, 1, 0, 1, 0, 0,1,1,1}, + {"Metex ME-32", 0, 0, 7, 2, 1, 0, 1, 0, 0,1,1,1}, + {"Metex ME-42", 0, 0, 7, 2, 1, 0, 1, 0, 0,1,1,1}, + {"Metex universal system 9160", 1, 0, 7, 2, 4, 0, 1, 0, 0,1,1,1}, - {"PeakTech 3330", 3, 5, 8, 1, 1, 0, 1, 0}, - {"PeakTech 4010", 5, 0, 7, 2, 1, 0, 1, 0}, - {"PeakTech 4015A", 5, 0, 7, 2, 4, 0, 4, 0}, - {"PeakTech 4360", 0, 0, 7, 2, 1, 0, 1, 0}, - {"PeakTech 4390", 5, 0, 7, 2, 4, 0, 1, 0}, - {"PeakTech 451", 0, 1, 7, 2, 1, 0, 1, 0}, // no image + {"PeakTech 3330", 3, 5, 8, 1, 1, 0, 1, 0, 0,1,1,1}, + {"PeakTech 4010", 5, 0, 7, 2, 1, 0, 1, 0, 0,1,1,1}, + {"PeakTech 4015A", 5, 0, 7, 2, 4, 0, 4, 0, 0,1,1,1}, + {"PeakTech 4360", 0, 0, 7, 2, 1, 0, 1, 0, 0,1,1,1}, + {"PeakTech 4390", 5, 0, 7, 2, 4, 0, 1, 0, 0,1,1,1}, + {"PeakTech 451", 0, 1, 7, 2, 1, 0, 1, 0, 0,1,1,1}, // no image - {"Radioshack 22-805 DMM", 0, 0, 7, 2, 1, 0, 1, 0}, - {"Radioshack RS22-168A", 1, 0, 7, 2, 1, 0, 1, 0}, // no image - {"Radioshack 22-812", 4, 9, 8, 1, 1, 0, 1, 0}, + {"Radioshack 22-805 DMM", 0, 0, 7, 2, 1, 0, 1, 0, 0,1,1,1}, + {"Radioshack RS22-168A", 1, 0, 7, 2, 1, 0, 1, 0, 0,1,1,1}, // no image + {"Radioshack 22-812", 4, 9, 8, 1, 1, 0, 1, 0, 0,1,1,1}, - {"Tenma 72-7745", 3, 5, 8, 1, 1, 0, 1, 0}, - {"Tenma 72-1016", 6, 6, 7, 1, 2, 2, 8, 0}, + {"Tenma 72-7745", 3, 5, 8, 1, 1, 0, 1, 0, 0,1,1,1}, + {"Tenma 72-1016", 6, 6, 7, 1, 2, 2, 8, 0, 0,1,1,1}, - {"Sinometer MAS-343", 0, 0, 7, 2, 1, 0, 1, 0}, + {"Sinometer MAS-343", 0, 0, 7, 2, 1, 0, 1, 0, 0,1,1,1}, - {"Uni-Trend UT30A", 3, 5, 8, 1, 1, 0, 1, 0}, - {"Uni-Trend UT30E", 3, 5, 8, 1, 1, 0, 1, 0}, // no image + {"Uni-Trend UT30A", 3, 5, 8, 1, 1, 0, 1, 0, 0,1,1,1}, + {"Uni-Trend UT30E", 3, 5, 8, 1, 1, 0, 1, 0, 0,1,1,1}, // no image - {"Voltcraft M-3610D", 1, 0, 7, 2, 1, 0, 1, 0}, // no image - {"Voltcraft M-3650D", 1, 0, 7, 2, 1, 0, 1, 0}, - {"Voltcraft M-3860", 5, 0, 7, 2, 4, 0, 2, 0}, // no image - {"Voltcraft M-4650CR", 1, 2, 7, 2, 1, 0, 2, 0 }, // no image - {"Voltcraft M-4660", 1, 0, 7, 2, 4, 0, 3, 0}, - {"Voltcraft ME-11", 0, 0, 7, 2, 1, 0, 1, 0}, - {"Voltcraft ME-22T", 3, 0, 7, 2, 1, 0, 1, 0}, - {"Voltcraft ME-32", 0, 0, 7, 2, 1, 0, 1, 0}, - {"Voltcraft VC 670", 4, 2, 7, 1, 1, 0, 3, 0}, - {"Voltcraft VC 820", 3, 5, 8, 1, 1, 0, 1, 0}, - {"Voltcraft VC 840", 3, 5, 8, 1, 1, 0, 1, 0}, - {"Voltcraft VC 940", 3, 7, 8, 1, 1, 2, 9, 0}, + {"Voltcraft M-3610D", 1, 0, 7, 2, 1, 0, 1, 0, 0,1,1,1}, // no image + {"Voltcraft M-3650D", 1, 0, 7, 2, 1, 0, 1, 0, 0,1,1,1}, + {"Voltcraft M-3860", 5, 0, 7, 2, 4, 0, 2, 0, 0,1,1,1}, // no image + {"Voltcraft M-4650CR", 1, 2, 7, 2, 1, 0, 2, 0 , 0,1,1,1}, // no image + {"Voltcraft M-4660", 1, 0, 7, 2, 4, 0, 3, 0, 0,1,1,1}, + {"Voltcraft ME-11", 0, 0, 7, 2, 1, 0, 1, 0, 0,1,1,1}, + {"Voltcraft ME-22T", 3, 0, 7, 2, 1, 0, 1, 0, 0,1,1,1}, + {"Voltcraft ME-32", 0, 0, 7, 2, 1, 0, 1, 0, 0,1,1,1}, + {"Voltcraft VC 670", 4, 2, 7, 1, 1, 0, 3, 0, 0,1,1,1}, + {"Voltcraft VC 820", 3, 5, 8, 1, 1, 0, 1, 0, 0,1,1,1}, + {"Voltcraft VC 840", 3, 5, 8, 1, 1, 0, 1, 0, 0,1,1,1}, + {"Voltcraft VC 920", 3, 7, 7, 1, 1, 2, 9, 0, 0,1,1,1}, + {"Voltcraft VC 940", 3, 7, 7, 1, 1, 2, 9, 0, 0,1,1,1}, - {"*Voltcraft ME-42", 0, 0, 7, 2, 1, 0, 1, 0}, - {"*Voltcraft M-4660A", 5, 0, 7, 2, 4, 0, 3, 0}, - {"*Voltcraft M-4660M", 5, 0, 7, 2, 4, 0, 3, 0}, - {"*Voltcraft MXD-4660A", 5, 0, 7, 2, 4, 0, 3, 0}, - {"*Voltcraft VC 630", 4, 2, 7, 1, 1, 0, 3, 0}, - {"*Voltcraft VC 650", 4, 2, 7, 1, 1, 0, 3, 0}, - {"*Voltcraft VC 635", 3, 3, 7, 1, 1, 0, 3, 0}, - {"*Voltcraft VC 655", 3, 3, 7, 1, 1, 0, 3, 0}, + {"*Voltcraft ME-42", 0, 0, 7, 2, 1, 0, 1, 0, 0,1,1,1}, + {"*Voltcraft M-4660A", 5, 0, 7, 2, 4, 0, 3, 0, 0,1,1,1}, + {"*Voltcraft M-4660M", 5, 0, 7, 2, 4, 0, 3, 0, 0,1,1,1}, + {"*Voltcraft MXD-4660A", 5, 0, 7, 2, 4, 0, 3, 0, 0,1,1,1}, + {"*Voltcraft VC 630", 4, 2, 7, 1, 1, 0, 3, 0, 0,1,1,1}, + {"*Voltcraft VC 650", 4, 2, 7, 1, 1, 0, 3, 0, 0,1,1,1}, + {"*Voltcraft VC 635", 3, 3, 7, 1, 1, 0, 3, 0, 0,1,1,1}, + {"*Voltcraft VC 655", 3, 3, 7, 1, 1, 0, 3, 0, 0,1,1,1}, - {"",0,0,0,0,0,0,0,0} // End Of List + {"",0,0,0,0,0,0,0,0,0,0,0,0} // End Of List }; DmmPrefs::DmmPrefs( QWidget *parent, const char *name ) : @@ -344,6 +345,10 @@ DmmPrefs::modelSLOT( int id ) parityCombo->setDisabled( id != 0 ); ui_numValues->setDisabled( id != 0 ); ui_externalSetup->setDisabled( id != 0 ); + uirts->setDisabled( id != 0 ); + uicts->setDisabled( id != 0 ); + uidsr->setDisabled( id != 0 ); + uidtr->setDisabled( id != 0 ); if (id != 0) message->hide(); else message->show(); @@ -366,11 +371,35 @@ DmmPrefs::modelSLOT( int id ) displayCombo->setCurrentItem( dmm_info[id-1].display ); ui_numValues->setValue( dmm_info[id-1].numValues ); ui_externalSetup->setChecked( dmm_info[id-1].externalSetup ); + uirts->setChecked( dmm_info[id-1].rts ); + uicts->setChecked( dmm_info[id-1].cts ); + uidsr->setChecked( dmm_info[id-1].dsr ); + uidtr->setChecked( dmm_info[id-1].dtr ); ui_filename->setText( "" ); } } +bool DmmPrefs::rts() const +{ + return uirts->isChecked(); +} + +bool DmmPrefs::cts() const +{ + return uicts->isChecked(); +} + +bool DmmPrefs::dsr() const +{ + return uidsr->isChecked(); +} + +bool DmmPrefs::dtr() const +{ + return uidtr->isChecked(); +} + int DmmPrefs::parity() const { @@ -482,6 +511,10 @@ DmmPrefs::loadSLOT() ui_externalSetup->setChecked( cfg.getBool( "DMM", "external-setup", false ) ); protocolCombo->setCurrentItem( cfg.getInt( "DMM", "data-format", 0 )); ui_numValues->setValue( cfg.getInt( "DMM", "number-of-values", 1 )); + uirts->setChecked( cfg.getBool( "DMM", "rts", true )); + uicts->setChecked( cfg.getBool( "DMM", "cts", false )); + uidsr->setChecked( cfg.getBool( "DMM", "dsr", false )); + uidtr->setChecked( cfg.getBool( "DMM", "dtr", false )); } } @@ -523,6 +556,11 @@ DmmPrefs::saveSLOT() cfg.setInt( "DMM", "data-format", protocolCombo->currentItem() ); cfg.setInt( "DMM", "number-of-values", ui_numValues->value() ); + cfg.setBool( "DMM", "rts", uirts->isChecked() ); + cfg.setBool( "DMM", "cts", uicts->isChecked() ); + cfg.setBool( "DMM", "dsr", uidsr->isChecked() ); + cfg.setBool( "DMM", "dtr", uidtr->isChecked() ); + cfg.save(); } } diff --git a/src/dmmprefs.h b/src/dmmprefs.h index 30f1327..35121bc 100755 --- a/src/dmmprefs.h +++ b/src/dmmprefs.h @@ -35,6 +35,10 @@ struct DMMInfo int parity; int display; bool externalSetup; + bool rts; + bool cts; + bool dsr; + bool dtr; }; class DmmPrefs : public UIDmmPrefs @@ -50,6 +54,10 @@ public: int speed() const; int numValues() const; bool externalSetup() const; + bool rts() const; + bool cts() const; + bool dsr() const; + bool dtr() const; ReadEvent::DataFormat format() const; int display() const; QString dmmName() const; diff --git a/src/mainwid.cpp b/src/mainwid.cpp index e046150..f1b209b 100755 --- a/src/mainwid.cpp +++ b/src/mainwid.cpp @@ -397,7 +397,10 @@ MainWid::readConfig() m_dmm->setSpeed( m_configDlg->speed() ); m_dmm->setFormat( m_configDlg->format() ); m_dmm->setPortSettings( m_configDlg->bits(), m_configDlg->stopBits(), - m_configDlg->parity(), m_configDlg->externalSetup() ); + m_configDlg->parity(), m_configDlg->externalSetup(), + m_configDlg->rts(), m_configDlg->cts(), + m_configDlg->dsr(), m_configDlg->dtr() + ); ui_graph->setGraphSize( m_configDlg->windowSeconds(), m_configDlg->totalSeconds() ); diff --git a/src/mainwin.cpp b/src/mainwin.cpp index 4d1abbc..c6ab531 100755 --- a/src/mainwin.cpp +++ b/src/mainwin.cpp @@ -44,7 +44,7 @@ #include #include -#define VERSION_STRING "0.8.13" +#define VERSION_STRING "0.8.14" #include diff --git a/src/readerthread.cpp b/src/readerthread.cpp index da0fb8c..5d45535 100755 --- a/src/readerthread.cpp +++ b/src/readerthread.cpp @@ -182,7 +182,7 @@ ReaderThread::formatLength() const case ReadEvent::IsoTech: return 22; case ReadEvent::VC940Continuous: - return 12; + return 11; case ReadEvent::QM1537Continuous: return 14; case ReadEvent::RS22812Continuous: diff --git a/src/src.pro b/src/src.pro index f8ed88f..4870649 100755 --- a/src/src.pro +++ b/src/src.pro @@ -78,6 +78,6 @@ macx { RC_FILE = QtDMMIcon.icns } TARGET = qtdmm -VERSION = 0.8.13 +VERSION = 0.8.14 DESTDIR = ../bin diff --git a/src/uidmmprefs.ui b/src/uidmmprefs.ui index 1acda59..b5890ca 100755 --- a/src/uidmmprefs.ui +++ b/src/uidmmprefs.ui @@ -8,8 +8,8 @@ 0 0 - 610 - 682 + 566 + 679 @@ -443,14 +443,6 @@ Select the baud rate for the DMM here. If you encounter problems connecting to your DMM try lowering the baud rate. I had some problems with my <b>Metex ME-32</b>. The Documentation said 1200 baud but it only worked at 600. - - - ui_externalSetup - - - External device setup - - ui_displayLabel @@ -499,6 +491,76 @@ + + + ui_externalSetup + + + External device setup + + + + + layout3 + + + + unnamed + + + + uirts + + + RTS + + + true + + + + + uicts + + + CTS + + + + + uidsr + + + DSR + + + + + uidtr + + + DTR + + + + + spacer3 + + + Horizontal + + + Expanding + + + + 201 + 21 + + + + + @@ -560,7 +622,7 @@ - 12 bytes binary, continuous (VC940) + 11 bytes binary, continuous (VC940) @@ -637,7 +699,7 @@ 20 - 60 + 30 @@ -709,13 +771,13 @@ - 89504e470d0a1a0a0000000d4948445200000016000000160806000000c4b46c3b000003a749444154388db595db6bdc4514c73fbfdffee26e9adb363149636d132ab62249a460a9542b22f14114d410a848fb604104093efae0dd17df7ca87f8014ec830fd22a548a90a86d646b83a5de5a2506499a264db29bcde6b2bfcb5ccef8b03171ad41113330cc6166ce67ce7ce7cc8c97cbe5d88ae26f09f5bf82cf9cf3ddd9e1c0fdafe091d13a77fc5837c78f7673eab4dd14feafc167870317a93d6ef0855e5ab2695ab2697aee6ddf74bed7f9fccfeee947da100165411b4119f8f8dc345fbc167a9f5fa8715d776679ecd14e9a1a6a30c6a1b5c518472693e2f5772f71b41fefafe060776b9a6303cd2803b1056520d170a8a78e4f2f8cb9febe5ddcbfbf19ad41a96ae728323c3bb08fb7deffc1bd3398ae8207ce55cb6414cc8c4ed36062de7cf93eb6d582b57fbf5d1147f7de2c87f73703e5ea88ad6c804bd723a62f4ff0645f175dbb6b37d50f6071d570e29339700eadeb38f2f6a29b9af340049c23f87334cbb3cb1c3ad0f18fd0525978e28d31fa1eba833dbbea1181ae7d3b58295bb48113ef7d4b6065c3c1dfd9c6ab1ffcc4c10382b360c562ad20c621d661d6eccfbe2932f07827b7b566393f5909329d81efaf2c31353c7eab146786f274dddd4aefce80edb76f231447a41c91823076845a88637871ef0e929a80d1df2a50cf8785c988f98b1320abe44ed67a55e0a19179c64e75b330af696a09907ac8af406105266fc2ea22141228cc43b16429e413c285556e5e9da7345386d883868ab6813115e897a311877b1aa9cd404d5b0d57c69669ddddc8d80d189f84d9bc215fb0cc150cf982212c4544a532a599459c7210028105d6c0b2966ee72f15e97fb099b2c05c02f37e23bf7c671197228c1d4a41ac844439e24428e44374a8a1ae0e6c02249052e02a87e68b1596cbf0e3b51247faea192bc28d22c4407145585a1512ed88954369282d696667436c90c6cfa4abd32565c87dd8e8ad1d1e0c5d5ce1e1de266657a13e808e0cd45b68ec08582a2a4ce0d12c86461dd3d0aeb82b9b42920409134ca28942437e41989cd2eb6b04c63abeca2df0ca33eddcd3b0d6bb1db486387668ed93248624b128e5a354401c1bb40e88e35a94aa41a90ca7479638797d2311fc726898985ce1a983d597c2f721087c52290fdff7d76c7fddf6fdcad81ff6d75723721f65d7df8b6061a6cc4bcf75de72bb52a94a7538440c89d24471421469c25011270971a4d15a48b461fcd71068da9002df63f8729107069770e21001c42122582b582d1863b046b0c6608cc5688b18a9b46229870ec2eac7ccdbaacff47797721a4f2ef8084a0000000049454e44ae426082 + 89504e470d0a1a0a0000000d4948445200000016000000160806000000c4b46c3b000003a749444154789cb595db6bdc4514c73fbfdffee26e9adb363149636d132ab62249a460a9542b22f14114d410a848fb604104093efae0dd17df7ca87f8014ec830fd22a548a90a86d646b83a5de5a2506499a264db29bcde6b2bfcb5ccef8b03171ad41113330cc6166ce67ce7ce7cc8c97cbe5d88ae26f09f5bf82cf9cf3ddd9e1c0fdafe091d13a77fc5837c78f7673eab4dd14feafc167870317a93d6ef0855e5ab2695ab2697aee6ddf74bed7f9fccfeee947da100165411b4119f8f8dc345fbc167a9f5fa8715d776679ecd14e9a1a6a30c6a1b5c518472693e2f5772f71b41fefafe060776b9a6303cd2803b1056520d170a8a78e4f2f8cb9febe5ddcbfbf19ad41a96ae728323c3bb08fb7deffc1bd3398ae8207ce55cb6414cc8c4ed36062de7cf93eb6d582b57fbf5d1147f7de2c87f73703e5ea88ad6c804bd723a62f4ff0645f175dbb6b37d50f6071d570e29339700eadeb38f2f6a29b9af340049c23f87334cbb3cb1c3ad0f18fd0525978e28d31fa1eba833dbbea1181ae7d3b58295bb48113ef7d4b6065c3c1dfd9c6ab1ffcc4c10382b360c562ad20c621d661d6eccfbe2932f07827b7b566393f5909329d81efaf2c31353c7eab146786f274dddd4aefce80edb76f231447a41c91823076845a88637871ef0e929a80d1df2a50cf8785c988f98b1320abe44ed67a55e0a19179c64e75b330af696a09907ac8af406105266fc2ea22141228cc43b16429e413c285556e5e9da7345386d883868ab6813115e897a311877b1aa9cd404d5b0d57c69669ddddc8d80d189f84d9bc215fb0cc150cf982212c4544a532a599459c7210028105d6c0b2966ee72f15e97fb099b2c05c02f37e23bf7c671197228c1d4a41ac844439e24428e44374a8a1ae0e6c02249052e02a87e68b1596cbf0e3b51247faea192bc28d22c4407145585a1512ed88954369282d696667436c90c6cfa4abd32565c87dd8e8ad1d1e0c5d5ce1e1de266657a13e808e0cd45b68ec08582a2a4ce0d12c86461dd3d0aeb82b9b42920409134ca28942437e41989cd2eb6b04c63abeca2df0ca33eddcd3b0d6bb1db486387668ed93248624b128e5a354401c1bb40e88e35a94aa41a90ca7479638797d2311fc726898985ce1a983d597c2f721087c52290fdff7d76c7fddf6fdcad81ff6d75723721f65d7df8b6061a6cc4bcf75de72bb52a94a7538440c89d24471421469c25011270971a4d15a48b461fcd71068da9002df63f8729107069770e21001c42122582b582d1863b046b0c6608cc5688b18a9b46229870ec2eac7ccdbaacff47797721a4fc40f4d680000000049454e44ae426082 - 89504e470d0a1a0a0000000d4948445200000016000000160806000000c4b46c3b000002a249444154388db594bd6f5c5510c57fcf1f496105298e0329a0e25f48414185e811a4a02012121565e853a1502021e18a1a0929050852d0502051b12d428ae8c347b063a3c426ebf8bd3b730ec5bdfbb26b2f091419e9e9adf6defb9b73cfccbc6e329970f3d66d9b1ab6dbd37e0336486aeb00755d6d1f98f7af5eee988bb59bb76efb8d375f4336afbff232fbf77b56573bd6563bce6dacf3b4b8f1d9f748e6daf56fbc7de3ad11be6640aa2a013ef8f0abf1d0179f5e5d0ab34d647dc6ffda8d463086c8c48ff7f0eedbaf128aa550d94498be08c944887bf70e8938013635b3e7c82659e9ba934c4a88a188485322e987e48fbb0f284339b577cd8688aa38c27cfec93b741d745db7708b12a244851ef7413f043ffdb2c750622cec09b0194a02f0e5773f93590fa7448940692292122253a484523c9c0eecec1ea0149ef37ace0aeaa221b21e96bc008d109949ca64d4f7ceee0129e1d4828d23184389c4ccc0493675ca7a7d497350310c59c5c818a325e015034324925bdbb5f683134352df184cc7d6c5e7d8da3a57ebb05431aebe8678efcae5da156daab2792dcd7c3792b87f180c512df878fb5be4a5c583d28a374bfc6fd0081129f61f4c91ccd9b3674865bdc669c59039fb0e98df76f6aa3243665668bb514a1c3e0c8e8e8334bcb0b989314b04cf26af6634f0e2a58ba3da08511a34521c4c071e0d476cacd4a2f625974247c52562b4e2ceddddc7e014a508b92a9d3e8a96c864265b9b179653c7e2b53997cc4b979e5f50fbf774e0cffd29eb67928d4e0ca5da23d7c44f0033f6a16deeecec514a72741cf47dd297a484e94b504af3ba0dd185f3e79f0ccea85df1c38fbf37e555cd4c7966559fe1b1b016fc7af8176af5595f5f5d007793c9846bd7bf5eec97d3ddf3d4d8fee8cac2e7b09b4c26ff9ff21f62e599509f25f81fedcca62070ce498c0000000049454e44ae426082 + 89504e470d0a1a0a0000000d4948445200000016000000160806000000c4b46c3b000002a249444154789cb594bd6f5c5510c57fcf1f496105298e0329a0e25f48414185e811a4a02012121565e853a1502021e18a1a0929050852d0502051b12d428ae8c347b063a3c426ebf8bd3b730ec5bdfbb26b2f091419e9e9adf6defb9b73cfccbc6e329970f3d66d9b1ab6dbd37e0336486aeb00755d6d1f98f7af5eee988bb59bb76efb8d375f4336afbff232fbf77b56573bd6563bce6dacf3b4b8f1d9f748e6daf56fbc7de3ad11be6640aa2a013ef8f0abf1d0179f5e5d0ab34d647dc6ffda8d463086c8c48ff7f0eedbaf128aa550d94498be08c944887bf70e8938013635b3e7c82659e9ba934c4a88a188485322e987e48fbb0f284339b577cd8688aa38c27cfec93b741d745db7708b12a244851ef7413f043ffdb2c750622cec09b0194a02f0e5773f93590fa7448940692292122253a484523c9c0eecec1ea0149ef37ace0aeaa221b21e96bc008d109949ca64d4f7ceee0129e1d4828d23184389c4ccc0493675ca7a7d497350310c59c5c818a325e015034324925bdbb5f683134352df184cc7d6c5e7d8da3a57ebb05431aebe8678efcae5da156daab2792dcd7c3792b87f180c512df878fb5be4a5c583d28a374bfc6fd0081129f61f4c91ccd9b3674865bdc669c59039fb0e98df76f6aa3243665668bb514a1c3e0c8e8e8334bcb0b989314b04cf26af6634f0e2a58ba3da08511a34521c4c071e0d476cacd4a2f625974247c52562b4e2ceddddc7e014a508b92a9d3e8a96c864265b9b179653c7e2b53997cc4b979e5f50fbf774e0cffd29eb67928d4e0ca5da23d7c44f0033f6a16deeecec514a72741cf47dd297a484e94b504af3ba0dd185f3e79f0ccea85df1c38fbf37e555cd4c7966559fe1b1b016fc7af8176af5595f5f5d007793c9846bd7bf5eec97d3ddf3d4d8fee8cac2e7b09b4c26ff9ff21f62e599509f25f81fedcca620b8886cd70000000049454e44ae426082 - 89504e470d0a1a0a0000000d4948445200000016000000160806000000c4b46c3b000000c749444154388dad55db1184200c4c180bb81a28c73aad811228c356f42b3792db3cc0db2fc724bb7901dc7b270f27ed17fa5fa9b117b7cd90211f4ba0ac906a7f1453b4d30ca917bb590681552af23f69bfc4ffa71519d2c8f62546ea5ea03738b1c18c33a4d156f0d13f43b61952e4af6d6e8fb3a408f080448419a433d6486d85052fdba892a295f5d45785cd8c51a9d6de6a814a8d2131da51f98e7a3b64ec9da04a8db53d43be3c3c0b22cacf17e4cdb5a931649ceddf34b190cf0aa019f03f1fd3e7457f03b5a66c9ed26e86130000000049454e44ae426082 + 89504e470d0a1a0a0000000d4948445200000016000000160806000000c4b46c3b000000c749444154789cad55db1184200c4c180bb81a28c73aad811228c356f42b3792db3cc0db2fc724bb7901dc7b270f27ed17fa5fa9b117b7cd90211f4ba0ac906a7f1453b4d30ca917bb590681552af23f69bfc4ffa71519d2c8f62546ea5ea03738b1c18c33a4d156f0d13f43b61952e4af6d6e8fb3a408f080448419a433d6486d85052fdba892a295f5d45785cd8c51a9d6de6a814a8d2131da51f98e7a3b64ec9da04a8db53d43be3c3c0b22cacf17e4cdb5a931649ceddf34b190cf0aa019f03f1fd3e7457f03b5a66c9e1f13d0b20000000049454e44ae426082