2011-11-20: 1.0.0 (a83b9e5)
- Initial version

2011-12-28: 1.0.1 (59cad35)
- Add Visual Studio support

2012-02-15: 1.0.2 (ffd64f7)
- Add support for IMU Brick, Analog In Bricklet and Analog Out Bricklet

2012-04-02: 1.0.3 (524050a)
- Add get/set_chibi_channel and get/set_chibi_frequency functions

2012-04-27: 1.0.4 (6f0b9a5)
- Add sync rect support to Stepper Brick bindings

2012-05-07: 1.0.5 (f37283d)
- Ensure precise timeout duration on Linux and enable struct packing for the
  Borland C compiler

2012-05-10: 1.0.6 (baa8705)
- Silently ignore messages from devices with unknown stack ID
- Don't generate register_callback function for devices without callbacks
- Add inline code documentation

2012-05-16: 1.0.7 (e916fae)
- Add callback thread to IPConnection (allows to call getters in callbacks)

2012-05-18: 1.0.8 (505bc29)
- Also call the enumerate callback from the callback thread
- Ensure that the answering device matches the expected type in ipcon_add_device

2012-05-21: 1.0.9 (3406326)
- Don't use strcpy on non-NUL-terminated strings

2012-05-24: 1.0.10 (f837011)
- Treat '-' and ' ' as equal in device name check for backward compatibility

2012-06-15: 1.0.11 (bc93dc5)
- Fix handling of fragmented packets

2012-06-28: 1.0.12 (3704047)
- Add RS485 support

2012-06-29: 1.0.13 (55a3238)
- Add chip temperature and reset functions

2012-07-01: 1.0.14 (d9ecec6)
- Add monoflop functionality to Dual Relay Bricklet API

2012-07-03: 1.0.15 (afb45cf)
- Add time base, all-data function/callback and state callback to Stepper Brick API

2012-07-13: 1.0.16 (6ac52d1)
- Fix direction of get_all_data_period function in Stepper Brick API
- Ensure that stdint.h defines INT32_MAX
- Make add_device thread-safe
- Ensure correct shutdown order of threads

2012-07-23: 1.0.17 (68a04f7)
- Add support for big endian systems

2012-08-01: 1.0.18 (f86a5f3)
- Fix race condition in add_device function
- Add monoflop functionality to IO-4 and IO-16 Bricklet API

2012-09-17: 1.0.19 (dd8498f)
- Add WIFI support

2012-09-26: 1.0.20 (c8c7862)
- Add getter for WIFI buffer status information
- Change WIFI certificate getter/setter to transfer bytes instead of a string
- Add API for setting of WIFI regulatory domain
- Add reconnect functionality to IPConnection (for WIFI Extension)
- Add API for Industrial Bricklets- Digital In 4, Digital Out 4 and Quad Relay

2012-09-28: 1.0.21 (69e6ae4)
- Add API for Barometer Bricklet

2012-10-01: 1.0.22 (4454bda)
- Replace Barometer Bricklet calibrate function with getter/setter for reference
  air pressure

2012-10-12: 1.0.23 (5884dd5)
- Add get_usb_voltage function to Master Brick API
- Add Barometer Bricklet examples

2012-12-20: 1.0.24 (2b39606)
- Add API for Voltage/Current Bricklet
- Add API for GPS Bricklet

2013-01-22: 2.0.0 (10c72f9)
- Add compatibility for Protocol 2.0

2013-01-25: 2.0.1 (13b1beb)
- Add support for custom characters in LCD Bricklets

2013-02-06: 2.0.2 (3db31c0)
- Add get/set_long_wifi_key functions to Master Brick API

2013-02-19: 2.0.3 (3fd93d3)
- Reduce scope of request and socket mutex to improve concurrency
- Improve and unify code for response expected flag handling
- Add get/set_wifi_hostname functions and callbacks for stack/USB voltage and
  stack current to Master Brick API

2013-02-22: 2.0.4 (9d5de14)
- Add get/set_range functions to Analog In Bricklet API
- Fix unlikely race condition in response packet handling

