From: hobbes1069 Date: Tue, 3 Mar 2015 20:45:27 +0000 (+0000) Subject: More svn cleanup. X-Git-Url: http://git.whiteaudio.com/gitweb/?a=commitdiff_plain;h=e9e4d8ef55e504cd6150f5df63c8370ecdd30c3b;p=freetel-svn-tracking.git More svn cleanup. git-svn-id: https://svn.code.sf.net/p/freetel/code@2052 01035d8c-6547-0410-b346-abe4f91aad63 --- diff --git a/fdmdv2/INSTALL b/fdmdv2/INSTALL index 7d1c323b..2d82cd66 100644 --- a/fdmdv2/INSTALL +++ b/fdmdv2/INSTALL @@ -1,365 +1,74 @@ -Installation Instructions -************************* +The CMake configuration for FDMDV2 (FreeDV) is the primary build method at +this time and has been thouroughly tested on Fedora Linux and will likely work +well on most *nix systems and has many advanages over the autotools config. + +It should also work on Windows environments but only the mingw-w64 is tested +to work using the MSYS2 environment. Others may work but you're on your own. + +- Builds against system libraries (by default). +- Or optionally download, build, and statically link with required libraries on + an individual basis. See USE_STATIC_??? options. + NOTE: We need test reports on mingw/Windows, not all dependencies will build. +- Has experimental NSIS packaing support for Windows (WIN32) targets. *nix + systems should rely on 'make install' or tradional packaing methods as the + packages (RPM & DEB) created by CPack are questionable. + +================================== + Building and installing on Linux +================================== + +To perform a cmake build create a directory anywhere underneath (or outside of) +the source directory. + +Linux command line example: + +$ cd /path/to/fdmdv2 +$ mkdir build_linux +$ cd build_linux +$ cmake ../ (defaults to /usr/local, use CMAKE_INSTALL_PREFIX to override) +(if no errors) +$ make +(as root) +$ make install -Copyright (C) 1994, 1995, 1996, 1999, 2000, 2001, 2002, 2004, 2005, -2006, 2007, 2008, 2009 Free Software Foundation, Inc. - - Copying and distribution of this file, with or without modification, -are permitted in any medium without royalty provided the copyright -notice and this notice are preserved. This file is offered as-is, -without warranty of any kind. - -Basic Installation -================== - - Briefly, the shell commands `./configure; make; make install' should -configure, build, and install this package. The following -more-detailed instructions are generic; see the `README' file for -instructions specific to this package. Some packages provide this -`INSTALL' file but do not implement all of the features documented -below. The lack of an optional feature in a given package is not -necessarily a bug. More recommendations for GNU packages can be found -in *note Makefile Conventions: (standards)Makefile Conventions. - - The `configure' shell script attempts to guess correct values for -various system-dependent variables used during compilation. It uses -those values to create a `Makefile' in each directory of the package. -It may also create one or more `.h' files containing system-dependent -definitions. Finally, it creates a shell script `config.status' that -you can run in the future to recreate the current configuration, and a -file `config.log' containing compiler output (useful mainly for -debugging `configure'). - - It can also use an optional file (typically called `config.cache' -and enabled with `--cache-file=config.cache' or simply `-C') that saves -the results of its tests to speed up reconfiguring. Caching is -disabled by default to prevent problems with accidental use of stale -cache files. - - If you need to do unusual things to compile the package, please try -to figure out how `configure' could check whether to do them, and mail -diffs or instructions to the address given in the `README' so they can -be considered for the next release. If you are using the cache, and at -some point `config.cache' contains results you don't want to keep, you -may remove or edit it. - - The file `configure.ac' (or `configure.in') is used to create -`configure' by a program called `autoconf'. You need `configure.ac' if -you want to change it or regenerate `configure' using a newer version -of `autoconf'. - - The simplest way to compile this package is: - - 1. `cd' to the directory containing the package's source code and type - `./configure' to configure the package for your system. - - Running `configure' might take a while. While running, it prints - some messages telling which features it is checking for. - - 2. Type `make' to compile the package. - - 3. Optionally, type `make check' to run any self-tests that come with - the package, generally using the just-built uninstalled binaries. - - 4. Type `make install' to install the programs and any data files and - documentation. When installing into a prefix owned by root, it is - recommended that the package be configured and built as a regular - user, and only the `make install' phase executed with root - privileges. - - 5. Optionally, type `make installcheck' to repeat any self-tests, but - this time using the binaries in their final installed location. - This target does not install anything. Running this target as a - regular user, particularly if the prior `make install' required - root privileges, verifies that the installation completed - correctly. - - 6. You can remove the program binaries and object files from the - source code directory by typing `make clean'. To also remove the - files that `configure' created (so you can compile the package for - a different kind of computer), type `make distclean'. There is - also a `make maintainer-clean' target, but that is intended mainly - for the package's developers. If you use it, you may have to get - all sorts of other programs in order to regenerate files that came - with the distribution. - - 7. Often, you can also type `make uninstall' to remove the installed - files again. In practice, not all packages have tested that - uninstallation works correctly, even though it is required by the - GNU Coding Standards. - - 8. Some packages, particularly those that use Automake, provide `make - distcheck', which can by used by developers to test that all other - targets like `make install' and `make uninstall' work correctly. - This target is generally not run by end users. - -Compilers and Options -===================== - - Some systems require unusual options for compilation or linking that -the `configure' script does not know about. Run `./configure --help' -for details on some of the pertinent environment variables. - - You can give `configure' initial values for configuration parameters -by setting variables in the command line or in the environment. Here -is an example: - - ./configure CC=c99 CFLAGS=-g LIBS=-lposix - - *Note Defining Variables::, for more details. - -Compiling For Multiple Architectures +==================================== + Building and installing on Windows ==================================== - You can compile the package for more than one kind of computer at the -same time, by placing the object files for each architecture in their -own directory. To do this, you can use GNU `make'. `cd' to the -directory where you want the object files and executables to go and run -the `configure' script. `configure' automatically checks for the -source code in the directory that `configure' is in and in `..'. This -is known as a "VPATH" build. - - With a non-GNU `make', it is safer to compile the package for one -architecture at a time in the source code directory. After you have -installed the package for one architecture, use `make distclean' before -reconfiguring for another architecture. - - On MacOS X 10.5 and later systems, you can create libraries and -executables that work on multiple system types--known as "fat" or -"universal" binaries--by specifying multiple `-arch' options to the -compiler but only a single `-arch' option to the preprocessor. Like -this: - - ./configure CC="gcc -arch i386 -arch x86_64 -arch ppc -arch ppc64" \ - CXX="g++ -arch i386 -arch x86_64 -arch ppc -arch ppc64" \ - CPP="gcc -E" CXXCPP="g++ -E" - - This is not guaranteed to produce working output in all cases, you -may have to build one architecture at a time and combine the results -using the `lipo' tool if you have problems. - -Installation Names -================== - - By default, `make install' installs the package's commands under -`/usr/local/bin', include files under `/usr/local/include', etc. You -can specify an installation prefix other than `/usr/local' by giving -`configure' the option `--prefix=PREFIX', where PREFIX must be an -absolute file name. - - You can specify separate installation prefixes for -architecture-specific files and architecture-independent files. If you -pass the option `--exec-prefix=PREFIX' to `configure', the package uses -PREFIX as the prefix for installing programs and libraries. -Documentation and other data files still use the regular prefix. - - In addition, if you use an unusual directory layout you can give -options like `--bindir=DIR' to specify different values for particular -kinds of files. Run `configure --help' for a list of the directories -you can set and what kinds of files go in them. In general, the -default for these options is expressed in terms of `${prefix}', so that -specifying just `--prefix' will affect all of the other directory -specifications that were not explicitly provided. - - The most portable way to affect installation locations is to pass the -correct locations to `configure'; however, many packages provide one or -both of the following shortcuts of passing variable assignments to the -`make install' command line to change installation locations without -having to reconfigure or recompile. - - The first method involves providing an override variable for each -affected directory. For example, `make install -prefix=/alternate/directory' will choose an alternate location for all -directory configuration variables that were expressed in terms of -`${prefix}'. Any directories that were specified during `configure', -but not in terms of `${prefix}', must each be overridden at install -time for the entire installation to be relocated. The approach of -makefile variable overrides for each directory variable is required by -the GNU Coding Standards, and ideally causes no recompilation. -However, some platforms have known limitations with the semantics of -shared libraries that end up requiring recompilation when using this -method, particularly noticeable in packages that use GNU Libtool. - - The second method involves providing the `DESTDIR' variable. For -example, `make install DESTDIR=/alternate/directory' will prepend -`/alternate/directory' before all installation names. The approach of -`DESTDIR' overrides is not required by the GNU Coding Standards, and -does not work on platforms that have drive letters. On the other hand, -it does better at avoiding recompilation issues, and works well even -when some directory options were not specified in terms of `${prefix}' -at `configure' time. - -Optional Features -================= - - If the package supports it, you can cause programs to be installed -with an extra prefix or suffix on their names by giving `configure' the -option `--program-prefix=PREFIX' or `--program-suffix=SUFFIX'. - - Some packages pay attention to `--enable-FEATURE' options to -`configure', where FEATURE indicates an optional part of the package. -They may also pay attention to `--with-PACKAGE' options, where PACKAGE -is something like `gnu-as' or `x' (for the X Window System). The -`README' should mention any `--enable-' and `--with-' options that the -package recognizes. - - For packages that use the X Window System, `configure' can usually -find the X include and library files automatically, but if it doesn't, -you can use the `configure' options `--x-includes=DIR' and -`--x-libraries=DIR' to specify their locations. - - Some packages offer the ability to configure how verbose the -execution of `make' will be. For these packages, running `./configure ---enable-silent-rules' sets the default to minimal output, which can be -overridden with `make V=1'; while running `./configure ---disable-silent-rules' sets the default to verbose, which can be -overridden with `make V=0'. - -Particular systems -================== - - On HP-UX, the default C compiler is not ANSI C compatible. If GNU -CC is not installed, it is recommended to use the following options in -order to use an ANSI C compiler: - - ./configure CC="cc -Ae -D_XOPEN_SOURCE=500" - -and if that doesn't work, install pre-built binaries of GCC for HP-UX. - - On OSF/1 a.k.a. Tru64, some versions of the default C compiler cannot -parse its `' header file. The option `-nodtk' can be used as -a workaround. If GNU CC is not installed, it is therefore recommended -to try - - ./configure CC="cc" - -and if that doesn't work, try - - ./configure CC="cc -nodtk" - - On Solaris, don't put `/usr/ucb' early in your `PATH'. This -directory contains several dysfunctional programs; working variants of -these programs are available in `/usr/bin'. So, if you need `/usr/ucb' -in your `PATH', put it _after_ `/usr/bin'. - - On Haiku, software installed for all users goes in `/boot/common', -not `/usr/local'. It is recommended to use the following options: - - ./configure --prefix=/boot/common - -Specifying the System Type -========================== - - There may be some features `configure' cannot figure out -automatically, but needs to determine by the type of machine the package -will run on. Usually, assuming the package is built to be run on the -_same_ architectures, `configure' can figure that out, but if it prints -a message saying it cannot guess the machine type, give it the -`--build=TYPE' option. TYPE can either be a short name for the system -type, such as `sun4', or a canonical name which has the form: - - CPU-COMPANY-SYSTEM - -where SYSTEM can have one of these forms: - - OS - KERNEL-OS - - See the file `config.sub' for the possible values of each field. If -`config.sub' isn't included in this package, then this package doesn't -need to know the machine type. - - If you are _building_ compiler tools for cross-compiling, you should -use the option `--target=TYPE' to select the type of system they will -produce code for. - - If you want to _use_ a cross compiler, that generates code for a -platform different from the build platform, you should specify the -"host" platform (i.e., that on which the generated programs will -eventually be run) with `--host=TYPE'. - -Sharing Defaults -================ - - If you want to set default values for `configure' scripts to share, -you can create a site shell script called `config.site' that gives -default values for variables like `CC', `cache_file', and `prefix'. -`configure' looks for `PREFIX/share/config.site' if it exists, then -`PREFIX/etc/config.site' if it exists. Or, you can set the -`CONFIG_SITE' environment variable to the location of the site script. -A warning: not all `configure' scripts look for a site script. - -Defining Variables -================== - - Variables not defined in a site shell script can be set in the -environment passed to `configure'. However, some packages may run -configure again during the build, and the customized values of these -variables may be lost. In order to avoid this problem, you should set -them in the `configure' command line, using `VAR=value'. For example: - - ./configure CC=/usr/local2/bin/gcc - -causes the specified `gcc' to be used as the C compiler (unless it is -overridden in the site shell script). - -Unfortunately, this technique does not work for `CONFIG_SHELL' due to -an Autoconf bug. Until the bug is fixed you can use this workaround: - - CONFIG_SHELL=/bin/bash /bin/bash ./configure CONFIG_SHELL=/bin/bash - -`configure' Invocation -====================== - - `configure' recognizes the following options to control how it -operates. - -`--help' -`-h' - Print a summary of all of the options to `configure', and exit. - -`--help=short' -`--help=recursive' - Print a summary of the options unique to this package's - `configure', and exit. The `short' variant lists options used - only in the top level, while the `recursive' variant lists options - also present in any nested packages. +The windows build is similar to linux and follows the same basic workflow. -`--version' -`-V' - Print the version of Autoconf used to generate the `configure' - script, and exit. +Only MinGW is supported. While it is likely possible to perform a pure MinGW +build, installing MSYS will make your life easier. -`--cache-file=FILE' - Enable the cache: use and save the results of the tests in FILE, - traditionally `config.cache'. FILE defaults to `/dev/null' to - disable caching. +CMake may not automatically detect that you're in the MSYS environment. If this +occurs you need to pass cmake the proper generator: -`--config-cache' -`-C' - Alias for `--cache-file=config.cache'. +cmake -G"MSYS Makefiles" [other options] -`--quiet' -`--silent' -`-q' - Do not print messages saying which checks are being made. To - suppress all normal output, redirect it to `/dev/null' (any error - messages will still be shown). +=============================== + Bootstrapping wxWidgets build +=============================== -`--srcdir=DIR' - Look for the package's source code in directory DIR. Usually - `configure' can determine that directory automatically. +If wxWidgets (>= 3.0) is not available then one option is to have CMake boot- +strap the build for FreeDV. -`--prefix=DIR' - Use DIR as the installation prefix. *note Installation Names:: - for more details, including other options available for fine-tuning - the installation locations. +This is required because the tool wx-config is used to get the correct compiler +and linker flags of the wxWidgets components needed by FreeDV. Since this is +normally done at configure time, not during "make", it is not possible for CMake +to have this information prior to building wxWidgets. -`--no-create' -`-n' - Run the configure checks, but stop before creating any output - files. +In order to work around this issue you can "bootstrap" the wxWidgets build using +the CMake option, "BOOTSTRAP_WXWIDGETS". wxWidgets will be built using static +libraries. -`configure' also accepts some other, not widely useful, options. Run -`configure --help' for more details. +NOTE: This forces "USE_STATIC_WXWIDGETS" to be true internally regarless of the +value set manually. +(from any prefered directory outside of the source) +$ cmake -DBOOTSTRAP_WXWIDGETS=TRUE +$ make +(wxWidgets is downloaded and built) +$ cmake . +$ make +(if all goes well, as root) +$ make install diff --git a/fdmdv2/INSTALL.cmake b/fdmdv2/INSTALL.cmake deleted file mode 100644 index 2d82cd66..00000000 --- a/fdmdv2/INSTALL.cmake +++ /dev/null @@ -1,74 +0,0 @@ -The CMake configuration for FDMDV2 (FreeDV) is the primary build method at -this time and has been thouroughly tested on Fedora Linux and will likely work -well on most *nix systems and has many advanages over the autotools config. - -It should also work on Windows environments but only the mingw-w64 is tested -to work using the MSYS2 environment. Others may work but you're on your own. - -- Builds against system libraries (by default). -- Or optionally download, build, and statically link with required libraries on - an individual basis. See USE_STATIC_??? options. - NOTE: We need test reports on mingw/Windows, not all dependencies will build. -- Has experimental NSIS packaing support for Windows (WIN32) targets. *nix - systems should rely on 'make install' or tradional packaing methods as the - packages (RPM & DEB) created by CPack are questionable. - -================================== - Building and installing on Linux -================================== - -To perform a cmake build create a directory anywhere underneath (or outside of) -the source directory. - -Linux command line example: - -$ cd /path/to/fdmdv2 -$ mkdir build_linux -$ cd build_linux -$ cmake ../ (defaults to /usr/local, use CMAKE_INSTALL_PREFIX to override) -(if no errors) -$ make -(as root) -$ make install - -==================================== - Building and installing on Windows -==================================== - -The windows build is similar to linux and follows the same basic workflow. - -Only MinGW is supported. While it is likely possible to perform a pure MinGW -build, installing MSYS will make your life easier. - -CMake may not automatically detect that you're in the MSYS environment. If this -occurs you need to pass cmake the proper generator: - -cmake -G"MSYS Makefiles" [other options] - -=============================== - Bootstrapping wxWidgets build -=============================== - -If wxWidgets (>= 3.0) is not available then one option is to have CMake boot- -strap the build for FreeDV. - -This is required because the tool wx-config is used to get the correct compiler -and linker flags of the wxWidgets components needed by FreeDV. Since this is -normally done at configure time, not during "make", it is not possible for CMake -to have this information prior to building wxWidgets. - -In order to work around this issue you can "bootstrap" the wxWidgets build using -the CMake option, "BOOTSTRAP_WXWIDGETS". wxWidgets will be built using static -libraries. - -NOTE: This forces "USE_STATIC_WXWIDGETS" to be true internally regarless of the -value set manually. - -(from any prefered directory outside of the source) -$ cmake -DBOOTSTRAP_WXWIDGETS=TRUE -$ make -(wxWidgets is downloaded and built) -$ cmake . -$ make -(if all goes well, as root) -$ make install diff --git a/fdmdv2/README.Win32 b/fdmdv2/README.Win32 deleted file mode 100644 index 3fc3f28e..00000000 --- a/fdmdv2/README.Win32 +++ /dev/null @@ -1,73 +0,0 @@ -README.Win32 -David Rowe 27 Oct 2012 - -Debugging Under Windows ------------------------ - -printfs don't appear until after the program finishes. wxLogDebug() -works but you need to run DebugView available from -http://www.sysinternals.com to capture the messages. - -Building fdmdv2 for Windows ---------------------------- - -This is how David R did it, Dave Witten used a different approach. -Many variations are possible. - -1. Install MinGW & the mysys shell - + pwd -W prints true Win32 directory - + I also installed emacs, "tortise svn", and DebugView - -2. "make install" for various packages below put DLLs in /usr/local/lib - "cd /usr/local/lib; pwd -W" to find the Win32 directory - add this to the Windows PATH (Control Panel - System - Advanced) - -3. WxWidgets: - download 2.9.4 tar ball - mkdir build-debug; cd build-debug - ./configure --with-msw - make && make install - -4. PortAudio: - download latest V19 - ./configure --enable-cxx - make && make install - -5. libsndfile: - download lastest source tar ball (not Win32 binaries) - ./configure && make && make install - -6. libsamplerate: - download latest source tar ball: - http://www.mega-nerd.com/SRC/libsamplerate-0.1.8.tar.gz(not Win32 binaries) - ./configure && make && make install - -7. hamlib - - I couldn't get this to compile from source, so used the pre-built Win32 - DLLs: - - Download https://downloads.sourceforge.net/project/hamlib/hamlib/1.2.15.3/hamlib-win32-1.2.15.3.zip - Open hamlib-win32-1.2.15.3.zip with a GUI archive tool - Copy hamlib/include/* to /usr/local/include - Copy hamlib/bin/hamlib*.dll to /usr/local/lib - Copy hamlib/lib/gcc to /usr/local/lib - -8. sox (used for Filter - EQ) - - $ wget http://sourceforge.net/projects/sox/files/sox/14.4.0/sox-14.4.0.tar.gz - $ tar xvzf sox-14.4.0.tar.gz - $ ./configure --enable-shared=no --without-id3tag --without-png --disable-gomp --with-oggvorbis=no --with-oss=no --with-flac=no --disable-dl-sndfile --with-waveaudio=no - $ make && make install - - I couldn't find an install command line that worked, so manually copied the libs and include files. - -9. Codec 2 - $ wget https://freetel.svn.sourceforge.net/svnroot/freetel/codec2 - $ cd codec2 - $ ./configure && make - -10. svn co fdmdv2 - cd fdmdv2/src - make -f Makefile.Win32 - diff --git a/fdmdv2/README.linux b/fdmdv2/README.linux deleted file mode 100644 index 37cf9e15..00000000 --- a/fdmdv2/README.linux +++ /dev/null @@ -1,75 +0,0 @@ -README.linux for fdmdv2 -Created by David Rowe -Oct 14 2012 - -BUILDING FreeDV for Linux -========================= - -1. FreeDV was developed on Ubuntu 9.1 and 10.04 systems. It has been - tested on OSS (Ubuntu 9.1) and ALSA (Ubuntu 10.04) sound systems. - -2. A typical ALSA installation (e.g., Ubuntu 10.04) first install the - following packages: - - $ sudo apt-get install libgtk2.0-dev libsamplerate0-dev libsndfile1-dev libasound2-dev - -3. If you would like to use OSS rather than ALSA do not install libasound2-dev. - -4. Makefile.linux will download the libraries you need, configure and - build them, then build FreeDV. Makefile.linux will _not_ install - any of the libraries built for FreeDV on your system. - - cd fdmdv2/src - make -f Makefile.linux - -Linux usage Notes -================= - -1. Config is stored in ~/.FreeDV, rm this file to restore defaults - - -TODO -==== - -[ ] Stopping Waterfall - + When Stop pressed lower 25% of Waterfall isn't erased - -[ ] release clean up - [ ] remove/comment out debug printfs - [ ] help about with URL (hyperlink?) to web site & donations - [ ] buffer sizes, maybe make a config number - [ ] tool tip help for audio config dialog - -IDEAS -===== - -1. Tabbed page option that draws block diagram of system and draws - line between sound devices and modem blocks. Lines move depending - if we are in sync, audio pass thru etc - -2. Way to I/O to/from files on each "port", for example: - + monitor input speech or feed input speech - -3. (Thomas Kocourek n4fwd) Context sensitive help. - -4. Look at how people hook up and use program, stop common mistakes or assumptions - -5. Squelch implementation. Effect of SNR bouncing around might be to - have audio cut in and out. We might need a better way of - triggering mute, such as amplitude of pilots, or smoother SNR. Or - hysteresis in Squelch. - -User Manual Notes ------------------ - -Count 5 seconds when removing/installing USB sound devices before -pressing refesh. - -Describe what a valid one card and two card configuration looks like. -Draw a block diagram, image of set up dialog. - -What a good scatter diagram/spectrum looks like - -Setting up in audio loopback - -Right click drag tabs, new window, tab order diff --git a/fdmdv2/README.osx b/fdmdv2/README.osx deleted file mode 100644 index 1e3eeca9..00000000 --- a/fdmdv2/README.osx +++ /dev/null @@ -1,801 +0,0 @@ -README.osx -David Witten 29 Dec 2012 -========================== - -Received today: - -Mooneer Salem -Re: [digitalvoice] Re: Mac build for fdmdv2 - -Yep. I'm attaching a patch to this email with the modifications I had to make to get FreeDV to build on OSX. I develop on 10.8.2, but it should work with 10.5-10.7 I think. Unfortunately it's 32-bit only due to a dependency on Carbon, which Apple deprecated. - -Directions (requires MacPorts to build dependencies): - -1. Apply patch. -2. $ sudo port install wxWidgets30 +aui +universal portaudio +universal sox +universal libsndfile +universal libsamplerate +universal -3. $ cd src && make -f Makefile.osx - -This will create a folder named FreeDV.app in the src folder (shows up as a single file in Finder) that when double-clicked, starts the application. I'll probably need to figure out how to include dependencies in the .app folder so that people won't need to install MacPorts just to run FreeDV ;) - -The patch also includes the change away from libctb. It compiles on POSIX compliant platforms, but I'm not sure about the Windows implementation due to not having a Windows development setup here at home. - -... --Mooneer KG6AOV - -Mooneer's patch is included as /freedv_osx_port.patch.gz in the SVN checkout or just snip & run the following -- -Patch: - -Index: src/Makefile.linux -=================================================================== ---- src/Makefile.linux (revision 1152) -+++ src/Makefile.linux (working copy) -@@ -36,12 +36,6 @@ - SOX_INC=-I$(SOX)/src/ - SOX_LIB=$(SOX)/src/.libs/libsox.a - --# CTB --------------------------------------------------- -- --CTB=libctb-0.16 --CTB_INC=-I$(CTB)/include --CTB_LIB=$(CTB)/lib/libctb-0.16.a -- - # if libasound is available, PortAudio will be using it, so we will - # need to add it to freedv link line. To test if it is present, we try - # to link a small C program with -lasound -@@ -50,8 +44,8 @@ - - # FreeDV ------------------------------------------------ - --CPP_FLAGS = -D_NO_AUTOTOOLS_ $(WX_CPPFLAGS) $(PORTAUDIO_INC) $(CODEC2_INC) $(SOX_INC) $(CTB_INC) -I. -g -Wall -O3 -DSVN_REVISION=\"$(SVN_REVISION)\" --FREEDV_LIBS = $(WX_LIBS) $(PORTAUDIO_LIB) $(CODEC2_LIB) $(SOX_LIB) $(CTB_LIB) -lm -lpthread -lsndfile -lsamplerate $(LIBASOUND) -+CPP_FLAGS = -D_NO_AUTOTOOLS_ $(WX_CPPFLAGS) $(PORTAUDIO_INC) $(CODEC2_INC) $(SOX_INC) -I. -g -Wall -O3 -DSVN_REVISION=\"$(SVN_REVISION)\" -+FREEDV_LIBS = $(WX_LIBS) $(PORTAUDIO_LIB) $(CODEC2_LIB) $(SOX_LIB) -lm -lpthread -lsndfile -lsamplerate $(LIBASOUND) - - OBJS = topFrame.o \ - fdmdv2_main.o \ -@@ -65,11 +59,12 @@ - dlg_comports.o \ - dlg_filter.o \ - varicode.o \ --sox_biquad.o -+sox_biquad.o \ -+serialport.o - --HDRS = ../version.h dlg_about.h dlg_audiooptions.h dlg_comports.h dlg_filter.h fdmdv2_main.h fdmdv2_defines.h fdmdv2_plot.h fdmdv2_plot_scalar.h fdmdv2_plot_waterfall_linux.h fdmdv2_plot_scatter.h fdmdv2_plot_spectrum.h fdmdv2_pa_wrapper.h topFrame.h varicode.h -+HDRS = ../version.h dlg_about.h dlg_audiooptions.h dlg_comports.h dlg_filter.h fdmdv2_main.h fdmdv2_defines.h fdmdv2_plot.h fdmdv2_plot_scalar.h fdmdv2_plot_waterfall_linux.h fdmdv2_plot_scatter.h fdmdv2_plot_spectrum.h fdmdv2_pa_wrapper.h topFrame.h varicode.h serialport.h - --all: $(WXWIDGETS)/.built $(PORTAUDIO)/.built $(CODEC2)/.built $(SOX)/.built $(CTB)/.built freedv -+all: $(WXWIDGETS)/.built $(PORTAUDIO)/.built $(CODEC2)/.built $(SOX)/.built freedv - - freedv: $(OBJS) - g++ -o freedv $(OBJS) $(CPP_FLAGS) $(FREEDV_LIBS) -@@ -81,7 +76,7 @@ - rm -f *.o fdmdv2 - - clean-lib: -- rm -Rf $(WXWIDGETS) $(PORTAUDIO) $(CODEC2) $(SOX) $(CTB) -+ rm -Rf $(WXWIDGETS) $(PORTAUDIO) $(CODEC2) $(SOX) - rm -f *.o fdmdv2 - - # wxWidgets --------------------------------------------------------- -@@ -126,14 +121,3 @@ - - $(SOX).tar.bz2: - wget http://downloads.sourceforge.net/project/sox/sox/14.4.0/sox-14.4.0.tar.bz2 -- --# CTB ------------------------------------------------------------- -- --$(CTB)/.built: $(CTB) -- cd $(CTB)/build && make && touch ../.built -- --$(CTB) : $(CTB).tar.gz -- tar xvzf $(CTB).tar.gz -- --$(CTB).tar.gz: -- wget https://iftools.com/download/ctb/0.16/libctb-0.16.tar.gz -Index: src/Makefile.linux.dmw -=================================================================== ---- src/Makefile.linux.dmw (revision 1152) -+++ src/Makefile.linux.dmw (working copy) -@@ -36,7 +36,8 @@ - dlg_comports.o \ - dlg_filter.o \ - varicode.o \ --sox_biquad.o -+sox_biquad.o \ -+serialport.o - - - all: fdmdv2 -@@ -44,7 +45,7 @@ - fdmdv2: $(OBJS) fdmdv2_main.h - g++ -o fdmdv2 $(OBJS) $(CPP_FLAGS) $(LIBS) - --fdmdv2_main.h: ../version.h fdmdv2_defines.h fdmdv2_plot.h fdmdv2_plot_scalar.h fdmdv2_plot_waterfall_linux.h fdmdv2_plot_scatter.h fdmdv2_plot_spectrum.h fdmdv2_pa_wrapper.h dlg_about.h dlg_audiooptions.h dlg_comports.h dlg_options.h -+fdmdv2_main.h: ../version.h fdmdv2_defines.h fdmdv2_plot.h fdmdv2_plot_scalar.h fdmdv2_plot_waterfall_linux.h fdmdv2_plot_scatter.h fdmdv2_plot_spectrum.h fdmdv2_pa_wrapper.h dlg_about.h dlg_audiooptions.h dlg_comports.h dlg_options.h serialport.h - - %.o: %.cpp - g++ $(CPP_FLAGS) -c $< -o $@ -Index: src/Makefile.osx -=================================================================== ---- src/Makefile.osx (revision 0) -+++ src/Makefile.osx (working copy) -@@ -0,0 +1,76 @@ -+# src/Makefile.osx -+# Mooneer Salem 28 Dec 2012 -+# -+# Makefile for OSX - assumes MacPorts for some libraries and builds the others locally. -+# Note: dependencies must be installed with universal binary support due to the use of Carbon by portaudio and others. -+# (Carbon is officially deprecated by Apple and does not have 64-bit support.) -+# -+# $ sudo port install wxWidgets30 +aui +universal portaudio +universal sox +universal libsndfile +universal libsamplerate +universal -+# $ make -f Makefile.osx -+ -+SVN_REVISION=$(shell svnversion) -+MACPORTS_FOLDER=/opt/local -+ -+# Codec 2 ----------------------------------------------- -+ -+CODEC2=codec2 -+CODEC2_INC=-I$(CODEC2)/src -+CODEC2_LIB=$(CODEC2)/src/.libs/libcodec2.a -+ -+# FreeDV ------------------------------------------------ -+ -+CPP_FLAGS = -D_NO_AUTOTOOLS_ -I$(MACPORTS_FOLDER)/include -arch i386 `wx-config --cppflags` $(CODEC2_INC) -I. -g -Wall -O3 -DSVN_REVISION=\"$(SVN_REVISION)\" -+FREEDV_LIBS = -arch i386 -L$(MACPORTS_FOLDER)/lib `wx-config --libs all` -lportaudio $(CODEC2_LIB) -lm -lpthread -lsndfile -lsamplerate -lsox -+ -+OBJS = topFrame.o \ -+fdmdv2_main.o \ -+fdmdv2_plot.o \ -+fdmdv2_plot_scalar.o \ -+fdmdv2_plot_scatter.o \ -+fdmdv2_plot_spectrum.o \ -+fdmdv2_plot_waterfall_linux.o \ -+fdmdv2_pa_wrapper.o \ -+dlg_audiooptions.o \ -+dlg_comports.o \ -+dlg_filter.o \ -+varicode.o \ -+sox_biquad.o \ -+serialport.o -+ -+HDRS = ../version.h dlg_about.h dlg_audiooptions.h dlg_comports.h dlg_filter.h fdmdv2_main.h fdmdv2_defines.h fdmdv2_plot.h fdmdv2_plot_scalar.h fdmdv2_plot_waterfall_linux.h fdmdv2_plot_scatter.h fdmdv2_plot_spectrum.h fdmdv2_pa_wrapper.h topFrame.h varicode.h serialport.h -+ -+all: $(CODEC2)/.built freedv FreeDV.app -+ -+freedv: $(OBJS) -+ g++ -o freedv $(OBJS) $(CPP_FLAGS) $(FREEDV_LIBS) -+ -+FreeDV.app: info.plist freedv -+ -mkdir -p $@/Contents/MacOS -+ -mkdir -p $@/Contents/Resources/English.lproj -+ cp info.plist $@/Contents -+ echo -n "APPL????" > $@/Contents/PkgInfo -+ cp freedv $@/Contents/MacOS/FreeDV -+ -+%.o: %.cpp $(HDRS) -+ g++ $(CPP_FLAGS) -c $< -o $@ -+ -+sox_biquad.o: sox_biquad.c -+ gcc $(CPP_FLAGS) -c sox_biquad.c -o sox_biquad.o -+ -+varicode.o: varicode.c -+ cc $(CPP_FLAGS) -c varicode.c -o varicode.o -+ -+clean: -+ rm -f *.o fdmdv2 -+ rm -rf FreeDV.app/ -+ -+clean-lib: clean -+ rm -Rf $(CODEC2) -+ -+# Codec 2 ---------------------------------------------------------- -+ -+$(CODEC2)/.built: $(CODEC2) -+ cd $(CODEC2) && CPPFLAGS="-arch i386" LDFLAGS="-arch i386" ./configure && make && touch .built -+ -+$(CODEC2): -+ svn co https://freetel.svn.sourceforge.net/svnroot/freetel/codec2 -\ No newline at end of file -Index: src/Makefile.win32 -=================================================================== ---- src/Makefile.win32 (revision 1152) -+++ src/Makefile.win32 (working copy) -@@ -16,7 +16,7 @@ - CODEC2_LIB=$(CODEC2_PATH)/src/.libs/libcodec2.a - - CPP_FLAGS = -D_NO_AUTOTOOLS_ -I$(INCLUDE_PATH) $(WX_CPPFLAGS) -I$(CODEC2_INC) -I../extern/include -g -Wall -DSVN_REVISION=\"$(SVN_REVISION)\" --LIBS = $(WX_LIBS) $(CODEC2_LIB) -lm -lportaudiocpp -lportaudio -lpthread -lsndfile -lsamplerate -lctb-0.16 -lsox -+LIBS = $(WX_LIBS) $(CODEC2_LIB) -lm -lportaudiocpp -lportaudio -lpthread -lsndfile -lsamplerate -lsox - - OBJS = topFrame.o \ - fdmdv2_main.o \ -@@ -30,9 +30,10 @@ - dlg_comports.o \ - dlg_filter.o \ - varicode.o \ --sox_biquad.o -+sox_biquad.o \ -+serialport.o - --HDRS = ../version.h dlg_audiooptions.h dlg_comports.h dlg_filter.h fdmdv2_main.h fdmdv2_defines.h fdmdv2_plot.h fdmdv2_plot_scalar.h fdmdv2_plot_waterfall_linux.h fdmdv2_plot_scatter.h fdmdv2_plot_spectrum.h fdmdv2_pa_wrapper.h topFrame.h dlg_audiooptions.h topFrame.h varicode.h -+HDRS = ../version.h dlg_audiooptions.h dlg_comports.h dlg_filter.h fdmdv2_main.h fdmdv2_defines.h fdmdv2_plot.h fdmdv2_plot_scalar.h fdmdv2_plot_waterfall_linux.h fdmdv2_plot_scatter.h fdmdv2_plot_spectrum.h fdmdv2_pa_wrapper.h topFrame.h dlg_audiooptions.h topFrame.h varicode.h serialport.h - - all: freedv - -Index: src/Makefile.win32.dmw -=================================================================== ---- src/Makefile.win32.dmw (revision 1152) -+++ src/Makefile.win32.dmw (working copy) -@@ -40,10 +40,11 @@ - dlg_comports.o \ - dlg_filter.o \ - varicode.o \ --sox_biquad.o -+sox_biquad.o \ -+serialport.o - - --HDRS = ../version.h fdmdv2_main.h fdmdv2_defines.h fdmdv2_plot.h fdmdv2_plot_scalar.h fdmdv2_plot_waterfall_linux.h fdmdv2_plot_scatter.h fdmdv2_plot_spectrum.h fdmdv2_pa_wrapper.h topFrame.h dlg_audiooptions.h -+HDRS = ../version.h fdmdv2_main.h fdmdv2_defines.h fdmdv2_plot.h fdmdv2_plot_scalar.h fdmdv2_plot_waterfall_linux.h fdmdv2_plot_scatter.h fdmdv2_plot_spectrum.h fdmdv2_pa_wrapper.h topFrame.h dlg_audiooptions.h serialport.h - - all: freedv - -Index: src/dlg_comports.cpp -=================================================================== ---- src/dlg_comports.cpp (revision 1152) -+++ src/dlg_comports.cpp (working copy) -@@ -21,7 +21,6 @@ - //========================================================================== - #include "dlg_comports.h" - #include "fdmdv2_main.h" --#include - #include - - //-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=--=-=-=-= -@@ -62,8 +61,9 @@ - wxArrayString m_listCtrlPortsArr; - m_listCtrlPorts = new wxListBox(this, wxID_ANY, wxDefaultPosition, wxSize(-1,45), m_listCtrlPortsArr, wxLB_SINGLE | wxLB_SORT); - staticBoxSizer31->Add(m_listCtrlPorts, 1, wxALIGN_CENTER, 0); --#endif --#ifdef __WXGTK__ -+#else -+/*#endif -+#ifdef __WXGTK__*/ - wxBoxSizer* bSizer83; - bSizer83 = new wxBoxSizer(wxHORIZONTAL); - -Index: src/fdmdv2_main.cpp -=================================================================== ---- src/fdmdv2_main.cpp (revision 1152) -+++ src/fdmdv2_main.cpp (working copy) -@@ -163,7 +163,6 @@ - { - m_zoom = 1.; - m_serialPort = NULL; -- m_device = NULL; - - tools->AppendSeparator(); - wxMenuItem* m_menuItemToolsConfigDelete; -@@ -857,22 +856,22 @@ - { - if(wxGetApp().m_boolRTSPos) // RTS asserted HIGH - { -- m_serialPort->SetLineState(ctb::LinestateRts); -+ m_serialPort->setRTS(true); - } - else // RTS asserted LOW - { -- m_serialPort->ClrLineState(ctb::LinestateRts); -+ m_serialPort->setRTS(false); - } - } - else // Use DTR - { - if(wxGetApp().m_boolDTRPos) // DTR asserted HIGH - { -- m_serialPort->SetLineState(ctb::LinestateDtr); -+ m_serialPort->setDTR(true); - } - else // DTR asserted LOW - { -- m_serialPort->ClrLineState(ctb::LinestateDtr); -+ m_serialPort->setDTR(false); - } - } - } -@@ -882,22 +881,22 @@ - { - if(wxGetApp().m_boolRTSPos) // RTS cleared LOW - { -- m_serialPort->ClrLineState(ctb::LinestateRts); -+ m_serialPort->setRTS(false); - } - else // RTS cleared HIGH - { -- m_serialPort->SetLineState(ctb::LinestateRts); -+ m_serialPort->setRTS(true); - } - } - else // Use DTR - { - if(wxGetApp().m_boolDTRPos) // DTR cleared LOW - { -- m_serialPort->ClrLineState(ctb::LinestateDtr); -+ m_serialPort->setDTR(false); - } - else // DTR cleared HIGH - { -- m_serialPort->SetLineState(ctb::LinestateDtr); -+ m_serialPort->setDTR(true); - } - } - } -@@ -1351,13 +1350,15 @@ - { - wxUnusedVar(event); - int rv = 0; -- int iLineState = 0; -+ bool rtsEnabled = false; -+ bool dtrEnabled = false; - //bool bPTTEnabled = m_btnTogPTT->IsEnabled(); - //bool bPTTState = m_btnTogPTT->GetValue(); - - if(m_serialPort != NULL) - { -- int iLineState = m_serialPort->GetLineState(); -+ rtsEnabled = m_serialPort->getRTS(); -+ dtrEnabled = m_serialPort->getDTR(); - CloseSerialPort(); - } - ComPortsDlg *dlg = new ComPortsDlg(NULL); -@@ -1372,21 +1373,21 @@ - SetupSerialPort(); - if(m_serialPort != NULL) - { -- if(iLineState | ctb::LinestateRts) -+ if(rtsEnabled) - { -- m_serialPort->SetLineState(ctb::LinestateRts); -+ m_serialPort->setRTS(true); - } - else - { -- m_serialPort->ClrLineState(ctb::LinestateRts); -+ m_serialPort->setRTS(false); - } -- if(iLineState | ctb::LinestateDtr) -+ if(dtrEnabled) - { -- m_serialPort->SetLineState(ctb::LinestateDtr); -+ m_serialPort->setDTR(true); - } - else - { -- m_serialPort->ClrLineState(ctb::LinestateDtr); -+ m_serialPort->setDTR(false); - } - // m_btnTogPTT->Enable(bPTTEnabled); - // m_btnTogPTT->SetValue(bPTTState); -@@ -2631,26 +2632,25 @@ - if(!wxGetApp().m_strRigCtrlPort.IsEmpty()) - { - wxString protocol = wxGetApp().m_strRigCtrlDatabits + wxGetApp().m_strRigCtrlParity + wxGetApp().m_strRigCtrlStopbits; -- m_serialPort = new ctb::SerialPort(); -- if(m_serialPort->Open(wxGetApp().m_strRigCtrlPort.c_str(), baudrate, protocol.c_str(), ctb::SerialPort::NoFlowControl ) >= 0 ) -+ m_serialPort = new SerialPort(wxGetApp().m_strRigCtrlPort.ToAscii().data()); -+ if(m_serialPort->open(/*baudrate, protocol.c_str()*/ ) >= 0 ) - { -- m_device = m_serialPort; - // always start with PTT cleared - if(wxGetApp().m_boolRTSPos) // RTS cleared LOW - { -- m_serialPort->ClrLineState(ctb::LinestateRts); -+ m_serialPort->setRTS(false); - } - else // RTS cleared HIGH - { -- m_serialPort->SetLineState(ctb::LinestateRts); -+ m_serialPort->setRTS(true); - } - if(wxGetApp().m_boolDTRPos) // DTR cleared LOW - { -- m_serialPort->ClrLineState(ctb::LinestateDtr); -+ m_serialPort->setDTR(false); - } - else // DTR cleared HIGH - { -- m_serialPort->SetLineState(ctb::LinestateDtr); -+ m_serialPort->setDTR(true); - } - //m_btnTogPTT->Enable(true); - m_btnTogPTT->SetValue(false); -@@ -2658,7 +2658,6 @@ - else - { - m_serialPort = NULL; -- m_device = NULL; - //m_btnTogPTT->Disable(); - } - } -@@ -2675,11 +2674,10 @@ - //---------------------------------------------------------------- - void MainFrame::CloseSerialPort(void) - { -- if((m_serialPort != NULL) && m_serialPort->IsOpen()) -+ if((m_serialPort != NULL) && m_serialPort->isOpen()) - { -- m_serialPort->Close(); -+ m_serialPort->close(); - m_serialPort = NULL; -- m_device = NULL; - //m_btnTogPTT->SetLabel(wxT("PTT")); - //m_btnTogPTT->Enable(false); - } -Index: src/fdmdv2_main.h -=================================================================== ---- src/fdmdv2_main.h (revision 1152) -+++ src/fdmdv2_main.h (working copy) -@@ -55,10 +55,7 @@ - #include "codec2_fdmdv.h" - #include "codec2_fifo.h" - --#include "ctb-0.16/ctb.h" --#include "ctb-0.16/portscan.h" --#include "ctb-0.16/serportx.h" --#include "ctb-0.16/serport.h" -+#include "serialport.h" - - #include "topFrame.h" - #include "dlg_comports.h" -@@ -353,8 +350,7 @@ - - protected: - -- ctb::IOBase* m_device; -- ctb::SerialPort* m_serialPort; -+ SerialPort* m_serialPort; - - void setsnrBeta(bool snrSlow); - -Index: src/info.plist -=================================================================== ---- src/info.plist (revision 0) -+++ src/info.plist (working copy) -@@ -0,0 +1,34 @@ -+ -+ -+ -+ -+ CFBundleDevelopmentRegion -+ en -+ CFBundleExecutable -+ freedv -+ CFBundleIconFile -+ -+ CFBundleIdentifier -+ org.freedv.freedv -+ CFBundleInfoDictionaryVersion -+ 6.0 -+ CFBundleName -+ FreeDV -+ CFBundlePackageType -+ APPL -+ CFBundleShortVersionString -+ 1.0 -+ CFBundleSignature -+ ???? -+ CFBundleVersion -+ 1 -+ LSMinimumSystemVersion -+ 10.5 -+ NSHumanReadableCopyright -+ Copyright © 2012 FreeDV. All rights reserved. -+ -+ NSPrincipalClass -+ NSApplication -+ -+ -\ No newline at end of file -Index: src/serialport.cpp -=================================================================== ---- src/serialport.cpp (revision 0) -+++ src/serialport.cpp (working copy) -@@ -0,0 +1,207 @@ -+//========================================================================== -+// Name: serialport.cpp -+// -+// Purpose: Serial port management. -+// Created: Dec. 28, 2012 -+// Authors: Mooneer Salem -+// -+// License: -+// -+// This program is free software; you can redistribute it and/or modify -+// it under the terms of the GNU General License version 2.1, -+// as published by the Free Software Foundation. This program is -+// distributed in the hope that it will be useful, but WITHOUT ANY -+// WARRANTY; without even the implied warranty of MERCHANTABILITY or -+// FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public -+// License for more details. -+// -+// You should have received a copy of the GNU General License -+// along with this program; if not, see . -+// -+//========================================================================== -+ -+#ifndef WIN32 -+#include -+#include -+#include -+#include -+#endif // !WIN32 -+ -+#include "serialport.h" -+ -+#define ERROR_CONDITION (-1) -+#ifdef WIN32 -+#define INVALID_FILE_DESCRIPTOR (INVALID_HANDLE_VALUE) -+#else -+#define INVALID_FILE_DESCRIPTOR (-1) -+#endif // WIN32 -+ -+SerialPort::SerialPort(const std::string &portName) -+ : _portName(portName) -+ , _fileDescriptor(INVALID_FILE_DESCRIPTOR) -+#ifdef WIN32 -+ , _rtsEnabled(false) -+ , _dtrEnabled(false) -+#endif // WIN32 -+{ -+ // No action here until open() is called. -+} -+ -+SerialPort::~SerialPort() -+{ -+ // Close serial port if needed. -+ if (isOpen()) -+ { -+ close(); -+ } -+} -+ -+#ifndef WIN32 -+static int posixGetModemControlBits(const int fileDescriptor) -+{ -+ int modemControlBits = 0; -+ -+ if (ioctl(fileDescriptor, TIOCMGET, &modemControlBits) == 0) -+ { -+ return modemControlBits; -+ } -+ else -+ { -+ return ERROR_CONDITION; -+ } -+} -+ -+static int posixSetModemControlBits(const int fileDescriptor, int modemControlBits) -+{ -+ if (ioctl(fileDescriptor, TIOCMSET, &modemControlBits) == 0) -+ { -+ return modemControlBits; -+ } -+ else -+ { -+ return ERROR_CONDITION; -+ } -+} -+#endif // !WIN32 -+ -+bool SerialPort::getRTS() const -+{ -+#ifdef WIN32 -+ // No way to get DTR/RTS directly from Windows, so we have to -+ // grab what the caller put in during a previous set*() call. -+ return _rtsEnabled; -+#else -+ int tmpbits = posixGetModemControlBits(_fileDescriptor); -+ if (tmpbits != ERROR_CONDITION) -+ { -+ return tmpbits & TIOCM_RTS; -+ } -+ else -+ { -+ return ERROR_CONDITION; -+ } -+#endif // WIN32 -+} -+ -+void SerialPort::setRTS(const bool newRTS) -+{ -+#ifdef WIN32 -+ if (newRTS) -+ { -+ EscapeCommFunction(_fileDescriptor, SETRTS); -+ } -+ else -+ { -+ EscapeCommFunction(_fileDescriptor, CLRRTS); -+ } -+ _rtsEnabled = newRTS; -+#else -+ int tmpbits = posixGetModemControlBits(_fileDescriptor); -+ if (tmpbits != ERROR_CONDITION) -+ { -+ if (newRTS) tmpbits |= TIOCM_RTS; -+ else tmpbits &= ~TIOCM_RTS; -+ posixSetModemControlBits(_fileDescriptor, tmpbits); -+ } -+#endif // WIN32 -+} -+ -+bool SerialPort::getDTR() const -+{ -+#ifdef WIN32 -+ // No way to get DTR/RTS directly from Windows, so we have to -+ // grab what the caller put in during a previous set*() call. -+ return _dtrEnabled; -+#else -+ int tmpbits = posixGetModemControlBits(_fileDescriptor); -+ if (tmpbits != ERROR_CONDITION) -+ { -+ return tmpbits & TIOCM_DTR; -+ } -+ else -+ { -+ return ERROR_CONDITION; -+ } -+#endif // WIN32 -+} -+ -+void SerialPort::setDTR(const bool newDTR) -+{ -+#ifdef WIN32 -+ if (newDTR) -+ { -+ EscapeCommFunction(_fileDescriptor, SETDTR); -+ } -+ else -+ { -+ EscapeCommFunction(_fileDescriptor, CLRDTR); -+ } -+ _dtrEnabled = newDTR; -+#else -+ int tmpbits = posixGetModemControlBits(_fileDescriptor); -+ if (tmpbits != ERROR_CONDITION) -+ { -+ if (newDTR) tmpbits |= TIOCM_DTR; -+ else tmpbits &= ~TIOCM_DTR; -+ posixSetModemControlBits(_fileDescriptor, tmpbits); -+ } -+#endif // WIN32 -+} -+ -+int SerialPort::open() -+{ -+#ifdef WIN32 -+ TCHAR portName[32]; -+ _stprintf_s(portName, sizeof(portName)/sizeof(TCHAR), _T("\\\\.\\%s"), _portName.c_str()); -+ -+ _fileDescriptor = CreateFile( -+ portName, -+ GENERIC_READ | GENERIC_WRITE, -+ 0, -+ 0, -+ OPEN_EXISTING, -+ FILE_FLAG_OVERLAPPED, -+ 0); -+#else -+ _fileDescriptor = ::open(_portName.c_str(), O_RDWR); -+#endif // WIN32 -+ -+ return (int)_fileDescriptor; -+} -+ -+int SerialPort::close() -+{ -+#ifdef WIN32 -+ int rv = CloseHandle(_fileDescriptor); -+#else -+ int rv = ::close(_fileDescriptor); -+#endif // WIN32 -+ -+ _fileDescriptor = INVALID_FILE_DESCRIPTOR; -+ return rv; -+} -+ -+bool SerialPort::isOpen() const -+{ -+ return _fileDescriptor != INVALID_FILE_DESCRIPTOR; -+} -\ No newline at end of file -Index: src/serialport.h -=================================================================== ---- src/serialport.h (revision 0) -+++ src/serialport.h (working copy) -@@ -0,0 +1,81 @@ -+//========================================================================== -+// Name: serialport.h -+// -+// Purpose: Serial port management. -+// Created: Dec. 28, 2012 -+// Authors: Mooneer Salem -+// -+// License: -+// -+// This program is free software; you can redistribute it and/or modify -+// it under the terms of the GNU General License version 2.1, -+// as published by the Free Software Foundation. This program is -+// distributed in the hope that it will be useful, but WITHOUT ANY -+// WARRANTY; without even the implied warranty of MERCHANTABILITY or -+// FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public -+// License for more details. -+// -+// You should have received a copy of the GNU General License -+// along with this program; if not, see . -+// -+//========================================================================== -+ -+#ifndef SERIAL_PORT_H -+#define SERIAL_PORT_H -+ -+#ifdef WIN32 -+#include -+#endif // WIN32 -+ -+#include -+ -+enum SerialPortParity -+{ -+ NONE, -+ EVEN, -+ ODD -+}; -+ -+// Quick and dirty serial port class that supports the minimum necessary to -+// do PTT (for now). Can be extended later (send/receive data for CAT control, -+// for example). -+class SerialPort -+{ -+public: -+ // portName is a path to the serial port, in one of the following formats: -+ // OSX: /dev/tty.* -+ // Linux: /dev/ttyS* -+ // Windows: COM*: -+ SerialPort(const std::string &portName); -+ virtual ~SerialPort(); -+ -+ bool getRTS() const; -+ void setRTS(const bool newRTS); -+ -+ bool getDTR() const; -+ void setDTR(const bool newDTR); -+ -+ int open(); -+ int close(); -+ -+ bool isOpen() const; -+ -+private: -+ const std::string _portName; -+ -+#ifdef WIN32 -+ HANDLE _fileDescriptor; -+ -+ bool _rtsEnabled; -+ bool _dtrEnabled; -+#else -+ int _fileDescriptor; -+#endif // WIN32 -+ -+ // Object should not be copied since there can be only one handle open -+ // per serial port. An attempt to use the copy constructor here, even -+ // implicitly, will result in a compile error due to the declaration below. -+ SerialPort(const SerialPort&); -+}; -+ -+#endif // SERIAL_PORT_H -\ No newline at end of file diff --git a/fdmdv2/freedv_osx_port.patch.gz b/fdmdv2/freedv_osx_port.patch.gz deleted file mode 100644 index 107a9d67..00000000 Binary files a/fdmdv2/freedv_osx_port.patch.gz and /dev/null differ diff --git a/fdmdv2/obsolete/README.Win32 b/fdmdv2/obsolete/README.Win32 new file mode 100644 index 00000000..3fc3f28e --- /dev/null +++ b/fdmdv2/obsolete/README.Win32 @@ -0,0 +1,73 @@ +README.Win32 +David Rowe 27 Oct 2012 + +Debugging Under Windows +----------------------- + +printfs don't appear until after the program finishes. wxLogDebug() +works but you need to run DebugView available from +http://www.sysinternals.com to capture the messages. + +Building fdmdv2 for Windows +--------------------------- + +This is how David R did it, Dave Witten used a different approach. +Many variations are possible. + +1. Install MinGW & the mysys shell + + pwd -W prints true Win32 directory + + I also installed emacs, "tortise svn", and DebugView + +2. "make install" for various packages below put DLLs in /usr/local/lib + "cd /usr/local/lib; pwd -W" to find the Win32 directory + add this to the Windows PATH (Control Panel - System - Advanced) + +3. WxWidgets: + download 2.9.4 tar ball + mkdir build-debug; cd build-debug + ./configure --with-msw + make && make install + +4. PortAudio: + download latest V19 + ./configure --enable-cxx + make && make install + +5. libsndfile: + download lastest source tar ball (not Win32 binaries) + ./configure && make && make install + +6. libsamplerate: + download latest source tar ball: + http://www.mega-nerd.com/SRC/libsamplerate-0.1.8.tar.gz(not Win32 binaries) + ./configure && make && make install + +7. hamlib + + I couldn't get this to compile from source, so used the pre-built Win32 + DLLs: + + Download https://downloads.sourceforge.net/project/hamlib/hamlib/1.2.15.3/hamlib-win32-1.2.15.3.zip + Open hamlib-win32-1.2.15.3.zip with a GUI archive tool + Copy hamlib/include/* to /usr/local/include + Copy hamlib/bin/hamlib*.dll to /usr/local/lib + Copy hamlib/lib/gcc to /usr/local/lib + +8. sox (used for Filter - EQ) + + $ wget http://sourceforge.net/projects/sox/files/sox/14.4.0/sox-14.4.0.tar.gz + $ tar xvzf sox-14.4.0.tar.gz + $ ./configure --enable-shared=no --without-id3tag --without-png --disable-gomp --with-oggvorbis=no --with-oss=no --with-flac=no --disable-dl-sndfile --with-waveaudio=no + $ make && make install + + I couldn't find an install command line that worked, so manually copied the libs and include files. + +9. Codec 2 + $ wget https://freetel.svn.sourceforge.net/svnroot/freetel/codec2 + $ cd codec2 + $ ./configure && make + +10. svn co fdmdv2 + cd fdmdv2/src + make -f Makefile.Win32 + diff --git a/fdmdv2/obsolete/README.linux b/fdmdv2/obsolete/README.linux new file mode 100644 index 00000000..37cf9e15 --- /dev/null +++ b/fdmdv2/obsolete/README.linux @@ -0,0 +1,75 @@ +README.linux for fdmdv2 +Created by David Rowe +Oct 14 2012 + +BUILDING FreeDV for Linux +========================= + +1. FreeDV was developed on Ubuntu 9.1 and 10.04 systems. It has been + tested on OSS (Ubuntu 9.1) and ALSA (Ubuntu 10.04) sound systems. + +2. A typical ALSA installation (e.g., Ubuntu 10.04) first install the + following packages: + + $ sudo apt-get install libgtk2.0-dev libsamplerate0-dev libsndfile1-dev libasound2-dev + +3. If you would like to use OSS rather than ALSA do not install libasound2-dev. + +4. Makefile.linux will download the libraries you need, configure and + build them, then build FreeDV. Makefile.linux will _not_ install + any of the libraries built for FreeDV on your system. + + cd fdmdv2/src + make -f Makefile.linux + +Linux usage Notes +================= + +1. Config is stored in ~/.FreeDV, rm this file to restore defaults + + +TODO +==== + +[ ] Stopping Waterfall + + When Stop pressed lower 25% of Waterfall isn't erased + +[ ] release clean up + [ ] remove/comment out debug printfs + [ ] help about with URL (hyperlink?) to web site & donations + [ ] buffer sizes, maybe make a config number + [ ] tool tip help for audio config dialog + +IDEAS +===== + +1. Tabbed page option that draws block diagram of system and draws + line between sound devices and modem blocks. Lines move depending + if we are in sync, audio pass thru etc + +2. Way to I/O to/from files on each "port", for example: + + monitor input speech or feed input speech + +3. (Thomas Kocourek n4fwd) Context sensitive help. + +4. Look at how people hook up and use program, stop common mistakes or assumptions + +5. Squelch implementation. Effect of SNR bouncing around might be to + have audio cut in and out. We might need a better way of + triggering mute, such as amplitude of pilots, or smoother SNR. Or + hysteresis in Squelch. + +User Manual Notes +----------------- + +Count 5 seconds when removing/installing USB sound devices before +pressing refesh. + +Describe what a valid one card and two card configuration looks like. +Draw a block diagram, image of set up dialog. + +What a good scatter diagram/spectrum looks like + +Setting up in audio loopback + +Right click drag tabs, new window, tab order diff --git a/fdmdv2/obsolete/README.osx b/fdmdv2/obsolete/README.osx new file mode 100644 index 00000000..1e3eeca9 --- /dev/null +++ b/fdmdv2/obsolete/README.osx @@ -0,0 +1,801 @@ +README.osx +David Witten 29 Dec 2012 +========================== + +Received today: + +Mooneer Salem +Re: [digitalvoice] Re: Mac build for fdmdv2 + +Yep. I'm attaching a patch to this email with the modifications I had to make to get FreeDV to build on OSX. I develop on 10.8.2, but it should work with 10.5-10.7 I think. Unfortunately it's 32-bit only due to a dependency on Carbon, which Apple deprecated. + +Directions (requires MacPorts to build dependencies): + +1. Apply patch. +2. $ sudo port install wxWidgets30 +aui +universal portaudio +universal sox +universal libsndfile +universal libsamplerate +universal +3. $ cd src && make -f Makefile.osx + +This will create a folder named FreeDV.app in the src folder (shows up as a single file in Finder) that when double-clicked, starts the application. I'll probably need to figure out how to include dependencies in the .app folder so that people won't need to install MacPorts just to run FreeDV ;) + +The patch also includes the change away from libctb. It compiles on POSIX compliant platforms, but I'm not sure about the Windows implementation due to not having a Windows development setup here at home. + +... +-Mooneer KG6AOV + +Mooneer's patch is included as /freedv_osx_port.patch.gz in the SVN checkout or just snip & run the following -- +Patch: + +Index: src/Makefile.linux +=================================================================== +--- src/Makefile.linux (revision 1152) ++++ src/Makefile.linux (working copy) +@@ -36,12 +36,6 @@ + SOX_INC=-I$(SOX)/src/ + SOX_LIB=$(SOX)/src/.libs/libsox.a + +-# CTB --------------------------------------------------- +- +-CTB=libctb-0.16 +-CTB_INC=-I$(CTB)/include +-CTB_LIB=$(CTB)/lib/libctb-0.16.a +- + # if libasound is available, PortAudio will be using it, so we will + # need to add it to freedv link line. To test if it is present, we try + # to link a small C program with -lasound +@@ -50,8 +44,8 @@ + + # FreeDV ------------------------------------------------ + +-CPP_FLAGS = -D_NO_AUTOTOOLS_ $(WX_CPPFLAGS) $(PORTAUDIO_INC) $(CODEC2_INC) $(SOX_INC) $(CTB_INC) -I. -g -Wall -O3 -DSVN_REVISION=\"$(SVN_REVISION)\" +-FREEDV_LIBS = $(WX_LIBS) $(PORTAUDIO_LIB) $(CODEC2_LIB) $(SOX_LIB) $(CTB_LIB) -lm -lpthread -lsndfile -lsamplerate $(LIBASOUND) ++CPP_FLAGS = -D_NO_AUTOTOOLS_ $(WX_CPPFLAGS) $(PORTAUDIO_INC) $(CODEC2_INC) $(SOX_INC) -I. -g -Wall -O3 -DSVN_REVISION=\"$(SVN_REVISION)\" ++FREEDV_LIBS = $(WX_LIBS) $(PORTAUDIO_LIB) $(CODEC2_LIB) $(SOX_LIB) -lm -lpthread -lsndfile -lsamplerate $(LIBASOUND) + + OBJS = topFrame.o \ + fdmdv2_main.o \ +@@ -65,11 +59,12 @@ + dlg_comports.o \ + dlg_filter.o \ + varicode.o \ +-sox_biquad.o ++sox_biquad.o \ ++serialport.o + +-HDRS = ../version.h dlg_about.h dlg_audiooptions.h dlg_comports.h dlg_filter.h fdmdv2_main.h fdmdv2_defines.h fdmdv2_plot.h fdmdv2_plot_scalar.h fdmdv2_plot_waterfall_linux.h fdmdv2_plot_scatter.h fdmdv2_plot_spectrum.h fdmdv2_pa_wrapper.h topFrame.h varicode.h ++HDRS = ../version.h dlg_about.h dlg_audiooptions.h dlg_comports.h dlg_filter.h fdmdv2_main.h fdmdv2_defines.h fdmdv2_plot.h fdmdv2_plot_scalar.h fdmdv2_plot_waterfall_linux.h fdmdv2_plot_scatter.h fdmdv2_plot_spectrum.h fdmdv2_pa_wrapper.h topFrame.h varicode.h serialport.h + +-all: $(WXWIDGETS)/.built $(PORTAUDIO)/.built $(CODEC2)/.built $(SOX)/.built $(CTB)/.built freedv ++all: $(WXWIDGETS)/.built $(PORTAUDIO)/.built $(CODEC2)/.built $(SOX)/.built freedv + + freedv: $(OBJS) + g++ -o freedv $(OBJS) $(CPP_FLAGS) $(FREEDV_LIBS) +@@ -81,7 +76,7 @@ + rm -f *.o fdmdv2 + + clean-lib: +- rm -Rf $(WXWIDGETS) $(PORTAUDIO) $(CODEC2) $(SOX) $(CTB) ++ rm -Rf $(WXWIDGETS) $(PORTAUDIO) $(CODEC2) $(SOX) + rm -f *.o fdmdv2 + + # wxWidgets --------------------------------------------------------- +@@ -126,14 +121,3 @@ + + $(SOX).tar.bz2: + wget http://downloads.sourceforge.net/project/sox/sox/14.4.0/sox-14.4.0.tar.bz2 +- +-# CTB ------------------------------------------------------------- +- +-$(CTB)/.built: $(CTB) +- cd $(CTB)/build && make && touch ../.built +- +-$(CTB) : $(CTB).tar.gz +- tar xvzf $(CTB).tar.gz +- +-$(CTB).tar.gz: +- wget https://iftools.com/download/ctb/0.16/libctb-0.16.tar.gz +Index: src/Makefile.linux.dmw +=================================================================== +--- src/Makefile.linux.dmw (revision 1152) ++++ src/Makefile.linux.dmw (working copy) +@@ -36,7 +36,8 @@ + dlg_comports.o \ + dlg_filter.o \ + varicode.o \ +-sox_biquad.o ++sox_biquad.o \ ++serialport.o + + + all: fdmdv2 +@@ -44,7 +45,7 @@ + fdmdv2: $(OBJS) fdmdv2_main.h + g++ -o fdmdv2 $(OBJS) $(CPP_FLAGS) $(LIBS) + +-fdmdv2_main.h: ../version.h fdmdv2_defines.h fdmdv2_plot.h fdmdv2_plot_scalar.h fdmdv2_plot_waterfall_linux.h fdmdv2_plot_scatter.h fdmdv2_plot_spectrum.h fdmdv2_pa_wrapper.h dlg_about.h dlg_audiooptions.h dlg_comports.h dlg_options.h ++fdmdv2_main.h: ../version.h fdmdv2_defines.h fdmdv2_plot.h fdmdv2_plot_scalar.h fdmdv2_plot_waterfall_linux.h fdmdv2_plot_scatter.h fdmdv2_plot_spectrum.h fdmdv2_pa_wrapper.h dlg_about.h dlg_audiooptions.h dlg_comports.h dlg_options.h serialport.h + + %.o: %.cpp + g++ $(CPP_FLAGS) -c $< -o $@ +Index: src/Makefile.osx +=================================================================== +--- src/Makefile.osx (revision 0) ++++ src/Makefile.osx (working copy) +@@ -0,0 +1,76 @@ ++# src/Makefile.osx ++# Mooneer Salem 28 Dec 2012 ++# ++# Makefile for OSX - assumes MacPorts for some libraries and builds the others locally. ++# Note: dependencies must be installed with universal binary support due to the use of Carbon by portaudio and others. ++# (Carbon is officially deprecated by Apple and does not have 64-bit support.) ++# ++# $ sudo port install wxWidgets30 +aui +universal portaudio +universal sox +universal libsndfile +universal libsamplerate +universal ++# $ make -f Makefile.osx ++ ++SVN_REVISION=$(shell svnversion) ++MACPORTS_FOLDER=/opt/local ++ ++# Codec 2 ----------------------------------------------- ++ ++CODEC2=codec2 ++CODEC2_INC=-I$(CODEC2)/src ++CODEC2_LIB=$(CODEC2)/src/.libs/libcodec2.a ++ ++# FreeDV ------------------------------------------------ ++ ++CPP_FLAGS = -D_NO_AUTOTOOLS_ -I$(MACPORTS_FOLDER)/include -arch i386 `wx-config --cppflags` $(CODEC2_INC) -I. -g -Wall -O3 -DSVN_REVISION=\"$(SVN_REVISION)\" ++FREEDV_LIBS = -arch i386 -L$(MACPORTS_FOLDER)/lib `wx-config --libs all` -lportaudio $(CODEC2_LIB) -lm -lpthread -lsndfile -lsamplerate -lsox ++ ++OBJS = topFrame.o \ ++fdmdv2_main.o \ ++fdmdv2_plot.o \ ++fdmdv2_plot_scalar.o \ ++fdmdv2_plot_scatter.o \ ++fdmdv2_plot_spectrum.o \ ++fdmdv2_plot_waterfall_linux.o \ ++fdmdv2_pa_wrapper.o \ ++dlg_audiooptions.o \ ++dlg_comports.o \ ++dlg_filter.o \ ++varicode.o \ ++sox_biquad.o \ ++serialport.o ++ ++HDRS = ../version.h dlg_about.h dlg_audiooptions.h dlg_comports.h dlg_filter.h fdmdv2_main.h fdmdv2_defines.h fdmdv2_plot.h fdmdv2_plot_scalar.h fdmdv2_plot_waterfall_linux.h fdmdv2_plot_scatter.h fdmdv2_plot_spectrum.h fdmdv2_pa_wrapper.h topFrame.h varicode.h serialport.h ++ ++all: $(CODEC2)/.built freedv FreeDV.app ++ ++freedv: $(OBJS) ++ g++ -o freedv $(OBJS) $(CPP_FLAGS) $(FREEDV_LIBS) ++ ++FreeDV.app: info.plist freedv ++ -mkdir -p $@/Contents/MacOS ++ -mkdir -p $@/Contents/Resources/English.lproj ++ cp info.plist $@/Contents ++ echo -n "APPL????" > $@/Contents/PkgInfo ++ cp freedv $@/Contents/MacOS/FreeDV ++ ++%.o: %.cpp $(HDRS) ++ g++ $(CPP_FLAGS) -c $< -o $@ ++ ++sox_biquad.o: sox_biquad.c ++ gcc $(CPP_FLAGS) -c sox_biquad.c -o sox_biquad.o ++ ++varicode.o: varicode.c ++ cc $(CPP_FLAGS) -c varicode.c -o varicode.o ++ ++clean: ++ rm -f *.o fdmdv2 ++ rm -rf FreeDV.app/ ++ ++clean-lib: clean ++ rm -Rf $(CODEC2) ++ ++# Codec 2 ---------------------------------------------------------- ++ ++$(CODEC2)/.built: $(CODEC2) ++ cd $(CODEC2) && CPPFLAGS="-arch i386" LDFLAGS="-arch i386" ./configure && make && touch .built ++ ++$(CODEC2): ++ svn co https://freetel.svn.sourceforge.net/svnroot/freetel/codec2 +\ No newline at end of file +Index: src/Makefile.win32 +=================================================================== +--- src/Makefile.win32 (revision 1152) ++++ src/Makefile.win32 (working copy) +@@ -16,7 +16,7 @@ + CODEC2_LIB=$(CODEC2_PATH)/src/.libs/libcodec2.a + + CPP_FLAGS = -D_NO_AUTOTOOLS_ -I$(INCLUDE_PATH) $(WX_CPPFLAGS) -I$(CODEC2_INC) -I../extern/include -g -Wall -DSVN_REVISION=\"$(SVN_REVISION)\" +-LIBS = $(WX_LIBS) $(CODEC2_LIB) -lm -lportaudiocpp -lportaudio -lpthread -lsndfile -lsamplerate -lctb-0.16 -lsox ++LIBS = $(WX_LIBS) $(CODEC2_LIB) -lm -lportaudiocpp -lportaudio -lpthread -lsndfile -lsamplerate -lsox + + OBJS = topFrame.o \ + fdmdv2_main.o \ +@@ -30,9 +30,10 @@ + dlg_comports.o \ + dlg_filter.o \ + varicode.o \ +-sox_biquad.o ++sox_biquad.o \ ++serialport.o + +-HDRS = ../version.h dlg_audiooptions.h dlg_comports.h dlg_filter.h fdmdv2_main.h fdmdv2_defines.h fdmdv2_plot.h fdmdv2_plot_scalar.h fdmdv2_plot_waterfall_linux.h fdmdv2_plot_scatter.h fdmdv2_plot_spectrum.h fdmdv2_pa_wrapper.h topFrame.h dlg_audiooptions.h topFrame.h varicode.h ++HDRS = ../version.h dlg_audiooptions.h dlg_comports.h dlg_filter.h fdmdv2_main.h fdmdv2_defines.h fdmdv2_plot.h fdmdv2_plot_scalar.h fdmdv2_plot_waterfall_linux.h fdmdv2_plot_scatter.h fdmdv2_plot_spectrum.h fdmdv2_pa_wrapper.h topFrame.h dlg_audiooptions.h topFrame.h varicode.h serialport.h + + all: freedv + +Index: src/Makefile.win32.dmw +=================================================================== +--- src/Makefile.win32.dmw (revision 1152) ++++ src/Makefile.win32.dmw (working copy) +@@ -40,10 +40,11 @@ + dlg_comports.o \ + dlg_filter.o \ + varicode.o \ +-sox_biquad.o ++sox_biquad.o \ ++serialport.o + + +-HDRS = ../version.h fdmdv2_main.h fdmdv2_defines.h fdmdv2_plot.h fdmdv2_plot_scalar.h fdmdv2_plot_waterfall_linux.h fdmdv2_plot_scatter.h fdmdv2_plot_spectrum.h fdmdv2_pa_wrapper.h topFrame.h dlg_audiooptions.h ++HDRS = ../version.h fdmdv2_main.h fdmdv2_defines.h fdmdv2_plot.h fdmdv2_plot_scalar.h fdmdv2_plot_waterfall_linux.h fdmdv2_plot_scatter.h fdmdv2_plot_spectrum.h fdmdv2_pa_wrapper.h topFrame.h dlg_audiooptions.h serialport.h + + all: freedv + +Index: src/dlg_comports.cpp +=================================================================== +--- src/dlg_comports.cpp (revision 1152) ++++ src/dlg_comports.cpp (working copy) +@@ -21,7 +21,6 @@ + //========================================================================== + #include "dlg_comports.h" + #include "fdmdv2_main.h" +-#include + #include + + //-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=--=-=-=-= +@@ -62,8 +61,9 @@ + wxArrayString m_listCtrlPortsArr; + m_listCtrlPorts = new wxListBox(this, wxID_ANY, wxDefaultPosition, wxSize(-1,45), m_listCtrlPortsArr, wxLB_SINGLE | wxLB_SORT); + staticBoxSizer31->Add(m_listCtrlPorts, 1, wxALIGN_CENTER, 0); +-#endif +-#ifdef __WXGTK__ ++#else ++/*#endif ++#ifdef __WXGTK__*/ + wxBoxSizer* bSizer83; + bSizer83 = new wxBoxSizer(wxHORIZONTAL); + +Index: src/fdmdv2_main.cpp +=================================================================== +--- src/fdmdv2_main.cpp (revision 1152) ++++ src/fdmdv2_main.cpp (working copy) +@@ -163,7 +163,6 @@ + { + m_zoom = 1.; + m_serialPort = NULL; +- m_device = NULL; + + tools->AppendSeparator(); + wxMenuItem* m_menuItemToolsConfigDelete; +@@ -857,22 +856,22 @@ + { + if(wxGetApp().m_boolRTSPos) // RTS asserted HIGH + { +- m_serialPort->SetLineState(ctb::LinestateRts); ++ m_serialPort->setRTS(true); + } + else // RTS asserted LOW + { +- m_serialPort->ClrLineState(ctb::LinestateRts); ++ m_serialPort->setRTS(false); + } + } + else // Use DTR + { + if(wxGetApp().m_boolDTRPos) // DTR asserted HIGH + { +- m_serialPort->SetLineState(ctb::LinestateDtr); ++ m_serialPort->setDTR(true); + } + else // DTR asserted LOW + { +- m_serialPort->ClrLineState(ctb::LinestateDtr); ++ m_serialPort->setDTR(false); + } + } + } +@@ -882,22 +881,22 @@ + { + if(wxGetApp().m_boolRTSPos) // RTS cleared LOW + { +- m_serialPort->ClrLineState(ctb::LinestateRts); ++ m_serialPort->setRTS(false); + } + else // RTS cleared HIGH + { +- m_serialPort->SetLineState(ctb::LinestateRts); ++ m_serialPort->setRTS(true); + } + } + else // Use DTR + { + if(wxGetApp().m_boolDTRPos) // DTR cleared LOW + { +- m_serialPort->ClrLineState(ctb::LinestateDtr); ++ m_serialPort->setDTR(false); + } + else // DTR cleared HIGH + { +- m_serialPort->SetLineState(ctb::LinestateDtr); ++ m_serialPort->setDTR(true); + } + } + } +@@ -1351,13 +1350,15 @@ + { + wxUnusedVar(event); + int rv = 0; +- int iLineState = 0; ++ bool rtsEnabled = false; ++ bool dtrEnabled = false; + //bool bPTTEnabled = m_btnTogPTT->IsEnabled(); + //bool bPTTState = m_btnTogPTT->GetValue(); + + if(m_serialPort != NULL) + { +- int iLineState = m_serialPort->GetLineState(); ++ rtsEnabled = m_serialPort->getRTS(); ++ dtrEnabled = m_serialPort->getDTR(); + CloseSerialPort(); + } + ComPortsDlg *dlg = new ComPortsDlg(NULL); +@@ -1372,21 +1373,21 @@ + SetupSerialPort(); + if(m_serialPort != NULL) + { +- if(iLineState | ctb::LinestateRts) ++ if(rtsEnabled) + { +- m_serialPort->SetLineState(ctb::LinestateRts); ++ m_serialPort->setRTS(true); + } + else + { +- m_serialPort->ClrLineState(ctb::LinestateRts); ++ m_serialPort->setRTS(false); + } +- if(iLineState | ctb::LinestateDtr) ++ if(dtrEnabled) + { +- m_serialPort->SetLineState(ctb::LinestateDtr); ++ m_serialPort->setDTR(true); + } + else + { +- m_serialPort->ClrLineState(ctb::LinestateDtr); ++ m_serialPort->setDTR(false); + } + // m_btnTogPTT->Enable(bPTTEnabled); + // m_btnTogPTT->SetValue(bPTTState); +@@ -2631,26 +2632,25 @@ + if(!wxGetApp().m_strRigCtrlPort.IsEmpty()) + { + wxString protocol = wxGetApp().m_strRigCtrlDatabits + wxGetApp().m_strRigCtrlParity + wxGetApp().m_strRigCtrlStopbits; +- m_serialPort = new ctb::SerialPort(); +- if(m_serialPort->Open(wxGetApp().m_strRigCtrlPort.c_str(), baudrate, protocol.c_str(), ctb::SerialPort::NoFlowControl ) >= 0 ) ++ m_serialPort = new SerialPort(wxGetApp().m_strRigCtrlPort.ToAscii().data()); ++ if(m_serialPort->open(/*baudrate, protocol.c_str()*/ ) >= 0 ) + { +- m_device = m_serialPort; + // always start with PTT cleared + if(wxGetApp().m_boolRTSPos) // RTS cleared LOW + { +- m_serialPort->ClrLineState(ctb::LinestateRts); ++ m_serialPort->setRTS(false); + } + else // RTS cleared HIGH + { +- m_serialPort->SetLineState(ctb::LinestateRts); ++ m_serialPort->setRTS(true); + } + if(wxGetApp().m_boolDTRPos) // DTR cleared LOW + { +- m_serialPort->ClrLineState(ctb::LinestateDtr); ++ m_serialPort->setDTR(false); + } + else // DTR cleared HIGH + { +- m_serialPort->SetLineState(ctb::LinestateDtr); ++ m_serialPort->setDTR(true); + } + //m_btnTogPTT->Enable(true); + m_btnTogPTT->SetValue(false); +@@ -2658,7 +2658,6 @@ + else + { + m_serialPort = NULL; +- m_device = NULL; + //m_btnTogPTT->Disable(); + } + } +@@ -2675,11 +2674,10 @@ + //---------------------------------------------------------------- + void MainFrame::CloseSerialPort(void) + { +- if((m_serialPort != NULL) && m_serialPort->IsOpen()) ++ if((m_serialPort != NULL) && m_serialPort->isOpen()) + { +- m_serialPort->Close(); ++ m_serialPort->close(); + m_serialPort = NULL; +- m_device = NULL; + //m_btnTogPTT->SetLabel(wxT("PTT")); + //m_btnTogPTT->Enable(false); + } +Index: src/fdmdv2_main.h +=================================================================== +--- src/fdmdv2_main.h (revision 1152) ++++ src/fdmdv2_main.h (working copy) +@@ -55,10 +55,7 @@ + #include "codec2_fdmdv.h" + #include "codec2_fifo.h" + +-#include "ctb-0.16/ctb.h" +-#include "ctb-0.16/portscan.h" +-#include "ctb-0.16/serportx.h" +-#include "ctb-0.16/serport.h" ++#include "serialport.h" + + #include "topFrame.h" + #include "dlg_comports.h" +@@ -353,8 +350,7 @@ + + protected: + +- ctb::IOBase* m_device; +- ctb::SerialPort* m_serialPort; ++ SerialPort* m_serialPort; + + void setsnrBeta(bool snrSlow); + +Index: src/info.plist +=================================================================== +--- src/info.plist (revision 0) ++++ src/info.plist (working copy) +@@ -0,0 +1,34 @@ ++ ++ ++ ++ ++ CFBundleDevelopmentRegion ++ en ++ CFBundleExecutable ++ freedv ++ CFBundleIconFile ++ ++ CFBundleIdentifier ++ org.freedv.freedv ++ CFBundleInfoDictionaryVersion ++ 6.0 ++ CFBundleName ++ FreeDV ++ CFBundlePackageType ++ APPL ++ CFBundleShortVersionString ++ 1.0 ++ CFBundleSignature ++ ???? ++ CFBundleVersion ++ 1 ++ LSMinimumSystemVersion ++ 10.5 ++ NSHumanReadableCopyright ++ Copyright © 2012 FreeDV. All rights reserved. ++ ++ NSPrincipalClass ++ NSApplication ++ ++ +\ No newline at end of file +Index: src/serialport.cpp +=================================================================== +--- src/serialport.cpp (revision 0) ++++ src/serialport.cpp (working copy) +@@ -0,0 +1,207 @@ ++//========================================================================== ++// Name: serialport.cpp ++// ++// Purpose: Serial port management. ++// Created: Dec. 28, 2012 ++// Authors: Mooneer Salem ++// ++// License: ++// ++// This program is free software; you can redistribute it and/or modify ++// it under the terms of the GNU General License version 2.1, ++// as published by the Free Software Foundation. This program is ++// distributed in the hope that it will be useful, but WITHOUT ANY ++// WARRANTY; without even the implied warranty of MERCHANTABILITY or ++// FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public ++// License for more details. ++// ++// You should have received a copy of the GNU General License ++// along with this program; if not, see . ++// ++//========================================================================== ++ ++#ifndef WIN32 ++#include ++#include ++#include ++#include ++#endif // !WIN32 ++ ++#include "serialport.h" ++ ++#define ERROR_CONDITION (-1) ++#ifdef WIN32 ++#define INVALID_FILE_DESCRIPTOR (INVALID_HANDLE_VALUE) ++#else ++#define INVALID_FILE_DESCRIPTOR (-1) ++#endif // WIN32 ++ ++SerialPort::SerialPort(const std::string &portName) ++ : _portName(portName) ++ , _fileDescriptor(INVALID_FILE_DESCRIPTOR) ++#ifdef WIN32 ++ , _rtsEnabled(false) ++ , _dtrEnabled(false) ++#endif // WIN32 ++{ ++ // No action here until open() is called. ++} ++ ++SerialPort::~SerialPort() ++{ ++ // Close serial port if needed. ++ if (isOpen()) ++ { ++ close(); ++ } ++} ++ ++#ifndef WIN32 ++static int posixGetModemControlBits(const int fileDescriptor) ++{ ++ int modemControlBits = 0; ++ ++ if (ioctl(fileDescriptor, TIOCMGET, &modemControlBits) == 0) ++ { ++ return modemControlBits; ++ } ++ else ++ { ++ return ERROR_CONDITION; ++ } ++} ++ ++static int posixSetModemControlBits(const int fileDescriptor, int modemControlBits) ++{ ++ if (ioctl(fileDescriptor, TIOCMSET, &modemControlBits) == 0) ++ { ++ return modemControlBits; ++ } ++ else ++ { ++ return ERROR_CONDITION; ++ } ++} ++#endif // !WIN32 ++ ++bool SerialPort::getRTS() const ++{ ++#ifdef WIN32 ++ // No way to get DTR/RTS directly from Windows, so we have to ++ // grab what the caller put in during a previous set*() call. ++ return _rtsEnabled; ++#else ++ int tmpbits = posixGetModemControlBits(_fileDescriptor); ++ if (tmpbits != ERROR_CONDITION) ++ { ++ return tmpbits & TIOCM_RTS; ++ } ++ else ++ { ++ return ERROR_CONDITION; ++ } ++#endif // WIN32 ++} ++ ++void SerialPort::setRTS(const bool newRTS) ++{ ++#ifdef WIN32 ++ if (newRTS) ++ { ++ EscapeCommFunction(_fileDescriptor, SETRTS); ++ } ++ else ++ { ++ EscapeCommFunction(_fileDescriptor, CLRRTS); ++ } ++ _rtsEnabled = newRTS; ++#else ++ int tmpbits = posixGetModemControlBits(_fileDescriptor); ++ if (tmpbits != ERROR_CONDITION) ++ { ++ if (newRTS) tmpbits |= TIOCM_RTS; ++ else tmpbits &= ~TIOCM_RTS; ++ posixSetModemControlBits(_fileDescriptor, tmpbits); ++ } ++#endif // WIN32 ++} ++ ++bool SerialPort::getDTR() const ++{ ++#ifdef WIN32 ++ // No way to get DTR/RTS directly from Windows, so we have to ++ // grab what the caller put in during a previous set*() call. ++ return _dtrEnabled; ++#else ++ int tmpbits = posixGetModemControlBits(_fileDescriptor); ++ if (tmpbits != ERROR_CONDITION) ++ { ++ return tmpbits & TIOCM_DTR; ++ } ++ else ++ { ++ return ERROR_CONDITION; ++ } ++#endif // WIN32 ++} ++ ++void SerialPort::setDTR(const bool newDTR) ++{ ++#ifdef WIN32 ++ if (newDTR) ++ { ++ EscapeCommFunction(_fileDescriptor, SETDTR); ++ } ++ else ++ { ++ EscapeCommFunction(_fileDescriptor, CLRDTR); ++ } ++ _dtrEnabled = newDTR; ++#else ++ int tmpbits = posixGetModemControlBits(_fileDescriptor); ++ if (tmpbits != ERROR_CONDITION) ++ { ++ if (newDTR) tmpbits |= TIOCM_DTR; ++ else tmpbits &= ~TIOCM_DTR; ++ posixSetModemControlBits(_fileDescriptor, tmpbits); ++ } ++#endif // WIN32 ++} ++ ++int SerialPort::open() ++{ ++#ifdef WIN32 ++ TCHAR portName[32]; ++ _stprintf_s(portName, sizeof(portName)/sizeof(TCHAR), _T("\\\\.\\%s"), _portName.c_str()); ++ ++ _fileDescriptor = CreateFile( ++ portName, ++ GENERIC_READ | GENERIC_WRITE, ++ 0, ++ 0, ++ OPEN_EXISTING, ++ FILE_FLAG_OVERLAPPED, ++ 0); ++#else ++ _fileDescriptor = ::open(_portName.c_str(), O_RDWR); ++#endif // WIN32 ++ ++ return (int)_fileDescriptor; ++} ++ ++int SerialPort::close() ++{ ++#ifdef WIN32 ++ int rv = CloseHandle(_fileDescriptor); ++#else ++ int rv = ::close(_fileDescriptor); ++#endif // WIN32 ++ ++ _fileDescriptor = INVALID_FILE_DESCRIPTOR; ++ return rv; ++} ++ ++bool SerialPort::isOpen() const ++{ ++ return _fileDescriptor != INVALID_FILE_DESCRIPTOR; ++} +\ No newline at end of file +Index: src/serialport.h +=================================================================== +--- src/serialport.h (revision 0) ++++ src/serialport.h (working copy) +@@ -0,0 +1,81 @@ ++//========================================================================== ++// Name: serialport.h ++// ++// Purpose: Serial port management. ++// Created: Dec. 28, 2012 ++// Authors: Mooneer Salem ++// ++// License: ++// ++// This program is free software; you can redistribute it and/or modify ++// it under the terms of the GNU General License version 2.1, ++// as published by the Free Software Foundation. This program is ++// distributed in the hope that it will be useful, but WITHOUT ANY ++// WARRANTY; without even the implied warranty of MERCHANTABILITY or ++// FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public ++// License for more details. ++// ++// You should have received a copy of the GNU General License ++// along with this program; if not, see . ++// ++//========================================================================== ++ ++#ifndef SERIAL_PORT_H ++#define SERIAL_PORT_H ++ ++#ifdef WIN32 ++#include ++#endif // WIN32 ++ ++#include ++ ++enum SerialPortParity ++{ ++ NONE, ++ EVEN, ++ ODD ++}; ++ ++// Quick and dirty serial port class that supports the minimum necessary to ++// do PTT (for now). Can be extended later (send/receive data for CAT control, ++// for example). ++class SerialPort ++{ ++public: ++ // portName is a path to the serial port, in one of the following formats: ++ // OSX: /dev/tty.* ++ // Linux: /dev/ttyS* ++ // Windows: COM*: ++ SerialPort(const std::string &portName); ++ virtual ~SerialPort(); ++ ++ bool getRTS() const; ++ void setRTS(const bool newRTS); ++ ++ bool getDTR() const; ++ void setDTR(const bool newDTR); ++ ++ int open(); ++ int close(); ++ ++ bool isOpen() const; ++ ++private: ++ const std::string _portName; ++ ++#ifdef WIN32 ++ HANDLE _fileDescriptor; ++ ++ bool _rtsEnabled; ++ bool _dtrEnabled; ++#else ++ int _fileDescriptor; ++#endif // WIN32 ++ ++ // Object should not be copied since there can be only one handle open ++ // per serial port. An attempt to use the copy constructor here, even ++ // implicitly, will result in a compile error due to the declaration below. ++ SerialPort(const SerialPort&); ++}; ++ ++#endif // SERIAL_PORT_H +\ No newline at end of file diff --git a/fdmdv2/obsolete/freedv_osx_port.patch.gz b/fdmdv2/obsolete/freedv_osx_port.patch.gz new file mode 100644 index 00000000..107a9d67 Binary files /dev/null and b/fdmdv2/obsolete/freedv_osx_port.patch.gz differ