Releases: cjhdev/lora_device_lib
0.5.6
- removed incomplete AVR example
- added missing interrupt line integration to doxygen and chip interface examples
- updated contribution guidelines
- updated porting guidelines
- changed MBED wrapper to not include platform specific code where it shouldn't
- added missing session update event
- use ldl_stream.c functions in ldl_ops.c
0.5.5
- fixed bug where DevNonce was not being incremented for each join request frame sent.
DevNonce is now incremented for each join request until exausted after 65535 increments. - added LDL_MAC_DEV_NONCE_UPDATED event for saving the next DevNonce every time it changes
- added LDL_MAC_JOIN_EXHAUSTED event to indicate OTAA failure after 65535 increments
- added LDL_STATUS_DEVNONCE code to be returned by LDL_MAC_otaa() to indicate
when OTAA is not possible because DevNonce is greater than 65535 - removed nextDevNonce member from LDL_MAC_JOIN_COMPLETE argument since LDL_MAC_DEV_NONCE_UPDATED event now exists
- fixed bug where invalid JoinNonce was not rejecting JoinAccept messages when LDL_L2_VERSION_1_0_4
- fixed bug where RXParamSetupAns RX1DRoffset and RX2DataRate were not being decoded correctly
- updated wrappers
- updated porting notes
- updated examples
- added LDL_MAC_getFPending() to find out if the network has more data to send to device
- added LDL_MAC_getAckPending() to find out if the network is expecting acknowledgement
- added ABP mode (disabled by default)
The following changes were made to MBED wrapper:
- fixed bug in LDL::DefaultStore() where dev_nonce and join_nonce were not being initialised to zero
- fixed bug in LDL::DefaultSM() where app_key was used instead of nwk_key
Many thanks to frbehrens and szemzoa for their help in debugging this release.
0.5.4
- fixed bug affecting LDL_LITTLE_ENDIAN option. All decode functions were passing pointer to pointer instead of pointer.
- fixed LDL_SX126X_readBuffer() so that RSSI and SNR are returned
- tests now compile with -Wextra and -Werror
- fixed anything flagged by -Wextra
- changed LDL_DEVICE_TIME callback to compensate time value for better time sync
- fixed DevStatusAns so that SNR is returned instead of link margin
- changed LDL_MAC_unconfirmedData() and LDL_MAC_confirmedData() so that LDL_STATUS_SIZE is returned when message is too large to send
0.5.3
This release changes the way tx_gain is applied. Check your code before
updating.
- added support for STM32WL55x
- added MBED wrapper for Nucleo STM32WL55JC kit
- added antenna gain defaults to MBED wrapper
- changed tx_gain from being added to requested power, to being subtracted from requested power
- fixed bug affecting CMWX1ZZABZ where TCXO was not being started before collecting entropy
- doubled size of stack for LDL::Device worker thread
0.5.2
- added deep sleep locking to wrappers/mbed/device.cpp
- added sleep handling to examples/mbed/bare_metal
- refactored branching in processRX and processTX
- removed useless debug messages
- changed definitions for LDL_L2_VERSION_* to ensure unknown macros (which default to 0) are caught
0.5.1
Some changes to the way wrappers and documentation build.
- refactored examples/mbed to contain all mbed examples in sub-directories
- refactored wrappers/mbed to adhere to one class per file
- added one makefile for building all mbed examples in situ
- added Dockerfile for setting up mbed-cli environment
- changed documentation generator to include missing resources causing some page load errors
- changed Ruby wrapper so that gem version is read from version file
- fixed path problem causing Ruby wrapper to not compile when installed via Bundler
0.5.0
This release introduces breaking changes for those updating from 0.4.6 and earlier.
Read the porting notes section below if this affects you.
new features
- added SX1261 and SX1262 radio drivers
- added LDL_MAC_CHANNEL_READY event to indicate when subbands become ready
- added LDL_MAC_OP_ERROR event to indicate when a radio error causes requested operation to fail
- added LDL_MAC_entropy() for applications to read radio entropy if it is required
- added blocking interfaces to ruby wrapper for otaa, confirmed, unconfirmed, entropy
- added radio model and feature for dropping frames to Ruby wrapper
- added Readthedocs integration
- added unlimited duty cycle test mode
- added max EIRP limiting and dwell time control for regions that require it
changes
- changed ldl_chip_write_fn and ldl_chip_read_fn to support SX126X as well as older SX127X
- updated chip interface documentation and examples
- changed LDL_MAC_radioEvent interface so that radio driver no longer indicates a specific event (required for SX126X)
- added LDL_Radio_getEvent() which is used to read the specific event from the radio
- removed LDL_MAC_DATA_NAK event since it is not useful to the application
- changed next band timing feature to reduce spurious wakeups for sleepy devices
- changed confirmed data retry to use an exponential back-off (previously used OTAA retry algorithm)
- changed OTAA retry algorithm to make use of the LDL_BAND_GLOBAL down-counter instead of a dedicated down-counter
- changed MAC startup behavior so that radio entropy is no longer read automatically
- removed send time dither option from LDL_MAC_unconfirmedData() and LDL_MAC_confirmedData()
- changed OTAA dither time to be configurable at run-time or compile-time
- changed US/AU OTAA to scan all sub-bands before increasing spreading factor
- changed channel selection code to use rate setting as desired rate rather than actual rate
- change MBED LDL::MAC so that duty cycle limit is no longer applied by default
- changed LDL_MAC_init() so that ldl_mac_init_arg.radio_interface must be defined (do not leave NULL!)
- changed LDL_MAC_init() so that ldl_mac_init_arg.sm_interface must be defined (do not leave NULL!)
- removed LDL_Radio_init()
- added specialised radio init functions: LDL_SX1272_init(), LDL_SX1276_init(), LDL_SX1261_init(), LDL_SX1262_init()
- removed non-essential "toString" functions
- removed LDL_DEFAULT_RATE option (prints error if defined)
- added LDL_DISABLE_SF12 option
- added LDL_DISABLE_LINK_CHECK option to alias LDL_DISABLE_CHECK (prints warning if LDL_DISABLE_CHECK defined)
- added LDL_DISABLE_TX_PARAM_SETUP option
- changed LDL_MAC_cancel() behaviour so that radio is always reset when this function is called
bugs
- fixed bug where cflist didn't apply channel mask for US/AU regions
- fixed bug where duty-cycle off-time was registered before TX meaning off-time was always slightly shorter than
it should be, especially for large spreading factors
Porting From 0.4.6
Changes to the chip interfaces were necessary to support both SX126x and SX127x types.
- "opcode" is changed from a single byte to a variable byte buffer
- the read/write functions now return true if they were successful or false if they fail
- SX127x drivers never fail at chip interface and always always return true
- SX126x drivers can fail at chip interface waiting for the busy line to clear
- refer to chip interface example code
MAC no longer reads random from radio on startup. Random must now be requested
using LDL_MAC_entropy() and read from the LDL_MAC_ENTROPY event.
The LDL_MAC_ENTROPY event has been added, the LDL_STARTUP event has been removed.
All MAC interfaces can now be used regardless of the reset state of the radio driver.
The struct ldl_mac_data_opts no longer has a member for timing dither.
ldl_mac_init_arg.radio_interface and ldl_mac_init_arg.sm_interface MUST be defined
for LDL_MAC_init() to be successful. Assertions will remind you if you forget, hence
it is recommneded to have these on at least for development.
This change necessary to ensure that unused code can be removed by the linker.
The radio driver must now be initialised using a specialised init function
for the driver you are initialising:
- LDL_SX1272_init()
- LDL_SX1276_init()
- LDL_SX1261_init()
- LDL_SX1262_init()
LDL_Radio_init() has been removed.
LDL_DEFAULT_RATE build option has been removed. It has been replaced by
LDL_DISABLE_SF12.
0.4.5
- changed LDL_DEBUG, LDL_INFO, LDL_ERROR to not insert FUNCTION into format string
- changed LDL_DEBUG, LDL_INFO, LDL_ERROR to not take APP argument
- reworked log messages and levels
- added LDL_ENABLE_FAST_DEBUG build option which removes extra delays and dithering required
for use in the field but which slow down development - added 1.0.x memory saving enhancements (contributed by frbehrens)
- added confirmed downlink acknowledgement logic (contributed by frbehrens)
- fixed bug where data downlinks were not being passed to applications (contributed by frbehrens)
- added 1.0.x default key store optimisation
- changed band timers to use gps timebase (1/256Hz timebase)
- changed time tracker to use gps timebase
- removed logic for detecting and handling late RX windows since this won't normally occur
- removed LDL_MAC_timeSinceValidDownlink()
- removed unused ldl_mac fields
- removed events that are not useful to the application (and replaced with log messages)
- removed LDL_MAC_CHIP_ERROR event
- removed LDL_MAC_RESET event
- removed LDL_MAC_RX1_SLOT event
- removed LDL_MAC_RX2_SLOT event
- removed LDL_MAC_DOWNSTREAM
- removed LDL_MAC_TX_BEGIN
- removed LDL_MAC_TX_COMPLETE
- added examples/avr to keep an eye on whether LDL still fits on a 328P
- changed LDL_Radio_getAirTime() to return result in milliseconds and not in a timebase of your choice
- fixed most required MISRA 2012 warnings
- added option of defining ldl_mac_init_arg.tps at compile time with LDL_PARAM_TPS
- added option of defining ldl_mac_init_arg.a at compile time with LDL_PARAM_A
- added option of defining ldl_mac_init_arg.b at compile time with LDL_PARAM_B
- added option of defining ldl_mac_init_arg.advance at compile time with LDL_PARAM_ADVANCE
- refactored MBED radio wrapper so that CMWX1ZZABZ aggregates rather than inherits SX1276
- refactored CMWX1ZZABZ driver to use fixed pin mapping (since it is fixed) which further simplifies its use
0.4.4
- fixed bug where frequency set by MAC commands was 1/100th of the required value (i.e. I forgot to multiply by 100).
This affected rxParamSetup, newChannel, and dlChannel commands. It's likely no-one has ever used
this feature. - added code to previously empty LDL_Region_validateFreq() to check centre frequency is within bounds for a given region
- changed setChannel() to call LDL_Region_validateFreq() to guard against illegal channel settings
- fixed bug in restoreDefaults() where region will always be set to zero
- refactored restoreDefaults() into separate initSession() and forgetNetwork() functions
- fixed bug where ctx.rx2Rate is used instead of ctx.rx2DataRate on receive
- removed rx2Rate from session struct which appears to be duplicate of rx2DataRate
- added debug code to print session to trace