2013-04-02: 2.0.5 (eeb1f67)
- Add enable/disable functions for POSITION_REACHED and VELOCITY_REACHED
  callbacks to Servo Brick API
- Add get/set_i2c_mode (100kHz/400kHz) functions to Temperature Bricklet API
- Add default text functions to LCD 20x4 Bricklet API
- Add callback signature to inline code documentation
- Don't dispatching callbacks after disconnect
- Fix race condition in callback handling that could result in closing the wrong
  socket
- Don't ignore socket errors when sending request packets
- Send a request packet at least every 10sec to improve WIFI disconnect detection

2013-05-14: 2.0.6 (b847401)
- Add Ethernet Extension support to Master Brick API
- Avoid non-portable usage of bit fields
- Only send disconnect probe if there was no packet send or received for 5sec
- Fix [u]int16 big endian handling
- Workaround struct packing bug in GCC 4.7
- Add IMU Brick orientation and Barometer Bricklet averaging API

2013-07-04: 2.0.7 (cdc19b0)
- Add support for PTC Bricklet and Industrial Dual 0-20mA Bricklet
- Workaround for GCC 4.7 struct packing bug is only necessary on Windows
- Avoid breaking strict-aliasing rules

2013-07-18: 2.0.8 (80fd2d2)
- Avoid potential infinite loop in receive thread
- Handle incoming data correctly if multiple packets are received at once

2013-08-23: 2.0.9 (4b2c2d2)
- Avoid race condition between disconnect probe thread and disconnect function
- Don't expose internal types such as Socket, Thread, Mutex etc anymore

2013-08-28: 2.0.10 (2251328)
- Avoid void pointer to function pointer cast warnings with MSVC
- Make averaging length configurable for Analog In Bricklet
- Add edge counters to Industrial Digital In 4, IO-4 and IO-16 Bricklet

2013-09-11: 2.0.11 (405931f)
- Fix signature of edge count functions in IO-16 Bricklet API

2013-11-27: 2.0.12 (a97b7db)
- Add support for Distance US, Dual Button, Hall Effect, LED Strip, Line,
  Moisture, Motion Detector, Multi Touch, Piezo Speaker, Remote Switch, Rotary
  Encoder, Segment Display 4x7, Sound Intensity and Tilt Bricklet
- Also apply the workaround for a struct packing bug in GCC 4.7 to generated code

2013-12-19: 2.0.13 (9334f91)
- Add get/set_clock_frequency function to LED Strip Bricklet API
- Fix mixup of get/set_date_time_callback_period and
  get/set_motion_callback_period in GPS Bricklet API
- Support addressing types of Intertechno and ELRO Home Easy devices in
  Remote Switch Bricklet API

2014-04-08: 2.1.0 (9124f8e)
- Add authentication support to IPConnection and Master Brick API
- Rewrite endian handling logic to work without detecting the actual host endian

2014-06-24: 2.1.1 (4e583a7)
- Add extern "C" markup to all files to force proper symbol names in C++
- Explicitly use ANSI version of WinAPI functions to support UNICODE builds on
  Windows
- Add simple library Makefile for Linux
- Fix race condition between device destruction and callback dispatch

2014-07-03: 2.1.2 (cdb00f1)
- Add support for WS2811 and WS2812 to LED Strip Bricklet API

2014-07-08: 2.1.3 (b322909)
- Fix strnlen redeclaration in some MinGW environments

2014-08-11: 2.1.4 (a87f5bc)
- Add support for Color, NFC/RFID and Solid State Relay Bricklet
- Rename bindings/ folder to source/ in ZIP file

2014-12-10: 2.1.5 (2718ddc)
- (no changes)

2014-12-10: 2.1.6 (27725d5)
- Add support for RED Brick

2015-07-28: 2.1.7 (725ccd3)
- Add DEVICE_DISPLAY_NAME constant to all Device classes
- Add functions for all Bricks to turn status LEDs on and off
- Avoid possible connection state race condition on connect
- Add support for IMU Brick 2.0, Accelerometer, Ambient Light 2.0,
  Analog In 2.0, Analog Out 2.0, Dust Detector, Industrial Analog Out,
  Industrial Dual Analog In, Laser Range Finder, Load Cell and RS232 Bricklet

