libgpiod v1.6.3
===============

Bug fixes:
- fix uninitialized default_vals being passed to gpiod_LineBulk_request()
  in Python bindings
- fix building C++ bindings with clang
- fix one of the line request test cases

libgpiod v1.6.2
===============

Improvements:
- allow to build the library with pre linux v5.5 kernel headers

libgpiod v1.6.1
===============

Bug fixes:
- fix incorrect object size of gpiod.LineBulk in Python bindings
- fix a crash in Line.request() when it's called without keyword arguments

libgpiod v1.6
=============

New features:
- add a standardized '__version__' module attribute in Python bindings
- print the bias flags info (if set) in gpioinfo

Improvements:
- remove unnecessary indirection in free_dirs() in iterator code
- put all ABI versions next to one another in configure.ac
- improve std namespace resolution in C++ bindings
- add more checks for non-standard functions in configure.ac
- various code size improvements
- enforce gnu89 C standard in makefiles
- many documentation improvements
- unduplicate signalfd() handling in tools
- fix a forward declaration for line_event in C++ bindings

Bug fixes:
- relax is_gpiochip_cdev() for symbolic links
- make gpiod_line_get_value_bulk() work for bulks of lines requested for
  events, not only those requested for values
- fix regex patterns for timestamps in gpiomon test cases
- remove leftover asserts from tests
- fix unit conversion in event timestamp calculation in C++ bindings
- fix reading subset of available events in core library

libgpiod v1.5
=============

New features:
- switched to using the GLib testing framework for core library tests and BATS
  (Bash Automated Testing System) for command-line tools
- used Catch2 C++ testing framework to implement a proper test-suite for C++
  bindings while also reusing the API provided by libgpiomockup
- used Python's unittest package to implement a proper test suite for Python
  bindings and reused libgpiockup again
- provided line::update() and Line.update() routines for C++ and Python
  bindings respectively allowing to update the line info from bindings as well
- added support for bias flags which are a new functionality first available in
  linux v5.5; subsequently the library now requires v5.5 kernel headers to
  build; the new flags are supported in the core library, C++ and Python
  bindings as well as the command-line tools
- added support for the new SET_CONFIG ioctl(): this too is a new functionality
  added in linux v5.5; both features have been implemented in the library by
  Kent Gibson
- added routines for reading multiple line events at once to the core library,
  C++ and Python bindings

Improvements:
- constified function arguments where applicable in libgpiomockup
- fixed the name of the test exeucutable displayed at build time
- improved the function pointer casting in Python bindings to avoid warnings
  emitted by GCC8
- switched to using the KERNEL_VERSION() macro in tests instead of handcoded
  version parsing
