Skip to content

Releases: cjhdev/lora_device_lib

0.4.2

27 Sep 15:06

Choose a tag to compare

  • fixed RegTcxo bug again: got the mapping backwards in 0.4.1
  • fixed bug affecting behaviour of MAC if RX2 slot is handled too late
  • added more debug registers that are read when LDL_ENABLE_RADIO_DEBUG is defined
  • refactored MBED wrapper to not use EventQueue which was causing timing problems
  • added Pout control for RFO SX1276 (was todo)
  • added LDL_ENABLE_POINTONE_ERRATA_A1 build option to apply 1.1 A1 errata
  • added LDL_DISABLE_RANDOM_DEV_NONCE build option for using a counter based devNonce if LDL_DISABLE_POINTONE is defined

0.4.1

24 Sep 18:11

Choose a tag to compare

  • added LDL_TRACE_* macros for verbose debug messages
  • added FUNCTION as first argument to LDL_DEBUG(), LDL_INFO(), and LDL_ERROR() level messages to add consistency in logs
  • added ldl_radio_debug.c/h to have option of printing register access using the trace macros
  • added LDL_ENABLE_RADIO_DEBUG build option to enable trace level radio debugging (depends on LDL_TRACE_*)
  • changed radio driver to set the read/write bit in the opcode instead of having chip_adapter do it
  • fixed bug in SX1276 driver where RegPllHop is written instead of RegTcxo
  • refactored modem config code in ldl_radio.c to work better with debug readback
  • added options to mbed wrapper to enable/disable radio debugging

0.4.0

12 Sep 14:39

Choose a tag to compare

In this release effort has gone into making it easier to evaluate
a working version of this project on MBED.

Effort has also gone into simplifying porting. This was to the detriment
of the Arduino wrapper which depended on various strange things
to get around the severe lack of memory on the 328P. The Arduino wrapper
has been removed from the project to save on maintenance. It can be resurrected
if missed, but the memory requirements have increased slightly so it may
no longer work.

There are many breaking changes in this version. If you are updating
from an earlier version you will likely need to make some changes to your
port.

  • decoupled MAC from SM by way of struct ldl_sm_interface
  • decoupled MAC from Radio by way of struct ldl_radio_interface
  • decoupled Radio from Chip Interface by way of struct ldl_chip_interface
  • LDL_Radio_setEventCallback() must now be set by the application during
    initialisation (after LDL_MAC_init())
  • removed LDL_DISABLE_CMD_DL_CHANNEL option
  • removed LDL_DISABLE_FULL_CHANNEL option
  • removed all options for disabling MAC callback events
  • session keys are now always re-derived as part of LDL_MAC_init (so
    only session and root keys need to persist)
  • antenna gain compensation moved from MAC to Radio
  • refactored Radio interfaces and simplified MAC-Radio interaction
  • refactored MAC states (made some states into operations)
  • removed weak symbols since they are no longer required
  • added TXCO configuration option to Radio
  • added 'chip_set_mode' to the chip interface to combine reset
    line control with accessory line control
  • added session_version field to MAC session so that MAC can detect
    when the session structure has changed between firmware versions
  • removed Arduino wrapper
  • added MBED wrapper
  • added MBED examples for RTOS and baremetal profiles
  • added LDL_MAC_radioEventWithTicks() to work better with OSes that
    need to defer processing an event with a tick value sampled
    closer to the event
  • removed LDL_MAC_errno() since this information is now be returned
    by functions that used to set errno
  • replaced LDL_System_eps() and LDL_System_advance() with ldl_mac.a and ldl_mac.advance. These
    must be initialised at LDL_MAC_init()
  • defined timer compensation formula to be (compensation = 2ldl_mac.aldl_mac.tps + ldl_mac.b)
  • added section on timing compensation to API documentation and porting guide
  • LDL_System_ticks replaced by function pointer ldl_mac.ticks
  • LDL_System_getBatteryLevel replaced by function pointer ldl_mac.get_battery_level
  • LDL_System_rand replaced by function pointer ldl_mac.rand
  • optimised radio timeout to avoid adding extra symbols when large spreading factors are used

0.3.1

24 Feb 11:35