2015-11-17: 2.1.8 (158f00f)
- Add missing constant for 19200 baud to RS232 Bricklet API
- Add ERROR callback to RS232 Bricklet API
- Add set_break_condition function to RS232 Bricklet API
- Add unlimited illuminance range constant to Ambient Light Bricklet 2.0 API
- Break API to fix threshold min/max type mismatch in Ambient Light, Analog In
  (2.0), Distance IR/US, Humidity, Linear Poti and Voltage Bricklet API
- Break API to fix bool return type mismatch in Servo Brick
  (is_position_reached_callback_enabled and is_velocity_reached_callback_enabled
  function), Accelerometer Bricklet (is_led_on function) and Load Cell Bricklet
  (is_led_on function) API
- Avoid race condition in callback thread destruction

2016-01-06: 2.1.9 (3ade121)
- Add support for CO2, OLED 64x48 and 128x64, Thermocouple and UV Light Bricklet

2016-02-09: 2.1.10 (5552d2c)
- Add support for Real-Time Clock Bricklet
- Break GPS Bricklet API to fix types of altitude and geoidal separation values
  (get_altitude function and ALTITUDE callback)

2016-06-29: 2.1.11 (9db7daa)
- Add support for WIFI Extension 2.0 to Master Brick API
- Add support for CAN Bricklet and RGB LED Bricklet
- Add DATETIME and ALARM callbacks to Real-Time Clock Bricklet API
- Avoid MSVC warnings about deprecated gethostbyname and strdup and about
  strncpy being unsafe

2016-09-08: 2.1.12 (2863e14)
- Add support for RGBW LEDs, channel mapping and SK6812RGBW (NeoPixel RGBW),
  LPD8806 and ADA102 (DotStar) chip types to LED Strip Bricklet API

2017-01-25: 2.1.13 (7aeee37)
- Add support for WIFI Extension 2.0 Mesh mode to Master Brick API
- Add get/set_status_led_config functions to Motion Detector Bricklet API
- Add sensor and fusion mode configuration functions to IMU Brick 2.0 API
- Avoid MSVC cast warning
- Use MSVC stdbool.h if available

2017-04-21: 2.1.14 (044bd9b)
- Add support for Silent Stepper Brick
- Add get/set_configuration functions to Laser Range Finder Bricklet API to
  support Bricklets with LIDAR-Lite sensor hardware version 3
- Add get_send_timeout_count function to all Brick APIs

2017-05-11: 2.1.15 (3960b4a)
- Add support for GPS Bricklet 2.0
- Don't try to export non-existing register_callback functions

2017-07-18: 2.1.16 (af0003b)
- Break PTC Bricklet API to fix type for resistance value
- Fix ipcon_register_callback for CONNECTED callback

2017-07-26: 2.1.17 (fb903dc)
- Add support for RS485 Bricklet
- Add general streaming support
- Add SPITFP configuration and diagnostics functions to all Brick APIs to
  configure and debug the communication between Bricks and Co-MCU Bricklets
- Remove unused get_current_consumption function from Silent Stepper Brick API

2017-11-20: 2.1.18 (f235e3f)
- Add support for DMX, Humidity 2.0, Motorized Linear Poti, RGB LED Button,
  RGB LED Matrix and Thermal Imaging Bricklet
- Add get/set_sbas_config functions to GPS Bricklet 2.0 API

2018-02-28: 2.1.19 (da741b9)
- Add support for Analog In 3.0, Remote Switch 2.0, Motion Detector 2.0, NFC,
  Rotary Encoder 2.0, Solid State 2.0, Temperature IR 2.0 and Outdoor Weather
  Bricklet

2018-06-08: 2.1.20 (8fb62e4)
- Add support for CAN 2.0, Industrial Counter, Industrial Digital In 4 2.0,
  Industrial Dual Relay, Industrial Quad Relay 2.0, IO-4 2.0, LED Strip 2.0,
  Load Cell 2.0, Particulate Matter, PTC 2.0, Real-Time Clock 2.0, RS232 2.0,
  Sound Pressure Level, Thermocouple 2.0 and Voltage/Current 2.0 Bricklet
