/ _____) _ | |
( (____ _____ ____ _| |_ _____ ____| |__
\____ \| ___ | (_ _) ___ |/ ___) _ \
_____) ) ____| | | || |_| ____( (___| | | |
(______/|_____)_|_|_| \__)_____)\____)_| |_|
(C)2013 Semtech
- Introduction
The aim of this project is to show an example of the endpoint LoRaWAN stack implementation.
This LoRaWAN stack is an EU868 and US915 bands Class A and Class C endpoint implementation fully compatible with LoRaWAN 1.0.1 specification. Each LoRaWAN application example includes the LoRaWAN certification protocol implementation.
SX1272/76 radio drivers are also provided. In case only point to point links are required a Ping-Pong application is provided as example.
The LoRaWAN stack API documentation can be found at: http://stackforce.github.io/LoRaMac-doc/
Note 1:
A port of this project can be found on MBED Semtech Team page
The example projects are:
-
System schematic and definitions
The available supported hardware platforms schematics can be found in the Doc directory.
- Acknowledgments
The mbed (https://mbed.org/) project was used at the beginning as source of inspiration.
This program uses the AES algorithm implementation (http://www.gladman.me.uk/) by Brian Gladman.
This program uses the CMAC algorithm implementation (http://www.cse.chalmers.se/research/group/dcs/masters/contikisec/) by Lander Casado, Philippas Tsigas.
- Dependencies
This program depends on specific hardware platforms. Currently the supported platforms are:
- LoRaMote
MCU : STM32L151CB - 128K FLASH, 10K RAM, Timers, SPI, I2C,
USART,
USB 2.0 full-speed device/host/OTG controller,
DAC, ADC, DMA
RADIO : SX1272
ANTENNA : Printed circuit antenna
BUTTONS : No
LEDS : 3
SENSORS : Proximity, Magnetic, 3 axis Accelerometer, Pressure,
Temperature
GPS : Yes, UP501 module
EXTENSION HEADER : Yes, 20 pins
REMARK : The MCU and Radio are on an IMST iM880A module
- MoteII
MCU : STM32L051C8 - 64K FLASH, 8K RAM, Timers, SPI, I2C,
USART,
USB 2.0 full-speed device/host/OTG controller (Not used),
DAC, ADC, DMA
RADIO : SX1272
ANTENNA : Printed circuit antenna
BUTTONS : 3
LEDS : 3
SENSORS : Magnetic, 3 axis Accelerometer, Pressure,
Temperature
GPS : Yes, PAM7Q module
Display : OLED
ST-Link : Yes, MBED like
EXTENSION HEADER : Yes, 20 pins
REMARK : The MCU and Radio are on an IMST iM881A module
- NAMote72
MCU : STM32L152RC - 256K FLASH, 32K RAM, Timers, SPI, I2C,
USART,
USB 2.0 full-speed device/host/OTG controller (Not used),
DAC, ADC, DMA
RADIO : SX1272
ANTENNA : Printed circuit antenna
BUTTONS : No
LEDS : 4
SENSORS : Magnetic, 3 axis Accelerometer, Pressure,
Temperature
GPS : Yes, SIM39EA module
Display : OLED
ST-Link : Yes, MBED like
EXTENSION HEADER : Yes, Arduino connectors
REMARK : None
- SensorNode
MCU : STM32L151CBU6 - 128K FLASH, 16K RAM, Timers, SPI, I2C,
USART,
USB 2.0 full-speed device/host/OTG controller,
DAC, ADC, DMA
RADIO : SX1276
ANTENNA : Printed circuit antenna
BUTTONS : Power ON/OFF, General purpose button
LEDS : 3
SENSORS : Proximity, Magnetic, 3 axis Accelerometer, Pressure,
Temperature
GPS : Yes, SIM39EA module
EXTENSION No
REMARK : The MCU and Radio are on an NYMTEK Cherry-LCC module
- SK-iM880A ( IMST starter kit )
MCU : STM32L151CB - 128K FLASH, 10K RAM, Timers, SPI, I2C,
USART,
USB 2.0 full-speed device/host/OTG controller,
DAC, ADC, DMA
RADIO : SX1272
ANTENNA : Connector for external antenna
BUTTONS : 1 Reset, 3 buttons + 2 DIP-Switch
LEDS : 3
SENSORS : Potentiometer
GPS : Possible through pin header GPS module connection
SDCARD : No
EXTENSION HEADER : Yes, all IMST iM880A module pins
REMARK : None
- Usage
Projects for CooCox-CoIDE and Keil Integrated Development Environments are available.
One project is available per application and for each hardware platform in each development environment. Different targets/configurations have been created in the different projects in order to select different options such as the usage or not of a bootloader and the radio frequency band to be used.
- Changelog
2017-04-19, V4.3.2
-
General (Last release based on LoRaWAN specification 1.0.1)
- This version has passed EU868 and US915 LoRa-Alliance compliance tests.
- GitHub reported issues corrections.
- 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.
- Modified FSK modem handling to use the provided symbolTimeout (1 symbol equals 1 byte) when in RxSingle mode.
- Added newly defined TxCw(Tx Continuous Wave) certification protocol command.
- Added a fix for an overflow issue that could happen with NmeaStringSize variable.
- Improved GpioMcuInit function to first configure the output pin state before activating the pin.
-
LoRaWAN
- GitHub reported issues corrections.
- Changed the AdrAckCounter handling as expected by the test houses.
- Fix an issue where the node stopped transmitting.
- Removed useless LoRaMacPayload buffer.
- MAC layer indications handling simplification.
- Relocate parameter settings from ResetMacParameters to the initialization.
2017-02-27, V4.3.1
-
General
- This version has passed EU868 and US915 LoRa-Alliance compliance tests.
- Update the MAC layer in order to be LoRaWAN version 1.0.1 compliant (Mainly US915 bug fixes)
- Removed api-v3 support from the project.
- GitHub reported issues corrections.
- Updated SensorNode projects according to the new MCU reference STM32L151CBU6. Bigger memories.
- Addition of MoteII platform based on the IMST module iM881A (STM32L051C8)
- Addition of NAMote72 platform
- Correct compliance test protocol command 0x06 behaviour
- Added TxCw (Tx continuous wave) LoRaWAN compliance protocol command.
- Added TxContinuousWave support to the radio drivers.
- Updated ST HAL drivers.
- STM32L1xx_HAL-Driver : V1.2.0
- STM32L0xx_HAL_Driver : V1.7.0
-
LoRaWAN
- US band corrections in order to pass the LoRaWAN certification.
- GitHub reported issues corrections.
- Add region CN470 support.
2016-06-22, V4.3.0
-
General
-
This version has passed all LoRa-Alliance compliance tests.
-
Update the MAC layer in order to be LoRaWAN version 1.0.1 compliant
-
Applied to all application files the certification protocol change for LoRaWAN 1.0.1 compliance tests.
REMARK: api-v3 application files aren't updated.
-
Add radio RX_TIMEOUT irq clear into the irq handler.
-
Removed the end less loop from HAL_UART_ErrorCallback.
-
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.
-
-
LoRaWAN
- Updated maximum payload size for US band.
- Update datarate offset table for US band.
- Make MAC commands sticky
- Add retransmission back-off
- Remove the TxPower limitation for US band on LoRaMacMibSetRequestConfirm function. The power will be limited anyway when the SendFrameOnChannel functions is called.
- 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.
- Add debug pin support to LoRaMote platform.
- Updated and improved MPL3115 device driver.
- Issue(#83): Bug fix in parameter validation
- Issue(#84): Fix issue of CalibrateTimer function.
- RTC driver major update
- Applied pull request #87.
- Add a function to verify the RX frequency of window 2 for US band.
- Issue(#88): Bug fix in function PrepareFrame where repeated MAC commands were not handled correctly.
- Bug fix in OnRadioRxDone. Node now drops frames on port 0 with fOpts > 0.
- Bug fix in OnRadioRxDone. Node now receives frames with fOpts > 0 when no payload is present.
2016-05-13, V4.2.0
-
General
-
This version has passed all LoRa-Alliance compliance tests.
-
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.
-
Corrected the frequency check condition for // ERRATA 2.1 - Sensitivity Optimization with a 500 kHz Bandwidth
-
Optimize radio drivers regarding FSK PER
-
Resolve issue when calling SX127xInit function more than once
-
Add a definition for the LoRaWAN device address. Add an IEEE_OUI for the LoRaWAN device EUI.
-
Add a definition for the default datarate.
-
Issue(#66) correction of functions SX1276SetOpMode and SX1272SetOpMode.
-
Issue(#68): Fix for low level RF switch control.
-
Increase RTC tick frequency for higher resolution.
-
Update the radio wake up time.
-
-
LoRaWAN
- Issue(#56) correction
- Update channel mask handling for US915 hybrid mode to support any block in the channel mask.
- Issue(#63) correct the maximum payload length in RX mode.
- Fix Tx power setting loss for repeated join requests on US band.
- Introduce individual MIN and MAX datarates for RX and TX.
- Add the possibility to set and get the ChannelsDefaultDatarate.
- Optimization of the RX symbol timeout.
- Issue(#59): Add the possibility to set the uplink and downlink counter.
- Replace definition LORAMAC_DEFAULT_DATARATE by ChannelsDefaultDatarate in LoRaMacChannelAdd.
- Issue(#72): Fix of possible array overrun in LoRaMacChannelRemove.
- Introduce a new status MAC_RX_ABORT. Reset MAC_TX_RUNNING only in OnMacStateCheckTimerEvent.
- Accept MAC information of duplicated, confirmed downlinks.
- Issue(#74): Drop frames with a downlink counter difference greater or equal to MAX_FCNT_GAP.
2016-03-10, V4.1.0
-
General
-
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.
-
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.
-
Application state machine. Relocate setting sleep state and update the duty cycle in compliance test mode.
-
Bug fix in TimerIrqHandler. Now, it is possible to insert timers in callback.
-
Changed TimerHwDelayMs function to be re-entrant.
-
Corrected FSK modem packets bigger than 64 bytes handling (Issue #36)
-
-
LoRaWAN
- 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)
- Add missing documentation about MIB_REPEATER_SUPPORT. (Issue #42).
- Add a new LoRaMacState to allow adding channels during TX procedure. (Issue #43)
- Relocate the activation of LoRaMacFlags.Bits.McpsInd in OnRadioRxDone.
- Add a new function PrepareRxDoneAbort to prepare a break-out of OnRadioRxDone in case of an error
- Activate default channels in case all others are disabled. (Issue #39)
- Bug fix in setting the default channel in case none is enabled.
- SRV_MAC_NEW_CHANNEL_REQ MAC command added 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)
- Reset status of NodeAckRequested if we received an ACK or in case of timeout.
- 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.
- Improved and corrected AdrNextDr function.
2015-12-18, V4.0.0
- General
- STACKFORCE new API integration
- Reverse the EUIs arrays in the MAC layer.
- LoRaWAN certification protocol implementation
- All reported issues and Pull requests have been addressed.
2015-10-06, V3.4.1
-
General
- Bug fixes
-
LoRaWAN
- Corrected downlink counter roll over management when several downlinks were missed.
- Corrected 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.
2015-10-30, V3.4.0
-
General
- 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.
- Added TimerStop function calls to each timer event callback.
- Corrected timings comments. Timing values are most of the time us based.
- Changed types names for stdint.h names. Helps on code portability
- Renamed rand and srand to rand1 and srand1. Helps on code portability
- Added some missing variables casts. Helps on code portability
- Removed NULL definition from board.h
- Added const variable attribute when necessary to functions prototypes
- Moved ID1, ID2 and ID3 definition from board.h to board.c, usb-cdc-board.c and usb-dfu-board.c
- Removed the definition of RAND_SEED. It has been replaced by a function named BoardGetRandomSeed
- Renamed BoardMeasureBatterieLevel to BoardGetBatteryLevel
- Added SetMaxPayloadLength API function to SX1272 and SX1276 radio drivers
- Changed the name of Radio API Status function to GetStatus
- AES/CMAC Changed 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.
- Utilities.c removed fputc function redefinition.
- Replaced the usage of __IO attribute by volatile.
-
LoRaWAN
- 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)
- Corrected and simplified the downlink sequence counter management.
- Removed the usage of PACKED attribute for data structures.
- 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
- Removed IsChannelFree check on LoRaMacSetNextChannel function. LoRaWAN is an ALHOA protocol. (Pull request #8)
- LoRaMacEventInfo.TxDatarate now returns LoRaWAN datarate (DR0 -> DR7) instead of (SF12 -> DF7)
- Corrected channel mask management for EU868 band.
- Corrected LoRaMacPrepareFrame behavior function when no applicative payload is present.
- LoRaMac-board.h now implements the settings for the PHY layers specified by LoRaWAN 1.0 specification. ( EU433, CN780, EU868, US915 ) (Issue #19)
- 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 datarate. Does not yet take in account the MAC commands buffer. (Issue #15)
- Corrected MacCommandBufferIndex management. (Issue #18)
2015-08-07, v3.3.0
-
General
- Added the support for LoRaWAN Class C devices.
- Implemented the radios errata note workarounds. SX1276 errata 2.3 "Receiver Spurious Reception of a LoRa Signal" is not yet implemented.
- 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.
-
LoRaWAN
- Renamed data rates as per LoRaWAN specification.
- Added the support for LoRaWAN Class C devices.
- Handling of the MAC commands was done incorrectly the condition to verify the length of the buffer has changed from < to <=.
- Added the possibility to change the channel mask and number of repetitions trough SRV_MAC_LINK_ADR_REQ command when ADR is disabled.
- Corrected Rx1DrOffset management. In previous version DR1 was missing for all offsets.
- 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.
- Corrected default FSK channel frequency.
- Solved a firmware freezing when one of the following situations arrived in OnRxDone callback: bad address, bad MIC, bad frame. (Pull request #10)
- Moved the MAC commands processing to the right places. FOpts field before the Payload and Port 0 just after the decryption. (Pull request #9)
- Weird conditions to check datarate on cmd mac SRV_MAC_NEW_CHANNEL_REQ (Pull request #7)
- Ignore join accept message if already joined (Pull request #6)
- Channel index verification should use OR on SRV_MAC_NEW_CHANNEL_REQ command (Pull request #5)
- Corrected the CFList management on JoinAccept. The for loop indexes were wrong. (Pull request #4)
- Correction of AES key size (Pull request #3)
2015-04-30, v3.2.0
-
General
- Updated LoRaMac implementation according to LoRaWAN R1.0 specification
- General cosmetics corrections
- Added the support of packed structures when using IAR tool chain
- Timers: Added a function to get the time in us.
- Timers: Added a typedef for time variables (TimerTime_t)
- Radios: Changed the TimeOnAir radio function to return a uint32_t value instead of a double. The value is in us.
- Radios: Corrected the 250 kHz bandwidth choice for the FSK modem
- GPS: Added a function that returns if the GPS has a fix or not.
- GPS: Changed the GetPosition functions to return a latitude and longitude of 0 and altitude of 65535 when no GPS fix.
-
LoRaWAN
- Removed support for previous LoRaMac/LoRaWAN specifications
- 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.
-
- Due to duty cycle management the applicative API has changed. All applications must be updated accordingly.
- Added the possibility to chose to use either public or private networks
2015-01-30, v3.1.0
-
General
-
Started to add support for CooCox CoIDE Integrated Development Environment. Currently only LoRaMote and SensorNode platform projects are available.
-
Updated GCC compiler linker scripts.
-
Added the support of different tool chains for the HardFault_Handler function.
-
Corrected Radio drivers I&Q signals inversion to be possible in Rx and in Tx. Added some missing radio state machine initialization.
-
Changed the RSSI values type from int8_t to int16_t. We can have RSSI values below -128 dBm.
-
Corrected SNR computation on RxDone interrupt.
-
Updated radio API to support FHSS and CAD handling.
-
Corrected in SetRxConfig function the FSK modem preamble register name.
-
Added an invalid bandwidth to the Bandwidths table in order to avoid an error when selecting 250 kHz bandwidth when using FSK modem.
-
Corrected RTC alarm setup which could be set to an invalid date.
-
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.
-
I2C driver corrected 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.
-
Added an I2C EEPROM driver.
-
Corrected and improved USB Virtual COM Port management files. Corrected the USB CDC and USB UART drivers.
-
Added the possibility to analyze a hard fault interrupt.
-
-
LoRaMac
- Corrected RxWindow2 Datarate management.
- SrvAckRequested variable was never reset.
- Corrected tstIndoor applications for LoRaMac R3.0 support.
- LoRaMac added the possibility to configure almost all the MAC parameters.
- Corrected the LoRaMacSetNextChannel function.
- Corrected the port 0 MAC command decoding.
- Changed all structures declarations to be packed.
- Corrected the Acknowledgment retries management when only 1 trial is needed. Before the device was issuing at least 2 trials.
- Corrected server mac new channel req answer.
- Added the functions to read the Up and Down Link sequence counters.
- Corrected SRV_MAC_RX2_SETUP_REQ frequency handling. Added a 100 multiplication.
- Corrected SRV_MAC_NEW_CHANNEL_REQ. Removed the DutyCycle parameter decoding.
- Automatically activate the channel once it is created.
- Corrected NbRepTimeoutTimer initial value. RxWindow2Delay already contains RxWindow1Delay in it.
2014-07-18, v3.0.0
-
General
- Added to Radio API the possibility to select the modem.
- Corrected RSSI reading formulas as well as changed the RSSI and SNR values from double to int8_t type.
- 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.
- Replaced the usage of pow(2, n) by defining POW2 functions. Saves ~2 KBytes of code.
- Corrected 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.
-
LoRaMac
-
Implemented LoRaMac specification R3.0 changes.
-
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
-
-
2014-07-10, v2.3.RC2
- General
- Corrected all radios antenna switch low power mode handling.
- SX1276: Corrected antenna switch control.
2014-06-06, v2.3.RC1
-
General
-
Added the support for SX1276 radio.
-
Radio continuous reception mode correction.
-
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 );
-
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.
-
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.
-
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.
-
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.
-
Known bugs correction.
-
-
LoRaMac
-
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)
-
-
Implemented LoRaMac specification R2.2.1 changes.
-
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.
-
2014-04-07, v2.2.0
- General
-
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.
-
Corrected the SX1272 output power management. Added a variable to store the current Radio channel. Added missing FSK bit definition.
-
Made fifo functions coding style coherent with the project.
-
UART driver is now independent of the used MCU
-
2014-03-28, v2.1.0
-
General
- The timers and RTC management has been rewritten.
- Improved the UART and UP501 GPS drivers.
- Corrected GPIO pin names management.
- Corrected the antenna switch management in the SX1272 driver.
- 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.
- Changed copyright Unicode character to (C) in all source files.
-
LoRaMac
- MAC commands implemented
- LinkCheckReq YES
- LinkCheckAns YES
- LinkADRReq YES
- LinkADRAns YES
- DevStatusReq YES
- DevStatusAns YES
- JoinReq YES
- JoinAccept YES
- 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.
- Corrected issues on JoinRequest and JoinAccept MAC commands. Added LORAMAC_EVENT_INFO_STATUS_MAC_ERROR event info status.
- MAC commands implemented
2014-02-21, v2.0.0
- General
- 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)
-
- Adapted applications to the new MAC layer API.
- Added sensors drivers implementation.
- Corrected new or known issues.
- The LoRaMac applications now sends the LED status plus the sensors values.
For the LoRaMote platform the application also sends the GPS coordinates.
- LoRaMac
- MAC commands implemented
- LinkCheckReq YES
- LinkCheckAns YES
- LinkADRReq YES
- LinkADRAns YES
- DevStatusReq YES
- DevStatusAns YES
- JoinReq YES (Not tested)
- JoinAccept YES (Not tested)
- New MAC layer application API implementation.
- MAC commands implemented
- Timers and RTC.
- Still some issues. They will be corrected on next revisions of the firmware.
2014-01-24, v1.1.0
- LoRaMac
-
MAC commands implemented
- LinkCheckReq NO
- LinkCheckAns NO
- LinkADRReq YES
- LinkADRAns YES
- DevStatusReq YES
- DevStatusAns YES
-
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 like:
{ 0, 'H', 'e', 'l', 'l', 'o', ' ', 'W', 'o', 'r', 'l', 'd', '!', '!', '!', '!' }
-
- Timers and RTC.
- Corrected issues existing in the previous version
- Known bugs are:
- There is an issue when launching an asynchronous Timer. Will be solved in a future version
2014-01-20, v1.1.RC1
-
Added Doc directory. The directory contains:
- LoRa MAC specification
- Bleeper board schematic
-
LoRaMac has been updated 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.
2013-11-28, v1.0.0
- Initial version of the LoRa MAC node firmware implementation.