Changes for liblsl 1.13 * fix: avoid an infinite loop if no port can be bound to (Tristan Stenner, discovered by Maximilian Kraus) * add: unit tests to test basic operations on CI systems (Tristan Stenner, Matthew Grivich) * fix: Fix for the sometimes appearing "no clock offsets found"-bug * add: the path to the lsl_api.cfg can now be specified via the environment variable LSLAPICFG * fix: updates to the included Boost, fixing Android compilation and reducing the number of warnings (Tristan Stenner) * fix: patch Boost.Thread to avoid latency spikes on Windows (Tristan Stenner) * add: lsl_stream_info_matches_query() to test a resolved stream against a query (Tristan Stenner) * add: lsl_library_info() function returning some information about the dll/so file (Tristan Stenner) * add: Raspberry Pi cross compilation support (Chadwick Boulay) * fix: Boost.Serialization objects are only defined to fix compilation on ARM (Tristan Stenner) * change: added move-semantics to most C++ API classes (Tristan Stenner) * change: move error handling from C API to C++ implementation (Tristan Stenner) * fix: Fix possible string stream corruption on 32bit platforms (Tristan Stenner) * change: add some Continuous Integration and packaging configuration (Tristan Stenner) * change: remove the option to build liblsl against system Boost (Tristan Stenner) * fix: prevent undefined shift (Tristan Stenner) * fix: several fixes to export macros (Tristan Stenner) * change: lots of improvements on OS X (Chadwick Boulay) * change: a lot of work on making Qt work on OS X (Chadwick Boulay) * change: override default timestamps with lsl timestamps (Zechari Tempesta) * change: Switched the build system to CMake (Tristan Stenner, Chadwick Boulay, David Medine, Matthew Grivich) * fix: Fix for ipv6 link-local addresses on Linux. Previously would get a "Invalid argument" error. (Matthew Grivich) * fix: fix several memory handling issues (Matthew Grivich) * fix: Added an optional time_correction prototype to return uncertainty and remote_time as well as offset. (Matthew Grivich) * fix: merged memory leak fixes (thanks to xloem) Changes for liblsl 1.12 * Added support for iOS. (Matthew Grivich; de3f1318) * changed constructor of lsl::xml_element to have default (David Medine; fd6a87b7) * Add support for gcc 5 / MinGW (BorisMansencal) * Fixed warning in GCC 4.9: 'lsl::stream_info' has a field 'lsl::stream_info::obj' whose type uses the anonymous namespace 1> class stream_info { (Matthew Grivich; 072563f5) * Added optional time-stamp post-processing to the LSL inlet (Christian Kothe; d29ebde8) * fixed broken relative paths (Giso Grimm; 1396ce6e) * automatic version number extraction (Giso Grimm; a3e912ad) * version number extraction and new location (Giso Grimm; 56f210a2) Changes for liblsl 1.11 * Updated C/C++ examples to conform to XDF meta-data spec (per Luca Mussi). (Christian Kothe; 61d83de6) * pugixml 1.0->1.7 . This fixes a build error in OS X. Also tested in Win 10 binaries with no apparent problems. (Chadwick Boulay; 067e1330) * several changes to the build system and include files (Matthew Grivich, Chadwick Boulay) * Fixed remaining references to old documentation. (Kyu Crane; ecf9cd09) * Some fixes and updates here and there. (Christian Kothe; 65fa64e2) * Fixed bug in push_chunk_multiplexed (Christian Kothe; 89339d08) * Fixed regression in samples_available() (Christian Kothe; 5d0659da) * Delete ._stream_info_impl.cpp (Christian Kothe; 92bfd87c) * Updated consumer_queue::pop_sample() (Christian Kothe; 22662cb7) * Fixed consumer_queue::pop_sample() to respect the timeout. (Steven Boswell; 678995dd) * Fixed some memory leaks in the C# interop layer. (Steven Boswell; 06684ec6) * Now multicasting can specify the local IP address to bind to. (Steven Boswell; 04a397e4) * attempting to strip binaries (David Medine; bc216cc2) Changes for liblsl 1.10 [Here a lot of changes happened that aren't included yet] Changes for distribution 1.0.10 (library version 0.91) * fix: in the C++ interface, the template pull_chunk() that fills a vector of time stamps did not clear this vector initially (no recompile necessary, just a header fix) * change: simplified the rule for deciding which chunk size to use when both the outlet and the inlet have a preference: now the inlet's preference overrides the one of the outlet, if present. Changes for distribution 1.0.18 (library version 0.92) * fix: rebuild Linux and Mac libraries with most boost symbols stripped off (reducing the conflict of name clashes during dynamic linking, e.g. in MATLAB). * Adding support for constructing inlets with unresolved stream_info's (if they are fully specified at construction). Changes for distribution 1.0.19 (library version 0.93) * removed the entire boost static library dependency across Win/Linux/Mac (instead now using the relevant .cpp files directly). This simplifies the build process and reduces the symbol pollution on Linux/Mac. * Documented compatibility with pugixml in C API. * Documented the timeout in resolve_all better in C API. Changes for distribution 1.0.20 (library version 1.00) -- internal code review. * Added a continuous_resolver class that allows to resolve streams in the background. * Added ability to query receive buffer size. * Extended the error reporting in the C API (some functions now return error conditions). * Added some extra argument checking in the stream_info constructor (negative channel count / sample rate, empty name). * Upgraded from boost 1.47.0 to boost 1.50.0, and from portable_archive 4.2 to portable_archive 5.0. * Improved code documentation and slightly refactored some of the library code for better readability / comprehensibility. - renamed some internal variables - enhanced documentation - switched largely to boost.chrono based timing instead of boost.date_time (new standard) - following boost synchronization guidelines more strictly (preferentially using the simplest primitive that gets the job done) - made the stream_inlet more tolerant to protocol errors at the sender side (threads do not exit but try to reconnect until successful). - using incomplete struct types in the LSL C API to prevent accidental type confusions. - simplified (and robustified) the data and info fetching threads in the inlet. - reduced the amount of data copying when pushing samples into the library - the IPv4 and IPv6 stacks in the outlet now run on two separate threads to improve robustness in case an OS implements a protocol badly - improved efficiency of stream_info accessors (now return const references instead of copies) - now using boost.container.flat_set in the send_buffer instead of std.set (more efficient) * Fixed a bug that prevented the use of LSL_FOREVER in the C API under 32-bit Mac (and possibly 32-bit Linux, too). * Fixed some potential hangups in the inlet when the connection gets lost irrecoverably (affected info(), time_correction() and pull_sample()). * Fixed several missing exception handlers for the C API wrappers (increasing robustness in case of bad errors). * Fixed a minor bug when resolving streams from a list of known peers (used the wrong time constant). * Fixed 2 cases where strings were allocated incorrectly in the liblsl C API (lsl_get_xml() and lsl_pull_sample_str()). * Fixed a bug where -0.0 would be transmitted as +0.0 (fixed in the portable_archive upgrade). * Fixed several destructors that could have thrown exceptions and thus caused application termination. * Fixed a bug that prevented the use of minimum buffer sizes that were larger than the lower capacity bound (then 4096). Changes for distribution 1.0.21 (library version 1.02) -- after extensive stress testing. * Added a stress-testing app under testing/StressTest * Relaxed the timing of reconnect attempts by the inlet a bit. * Fixed the handling of the chunk size when passed in at construction of an inlet or outlet (oversight) * Fixed a rare abstract function call or access violation when cancelling resolve attempts * Fixed a relatively rare access violation in the TCP server shutdown * Fixed a relatively rare access violation in the stream outlet shutdown * Fixed an occasional "not a socket" error in the TCP server shutdown * Fixed handling of some unusual parameter settings in the inlet (buffer size=0) Library version 1.03 * Added support for Windows XP (required more tolerance in case of missing IPv6 support) * Fixed a case where an inlet could spam an outlet with rapid reconnect requests * Rebuilt against a sufficiently old Linux to run out-of-the-box for most distributions Library version 1.03.1 * Made the resolver tolerant w.r.t. invalid hostnames in the KnownPeers config variable Library version 1.03.2 * Moved a definition inside the C++ header file to make SWIG happy (which is needed for certain features in the Python wrapper to be enabled) * pylsl should now work out of the box on all Windows platforms and all recent Python versions Library Version 1.03.3 * renamed internal use of boost namespace into lslboost to avoid link-time symbol conflicts * Added the ability to push/pull length-delimeted string values in the C API (lsl_push_sample_buf / lsl_pull_sample_buf) in addition to 0-terminated * Added an experimental Java wrapper Library Version 1.04 * Added a preprocessor switch to toggle between using the system-supplied boost or the shrink-wrapped version (in external/lslboost) * Added documentation on how to get an updated boost distribution included with liblsl (and added a script to automate that) Library Version 1.05 * Suppressed a spurious warning about non-matching query ids Library Version 1.10 (mostly throughput optimizations) * Added the ability to allocate ports outside the default port range once if it is exhausted (configurable, enabled by default). * Replaced consumer_queue implementation by a lock-free single-producer/single-consumer queue * Minor speed improvements in data_receiver: Removed a slow check in pull_sample() and calling local_clock() only every k'th iteration in data_thread(). * Changed the data layout of the sample class for faster allocation/deallocation. * Speeded up the assignment/retrieval functions of the sample class (uses memcpy where appropriate). * Added a factory class for fast allocation/deallocation of samples. * Implemented a faster data transmission protocol (1.10) for samples, as alternative to the baseline protocol (1.00). * Implemented a new version of protocol negotiation between tcp_server and data_receiver, using an HTTP-like request/response style. * Fixed some potential rare hang bugs during shutdown of inlets and outlets (deadlocks/livelocks) * Added the ability to transmit multiplexed chunks to the C and C++ APIs * Minor improvements to documentation * Added clean cross-platform Python and C# wrappers (pylsl.py and LSL.cs)