Hello community, here is the log from the commit of package fldigi for openSUSE:Factory checked in at 2017-10-17 01:53:08 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ Comparing /work/SRC/openSUSE:Factory/fldigi (Old) and /work/SRC/openSUSE:Factory/.fldigi.new (New) ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Package is "fldigi" Tue Oct 17 01:53:08 2017 rev:5 rq:534150 version:4.0.11 Changes: -------- --- /work/SRC/openSUSE:Factory/fldigi/fldigi.changes 2017-10-09 19:40:46.391224802 +0200 +++ /work/SRC/openSUSE:Factory/.fldigi.new/fldigi.changes 2017-10-17 01:53:09.568631756 +0200 @@ -1,0 +2,13 @@ +Sun Oct 15 19:10:12 UTC 2017 - [email protected] + +- Update to version 4.0.11 + * Text Capture + * FreeBSD mod + * Documentation update + * PSK filter + * Audio Stream + * printf cleanup + * CW Multichannel + * QSY multi + +------------------------------------------------------------------- Old: ---- fldigi-4.0.10.tar.gz New: ---- fldigi-4.0.11.tar.gz ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ Other differences: ------------------ ++++++ fldigi.spec ++++++ --- /var/tmp/diff_new_pack.OaYp8K/_old 2017-10-17 01:53:10.492588479 +0200 +++ /var/tmp/diff_new_pack.OaYp8K/_new 2017-10-17 01:53:10.496588291 +0200 @@ -17,7 +17,7 @@ Name: fldigi -Version: 4.0.10 +Version: 4.0.11 Release: 0 Summary: Digital modem program (hamradio) License: GPL-3.0 ++++++ fldigi-4.0.10.tar.gz -> fldigi-4.0.11.tar.gz ++++++ diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/fldigi-4.0.10/ChangeLog new/fldigi-4.0.11/ChangeLog --- old/fldigi-4.0.10/ChangeLog 2017-09-26 01:42:10.000000000 +0200 +++ new/fldigi-4.0.11/ChangeLog 2017-10-15 05:36:02.000000000 +0200 @@ -1,8 +1,20 @@ -=Version 4.0.10= +=Version 4.0.11= + +2017-10-14 David Freese <[email protected]> + + 3302f0d: Text Capture + 35387db: FreeBSD mod + 6e94d54: Documentation update + e4abdbf: PSK filter + cd36a46: Audio Stream + 5a9322f: printf cleanup + e8651ed: CW Multichannel + 89b5207: QSY multi -2017-09-25 David Freese <[email protected]> + +=Version 4.0.10= 949ed87: WX HamQth bug fix 0142116: win7 mingw build fixes diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/fldigi-4.0.10/configure new/fldigi-4.0.11/configure --- old/fldigi-4.0.10/configure 2017-09-26 01:42:41.000000000 +0200 +++ new/fldigi-4.0.11/configure 2017-10-15 05:37:13.000000000 +0200 @@ -1,6 +1,6 @@ #! /bin/sh # Guess values for system-dependent variables and create Makefiles. -# Generated by GNU Autoconf 2.69 for fldigi 4.0.10. +# Generated by GNU Autoconf 2.69 for fldigi 4.0.11. # # Report bugs to <[email protected]>. # @@ -582,8 +582,8 @@ # Identity of this package. PACKAGE_NAME='fldigi' PACKAGE_TARNAME='fldigi' -PACKAGE_VERSION='4.0.10' -PACKAGE_STRING='fldigi 4.0.10' +PACKAGE_VERSION='4.0.11' +PACKAGE_STRING='fldigi 4.0.11' PACKAGE_BUGREPORT='[email protected]' PACKAGE_URL='' @@ -1479,7 +1479,7 @@ # Omit some internal or obsolete options to make the list less imposing. # This message is too long to be a string in the A/UX 3.1 sh. cat <<_ACEOF -\`configure' configures fldigi 4.0.10 to adapt to many kinds of systems. +\`configure' configures fldigi 4.0.11 to adapt to many kinds of systems. Usage: $0 [OPTION]... [VAR=VALUE]... @@ -1551,7 +1551,7 @@ if test -n "$ac_init_help"; then case $ac_init_help in - short | recursive ) echo "Configuration of fldigi 4.0.10:";; + short | recursive ) echo "Configuration of fldigi 4.0.11:";; esac cat <<\_ACEOF @@ -1725,7 +1725,7 @@ test -n "$ac_init_help" && exit $ac_status if $ac_init_version; then cat <<\_ACEOF -fldigi configure 4.0.10 +fldigi configure 4.0.11 generated by GNU Autoconf 2.69 Copyright (C) 2012 Free Software Foundation, Inc. @@ -2406,7 +2406,7 @@ This file contains any messages produced by compilers while running configure, to aid debugging if configure makes a mistake. -It was created by fldigi $as_me 4.0.10, which was +It was created by fldigi $as_me 4.0.11, which was generated by GNU Autoconf 2.69. Invocation command line was $ $0 $@ @@ -2761,9 +2761,9 @@ FLDIGI_VERSION_MINOR=0 -FLDIGI_VERSION_PATCH=.10 +FLDIGI_VERSION_PATCH=.11 -FLDIGI_VERSION=4.0.10 +FLDIGI_VERSION=4.0.11 FLARQ_VERSION_MAJOR=4 @@ -2781,7 +2781,7 @@ $as_echo "#define FLDIGI_VERSION_MINOR 0" >>confdefs.h -$as_echo "#define FLDIGI_VERSION_PATCH \".10\"" >>confdefs.h +$as_echo "#define FLDIGI_VERSION_PATCH \".11\"" >>confdefs.h $as_echo "#define FLARQ_VERSION_MAJOR 4" >>confdefs.h @@ -2793,7 +2793,7 @@ $as_echo "#define FLARQ_VERSION_PATCH \".6\"" >>confdefs.h -$as_echo "#define FLDIGI_VERSION \"4.0.10\"" >>confdefs.h +$as_echo "#define FLDIGI_VERSION \"4.0.11\"" >>confdefs.h $as_echo "#define FLARQ_VERSION \"4.3.6\"" >>confdefs.h @@ -3432,7 +3432,7 @@ # Define the identity of the package. PACKAGE='fldigi' - VERSION='4.0.10' + VERSION='4.0.11' cat >>confdefs.h <<_ACEOF @@ -13599,7 +13599,7 @@ # report actual input values of CONFIG_FILES etc. instead of their # values after options handling. ac_log=" -This file was extended by fldigi $as_me 4.0.10, which was +This file was extended by fldigi $as_me 4.0.11, which was generated by GNU Autoconf 2.69. Invocation command line was CONFIG_FILES = $CONFIG_FILES @@ -13665,7 +13665,7 @@ cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 ac_cs_config="`$as_echo "$ac_configure_args" | sed 's/^ //; s/[\\""\`\$]/\\\\&/g'`" ac_cs_version="\\ -fldigi config.status 4.0.10 +fldigi config.status 4.0.11 configured by $0, generated by GNU Autoconf 2.69, with options \\"\$ac_cs_config\\" diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/fldigi-4.0.10/configure.ac new/fldigi-4.0.11/configure.ac --- old/fldigi-4.0.10/configure.ac 2017-09-26 01:41:55.000000000 +0200 +++ new/fldigi-4.0.11/configure.ac 2017-10-15 05:33:53.000000000 +0200 @@ -9,7 +9,7 @@ dnl contain other characters or be empty m4_define(FLDIGI_MAJOR, [4]) m4_define(FLDIGI_MINOR, [0]) -m4_define(FLDIGI_PATCH, [.10]) +m4_define(FLDIGI_PATCH, [.11]) m4_define(FLARQ_MAJOR, [4]) m4_define(FLARQ_MINOR, [3]) m4_define(FLARQ_PATCH, [.6]) Binary files old/fldigi-4.0.10/po/de.gmo and new/fldigi-4.0.11/po/de.gmo differ diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/fldigi-4.0.10/po/de.po new/fldigi-4.0.11/po/de.po --- old/fldigi-4.0.10/po/de.po 2017-09-26 05:20:48.000000000 +0200 +++ new/fldigi-4.0.11/po/de.po 2017-10-15 05:52:30.000000000 +0200 @@ -7,7 +7,7 @@ msgstr "" "Project-Id-Version: fldigi 3.22.01\n" "Report-Msgid-Bugs-To: w1hkj AT w1hkj DOT com\n" -"POT-Creation-Date: 2017-09-25 22:20-0500\n" +"POT-Creation-Date: 2017-10-14 22:52-0500\n" "PO-Revision-Date: 2013-10-21 13:07+0100\n" "Last-Translator: Marc Richter <[email protected]>\n" "Language-Team: German (Marc Richter) <[email protected]>\n" @@ -1802,15 +1802,15 @@ msgid "Macro editor - " msgstr "Makro Editor - " -#: src/misc/macros.cxx:4110 +#: src/misc/macros.cxx:4148 msgid "Open macro file" msgstr "Makrodatei laden" -#: src/misc/macros.cxx:4111 src/misc/macros.cxx:4154 +#: src/misc/macros.cxx:4149 src/misc/macros.cxx:4192 msgid "Fldigi macro definition file\t*.{mdf}" msgstr "Fldigi Makro Definitions Datei\t*.{mdf}" -#: src/misc/macros.cxx:4153 +#: src/misc/macros.cxx:4191 msgid "Save macro file" msgstr "Makrodatei speichern" Binary files old/fldigi-4.0.10/po/es.gmo and new/fldigi-4.0.11/po/es.gmo differ diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/fldigi-4.0.10/po/es.po new/fldigi-4.0.11/po/es.po --- old/fldigi-4.0.10/po/es.po 2017-09-26 05:20:47.000000000 +0200 +++ new/fldigi-4.0.11/po/es.po 2017-10-15 05:52:29.000000000 +0200 @@ -12,7 +12,7 @@ msgstr "" "Project-Id-Version: fldigi 3.22.02\n" "Report-Msgid-Bugs-To: w1hkj AT w1hkj DOT com\n" -"POT-Creation-Date: 2017-09-25 22:20-0500\n" +"POT-Creation-Date: 2017-10-14 22:52-0500\n" "PO-Revision-Date: 2014-11-18 22:43-0500\n" "Last-Translator: Pavel Milanes Costa <[email protected]>\n" "Language-Team: Spanish (Pavel Milanes Costa) <[email protected]>\n" @@ -1817,15 +1817,15 @@ msgid "Macro editor - " msgstr "Editor de macros - " -#: src/misc/macros.cxx:4110 +#: src/misc/macros.cxx:4148 msgid "Open macro file" msgstr "Abrir archivo de macro" -#: src/misc/macros.cxx:4111 src/misc/macros.cxx:4154 +#: src/misc/macros.cxx:4149 src/misc/macros.cxx:4192 msgid "Fldigi macro definition file\t*.{mdf}" msgstr "Archivo de definición de macro para Fldigi\t*.mdf" -#: src/misc/macros.cxx:4153 +#: src/misc/macros.cxx:4191 msgid "Save macro file" msgstr "Guardar el archivo de macros" diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/fldigi-4.0.10/po/fldigi.pot new/fldigi-4.0.11/po/fldigi.pot --- old/fldigi-4.0.10/po/fldigi.pot 2017-09-26 05:20:47.000000000 +0200 +++ new/fldigi-4.0.11/po/fldigi.pot 2017-10-15 05:52:29.000000000 +0200 @@ -6,9 +6,9 @@ #, fuzzy msgid "" msgstr "" -"Project-Id-Version: fldigi 4.0.10\n" +"Project-Id-Version: fldigi 4.0.11\n" "Report-Msgid-Bugs-To: w1hkj AT w1hkj DOT com\n" -"POT-Creation-Date: 2017-09-25 22:20-0500\n" +"POT-Creation-Date: 2017-10-14 22:52-0500\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME <EMAIL@ADDRESS>\n" "Language-Team: LANGUAGE <[email protected]>\n" @@ -1709,15 +1709,15 @@ msgid "Macro editor - " msgstr "" -#: src/misc/macros.cxx:4110 +#: src/misc/macros.cxx:4148 msgid "Open macro file" msgstr "" -#: src/misc/macros.cxx:4111 src/misc/macros.cxx:4154 +#: src/misc/macros.cxx:4149 src/misc/macros.cxx:4192 msgid "Fldigi macro definition file\t*.{mdf}" msgstr "" -#: src/misc/macros.cxx:4153 +#: src/misc/macros.cxx:4191 msgid "Save macro file" msgstr "" Binary files old/fldigi-4.0.10/po/fr.gmo and new/fldigi-4.0.11/po/fr.gmo differ diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/fldigi-4.0.10/po/fr.po new/fldigi-4.0.11/po/fr.po --- old/fldigi-4.0.10/po/fr.po 2017-09-26 05:20:47.000000000 +0200 +++ new/fldigi-4.0.11/po/fr.po 2017-10-15 05:52:29.000000000 +0200 @@ -8,7 +8,7 @@ msgstr "" "Project-Id-Version: fldigi 3.22.01\n" "Report-Msgid-Bugs-To: w1hkj AT w1hkj DOT com\n" -"POT-Creation-Date: 2017-09-25 22:20-0500\n" +"POT-Creation-Date: 2017-10-14 22:52-0500\n" "PO-Revision-Date: 2010-03-06 13:04+0200\n" "Last-Translator: Bernard Seront, F4GAR <[email protected]>\n" "Language-Team: French\n" @@ -1831,16 +1831,16 @@ msgid "Macro editor - " msgstr "Éditeur de macro - " -#: src/misc/macros.cxx:4110 +#: src/misc/macros.cxx:4148 msgid "Open macro file" msgstr "Ouvrir fichier macros" -#: src/misc/macros.cxx:4111 src/misc/macros.cxx:4154 +#: src/misc/macros.cxx:4149 src/misc/macros.cxx:4192 #, fuzzy msgid "Fldigi macro definition file\t*.{mdf}" msgstr "Fichier de définition macro Fldigi\t*.mdf" -#: src/misc/macros.cxx:4153 +#: src/misc/macros.cxx:4191 msgid "Save macro file" msgstr "Enregistrer fichier macros" Binary files old/fldigi-4.0.10/po/it.gmo and new/fldigi-4.0.11/po/it.gmo differ diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/fldigi-4.0.10/po/it.po new/fldigi-4.0.11/po/it.po --- old/fldigi-4.0.10/po/it.po 2017-09-26 05:20:48.000000000 +0200 +++ new/fldigi-4.0.11/po/it.po 2017-10-15 05:52:29.000000000 +0200 @@ -7,7 +7,7 @@ msgstr "" "Project-Id-Version: fldigi 3.22.01\n" "Report-Msgid-Bugs-To: w1hkj AT w1hkj DOT com\n" -"POT-Creation-Date: 2017-09-25 22:20-0500\n" +"POT-Creation-Date: 2017-10-14 22:52-0500\n" "PO-Revision-Date: 2011-12-03 13:04+0100\n" "Last-Translator: Pierfrancesco Caci <[email protected]>\n" "Language-Team: Italian\n" @@ -1842,16 +1842,16 @@ msgid "Macro editor - " msgstr "Editor delle macro - " -#: src/misc/macros.cxx:4110 +#: src/misc/macros.cxx:4148 msgid "Open macro file" msgstr "Apri file delle macro" -#: src/misc/macros.cxx:4111 src/misc/macros.cxx:4154 +#: src/misc/macros.cxx:4149 src/misc/macros.cxx:4192 #, fuzzy msgid "Fldigi macro definition file\t*.{mdf}" msgstr "File di definizione delle macro per Fldigi\t*.mdf" -#: src/misc/macros.cxx:4153 +#: src/misc/macros.cxx:4191 msgid "Save macro file" msgstr "Salva file delle macro" Binary files old/fldigi-4.0.10/po/nl.gmo and new/fldigi-4.0.11/po/nl.gmo differ diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/fldigi-4.0.10/po/nl.po new/fldigi-4.0.11/po/nl.po --- old/fldigi-4.0.10/po/nl.po 2017-09-26 05:20:48.000000000 +0200 +++ new/fldigi-4.0.11/po/nl.po 2017-10-15 05:52:30.000000000 +0200 @@ -7,7 +7,7 @@ msgstr "" "Project-Id-Version: fldigi 3.22.01\n" "Report-Msgid-Bugs-To: w1hkj AT w1hkj DOT com\n" -"POT-Creation-Date: 2017-09-25 22:20-0500\n" +"POT-Creation-Date: 2017-10-14 22:52-0500\n" "PO-Revision-Date: 2014-11-10 20:14-0600\n" "Last-Translator: Peter van der Post <[email protected]>\n" "Language-Team: Dutch\n" @@ -1800,15 +1800,15 @@ msgid "Macro editor - " msgstr "Macro editor - " -#: src/misc/macros.cxx:4110 +#: src/misc/macros.cxx:4148 msgid "Open macro file" msgstr "Open macrobestand" -#: src/misc/macros.cxx:4111 src/misc/macros.cxx:4154 +#: src/misc/macros.cxx:4149 src/misc/macros.cxx:4192 msgid "Fldigi macro definition file\t*.{mdf}" msgstr "Fldigi macro-definitiebestand\t*.{mdf}" -#: src/misc/macros.cxx:4153 +#: src/misc/macros.cxx:4191 msgid "Save macro file" msgstr "Bewaar macrobestand" Binary files old/fldigi-4.0.10/po/pl.gmo and new/fldigi-4.0.11/po/pl.gmo differ diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/fldigi-4.0.10/po/pl.po new/fldigi-4.0.11/po/pl.po --- old/fldigi-4.0.10/po/pl.po 2017-09-26 05:20:48.000000000 +0200 +++ new/fldigi-4.0.11/po/pl.po 2017-10-15 05:52:29.000000000 +0200 @@ -5,7 +5,7 @@ msgstr "" "Project-Id-Version: fldigi 3.23.14\n" "Report-Msgid-Bugs-To: w1hkj AT w1hkj DOT com\n" -"POT-Creation-Date: 2017-09-25 22:20-0500\n" +"POT-Creation-Date: 2017-10-14 22:52-0500\n" "PO-Revision-Date: 2016-09-24 19:28+0200\n" "Last-Translator: Roman Bagiński <[email protected]>\n" "Language-Team: Polish (Roman Bagiński) <[email protected]>\n" @@ -1777,15 +1777,15 @@ msgid "Macro editor - " msgstr "Edytor makro - " -#: src/misc/macros.cxx:4110 +#: src/misc/macros.cxx:4148 msgid "Open macro file" msgstr "Otwórz plik makro" -#: src/misc/macros.cxx:4111 src/misc/macros.cxx:4154 +#: src/misc/macros.cxx:4149 src/misc/macros.cxx:4192 msgid "Fldigi macro definition file\t*.{mdf}" msgstr "Plik definicji makro Fldigi\t*.mdf" -#: src/misc/macros.cxx:4153 +#: src/misc/macros.cxx:4191 msgid "Save macro file" msgstr "Zapisz plik makro" Binary files old/fldigi-4.0.10/po/ru.gmo and new/fldigi-4.0.11/po/ru.gmo differ diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/fldigi-4.0.10/po/ru.po new/fldigi-4.0.11/po/ru.po --- old/fldigi-4.0.10/po/ru.po 2017-09-26 05:20:49.000000000 +0200 +++ new/fldigi-4.0.11/po/ru.po 2017-10-15 05:52:30.000000000 +0200 @@ -7,7 +7,7 @@ msgstr "" "Project-Id-Version: fldigi 3.23.21.6\n" "Report-Msgid-Bugs-To: w1hkj AT w1hkj DOT com\n" -"POT-Creation-Date: 2017-09-25 22:20-0500\n" +"POT-Creation-Date: 2017-10-14 22:52-0500\n" "PO-Revision-Date: 2017-03-14 14:10+0500\n" "Last-Translator: RX9CDR <[email protected]>\n" "Language-Team: RX9CDR Russia, tnx for help UV7QAE Ukraina <[email protected]>\n" @@ -1753,15 +1753,15 @@ msgid "Macro editor - " msgstr "Редактор макросов - " -#: src/misc/macros.cxx:4110 +#: src/misc/macros.cxx:4148 msgid "Open macro file" msgstr "Открыть файл макросов" -#: src/misc/macros.cxx:4111 src/misc/macros.cxx:4154 +#: src/misc/macros.cxx:4149 src/misc/macros.cxx:4192 msgid "Fldigi macro definition file\t*.{mdf}" msgstr "Fldigi файл определения макроса\t*.{mdf}" -#: src/misc/macros.cxx:4153 +#: src/misc/macros.cxx:4191 msgid "Save macro file" msgstr "Записать файл макроса" diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/fldigi-4.0.10/src/cw_rtty/view_cw.cxx new/fldigi-4.0.11/src/cw_rtty/view_cw.cxx --- old/fldigi-4.0.10/src/cw_rtty/view_cw.cxx 2017-09-25 13:03:44.000000000 +0200 +++ new/fldigi-4.0.11/src/cw_rtty/view_cw.cxx 2017-10-02 20:06:08.000000000 +0200 @@ -47,7 +47,7 @@ extern waterfall *wf; -#define CH_SPACING 25 +#define CH_SPACING 50 #define VCW_FFT_SIZE 2048 // must be a factor of 2 enum {READY, NOT_READY}; @@ -214,7 +214,7 @@ // && cw_receive_state == POST_TONE) { std::string code = morse->rx_lookup(rx_rep_buf); - if (code.length()) { + if (code.empty()) { decode_str.clear(); cw_receive_state = KEYUP; rx_rep_buf.clear(); diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/fldigi-4.0.10/src/include/configuration.h new/fldigi-4.0.11/src/include/configuration.h --- old/fldigi-4.0.10/src/include/configuration.h 2017-09-25 13:03:44.000000000 +0200 +++ new/fldigi-4.0.11/src/include/configuration.h 2017-10-07 17:22:49.000000000 +0200 @@ -227,9 +227,11 @@ ELEM_(bool, tx_lowercase, "TX_LOWERCASE", \ "Transmit all text in lowercase", \ false) \ - /* PSK, filter can be 0, 1, 2, 3 or 4 */ \ + /* PSK, filter can be 0, 1, 2 */ \ ELEM_(int, PSK_filter, "PSKFILTER", \ - "Not configurable; must always be 0", \ + "0 - PskCore filter\n" \ + "1 - Raised cosine / sinc filter\n" \ + "2 - G3PLX (gmfsk) filter", \ 0) \ ELEM_(bool, pskbrowser_on, "PSKBROWSER_ON", \ "Enable psk multi-channel detector - disable for very slow cpus", \ diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/fldigi-4.0.10/src/include/pskcoeff.h new/fldigi-4.0.11/src/include/pskcoeff.h --- old/fldigi-4.0.10/src/include/pskcoeff.h 2017-07-22 15:25:44.000000000 +0200 +++ new/fldigi-4.0.11/src/include/pskcoeff.h 2017-10-07 17:22:49.000000000 +0200 @@ -23,11 +23,13 @@ #define FIRLEN 64 -extern double gmfir1c[FIRLEN]; -extern double gmfir2c[FIRLEN]; +extern double gmfir1c[]; +extern double gmfir2c[]; +extern double pskcore_filter[]; + extern double syncfilt[16]; -extern void raisedcosfilt(double *); -extern void wsincfilt(double *, double fc, bool blackman); +extern void raisedcosfilt(double *, int len); +extern void wsincfilt(double *, double fc, int len, bool blackman); #endif diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/fldigi-4.0.10/src/misc/macros.cxx new/fldigi-4.0.11/src/misc/macros.cxx --- old/fldigi-4.0.10/src/misc/macros.cxx 2017-09-25 13:03:44.000000000 +0200 +++ new/fldigi-4.0.11/src/misc/macros.cxx 2017-10-02 20:05:06.000000000 +0200 @@ -55,6 +55,7 @@ #include "utf8file_io.h" #include "xmlrpc.h" #include "rigio.h" +#include "strutil.h" #include <FL/Fl.H> #include <FL/filename.H> @@ -2926,14 +2927,23 @@ do_qsy(false); } +struct rfafmd { int rf; int af; std::string mdname; + rfafmd(int a, int b, std::string nm) { rf = a; af = b; mdname = nm;} + rfafmd(int a, int b) {rf = a; af = b; mdname = active_modem->get_mode_name();} + rfafmd(){rf = af = 0; mdname = active_modem->get_mode_name();} +}; +static queue<rfafmd> fpairs; + static void pQSY(std::string &s, size_t &i, size_t endbracket) { if (within_exec) { s.replace(i, endbracket - i + 1, ""); return; } + + std::string mdname = active_modem->get_mode_name(); int rf = 0; - int audio = 0; + int af = 0; float rfd = 0; std::string sGoFreq = s.substr(i+5, endbracket - i - 5); // no frequency(s) specified @@ -2941,26 +2951,54 @@ s.replace(i, endbracket-i+1, ""); return; } - // rf first value - sscanf(sGoFreq.c_str(), "%f", &rfd); - if (rfd > 0) - rf = (int)(1000*rfd); - size_t pos; - if ((pos = sGoFreq.find(":")) != std::string::npos) { - // af second value - sGoFreq.erase(0, pos+1); - if (sGoFreq.length()) - sscanf(sGoFreq.c_str(), "%d", &audio); - if (audio < 0) audio = 0; - if (audio < progdefaults.LowFreqCutoff) - audio = progdefaults.LowFreqCutoff; - if (audio > progdefaults.HighFreqCutoff) - audio = progdefaults.HighFreqCutoff; + + if (fpairs.empty()) { + std::string triad; + size_t pos; + while (!sGoFreq.empty()) { + pos = sGoFreq.find(";"); + if (pos == std::string::npos) triad = sGoFreq; + else triad = sGoFreq.substr(0, pos); + sGoFreq.erase(0, triad.length()+1); + sscanf(triad.c_str(), "%f", &rfd); + if (rfd > 0) rf = (int)(1000*rfd); + if ((pos = triad.find(":")) != std::string::npos) { + triad.erase(0,pos+1); + if (triad.length()) + sscanf(triad.c_str(), "%d", &af); + if (af < 0) af = 0; + if (af < progdefaults.LowFreqCutoff) af = progdefaults.LowFreqCutoff; + if (af > progdefaults.HighFreqCutoff) af = progdefaults.HighFreqCutoff; + } else af = active_modem->get_freq(); + + if ((pos = triad.find(":")) != std::string::npos) { + triad.erase(0, pos+1); + strtrim(triad); + fpairs.push(rfafmd(rf, af, triad)); + } else + fpairs.push(rfafmd(rf,af, mdname)); + } } + + struct rfafmd fpair; + + fpair = fpairs.front(); + rf = fpair.rf; + af = fpair.af; + if (fpair.mdname != mdname) { + for (int m = 0; m < NUM_MODES; m++) { + if (fpair.mdname == mode_info[m].sname) { + init_modem_sync(mode_info[m].mode); + break; + } + } + } + fpairs.pop(); + if (rf && rf != wf->rfcarrier()) - qsy(rf, audio); + qsy(rf, af); else - active_modem->set_freq(audio); + active_modem->set_freq(af); s.replace(i, endbracket - i + 1, ""); } diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/fldigi-4.0.10/src/misc/socket.cxx new/fldigi-4.0.11/src/misc/socket.cxx --- old/fldigi-4.0.10/src/misc/socket.cxx 2017-09-26 01:22:12.000000000 +0200 +++ new/fldigi-4.0.11/src/misc/socket.cxx 2017-10-13 01:28:12.000000000 +0200 @@ -618,11 +618,7 @@ address = addr; size_t n = address.size(); -#ifdef __FreeBSD__ - for (anum = n-1; anum >= 1; anum--) { -#else for (anum = n-1; anum >= 0; anum--) { -#endif ainfo = address.get(anum); LOG_INFO("Trying %s", address.get_str(ainfo).c_str()); if ((sockfd = socket(ainfo->ai_family, ainfo->ai_socktype, ainfo->ai_protocol)) != -1) diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/fldigi-4.0.10/src/psk/psk.cxx new/fldigi-4.0.11/src/psk/psk.cxx --- old/fldigi-4.0.10/src/psk/psk.cxx 2017-09-25 13:03:44.000000000 +0200 +++ new/fldigi-4.0.11/src/psk/psk.cxx 2017-10-07 17:22:49.000000000 +0200 @@ -682,8 +682,8 @@ vestigial_sfft = (sfft *)0; // create impulse response for experimental FIR filters - double fir1c[64]; - double fir2c[64]; + double fir1c[FIRLEN+1]; + double fir2c[FIRLEN+1]; for (int i = 0; i < MAX_CARRIERS; i++) { if (i < numcarriers) { @@ -696,53 +696,40 @@ } switch (progdefaults.PSK_filter) { - case 1: - // use the original gmfsk matched filters - for (int i = 0; i < 64; i++) { - fir1c[i] = gmfir1c[i]; - fir2c[i] = gmfir2c[i]; - } + default : + case 0: + // pskcore filter implementation + raisedcosfilt(fir1c, FIRLEN); + for (int i = 0; i <= FIRLEN; i++) + fir2c[i] = pskcore_filter[i]; for (int i = 0; i < numcarriers; i++) { - fir1[i]->init(FIRLEN, symbollen > 15 ? symbollen / 16 : 1, fir1c, fir1c); - fir2[i]->init(FIRLEN, 1, fir2c, fir2c); + fir1[i]->init(FIRLEN+1, symbollen > 15 ? symbollen / 16 : 1, fir1c, fir1c); + fir2[i]->init(FIRLEN+1, 1, fir2c, fir2c); } break; - case 2: - // creates fir1c matched sin(x)/x filter w hamming - wsincfilt(fir1c, 1.0 / symbollen, false); - // creates fir2c matched sin(x)/x filter w hamming - wsincfilt(fir2c, 1.0 / 16.0, false); - for (int i = 0; i < numcarriers; i++) { - fir1[i]->init(FIRLEN, symbollen > 15 ? symbollen / 16 : 1, fir1c, fir1c); - fir2[i]->init(FIRLEN, 1, fir2c, fir2c); - } - break; - case 3: - // creates fir1c matched sin(x)/x filter w hamming - wsincfilt(fir1c, 1.0 / symbollen, false); + case 1: + // slightly better performance than G3PLX filter + // creates raised cosine filter + raisedcosfilt(fir1c, FIRLEN); // 1/22 with Hamming window nearly identical to gmfir2c - wsincfilt(fir2c, 1.0 / 22.0, false); + wsincfilt(fir2c, 1.0 / 22.0, FIRLEN, false); for (int i = 0; i < numcarriers; i++) { - fir1[i]->init(FIRLEN, symbollen > 15 ? symbollen / 16 : 1, fir1c, fir1c); - fir2[i]->init(FIRLEN, 1, fir2c, fir2c); + fir1[i]->init(FIRLEN+1, symbollen > 15 ? symbollen / 16 : 1, fir1c, fir1c); + fir2[i]->init(FIRLEN+1, 1, fir2c, fir2c); } break; - case 4: - wsincfilt(fir2c, 1.5 / 16.0, true); - for (int i = 0; i < numcarriers; i++) { - fir1[i]->init_lowpass (FIRLEN, 16, 1.5 / symbollen); - fir2[i]->init(FIRLEN, 1, fir2c, fir2c); + case 2: + // use the original gmfsk, G3PLX, matched filters + // a raised cosine filter + for (int i = 0; i <= FIRLEN; i++) { + fir1c[i] = gmfir1c[i]; + fir2c[i] = gmfir2c[i]; } - case 0: - default : - // creates fir1c matched sin(x)/x filter w blackman - wsincfilt(fir1c, 1.0 / symbollen, true); - // creates fir2c matched sin(x)/x filter w blackman - wsincfilt(fir2c, 1.0 / 16.0, true); for (int i = 0; i < numcarriers; i++) { fir1[i]->init(FIRLEN, symbollen > 15 ? symbollen / 16 : 1, fir1c, fir1c); fir2[i]->init(FIRLEN, 1, fir2c, fir2c); } + break; } snfilt = new Cmovavg(16); diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/fldigi-4.0.10/src/psk/pskcoeff.cxx new/fldigi-4.0.11/src/psk/pskcoeff.cxx --- old/fldigi-4.0.10/src/psk/pskcoeff.cxx 2017-07-22 15:25:44.000000000 +0200 +++ new/fldigi-4.0.11/src/psk/pskcoeff.cxx 2017-10-08 15:36:39.000000000 +0200 @@ -31,13 +31,12 @@ #include <math.h> - -// 64-tap raised-cosine FIR +// 65-tap raised-cosine FIR // implements // u[n] = (1.0 - cos(2PI * n / 64))/128.0 // used in gmfsk, twpsk etc. -double gmfir1c[64] = { +double gmfir1c[FIRLEN+1] = { 0.000000, //0 0.000038, //1 0.000150, //2 @@ -102,13 +101,14 @@ 0.000336, //61 0.000150, //62 0.000038, //63 + 0.000000 //64 }; // 4-bit receive filter for 31.25 baud BPSK // Designed by G3PLX // -double gmfir2c[64] = { +double gmfir2c[FIRLEN+1] = { 0.000625000, 0.000820912, 0.001374651, @@ -172,7 +172,8 @@ 0.003110600, 0.002188141, 0.001374651, - 0.000820912 + 0.000820912, + 0.000625000 }; @@ -199,36 +200,107 @@ 0.097545161 }; +double pskcore_filter[FIRLEN+1] = { + 4.3453566e-005, //0 + -0.00049122414, //1 + -0.00078771292, //2 + -0.0013507826, //3 + -0.0021287814, //4 + -0.003133466, //5 + -0.004366817, //6 + -0.0058112187, //7 + -0.0074249976, //8 + -0.0091398882, //9 + -0.010860157, //10 + -0.012464086, //11 + -0.013807772, //12 + -0.014731191, //13 + -0.015067057, //14 + -0.014650894, //15 + -0.013333425, //16 + -0.01099166, //17 + -0.0075431246, //18 + -0.0029527849, //19 + 0.0027546292, //20 + 0.0094932775, //21 + 0.017113308, //22 + 0.025403511, //23 + 0.034099681, //24 + 0.042895839, //25 + 0.051458575, //26 + 0.059444853, //27 + 0.066521003, //28 + 0.072381617, //29 + 0.076767694, //30 + 0.079481619, //31 + 0.080420311, //32 + 0.079481619, //33 + 0.076767694, //34 + 0.072381617, //35 + 0.066521003, //36 + 0.059444853, //37 + 0.051458575, //38 + 0.042895839, //39 + 0.034099681, //40 + 0.025403511, //41 + 0.017113308, //42 + 0.0094932775, //43 + 0.0027546292, //44 + -0.0029527849, //45 + -0.0075431246, //46 + -0.01099166, //47 + -0.013333425, //48 + -0.014650894, //49 + -0.015067057, //50 + -0.014731191, //51 + -0.013807772, //52 + -0.012464086, //53 + -0.010860157, //54 + -0.0091398882, //55 + -0.0074249976, //56 + -0.0058112187, //57 + -0.004366817, //58 + -0.003133466, //59 + -0.0021287814, //60 + -0.0013507826, //61 + -0.00078771292, //62 + -0.00049122414, //63 + 4.3453566e-005 //64 + }; + // experimental filters (higher precision) // identical to the G0TJZ filter but with double precision -void raisedcosfilt(double *firc) +// *firc should be double of len+1 + +void raisedcosfilt(double *firc, int len) { - for (int i = 0; i < 64; i++) - firc[i] = (1.0 - cos(M_PI * i / 32.0))/128.0; + for (int i = 0; i <= len; i++) + firc[i] = (1.0 - cos(M_PI * i / 32.0))/(2*len); } -void wsincfilt(double *firc, double fc, bool blackman) +// *firc should be double of len+1 +void wsincfilt(double *firc, double fc, int len, bool blackman) { double normalize = 0; // sin(x-tau)/(x-tau) - for (int i = 0; i < 64; i++) + for (int i = 0; i <= len; i++) if (i == 32) firc[i] = 2.0 * M_PI * fc; else firc[i] = sin(2*M_PI*fc*(i - 32))/(i-32); // blackman window if (blackman) - for (int i = 0; i < 64; i++) - firc[i] = firc[i] * (0.42 - 0.5 * cos(2*M_PI*i/64) + 0.08 * cos(4*M_PI*i/64)); + for (int i = 0; i <= len; i++) + firc[i] = firc[i] * (0.42 - 0.5 * cos(2*M_PI*i/(len-1)) + 0.08 * cos(4*M_PI*i/len)); // hamming window else - for (int i = 0; i < 64; i++) - firc[i] = firc[i] * (0.54 - 0.46 * cos(2*M_PI*i/64)); + for (int i = 0; i <= len; i++) + firc[i] = firc[i] * (0.54 - 0.46 * cos(2*M_PI*i/len)); // normalization factor - for (int i = 0; i < 64; i++) + for (int i = 0; i <= len; i++) normalize += firc[i]; // normalize the filter - for (int i = 0; i < 64; i++) + for (int i = 0; i <= len; i++) firc[i] /= normalize; } diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/fldigi-4.0.10/src/psk/viewpsk.cxx new/fldigi-4.0.11/src/psk/viewpsk.cxx --- old/fldigi-4.0.10/src/psk/viewpsk.cxx 2017-09-25 13:03:44.000000000 +0200 +++ new/fldigi-4.0.11/src/psk/viewpsk.cxx 2017-10-07 17:22:49.000000000 +0200 @@ -130,8 +130,8 @@ if (viewmode == pskmode) return; viewmode = pskmode; - double fir1c[64]; - double fir2c[64]; + double fir1c[FIRLEN+1]; + double fir2c[FIRLEN+1]; int idepth = 2; int isize = 2; @@ -213,17 +213,18 @@ break; } - wsincfilt(fir1c, 1.0 / symbollen, true); // creates fir1c matched sin(x)/x filter w blackman - wsincfilt(fir2c, 1.0 / 16.0, true); // creates fir2c matched sin(x)/x filter w blackman + raisedcosfilt(fir1c, FIRLEN); + for (int i = 0; i <= FIRLEN; i++) + fir2c[i] = pskcore_filter[i]; for (int i = 0; i < MAXCHANNELS; i++) { if (channel[i].fir1) delete channel[i].fir1; channel[i].fir1 = new C_FIR_filter(); - channel[i].fir1->init(FIRLEN, symbollen / 16, fir1c, fir1c); + channel[i].fir1->init(FIRLEN+1, symbollen / 16, fir1c, fir1c); if (channel[i].fir2) delete channel[i].fir2; channel[i].fir2 = new C_FIR_filter(); - channel[i].fir2->init(FIRLEN, 1, fir2c, fir2c); + channel[i].fir2->init(FIRLEN+1, 1, fir2c, fir2c); if (_qpsk) { if (channel[i].dec) delete channel[i].dec; diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/fldigi-4.0.10/src/rigcontrol/rigsupport.cxx new/fldigi-4.0.11/src/rigcontrol/rigsupport.cxx --- old/fldigi-4.0.10/src/rigcontrol/rigsupport.cxx 2017-07-22 15:25:44.000000000 +0200 +++ new/fldigi-4.0.11/src/rigcontrol/rigsupport.cxx 2017-10-02 20:08:33.000000000 +0200 @@ -148,11 +148,11 @@ pMD = &lmodes; else if (lmodeCMD.empty() == false) pMD = &lmodeCMD; -printf("initOptionMenus()\n"); +//printf("initOptionMenus()\n"); if (pMD) { MD = pMD->begin(); while (MD != pMD->end()) { -printf("adding mode: %s\n", (*MD).SYMBOL.c_str()); +//printf("adding mode: %s\n", (*MD).SYMBOL.c_str()); qso_opMODE->add( (*MD).SYMBOL.c_str()); MD++; } @@ -174,7 +174,7 @@ if (pBW) { bw = pBW->begin(); while (bw != pBW->end()) { -printf("adding BW: %s\n", (*bw).SYMBOL.c_str()); +//printf("adding BW: %s\n", (*bw).SYMBOL.c_str()); qso_opBW->add( (*bw).SYMBOL.c_str()); bw++; } diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/fldigi-4.0.10/src/soundcard/sound.cxx new/fldigi-4.0.11/src/soundcard/sound.cxx --- old/fldigi-4.0.10/src/soundcard/sound.cxx 2017-09-25 13:03:44.000000000 +0200 +++ new/fldigi-4.0.11/src/soundcard/sound.cxx 2017-10-07 13:29:52.000000000 +0200 @@ -1141,7 +1141,7 @@ req_sample_rate = sample_frequency = freq; // do we need to (re)initialise the streams? - int ret = 0; + int ret = 1; int sr[2] = { progdefaults.in_sample_rate, progdefaults.out_sample_rate }; // initialize stream if it is a JACK device, regardless of mode @@ -1167,12 +1167,12 @@ // reset the semaphore while (sem_trywait(sd[i].rwsem) == 0); if (errno && errno != EAGAIN) { - pa_perror(errno, "open"); + pa_perror(errno, "open failed"); throw SndException(errno); } start_stream(i); - ret = 1; + ret = 0; } else { pause_stream(i); diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/fldigi-4.0.10/src/trx/trx.cxx new/fldigi-4.0.11/src/trx/trx.cxx --- old/fldigi-4.0.10/src/trx/trx.cxx 2017-09-25 13:03:44.000000000 +0200 +++ new/fldigi-4.0.11/src/trx/trx.cxx 2017-10-07 17:22:41.000000000 +0200 @@ -30,6 +30,7 @@ #include <semaphore.h> #include <cstdlib> #include <string> +#include <string.h> #include "trx.h" #include "main.h" @@ -49,6 +50,8 @@ #include "rigsupport.h" #include "psm/psm.h" +#include "icons.h" + #include "fft-monitor.h" extern fftmon *fft_modem; @@ -232,8 +235,9 @@ if (!progdefaults.is_full_duplex || !RXsc_is_open || current_RXsamplerate != active_modem->get_samplerate() ) { current_RXsamplerate = active_modem->get_samplerate(); - RXscard->Close(O_RDONLY); - if (RXscard->Open(O_RDONLY, current_RXsamplerate)) { + if (RXscard) { + RXscard->Close(O_RDONLY); + RXscard->Open(O_RDONLY, current_RXsamplerate); REQ(sound_update, progdefaults.btnAudioIOis); RXsc_is_open = true; } @@ -242,7 +246,7 @@ catch (const SndException& e) { LOG_ERROR("%s. line: %i", e.what(), __LINE__); put_status(e.what(), 5); - RXscard->Close(); + if (RXscard) RXscard->Close(); RXsc_is_open = false; current_RXsamplerate = 0; // if (e.error() == EBUSY && progdefaults.btnAudioIOis == SND_IDX_PORT) { @@ -259,13 +263,15 @@ ringbuffer<double>::vector_type rbvec[2]; rbvec[0].buf = rbvec[1].buf = 0; - RXscard->flush(O_RDONLY); + if (RXscard) RXscard->flush(O_RDONLY); while (1) { try { numread = 0; - while (numread < SCBLOCKSIZE && trx_state == STATE_RX) - numread += RXscard->Read(fbuf + numread, SCBLOCKSIZE - numread); + if (RXscard) { + while (numread < SCBLOCKSIZE && trx_state == STATE_RX) + numread += RXscard->Read(fbuf + numread, SCBLOCKSIZE - numread); + } if (numread > SCBLOCKSIZE) { LOG_ERROR("numread error %lu", (unsigned long) numread); numread = SCBLOCKSIZE; @@ -289,7 +295,7 @@ } } catch (const SndException& e) { - RXscard->Close(); + if (RXscard) RXscard->Close(); RXsc_is_open = false; LOG_ERROR("%s. line: %i", e.what(), __LINE__); put_status(e.what(), 5); @@ -342,10 +348,11 @@ } } } - if (trx_state == STATE_RESTART) return; + if (trx_state == STATE_RESTART) + return; if (!progdefaults.is_full_duplex ) { - RXscard->Close(O_RDONLY); + if (RXscard) RXscard->Close(O_RDONLY); RXsc_is_open = false; } } @@ -365,9 +372,11 @@ try { if (current_TXsamplerate != active_modem->get_samplerate() || !TXsc_is_open) { current_TXsamplerate = active_modem->get_samplerate(); - TXscard->Close(O_WRONLY); - if (TXscard->Open(O_WRONLY, current_TXsamplerate)) + if (TXscard) { + TXscard->Close(O_WRONLY); + TXscard->Open(O_WRONLY, current_TXsamplerate); TXsc_is_open = true; + } } } catch (const SndException& e) { LOG_ERROR("%s. line: %i", e.what(), __LINE__); @@ -418,7 +427,7 @@ trx_state = STATE_RX; } catch (const SndException& e) { - TXscard->Close(); + if (TXscard) TXscard->Close(); TXsc_is_open = false; LOG_ERROR("%s", e.what()); put_status(e.what(), 5); @@ -440,11 +449,11 @@ trx_xmit_wfall_end(current_TXsamplerate); - TXscard->flush(); + if (TXscard) TXscard->flush(); if (trx_state == STATE_RX) { if (!progdefaults.is_full_duplex) { - TXscard->Close(O_WRONLY); + if (TXscard) TXscard->Close(O_WRONLY); TXsc_is_open = false; } } @@ -474,9 +483,11 @@ if (!progdefaults.is_full_duplex || !TXsc_is_open || current_TXsamplerate != active_modem->get_samplerate() ) { current_TXsamplerate = active_modem->get_samplerate(); - TXscard->Close(O_WRONLY); - TXscard->Open(O_WRONLY, current_TXsamplerate); - TXsc_is_open = true; + if (TXscard) TXscard->Close(O_WRONLY); + if (TXscard) { + TXscard->Open(O_WRONLY, current_TXsamplerate); + TXsc_is_open = true; + } } } catch (const SndException& e) { LOG_ERROR("%s. line: %i", e.what(), __LINE__); @@ -501,7 +512,7 @@ xmttune::keyup(active_modem->get_txfreq_woffset(), TXscard); } catch (const SndException& e) { - TXscard->Close(); + if (TXscard) TXscard->Close(); TXsc_is_open = false; LOG_ERROR("%s. line: %i", e.what(), __LINE__); put_status(e.what(), 5); @@ -509,11 +520,11 @@ current_TXsamplerate = 0; return; } - TXscard->flush(); + if (TXscard) TXscard->flush(); if (trx_state == STATE_RX) { if (!progdefaults.is_full_duplex) { - TXscard->Close(O_WRONLY); + if (TXscard) TXscard->Close(O_WRONLY); TXsc_is_open = false; } } @@ -632,6 +643,20 @@ } //============================================================================= +static string reset_loop_msg; +void show_reset_loop_alert() +{ + progdefaults.btnAudioIOis = SND_IDX_NULL; // file i/o + sound_update(progdefaults.btnAudioIOis); + if (btnAudioIO[0]) { + fl_alert2("%s", reset_loop_msg.c_str()); + btnAudioIO[0]->value(0); + btnAudioIO[1]->value(0); + btnAudioIO[2]->value(0); + btnAudioIO[3]->value(1); + } +} + void trx_reset_loop() { if (RXscard) { @@ -650,12 +675,22 @@ switch (progdefaults.btnAudioIOis) { #if USE_OSS case SND_IDX_OSS: - RXscard = new SoundOSS(scDevice[0].c_str()); - RXscard->Open(O_RDONLY, current_RXsamplerate = 8000); - RXsc_is_open = true; - TXscard = new SoundOSS(scDevice[0].c_str()); - TXscard->Open(O_WRONLY, current_TXsamplerate = 8000); - TXsc_is_open = true; + try { + RXscard = new SoundOSS(scDevice[0].c_str()); + if (!RXscard) break; + + RXscard->Open(O_RDONLY, current_RXsamplerate = 8000); + RXsc_is_open = true; + + TXscard = new SoundOSS(scDevice[0].c_str()); + if (!TXscard) break; + + TXscard->Open(O_WRONLY, current_TXsamplerate = 8000); + TXsc_is_open = true; + } catch (...) { + reset_loop_msg = "OSS open failure"; + REQ(show_reset_loop_alert); + } break; #endif #if USE_PORTAUDIO @@ -669,6 +704,8 @@ unsigned long tm1 = zmsec(); int RXret = 0, TXret = 0; int i; + RXsc_is_open = false; + TXsc_is_open = false; for (i = 0; i < 10; i++) { // try 10 times try { if (!RXret) @@ -687,8 +724,13 @@ } unsigned long tm = zmsec() - tm1; if (i == 10) { + if (RXscard) delete RXscard; + if (TXscard) delete TXscard; + RXscard = 0; + TXscard = 0; LOG_PERROR("Port Audio device not available"); - abort(); + reset_loop_msg = "Port Audio device not available"; + REQ(show_reset_loop_alert); } else { LOG_INFO ("Port Audio device available after %0.1f seconds", tm / 1000.0 ); } @@ -697,14 +739,39 @@ #endif #if USE_PULSEAUDIO case SND_IDX_PULSE: - RXscard = new SoundPulse(scDevice[0].c_str()); - if (RXscard->Open(O_RDONLY, current_RXsamplerate = 8000)) + try { + RXscard = new SoundPulse(scDevice[0].c_str()); + if (!RXscard) break; + + RXscard->Open(O_RDONLY, current_RXsamplerate = 8000); RXsc_is_open = true; - TXscard = new SoundPulse(scDevice[0].c_str()); - if (progdefaults.is_full_duplex) - if (TXscard->Open(O_WRONLY, current_TXsamplerate = 8000)) + TXscard = new SoundPulse(scDevice[0].c_str()); + if (!TXscard) break; + +// needed to open playback device in PaVolumeControl + TXscard->Open(O_WRONLY, current_TXsamplerate = 8000); + double buffer[1024]; + for (int i = 0; i < 1024; buffer[i++] = 0); + TXscard->Write_stereo(buffer, buffer, 1024); + + if (progdefaults.is_full_duplex) TXsc_is_open = true; + else { + TXscard->Close(); + TXsc_is_open = false; + } + } catch (const SndException& e) { + LOG_ERROR("%s", e.what()); + if (RXscard) delete RXscard; + if (TXscard) delete TXscard; + RXscard = 0; + TXscard = 0; + reset_loop_msg = "Pulse Audio error:\n"; + reset_loop_msg.append(e.what()); + reset_loop_msg.append("\n\nIs the server running?\nClose fldigi and execute 'pulseaudio --start'"); + REQ(show_reset_loop_alert); + } break; #endif case SND_IDX_NULL: @@ -763,8 +830,36 @@ #endif #if USE_PULSEAUDIO case SND_IDX_PULSE: - RXscard = new SoundPulse(scDevice[0].c_str()); - TXscard = new SoundPulse(scDevice[0].c_str()); + try { + RXscard = new SoundPulse(scDevice[0].c_str()); + if (!RXscard) break; + + TXscard = new SoundPulse(scDevice[0].c_str()); + if (!TXscard) break; + +// needed to open playback device in PaVolumeControl + TXscard->Open(O_WRONLY, current_TXsamplerate = 8000); + double buffer[1024]; + for (int i = 0; i < 1024; buffer[i++] = 0); + TXscard->Write_stereo(buffer, buffer, 1024); + + if (progdefaults.is_full_duplex) + TXsc_is_open = true; + else { + TXscard->Close(); + TXsc_is_open = false; + } + } catch (const SndException& e) { + LOG_ERROR("%s", e.what()); + if (RXscard) delete RXscard; + if (TXscard) delete TXscard; + RXscard = 0; + TXscard = 0; + reset_loop_msg = "Pulse Audio error:\n"; + reset_loop_msg.append(e.what()); + reset_loop_msg.append("\n\nIs the server running?"); + REQ(show_reset_loop_alert); + } break; #endif case SND_IDX_NULL: diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/fldigi-4.0.10/src/widgets/FTextRXTX.cxx new/fldigi-4.0.11/src/widgets/FTextRXTX.cxx --- old/fldigi-4.0.10/src/widgets/FTextRXTX.cxx 2017-09-25 13:03:44.000000000 +0200 +++ new/fldigi-4.0.11/src/widgets/FTextRXTX.cxx 2017-10-15 03:37:28.000000000 +0200 @@ -476,7 +476,7 @@ Fl_Input2* target = 0; if (progdefaults.logging != LOG_QSO) { - if (call.match(s)) { // point p to substring + if ((inpCall->value()[0] == 0) && call.match(s)) { // point p to substring const regmatch_t& offsets = call.suboff()[1]; p = s + offsets.rm_so; *(s + offsets.rm_eo) = '\0';
