libcaer package from libcaer repo

libcaer

Package Summary

Tags No category tags.
Version 1.0.0
License BSD-2
Build type CMAKE
Use RECOMMENDED

Repository Summary

Checkout URI https://github.com/ros-event-camera/libcaer.git
VCS Type git
VCS Version ros_event_camera
Last Updated 2024-01-08
Dev Status DEVELOPED
CI status No Continuous Integration
Released RELEASED
Tags No category tags.
Contributing Help Wanted (0)
Good First Issues (0)
Pull Requests to Review (0)

Package Description

library for event based sensors

Additional Links

No additional links.

Maintainers

  • Bernd Pfrommer

Authors

No additional authors.
WINDOWS BUILD INSTRUCTIONS
==========================
We support building libcaer on the Windows platform by using the MinGW32/64 compilers
and the MSYS2 environment. The result is a static and a dynamic DLL, as well as the
appropriate header files, so that libcaer can be used in MinGW itself.

Visual Studio and the MSVC compiler are not supported out-of-the-box right now, to use
a DLL compiled by MinGW additional steps are necessary: http://www.mingw.org/wiki/MSVC_and_MinGW_DLLs

Following are detailed step-by-step instructions to install the required
components and get everything building, we use MinGW64 here for the
64-bit Windows platform, if you want to build for 32-bit Windows, just replace all
mentions of 'x86_64' with 'i686'. Whenever you want to install a package, use
the MSYS2 shell, while to build code, use the MinGW32/64 shells!

1) Get MSYS2 from https://msys2.github.io/ and download the appropriate installer.
Follow the instructions to install the system and update its packages. During the
system package upgrade, ignore any heap mismatch errors, and follow what the last
warning tells you to do (close the shell). The base system upgrade seems to break
the Start Menu shortcuts, so from now on start MSYS2 by going to its directory
'C:\msys64\' and double-clicking on 'msys2_shell.cmd'.

2) Install MinGW GCC: pacman -S mingw-w64-x86_64-gcc

3) Install Make/CMake: pacman -S make mingw-w64-x86_64-cmake

4) Install pkg-config: pacman -S mingw-w64-x86_64-pkg-config

5) Install libusb: pacman -S mingw-w64-x86_64-libusb

6) Place the libcaer source in a location easily accessible to MSYS2. We usually
put the source code into 'C:\msys64\home\libcaer\' and use TortoiseGit
(https://tortoisegit.org/) or git from the MSYS2 shell (pacman -S git) to get it.

7) Switch to the MinGW build shell, double-click on 'mingw64.exe' in 'C:\msys64\'.

8) Switch to the libcaer checkout directory: cd /home/libcaer/

9) Configure, run CMake: cmake -G "MSYS Makefiles" -DCMAKE_INSTALL_PREFIX=/mingw64 .

10) Build, run Make: make

11) Install: make install

Congratulations, you now have a working libcaer on Windows! The output from that
last 'make install' will have told you exactly where all the DLLs and header
files are located on the file-system. You can now try building one of the
examples in the examples/ directory to verify functionality.


CHANGELOG
Release 3.3.15 - 07.03.2023

BUG FIXES
- eDVS: fix device discovery. Thanks to Benjamin Ward-Cherrier.
- Windows: control MSVC build with BUILD_CONFIG_VCPKG flag.
- Devices: fix compiler warnings.
- Removed obsolete DAVIS_RPI device.


Release 3.3.14 - 25.03.2022

NEW FEATURES
- Full native MSVC/Windows build support.

BUG FIXES
- davis_cvgui example: fix incorrect biasing and APS frame settings.
- USB: fix firmware version check for DVXplorer Mini.


Release 3.3.13 - 25.02.2022

NEW FEATURES
- DVXplorer (Mini): add control of readout timing parameters, readout restart.


Release 3.3.12 - 12.11.2021

BUG FIXES
- DVXplorer Mini: fix inverted polarity.
- dvx_bw_test example: fix length of time interval for
  bandwidth estimation.
- Fedora/Ubuntu: fix packaging, use at least GCC-10 to compile.


Release 3.3.11 - 16.07.2021

NEW FEATURES
- Native MacOS ARM (M1) builds, Big Sur compatibility.
- Ubuntu 21.04 Hirsute support.
- Fedora 34 support.
- Ubuntu 16.04 Xenial is no longer supported!
- Cameras: added support for new DVXplorer Mini camera model.


Release 3.3.10 - 16.04.2021

