Commit Graph

234 Commits (1e625e2a54ba6f62f9ab50e3037354e32b51ce40)

Author SHA1 Message Date
Antti Kauppila 3e24f2570a Fixed lorawan unittests valgrind issues 2018-10-19 11:46:55 +01:00
Hasnain Virk 15187b98a6 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-19 11:46:55 +01:00
Hasnain Virk 13530d1feb 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-19 11:46:55 +01:00
Hasnain Virk a72d83287d TX post-process for CONFIRMED UL in no-reception case
The idea behind the method post_process_no_reception() is to post
process any outgoing TX but we shouldn't do that if a CONFIRMED message
is outgoing and there are still some retries left.
2018-10-19 11:46:55 +01:00
Hasnain Virk cee09b6656 Making sure that RX slots open after state change
After transmission we should change the state before invoking opening of
slots as we may start receiving in the rx slots and the state would
suddenly change from SENDING to RECEIVING without going through the
ACK_WAIT state (in case of CONFIRMED messages). Tests show that after
this slight adjustment, our number of ack retries have significantly
reduced.
2018-10-19 11:46:55 +01:00
Hasnain Virk a1260998b4 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-19 11:46:55 +01:00
Hasnain Virk 0413129fbf Adding check for ongoing automatic-uplink
Before going after an automatic uplink, we should check if there was an
automatic uplink already ongoing, i.e., the ack for the previous
automatic uplink cycle has not been received.
If there is we shouldn't queue the new automatic uplink and wait for
the previous Ack cycle to complete.
2018-10-19 11:46:55 +01:00
Hasnain Virk c648c7f011 Style correction
LinkADRReq parameters and certain parameters used camel case
which is not the recommended style.
2018-10-19 11:46:55 +01:00
Hasnain Virk 6404d94dce Making cancel_sending() API robust
If the packet is already handed over to the PHY layer, we shouldn't be
able to cancel that particular transmission. In addition to that if the
backoff timer is either not applied or has been deactivated, should end
up in no-op rather than having normal termination. A new error code has
been introduced to cover no-op cases. This error code replaces the
compliance test related error code which is no longer relevant.
clear_tx_pipe() does nothing if:
	- The stack cannot cancel TX (already handed over to PHY)
        - The backoff timer is not active at all
        - The event is disaptched to schedule

stop_sending() will only post process ongoin TX if the pipe was
definitely cleared.
2018-10-19 11:46:55 +01:00
Cruz Monrreal II 762cf0393b Revert "Merge pull request #8183 from hasnainvirk/QOS_impl"
This reverts commit 5c675d3688, reversing
changes made to 2b04a02eb2.
2018-10-19 11:46:55 +01:00
Hasnain Virk 70ad11e2f1 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-19 11:46:55 +01:00
Hasnain Virk 925d51492f 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-19 11:46:55 +01:00
Hasnain Virk c42b7909da TX post-process for CONFIRMED UL in no-reception case
The idea behind the method post_process_no_reception() is to post
process any outgoing TX but we shouldn't do that if a CONFIRMED message
is outgoing and there are still some retries left.
2018-10-19 11:46:55 +01:00
Hasnain Virk d776f5cb6a Making sure that RX slots open after state change
After transmission we should change the state before invoking opening of
slots as we may start receiving in the rx slots and the state would
suddenly change from SENDING to RECEIVING without going through the
ACK_WAIT state (in case of CONFIRMED messages). Tests show that after
this slight adjustment, our number of ack retries have significantly
reduced.
2018-10-19 11:46:55 +01:00
Hasnain Virk 80d07ffe54 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-19 11:46:55 +01:00
Hasnain Virk 258b2813dd Adding check for ongoing automatic-uplink
Before going after an automatic uplink, we should check if there was an
automatic uplink already ongoing, i.e., the ack for the previous
automatic uplink cycle has not been received.
If there is we shouldn't queue the new automatic uplink and wait for
the previous Ack cycle to complete.
2018-10-19 11:46:55 +01:00
Hasnain Virk 0969c0f367 Style correction
LinkADRReq parameters and certain parameters used camel case
which is not the recommended style.
2018-10-19 11:46:55 +01:00
Antti Kauppila 04c16412cf cmake Paths corrected 2018-10-08 15:29:18 +01:00
Antti Kauppila 18a1e66ebc LoRaMac unittested 2018-10-08 15:29:18 +01:00
Antti Kauppila 8bed43e4f8 LoRaWANStack unit tested 2018-10-08 15:29:18 +01:00
Antti Kauppila 41d0648fdd LoRaMacCrypto unittested 2018-10-08 15:29:18 +01:00
Antti Kauppila 1f24d725a7 LoRaPHY unittested, small fixed done during tests 2018-10-08 15:29:18 +01:00
Antti Kauppila 07d2ce69ca LoRa regions unittested, stubs licences revisited 2018-10-08 15:18:50 +01:00
Antti Kauppila 474b652820 More lorawan unit tests added 2018-10-08 15:18:50 +01:00
Edd Inglis 366ad09e67 Changed the reported SNR from unsigned to signed. Internally and logically it is a signed value. 2018-10-08 15:18:50 +01:00
Kimmo Vaisanen e7d7b0ded6 Lora: Fix sticky MAC command retransmission
This commit fixes the bug where sticky MAC commands were duplicated in
send buffer everytime send() was called.
2018-10-08 15:18:50 +01:00
Kimmo Vaisanen ffa46b15f3 LoRa: Stop processing MAC commands if command id is unknown
The length of a MAC command is not explicitly given and must be
implicitly known by the MAC implementation. Therefore unknown MAC
commands cannot be skipped and the first unknown MAC command
terminates the processing of the MAC command sequence.

