Implement a secure ICS protocol targeting LoRa Node151 microcontroller for controlling irrigation.
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 
 
 

43 KiB

Changelog

All notable changes to this project will be documented in this file.

The format is based on Keep a Changelog, and this project adheres to Semantic Versioning.

LoRaWAN pre-certification results

Please refer to Releases pre-certification-results document for further information.

[Unreleased]

[4.5.1] - 2021-01-18

General

  • Release based on “LoRaWAN specification 1.0.4” and “LoRaWAN Regional Parameters 2-1.0.1”
  • GitHub reported issues corrections.

Fixed

  • Fixed compiling issues

[4.4.7] - 2021-01-18

General

  • Release based on “LoRaWAN specification 1.0.3” and “LoRaWAN Regional Parameters v1.0.3revA”
  • Release 4.4.7 is an hotfix of 4.4.6 and is the last one supporting “LoRaWAN specification 1.0.3”

Changed

  • Changed examples GitHub version to 4.4.7

Fixed

  • Fixed compiling issues when KR920 or RU864 regions are selected
  • Fixed compiling issues for fuota-test-01 example

[4.5.0] - 2020-12-18

General

  • Release based on “LoRaWAN specification 1.0.4” and “LoRaWAN Regional Parameters 2-1.0.1”
  • GitHub reported issues corrections. Please refer to Release Version 4.5.0

Added

  • Added implementation of LoRaWAN 1.0.4 changes
  • Added implementation for new Certification protocol specification
  • Added GitHub repository and firmware examples version definitions

[4.4.6] - 2020-12-18

General

  • Release based on “LoRaWAN specification 1.0.3” and “LoRaWAN Regional Parameters v1.0.3revA”
  • GitHub reported issues corrections. Please refer to Release Version 4.4.6
  • Release 4.4.6 is the last one supporting “LoRaWAN specification 1.0.3”

Changed

  • Refactored MAC layer and examples Non Volatile Memory data handling
  • Changed NewChannelReq amd DlChannelReq handling to ignore command for AU915, CN470 and US915 regions
  • Updated behavior of SX126xSetLoRaSymbNumTimeout to round up the timeout to the nearest possible number of symbol.
  • Changed radio drivers floating point to integer computations
  • Improved GetNextLowerTxDr function implementation.
  • Changed SX1272 and SX1276 FSK FIFO handling by using FifoLevel IRQ instead of FifoEmpty IRQ
    WARNING DIO1 IRQ MCU pin detection has changed from RISING to RISING_FALLING edge.
  • Changed IMST boards default power source to USB_POWER

Fixed

  • Fixed certification test application handling
  • Fixed ping-pong and rx-sensi examples to use the right FSK_BANDWIDTH and FSK_AFC_BANDWIDTH parameters
  • Fixed one byte transmissions over I2C
  • Fixed RegionIN865RxParamSetupReq DrOffset verification
  • Fixed STM platforms IRQ handlers when using a C++ compiler
  • Fixed an issue where the Join back off algorithm wasn’t being applied when the duty-cycle enforcement was OFF
  • Fixed AU915_MAX_RX1_DR_OFFSET value to 5 instead of 6

Removed

  • Removed ClassA, ClassB and ClassC examples.

[4.5.0-rc.1] - 2020-11-24

General

  • Release based on “LoRaWAN specification 1.0.4” and “LoRaWAN Regional Parameters 2-1.0.1”
  • GitHub reported issues corrections. Please refer to Release Version 4.5.0

Added

  • Added implementation of LoRaWAN 1.0.4 changes
  • Added implementation for new Certification protocol specification
  • Added GitHub repository and firmware examples version definitions

Changed

  • Changed IMST boards default power source to USB_POWER

Fixed

  • Fixed an issue where the Join back off algorithm wasn’t being applied when the duty-cycle enforcement was OFF.
  • Fixed AU915_MAX_RX1_DR_OFFSET value to 5 instead of 6

Removed

  • Removed NvmCtxCallback calls as they should only be done when a modification happens.
  • Removed ClassA, ClassB and ClassC examples.

[4.4.5] - 2020-10-14

General

  • Release based on “LoRaWAN specification 1.0.3” and “LoRaWAN Regional Parameters v1.0.3revA”
  • GitHub reported issues corrections. Please refer to Release Version 4.4.5

Added

  • Added to FRAGMENTATION_FRAG_SESSION_SETUP_REQ checks which verify FragNb and FragSize validity.
  • Added missing call to SX126xSetOperatingMode on SX126xSetTxContinuousWave and SX126xSetTxInfinitePreamble functions
  • Added new specific board API to initialize the RF switch (SX126xIoRfSwitchInit)
  • Add to AS923 and KR920 regions a definition for the Rx bandwidth to be used while executing the LBT algorithm
  • Added support for other AS923 channel sub plan groups.
  • Added FPort filtering to loramac handler packages.
  • Added missing NVM update notifications