BUG FIXES
- USB: when serial number cannot be determined, use all bits from
  USB bus-number/dev-address to construct the fake name (issue #123).
- Examples Device Discovery: add support for DVXplorer and EVK.
  Serial Number in Device Discovery can only be used if the
  device could be opened correctly (deviceErrorOpen == false).


Release 3.3.9 - 21.12.2020

BUG FIXES
- DVXplorer: fix mapping of events when dual-binning is
  enabled (issue #119).


Release 3.3.8 - 15.09.2020

NEW FEATURES
- Linux Udev: simplify udev rules into one file (issue #114).

BUG FIXES
- Samsung EVK: allow multiple EVKs to be selected by a temporary
  serial number generated from USB bus addresses (issue #113).
- Samsung EVK: more robust parser for 231Y chip data (issue #115).


Release 3.3.7 - 07.05.2020

BUG FIXES
- Samsung EVK: implement full 64bit timestamps (issue #99).


Release 3.3.6 - 18.04.2020

NEW FEATURES
- MacOS X: set default CMake destination to /usr/local on Apple systems.
- Ubuntu: support for release 20.04 LTS 'Focal Fossa'.

BUG FIXES
- USB: do not claim device interface on discovery, not needed for
  simple info requests on control ep0 (issue dv-gui#291).
- Samsung EVK: enable USB transfer timeout (set to 500us), so that
  even on low event rates, data keeps coming in with low latency.


Release 3.3.5 - 12.03.2020

INCOMPATIBLE CHANGES
- DVXplorer (Lite): firmware update to version 8.
  Use Flashy to update as per documentation:
  https://inivation.gitlab.io/dv/dv-docs/docs/update-firmware/

BUG FIXES
- USB: improve detection of device serial number.
- USB: optimize setting number/size of USB transfers.


Release 3.3.4 - 04.03.2020

INCOMPATIBLE CHANGES
- DVXplorer: firmware update to version 7.
  Use Flashy to update as per documentation:
  https://inivation.gitlab.io/dv/dv-docs/docs/update-firmware/

NEW FEATURES
- Cameras: added support for DVXplorer Lite camera.
- USB: added support for libusb logging.


Release 3.3.3 - 01.02.2020

BUG FIXES
- Samsung EVK: fix possible non-monotonic timestamp at startup.
- DVXplorer: fix crop start/end address inversion.


Release 3.3.2 - 24.01.2020

BUG FIXES
- DVXplorer/DVS132S: fix IMU accel/gyro scale detection.
- Samsung EVK: fix non-monotonic timestamps when a reference timestamp
  event is lost due to high USB traffic.


Release 3.3.1 - 17.01.2020

NEW FEATURES
- Support for new DVXplorer and Samsung EVK devices added.


Release 3.3.0 - 24.12.2019

NEW FEATURES
- Support for mini-eDVS serial device added to eDVS code.

BUG FIXES
- eDVS: fix inverted event polarity.


Release 3.2.2 - 15.07.2019

BUG FIXES
- CMake: fix compatibility with older pre-6.0 GCCs (issue #93).
- CMake: drop required version to 3.10 (Ubuntu Bionic).
- USB devices: better error messages on failure to open a device,
  better distinction of generic 'any-camera' case and specific
  USB ports or serial numbers.
- eDVS: fix strncpy() compiler warning, ensure serial number is
  always NULL terminated.
- DAVIS: fix APS frame color interpolation for color cameras
  when ROI is enabled (issue #94).


Release 3.2.0 - 20.05.2019

INCOMPATIBLE CHANGES
- DAVIS firmware and logic update: DAVIS FX3 firmware v6 and logic v18.1.
  Fixes a possible USB data corruption bug in some rare cases, especially
  on MacOS X systems. Improves quality of APS frames.
- All devices: dataStart() stops all producers and resets all buffers,
  ensuring no stale data remains. Producers must be enabled only after
  having called dataStart(), it not using the START_PRODUCERS feature.
- CMake: version 3.12.0 or newer of CMake is now required.
- Ubuntu: dropped support for Trusty 14.04.
- DVS128: renamed logicVersion to firmwareVersion in dvs128_info struct.
- Python bindings: removed experimental Python SWIG bindings.
  Please use https://github.com/duguyue100/pyaer/ instead (issue #65).
- CMake: installed caer-base.cmake dropped its argument. Use standard
  CMake facilities to select the needed C/C++ standard version.
- CMake: caer-base.cmake does not provide the following variables anymore:
  - CM_BUILD_DIR (not useful)
  - CM_SHARE_DIR (already known when accessing the file)
  - CAER_C_THREAD_LIBS (renamed to SYSTEM_THREAD_LIBS)
  - CAER_MODULES_DIR (not part of libcaer)
- CMake: renamed CAER_LOCAL_INCDIRS/CAER_LOCAL_LIBDIRS/CAER_LOCAL_PREFIX
  to USER_LOCAL_INCDIRS/USER_LOCAL_LIBDIRS/USER_LOCAL_PREFIX.
- Events: removed unused event types: Config, Ear, Matrix4x4,
  Point1D, Point2D, Point3D, Point4D and Sample (issue #85).

NEW FEATURES
- Devices: added support for the DVS132S test chip in the C/C++ API.
- CMake: added UDEV_INSTALL switch to disable udev rules installation (issue #82).
- CMake: search for and support OpenCV 4 (issues #83, #90).
- GCC/CMake: add more compiler warnings.
- C++ ringbuffer.hpp: add comparison operators.
- Examples: compile and install examples with -DEXAMPLES_INSTALL=1.
- frame_utils.h: added caerFrameUtilsPixelColor() function (issue #89).
- Device discovery: firmwareVersion is always defined for USB devices
  during device discovery. SerialPortName and SerialBaudRate are always
  defined for eDVS devices (issue #88).

BUG FIXES
- CMake: ensure LIBCAER_HAVE_SERIALDEV and LIBCAER_HAVE_OPENCV defines
  in libcaer.h are always properly defined to be 0 or 1.
- device_discovery.c example: fix compilation with new struct davis_info.
- Examples: fix incorrect defines.


Release 3.1.0 - 27.11.2018

INCOMPATIBLE CHANGES
- DAVIS: require firmware version 5 and logic version 18. Fixes issues with
  IMU Run Controls, fixes corrupt data in DAVIS BLUE 346, enables IMU on
  DAVIS RED 346.
- Logging: caerLogVAFull() API has been simplified, the two file descriptor
  arguments have been removed, use the proper caerLogFileDescriptorsSet()
  API to set them when needed.

NEW FEATURES
- Logging: added caerLogCallbackSet() and caerLogCallbackGet() functions
  to set/get a global callback function to be executed on every caerLog()
  logging call, the log message and its size are passed to the callback.

BUG FIXES
- C++ API frame.hpp: fix demosaic(), set number of (valid) events in
  resulting packet correctly. Don't log errors if operation cannot
  be performed, just copy over unchanged pixel data.
  Also only operate on valid events for demosaic() and contrast().
- DAVIS IMU: temperature readings on InvenSense 6050 were off by +1.53°C.
- CMake: fix linking on Windows.
- Ubuntu Packaging: build with correct GCC version on Ubuntu 14.04 Trusty.
- Logging: performance improvements; move expensive check (TLS) to
  last position, ensure log-level is checked first in custom loggers.
- Fix various compiler warnings.


Release 3.0.0 - 23.10.2018

INCOMPATIBLE CHANGES
- frame_utils.h: caerFrameUtilsDemosaic() and caerFrameUtilsContrast()
  functions have different signatures to allow for more flexibility in
  where frames to be modified are sourced and stored. Also the type
  enums changed to add Bayer->Gray conversion options.

- davis.h: support for new logic version 16:
 - changed, slightly more efficient data encoding (IMU, APS).
 - cleaned up device configuration, removed lots of unused debug options.
 - changed APS FrameDelay to FrameInterval, to allow for setting time
   between frames and thus control the frame rate directly.
 - new hardware filter options for DVS: Background Activity, Refractory
   Period, Skip Events, Polarity Suppress/Flatten, Region of Interest (ROI)
   and single Pixel Filtering.
 - full support for new iniVation devices: DAVIS346 Blue, DAVIS346 Red
   and DAVIS346 Red Color.

This represents a new major release version, as it breaks the API
for DAVIS devices: the available configuration options (#defines in
davis.h) heavily change; the struct caer_davis_info and the
caerDavisROIConfigure() function also change incompatibly.
Please ensure all applications targeting DAVIS are recompiled!

NEW FEATURES
- C++ EventPackets: new function getHeaderPointerForCOutput() to get
  the underlying C EventPacket pointer and ensure that memory ownership
  is transferred to it, and not left with the C++ EventPacket.
- FrameEventPackets: new caerFrameEventPacketAllocateNumPixels() function
  to allocate based on total number of pixels instead of X/Y lengths.
- davis.h: added new DAVIS_CONFIG_APS_FRAME_MODE configuration option.
- davis.h: added enums for easier IMU option handling (caer_davis_imu_types,
  caer_davis_imu_invensense_accel_scale, caer_davis_imu_invensense_gyro_scale).
- CMake: automatically set CMAKE_INSTALL_PREFIX to /usr if nothing
  was specified by user on Unix/Linux, this avoids installs to /usr/local
  that often lead to the libraries not being found correctly.
- CMake: support for the ccache compiler cache added.
- CMake: install udev rules on Unix/Linux, to allow access to iniVation
  devices. Default rules chmod 0666 the devices, using -DUDEV_SELINUX=1
  installs a SELinux-enabled version for systems using TAG 'uaccess'.
- Ubuntu Packaging: libcaer is now split in two packages: libcaer and
  libcaer-dev. It is now built using debhelper, and the static library
  version is now also installed by libcaer-dev.
- Fedora Packaging: libcaer is now split in three packages: libacer,
  libcaer-devel and libcaer-static. The static version is in the latter.
- examples/davis_text.cpp: added new example for writing data to a text file.

BUG FIXES
- Packaging: cmake dependency bumped to 2.8.12 in Ubuntu/Fedora packages.
- src/usb_utils.c: fixed firmware/logic update message to be clearer.
- src/container_generation.h: clearer message on dropped event packets.


Release 2.5.2 - 25.09.2018
INCOMPATIBLE CHANGES
- CMake: raised minimum CMake dependency to version 2.8.12, some
  variables we use are only defined starting with this version.
  It also corresponds to the version present in the oldest distribution we
  support: Ubuntu 14.04 Trusty.

NEW FEATURES
- CMake: added CAER_LOCAL_INCDIRS/CAER_LOCAL_LIBDIRS/CAER_LOCAL_PREFIX
  variables to enable easier cross-compilation setups.
- CMake: added CMake configuration files, so that CMake may find the library
  using its own package detection system, in addition to the existing pkg-config
  based detection. Thanks to Felix Schwitzer (see issue #72 for more details).
- devices/davis.h: added caerBiasCoarseFineFromCurrent() and caerBiasCoarseFineToCurrent()
  functions to convert between coarse-fine bias values and the current they
  represent (in picoAmpere). Also available in the C++ interface (issue #40).
- filters/dvs_noise.h: added statistics on number of filtered events separated
  by ON/OFF polarity. Added caerFilterDVSNoiseStatsApply() function to only
  gather statistics and not modify the given polarity event packet (read-only
  mode). Also available in the C++ interface.

BUG FIXES
- src/usb_utils.c: check for exact firmware and logic versions.
- events/packetContainer.h: fix sizes used in caerEventPacketContainerCopyAllEvents()
  and caerEventPacketContainerCopyValidEvents() to allocate new containers.


Release 2.5.0 - 17.07.2018
INCOMPATIBLE CHANGES
- davis.h: removed support for stereo microphones, this was never used in any
  released devices, only for internal experiments on a limited prototype run.
- Events: event packet allocation functions are now in the various headers,
  making it possible to create, use and destroy event packets and events by
  just including the headers, without having to link to the full library.
  CAER_EVENTS_HEADER_ONLY needs to be set before inclusion for this to fully
  work, else there is a dependency on caerLog(), which is still in the library.
  This is very useful for tools or network receivers. A re-compile of any
  programs using these functions is required to avoid runtime linking errors.
- CMake: cleanup linked libraries, libm and librt are not part of the
  default dependencies anymore, they need to be added manually to programs
  that actually use them. Same goes for thread support, which is now only
  exported as the 'CAER_C_THREAD_LIBS' CMake variable but not automatically
  included anywhere.

NEW FEATURES
- Device Discovery: added capability of finding any accessible supported
  devices on a system, getting information on them, and then opening them.
  New header 'devices/device_discover.h' with functions caerDeviceDiscover()
  and caerDeviceDiscoverOpen(), example provided in 'examples/device_discovery.c'.
  C++ interface available in 'devices/device_discover.hpp', namespace is
  'libcaer::devices::discover'.
- Error reporting: both caerDeviceOpen() and caerDeviceOpenSerial() now
  set 'errno' on failure to provide more precise reasons for the failure,
  error codes are available in the enum 'caer_error_codes'.
- log.h: new functions caerLogDisable(true/false) to turn off all logging
  for a region of code (per-thread), and caerLogDisabled() to check current
  status of logging. C++ interface available in 'libcaer::log'.
- C++ packetContainer.hpp: support construction of a new packet container
  based on a C-style caerEventPacketContainer, with optional memory
  ownership take-over for the contained packets.
- C++ utils.hpp: libcaer::events::utils::makeShared/Unique now support the
  Matrix 4x4 event type too.
- C++ frame.hpp: new define LIBCAER_FRAMECPP_OPENCV_INSTALLED to enable
  special getOpenCVMat() support independently of libcaer itself having
  support for OpenCV.
- events/common.h: add new functions caerEventPacketGetDataSizeEvents()
  and caerEventPacketGetSizeEvents() to get size of data part of an
  event packet, disregarding capacity.
- Examples: added 'davis_simple_2cam.c' example for a two camera setup.
- device.h: CAER_SUPPORTED_DEVICES_NUMBER define is now public.
- eDVS: added 'serialPortName' and 'serialBaudRate' members to its info
  structure, contents are OS-specific.
- eDVS: analyze startup message to confirm the presence of an eDVS device.
- eDSV: flush buffers on open to avoid possible garbage data from previous
  open attempts to interfere with eDVS detection.
- USB: check both firmware and logic version always and notify users of
  needed upgrades for both at the same time; this avoids multiple notify
  and upgrade cycles if both change quickly or the user hasn't upgraded
  in a long time.
- filters/dvs_noise.h: new filter module to reduce noise from the DVS
  output, integrates a hot pixel filter (with learning), a background-
  activity filter and a refractory period filter. C++ interface available.
  New example 'davis_cvgui_filters.cpp' shows usage.
- devices/davis.h: new define DAVIS_CONFIG_DVS_FILTER_PIXEL_AUTO_TRAIN to
  automatically discover abnormally active pixels (hot-pixels) in the camera
  output and then filter them at the hardware level (FPGA/CPLD). This only
  works on newer camera that support the hardware pixel filtering, it does
  nothing on older systems and just returns 'false' on get/set.
- devices/davis.h: support new DAVIS346 with InvenSense MPU 9250, new IMU
  options via defines DAVIS_CONFIG_IMU_GYRO_DLPF and DAVIS_CONFIG_IMU_ACCEL_DLPF.
- CMake: new flag ENABLE_STATIC available to enable static compilation
  of libcaer in addition to shared library.
- Code is now formatted using clang-format.

BUG FIXES
- C++: add header inclusions for possibly missing types.
- C++ devices/serial.hpp: fix warning about shadowed variable, improve
  error message on failure to open by adding serial baud-rate to message.
- C++ packetContainer.hpp: fix construction of event packets, resulting
  size was incorrect due to wrong vector sizing at initialization.
- C++ events/common.hpp: shrink_to_fit() fails on empty packets, since
  resize to zero is not allowed. Now correctly detects this case.
- Devices: documentation updates, fix typos and precise usage of
  'deviceString' member in device info structures; it is only valid
  during the life-time of the device!
- eDVS: name case changed to 'EDVS-4337' to follow firmware.
- eDVS: faster startup due to shorter delays.
- eDVS: request exclusive access to serial device on Unix (Linux/MacOSX),
  this was already the default on Windows.
- Dynap-SE: delay after initial configuration extended from 1s to 4s,
  some devices seem to need longer delays to start up properly.
- USB: better log messages on failure, reduce event handling timeout to
  10ms from 1s for quicker response to shutdown requests.
- AutoExposure: debug log messages from the auto-exposure module now
  respect the per-device log-level settings.


Release 2.4.2 - 23.03.2018
NEW FEATURES
- Install shared CMake file 'caer-base.cmake' to simplify common build
  steps and checks used in libcaer, cAER and its modules.
- examples/davis_cvgui.cpp: improved example, checks for libcaer compiled
  with proper OpenCV support (issue #55), shows events in a separate
  window, compilation documented in README (PR #53).

BUG FIXES
- Improve Python examples, use numpby for better performance.
- C++ Devices: let users derive from device classes (PR #56).
- C++ EventPackets: fix iteration over empty packet, due to back()
  incorrectly throwing an exception when size is zero because of the
  usage of the -1 backwards lookup notation.


Release 2.4.0 - 05.12.2017
INCOMPATIBLE CHANGES
- DAVIS: require new firmware version 4 and logic version 9912.
- Dynap-SE: require new logic version 5.
- devices/dynapse.h: the chip IDs are now mapped to be 0,1,2,3 for
  U0,U1,U2,U3 respectively, making them as easy to use and loop over
  as the core IDs. The defines have been updated, so if you've been
  properly using them, no change is needed other than a recompile.
- src/dynapse.c: spike events coming from a Dynap-SE's chip ID 0 (U0) do
  now have a chip ID of 0, the same as the chip ID used to configure the
  system, removing this small inconsistency. All usages of
  'DYNAPSE_CONFIG_DYNAPSE_U0+1' must now remove the '+1', chip U0 is not
  to be treated differently anymore in regards to its USB output chip ID.
- events/spike.h: caerSpikeEventGetX() and caerSpikeEventGetY() were
  inverting the meaning of column/row, resulting in inconsistencies
  when using those two functions in comparison to system configuration.
  This has now been corrected, and the functions moved to devices/dynapse.h
  with the new names of caerDynapseSpikeEventGetX/Y(), due to them being
  specific to the architecture of the Dynap-SE neuromorphic processor.
  Now both chips, cores and neurons, as interpreted through these functions,
  are set out in row-major order (similar to computer vision).
- devices/dynapse.h: the caerDynapseWriteSram() function is being deprecated
  in favour of its newer variant caerDynapseWriteSramN().
- devices/dynapse.h: removed define DYNAPSE_CONFIG_SRAMROW.
  Use DYNAPSE_CONFIG_NUMNEURONS and DYNAPSE_CONFIG_NUMSRAM_NEU.
- devices/dynapse.h: removed defines DYNAPSE_MAX_USER_USB_PACKET_SIZE,
  DYNAPSE_CONFIG_MAX_USB_TRANSFER and DYNAPSE_CONFIG_MAX_PARAM_SIZE.
  Those are internal implementation details, and caerDynapseSendDataToUSB()
  now accepts arbitrarily sized data to send, the user does not have to
  divide it in chunks of a particular size anymore.
- devices/dynapse.h: improved and changed 'struct caer_bias_dynapse' to
  reflect actual biasing of device correctly.
- devices/device.h: CAER_HOST_CONFIG_PACKETS_MAX_CONTAINER_PACKET_SIZE's
  default value has been changed to zero, disabling the size division of
  packets by default. Packet size is now dictated, by default, only by
  the time interval, with a value of 10 milliseconds.

NEW FEATURES
- Packaging: packages for Fedora, Debian and Gentoo Linux, as well as
  MacOS X via Homebrew are now available for each new libcaer release.
  For more information please visit:
  https://inivation.com/support/software/libcaer/#automated-installation
- Python bindings: added bindings for Python 2/3 using SWIG. See
  bindings/python_swig/ and bindings/python_swig/examples/ for examples.
  NOTE: this needs a patched Swig, see 'https://github.com/swig/swig/pull/1166'.
- CMake: added support for generating RPM/DEB files via CPack, to
  easily be able to package one's own build.
- DAVIS/Dynap-SE: added support for AER and Multiplexer statistics, to
  examine number of events received, filtered and dropped.
- DAVIS: added support for hardware DVS Refractory Period filter on
  newer FX3 based devices.
- DAVIS: added support for DVS ROI filtering.
- DAVIS: added support for APS Quad-ROI (up to four independent
  regions of interest can be configured and enabled). The number of
  supported ROI regions is defined with DAVIS_APS_ROI_REGIONS_MAX.
- devices/davis.h: added 'caerDavisROIConfigure()' function to atomically
  and efficiently configure and enable ROI regions.
- devices/davis.h: expanded 'struct caer_davis_info' to account for the
  above new features: 'dvsHasROIFilter', 'dvsHasStatistics' and 'muxHasStatistics'.
- devices/dynapse.h: expanded 'struct caer_dynapse_info' to account for
  the above new features: 'aerHasStatistics' and 'muxHasStatistics'.
- devices/device.h: added 'caerDeviceConfigGet64()' to read 64-bit
  configuration parameters, needed for statistics support.
- src/dynapse.c: the Dynap-SE caerDeviceSendDefaultConfig() function now
  performs full initialization of the device and its chips. To reliably
  work with the device, make sure to always call this before setting
  your own custom configuration afterwards.
- devices/dynapse.h: added caerDynapseWriteSramN() function, uses global
  neuron ID [0,1023] instead of core ID/neuron ID syntax. Arguments are
  also directly compatible with caerDynapseGenerateSramBits().
- devices/dynapse.h: renamed define DYNAPSE_CONFIG_NUMCAM to
  DYNAPSE_CONFIG_NUMCAM_NEU to better explain what it is.
- devices/dynapse.h: added caerBiasDynapseGenerate() and caerBiasDynapseParse()
  functions to handle the improved 'struct caer_bias_dynapse' and
  transform it to/from the bit-wise bias configuration representation.
- devices/dynapse.h: added caerDynapseGenerateSramBits() function to
  generate SRAM configuration bits based on input arguments.
- devices/dynapse.h: added caerDynapseCoreXYToNeuronId() and
  caerDynapseCoreAddrToNeuronId() functions to calculate chip global
  neuron addresses (range [0,1023]).
- devices/dynapse.h: added caerDynapseSpikeEventFromXY() function to
  have a reverse transformation to caerDynapseSpikeEventGetX/Y().
- devices/dynapse.h: added DYNAPSE_CONFIG_TAU2_SET, DYNAPSE_CONFIG_TAU1_RESET
  and DYNAPSE_CONFIG_TAU2_RESET defines for caerDeviceConfigSet()
  usage, to allow configuration of which neuron leakage bias to use.
- events/common.h: added caerGenericEventCopy() function to copy
  events from one place in memory to another.
- events/*.h: added two new functions 'caerXXXEventPacketFromPacketHeader()'
  and 'caerXXXEventPacketFromPacketHeaderConst()' to transform a packet
  header pointer to the proper event packet pointer. This checks the
  type, and is needed for proper bindings support.
- ringbuffer.h/hpp: the ring-buffer functions for producer-consumer
  high-performance communication between two threads are now exposed
  as part of the API, to allow re-use in other projects such as cAER.
- examples/dynapse_simple.c: added simple example for Dynap-SE access.
- examples/davis_cvgui.cpp: added example for converting frames to OpenCV
  Mat and visualizing them using OpenCV's GUI.
- src/timestamps.h: added timestamp debugging code, to measure drift
  between host and device. Only enabled in debug builds.
- src/davis.h: improved APS_DEBUG_FRAME support, now splits signal and
  reset read for debugging over all ROI regions.
- New device: support for upcoming DAVIS128 Raspberry-Pi integration.
- events/matrix4x4.h: new event type for 4x4 Matrices.
- C++ support: added toString() for devices.

BUG FIXES
- devices/dynapse.h: major API documentation cleanup.
- devices/dynapse.h: several function parameters of integer type were
  sized more correctly to reflect the range of their arguments.
- src/dynapse.c: DYNAPSE_CONFIG_CLEAR_CAM now clears all 64 CAMs for
  each neuron in a chip, resulting in all CAMs being fully cleared.
- Dynap-SE: default low-power biases are now the same across all cores.
- DAVIS: improved default timings for APS, providing better image quality,
  especially on new chips with internal ADC support.
- DAVIS/AutoExposure: fixed auto-exposure on FX3 devices, sometimes didn't
  run due to rounding errors when correcting for clock skew between
  parameters sent to the devices and parameters received back.
- events/frame.h: added documentation that using the assignment operator
  to copy Frame events is not possible, caerGenericEventCopy() should
  be used instead. The C++ variant deletes the assignment operator to
  enforce this. This fixes issue #26.
- src/usb_utils.c: fixed shutdown callback not being called on MacOS X.
  Also fixed possible dead-lock on USB transfer re-submit on Windows.
  This fixes issue #32.
- src/date_exchange.h: prevent possible dead-lock inside dataExchangeGet(),
  if signals are delivered always while not sleeping.
- portable_endian.h, portable_time.h: fixed stand-alone compilation.
- Fixed many code quality warnings by Sonarcloud.
- Travis-CI: fixed automatic test build issues on MacOS X.


Release 2.3.0 - 30.06.2017
INCOMPATIBLE CHANGES
- device.hpp: removed C++ dataStart() method with no arguments. As with
  the C interface, only the variant with all notification arguments
  remains. This is to ensure users think about the possible arguments,
  especially with regards to the shutdown notification, which usually
  should be defined and used.
- Dynap-SE: requires new logic version 4. Adds new features related
  to DAVIS integration and spike generation/playback.

NEW FEATURES
- CI: test builds are now done by Travis-CI and results sent off to
  Sonarcloud for code quality analysis.
- Examples: added example to show how to bias a DAVIS camera and
  configure it for external AER control (davis_enable_aer.cpp).
- Examples: added shutdown notification handler to all examples.

BUG FIXES
- CMake: fix CMake 3.X support on MacOS X.
- caerDeviceDataGet(): now properly returns NULL in blocking mode when
  the device goes away or stops sending any data, thus preventing a
  dead-lock when using blocking mode with this function.


Release 2.2.0 - 13.06.2017
INCOMPATIBLE CHANGES
- frame_utils.h: the frame utilities API was simplified. Now only one
  function for demosaic support respective contrast enhancement support
  exists, with the type (standard or OpenCV) as an enumeration argument.

NEW FEATURES
- Added support for the eDVS4337 serial port device. Serial port devices
  require the libserialport library (version 0.1.1 or newer), and as such
  are optional; enable them by passing -DENABLE_SERIALDEV=1 to cmake.
  The presence of this support can be verified with the libcaer.h define
  LIBCAER_HAVE_SERIALDEV. When disabled, the API for serial devices is
  still available, but will simply return false/NULL on any operation to
  indicate missing support. For usage details, see 'examples/edvs_simple.c'.
  To open the device, use the new caerDeviceOpenSerial() function with
  'deviceType' set to 'CAER_DEVICE_EDVS'. The usual caerDeviceOpen()
  will only work for supported USB devices. All other functions, such
  as caerDeviceDataGet(), remain the same and work for all device types.
- DAVIS Examples: added example for frame parsing. Thanks to Jonathan Müller.

BUG FIXES
- DVS128/DAVIS/Dynap-se: fix log messages on failure to open device and
  on successful shutdown.
- Dynap-se: calculate rate in caerDynapseWritePoissonSpikeRate() as float.
- IMU and PointXD Events: fix conversion of floating-point data to/from
  little-endian in-memory format. On MacOS X, this resulted in a function
  call with integer arguments and thus conversion to an integer value,
  destroying the original floating-point value.


Release 2.1.5 - 03.06.2017
NEW FEATURES
- Dynap-se: added support for experimental DYNAPSE_CONFIG_POISSONSPIKEGEN
  control (thanks to Carsten Nielsen).

BUG FIXES
- DAVIS FX3: require new logic revision 9910 for FX3 devices.
  This fixes a bug in timestamp synchronization between multiple
  cameras, and improves precision of some time related parameters,
  namely APS_EXPOSURE, APS_FRAME_DELAY and USB_EARLY_PACKET_DELAY.
- DAVIS: fix incorrect extra log message when opening FX3 devices.


Release 2.1.4 - 30.05.2017
BUG FIXES
- C++: functions defined in C++ header files, such as happens in log or
  utils, need the inline keyword to allow the linker to resolve symbols
  properly. Fixes #14.


Release 2.1.3 - 28.05.2017
NEW FEATURES
- DAVIS: new device type CAER_DEVICE_DAVIS is now available, handles both
  FX2 and FX3 board-based devices transparently.

BUG FIXES
- C++ devices/usb.hpp: add missing std::string include.
- Devices: log failure to put new event packet containers on ring-buffer for
  consumption by clients with higher log-level of CAER_LOG_NOTICE.


Release 2.1.2 - 24.05.2017
BUG FIXES
- FrameUtils/C++ FrameEvent: fix detection of OpenCV presence.
- CMake: add dependency on libm for math.h functions.


Release 2.1.1 - 23.05.2017
BUG FIXES
- AutoExposure: disable debug logging.
- AutoExposure: get out of highly over/under-exposed situations much faster.


Release 2.1.0 - 22.05.2017
INCOMPATIBLE CHANGES
- usb.h: the 'dataShutdownNotify' callback of caerDeviceDataStart() will only
  be called on exceptional shutdowns now. Normal shutdowns, such as those from
  calling caerDeviceDataStop(), will not execute the callback anymore.
  The documentation for caerDeviceDataStart() and caerDeviceDataStop() has been
  updated accordingly.
- DAVIS: requires new logic revision 9880.

NEW FEATURES
- davis.h: added automatic exposure control, can be turned on/off with
  the DAVIS_CONFIG_APS_AUTOEXPOSURE configuration parameter, defaults to off.
- EventPackets (C/C++): added caerEventPacketGetDataSize() and
  caerEventPacketGetSize() functions to easily get packet size in bytes.
- C++ FrameEvent: added new function getOpenCVMat() to frame event, if
  OpenCV is enabled. Returns a cv::Mat representing the frame's pixels, with
  support for deep-const by cloning (can be disabled for efficiency).
- C++ Utils: enhanced makeUniqueFromCStruct() and makeSharedFromCStruct() to
  also allow a 'takeMemoryOwnership' parameter that is forwarded to the event
  packet constructors; it defaults to true like the constructors themselves.
- Devices (C/C++): added new CAER_HOST_CONFIG_LOG config module with parameter
  CAER_HOST_CONFIG_LOG_LEVEL to set per-device log-level; by default the
  log-level is equal to the current global one at device opening.

BUG FIXES
- libcaer.hpp: undefine log-level names to avoid name clashes.
- DAVIS: removed variable APS ADC Shift, is not used by any camera currently
  offered, all have 10 bits precision.
- DAVIS: fix black APS pixels on very high illumination.
- DAVIS240: fix low range of APS pixels due to reduced ADC dynamic range.
- USB: libusb-based USB communication completely rewritten, now there is one
  thread responsible for USB event handling only, while transfers are sent,
  started/stopped etc. from other threads. This avoids possible dead-locks,
  or other threads stealing the USB event handling, or new settings not being
  sent to the device under certain load conditions. This required a small
  change in the API, please see "INCOMPATIBLE CHANGES" above for more details.


Release 2.0.2 - 27.04.2017
NEW FEATURES
- Logging: added caerLogFileDescriptorsGetFirst(), caerLogFileDescriptorsGetSecond()
  functions to get the two file descriptors where log messages go to.
- Logging: added caerLogVAFull() function to allow full control over all
  parameters involved in logging, especially the log-level.
- Dynap-se: added support for experimental DYNAPSE_CONFIG_SPIKEGEN
  control and improved DYNAPSE_CONFIG_SRAM control (thanks to Carsten Nielsen).
- Updated C++ examples to use C++ logging functions.
- Updated C++ interface to reflect above changes.


Release 2.0.1 - 16.03.2017
NOTE: this release is numbered 2.0.1 and not 2.0.0, because 2.0.0 was the
development version. To ensure people can depend on the now actually released
version, the version number was increased to 2.0.1 for the official release.

INCOMPATIBLE CHANGES
- The Frame Event format changed to have the origin (0, 0) in the upper left
  corner of the image, following standard computer graphics conventions now.
  Before it was in the lower left corner, following the OpenGL convention.
  This was changed to more easily be able to benefit from the wealth of
  computer graphics libraries available, such as OpenCV.
  caerFrameEventGetPixelArrayCGFormat() has been removed as a consequence.
- The Polarity Event format has also changed its origin to the upper left corner.
- Device INFO structures have additional data members now, be sure to
  recompile anything depending on those!
- CAER_HOST_CONFIG_PACKETS_MAX_*_SIZE and MAX_*_INTERVAL options have been
  removed, the whole data packeting system is now much simpler with only
  two configuration options to control it:
  - CAER_HOST_CONFIG_PACKETS_MAX_CONTAINER_PACKET_SIZE
  - CAER_HOST_CONFIG_PACKETS_MAX_CONTAINER_INTERVAL
  These act at the event packet container level. See packetContainer.h
  documentation on more information for how this works.
- Removed LIBCAER_LOG_NONE define from headers, it is now not possible
  to completely suppress log output anymore.
- caerGenericEventGetEvent() has had its bounds restricted to [0,eventNumber[
  instead of [0,eventCapacity[.
- Event packet copy functions have been renamed to:
  - caerEventPacketCopy()
  - caerEventPacketCopyOnlyEvents()
  - caerEventPacketCopyOnlyValidEvents()

NEW FEATURES
- Support for the aiCTX DYNAP-SE neuromorphic chip was added.
- Added new event type Spike Event for spiking neurons.
- Added new event types Point1D, Point2D, Point3D and Point4D to
  hold floating point data in multiple dimensions.
- New event packet functions were added:
  - caerEventPacketEquals()
  - caerEventPacketClear()
  - caerEventPacketClean()
  - caerEventPacketResize()
  - caerEventPacketGrow()
  - caerEventPacketAppend()
- Full native support for C++11 through header library (libcaercpp).
- Improved const-qualification of functions, to allow better compile
  time checks for read-only data. A GetEventConst() function was added
  to each event type as part of this, to get read-only events.
- Const, reverse and const-reverse iterators were added to all event types.
- davis.h: added support for stereo microphones on DAVIS346mini.
- davis.h: added support for extra signal detectors.
- network.h: added header with functions to help parse AEDAT 3.X
  network stream headers.
- frame.h: added support for more color filter configurations.
- packetContainer.h: better documentation, now tracks lowest and highest
  timestamps contained, as well as number of total and valid events.
- packetContainer.h: added caerEventPacketContainerUpdateStatistics() to
  update above statistics. Automatically called on each addition or
  removal of an event packet from the container.
- packetContainer.h: added caerEventPacketContainerFindEventPacketByType*(),
  caerEventPacketContainerCopyAllEvents() and caerEventPacketContainerCopyValidEvents()
  functions to search for event packets by type and to make deep-copies of them.
- special.h: added new Special Event types, to support extra signal detection
  schemes and add Frame Event related timing information.
- special.h: added caerSpecialEventPacketFindEventByType*() and
  caerSpecialEventPacketFindValidEventByType*() functions to search for
  a specified type of special event.
- libcaer.h: added LIBCAER_VERSION, LIBCAER_NAME_STRING,
  LIBCAER_VERSION_STRING and LIBCAER_HAVE_OPENCV defines.
- log.h: added caerLogVA() function to pass va_list arguments directly.


Release 1.0.3 - 28.03.2016
INCOMPATIBLE CHANGES
- davis_fx2.c: removed specific FX2 code, now uses same backend as FX3
  for sending all configuration values, due to new firmware version 3
  for FX2 DAVIS small-board cameras. A firmware update is required,
  please follow the instructions at https://inivation.com/support/software/reflashing/.

NEW FEATURES
- frame.h: add function caerFrameEventGetPixelArrayCGFormat() to
  Frame Event, allows to get a copy of the pixels array in the
  standard computer graphics format (pixel (0, 0) in upper left
  corner) efficently.
- davis.h: add DAVIS_CONFIG_APS_ADC_TEST_MODE parameter to APS module.


Release 1.0.2 - 08.01.2016
IMCOMPATIBLE CHANGES
- frame.h: rename channel number to color channels and add color
  filter information, to better specify the information needed
  to reconstruct color frames. The 'enum caer_frame_event_color_channels'
  and 'enum caer_frame_event_color_filter' hold the possible values.
  This change is backwards-compatible with older frame format!
- davis.h, dvs128.h: changed info data structure's integers to be
  signed for better cross-language compatibility. Also 'deviceID'
  can now be compared directly with 'sourceID' from event packets.
- davis.h: changed type of 'apsColorFilter' in info data structure
  to take advantage of new 'enum caer_frame_event_color_filter'.

NEW FEATURES
- common.h: add generic functions for event packet copying, with
  support for packet size reductions (copy only valid).
- libcaer.h: add generic clear, get and set functions for bitfields,
  and use them in all the event functions to avoid errors.
- config.h: add device configuration event type, for tracking
  of device configuration changes in the event stream.
- log.c: add timezone information to log message time information.
- dvs128_simple.cpp, davis_simple.cpp: add C++11 example variants.
- Enable more Clang compiler warnings.

BUG FIXES
- davis_common.c: only update the ROI size information if ROI
  updates actually came in from the device.
- Fix and improve documentation, especially for the frame event.
- Fix off-by-one in event's GetEvent() function's warning log message.
- device.c: mark global function pointer arrays static.
- common.h, frame.h: fix compilation of inline functions in
  strict C++11 mode.


Release 1.0.1 - 06.11.2015
INCOMPATIBLE CHANGES
- Requires firmware version 2 and logic revision 7449.
- usb.h: improved caerDeviceDataStart() API to also allow for
  notification of data acquisition shutdown, to be able to react
  to abnormal shutdown cases, like when a device is unplugged.
- frame.h: changed in-memory format for easier handling and compatibility
  with the other event formats (all-in-one memory block).
- davis.h: rename DAVIS240 APSOVERFLOWLEVEL to APSOVERFLOWLEVELBN.

NEW FEATURES
- Headers are C++ compatible and stand-alone now.
- MacOS X support.
- Added pkg-config file for library.
- Full API documentation (see docs/ for PDF).
- Various cmake/build improvements. Support out-of-tree builds.
- Add iterator macros for EventPackets.
- frame.h: added ROI region ID tracking, as well as ROI position.
  Added caerFrameEventGetExposureLength() and caerFrameEventGetTimestamp(),
  which is defined as the median of the exposure times.
  Added caerFrameEventPacketGetPixelsSize() and caerFrameEventPacketGetPixelsMaxIndex()
  for EventPacket-level size information.
  Added caerFrameEventGetPixelsSize() and caerFrameEventGetPixelsMaxIndex()
  for Event-level size information.
- log.h: added caerLogFileDescriptorsSet() to allow logging to
  up to two different file descriptors (defaults to STDERR only).
- davis.h: added chipID check macros.
- davis.h: added DAVIS_CONFIG_APS_SNAPSHOT to take one frame snapshots.
- dvs128.h: added DVS128_CONFIG_DVS_TS_MASTER to select timestamp
  master or slave behavior (timestamp synchronization).
- davis_common.c: added support for outputting only reset read or
  signal read frames, for debugging purposes.
- c11threads_posix.h: C11-compatible thread abstraction, for
  both Linux and MacOS X, based on POSIX Threads.

BUG FIXES
- Relaxed atomic operations memory constraints for better
  performance on weakly-ordered architectures (like ARM).
- log.c: call tzset() before localtime_r(), as per standard.
- davis_common.c: improved Region of Interest support (APS).
- davis_fx2.c: keep GlobalShutter flag correctly in-sync.
- davis_fx3.c: fixed support for new FX3 devices.
- packetContainer.h: handle container being NULL by returning NULL.


Release 1.0.0 - 02.10.2015
- Initial release.


Wiki Tutorials

See ROS Wiki Tutorials for more details.

Source Tutorials

Not currently indexed.

Package Dependencies

No dependencies on ROS packages.

System Dependencies

Dependant Packages

Launch files

No launch files found

Messages

No message files found.

Services

No service files found

Plugins

No plugins found.

Recent questions tagged libcaer at Robotics Stack Exchange

libcaer package from libcaer repo

libcaer

Package Summary

Tags No category tags.
Version 1.0.0
License BSD-2
Build type CMAKE
Use RECOMMENDED

Repository Summary

Checkout URI https://github.com/ros-event-camera/libcaer.git
VCS Type git
VCS Version ros_event_camera
Last Updated 2024-01-08
Dev Status DEVELOPED
CI status No Continuous Integration
Released RELEASED
Tags No category tags.
Contributing Help Wanted (0)
Good First Issues (0)
Pull Requests to Review (0)

Package Description

library for event based sensors

Additional Links

No additional links.

Maintainers

  • Bernd Pfrommer

Authors

No additional authors.
WINDOWS BUILD INSTRUCTIONS
==========================
We support building libcaer on the Windows platform by using the MinGW32/64 compilers
and the MSYS2 environment. The result is a static and a dynamic DLL, as well as the
appropriate header files, so that libcaer can be used in MinGW itself.

Visual Studio and the MSVC compiler are not supported out-of-the-box right now, to use
a DLL compiled by MinGW additional steps are necessary: http://www.mingw.org/wiki/MSVC_and_MinGW_DLLs

Following are detailed step-by-step instructions to install the required
components and get everything building, we use MinGW64 here for the
64-bit Windows platform, if you want to build for 32-bit Windows, just replace all
mentions of 'x86_64' with 'i686'. Whenever you want to install a package, use
the MSYS2 shell, while to build code, use the MinGW32/64 shells!

1) Get MSYS2 from https://msys2.github.io/ and download the appropriate installer.
Follow the instructions to install the system and update its packages. During the
system package upgrade, ignore any heap mismatch errors, and follow what the last
warning tells you to do (close the shell). The base system upgrade seems to break
the Start Menu shortcuts, so from now on start MSYS2 by going to its directory
'C:\msys64\' and double-clicking on 'msys2_shell.cmd'.

2) Install MinGW GCC: pacman -S mingw-w64-x86_64-gcc

3) Install Make/CMake: pacman -S make mingw-w64-x86_64-cmake

4) Install pkg-config: pacman -S mingw-w64-x86_64-pkg-config

5) Install libusb: pacman -S mingw-w64-x86_64-libusb

6) Place the libcaer source in a location easily accessible to MSYS2. We usually
put the source code into 'C:\msys64\home\libcaer\' and use TortoiseGit
(https://tortoisegit.org/) or git from the MSYS2 shell (pacman -S git) to get it.

7) Switch to the MinGW build shell, double-click on 'mingw64.exe' in 'C:\msys64\'.

8) Switch to the libcaer checkout directory: cd /home/libcaer/

9) Configure, run CMake: cmake -G "MSYS Makefiles" -DCMAKE_INSTALL_PREFIX=/mingw64 .

10) Build, run Make: make

11) Install: make install

Congratulations, you now have a working libcaer on Windows! The output from that
last 'make install' will have told you exactly where all the DLLs and header
files are located on the file-system. You can now try building one of the
examples in the examples/ directory to verify functionality.


CHANGELOG
Release 3.3.15 - 07.03.2023

BUG FIXES
- eDVS: fix device discovery. Thanks to Benjamin Ward-Cherrier.
- Windows: control MSVC build with BUILD_CONFIG_VCPKG flag.
- Devices: fix compiler warnings.
- Removed obsolete DAVIS_RPI device.


Release 3.3.14 - 25.03.2022

NEW FEATURES
- Full native MSVC/Windows build support.

BUG FIXES
- davis_cvgui example: fix incorrect biasing and APS frame settings.
- USB: fix firmware version check for DVXplorer Mini.


Release 3.3.13 - 25.02.2022

NEW FEATURES
- DVXplorer (Mini): add control of readout timing parameters, readout restart.


Release 3.3.12 - 12.11.2021

BUG FIXES
- DVXplorer Mini: fix inverted polarity.
- dvx_bw_test example: fix length of time interval for
  bandwidth estimation.
- Fedora/Ubuntu: fix packaging, use at least GCC-10 to compile.


Release 3.3.11 - 16.07.2021

NEW FEATURES
- Native MacOS ARM (M1) builds, Big Sur compatibility.
- Ubuntu 21.04 Hirsute support.
- Fedora 34 support.
- Ubuntu 16.04 Xenial is no longer supported!
- Cameras: added support for new DVXplorer Mini camera model.


Release 3.3.10 - 16.04.2021

BUG FIXES
- USB: when serial number cannot be determined, use all bits from
  USB bus-number/dev-address to construct the fake name (issue #123).
- Examples Device Discovery: add support for DVXplorer and EVK.
  Serial Number in Device Discovery can only be used if the
  device could be opened correctly (deviceErrorOpen == false).


Release 3.3.9 - 21.12.2020

BUG FIXES
- DVXplorer: fix mapping of events when dual-binning is
  enabled (issue #119).


Release 3.3.8 - 15.09.2020

NEW FEATURES
- Linux Udev: simplify udev rules into one file (issue #114).

BUG FIXES
- Samsung EVK: allow multiple EVKs to be selected by a temporary
  serial number generated from USB bus addresses (issue #113).
- Samsung EVK: more robust parser for 231Y chip data (issue #115).


Release 3.3.7 - 07.05.2020

BUG FIXES
- Samsung EVK: implement full 64bit timestamps (issue #99).


Release 3.3.6 - 18.04.2020

NEW FEATURES
- MacOS X: set default CMake destination to /usr/local on Apple systems.
- Ubuntu: support for release 20.04 LTS 'Focal Fossa'.

BUG FIXES
- USB: do not claim device interface on discovery, not needed for
  simple info requests on control ep0 (issue dv-gui#291).
- Samsung EVK: enable USB transfer timeout (set to 500us), so that
  even on low event rates, data keeps coming in with low latency.


Release 3.3.5 - 12.03.2020

INCOMPATIBLE CHANGES
- DVXplorer (Lite): firmware update to version 8.
  Use Flashy to update as per documentation:
  https://inivation.gitlab.io/dv/dv-docs/docs/update-firmware/

BUG FIXES
- USB: improve detection of device serial number.
- USB: optimize setting number/size of USB transfers.


Release 3.3.4 - 04.03.2020

INCOMPATIBLE CHANGES
- DVXplorer: firmware update to version 7.
  Use Flashy to update as per documentation:
  https://inivation.gitlab.io/dv/dv-docs/docs/update-firmware/

NEW FEATURES
- Cameras: added support for DVXplorer Lite camera.
- USB: added support for libusb logging.


Release 3.3.3 - 01.02.2020

BUG FIXES
- Samsung EVK: fix possible non-monotonic timestamp at startup.
- DVXplorer: fix crop start/end address inversion.


Release 3.3.2 - 24.01.2020

BUG FIXES
- DVXplorer/DVS132S: fix IMU accel/gyro scale detection.
- Samsung EVK: fix non-monotonic timestamps when a reference timestamp
  event is lost due to high USB traffic.


Release 3.3.1 - 17.01.2020

NEW FEATURES
- Support for new DVXplorer and Samsung EVK devices added.


Release 3.3.0 - 24.12.2019

NEW FEATURES
- Support for mini-eDVS serial device added to eDVS code.

BUG FIXES
- eDVS: fix inverted event polarity.


Release 3.2.2 - 15.07.2019

BUG FIXES
- CMake: fix compatibility with older pre-6.0 GCCs (issue #93).
- CMake: drop required version to 3.10 (Ubuntu Bionic).
- USB devices: better error messages on failure to open a device,
  better distinction of generic 'any-camera' case and specific
  USB ports or serial numbers.
- eDVS: fix strncpy() compiler warning, ensure serial number is
  always NULL terminated.
- DAVIS: fix APS frame color interpolation for color cameras
  when ROI is enabled (issue #94).


Release 3.2.0 - 20.05.2019

INCOMPATIBLE CHANGES
- DAVIS firmware and logic update: DAVIS FX3 firmware v6 and logic v18.1.
  Fixes a possible USB data corruption bug in some rare cases, especially
  on MacOS X systems. Improves quality of APS frames.
- All devices: dataStart() stops all producers and resets all buffers,
  ensuring no stale data remains. Producers must be enabled only after
  having called dataStart(), it not using the START_PRODUCERS feature.
- CMake: version 3.12.0 or newer of CMake is now required.
- Ubuntu: dropped support for Trusty 14.04.
- DVS128: renamed logicVersion to firmwareVersion in dvs128_info struct.
- Python bindings: removed experimental Python SWIG bindings.
  Please use https://github.com/duguyue100/pyaer/ instead (issue #65).
- CMake: installed caer-base.cmake dropped its argument. Use standard
  CMake facilities to select the needed C/C++ standard version.
- CMake: caer-base.cmake does not provide the following variables anymore:
  - CM_BUILD_DIR (not useful)
  - CM_SHARE_DIR (already known when accessing the file)
  - CAER_C_THREAD_LIBS (renamed to SYSTEM_THREAD_LIBS)
  - CAER_MODULES_DIR (not part of libcaer)
- CMake: renamed CAER_LOCAL_INCDIRS/CAER_LOCAL_LIBDIRS/CAER_LOCAL_PREFIX
  to USER_LOCAL_INCDIRS/USER_LOCAL_LIBDIRS/USER_LOCAL_PREFIX.
- Events: removed unused event types: Config, Ear, Matrix4x4,
  Point1D, Point2D, Point3D, Point4D and Sample (issue #85).

NEW FEATURES
- Devices: added support for the DVS132S test chip in the C/C++ API.
- CMake: added UDEV_INSTALL switch to disable udev rules installation (issue #82).
- CMake: search for and support OpenCV 4 (issues #83, #90).
- GCC/CMake: add more compiler warnings.
- C++ ringbuffer.hpp: add comparison operators.
- Examples: compile and install examples with -DEXAMPLES_INSTALL=1.
- frame_utils.h: added caerFrameUtilsPixelColor() function (issue #89).
- Device discovery: firmwareVersion is always defined for USB devices
  during device discovery. SerialPortName and SerialBaudRate are always
  defined for eDVS devices (issue #88).

BUG FIXES
- CMake: ensure LIBCAER_HAVE_SERIALDEV and LIBCAER_HAVE_OPENCV defines
  in libcaer.h are always properly defined to be 0 or 1.
- device_discovery.c example: fix compilation with new struct davis_info.
- Examples: fix incorrect defines.


Release 3.1.0 - 27.11.2018

INCOMPATIBLE CHANGES
- DAVIS: require firmware version 5 and logic version 18. Fixes issues with
  IMU Run Controls, fixes corrupt data in DAVIS BLUE 346, enables IMU on
  DAVIS RED 346.
- Logging: caerLogVAFull() API has been simplified, the two file descriptor
  arguments have been removed, use the proper caerLogFileDescriptorsSet()
  API to set them when needed.

NEW FEATURES
- Logging: added caerLogCallbackSet() and caerLogCallbackGet() functions
  to set/get a global callback function to be executed on every caerLog()
  logging call, the log message and its size are passed to the callback.

BUG FIXES
- C++ API frame.hpp: fix demosaic(), set number of (valid) events in
  resulting packet correctly. Don't log errors if operation cannot
  be performed, just copy over unchanged pixel data.
  Also only operate on valid events for demosaic() and contrast().
- DAVIS IMU: temperature readings on InvenSense 6050 were off by +1.53°C.
- CMake: fix linking on Windows.
- Ubuntu Packaging: build with correct GCC version on Ubuntu 14.04 Trusty.
- Logging: performance improvements; move expensive check (TLS) to
  last position, ensure log-level is checked first in custom loggers.
- Fix various compiler warnings.


Release 3.0.0 - 23.10.2018

INCOMPATIBLE CHANGES
- frame_utils.h: caerFrameUtilsDemosaic() and caerFrameUtilsContrast()
  functions have different signatures to allow for more flexibility in
  where frames to be modified are sourced and stored. Also the type
  enums changed to add Bayer->Gray conversion options.

- davis.h: support for new logic version 16:
 - changed, slightly more efficient data encoding (IMU, APS).
 - cleaned up device configuration, removed lots of unused debug options.
 - changed APS FrameDelay to FrameInterval, to allow for setting time
   between frames and thus control the frame rate directly.
 - new hardware filter options for DVS: Background Activity, Refractory
   Period, Skip Events, Polarity Suppress/Flatten, Region of Interest (ROI)
   and single Pixel Filtering.
 - full support for new iniVation devices: DAVIS346 Blue, DAVIS346 Red
   and DAVIS346 Red Color.

This represents a new major release version, as it breaks the API
for DAVIS devices: the available configuration options (#defines in
davis.h) heavily change; the struct caer_davis_info and the
caerDavisROIConfigure() function also change incompatibly.
Please ensure all applications targeting DAVIS are recompiled!

NEW FEATURES
- C++ EventPackets: new function getHeaderPointerForCOutput() to get
  the underlying C EventPacket pointer and ensure that memory ownership
  is transferred to it, and not left with the C++ EventPacket.
- FrameEventPackets: new caerFrameEventPacketAllocateNumPixels() function
  to allocate based on total number of pixels instead of X/Y lengths.
- davis.h: added new DAVIS_CONFIG_APS_FRAME_MODE configuration option.
- davis.h: added enums for easier IMU option handling (caer_davis_imu_types,
  caer_davis_imu_invensense_accel_scale, caer_davis_imu_invensense_gyro_scale).
- CMake: automatically set CMAKE_INSTALL_PREFIX to /usr if nothing
  was specified by user on Unix/Linux, this avoids installs to /usr/local
  that often lead to the libraries not being found correctly.
- CMake: support for the ccache compiler cache added.
- CMake: install udev rules on Unix/Linux, to allow access to iniVation
  devices. Default rules chmod 0666 the devices, using -DUDEV_SELINUX=1
  installs a SELinux-enabled version for systems using TAG 'uaccess'.
- Ubuntu Packaging: libcaer is now split in two packages: libcaer and
  libcaer-dev. It is now built using debhelper, and the static library
  version is now also installed by libcaer-dev.
- Fedora Packaging: libcaer is now split in three packages: libacer,
  libcaer-devel and libcaer-static. The static version is in the latter.
- examples/davis_text.cpp: added new example for writing data to a text file.

BUG FIXES
- Packaging: cmake dependency bumped to 2.8.12 in Ubuntu/Fedora packages.
- src/usb_utils.c: fixed firmware/logic update message to be clearer.
- src/container_generation.h: clearer message on dropped event packets.


Release 2.5.2 - 25.09.2018
INCOMPATIBLE CHANGES
- CMake: raised minimum CMake dependency to version 2.8.12, some
  variables we use are only defined starting with this version.
  It also corresponds to the version present in the oldest distribution we
  support: Ubuntu 14.04 Trusty.

NEW FEATURES
- CMake: added CAER_LOCAL_INCDIRS/CAER_LOCAL_LIBDIRS/CAER_LOCAL_PREFIX
  variables to enable easier cross-compilation setups.
- CMake: added CMake configuration files, so that CMake may find the library
  using its own package detection system, in addition to the existing pkg-config
  based detection. Thanks to Felix Schwitzer (see issue #72 for more details).
- devices/davis.h: added caerBiasCoarseFineFromCurrent() and caerBiasCoarseFineToCurrent()
  functions to convert between coarse-fine bias values and the current they
  represent (in picoAmpere). Also available in the C++ interface (issue #40).
- filters/dvs_noise.h: added statistics on number of filtered events separated
  by ON/OFF polarity. Added caerFilterDVSNoiseStatsApply() function to only
  gather statistics and not modify the given polarity event packet (read-only
  mode). Also available in the C++ interface.

BUG FIXES
- src/usb_utils.c: check for exact firmware and logic versions.
- events/packetContainer.h: fix sizes used in caerEventPacketContainerCopyAllEvents()
  and caerEventPacketContainerCopyValidEvents() to allocate new containers.


Release 2.5.0 - 17.07.2018
INCOMPATIBLE CHANGES
- davis.h: removed support for stereo microphones, this was never used in any
  released devices, only for internal experiments on a limited prototype run.
- Events: event packet allocation functions are now in the various headers,
  making it possible to create, use and destroy event packets and events by
  just including the headers, without having to link to the full library.
  CAER_EVENTS_HEADER_ONLY needs to be set before inclusion for this to fully
  work, else there is a dependency on caerLog(), which is still in the library.
  This is very useful for tools or network receivers. A re-compile of any
  programs using these functions is required to avoid runtime linking errors.
- CMake: cleanup linked libraries, libm and librt are not part of the
  default dependencies anymore, they need to be added manually to programs
  that actually use them. Same goes for thread support, which is now only
  exported as the 'CAER_C_THREAD_LIBS' CMake variable but not automatically
  included anywhere.

NEW FEATURES
- Device Discovery: added capability of finding any accessible supported
  devices on a system, getting information on them, and then opening them.
  New header 'devices/device_discover.h' with functions caerDeviceDiscover()
  and caerDeviceDiscoverOpen(), example provided in 'examples/device_discovery.c'.
  C++ interface available in 'devices/device_discover.hpp', namespace is
  'libcaer::devices::discover'.
- Error reporting: both caerDeviceOpen() and caerDeviceOpenSerial() now
  set 'errno' on failure to provide more precise reasons for the failure,
  error codes are available in the enum 'caer_error_codes'.
- log.h: new functions caerLogDisable(true/false) to turn off all logging
  for a region of code (per-thread), and caerLogDisabled() to check current
  status of logging. C++ interface available in 'libcaer::log'.
- C++ packetContainer.hpp: support construction of a new packet container
  based on a C-style caerEventPacketContainer, with optional memory
  ownership take-over for the contained packets.
- C++ utils.hpp: libcaer::events::utils::makeShared/Unique now support the
  Matrix 4x4 event type too.
- C++ frame.hpp: new define LIBCAER_FRAMECPP_OPENCV_INSTALLED to enable
  special getOpenCVMat() support independently of libcaer itself having
  support for OpenCV.
- events/common.h: add new functions caerEventPacketGetDataSizeEvents()
  and caerEventPacketGetSizeEvents() to get size of data part of an
  event packet, disregarding capacity.
- Examples: added 'davis_simple_2cam.c' example for a two camera setup.
- device.h: CAER_SUPPORTED_DEVICES_NUMBER define is now public.
- eDVS: added 'serialPortName' and 'serialBaudRate' members to its info
  structure, contents are OS-specific.
- eDVS: analyze startup message to confirm the presence of an eDVS device.
- eDSV: flush buffers on open to avoid possible garbage data from previous
  open attempts to interfere with eDVS detection.
- USB: check both firmware and logic version always and notify users of
  needed upgrades for both at the same time; this avoids multiple notify
  and upgrade cycles if both change quickly or the user hasn't upgraded
  in a long time.
- filters/dvs_noise.h: new filter module to reduce noise from the DVS
  output, integrates a hot pixel filter (with learning), a background-
  activity filter and a refractory period filter. C++ interface available.
  New example 'davis_cvgui_filters.cpp' shows usage.
- devices/davis.h: new define DAVIS_CONFIG_DVS_FILTER_PIXEL_AUTO_TRAIN to
  automatically discover abnormally active pixels (hot-pixels) in the camera
  output and then filter them at the hardware level (FPGA/CPLD). This only
  works on newer camera that support the hardware pixel filtering, it does
  nothing on older systems and just returns 'false' on get/set.
- devices/davis.h: support new DAVIS346 with InvenSense MPU 9250, new IMU
  options via defines DAVIS_CONFIG_IMU_GYRO_DLPF and DAVIS_CONFIG_IMU_ACCEL_DLPF.
- CMake: new flag ENABLE_STATIC available to enable static compilation
  of libcaer in addition to shared library.
- Code is now formatted using clang-format.

BUG FIXES
- C++: add header inclusions for possibly missing types.
- C++ devices/serial.hpp: fix warning about shadowed variable, improve
  error message on failure to open by adding serial baud-rate to message.
- C++ packetContainer.hpp: fix construction of event packets, resulting
  size was incorrect due to wrong vector sizing at initialization.
- C++ events/common.hpp: shrink_to_fit() fails on empty packets, since
  resize to zero is not allowed. Now correctly detects this case.
- Devices: documentation updates, fix typos and precise usage of
  'deviceString' member in device info structures; it is only valid
  during the life-time of the device!
- eDVS: name case changed to 'EDVS-4337' to follow firmware.
- eDVS: faster startup due to shorter delays.
- eDVS: request exclusive access to serial device on Unix (Linux/MacOSX),
  this was already the default on Windows.
- Dynap-SE: delay after initial configuration extended from 1s to 4s,
  some devices seem to need longer delays to start up properly.
- USB: better log messages on failure, reduce event handling timeout to
  10ms from 1s for quicker response to shutdown requests.
- AutoExposure: debug log messages from the auto-exposure module now
  respect the per-device log-level settings.


Release 2.4.2 - 23.03.2018
NEW FEATURES
- Install shared CMake file 'caer-base.cmake' to simplify common build
  steps and checks used in libcaer, cAER and its modules.
- examples/davis_cvgui.cpp: improved example, checks for libcaer compiled
  with proper OpenCV support (issue #55), shows events in a separate
  window, compilation documented in README (PR #53).

BUG FIXES
- Improve Python examples, use numpby for better performance.
- C++ Devices: let users derive from device classes (PR #56).
- C++ EventPackets: fix iteration over empty packet, due to back()
  incorrectly throwing an exception when size is zero because of the
  usage of the -1 backwards lookup notation.


Release 2.4.0 - 05.12.2017
INCOMPATIBLE CHANGES
- DAVIS: require new firmware version 4 and logic version 9912.
- Dynap-SE: require new logic version 5.
- devices/dynapse.h: the chip IDs are now mapped to be 0,1,2,3 for
  U0,U1,U2,U3 respectively, making them as easy to use and loop over
  as the core IDs. The defines have been updated, so if you've been
  properly using them, no change is needed other than a recompile.
- src/dynapse.c: spike events coming from a Dynap-SE's chip ID 0 (U0) do
  now have a chip ID of 0, the same as the chip ID used to configure the
  system, removing this small inconsistency. All usages of
  'DYNAPSE_CONFIG_DYNAPSE_U0+1' must now remove the '+1', chip U0 is not
  to be treated differently anymore in regards to its USB output chip ID.
- events/spike.h: caerSpikeEventGetX() and caerSpikeEventGetY() were
  inverting the meaning of column/row, resulting in inconsistencies
  when using those two functions in comparison to system configuration.
  This has now been corrected, and the functions moved to devices/dynapse.h
  with the new names of caerDynapseSpikeEventGetX/Y(), due to them being
  specific to the architecture of the Dynap-SE neuromorphic processor.
  Now both chips, cores and neurons, as interpreted through these functions,
  are set out in row-major order (similar to computer vision).
- devices/dynapse.h: the caerDynapseWriteSram() function is being deprecated
  in favour of its newer variant caerDynapseWriteSramN().
- devices/dynapse.h: removed define DYNAPSE_CONFIG_SRAMROW.
  Use DYNAPSE_CONFIG_NUMNEURONS and DYNAPSE_CONFIG_NUMSRAM_NEU.
- devices/dynapse.h: removed defines DYNAPSE_MAX_USER_USB_PACKET_SIZE,
  DYNAPSE_CONFIG_MAX_USB_TRANSFER and DYNAPSE_CONFIG_MAX_PARAM_SIZE.
  Those are internal implementation details, and caerDynapseSendDataToUSB()
  now accepts arbitrarily sized data to send, the user does not have to
  divide it in chunks of a particular size anymore.
- devices/dynapse.h: improved and changed 'struct caer_bias_dynapse' to
  reflect actual biasing of device correctly.
- devices/device.h: CAER_HOST_CONFIG_PACKETS_MAX_CONTAINER_PACKET_SIZE's
  default value has been changed to zero, disabling the size division of
  packets by default. Packet size is now dictated, by default, only by
  the time interval, with a value of 10 milliseconds.

NEW FEATURES
- Packaging: packages for Fedora, Debian and Gentoo Linux, as well as
  MacOS X via Homebrew are now available for each new libcaer release.
  For more information please visit:
  https://inivation.com/support/software/libcaer/#automated-installation
- Python bindings: added bindings for Python 2/3 using SWIG. See
  bindings/python_swig/ and bindings/python_swig/examples/ for examples.
  NOTE: this needs a patched Swig, see 'https://github.com/swig/swig/pull/1166'.
- CMake: added support for generating RPM/DEB files via CPack, to
  easily be able to package one's own build.
- DAVIS/Dynap-SE: added support for AER and Multiplexer statistics, to
  examine number of events received, filtered and dropped.
- DAVIS: added support for hardware DVS Refractory Period filter on
  newer FX3 based devices.
- DAVIS: added support for DVS ROI filtering.
- DAVIS: added support for APS Quad-ROI (up to four independent
  regions of interest can be configured and enabled). The number of
  supported ROI regions is defined with DAVIS_APS_ROI_REGIONS_MAX.
- devices/davis.h: added 'caerDavisROIConfigure()' function to atomically
  and efficiently configure and enable ROI regions.
- devices/davis.h: expanded 'struct caer_davis_info' to account for the
  above new features: 'dvsHasROIFilter', 'dvsHasStatistics' and 'muxHasStatistics'.
- devices/dynapse.h: expanded 'struct caer_dynapse_info' to account for
  the above new features: 'aerHasStatistics' and 'muxHasStatistics'.
- devices/device.h: added 'caerDeviceConfigGet64()' to read 64-bit
  configuration parameters, needed for statistics support.
- src/dynapse.c: the Dynap-SE caerDeviceSendDefaultConfig() function now
  performs full initialization of the device and its chips. To reliably
  work with the device, make sure to always call this before setting
  your own custom configuration afterwards.
- devices/dynapse.h: added caerDynapseWriteSramN() function, uses global
  neuron ID [0,1023] instead of core ID/neuron ID syntax. Arguments are
  also directly compatible with caerDynapseGenerateSramBits().
- devices/dynapse.h: renamed define DYNAPSE_CONFIG_NUMCAM to
  DYNAPSE_CONFIG_NUMCAM_NEU to better explain what it is.
- devices/dynapse.h: added caerBiasDynapseGenerate() and caerBiasDynapseParse()
  functions to handle the improved 'struct caer_bias_dynapse' and
  transform it to/from the bit-wise bias configuration representation.
- devices/dynapse.h: added caerDynapseGenerateSramBits() function to
  generate SRAM configuration bits based on input arguments.
- devices/dynapse.h: added caerDynapseCoreXYToNeuronId() and
  caerDynapseCoreAddrToNeuronId() functions to calculate chip global
  neuron addresses (range [0,1023]).
- devices/dynapse.h: added caerDynapseSpikeEventFromXY() function to
  have a reverse transformation to caerDynapseSpikeEventGetX/Y().
- devices/dynapse.h: added DYNAPSE_CONFIG_TAU2_SET, DYNAPSE_CONFIG_TAU1_RESET
  and DYNAPSE_CONFIG_TAU2_RESET defines for caerDeviceConfigSet()
  usage, to allow configuration of which neuron leakage bias to use.
- events/common.h: added caerGenericEventCopy() function to copy
  events from one place in memory to another.
- events/*.h: added two new functions 'caerXXXEventPacketFromPacketHeader()'
  and 'caerXXXEventPacketFromPacketHeaderConst()' to transform a packet
  header pointer to the proper event packet pointer. This checks the
  type, and is needed for proper bindings support.
- ringbuffer.h/hpp: the ring-buffer functions for producer-consumer
  high-performance communication between two threads are now exposed
  as part of the API, to allow re-use in other projects such as cAER.
- examples/dynapse_simple.c: added simple example for Dynap-SE access.
- examples/davis_cvgui.cpp: added example for converting frames to OpenCV
  Mat and visualizing them using OpenCV's GUI.
- src/timestamps.h: added timestamp debugging code, to measure drift
  between host and device. Only enabled in debug builds.
- src/davis.h: improved APS_DEBUG_FRAME support, now splits signal and
  reset read for debugging over all ROI regions.
- New device: support for upcoming DAVIS128 Raspberry-Pi integration.
- events/matrix4x4.h: new event type for 4x4 Matrices.
- C++ support: added toString() for devices.

BUG FIXES
- devices/dynapse.h: major API documentation cleanup.
- devices/dynapse.h: several function parameters of integer type were
  sized more correctly to reflect the range of their arguments.
- src/dynapse.c: DYNAPSE_CONFIG_CLEAR_CAM now clears all 64 CAMs for
  each neuron in a chip, resulting in all CAMs being fully cleared.
- Dynap-SE: default low-power biases are now the same across all cores.
- DAVIS: improved default timings for APS, providing better image quality,
  especially on new chips with internal ADC support.
- DAVIS/AutoExposure: fixed auto-exposure on FX3 devices, sometimes didn't
  run due to rounding errors when correcting for clock skew between
  parameters sent to the devices and parameters received back.
- events/frame.h: added documentation that using the assignment operator
  to copy Frame events is not possible, caerGenericEventCopy() should
  be used instead. The C++ variant deletes the assignment operator to
  enforce this. This fixes issue #26.
- src/usb_utils.c: fixed shutdown callback not being called on MacOS X.
  Also fixed possible dead-lock on USB transfer re-submit on Windows.
  This fixes issue #32.
- src/date_exchange.h: prevent possible dead-lock inside dataExchangeGet(),
  if signals are delivered always while not sleeping.
- portable_endian.h, portable_time.h: fixed stand-alone compilation.
- Fixed many code quality warnings by Sonarcloud.
- Travis-CI: fixed automatic test build issues on MacOS X.


Release 2.3.0 - 30.06.2017
INCOMPATIBLE CHANGES
- device.hpp: removed C++ dataStart() method with no arguments. As with
  the C interface, only the variant with all notification arguments
  remains. This is to ensure users think about the possible arguments,
  especially with regards to the shutdown notification, which usually
  should be defined and used.
- Dynap-SE: requires new logic version 4. Adds new features related
  to DAVIS integration and spike generation/playback.

NEW FEATURES
- CI: test builds are now done by Travis-CI and results sent off to
  Sonarcloud for code quality analysis.
- Examples: added example to show how to bias a DAVIS camera and
  configure it for external AER control (davis_enable_aer.cpp).
- Examples: added shutdown notification handler to all examples.

BUG FIXES
- CMake: fix CMake 3.X support on MacOS X.
- caerDeviceDataGet(): now properly returns NULL in blocking mode when
  the device goes away or stops sending any data, thus preventing a
  dead-lock when using blocking mode with this function.


Release 2.2.0 - 13.06.2017
INCOMPATIBLE CHANGES
- frame_utils.h: the frame utilities API was simplified. Now only one
  function for demosaic support respective contrast enhancement support
  exists, with the type (standard or OpenCV) as an enumeration argument.

NEW FEATURES
- Added support for the eDVS4337 serial port device. Serial port devices
  require the libserialport library (version 0.1.1 or newer), and as such
  are optional; enable them by passing -DENABLE_SERIALDEV=1 to cmake.
  The presence of this support can be verified with the libcaer.h define
  LIBCAER_HAVE_SERIALDEV. When disabled, the API for serial devices is
  still available, but will simply return false/NULL on any operation to
  indicate missing support. For usage details, see 'examples/edvs_simple.c'.
  To open the device, use the new caerDeviceOpenSerial() function with
  'deviceType' set to 'CAER_DEVICE_EDVS'. The usual caerDeviceOpen()
  will only work for supported USB devices. All other functions, such
  as caerDeviceDataGet(), remain the same and work for all device types.
- DAVIS Examples: added example for frame parsing. Thanks to Jonathan Müller.

BUG FIXES
- DVS128/DAVIS/Dynap-se: fix log messages on failure to open device and
  on successful shutdown.
- Dynap-se: calculate rate in caerDynapseWritePoissonSpikeRate() as float.
- IMU and PointXD Events: fix conversion of floating-point data to/from
  little-endian in-memory format. On MacOS X, this resulted in a function
  call with integer arguments and thus conversion to an integer value,
  destroying the original floating-point value.


Release 2.1.5 - 03.06.2017
NEW FEATURES
- Dynap-se: added support for experimental DYNAPSE_CONFIG_POISSONSPIKEGEN
  control (thanks to Carsten Nielsen).

BUG FIXES
- DAVIS FX3: require new logic revision 9910 for FX3 devices.
  This fixes a bug in timestamp synchronization between multiple
  cameras, and improves precision of some time related parameters,
  namely APS_EXPOSURE, APS_FRAME_DELAY and USB_EARLY_PACKET_DELAY.
- DAVIS: fix incorrect extra log message when opening FX3 devices.


Release 2.1.4 - 30.05.2017
BUG FIXES
- C++: functions defined in C++ header files, such as happens in log or
  utils, need the inline keyword to allow the linker to resolve symbols
  properly. Fixes #14.


Release 2.1.3 - 28.05.2017
NEW FEATURES
- DAVIS: new device type CAER_DEVICE_DAVIS is now available, handles both
  FX2 and FX3 board-based devices transparently.

BUG FIXES
- C++ devices/usb.hpp: add missing std::string include.
- Devices: log failure to put new event packet containers on ring-buffer for
  consumption by clients with higher log-level of CAER_LOG_NOTICE.


Release 2.1.2 - 24.05.2017
BUG FIXES
- FrameUtils/C++ FrameEvent: fix detection of OpenCV presence.
- CMake: add dependency on libm for math.h functions.


Release 2.1.1 - 23.05.2017
BUG FIXES
- AutoExposure: disable debug logging.
- AutoExposure: get out of highly over/under-exposed situations much faster.


Release 2.1.0 - 22.05.2017
INCOMPATIBLE CHANGES
- usb.h: the 'dataShutdownNotify' callback of caerDeviceDataStart() will only
  be called on exceptional shutdowns now. Normal shutdowns, such as those from
  calling caerDeviceDataStop(), will not execute the callback anymore.
  The documentation for caerDeviceDataStart() and caerDeviceDataStop() has been
  updated accordingly.
- DAVIS: requires new logic revision 9880.

NEW FEATURES
- davis.h: added automatic exposure control, can be turned on/off with
  the DAVIS_CONFIG_APS_AUTOEXPOSURE configuration parameter, defaults to off.
- EventPackets (C/C++): added caerEventPacketGetDataSize() and
  caerEventPacketGetSize() functions to easily get packet size in bytes.
- C++ FrameEvent: added new function getOpenCVMat() to frame event, if
  OpenCV is enabled. Returns a cv::Mat representing the frame's pixels, with
  support for deep-const by cloning (can be disabled for efficiency).
- C++ Utils: enhanced makeUniqueFromCStruct() and makeSharedFromCStruct() to
  also allow a 'takeMemoryOwnership' parameter that is forwarded to the event
  packet constructors; it defaults to true like the constructors themselves.
- Devices (C/C++): added new CAER_HOST_CONFIG_LOG config module with parameter
  CAER_HOST_CONFIG_LOG_LEVEL to set per-device log-level; by default the
  log-level is equal to the current global one at device opening.

BUG FIXES
- libcaer.hpp: undefine log-level names to avoid name clashes.
- DAVIS: removed variable APS ADC Shift, is not used by any camera currently
  offered, all have 10 bits precision.
- DAVIS: fix black APS pixels on very high illumination.
- DAVIS240: fix low range of APS pixels due to reduced ADC dynamic range.
- USB: libusb-based USB communication completely rewritten, now there is one
  thread responsible for USB event handling only, while transfers are sent,
  started/stopped etc. from other threads. This avoids possible dead-locks,
  or other threads stealing the USB event handling, or new settings not being
  sent to the device under certain load conditions. This required a small
  change in the API, please see "INCOMPATIBLE CHANGES" above for more details.


Release 2.0.2 - 27.04.2017
NEW FEATURES
- Logging: added caerLogFileDescriptorsGetFirst(), caerLogFileDescriptorsGetSecond()
  functions to get the two file descriptors where log messages go to.
- Logging: added caerLogVAFull() function to allow full control over all
  parameters involved in logging, especially the log-level.
- Dynap-se: added support for experimental DYNAPSE_CONFIG_SPIKEGEN
  control and improved DYNAPSE_CONFIG_SRAM control (thanks to Carsten Nielsen).
- Updated C++ examples to use C++ logging functions.
- Updated C++ interface to reflect above changes.


Release 2.0.1 - 16.03.2017
NOTE: this release is numbered 2.0.1 and not 2.0.0, because 2.0.0 was the
development version. To ensure people can depend on the now actually released
version, the version number was increased to 2.0.1 for the official release.

INCOMPATIBLE CHANGES
- The Frame Event format changed to have the origin (0, 0) in the upper left
  corner of the image, following standard computer graphics conventions now.
  Before it was in the lower left corner, following the OpenGL convention.
  This was changed to more easily be able to benefit from the wealth of
  computer graphics libraries available, such as OpenCV.
  caerFrameEventGetPixelArrayCGFormat() has been removed as a consequence.
- The Polarity Event format has also changed its origin to the upper left corner.
- Device INFO structures have additional data members now, be sure to
  recompile anything depending on those!
- CAER_HOST_CONFIG_PACKETS_MAX_*_SIZE and MAX_*_INTERVAL options have been
  removed, the whole data packeting system is now much simpler with only
  two configuration options to control it:
  - CAER_HOST_CONFIG_PACKETS_MAX_CONTAINER_PACKET_SIZE
  - CAER_HOST_CONFIG_PACKETS_MAX_CONTAINER_INTERVAL
  These act at the event packet container level. See packetContainer.h
  documentation on more information for how this works.
- Removed LIBCAER_LOG_NONE define from headers, it is now not possible
  to completely suppress log output anymore.
- caerGenericEventGetEvent() has had its bounds restricted to [0,eventNumber[
  instead of [0,eventCapacity[.
- Event packet copy functions have been renamed to:
  - caerEventPacketCopy()
  - caerEventPacketCopyOnlyEvents()
  - caerEventPacketCopyOnlyValidEvents()

NEW FEATURES
- Support for the aiCTX DYNAP-SE neuromorphic chip was added.
- Added new event type Spike Event for spiking neurons.
- Added new event types Point1D, Point2D, Point3D and Point4D to
  hold floating point data in multiple dimensions.
- New event packet functions were added:
  - caerEventPacketEquals()
  - caerEventPacketClear()
  - caerEventPacketClean()
  - caerEventPacketResize()
  - caerEventPacketGrow()
  - caerEventPacketAppend()
- Full native support for C++11 through header library (libcaercpp).
- Improved const-qualification of functions, to allow better compile
  time checks for read-only data. A GetEventConst() function was added
  to each event type as part of this, to get read-only events.
- Const, reverse and const-reverse iterators were added to all event types.
- davis.h: added support for stereo microphones on DAVIS346mini.
- davis.h: added support for extra signal detectors.
- network.h: added header with functions to help parse AEDAT 3.X
  network stream headers.
- frame.h: added support for more color filter configurations.
- packetContainer.h: better documentation, now tracks lowest and highest
  timestamps contained, as well as number of total and valid events.
- packetContainer.h: added caerEventPacketContainerUpdateStatistics() to
  update above statistics. Automatically called on each addition or
  removal of an event packet from the container.
- packetContainer.h: added caerEventPacketContainerFindEventPacketByType*(),
  caerEventPacketContainerCopyAllEvents() and caerEventPacketContainerCopyValidEvents()
  functions to search for event packets by type and to make deep-copies of them.
- special.h: added new Special Event types, to support extra signal detection
  schemes and add Frame Event related timing information.
- special.h: added caerSpecialEventPacketFindEventByType*() and
  caerSpecialEventPacketFindValidEventByType*() functions to search for
  a specified type of special event.
- libcaer.h: added LIBCAER_VERSION, LIBCAER_NAME_STRING,
  LIBCAER_VERSION_STRING and LIBCAER_HAVE_OPENCV defines.
- log.h: added caerLogVA() function to pass va_list arguments directly.


Release 1.0.3 - 28.03.2016
INCOMPATIBLE CHANGES
- davis_fx2.c: removed specific FX2 code, now uses same backend as FX3
  for sending all configuration values, due to new firmware version 3
  for FX2 DAVIS small-board cameras. A firmware update is required,
  please follow the instructions at https://inivation.com/support/software/reflashing/.

NEW FEATURES
- frame.h: add function caerFrameEventGetPixelArrayCGFormat() to
  Frame Event, allows to get a copy of the pixels array in the
  standard computer graphics format (pixel (0, 0) in upper left
  corner) efficently.
- davis.h: add DAVIS_CONFIG_APS_ADC_TEST_MODE parameter to APS module.


Release 1.0.2 - 08.01.2016
IMCOMPATIBLE CHANGES
- frame.h: rename channel number to color channels and add color
  filter information, to better specify the information needed
  to reconstruct color frames. The 'enum caer_frame_event_color_channels'
  and 'enum caer_frame_event_color_filter' hold the possible values.
  This change is backwards-compatible with older frame format!
- davis.h, dvs128.h: changed info data structure's integers to be
  signed for better cross-language compatibility. Also 'deviceID'
  can now be compared directly with 'sourceID' from event packets.
- davis.h: changed type of 'apsColorFilter' in info data structure
  to take advantage of new 'enum caer_frame_event_color_filter'.

NEW FEATURES
- common.h: add generic functions for event packet copying, with
  support for packet size reductions (copy only valid).
- libcaer.h: add generic clear, get and set functions for bitfields,
  and use them in all the event functions to avoid errors.
- config.h: add device configuration event type, for tracking
  of device configuration changes in the event stream.
- log.c: add timezone information to log message time information.
- dvs128_simple.cpp, davis_simple.cpp: add C++11 example variants.
- Enable more Clang compiler warnings.

BUG FIXES
- davis_common.c: only update the ROI size information if ROI
  updates actually came in from the device.
- Fix and improve documentation, especially for the frame event.
- Fix off-by-one in event's GetEvent() function's warning log message.
- device.c: mark global function pointer arrays static.
- common.h, frame.h: fix compilation of inline functions in
  strict C++11 mode.


Release 1.0.1 - 06.11.2015
INCOMPATIBLE CHANGES
- Requires firmware version 2 and logic revision 7449.
- usb.h: improved caerDeviceDataStart() API to also allow for
  notification of data acquisition shutdown, to be able to react
  to abnormal shutdown cases, like when a device is unplugged.
- frame.h: changed in-memory format for easier handling and compatibility
  with the other event formats (all-in-one memory block).
- davis.h: rename DAVIS240 APSOVERFLOWLEVEL to APSOVERFLOWLEVELBN.

NEW FEATURES
- Headers are C++ compatible and stand-alone now.
- MacOS X support.
- Added pkg-config file for library.
- Full API documentation (see docs/ for PDF).
- Various cmake/build improvements. Support out-of-tree builds.
- Add iterator macros for EventPackets.
- frame.h: added ROI region ID tracking, as well as ROI position.
  Added caerFrameEventGetExposureLength() and caerFrameEventGetTimestamp(),
  which is defined as the median of the exposure times.
  Added caerFrameEventPacketGetPixelsSize() and caerFrameEventPacketGetPixelsMaxIndex()
  for EventPacket-level size information.
  Added caerFrameEventGetPixelsSize() and caerFrameEventGetPixelsMaxIndex()
  for Event-level size information.
- log.h: added caerLogFileDescriptorsSet() to allow logging to
  up to two different file descriptors (defaults to STDERR only).
- davis.h: added chipID check macros.
- davis.h: added DAVIS_CONFIG_APS_SNAPSHOT to take one frame snapshots.
- dvs128.h: added DVS128_CONFIG_DVS_TS_MASTER to select timestamp
  master or slave behavior (timestamp synchronization).
- davis_common.c: added support for outputting only reset read or
  signal read frames, for debugging purposes.
- c11threads_posix.h: C11-compatible thread abstraction, for
  both Linux and MacOS X, based on POSIX Threads.

BUG FIXES
- Relaxed atomic operations memory constraints for better
  performance on weakly-ordered architectures (like ARM).
- log.c: call tzset() before localtime_r(), as per standard.
- davis_common.c: improved Region of Interest support (APS).
- davis_fx2.c: keep GlobalShutter flag correctly in-sync.
- davis_fx3.c: fixed support for new FX3 devices.
- packetContainer.h: handle container being NULL by returning NULL.


Release 1.0.0 - 02.10.2015
- Initial release.


Wiki Tutorials

See ROS Wiki Tutorials for more details.

Source Tutorials

Not currently indexed.

Package Dependencies

No dependencies on ROS packages.

System Dependencies

Dependant Packages

Launch files

No launch files found

Messages

No message files found.

Services

No service files found

Plugins

No plugins found.

Recent questions tagged libcaer at Robotics Stack Exchange

libcaer package from libcaer repo

libcaer

Package Summary

Tags No category tags.
Version 1.0.0
License BSD-2
Build type CMAKE
Use RECOMMENDED

Repository Summary

Checkout URI https://github.com/ros-event-camera/libcaer.git
VCS Type git
VCS Version ros_event_camera
Last Updated 2024-01-08
Dev Status DEVELOPED
CI status No Continuous Integration
Released RELEASED
Tags No category tags.
Contributing Help Wanted (0)
Good First Issues (0)
Pull Requests to Review (0)

Package Description

library for event based sensors

Additional Links

No additional links.

Maintainers

  • Bernd Pfrommer

Authors

No additional authors.
WINDOWS BUILD INSTRUCTIONS
==========================
We support building libcaer on the Windows platform by using the MinGW32/64 compilers
and the MSYS2 environment. The result is a static and a dynamic DLL, as well as the
appropriate header files, so that libcaer can be used in MinGW itself.

Visual Studio and the MSVC compiler are not supported out-of-the-box right now, to use
a DLL compiled by MinGW additional steps are necessary: http://www.mingw.org/wiki/MSVC_and_MinGW_DLLs

Following are detailed step-by-step instructions to install the required
components and get everything building, we use MinGW64 here for the
64-bit Windows platform, if you want to build for 32-bit Windows, just replace all
mentions of 'x86_64' with 'i686'. Whenever you want to install a package, use
the MSYS2 shell, while to build code, use the MinGW32/64 shells!

1) Get MSYS2 from https://msys2.github.io/ and download the appropriate installer.
Follow the instructions to install the system and update its packages. During the
system package upgrade, ignore any heap mismatch errors, and follow what the last
warning tells you to do (close the shell). The base system upgrade seems to break
the Start Menu shortcuts, so from now on start MSYS2 by going to its directory
'C:\msys64\' and double-clicking on 'msys2_shell.cmd'.

2) Install MinGW GCC: pacman -S mingw-w64-x86_64-gcc

3) Install Make/CMake: pacman -S make mingw-w64-x86_64-cmake

4) Install pkg-config: pacman -S mingw-w64-x86_64-pkg-config

5) Install libusb: pacman -S mingw-w64-x86_64-libusb

6) Place the libcaer source in a location easily accessible to MSYS2. We usually
put the source code into 'C:\msys64\home\libcaer\' and use TortoiseGit
(https://tortoisegit.org/) or git from the MSYS2 shell (pacman -S git) to get it.

7) Switch to the MinGW build shell, double-click on 'mingw64.exe' in 'C:\msys64\'.

8) Switch to the libcaer checkout directory: cd /home/libcaer/

9) Configure, run CMake: cmake -G "MSYS Makefiles" -DCMAKE_INSTALL_PREFIX=/mingw64 .

10) Build, run Make: make

11) Install: make install

Congratulations, you now have a working libcaer on Windows! The output from that
last 'make install' will have told you exactly where all the DLLs and header
files are located on the file-system. You can now try building one of the
examples in the examples/ directory to verify functionality.


CHANGELOG
Release 3.3.15 - 07.03.2023

BUG FIXES
- eDVS: fix device discovery. Thanks to Benjamin Ward-Cherrier.
- Windows: control MSVC build with BUILD_CONFIG_VCPKG flag.
- Devices: fix compiler warnings.
- Removed obsolete DAVIS_RPI device.


Release 3.3.14 - 25.03.2022

NEW FEATURES
- Full native MSVC/Windows build support.

BUG FIXES
- davis_cvgui example: fix incorrect biasing and APS frame settings.
- USB: fix firmware version check for DVXplorer Mini.


Release 3.3.13 - 25.02.2022

NEW FEATURES
- DVXplorer (Mini): add control of readout timing parameters, readout restart.


Release 3.3.12 - 12.11.2021

BUG FIXES
- DVXplorer Mini: fix inverted polarity.
- dvx_bw_test example: fix length of time interval for
  bandwidth estimation.
- Fedora/Ubuntu: fix packaging, use at least GCC-10 to compile.


Release 3.3.11 - 16.07.2021

NEW FEATURES
- Native MacOS ARM (M1) builds, Big Sur compatibility.
- Ubuntu 21.04 Hirsute support.
- Fedora 34 support.
- Ubuntu 16.04 Xenial is no longer supported!
- Cameras: added support for new DVXplorer Mini camera model.


Release 3.3.10 - 16.04.2021

BUG FIXES
- USB: when serial number cannot be determined, use all bits from
  USB bus-number/dev-address to construct the fake name (issue #123).
- Examples Device Discovery: add support for DVXplorer and EVK.
  Serial Number in Device Discovery can only be used if the
  device could be opened correctly (deviceErrorOpen == false).


Release 3.3.9 - 21.12.2020

BUG FIXES
- DVXplorer: fix mapping of events when dual-binning is
  enabled (issue #119).


Release 3.3.8 - 15.09.2020

NEW FEATURES
- Linux Udev: simplify udev rules into one file (issue #114).

BUG FIXES
- Samsung EVK: allow multiple EVKs to be selected by a temporary
  serial number generated from USB bus addresses (issue #113).
- Samsung EVK: more robust parser for 231Y chip data (issue #115).


Release 3.3.7 - 07.05.2020

BUG FIXES
- Samsung EVK: implement full 64bit timestamps (issue #99).


Release 3.3.6 - 18.04.2020

NEW FEATURES
- MacOS X: set default CMake destination to /usr/local on Apple systems.
- Ubuntu: support for release 20.04 LTS 'Focal Fossa'.

BUG FIXES
- USB: do not claim device interface on discovery, not needed for
  simple info requests on control ep0 (issue dv-gui#291).
- Samsung EVK: enable USB transfer timeout (set to 500us), so that
  even on low event rates, data keeps coming in with low latency.


Release 3.3.5 - 12.03.2020

INCOMPATIBLE CHANGES
- DVXplorer (Lite): firmware update to version 8.
  Use Flashy to update as per documentation:
  https://inivation.gitlab.io/dv/dv-docs/docs/update-firmware/

BUG FIXES
- USB: improve detection of device serial number.
- USB: optimize setting number/size of USB transfers.


Release 3.3.4 - 04.03.2020

INCOMPATIBLE CHANGES
- DVXplorer: firmware update to version 7.
  Use Flashy to update as per documentation:
  https://inivation.gitlab.io/dv/dv-docs/docs/update-firmware/

NEW FEATURES
- Cameras: added support for DVXplorer Lite camera.
- USB: added support for libusb logging.


Release 3.3.3 - 01.02.2020

BUG FIXES
- Samsung EVK: fix possible non-monotonic timestamp at startup.
- DVXplorer: fix crop start/end address inversion.


Release 3.3.2 - 24.01.2020

BUG FIXES
- DVXplorer/DVS132S: fix IMU accel/gyro scale detection.
- Samsung EVK: fix non-monotonic timestamps when a reference timestamp
  event is lost due to high USB traffic.


Release 3.3.1 - 17.01.2020

NEW FEATURES
- Support for new DVXplorer and Samsung EVK devices added.


Release 3.3.0 - 24.12.2019

NEW FEATURES
- Support for mini-eDVS serial device added to eDVS code.

BUG FIXES
- eDVS: fix inverted event polarity.


Release 3.2.2 - 15.07.2019

BUG FIXES
- CMake: fix compatibility with older pre-6.0 GCCs (issue #93).
- CMake: drop required version to 3.10 (Ubuntu Bionic).
- USB devices: better error messages on failure to open a device,
  better distinction of generic 'any-camera' case and specific
  USB ports or serial numbers.
- eDVS: fix strncpy() compiler warning, ensure serial number is
  always NULL terminated.
- DAVIS: fix APS frame color interpolation for color cameras
  when ROI is enabled (issue #94).


Release 3.2.0 - 20.05.2019

INCOMPATIBLE CHANGES
- DAVIS firmware and logic update: DAVIS FX3 firmware v6 and logic v18.1.
  Fixes a possible USB data corruption bug in some rare cases, especially
  on MacOS X systems. Improves quality of APS frames.
- All devices: dataStart() stops all producers and resets all buffers,
  ensuring no stale data remains. Producers must be enabled only after
  having called dataStart(), it not using the START_PRODUCERS feature.
- CMake: version 3.12.0 or newer of CMake is now required.
- Ubuntu: dropped support for Trusty 14.04.
- DVS128: renamed logicVersion to firmwareVersion in dvs128_info struct.
- Python bindings: removed experimental Python SWIG bindings.
  Please use https://github.com/duguyue100/pyaer/ instead (issue #65).
- CMake: installed caer-base.cmake dropped its argument. Use standard
  CMake facilities to select the needed C/C++ standard version.
- CMake: caer-base.cmake does not provide the following variables anymore:
  - CM_BUILD_DIR (not useful)
  - CM_SHARE_DIR (already known when accessing the file)
  - CAER_C_THREAD_LIBS (renamed to SYSTEM_THREAD_LIBS)
  - CAER_MODULES_DIR (not part of libcaer)
- CMake: renamed CAER_LOCAL_INCDIRS/CAER_LOCAL_LIBDIRS/CAER_LOCAL_PREFIX
  to USER_LOCAL_INCDIRS/USER_LOCAL_LIBDIRS/USER_LOCAL_PREFIX.
- Events: removed unused event types: Config, Ear, Matrix4x4,
  Point1D, Point2D, Point3D, Point4D and Sample (issue #85).

NEW FEATURES
- Devices: added support for the DVS132S test chip in the C/C++ API.
- CMake: added UDEV_INSTALL switch to disable udev rules installation (issue #82).
- CMake: search for and support OpenCV 4 (issues #83, #90).
- GCC/CMake: add more compiler warnings.
- C++ ringbuffer.hpp: add comparison operators.
- Examples: compile and install examples with -DEXAMPLES_INSTALL=1.
- frame_utils.h: added caerFrameUtilsPixelColor() function (issue #89).
- Device discovery: firmwareVersion is always defined for USB devices
  during device discovery. SerialPortName and SerialBaudRate are always
  defined for eDVS devices (issue #88).

BUG FIXES
- CMake: ensure LIBCAER_HAVE_SERIALDEV and LIBCAER_HAVE_OPENCV defines
  in libcaer.h are always properly defined to be 0 or 1.
- device_discovery.c example: fix compilation with new struct davis_info.
- Examples: fix incorrect defines.


Release 3.1.0 - 27.11.2018

INCOMPATIBLE CHANGES
- DAVIS: require firmware version 5 and logic version 18. Fixes issues with
  IMU Run Controls, fixes corrupt data in DAVIS BLUE 346, enables IMU on
  DAVIS RED 346.
- Logging: caerLogVAFull() API has been simplified, the two file descriptor
  arguments have been removed, use the proper caerLogFileDescriptorsSet()
  API to set them when needed.

NEW FEATURES
- Logging: added caerLogCallbackSet() and caerLogCallbackGet() functions
  to set/get a global callback function to be executed on every caerLog()
  logging call, the log message and its size are passed to the callback.

BUG FIXES
- C++ API frame.hpp: fix demosaic(), set number of (valid) events in
  resulting packet correctly. Don't log errors if operation cannot
  be performed, just copy over unchanged pixel data.
  Also only operate on valid events for demosaic() and contrast().
- DAVIS IMU: temperature readings on InvenSense 6050 were off by +1.53°C.
- CMake: fix linking on Windows.
- Ubuntu Packaging: build with correct GCC version on Ubuntu 14.04 Trusty.
- Logging: performance improvements; move expensive check (TLS) to
  last position, ensure log-level is checked first in custom loggers.
- Fix various compiler warnings.


Release 3.0.0 - 23.10.2018

INCOMPATIBLE CHANGES
- frame_utils.h: caerFrameUtilsDemosaic() and caerFrameUtilsContrast()
  functions have different signatures to allow for more flexibility in
  where frames to be modified are sourced and stored. Also the type
  enums changed to add Bayer->Gray conversion options.

- davis.h: support for new logic version 16:
 - changed, slightly more efficient data encoding (IMU, APS).
 - cleaned up device configuration, removed lots of unused debug options.
 - changed APS FrameDelay to FrameInterval, to allow for setting time
   between frames and thus control the frame rate directly.
 - new hardware filter options for DVS: Background Activity, Refractory
   Period, Skip Events, Polarity Suppress/Flatten, Region of Interest (ROI)
   and single Pixel Filtering.
 - full support for new iniVation devices: DAVIS346 Blue, DAVIS346 Red
   and DAVIS346 Red Color.

This represents a new major release version, as it breaks the API
for DAVIS devices: the available configuration options (#defines in
davis.h) heavily change; the struct caer_davis_info and the
caerDavisROIConfigure() function also change incompatibly.
Please ensure all applications targeting DAVIS are recompiled!

NEW FEATURES
- C++ EventPackets: new function getHeaderPointerForCOutput() to get
  the underlying C EventPacket pointer and ensure that memory ownership
  is transferred to it, and not left with the C++ EventPacket.
- FrameEventPackets: new caerFrameEventPacketAllocateNumPixels() function
  to allocate based on total number of pixels instead of X/Y lengths.
- davis.h: added new DAVIS_CONFIG_APS_FRAME_MODE configuration option.
- davis.h: added enums for easier IMU option handling (caer_davis_imu_types,
  caer_davis_imu_invensense_accel_scale, caer_davis_imu_invensense_gyro_scale).
- CMake: automatically set CMAKE_INSTALL_PREFIX to /usr if nothing
  was specified by user on Unix/Linux, this avoids installs to /usr/local
  that often lead to the libraries not being found correctly.
- CMake: support for the ccache compiler cache added.
- CMake: install udev rules on Unix/Linux, to allow access to iniVation
  devices. Default rules chmod 0666 the devices, using -DUDEV_SELINUX=1
  installs a SELinux-enabled version for systems using TAG 'uaccess'.
- Ubuntu Packaging: libcaer is now split in two packages: libcaer and
  libcaer-dev. It is now built using debhelper, and the static library
  version is now also installed by libcaer-dev.
- Fedora Packaging: libcaer is now split in three packages: libacer,
  libcaer-devel and libcaer-static. The static version is in the latter.
- examples/davis_text.cpp: added new example for writing data to a text file.

BUG FIXES
- Packaging: cmake dependency bumped to 2.8.12 in Ubuntu/Fedora packages.
- src/usb_utils.c: fixed firmware/logic update message to be clearer.
- src/container_generation.h: clearer message on dropped event packets.


Release 2.5.2 - 25.09.2018
INCOMPATIBLE CHANGES
- CMake: raised minimum CMake dependency to version 2.8.12, some
  variables we use are only defined starting with this version.
  It also corresponds to the version present in the oldest distribution we
  support: Ubuntu 14.04 Trusty.

NEW FEATURES
- CMake: added CAER_LOCAL_INCDIRS/CAER_LOCAL_LIBDIRS/CAER_LOCAL_PREFIX
  variables to enable easier cross-compilation setups.
- CMake: added CMake configuration files, so that CMake may find the library
  using its own package detection system, in addition to the existing pkg-config
  based detection. Thanks to Felix Schwitzer (see issue #72 for more details).
- devices/davis.h: added caerBiasCoarseFineFromCurrent() and caerBiasCoarseFineToCurrent()
  functions to convert between coarse-fine bias values and the current they
  represent (in picoAmpere). Also available in the C++ interface (issue #40).
- filters/dvs_noise.h: added statistics on number of filtered events separated
  by ON/OFF polarity. Added caerFilterDVSNoiseStatsApply() function to only
  gather statistics and not modify the given polarity event packet (read-only
  mode). Also available in the C++ interface.

BUG FIXES
- src/usb_utils.c: check for exact firmware and logic versions.
- events/packetContainer.h: fix sizes used in caerEventPacketContainerCopyAllEvents()
  and caerEventPacketContainerCopyValidEvents() to allocate new containers.


Release 2.5.0 - 17.07.2018
INCOMPATIBLE CHANGES
- davis.h: removed support for stereo microphones, this was never used in any
  released devices, only for internal experiments on a limited prototype run.
- Events: event packet allocation functions are now in the various headers,
  making it possible to create, use and destroy event packets and events by
  just including the headers, without having to link to the full library.
  CAER_EVENTS_HEADER_ONLY needs to be set before inclusion for this to fully
  work, else there is a dependency on caerLog(), which is still in the library.
  This is very useful for tools or network receivers. A re-compile of any
  programs using these functions is required to avoid runtime linking errors.
- CMake: cleanup linked libraries, libm and librt are not part of the
  default dependencies anymore, they need to be added manually to programs
  that actually use them. Same goes for thread support, which is now only
  exported as the 'CAER_C_THREAD_LIBS' CMake variable but not automatically
  included anywhere.

NEW FEATURES
- Device Discovery: added capability of finding any accessible supported
  devices on a system, getting information on them, and then opening them.
  New header 'devices/device_discover.h' with functions caerDeviceDiscover()
  and caerDeviceDiscoverOpen(), example provided in 'examples/device_discovery.c'.
  C++ interface available in 'devices/device_discover.hpp', namespace is
  'libcaer::devices::discover'.
- Error reporting: both caerDeviceOpen() and caerDeviceOpenSerial() now
  set 'errno' on failure to provide more precise reasons for the failure,
  error codes are available in the enum 'caer_error_codes'.
- log.h: new functions caerLogDisable(true/false) to turn off all logging
  for a region of code (per-thread), and caerLogDisabled() to check current
  status of logging. C++ interface available in 'libcaer::log'.
- C++ packetContainer.hpp: support construction of a new packet container
  based on a C-style caerEventPacketContainer, with optional memory
  ownership take-over for the contained packets.
- C++ utils.hpp: libcaer::events::utils::makeShared/Unique now support the
  Matrix 4x4 event type too.
- C++ frame.hpp: new define LIBCAER_FRAMECPP_OPENCV_INSTALLED to enable
  special getOpenCVMat() support independently of libcaer itself having
  support for OpenCV.
- events/common.h: add new functions caerEventPacketGetDataSizeEvents()
  and caerEventPacketGetSizeEvents() to get size of data part of an
  event packet, disregarding capacity.
- Examples: added 'davis_simple_2cam.c' example for a two camera setup.
- device.h: CAER_SUPPORTED_DEVICES_NUMBER define is now public.
- eDVS: added 'serialPortName' and 'serialBaudRate' members to its info
  structure, contents are OS-specific.
- eDVS: analyze startup message to confirm the presence of an eDVS device.
- eDSV: flush buffers on open to avoid possible garbage data from previous
  open attempts to interfere with eDVS detection.
- USB: check both firmware and logic version always and notify users of
  needed upgrades for both at the same time; this avoids multiple notify
  and upgrade cycles if both change quickly or the user hasn't upgraded
  in a long time.
- filters/dvs_noise.h: new filter module to reduce noise from the DVS
  output, integrates a hot pixel filter (with learning), a background-
  activity filter and a refractory period filter. C++ interface available.
  New example 'davis_cvgui_filters.cpp' shows usage.
- devices/davis.h: new define DAVIS_CONFIG_DVS_FILTER_PIXEL_AUTO_TRAIN to
  automatically discover abnormally active pixels (hot-pixels) in the camera
  output and then filter them at the hardware level (FPGA/CPLD). This only
  works on newer camera that support the hardware pixel filtering, it does
  nothing on older systems and just returns 'false' on get/set.
- devices/davis.h: support new DAVIS346 with InvenSense MPU 9250, new IMU
  options via defines DAVIS_CONFIG_IMU_GYRO_DLPF and DAVIS_CONFIG_IMU_ACCEL_DLPF.
- CMake: new flag ENABLE_STATIC available to enable static compilation
  of libcaer in addition to shared library.
- Code is now formatted using clang-format.

BUG FIXES
- C++: add header inclusions for possibly missing types.
- C++ devices/serial.hpp: fix warning about shadowed variable, improve
  error message on failure to open by adding serial baud-rate to message.
- C++ packetContainer.hpp: fix construction of event packets, resulting
  size was incorrect due to wrong vector sizing at initialization.
- C++ events/common.hpp: shrink_to_fit() fails on empty packets, since
  resize to zero is not allowed. Now correctly detects this case.
- Devices: documentation updates, fix typos and precise usage of
  'deviceString' member in device info structures; it is only valid
  during the life-time of the device!
- eDVS: name case changed to 'EDVS-4337' to follow firmware.
- eDVS: faster startup due to shorter delays.
- eDVS: request exclusive access to serial device on Unix (Linux/MacOSX),
  this was already the default on Windows.
- Dynap-SE: delay after initial configuration extended from 1s to 4s,
  some devices seem to need longer delays to start up properly.
- USB: better log messages on failure, reduce event handling timeout to
  10ms from 1s for quicker response to shutdown requests.
- AutoExposure: debug log messages from the auto-exposure module now
  respect the per-device log-level settings.


Release 2.4.2 - 23.03.2018
NEW FEATURES
- Install shared CMake file 'caer-base.cmake' to simplify common build
  steps and checks used in libcaer, cAER and its modules.
- examples/davis_cvgui.cpp: improved example, checks for libcaer compiled
  with proper OpenCV support (issue #55), shows events in a separate
  window, compilation documented in README (PR #53).

BUG FIXES
- Improve Python examples, use numpby for better performance.
- C++ Devices: let users derive from device classes (PR #56).
- C++ EventPackets: fix iteration over empty packet, due to back()
  incorrectly throwing an exception when size is zero because of the
  usage of the -1 backwards lookup notation.


Release 2.4.0 - 05.12.2017
INCOMPATIBLE CHANGES
- DAVIS: require new firmware version 4 and logic version 9912.
- Dynap-SE: require new logic version 5.
- devices/dynapse.h: the chip IDs are now mapped to be 0,1,2,3 for
  U0,U1,U2,U3 respectively, making them as easy to use and loop over
  as the core IDs. The defines have been updated, so if you've been
  properly using them, no change is needed other than a recompile.
- src/dynapse.c: spike events coming from a Dynap-SE's chip ID 0 (U0) do
  now have a chip ID of 0, the same as the chip ID used to configure the
  system, removing this small inconsistency. All usages of
  'DYNAPSE_CONFIG_DYNAPSE_U0+1' must now remove the '+1', chip U0 is not
  to be treated differently anymore in regards to its USB output chip ID.
- events/spike.h: caerSpikeEventGetX() and caerSpikeEventGetY() were
  inverting the meaning of column/row, resulting in inconsistencies
  when using those two functions in comparison to system configuration.
  This has now been corrected, and the functions moved to devices/dynapse.h
  with the new names of caerDynapseSpikeEventGetX/Y(), due to them being
  specific to the architecture of the Dynap-SE neuromorphic processor.
  Now both chips, cores and neurons, as interpreted through these functions,
  are set out in row-major order (similar to computer vision).
- devices/dynapse.h: the caerDynapseWriteSram() function is being deprecated
  in favour of its newer variant caerDynapseWriteSramN().
- devices/dynapse.h: removed define DYNAPSE_CONFIG_SRAMROW.
  Use DYNAPSE_CONFIG_NUMNEURONS and DYNAPSE_CONFIG_NUMSRAM_NEU.
- devices/dynapse.h: removed defines DYNAPSE_MAX_USER_USB_PACKET_SIZE,
  DYNAPSE_CONFIG_MAX_USB_TRANSFER and DYNAPSE_CONFIG_MAX_PARAM_SIZE.
  Those are internal implementation details, and caerDynapseSendDataToUSB()
  now accepts arbitrarily sized data to send, the user does not have to
  divide it in chunks of a particular size anymore.
- devices/dynapse.h: improved and changed 'struct caer_bias_dynapse' to
  reflect actual biasing of device correctly.
- devices/device.h: CAER_HOST_CONFIG_PACKETS_MAX_CONTAINER_PACKET_SIZE's
  default value has been changed to zero, disabling the size division of
  packets by default. Packet size is now dictated, by default, only by
  the time interval, with a value of 10 milliseconds.

NEW FEATURES
- Packaging: packages for Fedora, Debian and Gentoo Linux, as well as
  MacOS X via Homebrew are now available for each new libcaer release.
  For more information please visit:
  https://inivation.com/support/software/libcaer/#automated-installation
- Python bindings: added bindings for Python 2/3 using SWIG. See
  bindings/python_swig/ and bindings/python_swig/examples/ for examples.
  NOTE: this needs a patched Swig, see 'https://github.com/swig/swig/pull/1166'.
- CMake: added support for generating RPM/DEB files via CPack, to
  easily be able to package one's own build.
- DAVIS/Dynap-SE: added support for AER and Multiplexer statistics, to
  examine number of events received, filtered and dropped.
- DAVIS: added support for hardware DVS Refractory Period filter on
  newer FX3 based devices.
- DAVIS: added support for DVS ROI filtering.
- DAVIS: added support for APS Quad-ROI (up to four independent
  regions of interest can be configured and enabled). The number of
  supported ROI regions is defined with DAVIS_APS_ROI_REGIONS_MAX.
- devices/davis.h: added 'caerDavisROIConfigure()' function to atomically
  and efficiently configure and enable ROI regions.
- devices/davis.h: expanded 'struct caer_davis_info' to account for the
  above new features: 'dvsHasROIFilter', 'dvsHasStatistics' and 'muxHasStatistics'.
- devices/dynapse.h: expanded 'struct caer_dynapse_info' to account for
  the above new features: 'aerHasStatistics' and 'muxHasStatistics'.
- devices/device.h: added 'caerDeviceConfigGet64()' to read 64-bit
  configuration parameters, needed for statistics support.
- src/dynapse.c: the Dynap-SE caerDeviceSendDefaultConfig() function now
  performs full initialization of the device and its chips. To reliably
  work with the device, make sure to always call this before setting
  your own custom configuration afterwards.
- devices/dynapse.h: added caerDynapseWriteSramN() function, uses global
  neuron ID [0,1023] instead of core ID/neuron ID syntax. Arguments are
  also directly compatible with caerDynapseGenerateSramBits().
- devices/dynapse.h: renamed define DYNAPSE_CONFIG_NUMCAM to
  DYNAPSE_CONFIG_NUMCAM_NEU to better explain what it is.
- devices/dynapse.h: added caerBiasDynapseGenerate() and caerBiasDynapseParse()
  functions to handle the improved 'struct caer_bias_dynapse' and
  transform it to/from the bit-wise bias configuration representation.
- devices/dynapse.h: added caerDynapseGenerateSramBits() function to
  generate SRAM configuration bits based on input arguments.
- devices/dynapse.h: added caerDynapseCoreXYToNeuronId() and
  caerDynapseCoreAddrToNeuronId() functions to calculate chip global
  neuron addresses (range [0,1023]).
- devices/dynapse.h: added caerDynapseSpikeEventFromXY() function to
  have a reverse transformation to caerDynapseSpikeEventGetX/Y().
- devices/dynapse.h: added DYNAPSE_CONFIG_TAU2_SET, DYNAPSE_CONFIG_TAU1_RESET
  and DYNAPSE_CONFIG_TAU2_RESET defines for caerDeviceConfigSet()
  usage, to allow configuration of which neuron leakage bias to use.
- events/common.h: added caerGenericEventCopy() function to copy
  events from one place in memory to another.
- events/*.h: added two new functions 'caerXXXEventPacketFromPacketHeader()'
  and 'caerXXXEventPacketFromPacketHeaderConst()' to transform a packet
  header pointer to the proper event packet pointer. This checks the
  type, and is needed for proper bindings support.
- ringbuffer.h/hpp: the ring-buffer functions for producer-consumer
  high-performance communication between two threads are now exposed
  as part of the API, to allow re-use in other projects such as cAER.
- examples/dynapse_simple.c: added simple example for Dynap-SE access.
- examples/davis_cvgui.cpp: added example for converting frames to OpenCV
  Mat and visualizing them using OpenCV's GUI.
- src/timestamps.h: added timestamp debugging code, to measure drift
  between host and device. Only enabled in debug builds.
- src/davis.h: improved APS_DEBUG_FRAME support, now splits signal and
  reset read for debugging over all ROI regions.
- New device: support for upcoming DAVIS128 Raspberry-Pi integration.
- events/matrix4x4.h: new event type for 4x4 Matrices.
- C++ support: added toString() for devices.

BUG FIXES
- devices/dynapse.h: major API documentation cleanup.
- devices/dynapse.h: several function parameters of integer type were
  sized more correctly to reflect the range of their arguments.
- src/dynapse.c: DYNAPSE_CONFIG_CLEAR_CAM now clears all 64 CAMs for
  each neuron in a chip, resulting in all CAMs being fully cleared.
- Dynap-SE: default low-power biases are now the same across all cores.
- DAVIS: improved default timings for APS, providing better image quality,
  especially on new chips with internal ADC support.
- DAVIS/AutoExposure: fixed auto-exposure on FX3 devices, sometimes didn't
  run due to rounding errors when correcting for clock skew between
  parameters sent to the devices and parameters received back.
- events/frame.h: added documentation that using the assignment operator
  to copy Frame events is not possible, caerGenericEventCopy() should
  be used instead. The C++ variant deletes the assignment operator to
  enforce this. This fixes issue #26.
- src/usb_utils.c: fixed shutdown callback not being called on MacOS X.
  Also fixed possible dead-lock on USB transfer re-submit on Windows.
  This fixes issue #32.
- src/date_exchange.h: prevent possible dead-lock inside dataExchangeGet(),
  if signals are delivered always while not sleeping.
- portable_endian.h, portable_time.h: fixed stand-alone compilation.
- Fixed many code quality warnings by Sonarcloud.
- Travis-CI: fixed automatic test build issues on MacOS X.


Release 2.3.0 - 30.06.2017
INCOMPATIBLE CHANGES
- device.hpp: removed C++ dataStart() method with no arguments. As with
  the C interface, only the variant with all notification arguments
  remains. This is to ensure users think about the possible arguments,
  especially with regards to the shutdown notification, which usually
  should be defined and used.
- Dynap-SE: requires new logic version 4. Adds new features related
  to DAVIS integration and spike generation/playback.

NEW FEATURES
- CI: test builds are now done by Travis-CI and results sent off to
  Sonarcloud for code quality analysis.
- Examples: added example to show how to bias a DAVIS camera and
  configure it for external AER control (davis_enable_aer.cpp).
- Examples: added shutdown notification handler to all examples.

BUG FIXES
- CMake: fix CMake 3.X support on MacOS X.
- caerDeviceDataGet(): now properly returns NULL in blocking mode when
  the device goes away or stops sending any data, thus preventing a
  dead-lock when using blocking mode with this function.


Release 2.2.0 - 13.06.2017
INCOMPATIBLE CHANGES
- frame_utils.h: the frame utilities API was simplified. Now only one
  function for demosaic support respective contrast enhancement support
  exists, with the type (standard or OpenCV) as an enumeration argument.

NEW FEATURES
- Added support for the eDVS4337 serial port device. Serial port devices
  require the libserialport library (version 0.1.1 or newer), and as such
  are optional; enable them by passing -DENABLE_SERIALDEV=1 to cmake.
  The presence of this support can be verified with the libcaer.h define
  LIBCAER_HAVE_SERIALDEV. When disabled, the API for serial devices is
  still available, but will simply return false/NULL on any operation to
  indicate missing support. For usage details, see 'examples/edvs_simple.c'.
  To open the device, use the new caerDeviceOpenSerial() function with
  'deviceType' set to 'CAER_DEVICE_EDVS'. The usual caerDeviceOpen()
  will only work for supported USB devices. All other functions, such
  as caerDeviceDataGet(), remain the same and work for all device types.
- DAVIS Examples: added example for frame parsing. Thanks to Jonathan Müller.

BUG FIXES
- DVS128/DAVIS/Dynap-se: fix log messages on failure to open device and
  on successful shutdown.
- Dynap-se: calculate rate in caerDynapseWritePoissonSpikeRate() as float.
- IMU and PointXD Events: fix conversion of floating-point data to/from
  little-endian in-memory format. On MacOS X, this resulted in a function
  call with integer arguments and thus conversion to an integer value,
  destroying the original floating-point value.


Release 2.1.5 - 03.06.2017
NEW FEATURES
- Dynap-se: added support for experimental DYNAPSE_CONFIG_POISSONSPIKEGEN
  control (thanks to Carsten Nielsen).

BUG FIXES
- DAVIS FX3: require new logic revision 9910 for FX3 devices.
  This fixes a bug in timestamp synchronization between multiple
  cameras, and improves precision of some time related parameters,
  namely APS_EXPOSURE, APS_FRAME_DELAY and USB_EARLY_PACKET_DELAY.
- DAVIS: fix incorrect extra log message when opening FX3 devices.


Release 2.1.4 - 30.05.2017
BUG FIXES
- C++: functions defined in C++ header files, such as happens in log or
  utils, need the inline keyword to allow the linker to resolve symbols
  properly. Fixes #14.


Release 2.1.3 - 28.05.2017
NEW FEATURES
- DAVIS: new device type CAER_DEVICE_DAVIS is now available, handles both
  FX2 and FX3 board-based devices transparently.

BUG FIXES
- C++ devices/usb.hpp: add missing std::string include.
- Devices: log failure to put new event packet containers on ring-buffer for
  consumption by clients with higher log-level of CAER_LOG_NOTICE.


Release 2.1.2 - 24.05.2017
BUG FIXES
- FrameUtils/C++ FrameEvent: fix detection of OpenCV presence.
- CMake: add dependency on libm for math.h functions.


Release 2.1.1 - 23.05.2017
BUG FIXES
- AutoExposure: disable debug logging.
- AutoExposure: get out of highly over/under-exposed situations much faster.


Release 2.1.0 - 22.05.2017
INCOMPATIBLE CHANGES
- usb.h: the 'dataShutdownNotify' callback of caerDeviceDataStart() will only
  be called on exceptional shutdowns now. Normal shutdowns, such as those from
  calling caerDeviceDataStop(), will not execute the callback anymore.
  The documentation for caerDeviceDataStart() and caerDeviceDataStop() has been
  updated accordingly.
- DAVIS: requires new logic revision 9880.

NEW FEATURES
- davis.h: added automatic exposure control, can be turned on/off with
  the DAVIS_CONFIG_APS_AUTOEXPOSURE configuration parameter, defaults to off.
- EventPackets (C/C++): added caerEventPacketGetDataSize() and
  caerEventPacketGetSize() functions to easily get packet size in bytes.
- C++ FrameEvent: added new function getOpenCVMat() to frame event, if
  OpenCV is enabled. Returns a cv::Mat representing the frame's pixels, with
  support for deep-const by cloning (can be disabled for efficiency).
- C++ Utils: enhanced makeUniqueFromCStruct() and makeSharedFromCStruct() to
  also allow a 'takeMemoryOwnership' parameter that is forwarded to the event
  packet constructors; it defaults to true like the constructors themselves.
- Devices (C/C++): added new CAER_HOST_CONFIG_LOG config module with parameter
  CAER_HOST_CONFIG_LOG_LEVEL to set per-device log-level; by default the
  log-level is equal to the current global one at device opening.

BUG FIXES
- libcaer.hpp: undefine log-level names to avoid name clashes.
- DAVIS: removed variable APS ADC Shift, is not used by any camera currently
  offered, all have 10 bits precision.
- DAVIS: fix black APS pixels on very high illumination.
- DAVIS240: fix low range of APS pixels due to reduced ADC dynamic range.
- USB: libusb-based USB communication completely rewritten, now there is one
  thread responsible for USB event handling only, while transfers are sent,
  started/stopped etc. from other threads. This avoids possible dead-locks,
  or other threads stealing the USB event handling, or new settings not being
  sent to the device under certain load conditions. This required a small
  change in the API, please see "INCOMPATIBLE CHANGES" above for more details.


Release 2.0.2 - 27.04.2017
NEW FEATURES
- Logging: added caerLogFileDescriptorsGetFirst(), caerLogFileDescriptorsGetSecond()
  functions to get the two file descriptors where log messages go to.
- Logging: added caerLogVAFull() function to allow full control over all
  parameters involved in logging, especially the log-level.
- Dynap-se: added support for experimental DYNAPSE_CONFIG_SPIKEGEN
  control and improved DYNAPSE_CONFIG_SRAM control (thanks to Carsten Nielsen).
- Updated C++ examples to use C++ logging functions.
- Updated C++ interface to reflect above changes.


Release 2.0.1 - 16.03.2017
NOTE: this release is numbered 2.0.1 and not 2.0.0, because 2.0.0 was the
development version. To ensure people can depend on the now actually released
version, the version number was increased to 2.0.1 for the official release.

INCOMPATIBLE CHANGES
- The Frame Event format changed to have the origin (0, 0) in the upper left
  corner of the image, following standard computer graphics conventions now.
  Before it was in the lower left corner, following the OpenGL convention.
  This was changed to more easily be able to benefit from the wealth of
  computer graphics libraries available, such as OpenCV.
  caerFrameEventGetPixelArrayCGFormat() has been removed as a consequence.
- The Polarity Event format has also changed its origin to the upper left corner.
- Device INFO structures have additional data members now, be sure to
  recompile anything depending on those!
- CAER_HOST_CONFIG_PACKETS_MAX_*_SIZE and MAX_*_INTERVAL options have been
  removed, the whole data packeting system is now much simpler with only
  two configuration options to control it:
  - CAER_HOST_CONFIG_PACKETS_MAX_CONTAINER_PACKET_SIZE
  - CAER_HOST_CONFIG_PACKETS_MAX_CONTAINER_INTERVAL
  These act at the event packet container level. See packetContainer.h
  documentation on more information for how this works.
- Removed LIBCAER_LOG_NONE define from headers, it is now not possible
  to completely suppress log output anymore.
- caerGenericEventGetEvent() has had its bounds restricted to [0,eventNumber[
  instead of [0,eventCapacity[.
- Event packet copy functions have been renamed to:
  - caerEventPacketCopy()
  - caerEventPacketCopyOnlyEvents()
  - caerEventPacketCopyOnlyValidEvents()

NEW FEATURES
- Support for the aiCTX DYNAP-SE neuromorphic chip was added.
- Added new event type Spike Event for spiking neurons.
- Added new event types Point1D, Point2D, Point3D and Point4D to
  hold floating point data in multiple dimensions.
- New event packet functions were added:
  - caerEventPacketEquals()
  - caerEventPacketClear()
  - caerEventPacketClean()
  - caerEventPacketResize()
  - caerEventPacketGrow()
  - caerEventPacketAppend()
- Full native support for C++11 through header library (libcaercpp).
- Improved const-qualification of functions, to allow better compile
  time checks for read-only data. A GetEventConst() function was added
  to each event type as part of this, to get read-only events.
- Const, reverse and const-reverse iterators were added to all event types.
- davis.h: added support for stereo microphones on DAVIS346mini.
- davis.h: added support for extra signal detectors.
- network.h: added header with functions to help parse AEDAT 3.X
  network stream headers.
- frame.h: added support for more color filter configurations.
- packetContainer.h: better documentation, now tracks lowest and highest
  timestamps contained, as well as number of total and valid events.
- packetContainer.h: added caerEventPacketContainerUpdateStatistics() to
  update above statistics. Automatically called on each addition or
  removal of an event packet from the container.
- packetContainer.h: added caerEventPacketContainerFindEventPacketByType*(),
  caerEventPacketContainerCopyAllEvents() and caerEventPacketContainerCopyValidEvents()
  functions to search for event packets by type and to make deep-copies of them.
- special.h: added new Special Event types, to support extra signal detection
  schemes and add Frame Event related timing information.
- special.h: added caerSpecialEventPacketFindEventByType*() and
  caerSpecialEventPacketFindValidEventByType*() functions to search for
  a specified type of special event.
- libcaer.h: added LIBCAER_VERSION, LIBCAER_NAME_STRING,
  LIBCAER_VERSION_STRING and LIBCAER_HAVE_OPENCV defines.
- log.h: added caerLogVA() function to pass va_list arguments directly.


Release 1.0.3 - 28.03.2016
INCOMPATIBLE CHANGES
- davis_fx2.c: removed specific FX2 code, now uses same backend as FX3
  for sending all configuration values, due to new firmware version 3
  for FX2 DAVIS small-board cameras. A firmware update is required,
  please follow the instructions at https://inivation.com/support/software/reflashing/.

NEW FEATURES
- frame.h: add function caerFrameEventGetPixelArrayCGFormat() to
  Frame Event, allows to get a copy of the pixels array in the
  standard computer graphics format (pixel (0, 0) in upper left
  corner) efficently.
- davis.h: add DAVIS_CONFIG_APS_ADC_TEST_MODE parameter to APS module.


Release 1.0.2 - 08.01.2016
IMCOMPATIBLE CHANGES
- frame.h: rename channel number to color channels and add color
  filter information, to better specify the information needed
  to reconstruct color frames. The 'enum caer_frame_event_color_channels'
  and 'enum caer_frame_event_color_filter' hold the possible values.
  This change is backwards-compatible with older frame format!
- davis.h, dvs128.h: changed info data structure's integers to be
  signed for better cross-language compatibility. Also 'deviceID'
  can now be compared directly with 'sourceID' from event packets.
- davis.h: changed type of 'apsColorFilter' in info data structure
  to take advantage of new 'enum caer_frame_event_color_filter'.

NEW FEATURES
- common.h: add generic functions for event packet copying, with
  support for packet size reductions (copy only valid).
- libcaer.h: add generic clear, get and set functions for bitfields,
  and use them in all the event functions to avoid errors.
- config.h: add device configuration event type, for tracking
  of device configuration changes in the event stream.
- log.c: add timezone information to log message time information.
- dvs128_simple.cpp, davis_simple.cpp: add C++11 example variants.
- Enable more Clang compiler warnings.

BUG FIXES
- davis_common.c: only update the ROI size information if ROI
  updates actually came in from the device.
- Fix and improve documentation, especially for the frame event.
- Fix off-by-one in event's GetEvent() function's warning log message.
- device.c: mark global function pointer arrays static.
- common.h, frame.h: fix compilation of inline functions in
  strict C++11 mode.


Release 1.0.1 - 06.11.2015
INCOMPATIBLE CHANGES
- Requires firmware version 2 and logic revision 7449.
- usb.h: improved caerDeviceDataStart() API to also allow for
  notification of data acquisition shutdown, to be able to react
  to abnormal shutdown cases, like when a device is unplugged.
- frame.h: changed in-memory format for easier handling and compatibility
  with the other event formats (all-in-one memory block).
- davis.h: rename DAVIS240 APSOVERFLOWLEVEL to APSOVERFLOWLEVELBN.

NEW FEATURES
- Headers are C++ compatible and stand-alone now.
- MacOS X support.
- Added pkg-config file for library.
- Full API documentation (see docs/ for PDF).
- Various cmake/build improvements. Support out-of-tree builds.
- Add iterator macros for EventPackets.
- frame.h: added ROI region ID tracking, as well as ROI position.
  Added caerFrameEventGetExposureLength() and caerFrameEventGetTimestamp(),
  which is defined as the median of the exposure times.
  Added caerFrameEventPacketGetPixelsSize() and caerFrameEventPacketGetPixelsMaxIndex()
  for EventPacket-level size information.
  Added caerFrameEventGetPixelsSize() and caerFrameEventGetPixelsMaxIndex()
  for Event-level size information.
- log.h: added caerLogFileDescriptorsSet() to allow logging to
  up to two different file descriptors (defaults to STDERR only).
- davis.h: added chipID check macros.
- davis.h: added DAVIS_CONFIG_APS_SNAPSHOT to take one frame snapshots.
- dvs128.h: added DVS128_CONFIG_DVS_TS_MASTER to select timestamp
  master or slave behavior (timestamp synchronization).
- davis_common.c: added support for outputting only reset read or
  signal read frames, for debugging purposes.
- c11threads_posix.h: C11-compatible thread abstraction, for
  both Linux and MacOS X, based on POSIX Threads.

BUG FIXES
- Relaxed atomic operations memory constraints for better
  performance on weakly-ordered architectures (like ARM).
- log.c: call tzset() before localtime_r(), as per standard.
- davis_common.c: improved Region of Interest support (APS).
- davis_fx2.c: keep GlobalShutter flag correctly in-sync.
- davis_fx3.c: fixed support for new FX3 devices.
- packetContainer.h: handle container being NULL by returning NULL.


Release 1.0.0 - 02.10.2015
- Initial release.


Wiki Tutorials

See ROS Wiki Tutorials for more details.

Source Tutorials

Not currently indexed.

Package Dependencies

No dependencies on ROS packages.

System Dependencies

Dependant Packages

Launch files

No launch files found

Messages

No message files found.

Services

No service files found

Plugins

No plugins found.

Recent questions tagged libcaer at Robotics Stack Exchange

No version for distro noetic. Known supported distros are highlighted in the buttons above.
No version for distro ardent. Known supported distros are highlighted in the buttons above.
No version for distro bouncy. Known supported distros are highlighted in the buttons above.
No version for distro crystal. Known supported distros are highlighted in the buttons above.
No version for distro eloquent. Known supported distros are highlighted in the buttons above.
No version for distro dashing. Known supported distros are highlighted in the buttons above.
No version for distro galactic. Known supported distros are highlighted in the buttons above.
No version for distro foxy. Known supported distros are highlighted in the buttons above.
No version for distro lunar. Known supported distros are highlighted in the buttons above.
No version for distro jade. Known supported distros are highlighted in the buttons above.
No version for distro indigo. Known supported distros are highlighted in the buttons above.
No version for distro hydro. Known supported distros are highlighted in the buttons above.
No version for distro kinetic. Known supported distros are highlighted in the buttons above.
No version for distro melodic. Known supported distros are highlighted in the buttons above.