 1.3.1 -- 02 Apr 2015
----------------------

* New functions Async::TcpClient::idIdle and Async::TcpConnection::idle



 1.3.0 -- 02 Aug 2014
----------------------

* Fixed Async::AudioDeviceUDP so that audio output is paced instead of writing
  as fast as possible.

* Added a NULL audio encoder and decoder that can be used when one does not
  want audio to be sent at all.

* Added the ability to bind TCP client and server sockets to a specific
  IP-address.

* Serial port settings are now not restored unless they have been explicitly
  changed using the Serial::setParams function.

* The serial port TX/RX buffers are now only flushed if explicitly specified
  in the open call.

* The IpAddress class now have an input stream operator.

* Bugfix in Async::{AudioSelector,DnsLookup,AudioSplitter}: Important code had
  been placed within assert statements. By default CMake set compiler options
  that remove all assert statements when compiling in release mode. This
  caused some things to stop working when compiling for release.

* Now possible to change the buffer size of a TCP connection using
  TcpConnection::setRecvBufLen.



 1.2.1 -- 30 Jun 2014
----------------------

* Some sound hardware cause an Alsa failure which SvxLink previously handled
  as a fatal error (assert) and aborted the application. A warning is now
  printed instead and the sound device is closed and reopened.

* Support added for Opus version < 1.0.

* Bugfix for Async::Config::getValue. The std::ws operator set the fail bit on
  FreeBSD at end of string. This caused some config options to not be read
  correctly.



 1.2.0 -- 01 Dec 2013
----------------------

* The Async::AudioRecorder class now have some added features. In addition to
  the hard filesize limit there now is a soft limit at which the file will be
  closed when the audio source call flushSamples. A signal will be emitted
  when either of the limits are hit. Also, begin and end timestamps now are
  available.

* The Async::AudioFilter setOutputGain method now take a dB value as argument.

* Added support for the Opus audio codec.

* New class Async::Exec for executing external programs.



 1.1.1 -- 29 Jul 2013
----------------------

* Fixed some include directives for Async::CppApplication.

* The Async::TcpClient class now always do a name lookup before trying to
  connect. Previously, when the old lookup was cached, IP addresses that
  changed over time was not handled.



 1.1.0 -- 06 Jun 2013
----------------------

* New class AtTimer to set a timer that expires at the specified time of day.

* Now using clock_gettime instead of gettimeofday to get the time for timers
  since the former provides monotonically increasing time which the
  latter don't.

* Async::DnsLookup: New method resultsAreReady with which it is possible
  to check if the DNS lookup is done or if it's still pending.

* Fixed a buffer overflow bug in the AudioInterpolator.

* Async::TcpClient: Added two new constructors, one which take an IpAddress
  object instead of a host name which is good if you already have the IP
  address. The other only take an optional buffer size. The hostname or ip
  address is given later to the new connect method.

* There now is an overloaded Config::getValue function which can take a
  container, like an std::vector, to read in a number of space separated values
  from a configuration variable.



 1.0.0 -- 08 Mar 2013
-----------------------

* Moved from sigc++ version 1.2 to version 2.
  Patch contributed by Felix/WU8K.

* Now possible to bind a UDP socket to a given interface.

* New "audio device" which read and write audio from a UDP socket.
  This can for example be used to stream audio to/from GNU Radio.

* Now possible to set config variables in memory using the Config::setValue
  function. It is not possible to write the change back to the config
  file though.

* New class FileReader to read a file in non blocking mode. Contributed
  by Steve / DH1DM.



 0.18.2 -- 27 Nov 2011
-----------------------

* Bugfix in Async::AudioDeviceAlsa: There were problems when reopening
  the audio device in another mode, like when going from WR to RDWR.
  In some cases the audio output would hang.



 0.18.1 -- 05 Nov 2011
-----------------------

* Bugfix in Async::AudioDelayLine: Calling "clear" while a "mute" was in
  effect would cancel the mute.

* New methods IpAddress::isEmpty() and IpAddress::clear().

* Bugfix in the OSS code: The audio device would not open when not using stdout
  as the logging output due to an obscure bug in the OSS code. When not using
  stdout, the audio device would open with fd 0, which was interpreted as and
  error.



 0.18.0 -- 14 May 2011
-----------------------

* The Async::AudioRecorder can now auto detect the file format from the
  filename extension.

* Improved audio device handling which makes it easier to add support for
  different kinds of audio subsystems.

* Added support for the ALSA audio subsystem.

* Bugfix in AudioFifo: The clear method did not work properly. Under some
  circumstances, allSamplesFlushed was not called which caused problems
  upstream.

* Bugfix in AudioDelayLine: Mute and clear did not do the right thing
  with the buffer pointer so it didn't behave properly.

* The AudioDelayLine now fade in and out when muting and clearing to
  avoid creating pops in the audio stream.



 0.17.0 -- 26 Apr 2009
-----------------------

* The Async internal sample rate is now configurable by a compile time
  define (INTERNAL_SAMPLE_RATE in makefile.cfg).

* Added the Async::AudioStreamStateDetector contributed by Steve / DH1DM.

* Implemented an audio codec framework that is meant to be used when
  streaming audio over a network.

* Bugfixes in Async::AudioPacer: Using a prebuf size of zero millisecods
  did not work. DH1DM: Fixed a buffer calculation error. Gaps could be
  introduced in some situations.

