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.
Please refer to Releases pre-certification-results document for further information.
- Release based on "LoRaWAN specification 1.0.4" and "LoRaWAN specification 1.1.0 + FCntDwn ERRATA" with "LoRaWAN Regional Parameters 2-1.0.3"
- GitHub reported issues corrections.
- SAMR34 platform does not implement NVM storage functionality. This is a requirement for LoRaWAN versions greater or equal to 1.0.4. No work on this subject is forseen by the maintainers. Implementation proposals are welcome.
- Trigger NVM update on
MacGroup2.DutyCycleOn
change - Configure radio sync word upon state restoration from NVM
- Added missing return status initialization for Class A
- Added a check for
GroupId
in order to avoid out of bounds access - Make LBT RSSI free channel threshold and carrier sense time (CST) parameters configurable
- Signal NVM data change in
LoRaMacMc*
functions - Teach
LoRaMacIsBusy
return false if the MAC is stopped - Added support for new release of ARIB STD-T108 Ver1.4 under AS923 region
- Support LoRaWAN 1.1 with ATECC608A/B secure element
- Added a function to reset the stack internal state machine
- Added an option for MAC commands to verify against an explicit confirmation
- Added a check to verify that
SystemMaxRxError
provided value is in the range 0..500 ms
- Updated regions implementation to regional parameters RP2-1.0.3
- Move AdrAckLimit and AdrAckDelay to NVM
MacGroup2
- Refactored and improved the way the duty-cycle is managed
- Fixed class B multicast handling in
LoRaMacClassBProcessMulticastSlot()
- Restore
RegionGroup2
inRestoreNvmData
- Fix a duty cycle related deadlock in
ScheduleTx
- Fixed where
LastDownFCnt
update takes place for LoRaWAN 1.1.x - Fixes for class C activation and deactivation
- Don't
memset
the TX/RX buffer when radio is set to receive mode - Fixed usage of wrong API for general purpose keys
- Fixed and refactored JoinReq,
ReJoinType0Req
,ReJoinType1Req
,ReJoinType2Req
handling - Fixed Rx windows timer handling
- Fixed FUOTA fragmentation implementation
- Fixed time credits check as proposed
- Fixed potential buffer overflow in
ProcessRadioRxDone
- Security - Applied the proposed fix for the CRC check of empty
struct
- Fixed inconsistent handling of undefined callbacks
- Fixed
HardFault_Handler
for Cortex-M0 targets - Fixed ABP join handling to be similar to OTAA join handling
- Fixed issue with RX2 data rate in case of 0x0F for
RxParamSetupReq
andJoinAccept
- Removed useless
FOptsLen
filed check - Removed unused
ACTIVE_REGION
pre-processing check
- Security breach found by Simon Wörner(@SWW13) please refer to security advisory - security advisory - CVE-2022-39274
- Release based on "LoRaWAN specification 1.0.4" and "LoRaWAN specification 1.1.0 + FCntDwn ERRATA" with "LoRaWAN Regional Parameters 2-1.0.1"
- GitHub reported issues corrections.
- SAMR34 platform does not implement NVM storage functionality. This is a requirement for LoRaWAN versions greater or equal to 1.0.4. No work on this subject is forseen by the maintainers. Implementation proposals are welcome.
- Added NbTrans default value reset under JoinAccept processing
- Added missing Class B certification commands
- Added missing
classBParams.NetworkActivation
variable initialization - Added Class B remote multicast setup support
- Added data rate validation to the join accept message handling
- Added channel id limits verification to DlChannelReq handling
- Changed
LmHandlerDeviceTimeReq
API to be publicly accessible - Changed improved the way
USE_LRWAN_1_1_X_CRYPTO
pre-processing directive is used - Changed improved the way
JoinNonce
is checked
- Fixed first beacon acquisition after receiving a
DeviceTimeAns
. - Fixed
LmHandlerParams_t
PingSlotPeriodicity
field type frombool
touint8_t
- Fixed i2c.h to include "utilities.h".
- Fixed VSCode
periodic-uplink-lpp
project default LoRaWAN class selection - Fixed SX127x FSK transmission when radio current operating mode is RX.
- Removed no more needed
MLME_SCHEDULE_UPLINK
notification
- Release based on "LoRaWAN specification 1.0.4" and "LoRaWAN Regional Parameters 2-1.0.1"
- GitHub reported issues corrections.
- SAMR34 platform does not implement NVM storage functionality. This is a requirement for LoRaWAN versions greater or equal to 1.0.4. No work on this subject is forseen by the maintainers. Implementation proposals are welcome.
- Added possibility to override periodic-uplink-lpp example
LORAWAN_DEFAULT_CLASS
- Added I2C driver support for B-L072Z-LRWAN1 and Nucleo platforms to the build system
- Added battery voltage and MCU temperature reading functions implementation for Nucleo platforms
- Added a default value for
Request->ReqReturn.DutyCycleWaitTime
to ensure that a valid value is always returned - Added SX126x
REG_RX_GAIN
andREG_TX_MODULATION
to the radio registers retention list - Added SX126x missing registers definitions
- Added radio image calibration enforcement after radio initialization and radio sleep cold start.
- Added possibility to query minimal Tx data rate
- Updated ADC driver based on en.en-st-stm32cubeide examples
- Changed improved the way
LmHandler
handles the packages transmissions - Changed certification
OnTxPeriodicityChanged
callback implementation in order to directly apply the requested change - Changed the
LmHandler
initialization to apply user default data rate - Changed SX1272 and SX1276 FSK FIFO threshold from 15 to 31 in order to give more time for the MCU to make other processing tasks
- Changed the way
IrqFired
global variable is handled byRadioIrqProcess
- Changed the place of call to
TimerStop( &RxTimeoutTimer )
onRadioIrqProcess
implementation - Changed utilities.h
SUCCESS
/FAIL
definition by an enumerationLMN_STATUS_OK
/LMN_STATUS_ERROR
- Fixed Null pointer exception when CN470 region was selected
- Fixed
src/system/gps.c
HasFix variable type fromdouble
tobool
- Fixed Class C downlink handling
- Fixed I2C driver for L476
- Fixed re-transmissions handling when ClassB or ClassC downlink is received
- Fixed certification
FPort224DisableReq
command NVM handling - Fixed Class B & C confirmed downlink acknowledge management when
CLASS_B_C_RESP_TIMEOUT
expires - Fixed an issue when receiving downlinks in class C window during a class A procedure
- Fixed SX126x and LR1110 driver IrqFired variable management
- Fixed
LmhpCompliance.c
periodicity
array size computation - Fixed join back-off by not storing band usage on the NVM memory.
- Fixed
LoRaMacMibGetRequestConfirm
MIB_SE_PIN
handling - Fixed ping-slot frequency to take in account the
AS923_FREQ_OFFSET_HZ
parameter - Fixed fragmentation loop variable type in order to allow more than 255 fragments
- Fixed
RtcMs2Tick
conversion on SAMR34 - Fixed compiling issue when RU864 region is selected
- Fixed
MLME_SCHEDULE_UPLINK
handling.
- Removed STM32 platforms system wake up time calibration
- Release based on "LoRaWAN specification 1.0.4" and "LoRaWAN Regional Parameters 2-1.0.1"
- GitHub reported issues corrections.
- Fixed compiling issues
- 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 examples GitHub version to 4.4.7
- Fixed compiling issues when KR920 or RU864 regions are selected
- Fixed compiling issues for
fuota-test-01
example
- 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 implementation of LoRaWAN 1.0.4 changes
- Added implementation for new Certification protocol specification
- Added GitHub repository and firmware examples version definitions
- 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"
- Refactored MAC layer and examples Non Volatile Memory data handling
- Changed
NewChannelReq
amdDlChannelReq
handling to ignore command forAU915
,CN470
andUS915
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 ofFifoEmpty
IRQ
WARNING DIO1 IRQ MCU pin detection has changed fromRISING
toRISING_FALLING
edge. - Changed IMST boards default power source to
USB_POWER
- Fixed certification test application handling
- Fixed
ping-pong
andrx-sensi
examples to use the rightFSK_BANDWIDTH
andFSK_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 ClassA, ClassB and ClassC examples.
- 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 implementation of LoRaWAN 1.0.4 changes
- Added implementation for new Certification protocol specification
- Added GitHub repository and firmware examples version definitions
- Changed IMST boards default power source to USB_POWER
- 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 NvmCtxCallback calls as they should only be done when a modification happens.
- Removed ClassA, ClassB and ClassC examples.
- 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 to
FRAGMENTATION_FRAG_SESSION_SETUP_REQ
checks which verifyFragNb
andFragSize
validity. - Added missing call to
SX126xSetOperatingMode
onSX126xSetTxContinuousWave
andSX126xSetTxInfinitePreamble
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
- 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) byLORAMAC_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
andRegionCommonComputeRxWindowParameters
API implementations to use integer divisions instead of double division. - Changed DeriveSessionKey10x and DeriveSessionKey11x functions API (Removed pointer based variable usage)
- 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
{
afterextern "C"
incmac.h
file - Fixed
FragSessionStatusAns
message construction forReceived&index
field - Fixed
LoRaMacCryptoHandleJoinAccept
functionDevNonce
,RJCount0
andRJCount1
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
- 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 the possibility to setup multicast channels locally
- Added new
SecureElementProcessJoinAccept
API to thesecure-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
- 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 undersrc/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
andMcpsRequest
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 the LoRaWAN keys display on serial terminal
- Removed
GEN_APP_KEY
support as it is equivalent to LoRaWAN 1.1.xAPP_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
SX126xGetRandom
API implementation - Fixed SX126x driver missing call to
RadioStandby
in LoRa modem case insideRadioSetRxConfig
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
andSRV_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 breach found by Tencent Blade Team please refer to security advisory - CVE-2020-11068
- 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
- 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 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
- 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 asystime.c/h
module - Functions in ISR context have been moved to main context
- Changed
BoardDisableIrq
andBoardEnableIrq
functions byCRITICAL_SECTION_BEGIN
andCRITICAL_SECTION_END
respectively - Heavily refactored the
LoRaMac.c
andLoRaMac.h
implementation - Changed multicast channels handling according to the application layer protocols
- Removed SensorNode platform support
- Removed MoteII platform support
- Removed LoRaMote platform support
- Removed US915-Hybrid region support
- Applied SX1272 and SX1276 radios errata note 3.1 to the radio drivers implementation
- Fixed
printf
andscanf
functions when GCC is used as compiler
- 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 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 CoIDE projects support
- Removed Keil projects support
- Release based on "LoRaWAN specification 1.0.2" and "LoRaWAN Regional Parameters v1.0.2rB"
- GitHub reported issues corrections
- 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 radio driver to perform the LBT carrier sense continuously for a given period of time
- Changed implementation to support 1.0.2 specification additions
- Release based on "LoRaWAN specification 1.0.2"
- GitHub reported issues corrections
- Added an algorithm to automatically compute the Rx windows parameters. (Window
symbolTimeout
andOffset
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 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 inRxSingle
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 useless
LoRaMacPayload
buffer
- Fixed an overflow issue that could happen with
NmeaStringSize
variable - Fixed an issue where the node stopped transmitting
- Release based on "LoRaWAN specification 1.0.1"
- GitHub reported issues corrections
- 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
- 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 api-v3 support from the project
- Fixed compliance test protocol command 0x06 behavior
- Fixed US band in order to pass the LoRaWAN certification
- Release based on "LoRaWAN specification 1.0.1"
- GitHub reported issues corrections
- 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
- 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 the end less loop from
HAL_UART_ErrorCallback
- Remove the
TxPower
limitation for US band onLoRaMacMibSetRequestConfirm
function. The power will be limited anyway when theSendFrameOnChannel
functions is called
- Issue(#81): Bug fix in function
LoRaMacMlmeRequest
caseMLME_JOIN
. Function will returnLORAMAC_STATUS_BUSY
in case the MAC is in statusMAC_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
- Release based on "LoRaWAN specification 1.0.0"
- GitHub reported issues corrections
- 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
. ResetMAC_TX_RUNNING
only inOnMacStateCheckTimerEvent
- 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
byChannelsDefaultDatarate
inLoRaMacChannelAdd
- Accept MAC information of duplicated, confirmed downlinks
- 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
andSX1272SetOpMode
- 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
- 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
- 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 ofOnRadioRxDone
in case of an error
- 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
toNbTrials
in structureMcpsReqConfirmed_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
inOnRadioRxDone
- Reset status of
NodeAckRequested
if we received an ACK or in case of timeout - Improved and corrected
AdrNextDr
function
- 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
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 themacIndex
variable on US915 band - Start the MacStateCheckTimer in OnRxDone and related error cases with a short interval to handle events promptly. (Issue #44)
- Release based on "LoRaWAN specification 1.0.0"
- GitHub reported issues corrections
- LoRaWAN certification protocol implementation
- STACKFORCE new API integration
- Reverse the EUIs arrays in the MAC layer
- Release based on "LoRaWAN specification 1.0.0"
- GitHub reported issues corrections
- 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
- Release based on "LoRaWAN specification 1.0.0"
- GitHub reported issues corrections
- 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
andLORAMAC_MAX_RX1_DR_OFFSET
definitions toLoRaMac-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 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
andsrand
torand1
andsrand1
. Helps on code portability - Moved
ID1
,ID2
andID3
definition fromboard.h
toboard.c
,usb-cdc-board.c
andusb-dfu-board.c
- Renamed
BoardMeasureBatterieLevel
toBoardGetBatteryLevel
- 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 fromutilities.h
tospi-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 byvolatile
- Renamed
LoRaMacEvent_t
intoLoRaMacCallbacks_t
and added a function pointer for getting battery level status - Renamed
LoRaMacSetDutyCycleOn
intoLoRaMacSetTestDutyCycleOn
- Renamed
LoRaMacSetMicTest
intoLoRaMacTestSetMic
- 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
NULL
definition fromboard.h
- Removed the definition of
RAND_SEED
. It has been replaced by a function namedBoardGetRandomSeed
- Removed
fputc
function redefinition fromUtilities.c
- Removed the usage of
PACKED
attribute for data structures - Removed
IsChannelFree
check onLoRaMacSetNextChannel
function. LoRaWAN is an ALHOA protocol. (Pull request #8)
- 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)
- Release based on "LoRaWAN specification 1.0.0"
- GitHub reported issues corrections
- 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
- 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)
- 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)
- Release based on "LoRaWAN specification 1.0.0"
- GitHub reported issues corrections
- 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 isToff = 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
- 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 support for previous LoRaMac/LoRaWAN specifications
- Fixed the 250 kHz bandwidth choice for the FSK modem
- Release based on "LoRaMac specification R3.0.0"
- GitHub reported issues corrections
- 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
- 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 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 containsRxWindow1Delay
in it
- Release based on "LoRaMac specification R3.0.0"
- GitHub reported issues corrections
- Added to Radio API the possibility to select the modem
- 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 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
- Release based on "LoRaMac specification R2.2.1"
- GitHub reported issues corrections
- Fixed all radios antenna switch low power mode handling
- Fixed SX1276 antenna switch control
- GitHub reported issues corrections
- 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
- 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 );
- Previous function prototype:
- 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()
andsrand()
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 );
- Previous function prototype:
- Changed the LoRaMac channels management
- LoRaMac channels definition has been moved to
LoRaMac-board.h
file located in each specific board directory
- 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 toutilities.h
file - Removed obsolete class1 devices support
- Fixed Radio continuous reception mode
- GitHub reported issues corrections
- 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
-
- 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 the SX1272 output power management
- Added a variable to store the current Radio channel
- Added missing FSK bit definition
- GitHub reported issues corrections
- 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 inLoRaMacPrepareFrame
andLoRaMacSendFrameOnChannel
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
- Split the
- Added
LORAMAC_EVENT_INFO_STATUS_MAC_ERROR
event info status
- 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 GPIO pin names management
- Fixed the antenna switch management in the SX1272 driver
- Fixed issues on JoinRequest and JoinAccept MAC commands
- GitHub reported issues corrections
- Added new MAC layer application API implementation
- Added sensors drivers implementation
- 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)
- Still some issues with RTC/Timer. Will be solved in a future version
- GitHub reported issues corrections
-
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', '!', '!', '!', '!' }
- MAC commands implemented
- LinkCheckReq NO
- LinkCheckAns NO
- LinkADRReq YES
- LinkADRAns YES
- DevStatusReq YES
- DevStatusAns YES
- There is an issue when launching an asynchronous Timer. Will be solved in a future version
- Added Doc directory. The directory contains:
- LoRa MAC specification
- Bleeper board schematic
- 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
- Initial version of the LoRa MAC node firmware implementation