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.
fuota-test-01
exampleNewChannelReq
amd DlChannelReq
handling to ignore command for AU915
, CN470
and US915
regionsSX126xSetLoRaSymbNumTimeout
to round up the timeout to the nearest possible number of symbol.GetNextLowerTxDr
function implementation.FifoLevel
IRQ instead of FifoEmpty
IRQRISING
to RISING_FALLING
edge.USB_POWER
ping-pong
and rx-sensi
examples to use the right FSK_BANDWIDTH
and FSK_AFC_BANDWIDTH
parametersRegionIN865RxParamSetupReq
DrOffset
verificationAU915_MAX_RX1_DR_OFFSET
value to 5 instead of 6AU915_MAX_RX1_DR_OFFSET
value to 5 instead of 6FRAGMENTATION_FRAG_SESSION_SETUP_REQ
checks which verify FragNb
and FragSize
validity.SX126xSetOperatingMode
on SX126xSetTxContinuousWave
and SX126xSetTxInfinitePreamble
functionsSX126xIoRfSwitchInit
)RegionXXInitDefaults
. Fixes an issue on US based bands where the channels mask was not being reset.JoinAccept
max payload size (33) by LORAMAC_JOIN_ACCEPT_FRAME_MAX_SIZE
definition.IsChannelFree API
in order to provide reception bandwidthRegionCommonComputeSymbolTimeLoRa
, RegionCommonComputeSymbolTimeFsk
and RegionCommonComputeRxWindowParameters
API implementations to use integer divisions instead of double division.SX126xSetLoRaSymbNumTimeout
to call the workaround only if the number of symbols is equal to or higher than 64.{
after extern "C"
in cmac.h
fileFragSessionStatusAns
message construction for Received&index
fieldLoRaMacCryptoHandleJoinAccept
function DevNonce
, RJCount0
and RJCount1
handling.LoRaMacCrypto.c
conditional pre-processing.Rx1Frequency
reset for dynamic channel plansAS923_1_JP
sub planUSE_RADIO_DEBUG
directive is definedSX126xClearIrqStatus
call to only clear read flagsSecureElementProcessJoinAccept
API to the secure-element.h
LoRaMacDeInitialization
API to ease dynamic region changeMOTE_MAC_TX_PARAM_SETUP_ANS
as sticky MAC commandCHANGELOG.md
fileLmhpFragmentation
implementationCommissioning.h
files to a single one located under src/apps/LoRaMac/common
directoryRadio.TimeOnAir
API in order to be independent of the current hardware settingsse-identity.h
fileMlmeRequest
and McpsRequest
APIs to report back when the next transmission is possibleResetMacParameters
to perform a complete re-initialization of the regional layer after processing the join acceptGEN_APP_KEY
support as it is equivalent to LoRaWAN 1.1.x APP_KEY
readme.md
fileSX126xGetRandom
API implementationRadioStandby
in LoRa modem case inside RadioSetRxConfig
APILoRaSymbNumTimeout
handlingPHY_BEACON_CHANNEL_FREQ
for AU915 regionSRV_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 queuedFCntUp
counter could sometimes be incremented by 2 instead of 1LoRaMacProcess
functiontimer.c/h
, rtc-driver.c/h
and added a systime.c/h
moduleBoardDisableIrq
and BoardEnableIrq
functions by CRITICAL_SECTION_BEGIN
and CRITICAL_SECTION_END
respectivelyLoRaMac.c
and LoRaMac.h
implementationprintf
and scanf
functions when GCC is used as compilersymbolTimeout
and Offset
from
downlink expected time)TxTimeout
occursTxCw
(Tx Continuous Wave) certification protocol commandsymbolTimeout
(1 symbol equals 1 byte) when in RxSingle
modeGpioMcuInit
function to first configure the output pin state before activating the pinAdrAckCounter
handling as expected by the test housesResetMacParameters
to the initializationLoRaMacPayload
bufferNmeaStringSize
variableRX_TIMEOUT
irq clear into the irq handlerHAL_UART_ErrorCallback
TxPower
limitation for US band on LoRaMacMibSetRequestConfirm
function. The power will be limited
anyway when the SendFrameOnChannel
functions is calledLoRaMacMlmeRequest
case MLME_JOIN
. Function will return LORAMAC_STATUS_BUSY
in
case the MAC is in status MAC_TX_DELAYED
CalibrateTimer
functionPrepareFrame
where repeated MAC commands were not handled correctlyOnRadioRxDone
Node now drops frames on port 0 with fOpts > 0OnRadioRxDone
Node now receives frames with fOpts > 0 when no payload is presentChannelsDefaultDatarate
MAC_RX_ABORT
. Reset MAC_TX_RUNNING
only in OnMacStateCheckTimerEvent
LORAMAC_DEFAULT_DATARATE
by ChannelsDefaultDatarate
in LoRaMacChannelAdd
SX127xInit
function more than onceSX1276SetOpMode
and SX1272SetOpMode
LoRaMacChannelRemove
MAX_FCNT_GAP
MIB_REPEATER_SUPPORT
. (Issue #42)LoRaMacState
to allow adding channels during TX procedure. (Issue #43)PrepareRxDoneAbort
to prepare a break-out of OnRadioRxDone
in case of an errorTimerHwDelayMs
function to be re-entrantnbRetries
to NbTrials
in structure McpsReqConfirmed_t
. (Issue #37)SetNextChannel
. Added enabling default channels in case of join request. (Issue #39)LoRaMacFlags.Bits.McpsInd
in OnRadioRxDone
NodeAckRequested
if we received an ACK or in case of timeoutAdrNextDr
functionTimerIrqHandler
. Now, it is possible to insert timers in callbackSRV_MAC_NEW_CHANNEL_REQ
MAC command by adding a fix to the macIndex
variable on US915 bandLORAMAC_MIN_RX1_DR_OFFSET
and LORAMAC_MAX_RX1_DR_OFFSET
definitions to LoRaMac-board.h
. Can be different
upon used PHY layerstdint.h
names. Helps on code portabilityrand
and srand
to rand1
and srand1
. Helps on code portabilityID1
, ID2
and ID3
definition from board.h
to board.c
, usb-cdc-board.c
and usb-dfu-board.c
BoardMeasureBatterieLevel
to BoardGetBatteryLevel
SetMaxPayloadLength
API function to SX1272 and SX1276 radio driversGetStatus
stdint.h
names. Helps on code portability (Issue #20)__ffs
function from utilities.h
to spi-board.c
. This function is only used there__IO
attribute by volatile
LoRaMacEvent_t
into LoRaMacCallbacks_t
and added a function pointer for getting battery level statusLoRaMacSetDutyCycleOn
into LoRaMacSetTestDutyCycleOn
LoRaMacSetMicTest
into LoRaMacTestSetMic
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)NULL
definition from board.h
RAND_SEED
. It has been replaced by a function named BoardGetRandomSeed
fputc
function redefinition from Utilities.c
PACKED
attribute for data structuresIsChannelFree
check on LoRaMacSetNextChannel
function. LoRaWAN is an ALHOA protocol. (Pull request #8)LoRaMacPrepareFrame
function behavior when no applicative payload is presentMacCommandBufferIndex
management. (Issue #18)<
to <=
Rx1DrOffset
management. In previous version DR1 was missing for all offsetsOnRxDone
callback: bad address, bad MIC, bad frame. (Pull request #10)SRV_MAC_NEW_CHANNEL_REQ
(Pull request #7)SRV_MAC_NEW_CHANNEL_REQ
command (Pull request #5)for
loop indexes were wrong. (Pull request #4)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
HardFault_Handler
functionSetRxConfig
function the FSK modem preamble register nameSrvAckRequested
variable was never resetLoRaMacSetNextChannel
functionSRV_MAC_RX2_SETUP_REQ
frequency handling
Added a x100 multiplicationSRV_MAC_NEW_CHANNEL_REQ
NbRepTimeoutTimer
initial value. RxWindow2Delay
already contains RxWindow1Delay
in itvoid ( *RxDone )( uint8_t *payload, uint16_t *size, double rssi, double snr, uint8_t rawSnr );
void ( *RxDone )( uint8_t *payload, uint16_t size, double rssi, double snr, uint8_t rawSnr );
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
rand()
and srand()
standard C functions. These functions are redefined in order to get the same behavior across different compiler tool chains implementationsLoRaMacInitNwkIds
LoRaMac API function had to be modified
void LoRaMacInitNwkIds( uint32_t devAddr, uint8_t *nwkSKey, uint8_t *appSKey );
void LoRaMacInitNwkIds( uint32_t netID, uint32_t devAddr, uint8_t *nwkSKey, uint8_t *appSKey );
LoRaMac-board.h
file located in each specific board directory__builtin_ffs
function__ffs
function implementation to utilities.h
fileThe application payload for the SK-iM880A platform is as follows:
LoRaMac port 3:
{ 0x00/0x01, 0x00, 0x00, 0x00 }
---------- ----- ----------
| | |
LED POTI VDD
LoRaMacSendOnChannel
function in LoRaMacPrepareFrame
and LoRaMacSendFrameOnChannel
LoRaMacSendOnChannel
now calls the 2 newly defined functionsLORAMAC_EVENT_INFO_STATUS_MAC_ERROR
event info statusThe 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)
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', '!', '!', '!', '!' }