This commit fixes the bug where MAC command processing was not
terminated when unknown MAC command was received.
2018-10-08 15:18:50 +01:00
Hasnain Virk 6b11e99b96 LoRaWAN: Refactoring compliance test code
While performing compliance tests with an industry tester, we realized
that there was no need for any extra handling code for the compliance
tests. The tests would run fine, if we only have a handling application.
However, in normal operation we wouldn't like the network to send us any
traffic on compliance testing port. To mitigate that, on the reception
path we filter out any traffic on compliance testing port if compliance
testing is not underway. User should define LORAWAN_COMPLIANCE_TEST macro
in mbed_app.json to enable traffic on compliance test port.
2018-10-08 15:18:50 +01:00
Kimmo Vaisanen 3236feede7 Lora: Fix ADRAckReq
This commit fixes two bugs related to ADRAckReq:
- adr_ack_counter must be incremented for all uplink messages (not just confirmed)
- When ADR_ACK_LIMIT + ADR_ACK_DELAY has been reached, stack decreased used
  datarate twice.
2018-10-08 15:18:50 +01:00
Hasnain Virk a3c3f7af3c 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-10-08 15:18:50 +01:00
Amanda Butler f60ac631d3 Copy edit lorawan_types.h
Copy edit for minor grammar nits and consistent tense across docs.
2018-09-11 15:04:48 +01:00
Kimmo Vaisanen ca2619b0e8 Lora: Improve description of callback methods
Users often use "show declaration" (or similar) in their IDE to see descriptions of callback
methods so the function descriptions should be placed close to function declaration itself.
2018-09-11 15:04:48 +01:00
Anna Bridge 4fb3aec84a
Merge pull request #7895 from kivaisan/remove_duplicate_linkcheckreq
Lora: Remove duplicate LinkCheckReq MAC command
2018-09-03 16:43:02 +01:00
Anna Bridge c2fdc0d972
Merge pull request #7423 from mprse/mutex_lock_assert
Fix issue #6872 - Mutex lock has possibility to fail at runtime (returning status flag)
2018-09-03 14:14:24 +01:00
Amanda Butler a779e6f3c2
Copy edit FSB_Usage.txt
Copy edit for active voice, consistent tense and precise language.
2018-08-27 10:06:21 -05:00
Kimmo Vaisanen 6dc83dd737 Lora: Remove duplicate LinkCheckReq MAC command
When application requests link check request with add_link_check_request()
it was added to MAC command buffer. Again when actual TX was started,
stack cherry-picked the request into MAC buffer again resulting in a duplicate
entry in the buffer.

Functionality is changed now so that add_link_check_request() does not add
the request into MAC command buffer but it is cherry-picked into the buffer when
TX is issued.
2018-08-27 13:45:21 +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
Przemyslaw Stekiel e7b8e303ef Fix usage of `Mutex::unlock()` function - ignore returned value. 2018-08-27 08:50:00 +02:00
Przemyslaw Stekiel 8482cdc70f Fix usage of `Mutex::lock()` function - ignore returned value. 2018-08-27 08:48:58 +02: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
Martin Kojtal 781573a0b2
Merge pull request #7839 from kivaisan/change_loramac_internal_methods_as_private
Lora: Change visibility of LoRaMac internal methods as private
2018-08-24 13:04:56 +02: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
Martin Kojtal 81f5decf8f
Merge pull request #7785 from kivaisan/fix_join_accept_failure_handling
Lora: Fix join-response failure handling
2018-08-22 14:05:24 +02:00
Cruz Monrreal 36ee9b98d6
Merge pull request #7767 from kivaisan/fix_tx_error_if_corrupter_msg_received
Lora: Fix TX_ERROR event if corrupted msg is received for CONFIRMED request
2018-08-21 10:20:23 -05:00
Cruz Monrreal 7c22dca302
Merge pull request #7831 from hasnainvirk/rx2_dr_default
LoRaWAN: Restoring default RX2 data rate
2018-08-21 09:59:21 -05:00
Cruz Monrreal bf26cbf330
Merge pull request #7807 from hasnainvirk/warning_fix
Compiler warning: unused variable in LoRaMac.h
2018-08-21 09:53:26 -05:00
Cruz Monrreal 08afaf2f85
Merge pull request #7770 from kivaisan/fix_rejoin_with_parameters
LoRa: Fix MAC initialization for connection with parameters
2018-08-21 09:42:16 -05:00