The biggest and the most important release so far. Majority of the source code has been rewritten from scratch. The library is header-only now, which makes it much easier to compile on different exotic platforms. Although features included in this release break backwards compatibility with v2.0 and require changes to be made in user code, upgrading to v3.0 is highly recommended due to the number of improvements.
Changes:
- The library is header-only now. The old build system based on CMake is no longer necessary.
- Very significantly reduced binary size (~16kB (v2.0), -> ~7.3kB (v3.0))
- Significantly improved code structure, maintainability and performance
- Alignment safety no longer relies on compiler attributes (
__attribute__((packed))
is 'broken' on XC16 compilers) - Replaced
inttypes.h
withstdint.h
- All register operations are now done through register callback functions.
- All data is received with a data callback on master side now.
- Added support for Modbus TCP
- Added setters/getters for
ModbusMaster
andModbusSlave
structure members - Added support for custom allocators. This mechanism can be used to replace old
LIGHTMODBUS_STATICMEM*
- Added a new CMake config which allows liblightmodbus to be used a CMake package
- Added a (very) experimental C++ API
- Added a
ModbusBuffer
type for holding and managing allocated frames - Added some debug utilities
- Created a separate repository for ESP-IDF component files
- Integrated with GitHub actions
- Removed the
examine
addon - Improved error handling
- Types are now consistently named with PascalCase
- Renamed many functions and type names
- Dropped support for Launchpad
- Prettier docs, thanks to https://github.com/jothepro/doxygen-awesome-css
Docs for this release: https://jacajack.github.io/liblightmodbus/index.html
Information about porting code from v2.0 to v3.0: https://jacajack.github.io/liblightmodbus/porting.html