Commit Graph

100 Commits (feature-lorawan-1-1)

Author SHA1 Message Date
Unknown 694790f5fe Class B feature branch rebase conflict fixes
Picked the wrong diff a few times while resolving rebase conflicts.
2020-02-06 18:38:36 +02:00
Unknown cf834bddb8 Fix get_rx1_frequency
Return alternate RX1 if set
2020-02-06 18:38:36 +02:00
Unknown 65e1e9c222 Fix Beacon Time On Air Computation
Beacon time on air  computation bandwidth param was hard coded to 500 KHz.  Now  it is read from the phy bandwidths table.
2020-02-06 18:38:36 +02:00
Unknown 00dc81114d Fix IN865 Beacon Frequency
Set IN865 beacon frequency to 866.55 MHz
2020-02-06 18:38:36 +02:00
Shaun Nelson d90a489e67 astyle formatting 2020-02-06 18:38:36 +02:00
Unknown fc4ce50321 Fix Travis astyle failures
Ran asytle to fix line ending s
2020-02-06 18:38:36 +02:00
Unknown f12c071591 Function documentation cleanup 2020-02-06 18:38:36 +02:00
Unknown 690ee0f951 Add a return status to Rx window computation functions
- Added a bool return status to  LoRaPHY::compute_*_win_params(...)   methods. Currently, failed status returned if the rx slot type is invalid or rf frequency is invalid
 - Updated Class B implementation to check return status
2020-02-06 18:38:36 +02:00
Unknown 75b588412a Reorder class b slot types by priority 2020-02-06 18:38:36 +02:00
Unknown bb878fea8a PHY Class B configuration
- Initialize Class B configuration
- Implement class B receiver configuration
- For regions such as US915 with derived rx_config(),  changes to the base class implementation makes the derivation unnecessary , so these region specific versions have been removed
2020-02-06 18:38:36 +02:00
Unknown bf6f45a05b PHY Class B handling
Support class b beacon and ping slot rx configuration
2020-02-06 18:38:36 +02:00
Unknown 0a30aeeec2 PHY Class B beacon and ping slot configuration
- Add PHY beacon and ping slot configuration
2020-02-06 18:38:36 +02:00
Hasnain Virk 623436d726 Hooking up DeviceTimeReq generation for application
The application can use add_device_time_request() API to attach
DeviceTimeRequest mac command for the next outgoing packet.
It is a non-stick mac command, so if there is no response, the app can
retry. The API indicates if the mac command was queued successfully or
not. The actual indication of successful time and date update will come
through an event 'DEVICE_TIME_SYNCHED'.
2020-02-06 18:38:15 +02:00
Hasnain Virk 6f42adf8e5 Handling DevTimeAns mac cmd properly
DevTimeAns mac command will carry number of seconds since the GPS epoch
in the first four bytes and the fifth byte is the fractional part.
After extracting the time from the command fields, we need to adjust
this time according to the unix time, so we add the Unix to GPS time
diff to it. After that we account for leap seconds and set the time
using standard set_time() call.

We have removed the method time_received() fom LoRaPHY as it is not
important nor required. It doesn't fit into the LoRaPHY context.

Stubs are therefore updated to reflect the change.

mbed_lib.json now contains the configurable parameters for TAI to UTC
and GPS TAI to UTC differences in seconds needed for leap second
correction. They are loaded with values as of 2018.
2020-02-06 18:37:24 +02:00
Antti Kauppila af04a7a638 astyle fixes 2020-02-06 18:37:24 +02:00
Hasnain Virk d8f7011c58 Changing precision in RX window calculation
Double precision may introduce unwanted results and it's impact is
massive on microcontrollers. So we change the precision from double to
float.
This change doesn't seem to enhance performance yet.
2020-02-06 18:37:24 +02:00
Antti Kauppila cba835bbad set_tx_continuous_wave removed 2020-02-06 18:37:24 +02:00
Antti Kauppila ccc3675a6a Rejoin logic added
BE to LE fixes, missing MLME types added

LoRaWAN 1.1 Features added (Some LoRaPhy impl missing still + some TODOs in code)

- MLME confirm handling refactored
- Rejoin handling missing
- new CF_LIST mechanism missing (+resets involved)
- NVM handling missing

Rejoin logic added
2020-02-06 18:37:24 +02:00
Antti Kauppila 0d3283e3a0 LoRaWAN 1.1 Features added (Some LoRaPhy impl missing still + some TODOs in code)
- MLME confirm handling refactored
- Rejoin handling missing
- new CF_LIST mechanism missing (+resets involved)
- NVM handling missing

Fixed automerge issue
2020-02-06 18:37:24 +02:00
Kevin Bracey 8b02c4ed1c Add missing <string.h> includes 2020-01-09 14:52:54 +02:00
Teijo Kinnunen feb19eb035 LoRaPHY: Pass frequency set in rx_config() to caller
In AU/CN/US PHY, RX1 slot frequency is calculated in rx_config().
Since the caller is printing it to log, modify the frequency in
parameter structure so that the correct value will be printed.
2019-06-19 14:24:21 +03:00
Hasnain Virk 8fd791db49 Adding TOA and Channel info in RX metadata
We provide now downlink channel frequency and time on air for the
received frame in the RX metadata.
Previously the channel information in both TX and RX metada contained
the index number of the channel. That information wasn't very useful
except the index numbers of default channels. To make more sense of the
meta data, we now store the channel frequency in the channel parameter
rather than the index number of the channel.

