Skip to content

Commit 0a349a0

Browse files
author
Antti Kauppila
committed
LoRa: Removed LoRaMac dependency from MIB and MLME classes
- Internal refactoring only, no functional changes
1 parent c6cf180 commit 0a349a0

File tree

6 files changed

+141
-163
lines changed

6 files changed

+141
-163
lines changed

features/lorawan/LoRaWANInterface.h

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -44,7 +44,7 @@ class LoRaWANInterface: public LoRaWANBase {
4444
*
4545
* @return 0 on success, a negative error code on failure.
4646
*/
47-
virtual lorawan_status_t initialize(events::EventQueue *ev_queue) ;
47+
virtual lorawan_status_t initialize(events::EventQueue *ev_queue);
4848

4949
/** Connect OTAA or ABP using Mbed-OS config system
5050
*

features/lorawan/lorastack/mac/LoRaMac.cpp

Lines changed: 107 additions & 38 deletions
Original file line numberDiff line numberDiff line change
@@ -1547,51 +1547,51 @@ lorawan_status_t LoRaMac::send_frame_on_channel(uint8_t channel)
15471547
return LORAWAN_STATUS_OK;
15481548
}
15491549

1550-
lorawan_status_t LoRaMac::set_tx_continuous_wave(uint16_t timeout)
1551-
{
1552-
cw_mode_params_t continuous_wave;
1550+
//lorawan_status_t LoRaMac::set_tx_continuous_wave(uint16_t timeout)
1551+
//{
1552+
// cw_mode_params_t continuous_wave;
15531553

1554-
continuous_wave.channel = _params.channel;
1555-
continuous_wave.datarate = _params.sys_params.channel_data_rate;
1556-
continuous_wave.tx_power = _params.sys_params.channel_tx_power;
1557-
continuous_wave.max_eirp = _params.sys_params.max_eirp;
1558-
continuous_wave.antenna_gain = _params.sys_params.antenna_gain;
1559-
continuous_wave.timeout = timeout;
1554+
// continuous_wave.channel = _params.channel;
1555+
// continuous_wave.datarate = _params.sys_params.channel_data_rate;
1556+
// continuous_wave.tx_power = _params.sys_params.channel_tx_power;
1557+
// continuous_wave.max_eirp = _params.sys_params.max_eirp;
1558+
// continuous_wave.antenna_gain = _params.sys_params.antenna_gain;
1559+
// continuous_wave.timeout = timeout;
15601560

1561-
lora_phy->set_tx_cont_mode(&continuous_wave);
1561+
// lora_phy->set_tx_cont_mode(&continuous_wave);
15621562

1563-
// Starts the MAC layer status check timer
1564-
_lora_time.start(_params.timers.mac_state_check_timer,
1565-
MAC_STATE_CHECK_TIMEOUT);
1563+
// // Starts the MAC layer status check timer
1564+
// _lora_time.start(_params.timers.mac_state_check_timer,
1565+
// MAC_STATE_CHECK_TIMEOUT);
15661566

1567-
_params.mac_state |= LORAMAC_TX_RUNNING;
1567+
// _params.mac_state |= LORAMAC_TX_RUNNING;
15681568

1569-
return LORAWAN_STATUS_OK;
1570-
}
1569+
// return LORAWAN_STATUS_OK;
1570+
//}
15711571

1572-
lorawan_status_t LoRaMac::set_tx_continuous_wave1(uint16_t timeout,
1573-
uint32_t frequency,
1574-
uint8_t power)
1575-
{
1576-
cw_mode_params_t continuous_wave;
1572+
//lorawan_status_t LoRaMac::set_tx_continuous_wave1(uint16_t timeout,
1573+
// uint32_t frequency,
1574+
// uint8_t power)
1575+
//{
1576+
// cw_mode_params_t continuous_wave;
15771577

1578-
continuous_wave.channel = 0;
1579-
continuous_wave.datarate = 0;
1580-
continuous_wave.tx_power = power;
1581-
continuous_wave.max_eirp = 0;
1582-
continuous_wave.antenna_gain = 0;
1583-
continuous_wave.timeout = timeout;
1578+
// continuous_wave.channel = 0;
1579+
// continuous_wave.datarate = 0;
1580+
// continuous_wave.tx_power = power;
1581+
// continuous_wave.max_eirp = 0;
1582+
// continuous_wave.antenna_gain = 0;
1583+
// continuous_wave.timeout = timeout;
15841584

1585-
lora_phy->set_tx_cont_mode(&continuous_wave);
1585+
// lora_phy->set_tx_cont_mode(&continuous_wave);
15861586

1587-
// Starts the MAC layer status check timer
1588-
_lora_time.start(_params.timers.mac_state_check_timer,
1589-
MAC_STATE_CHECK_TIMEOUT);
1587+
// // Starts the MAC layer status check timer
1588+
// _lora_time.start(_params.timers.mac_state_check_timer,
1589+
// MAC_STATE_CHECK_TIMEOUT);
15901590

1591-
_params.mac_state |= LORAMAC_TX_RUNNING;
1591+
// _params.mac_state |= LORAMAC_TX_RUNNING;
15921592

1593-
return LORAWAN_STATUS_OK;
1594-
}
1593+
// return LORAWAN_STATUS_OK;
1594+
//}
15951595

15961596
lorawan_status_t LoRaMac::initialize(loramac_primitives_t *primitives,
15971597
LoRaPHY *phy, EventQueue *queue)
@@ -1606,13 +1606,13 @@ lorawan_status_t LoRaMac::initialize(loramac_primitives_t *primitives,
16061606
lora_phy = phy;
16071607

16081608
// Activate MLME subsystem
1609-
mlme.activate_mlme_subsystem(this, lora_phy);
1609+
mlme.activate_mlme_subsystem(lora_phy);
16101610

16111611
// Activate MCPS subsystem
16121612
mcps.activate_mcps_subsystem(this, lora_phy);
16131613

16141614
// Activate MIB subsystem
1615-
mib.activate_mib_subsystem(this, lora_phy);
1615+
mib.activate_mib_subsystem(lora_phy);
16161616

16171617
// Activate channel planning subsystem
16181618
channel_plan.activate_channelplan_subsystem(lora_phy);
@@ -1878,10 +1878,74 @@ lorawan_status_t LoRaMac::multicast_channel_unlink(
18781878

18791879
lorawan_status_t LoRaMac::mlme_request( loramac_mlme_req_t *mlmeRequest )
18801880
{
1881-
lorawan_status_t status = mlme.set_request(mlmeRequest, &_params);
1881+
if (LORAMAC_IDLE != _params.mac_state) {
1882+
return LORAWAN_STATUS_BUSY;
1883+
}
1884+
if (MLME_JOIN == mlmeRequest->type) {
1885+
reset_mac_parameters();
1886+
}
1887+
1888+
mlme.reset_confirmation();
1889+
1890+
mlme.get_confirmation().req_type = mlmeRequest->type;
1891+
_params.flags.bits.mlme_req = 1;
1892+
1893+
lorawan_status_t status = LORAWAN_STATUS_SERVICE_UNKNOWN;
1894+
18821895
if (MLME_LINK_CHECK == mlmeRequest->type) {
18831896
status = mac_commands.add_mac_command(MOTE_MAC_LINK_CHECK_REQ, 0, 0);
1897+
} else if (MLME_JOIN == mlmeRequest->type) {
1898+
if ((_params.mac_state & LORAMAC_TX_DELAYED) == LORAMAC_TX_DELAYED) {
1899+
return LORAWAN_STATUS_BUSY;
1900+
}
1901+
1902+
if ((mlmeRequest->req.join.dev_eui == NULL)
1903+
|| (mlmeRequest->req.join.app_eui == NULL)
1904+
|| (mlmeRequest->req.join.app_key == NULL)
1905+
|| (mlmeRequest->req.join.nb_trials == 0)) {
1906+
return LORAWAN_STATUS_PARAMETER_INVALID;
1907+
}
1908+
_params.keys.dev_eui = mlmeRequest->req.join.dev_eui;
1909+
_params.keys.app_eui = mlmeRequest->req.join.app_eui;
1910+
_params.keys.app_key = mlmeRequest->req.join.app_key;
1911+
_params.max_join_request_trials = mlmeRequest->req.join.nb_trials;
1912+
1913+
if (!lora_phy->verify_nb_join_trials(mlmeRequest->req.join.nb_trials)) {
1914+
// Value not supported, get default
1915+
_params.max_join_request_trials = lora_phy->get_nb_join_trials(true);
1916+
}
1917+
// Reset variable JoinRequestTrials
1918+
_params.join_request_trial_counter = 0;
1919+
_params.sys_params.channel_data_rate =
1920+
lora_phy->get_alternate_DR(_params.join_request_trial_counter + 1);
1921+
1922+
loramac_mhdr_t machdr;
1923+
machdr.value = 0;
1924+
machdr.bits.mtype = FRAME_TYPE_JOIN_REQ;
1925+
status = send(&machdr, 0, NULL, 0);
1926+
} else if (MLME_TXCW == mlmeRequest->type) {
1927+
mlme.set_tx_continuous_wave(_params.channel, _params.sys_params.channel_data_rate, _params.sys_params.channel_tx_power,
1928+
_params.sys_params.max_eirp, _params.sys_params.antenna_gain, mlmeRequest->req.cw_tx_mode.timeout);
1929+
_lora_time.start(_params.timers.mac_state_check_timer,
1930+
MAC_STATE_CHECK_TIMEOUT);
1931+
1932+
_params.mac_state |= LORAMAC_TX_RUNNING;
1933+
status = LORAWAN_STATUS_OK;
1934+
} else if (MLME_TXCW_1 == mlmeRequest->type) {
1935+
mlme.set_tx_continuous_wave(0, 0, mlmeRequest->req.cw_tx_mode.power, 0, 0, mlmeRequest->req.cw_tx_mode.timeout);
1936+
_lora_time.start(_params.timers.mac_state_check_timer,
1937+
MAC_STATE_CHECK_TIMEOUT);
1938+
1939+
_params.mac_state |= LORAMAC_TX_RUNNING;
1940+
status = LORAWAN_STATUS_OK;
18841941
}
1942+
1943+
if (status != LORAWAN_STATUS_OK) {
1944+
_params.is_node_ack_requested = false;
1945+
_params.flags.bits.mlme_req = 0;
1946+
}
1947+
1948+
18851949
return status;
18861950
}
18871951

@@ -1903,7 +1967,12 @@ lorawan_status_t LoRaMac::mib_get_request_confirm( loramac_mib_req_confirm_t *mi
19031967

19041968
lorawan_status_t LoRaMac::mib_set_request_confirm( loramac_mib_req_confirm_t *mibSet )
19051969
{
1906-
return mib.set_request(mibSet, &_params);
1970+
lorawan_status_t status = mib.set_request(mibSet, &_params);
1971+
if (LORAWAN_STATUS_OK == status && CLASS_C == _params.dev_class && (MIB_DEVICE_CLASS == mibSet->type ||
1972+
(MIB_RX2_CHANNEL == mibSet->type && _params.is_nwk_joined))) {
1973+
open_continuous_rx2_window();
1974+
}
1975+
return status;
19071976
}
19081977

19091978
radio_events_t *LoRaMac::get_phy_event_handlers()

features/lorawan/lorastack/mac/LoRaMacMib.cpp

Lines changed: 3 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -27,24 +27,23 @@ SPDX-License-Identifier: BSD-3-Clause
2727
#include "lorastack/mac/LoRaMacMib.h"
2828

2929
LoRaMacMib::LoRaMacMib()
30-
: _lora_mac(NULL), _lora_phy(NULL)
30+
: _lora_phy(NULL)
3131
{
3232
}
3333

3434
LoRaMacMib::~LoRaMacMib()
3535
{
3636
}
3737

38-
void LoRaMacMib::activate_mib_subsystem(LoRaMac *mac, LoRaPHY *phy)
38+
void LoRaMacMib::activate_mib_subsystem(LoRaPHY *phy)
3939
{
40-
_lora_mac = mac;
4140
_lora_phy = phy;
4241
}
4342

4443
lorawan_status_t LoRaMacMib::set_request(loramac_mib_req_confirm_t *mibSet,
4544
loramac_protocol_params *params)
4645
{
47-
if (mibSet == NULL || _lora_phy == NULL || _lora_mac == NULL) {
46+
if (mibSet == NULL || _lora_phy == NULL) {
4847
return LORAWAN_STATUS_PARAMETER_INVALID;
4948
}
5049

@@ -73,7 +72,6 @@ lorawan_status_t LoRaMacMib::set_request(loramac_mib_req_confirm_t *mibSet,
7372
params->sys_params.min_rx_symb,
7473
params->sys_params.max_sys_rx_error,
7574
&params->rx_window2_config);
76-
_lora_mac->open_continuous_rx2_window();
7775
break;
7876
}
7977
}
@@ -139,8 +137,6 @@ lorawan_status_t LoRaMacMib::set_request(loramac_mib_req_confirm_t *mibSet,
139137
params->sys_params.min_rx_symb,
140138
params->sys_params.max_sys_rx_error,
141139
&params->rx_window2_config);
142-
143-
_lora_mac->open_continuous_rx2_window();
144140
}
145141
} else {
146142
status = LORAWAN_STATUS_PARAMETER_INVALID;

features/lorawan/lorastack/mac/LoRaMacMib.h

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -56,7 +56,7 @@ class LoRaMacMib {
5656
* @param mac pointer to MAC layer
5757
* @param phy pointer to PHY layer
5858
*/
59-
void activate_mib_subsystem(LoRaMac *mac, LoRaPHY *phy);
59+
void activate_mib_subsystem(LoRaPHY *phy);
6060

6161
/** Sets up a MIB Request
6262
*
@@ -90,9 +90,8 @@ class LoRaMacMib {
9090
private:
9191

9292
/**
93-
* Pointers to MAC and PHY handles
93+
* Pointer PHY handle
9494
*/
95-
LoRaMac *_lora_mac;
9695
LoRaPHY *_lora_phy;
9796
};
9897

0 commit comments

Comments
 (0)