A new version of libcaer has been released, 2.4.0 on 05.12.2017.
This is especially an important update for Dynap-SE users, please read through the ChangeLog below carefully.
Treatment of chips, cores and neuron IDs have been made consistent for easier usage.
See https://inilabs.com/support/hardware/user-guide-dynap-se/#h.tabrnfqg4f55 Figure 2.4.2 for details.
Also several new functions have been added, as well as support for configuring TAU1/2 leakage.
A firmware and/or logic update will be required for DAVIS and Dynap-SE devices.
Other notable news are the availability of packages for Fedora, Ubuntu, Gentoo and MacOS X, the new Python 2/3 bindings, and the addition of Statistics, APS Quad-ROI and DVS ROI/BA/Refractory filters on new FX3-based DAVIS devices.
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://inilabs.com/support/software/libcaer/#h.qp4tgs7gb5k - 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 'swig/swig#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.