RX time on air is collected from the radio driver and it is assumed that
the downlink frame had 8 downlink preamble symbols (plus 4.25 of the
preambles added by the chip) for LoRa modulation.

This commit also include a bit of tidying of RX frequency storage in rx
configuration parameters storage. Previously we were missing filling in
the RX1 frequency correctly.
2019-03-27 10:23:43 +02:00
Hasnain Virk 2691b83c4e Fixing premature RX2 abort
A bug while setting up RX start timers would result in premature closusre
of RX2 window. The 'ack_Timeout_timer' would be invoked prematurely and
at that time RX2 window may be being demodulating. This resulted in
massive instability with any test that relied on Confirmed traffic or
lower data rates.

To fix the issue, we must know the length of the RX window in
milliseconds and for this purpose we have extended the
'get_rx_window_params(...)' API. The length of the time the window
may remain open must be accounted for while setting up
'ack_timeout_timer'.
2019-03-22 15:15:51 +02:00
Hasnain Virk 2618813c70 Ack timeout must be at least 2 seconds
While calculating ack timeout, we were ending up getting a random value
which may become less than 2 seconds. This is not allowed as per v1.0.2
specification.

To fix the issue we now take the random number from 0 to 2000 ms and
then add that to the fixed 2000 ms ack timeout value, guaranteeing a
value at least equal to 2000 ms.
2019-03-22 15:15:51 +02:00
Martin Kojtal d030c04a60
Merge pull request #9219 from hasnainvirk/lorawanbase_migration
LoRaWAN: Retiring LoRaWANBase class
2019-02-21 13:55:11 +01:00
Hasnain Virk 726eff9305 Proper size checking for link ADR commands
In a specific branch path 'adr_settings' in link_adr_request() API, the
structure adr_settings of type link_adr_params_t will be rendered
uninitialized. To prevent this we initialize the construct as zero.
In addition to that, to handle the case properly we should check for the
command identifier and the command payload length anticipating contiguous
blocks of adr commands. If we find a discrepency in size, we should
abort.
2019-02-14 17:15:42 +02:00
Hasnain Virk 5fb383c27a Doxygen corrections
Adding group identidier so that LoRaWANInterface class goes to the class
hierarchy section rather than data-structures.

Adding missing documentation for a couple of public functions.

Adding \code and \endcode modifiers for the example code in the
documentation.

Adding compile time NO_DOXYGEN flag for the implementations of the
LoRaPHY Class.

Adding documentation for some of the private structures.
2019-01-10 16:14:19 +02:00
Hasnain Virk c07ae669ff Randomizing backoff for Join process
Randomizing backoff by 200ms to 1000ms for Join Requests in a dense
network will add robustness and better chances of reception by the base
station especially in cases of catastrophic network outage and
reconnection.
2019-01-04 02:10:50 +02:00
Hasnain Virk e1e48b492b Final cleanup and ASCII art for algorithm v2
Final code cleanup and adding ascii art for the version 2 of the
algorithm.
2018-12-10 08:53:30 +02:00
Hasnain Virk 5170daa00a RX window calculation algorithm version 2
In this version we try to mitigate a situation when we start listening
right in the middle of a preamble sequence (e.g., in high SF case).
2018-12-10 08:53:30 +02:00
Hasnain Virk 88490fb145 Mitigating reception problems with lower data rates
A new algorithm has been taken in use to calculate the receive window
length and the timing offset involved in opening of the said receive
window. This algorithm performs better than the stock algorthm and
consumes less power.
2018-12-10 08:53:30 +02:00
Martin Kojtal 884a7748b2 lorawan: fix astyle coding style 2018-11-07 08:56:36 +00:00
Antti Kauppila f0864be1c5 Fixed lorawan unittests valgrind issues 2018-10-17 15:25:53 +03:00
Hasnain Virk 0a9417299b Fixing coverity findings
A couple of the coverity analysis findings are being treated here. For
the rest there will be a separate PR.
2018-10-16 12:23:21 +03:00
Hasnain Virk 7818733728 Proper handling of RX1 frequency in rx_config
Previously, we weren't filling in RX1 frequecny in rx_window1_config
structure. However, everything worked as in LoRaPHY::rx_config() API
there was a check which filled in correct RX1 frequency.
Now we are filling in RX1 freq. properly while we are computing
parameters for RX1 window.
2018-10-16 12:23:21 +03:00
Hasnain Virk d5ce0cc96f Adding QOS handling and fixing bugs for Class C
LinkADRReq mac command can be used by the network server to set a
certain level of QOS using NbTrans field which is applicable to
Unconfirmed traffic only for 1.0.2 spec.
This commit introduces mechanisms to facilitate this QOS. It means to
repeat an outgoing unconfirmed message NbTrans times without changing
its frame counter.