* Moved the audio recorder class from the SvxLink server application
  to Async (Async::AudioRecorder).

* The AudioRecorder can now write WAV files.

* Bugfix in AudioFilter: Filters was not properly created under som locales,
  like german (de_DE).



 0.16.1 -- 30 Jul 2008
-----------------------

* Bugfix and rewrite of the sound card code (AudioIO and AudioDevice classes).

* Bugfix and rewrite of the Async::AudioPacer class.

* Bugfix in Async::Timer: At destruction of a timer, a check was not made
  to see if it really existed.

* Bugfix in Async::CppDnsLookupWorker: The DNS code had a bug which showed
  itself under Ubuntu. A local variable was called "h_addr" which is defined
  in netdb.h as "h_addr_list[0]".



 0.16.0 -- 18 May 2008
-----------------------

* Lots of changes to adapt everything to the audio pipe infrastructure.

* Decreased buffers to improve audio latency.

* New method: AudioSplitter::enableSink make it possible to enable/disable
  branches in the splitter.

* Cleanup: Removed obsolete files and fixed files with wrong names.

* New method AudioFifo::enableBuffering: Use this method to enable/disable
  the buffering in the fifo. When disabled, this will effectively just make
  it a passthrough.

* Now possible to open left/right stereo channels as separate mono
  channels.

* Now possible to set sample rate, block size, channels and buffer size for
  a sound card.

* Made Async::CppDnsLookupWorker thread safe.



 0.15.0 -- 02 Jan 2008
-----------------------

* Now compile under CentOS 5.0, Fedora 8, Ubuntu 7.10 and Gentoo.

* Inserting repeated audio fragments if incoming audio pase is too slow.
  Good when using two sound cards with slightly different sampling rate.

* Fixes for 64 bit platforms.



 0.14.0 -- 15 Apr 2007
-----------------------

* Async::Config: Now possible to use the "open" method more than once to
  read multiple configuration files.

* It is now possible to read the sampling rate the audio device is using
  method Async::AudioIO::sampleRate.

* It is now possible to set the gain to use on an audio stream.

* New method: TcpConnection::isConnected.

* Now using float instead of short int to represent samples. This make it
  easier to apply audio processing on them.

* Created a new audio-lib where all the audio related classes have been put.

* A lot of new audio handling classes have been added.

* Now using libsigc++ version 1.2 instead of the old and outdated 1.0.

* ASYNC_AUDIO_NOTRIGGER=1 is now the default.



 0.13.0 -- 02 Dec 2005
-----------------------

* Merged Serial::InPin and Serial::OutPin to a new typedef Serial::Pin.
  Also added PIN_NONE.

* Bugfix in Config: It was not possible to specify an empty configuration
  variable using "".

* Fixed the makefile problem where it was not possible to compile SvxLink
  when a previous "make install" had been done. It tried to link against
  the installed libraries instead of the ones just compiled.



 0.12.1 -- 09 Oct 2005
-----------------------

* Bugfix in Async::TcpClient: In some situations sockets could be leaked
  and functions could be called twice instead of once. This may have caused
  crashes.



 0.12.0 -- 14 Aug 2005
-----------------------

* Bugfixes for multi open of sound device.

* New method in AudioIO to clear all samples in the buffer.

* Bugfix: Handling flushing when already flushed correctly.

* Bugfix: CPU could go up to 100% when writing audio to the
  sound card.

* DNS lookups are now asynchronous (well, threaded anyway)
  so no more blocking DNS lookup calls.

* Start and end of sound playback is now amplitude shaped
  to not create noise at end of playback.

* Bugfix: Forgot to clean up everything when the
  Async::TcpClient::disconnect method was called.

* Added an unequality operator to the Async::IpAddress class.



 0.11.0 -- 25 Mar 2005
-----------------------

* Added some code to AsyncTcpServer to broadcast data to connected
  clients. Contribution by SM0LCB / Ulf.

* Now possible to list all tags in a config section.

* The Serial class can now handle multiple users per port.

* Bugfix: The AudioIO class did not handle mutiple users correctly.



 0.10.0 -- 26 Sep 2004
----------------------

* Now the AudioIO object is really checking for full duplex capablility.

* Bugfix: The application would crash if the AudioIO object were deleted
  and then recreated.

* New class "Serial" for serial port usage.

* Bugfix: The DnsLookup class did not delete its DnsLookupWorker object
  and other memory handling was a mess as well. Thank you "valgrind"
  for helping me find this!



 0.9.0 -- 27 May 2004
----------------------

* Separate reader and writer in the same application can now open the audio
  device at the same time. The device is automatically set to full duplex
  operation. Previously, only one AudioIO object could have the device opened
  at a time.

* Added an environment variable that make it possible to disable the use
  of the trigger functionality when opening an audio device. This was necessary
  to make Alsa OSS emulation work. Set ASYNC_AUDIO_NOTRIGGER=1 to disable the
  use of the trigger functionality.

* Decreased the audio buffers in the audio device to make audio playback
  more responsive.



 0.8.0 -- 04 Apr 2004
----------------------

* Audio handling rewritten to handle a separate reader and writer within
  the same application.

* Split the async lib into core, cpp, qt and demo parts.

* Earlier log entries for the async library can be found in ../qtel/ChangeLog.