- Add get/set_maximum_timeout functions to NFC Bricklet API
- Add is_sensor_connected function and SENSOR_CONNECTED callback to PTC Bricklet API
- Break Humidity 2.0, Rotary Encoder 2.0 and Temperature IR 2.0 Bricklet API to
  fix types for callback threshold min/max configuration

2018-09-28: 2.1.21 (f7c65f7)
- Add support for Air Quality, Analog Out 3.0, Barometer 2.0, Distance IR 2.0,
  Dual Button 2.0, Industrial Analog Out 2.0, Industrial Digital Out 4 2.0,
  Industrial Dual 0-20mA 2.0, Industrial Dual Analog In 2.0, IO-16 2.0, Isolator,
  LCD 128x64, OLED 128x64 2.0, One Wire, Temperature 2.0 and UV Light 2.0 Bricklet

2018-10-05: 2.1.22 (e3c6f36)
- Break API to fix moving-average-length type in Distance IR Bricklet 2.0 API

2018-11-28: 2.1.23 (0e3b130)
- Add get/set_samples_per_second functions to Humidity Bricklet 2.0 API
- Add button, slider, graph and tab functions to LCD 128x64 Bricklet API

2019-01-29: 2.1.24 (2617875)
- Add support for Accelerometer 2.0 and Ambient Light 3.0 Bricklet

2019-05-21: 2.1.25 (a3d0573)
- Add support for CO2 2.0, E-Paper 296x128, Hall Effect 2.0, Joystick 2.0,
  Laser Range Finder 2.0, Linear Poti 2.0, Piezo Speaker 2.0, RGB LED 2.0 and
  Segment Display 4x7 2.0 Bricklet and HAT and HAT Zero Brick
- Add remove_calibration and get/set_background_calibration_duration functions
  to Air Quality Bricklet API
- Properly check UIDs and report invalid UIDs

2019-08-23: 2.1.26 (59d9363)
- Add support for Color 2.0, Compass, Distance US 2.0, Energy Monitor,
  Multi Touch 2.0, Rotary Poti 2.0 and XMC1400 Breakout Bricklet
- Add get/set_filter_configuration functions to Accelerometer Bricklet 2.0 API
- Add CONVERSION_TIME constants to Voltage/Current Bricklet 2.0 API
- Fix misaligned array access in callback wrapper function
- Don't leak the get_random_uint32 symbol
- Break API to stop mixing object and function pointers for callback functions

2019-11-25: 2.1.27 (b1270ba)
- Add set/get_voltages_callback_configuration functions and VOLTAGES callback
  to HAT Brick API
- Add set/get_usb_voltage_callback_configuration functions and USB_VOLTAGE
  callback to HAT Zero Brick API
- Add set/get_statistics_callback_configuration functions and STATISTICS
  callback to Isolator Bricklet API
- Report error if authentication secret contains non-ASCII chars

2020-04-07: 2.1.28 (3dff30a)
- Properly check device-identifier and report mismatch between used API bindings
  device type and actual hardware device type
- Fix race condition between device constructor and callback thread
- Add set/get_flux_linear_parameters functions to Thermal Imaging Bricklet API
- Add set/get_frame_readable_callback_configuration functions and FRAME_READABLE
  callback to CAN (2.0), RS232 (2.0) and RS485 Bricklet API
- Add set/get_error_occurred_callback_configuration functions and ERROR_OCCURRED
  callback to CAN Bricklet 2.0 API
- Add read_frame function to RS232 Bricklet API
- Add write/read_bricklet_plugin functions to all Brick APIs for internal EEPROM
  Bricklet flashing
- Add set_bricklet_xmc_flash_config/data and set/get_bricklets_enabled functions
  to Master Brick 3.0 API for internal Co-MCU Bricklet bootloader flashing
- Validate response length before unpacking response
- Properly report replaced device objects as non-functional