Changed

  • Refactored function RegionXXInitDefaults. Fixes an issue on US based bands where the channels mask was not being reset.
  • Changed hard coded JoinAccept max payload size (33) by LORAMAC_JOIN_ACCEPT_FRAME_MAX_SIZE definition.
  • Moved radio operating mode management to specific board implementation
  • Changed radio IsChannelFree API in order to provide reception bandwidth
  • AS923 default downlink dwell time setting changed to disabled
  • Back port 1.0.4 region implementation improvements
  • Changed RegionCommonComputeSymbolTimeLoRa, RegionCommonComputeSymbolTimeFsk and RegionCommonComputeRxWindowParameters API implementations to use integer divisions instead of double division.
  • Changed DeriveSessionKey10x and DeriveSessionKey11x functions API (Removed pointer based variable usage)

Fixed

  • Fixed SX126xSetLoRaSymbNumTimeout to call the workaround only if the number of symbols is equal to or higher than 64.
  • Fixed IAR C++ compiler warnings
  • Fixed missing { after extern "C" in cmac.h file
  • Fixed FragSessionStatusAns message construction for Received&index field
  • Fixed LoRaMacCryptoHandleJoinAccept function DevNonce, RJCount0 and RJCount1 handling.
  • Fixed nonce variable declaration
  • Fixed LoRaMacCrypto.c conditional pre-processing.
  • Fixed missing Rx1Frequency reset for dynamic channel plans
  • Applied Japan ARIB restrictions to the AS923_1_JP sub plan
  • Applied Regional Parameters 1.0.3.revA ERRATA note concerning the ClassB beacon format
  • Fixed SAMR34 compiling issue when USE_RADIO_DEBUG directive is defined
  • Fixed SX126xClearIrqStatus call to only clear read flags
  • Fixed GFSK bandwidth handling for SX126x and LR1110 radios.
  • Fixed version handling for MC root keys derivation
  • Fixed Class B initialization.
  • Fixed duty-cycle implementation

[4.4.4] - 2020-05-26

General

  • Release based on “LoRaWAN specification 1.0.3” and “LoRaWAN Regional Parameters v1.0.3revA”
  • GitHub reported issues corrections. Please refer to Release Version 4.4.4

Added

  • Added the possibility to setup multicast channels locally
  • Added new SecureElementProcessJoinAccept API to the secure-element.h
  • Added possibility to select the secure-element to be used as well as to select if it is pre-provisioned or not
  • Added support for LR1110 radio
  • Added support for LR1110 crypto-engine to be used as secure-element
  • Added support for ATECC608A-TNGLORA secure-element
  • Added LoRaMacDeInitialization API to ease dynamic region change
  • Added possibility to query implemented versions of the LoRaWAN MAC layer and Regional Parameters specifications
  • Added MOTE_MAC_TX_PARAM_SETUP_ANS as sticky MAC command
  • Added a filter to handle multicast downlinks exceptions
  • Added CHANGELOG.md file

Changed

  • Updated examples to use OTAA activation method by default
  • Updated LmhpFragmentation implementation
  • Updated Radio APIs to handle 32-bit register addresses
  • Changed SX126x driver to only process a received packet when there is no CRC error
  • Moved Commissioning.h files to a single one located under src/apps/LoRaMac/common directory
  • Updated Radio.TimeOnAir API in order to be independent of the current hardware settings
  • Moved keys definition and management to the secure-element implementation
  • Moved device identity to secure-element se-identity.h file
  • Changed support of SAML21 platform by SAMR34 platform
  • Changed the MlmeRequest and McpsRequest APIs to report back when the next transmission is possible
  • Changed ResetMacParameters to perform a complete re-initialization of the regional layer after processing the join accept
  • Updated the implementation to verify the MAC commands size
  • Changed the way the duty-cycle management is handled

Removed

  • Removed the LoRaWAN keys display on serial terminal
  • Removed GEN_APP_KEY support as it is equivalent to LoRaWAN 1.1.x APP_KEY
  • Removed tables definition for repeater support. LoRa-Alliance will provide details on these tables usage in future versions
  • Removed Changelog chapter from readme.md file

Fixed

  • Fixed SX126xGetRandom API implementation
  • Fixed SX126x driver missing call to RadioStandby in LoRa modem case inside RadioSetRxConfig API
  • Fixed SX126x driver LoRaSymbNumTimeout handling
  • Fixed soft-se/cmac for misaligned 32-bit access
  • Fixed ping-pong and rx-sensi projects for packets with sizes bigger than 64 bytes handling
  • Fixed missing switch case PHY_BEACON_CHANNEL_FREQ for AU915 region
  • Fixed default data rates for Class B beacon and ping-slots for AU915 region
  • Fixed join request limitation due to duty cycle restrictions
  • Fixed SRV_MAC_DEVICE_TIME_ANS, SRV_MAC_PING_SLOT_INFO_ANS and SRV_MAC_BEACON_TIMING_ANS processing to be executed only if corresponding MLME request is queued
  • Fixed issue where the stack could get stuck in MCPS busy state after MLME Device Time Request
  • Fixed duty-cycle enforcement by disabling it for IN865 region
  • Fixed potential issue where the FCntUp counter could sometimes be incremented by 2 instead of 1
  • Fixed wrong beacon time-on-air calculation

Security

[4.4.3] - 2019-12-17

General

  • Release based on “LoRaWAN specification 1.0.3” and “LoRaWAN Regional Parameters v1.0.3revA”
  • GitHub reported issues corrections. Please refer to Release Version 4.4.3

[4.4.2] - 2019-07-19

General

  • Release based on “LoRaWAN specification 1.0.3” and “LoRaWAN Regional Parameters v1.0.3revA”
  • GitHub reported issues corrections. Please refer to Release Version 4.4.2

Added

  • Added new refactored application examples
  • Added LoRa-Alliance defined application layer protocols support. Only FUOTA test scenario 01 required features are currently implemented
    • “Clock Synchronization” package
    • “Fragmented data block transport” package
    • “Remote multicast setup” package
  • Added a NVM context management module. (Disabled by default)
  • Added secure-element support
  • Added B-L072Z-LRWAN1 platform support
  • Added NucleoL476 platform support
  • Added NucleoL476 platform support
  • Added IMST new platforms
  • Added RU864 region support
  • Added ClassB support
  • Added a callback to notify the upper layer to call LoRaMacProcess function
  • Added support for RxC windows (ClassC) required by the application layer protocols

Changed

  • Examples application refactoring plus the addition of the application status display on the serial port. (921600-8-N-1)
  • Refactored timer.c/h, rtc-driver.c/h and added a systime.c/h module
  • Functions in ISR context have been moved to main context
  • Changed BoardDisableIrq and BoardEnableIrq functions by CRITICAL_SECTION_BEGIN and CRITICAL_SECTION_END respectively
  • Heavily refactored the LoRaMac.c and LoRaMac.h implementation
  • Changed multicast channels handling according to the application layer protocols

Removed

  • Removed SensorNode platform support
  • Removed MoteII platform support
  • Removed LoRaMote platform support
  • Removed US915-Hybrid region support

Fixed

  • Applied SX1272 and SX1276 radios errata note 3.1 to the radio drivers implementation
  • Fixed printf and scanf functions when GCC is used as compiler

[4.4.1] - 2018-03-07

General

  • Release based on “LoRaWAN specification 1.0.2” and “LoRaWAN Regional Parameters v1.0.2rB”
  • GitHub reported issues corrections. Please refer to Release Version 4.4.1

Added

  • Added SX126x radio support
  • Added NucleoL073 and NucleoL152 board platforms support
  • Added Microchip/Atmel SAML21 Xplained Pro hardware platform support
  • Added CMAKE build system support

Removed

  • Removed CoIDE projects support
  • Removed Keil projects support

[4.4.0] - 2017-09-08

General

  • Release based on “LoRaWAN specification 1.0.2” and “LoRaWAN Regional Parameters v1.0.2rB”
  • GitHub reported issues corrections

Added

  • Added SX126x radio support
  • Added NucleoL073 and NucleoL152 board platforms support
  • Added Microchip/Atmel SAML21 Xplained Pro hardware platform support
  • Added CMAKE build system support
  • Added the support for all “LoRaWAN Regional Parameters v1.0.2rB” document defined regions

Changed

  • Changed radio driver to perform the LBT carrier sense continuously for a given period of time
  • Changed implementation to support 1.0.2 specification additions

[4.3.2] - 2017-04-19

General

  • Release based on “LoRaWAN specification 1.0.2”
  • GitHub reported issues corrections

Added

  • Added an algorithm to automatically compute the Rx windows parameters. (Window symbolTimeout and Offset from downlink expected time)
  • Added a workaround to reset the radio in case a TxTimeout occurs
  • Added newly defined TxCw(Tx Continuous Wave) certification protocol command

Changed

  • Changed radio driver to perform the LBT carrier sense continuously for a given period of time
  • Changed implementation to support 1.0.2 specification additions
  • Changed FSK modem handling to use the provided symbolTimeout (1 symbol equals 1 byte) when in RxSingle mode
  • Changed GpioMcuInit function to first configure the output pin state before activating the pin
  • Changed the AdrAckCounter handling as expected by the test houses
  • Relocate parameter settings from ResetMacParameters to the initialization
  • Changed MAC layer indications handling

Removed

  • Removed useless LoRaMacPayload buffer

Fixed

  • Fixed an overflow issue that could happen with NmeaStringSize variable
  • Fixed an issue where the node stopped transmitting

[4.3.1] - 2017-02-27

General

  • Release based on “LoRaWAN specification 1.0.1”
  • GitHub reported issues corrections

Added

  • Added MoteII platform based on the IMST module iM881A (STM32L051C8)
  • Added NAMote72 platform
  • Added TxCw (Tx continuous wave) LoRaWAN compliance protocol command
  • Added TxContinuousWave support to the radio drivers
  • Added region CN470 support

Changed

  • Updated the MAC layer in order to be LoRaWAN version 1.0.1 compliant (Mainly US915 bug fixes)
  • Updated SensorNode projects according to the new MCU reference STM32L151CBU6. Bigger memories
  • Updated ST HAL drivers
    • STM32L1xx_HAL-Driver : V1.2.0
    • STM32L0xx_HAL_Driver : V1.7.0

Removed

  • Removed api-v3 support from the project

Fixed

  • Fixed compliance test protocol command 0x06 behavior
  • Fixed US band in order to pass the LoRaWAN certification

[4.3.0] - 2016-06-22

General

  • Release based on “LoRaWAN specification 1.0.1”
  • GitHub reported issues corrections

Added

  • Added radio RX_TIMEOUT irq clear into the irq handler
  • Added retransmission back-off
  • Added debug pin support to LoRaMote platform
  • Added a function to verify the RX frequency of window 2 for US band

Changed

  • Applied to all application files the certification protocol change for LoRaWAN 1.0.1 compliance tests
    REMARK: api-v3 application files aren’t updated
  • Update of the STM32L0 HAL to version 1.6.0
  • Consolidated the line endings across all project files Windows line endings has been choose for almost every file
  • Updated maximum payload size for US band
  • Update data rate offset table for US band
  • Make MAC commands sticky
  • Updated and improved MPL3115 device driver
  • RTC driver major update

Removed

  • Removed the end less loop from HAL_UART_ErrorCallback
  • Remove the TxPower limitation for US band on LoRaMacMibSetRequestConfirm function. The power will be limited anyway when the SendFrameOnChannel functions is called

Fixed

  • Issue(#81): Bug fix in function LoRaMacMlmeRequest case MLME_JOIN. Function will return LORAMAC_STATUS_BUSY in case the MAC is in status MAC_TX_DELAYED
  • Issue(#83): Bug fix in parameter validation
  • Issue(#84): Fix issue of CalibrateTimer function
  • Applied pull request #87
  • Issue(#88): Bug fix in function PrepareFrame where repeated MAC commands were not handled correctly
  • Fixed OnRadioRxDone Node now drops frames on port 0 with fOpts > 0
  • Fixed OnRadioRxDone Node now receives frames with fOpts > 0 when no payload is present

[4.2.0] - 2016-05-13

General

  • Release based on “LoRaWAN specification 1.0.0”
  • GitHub reported issues corrections

Added

  • Added a definition for the LoRaWAN device address. Add an IEEE_OUI for the LoRaWAN device EUI
  • Added a definition for the default data rate
  • Introduce individual MIN and MAX datarates for RX and TX
  • Added the possibility to set and get the ChannelsDefaultDatarate
  • Introduce a new status MAC_RX_ABORT. Reset MAC_TX_RUNNING only in OnMacStateCheckTimerEvent

Changed

  • Update STM32L1xx_HAL_Driver version to 1.5. Update related drivers and implementations accordingly
    REMARK: This change implies that the time base had to be changed from microseconds to milliseconds
  • Optimize radio drivers regarding FSK PER
  • Increase RTC tick frequency for higher resolution
  • Update the radio wake up time
  • Update channel mask handling for US915 hybrid mode to support any block in the channel mask
  • Optimization of the RX symbol timeout
  • Replace definition LORAMAC_DEFAULT_DATARATE by ChannelsDefaultDatarate in LoRaMacChannelAdd
  • Accept MAC information of duplicated, confirmed downlinks

Fixed

  • Fixed the frequency check condition for // ERRATA 2.1 - Sensitivity Optimization with a 500 kHz Bandwidth
  • Fixed an issue when calling SX127xInit function more than once
  • Issue(#66) correction of functions SX1276SetOpMode and SX1272SetOpMode
  • Issue(#68): Fix for low level RF switch control
  • Issue(#56) correction
  • Issue(#63) correct the maximum payload length in RX mode
  • Fixed Tx power setting loss for repeated join requests on US band
  • Issue(#59): Add the possibility to set the uplink and downlink counter
  • Issue(#72): Fix of possible array overrun in LoRaMacChannelRemove
  • Issue(#74): Drop frames with a downlink counter difference greater or equal to MAX_FCNT_GAP

[4.1.0] - 2016-03-10

General

  • Release based on “LoRaWAN specification 1.0.0”
  • GitHub reported issues corrections
  • This version has passed all mandatory LoRa-Alliance compliance tests
    One of the optional tests is unsuccessful (FSK downlinks PER on Rx1 and Rx2 windows) and is currently under investigation

Added

  • Add missing documentation about MIB_REPEATER_SUPPORT. (Issue #42)
  • Add a new LoRaMacState to allow adding channels during TX procedure. (Issue #43)
  • Add a new function PrepareRxDoneAbort to prepare a break-out of OnRadioRxDone in case of an error

Changed

  • Application state machine. Relocate setting sleep state and update the duty cycle in compliance test mode
  • Changed TimerHwDelayMs function to be re-entrant
  • Rename attribute nbRetries to NbTrials in structure McpsReqConfirmed_t. (Issue #37)
  • Updated implementation of SetNextChannel. Added enabling default channels in case of join request. (Issue #39)
  • Relocate the activation of LoRaMacFlags.Bits.McpsInd in OnRadioRxDone
  • Reset status of NodeAckRequested if we received an ACK or in case of timeout
  • Improved and corrected AdrNextDr function

Removed

  • Removed support for Raisonance Ride7 IDE (Reduces the amount of work to be done at each new release)
  • Removed the Bleeper-72 and Bleeper-76 platforms support as these are now deprecated
  • Removed additional EU868 channels from the LoRaWAN implementation files. GitHub (Issue #49)
    The creation of these additional channels has been moved to the application example

Fixed

  • Fixed TimerIrqHandler. Now, it is possible to insert timers in callback
  • Fixed FSK modem packets bigger than 64 bytes handling (Issue #36)
  • Fixed default channels activation in case all others are disabled. (Issue #39)
  • Fixed default channel setting in case none is enabled
  • Fixed SRV_MAC_NEW_CHANNEL_REQ MAC command by adding a fix to the macIndex variable on US915 band
  • Start the MacStateCheckTimer in OnRxDone and related error cases with a short interval to handle events promptly. (Issue #44)

[4.0.0] - 2015-12-18

General

  • Release based on “LoRaWAN specification 1.0.0”
  • GitHub reported issues corrections

Added

  • LoRaWAN certification protocol implementation

Changed

  • STACKFORCE new API integration
  • Reverse the EUIs arrays in the MAC layer

[3.4.1] - 2015-11-06

General

  • Release based on “LoRaWAN specification 1.0.0”
  • GitHub reported issues corrections

Fixed

  • Fixed downlink counter roll over management when several downlinks were missed
  • Fixed the Radio maximum payload length management. Radio was filtering received frames with a length bigger than the transmitted one
  • Applied Pull request #22 solution proposition

[3.4.0] - 2015-10-30

General

  • Release based on “LoRaWAN specification 1.0.0”
  • GitHub reported issues corrections

Added

  • Added TimerStop function calls to each timer event callback
  • Added some missing variables casts. Helps on code portability
  • Added const variable attribute when necessary to functions prototypes
  • Added LORAMAC_MIN_RX1_DR_OFFSET and LORAMAC_MAX_RX1_DR_OFFSET definitions to LoRaMac-board.h. Can be different upon used PHY layer
  • Added the limitation of output power according to the number of enabled channels for US915 band
  • Added the limitation of the applicative payload length according to the data rate. Does not yet take in account the MAC commands buffer. (Issue #15)

Changed

  • Changed all applications in order to have preprocessing definitions on top of the files and added relevant comments
  • Applications LED control is no more done into the timer callback functions but instead on the main while loop
  • Changed types names for stdint.h names. Helps on code portability
  • Renamed rand and srand to rand1 and srand1. Helps on code portability
  • Moved ID1, ID2 and ID3 definition from board.h to board.c, usb-cdc-board.c and usb-dfu-board.c
  • Renamed BoardMeasureBatterieLevel to BoardGetBatteryLevel
  • Added SetMaxPayloadLength API function to SX1272 and SX1276 radio drivers
  • Changed the name of Radio API Status function to GetStatus
  • Changed AES/CMAC types names for stdint.h names. Helps on code portability (Issue #20)
  • Moved __ffs function from utilities.h to spi-board.c. This function is only used there
  • Added support for the US915 band (Normal mode and hybrid mode. Hybrid mode is a temporary configuration up until servers support it automatically) (Issue #16)
  • Replaced the usage of __IO attribute by volatile
  • Renamed LoRaMacEvent_t into LoRaMacCallbacks_t and added a function pointer for getting battery level status
  • Renamed LoRaMacSetDutyCycleOn into LoRaMacSetTestDutyCycleOn
  • Renamed LoRaMacSetMicTest into LoRaMacTestSetMic
  • Increased the PHY buffer size to 250
  • LoRaMacEventInfo.TxDatarate now returns LoRaWAN data rate (DR0 -> DR7) instead of (SF12 -> DF7)
  • LoRaMac-board.h now implements the settings for the PHY layers specified by LoRaWAN 1.0 specification. (EU433, CN780, EU868, US915) (Issue #19)

Removed

  • Removed NULL definition from board.h
  • Removed the definition of RAND_SEED. It has been replaced by a function named BoardGetRandomSeed
  • Removed fputc function redefinition from Utilities.c
  • Removed the usage of PACKED attribute for data structures
  • Removed IsChannelFree check on LoRaMacSetNextChannel function. LoRaWAN is an ALHOA protocol. (Pull request #8)

Fixed

  • Fixed timings comments. Timing values are most of the time us based
  • Fixed and simplified the downlink sequence counter management
  • Fixed channel mask management for EU868 band
  • Fixed LoRaMacPrepareFrame function behavior when no applicative payload is present
  • Fixed MacCommandBufferIndex management. (Issue #18)

[3.3.0] - 2015-08-07

General

  • Release based on “LoRaWAN specification 1.0.0”
  • GitHub reported issues corrections

Added

  • Added the support for LoRaWAN Class C devices
  • Added the possibility to change the channel mask and number of repetitions trough SRV_MAC_LINK_ADR_REQ command when ADR is disabled

Changed

  • Increased FSK SyncWord timeout value in order to listen for longer time if a down link is available or not. Makes FSK downlink more reliable
  • Increased the UART USB FIFO buffer size in order to handle bigger chunks of data
  • Renamed data rates as per LoRaWAN specification
  • Changed confirmed messages function to use default datarate when ADR control is off
  • After a Join accept the node falls back to the default datarate. Enables the user to Join a network using a different datarate from its own default one
  • Moved the MAC commands processing to the right places. FOpts field before the Payload and Port 0 just after the decryption. (Pull request #9)

Fixed

  • Implemented the radios errata note workarounds. SX1276 errata 2.3 “Receiver Spurious Reception of a LoRa Signal” is not yet implemented
  • Fixed handling of the MAC commands which was done incorrectly the condition to verify the length of the buffer has changed from < to <=
  • Fixed Rx1DrOffset management. In previous version DR1 was missing for all offsets
  • Fixed default FSK channel frequency
  • Fixed a firmware freeze when one of the following situations arrived in OnRxDone callback: bad address, bad MIC, bad frame. (Pull request #10)
  • Fixed weird conditions to check data rate on MAC command SRV_MAC_NEW_CHANNEL_REQ (Pull request #7)
  • Fixed join accept message handling to be ignored if already joined (Pull request #6)
  • Fixed channel index verification should use OR on SRV_MAC_NEW_CHANNEL_REQ command (Pull request #5)
  • Fixed the CFList management on JoinAccept. The for loop indexes were wrong. (Pull request #4)
  • Fixed AES key size (Pull request #3)

[3.2.0] - 2015-04-30

General

  • Release based on “LoRaWAN specification 1.0.0”
  • GitHub reported issues corrections

Added

  • Added the support of packed structures when using IAR tool chain
  • Added a function to get the time in us
  • Added a typedef for time variables (TimerTime_t)
  • Added a function that returns if the GPS has a fix or not
  • Added missing MAC commands and updated others when necessary
    • Corrected the Port 0 MAC commands decryption

    • Changed the way the upper layer is notified. Now it is only notified when all the operations are finished

      When a ClassA Tx cycle starts a timer is launched to check every second if everything is finished

    • Added a new parameter to LoRaMacEventFlags structure that indicates on which Rx window the data has been received

    • Added a new parameter to LoRaMacEventFlags structure that indicates if there is applicative data on the received payload

    • Corrected ADR MAC command behavior

    • DutyCycle enforcement implementation (EU868 PHY only)

      REMARK 1 The regulatory duty cycle enforcement is enabled by default which means that for lower data rates the node may not transmit a new frame as quickly as requested
      The formula used to compute the node idle time is

      Toff = TimeOnAir / DutyCycle - TxTimeOnAir
      

      Example:
      A device just transmitted a 0.5 s long frame on one default channel This channel is in a sub-band allowing 1% duty-cycle. Therefore this whole sub-band (868 MHz - 868.6 MHz) will be unavailable for 49.5 s.

      REMARK 2 The duty cycle enforcement can be disabled for test purposes by calling the LoRaMacSetDutyCycleOn function with false parameter.

    • Implemented aggregated duty cycle management

    • Added a function to create new channels

    • Implemented the missing features on the JoinAccept MAC command

    • Updated LoRaMacJoinDecrypt function to handle the CFList field

  • Added the possibility to chose to use either public or private networks

Changed

  • Cosmetic updates
  • Changed the TimeOnAir radio function to return a uint32_t value instead of a double. The value is in us
  • Changed the GetPosition functions to return a latitude and longitude of 0 and altitude of 65535 when no GPS fix
  • Due to duty cycle management the applicative API has changed
    All applications must be updated accordingly

Removed

  • Removed support for previous LoRaMac/LoRaWAN specifications

Fixed

  • Fixed the 250 kHz bandwidth choice for the FSK modem

[3.1.0] - 2015-01-30

General

  • Release based on “LoRaMac specification R3.0.0”
  • GitHub reported issues corrections

Added

  • Started to add support for CooCox CoIDE Integrated Development Environment
    Currently only LoRaMote and SensorNode platform projects are available
  • Added the support of different tool chains for the HardFault_Handler function
  • Added an invalid bandwidth to the Bandwidths table in order to avoid an error when selecting 250 kHz bandwidth when using FSK modem
  • Added another timer in order increment the tick counter without blocking the normal timer count
  • Added the possibility to switch between low power timers and normal timers on the fly
  • Added an I2C EEPROM driver
  • Added the possibility to analyze an hard fault interrupt
  • Added the possibility to configure almost all the MAC parameters
  • Added the functions to read the Up and Down Link sequence counters

Changed

  • Updated GCC compiler linker scripts
  • Changed the RSSI values type from int8_t to int16_t. We can have RSSI values below -128 dBm
  • Updated radio API to support FHSS and CAD handling
  • Changed all structures declarations to be packed
  • Automatically activate the channel once it is created

Fixed

  • Fixed Radio drivers I&Q signals inversion to be possible in Rx and in Tx
    Added some missing radio state machine initialization
  • Fixed SNR computation on RxDone interrupt
  • Fixed in SetRxConfig function the FSK modem preamble register name
  • Fixed RTC alarm setup which could be set to an invalid date
  • Fixed I2C driver by correcting the 2 bytes internal address management
    Corrected buffer read function when more that 1 byte was to be read Added a function to wait for the I2C bus to become IDLE
  • Fixed and improved USB Virtual COM Port management files
    Corrected the USB CDC and USB UART drivers
  • Fixed RxWindow2 data rate management
  • Fixed SrvAckRequested variable was never reset
  • Fixed tstIndoor applications for LoRaMac R3.0 support
  • Fixed the LoRaMacSetNextChannel function
  • Fixed the port 0 MAC command decoding
  • Fixed the Acknowledgment retries management when only 1 trial is needed
    Before the device was issuing at least 2 trials
  • Fixed server mac new channel req answer
  • Fixed SRV_MAC_RX2_SETUP_REQ frequency handling Added a x100 multiplication
  • Fixed SRV_MAC_NEW_CHANNEL_REQ
    Removed the DutyCycle parameter decoding
  • Fixed NbRepTimeoutTimer initial value. RxWindow2Delay already contains RxWindow1Delay in it

[3.0.0] - 2014-07-18

General

  • Release based on “LoRaMac specification R3.0.0”
  • GitHub reported issues corrections

Added

  • Added to Radio API the possibility to select the modem

Changed

  • Changed radio callbacks events to timeout when it is a timeout event and error when it is a CRC error
  • Radio API updated
  • Updated ping-pong applications
  • Updated tx-cw applications
  • Updated LoRaMac applications in order to handle LoRaMac returned functions calls status
  • Updated LoRaMac applications to toggle LED2 each time there is an application payload down link
  • Updated tstIndoor application to handle correctly more than 6 channels
  • Changed the MPL3115 altitude variable from unsigned to signed value
  • Changed the usage of pow(2, n) by defining POW2 functions Saves ~2 KBytes of code
  • MAC commands implemented
    • LinkCheckReq YES
    • LinkCheckAns YES
    • LinkADRReq YES
    • LinkADRAns YES
    • DutyCycleReq YES
    • DutyCycleAns YES
    • Rx2SetupReq YES
    • Rx2SetupAns YES
    • DevStatusReq YES
    • DevStatusAns YES
    • JoinReq YES
    • JoinAccept YES
    • NewChannelReq YES
    • NewChannelAns YES
  • Features implemented
    • Possibility to shut-down the device YES (Possible by issuing DutyCycleReq MAC command)
    • Duty cycle management enforcement NO
    • Acknowledgments retries YES
    • Unconfirmed messages retries YES

Fixed

  • Fixed RSSI reading formulas as well as changed the RSSI and SNR values from double to int8_t type
  • Fixed an issue potentially arriving when LOW_POWER_MODE_ENABLE wasn’t defined
    A timer interrupt could be generated while the TimerList could already be emptied

[2.3.0-RC2] - 2014-07-10

General

  • Release based on “LoRaMac specification R2.2.1”
  • GitHub reported issues corrections

Fixed

  • Fixed all radios antenna switch low power mode handling
  • Fixed SX1276 antenna switch control

[2.3.0-RC1] - 2014-06-06

General

  • GitHub reported issues corrections

Added

  • Added the support for SX1276 radio
  • Added Bleeper-76 and SensorNode platforms support
  • Added to the radio drivers a function that generates a random value from RSSI readings
  • Added a project to transmit a continuous wave and a project to measure the the radio sensitivity
  • Added a bootloader project for the LoRaMote and SensorNode platforms
  • Added a function to the timer driver that checks if a timer is already in the list or not
  • Added the UART Overrun bit exception handling to the UART driver

Changed

  • Radio driver RxDone callback function API has changed (size parameter is no more a pointer)
    • Previous function prototype:
      void ( *RxDone )( uint8_t *payload, uint16_t *size, double rssi, double snr, uint8_t rawSnr );
    • New function prototype:
      void ( *RxDone )( uint8_t *payload, uint16_t size, double rssi, double snr, uint8_t rawSnr );
  • The LoRaMac application for Bleeper platforms now sends the Selector and LED status plus the sensors values
    • The application payload for the Bleeper platforms is as follows:
      LoRaMac port 1:

      { 0xX0/0xX1, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 }
        ----------  ----------  ----------  ----------  ----
            |           |           |           |        |
      SELECTOR/LED  PRESSURE   TEMPERATURE  ALTITUDE  BATTERY
      MSB nibble = SELECTOR               (barometric)
      LSB bit    = LED
      
  • Redefined rand() and srand() standard C functions. These functions are redefined in order to get the same behavior across different compiler tool chains implementations
  • GPS driver improvements. Made independent of the board platform
  • Simplified the RTC management
  • MAC commands implemented
    • LinkCheckReq YES
    • LinkCheckAns YES
    • LinkADRReq YES
    • LinkADRAns YES
    • DutyCycleReq YES (LoRaMac specification R2.2.1)
    • DutyCycleAns YES (LoRaMac specification R2.2.1)
    • Rx2SetupReq YES (LoRaMac specification R2.2.1)
    • Rx2SetupAns YES (LoRaMac specification R2.2.1)
    • DevStatusReq YES
    • DevStatusAns YES
    • JoinReq YES
    • JoinAccept YES (LoRaMac specification R2.2.1)
    • NewChannelReq YES (LoRaMac specification R2.2.1)
    • NewChannelAns YES (LoRaMac specification R2.2.1)
  • Features implemented
    • Possibility to shut-down the device YES (Possible by issuing DutyCycleReq MAC command)
    • Duty cycle management enforcement NO
    • Acknowledgments retries WORK IN PROGRESS (Not fully debugged. Disabled by default)
    • Unconfirmed messages retries WORK IN PROGRESS (LoRaMac specification R2.2.1)
  • Due to new specification the LoRaMacInitNwkIds LoRaMac API function had to be modified
    • Previous function prototype:
      void LoRaMacInitNwkIds( uint32_t devAddr, uint8_t *nwkSKey, uint8_t *appSKey );
    • New function prototype:
      void LoRaMacInitNwkIds( uint32_t netID, uint32_t devAddr, uint8_t *nwkSKey, uint8_t *appSKey );
  • Changed the LoRaMac channels management
  • LoRaMac channels definition has been moved to LoRaMac-board.h file located in each specific board directory

Removed

  • Removed dependency of spi-board files to the __builtin_ffs function
    This function is only available on GNU compiler tool suite
    Removed --gnu compiler option from Keil projects
    Added own __ffs function implementation to utilities.h file
  • Removed obsolete class1 devices support

Fixed

  • Fixed Radio continuous reception mode

[2.2.0] - 2014-04-07

General

  • GitHub reported issues corrections

Added

  • Added IMST SK-iM880A starter kit board support to the project
    • The application payload for the SK-iM880A platform is as follows:
      LoRaMac port 3:

          { 0x00/0x01, 0x00, 0x00, 0x00 }
           ----------  ----- ----------
                |        |       |
               LED     POTI     VDD
      

Changed

  • Ping-Pong applications have been split per supported board
  • Made fifo functions coding style coherent with the project
  • UART driver is now independent of the used MCU

Fixed

  • Fixed the SX1272 output power management
    • Added a variable to store the current Radio channel
    • Added missing FSK bit definition

[2.1.0] - 2014-03-28

General

  • GitHub reported issues corrections

Added

  • Added to the radio driver the possibility to choose the preamble length and rxSingle symbol timeout in reception
  • Added Hex coder selector driver for the Bleeper board
  • Added acknowledgments retries management
    • Split the LoRaMacSendOnChannel function in LoRaMacPrepareFrame and LoRaMacSendFrameOnChannel LoRaMacSendOnChannel now calls the 2 newly defined functions
      WARNING: By default the acknowledgment retries specific code isn’t enabled
      The current http://iot.semtech.com server version doesn’t support it
  • Added LORAMAC_EVENT_INFO_STATUS_MAC_ERROR event info status

Changed

  • The timers and RTC management has been rewritten
  • Improved the UART and UP501 GPS drivers
  • Changed copyright Unicode character to (C) in all source files
  • MAC commands implemented
    • LinkCheckReq YES
    • LinkCheckAns YES
    • LinkADRReq YES
    • LinkADRAns YES
    • DevStatusReq YES
    • DevStatusAns YES
    • JoinReq YES
    • JoinAccept YES

Fixed

  • Fixed GPIO pin names management
  • Fixed the antenna switch management in the SX1272 driver
  • Fixed issues on JoinRequest and JoinAccept MAC commands

[2.0.0] - 2014-02-21

General

  • GitHub reported issues corrections

Added

  • Added new MAC layer application API implementation
  • Added sensors drivers implementation

Changed

  • The LoRaMac applications now sends the LED status plus the sensors values For the LoRaMote platform the application also sends the GPS coordinates
    • The application payload for the Bleeper platform is as follows:
      LoRaMac port 1:

        { 0x00/0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 }
         ----------  ----------  ----------  ----------  ----
             |           |           |           |        |
            LED      PRESSURE   TEMPERATURE  ALTITUDE  BATTERY
                                           (barometric)
      
    • The application payload for the LoRaMote platform is as follows:
      LoRaMac port 2:

        { 0x00/0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 }
          ----------  ----------  ----------  ----------  ----  ----------------  ----------------  ----------
              |           |           |           |        |           |                 |              |
             LED      PRESSURE   TEMPERATURE  ALTITUDE  BATTERY    LATITUDE          LONGITUDE      ALTITUDE
                                            (barometric)                                              (gps)
      
  • Changed applications examples according to the new MAC layer API
  • MAC commands implemented
    • LinkCheckReq YES
    • LinkCheckAns YES
    • LinkADRReq YES
    • LinkADRAns YES
    • DevStatusReq YES
    • DevStatusAns YES
    • JoinReq YES (Not tested)
    • JoinAccept YES (Not tested)

Known bugs

  • Still some issues with RTC/Timer. Will be solved in a future version

[1.1.0] - 2014-01-24

General

  • GitHub reported issues corrections

Added

  • Implemented an application LED control

    • If the server sends on port 1 an application payload of one byte with the following contents:

      0: LED off
      1: LED on
      
  • The node transmits periodically on port 1 the LED status on 1st byte and the message “Hello World!!!!” the array looks lik

     { 0, 'H', 'e', 'l', 'l', 'o', ' ', 'W', 'o', 'r', 'l', 'd', '!', '!', '!', '!' }
    

Changed

  • MAC commands implemented
    • LinkCheckReq NO
    • LinkCheckAns NO
    • LinkADRReq YES
    • LinkADRAns YES
    • DevStatusReq YES
    • DevStatusAns YES

Known bugs

  • There is an issue when launching an asynchronous Timer. Will be solved in a future version

[1.1.0-RC1] - 2014-01-20

Added

  • Added Doc directory. The directory contains:
    • LoRa MAC specification
    • Bleeper board schematic

Changed

  • Changed LoRaMac according to Release1 of the specification. Main changes are:
    • MAC API changed
    • Frame format
    • ClassA first ADR implementation
    • MAC commands implemented
      • LinkCheckReq NO
      • LinkCheckAns NO
      • LinkADRReq YES
      • LinkADRAns NO
      • DevStatusReq NO
      • DevStatusAns NO
  • Timers and RTC rewriting. Known bugs are:
    • The Radio wakeup time is taken in account for all timings
    • When opening the second reception window the microcontroller sometimes doesn’t enter in low power mode

[1.0.0] - 2013-11-28

General

  • Initial version of the LoRa MAC node firmware implementation