- improved the setup ordering in tests (setup libgpiomockup before checking
  the kernel version
- add 'extern "c"' to the libgpiomockup header to make it usable from C++
- add chip index validation to libgpiomockup functions
- check if the debugfs directory used by libgpiomockup is writable before
  using it to set the pull of dummy lines
- add several new test cases
- improved Python example programs (made gpiomon's output similar to the
  original tool, make gpioset wait for an ENTER pres by default)
- fixed the major:minor number comparison between the device and sysfs
- deprecated the gpiod_line_needs_update() function and removed the logic
  behind it from the library
- shrank the Python bindings a bit by directly returning the value from
  PyErr_SetFromErrno()
- dropped noexcept from methods which can throw in C++ bindings
- switched to initializing the bitset with integers instead of strings in C++
  bindings
- allowed gpiod_line_set_value_bulk() to accept null pointers
- when building Python bindings: check for the existence of python-config
- improved the readability of help text messages for command-line tools
- reworked the .gitignore file: added libtool scripts generated during
  cross-compilation and split the main .gitignore into several fine-grained
  files
- fixed several misspellings
- other minor tweaks and improvements

Bug fixes:
- fixed memory leaks in libgpiomockup
- fixed memory leaks in the testing framework
- fixed a segfault in error path in tests
- make gpioinfo show lines claimed by the kernel as used even if they have no
  named consumer
- fixed the test cases validating the '--active-low' switch in gpiomon and
  the GPIOHANDLE_REQUEST_ACTIVE_LOW flag in the core library after a fix
  for incorrect behavior was merged in linux v5.2.7
- stopped failing at init-time of libgpiomockup if gpio-mockup is already
  loaded
- added a missing throw keyword in error path in C++ bindings
- fixed a segfault in Python bindings when calling Line.request() without
  the consumer argument

libgpiod v1.4
=============

New features:
- updated the testing framework to work with linux v5.1 in which the debugfs
  interface of the GPIO testing module changed in a backward incompatible way
- factored out the code controlling the GPIO testing module into a separate
  shared library that may be reused by future testing executables for different
  language bindings
- removed the --enable-install-tests build option and the make check target as
  they were redundant, subsequently tests are now installed as a normal program
  whenever they're enabled with --enable-tests

Improvements:
- removed unnecessary std::move calls from C++ bindings
- added the explicit keyword to bool() operators in C++ bindings

Bug fixes:
- fix out of source build of man pages

libgpiod v1.3
=============

New features:
- the gpio-tools now have automatically generated (using help2man) man pages
  that are bundled with the release tarball
- support a singular 'default_val' argument in Line.request() in python
  bindings
- the test executable can now be installed to the bindir along with the
  gpio-tools and the testing framework will look for the binaries in standard
  locations if it's not run from the top source directory
- gpiomon now supports line buffered output

Improvements:
- tweaks to the C API documentation
- treewide unification of the naming of local variables
- extended helptest in gpioset (explanation of the way the character device
  works aimed at reducing user confusion when a GPIO line reverts to its
  default value after gpioset exits)
- the source directories have been rearranged and the src/ directory was
  dropped, lib/ and tools/ now live in the top source directory
- minor coding style fixes in python bindings, ctxless functions and tools
- automatically generated documentation is now removed by 'make clean'
- all Makefiles now use top_builddir instead of relative paths
- code shrink in configure.ac
- add a brief section about API documentation to README

Bug fixes:
- fix a segfault causing bug in C++ bindings
- make bitset_cmp::operator() const as this is required by C++17
- ignore 'remove' events from udev in the testing framework
- don't segfault on num_lines = 0 in ctxless functions

libgpiod v1.2
=============

New features:
- new contextless event monitor that should replace the previous event loop
  which caused problems on hardware that doesn't allow to watch both rising
  and falling edge events
- port gpiomon to the new event monitor
- deprecate event loop routines

Improvements:
- many minor improvements and tweaks in the python module
- new test cases for python bindings
- add much more detailed documentation for python bindings
- coding style improvements in gpio-tools
- remove unicode characters from build scripts
- improve the help text messages in gpio-tools
- make gpiod_chip_open() and its variants verify that we're really trying to
  open a character device associated with a GPIO chip

Bug fixes:
- fix memory leaks in python bindings
- fix a memory corruption bug in python bindings
- fix the default_vals argument in line request implementation in python
  bindings
- fix a compilation warning in python bindings
- fix gpiod_Chip_find_lines() for nonexistent lines (python bindings)
- add a missing include in C++ bindings examples
- correctly display the version string in gpio-tools

libgpiod v1.1
=============

New features:
- add object-oriented C++ bindings
- add object-oriented Python3 bindings
- add several new helpers to the C API

Improvements:
- start using separate versioning schemes for API and ABI
- use SPDX license identifiers and remove LGPL boilerplate
- check for unexpanded macros in configure.ac

Bug fixes:
- include Doxyfile in the release tarball
- fix the implicit-fallthrough warnings
- make tests work together with gpio-mockup post v4.16 linux kernel
- use reference counting for line file descriptors
- correctly handle POLLNVAL when polling for events
- fix the copyright notice in tools

libgpiod v1.0
=============

NOTE: This is a major release - it breaks the API compatibility with
      the 0.x.y series.

New features:
- remove custom error handling in favor of errnos
- merge the two separate interfaces for event requests and regular line
  requests
- redesign the simple API
- change the prefix of the high-level API from 'simple' to 'ctxless' (for
  contextless) which better reflects its purpose
- redesign the iterator API
- make use of prefixes more consistent
- rename symbols all over the place
- various minor tweaks
- add support for pkg-config

Improvements:
- add a bunch of helpers for line requests
- split the library code into multiple source files by functionality
- re-enable a test case previously broken by a bug in the kernel

Bug fixes:
- correctly handle signal interrupts when polling in gpiod_simple_event_loop()
- fix the linking order when building with static libraries
- pass the correct consumer string to gpiod_simple_get_value_multiple() in
  gpioget
- fix a line test case: don't use open-drain or open-source flags for input
  mode
- fix the flags passed to ar in order to supress a build warning
- set the last error code in gpiod_chip_open_by_label() to ENOENT if a chip
  can't be found
- fix checking the kernel version in the test suite
- fix various coding style issues
- initialize the active low variable in gpiomon

libgpiod v0.3
=============

New features:
- gpiomon can now watch multiple lines at the same time and supports custom
  output formats which can be specified using the --format argument
- testing framework can now test external programs: test cases for gpio-tools
  have been added

Improvements:
- improve error messages
- improve README examples
- configure script improvements

Bug fixes:
- use correct UAPI flags when requesting line events
- capitalize 'GPIO' in error messages in gpioset, gpioget & gpiomon
- tweak the error message on invalid arguments in gpiofind
- don't ignore superfluous arguments and fix the displayed name for falling
  edge events in gpiomon

libgpiod v0.2
=============

New features:
- relicensed under LGPLv2.1
- implemented a unit testing framework together with a comprehensive
  set of test cases
- added a non-closing variant of the gpiochip iterator and foreach
  macro [by Clemens Gruber]
- added gpiod_chip_open_by_label()

Improvements:
- Makefiles & build commands have been reworked [by Thierry Reding]
- documentation updates
- code shrinkage here and there
- coding style fixes
- removed all designated initializers from the header for better standards
  compliance

Bug fixes:
- fix the return value of gpiod_simple_event_loop()
- don't try to process docs if doxygen is not installed
- pass the O_CLOEXEC flag to open() when opening the GPIO chip device file
- include <poll.h> instead of <sys/poll.h> in gpioset
- fix a formatting issue in gpioinfo for chips with >100 GPIO lines
- fix a bug when requesting both-edges event notifications
- fix short options in gpiomon (short opt for --silent was missing)
- correct the kernel headers requirements in README
- include <time.h> for struct timespec
- include <poll.h> instead of <sys/poll.h>
- detect the version of strerror_r()

libgpiod v0.1
=============

First version of libgpiod.

It's currently possible to:
- get and set the values of multiple GPIO lines with a single function call
- monitor a GPIO line for events
- enumerate all GPIO chips present in the system
- enumerate all GPIO lines exposed by a chip
- extract information about GPIO chips (label, name, number of lines)
- extract information about GPIO lines (name, flags, state, user)

Tools provided with the library are:
- gpioget - read values from GPIO lines
- gpioset - set values of GPIO lines
- gpiodetect - list GPIO chips
- gpioinfo - print info about GPIO lines exposed by a chip
- gpiomon - monitor a GPIO line for events
- gpiofind - find a GPIO line by name