For class C, we have retired the ack_expiry_timer_for_class_c and have
replaced it with another timer which mimics the RX2 closure as in Class
A but doesn't actually close RX2 window. It's just a mechanism by which
the state machine is informed that the you can proceed forward, we have
not received anything in RX2 window either. This is needed as RX2
doesn't timeout in class C (i.e., the radio remains in continuous mode).
In addition to that we need to close any pending timers for Receive
windows after the MIC has passed and the Duplicate counter check has
also been passed.
2018-10-16 12:23:21 +03:00
Cruz Monrreal II dd8e9bb954 Revert "Merge pull request #8183 from hasnainvirk/QOS_impl"
This reverts commit 5c675d3688, reversing
changes made to 2b04a02eb2.
2018-10-11 16:51:46 -05:00
Cruz Monrreal 5c675d3688
Merge pull request #8183 from hasnainvirk/QOS_impl
Adding QOS in response to LinkADRReq and fixing class C bugs
2018-10-11 10:09:37 -05:00
Antti Kauppila f3d402f70e LoRaPHY unittested, small fixed done during tests 2018-09-27 10:49:07 +03:00
Antti Kauppila 0f8cfd8631 LoRa regions unittested, stubs licences revisited 2018-09-27 10:49:07 +03:00
Hasnain Virk bc976c6545 Fixing coverity findings
A couple of the coverity analysis findings are being treated here. For
the rest there will be a separate PR.
2018-09-21 15:55:30 +03:00
Hasnain Virk 0d3ec26b4a Proper handling of RX1 frequency in rx_config
Previously, we weren't filling in RX1 frequecny in rx_window1_config
structure. However, everything worked as in LoRaPHY::rx_config() API
there was a check which filled in correct RX1 frequency.
Now we are filling in RX1 freq. properly while we are computing
parameters for RX1 window.
2018-09-21 15:55:30 +03:00
Hasnain Virk 94eb4c0bc0 Adding QOS handling and fixing bugs for Class C
LinkADRReq mac command can be used by the network server to set a
certain level of QOS using NbTrans field which is applicable to
Unconfirmed traffic only for 1.0.2 spec.
This commit introduces mechanisms to facilitate this QOS. It means to
repeat an outgoing unconfirmed message NbTrans times without changing
its frame counter.

For class C, we have retired the ack_expiry_timer_for_class_c and have
replaced it with another timer which mimics the RX2 closure as in Class
A but doesn't actually close RX2 window. It's just a mechanism by which
the state machine is informed that the you can proceed forward, we have
not received anything in RX2 window either. This is needed as RX2
doesn't timeout in class C (i.e., the radio remains in continuous mode).
In addition to that we need to close any pending timers for Receive
windows after the MIC has passed and the Duplicate counter check has
also been passed.
2018-09-21 15:55:30 +03:00
Hasnain Virk 7b7d5ebc77 LoRaWAN: Memory overrun correction
A typo in LoRaPHYCN470 is causing memory overrun.
We were supposed to fill-in default channel mask and iterate over CN470_CHANNEL_MASK_SIZE times.
2018-09-04 15:21:40 +03:00
Hasnain Virk 5cca2f2e76 Adding override for TX ch. selection in CN470 PHY
set_next_channel() is the base function provided by LoRaPHY class and should be overridden
by the PHYs who behave differently as compared to EU868 like PHY layers.
CN470 PHY had been missing such an override.
In addition to that we have provided a parameter "fsb-mask-china" that can be used to
enforce a custom frequency sub-band of operation as most of the base stations in the market
may not support all 96 channels. Such a strategy will help in rapid network acquisition.
2018-08-27 12:50:09 +03:00
Hasnain Virk 9b2507d71a Adding helpers for Channel mask manipulation
A few protected member functions are introduced in LoRaPHY class
that help manipulate channel masks in various ways.
2018-08-24 15:32:13 +03:00
Hasnain Virk 8f0bb07390 Removing US915Hybrid PHY
This phy implementation was just to support a single sub-band in US region.
As we have decided to make FSBs configurable, we do not need this class anymore.
2018-08-24 15:32:12 +03:00
Hasnain Virk dc56a06646 Enabling FSB support in AU915 PHY
Just like US915 PHY, user can define a custom FSB mask for AU915 PHY.
This helps deployments where base stations do not portray full feature
channel sets and choose to stick with sub-bands.
2018-08-24 15:31:53 +03:00
Hasnain Virk 207ae2dedf Adding FSB selection feature for US915 PHY
User can now define a custom frequency sub-band for the US915 PHY.
FSB_Usage.txt defines how this parameter will be configured.
2018-08-24 15:31:53 +03:00
Cruz Monrreal f7a731544c
Merge pull request #7816 from kivaisan/option_to_disabled_join_duty_cycle
Lora: Refactor duty-cycle configuration and introduce config for JOIN request
2018-08-23 10:05:44 -05:00