/ _____)             _              | |
( (____  _____ ____ _| |_ _____  ____| |__
 \____ \| ___ |    (_   _) ___ |/ ___)  _ \
 _____) ) ____| | | || |_| ____( (___| | | |
(______/|_____)_|_|_| \__)_____)\____)_| |_|
    (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 version 3.x API to version 4.x API wrapper is available. Applications built using version 3.x API should work without modifications except that one must include LoRaMac-api-v3.h instead of LoRaMac.h file
The 3.x API wrapper will be deprecated starting at version 5.0.0
Note 2:
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
    SDCARD  : No
    EXTENSION HEADER : Yes, 20 pins
    REMARK  : The MCU and Radio are on an IMST iM880A module
- SensorNode
    MCU     : STM32L151C8 - 64K FLASH, 10K 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
    SDCARD  : No
    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
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 onThe 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.