Choose a tag to compare

  • fixed LDL_MAC_JOIN_COMPLETE event to pass argument instead of NULL (thanks dzurikmiroslav)
  • transmit channel is now selected before MIC is generated to solve LoRaWAN 1.1 issues
    caused by the chIndex being part of the MIC generation
  • MIC is now updated for redundant transmissions in LoRaWAN 1.1 mode
  • fixed implementation to reject MAC commands that would cause all
    channels to be masked
  • upstream MAC commands are now deferred until the application sends the next upstream message
  • LDL_MAC_unconfirmedData() and LDL_MAC_confirmedData() will now indicate if they
    have failed due to prioritising deferred MAC commands which cannot fit in
    in the same frame
  • removed LDL_MAC_setNbTrans() and LDL_MAC_getNbTrans() since the per-invocation
    override feature makes it redundant

0.3.0

28 Jan 11:33

Choose a tag to compare

  • BREAKING CHANGE to ldl_chip.h interface to work with SPI transactions; see radio connector documentation or header file for more details
  • updated arduino wrapper to work with new ldl_chip.h interface
  • fixed SNR margin calculation required for DevStatus MAC command; was
    previously returning SNR not margin
  • fixed arduino wrapper garbled payload issue (incorrect session key index from changes made at 0.2.4)
  • fopts IV now being correctly generated for 1.1 servers (i was 1 instead of 0)

0.2.4

13 Jan 02:42

Choose a tag to compare

  • now deriving join keys in LDL_MAC_otaa() so they are ready to check joinAccept
  • fixed joinNonce comparison so that 1.1 joins are possible
  • join nonce was being incremented before key derivation on joining which produced incorrect keys in 1.1 mode
  • implemented a special security module for the arduino wrapper to save some memory in exchange for limiting the wrapper to LoRaWAN 1.0 servers
  • added little endian optimisation build option (LDL_LITTLE_ENDIAN)
  • processCommands wasn't recovering correctly from badly formatted mac commands.
  • added LDL_DISABLE_POINTONE option to remove 1.1 features for devices that will only be used with 1.0 servers
  • removed LDL_ENABLE_RANDOM_DEV_NONCE since it is now covered by LDL_DISABLE_POINTONE
  • changed the way ctr mode IV is generated so that a generic ctr implementation can now be substituted

0.2.3

28 Nov 00:27

Choose a tag to compare

  • fixed apps key derivation bug affecting LoRaWAN 1.1 mode

0.2.2

26 Nov 19:11

Choose a tag to compare

  • changed LDL_OPS_receiveFrame() to use nwk key to decrypt and MIC join accepts
    when they are answering a join request

0.2.1

23 Nov 13:22

Choose a tag to compare

  • new build options
    • LDL_DISABLE_FULL_CHANNEL_CONFIG halves memory required for channel config
    • LDL_DISABLE_CMD_DL_CHANNEL removes handling for this MAC command
  • reduced stack usage during MAC command processing
  • Arduino wrapper now uses LDL_ENABLE_STATIC_RX_BUFFER
  • Arduino wrapper now uses LDL_DISABLE_CHECK
  • Arduino wrapper now uses LDL_DISABLE_DEVICE_TIME
  • Arduino wrapper now uses LDL_DISABLE_FULL_CHANNEL_CONFIG
  • Arduino wrapper now uses LDL_DISABLE_CMD_DL_CHANNEL
  • Arduino wrapper on ATMEGA328P was running out of stack at the point where it had to
    process a MAC command. This is a worry because there is ~1K available for stack.

0.2.0

19 Nov 18:34

Choose a tag to compare

  • LoRaWAN 1.1 support
  • encryption and key management is now the domain of the Security Module (SM)
  • redundant unconfirmed data frames now defer off-time until all frames (i.e. nbTrans) have been sent
  • confirmed and unconfirmed data interfaces now accept an invocation option structure
  • confirmed data services now use the same retry/backoff strategy as otaa
  • standard retry/backoff strategy now guarantees up to 30 seconds of dither to each retransmission attempt
  • antenna gain/loss can now be compensated for at LDL_MAC_init()
  • improved doxygen interface documentation
  • significant changes to filenames and interface names

See history.md for more details.