Skip to content

Commit 7369cbd

Browse files
author
Hasnain Virk
committed
[IOTCELL-346] Removing default value storage
We now save roughly 500 bytes by removing storage of default parameters in the loramac_params_t data structure. We use Mib to get default values from PHY whenever needed instead. loramac_sys_arams_t now contains only the runtime values set during operation whenever defaults are needed we directly query the PHY layer or via Mib as the need maybe.
1 parent c027743 commit 7369cbd

File tree

4 files changed

+81
-56
lines changed

4 files changed

+81
-56
lines changed

features/lorawan/LoRaWANStack.cpp

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -244,7 +244,7 @@ lorawan_status_t LoRaWANStack::send_compliance_test_frame_to_mac()
244244
mcps_req.f_buffer_size = _tx_msg.f_buffer_size;
245245
mcps_req.req.unconfirmed.data_rate = default_datarate.Value;
246246

247-
tr_info("Transmit unconfirmed compliance test frame %d bytes.", mcps_req.req.unconfirmed.fbuffer_size);
247+
tr_info("Transmit unconfirmed compliance test frame %d bytes.", mcps_req.f_buffer_size);
248248

249249
for (uint8_t i = 0; i < mcps_req.f_buffer_size; ++i) {
250250
tr_info("Byte %d, data is 0x%x", i+1, ((uint8_t*)mcps_req.f_buffer)[i]);
@@ -257,7 +257,7 @@ lorawan_status_t LoRaWANStack::send_compliance_test_frame_to_mac()
257257
mcps_req.req.confirmed.nb_trials = _num_retry;
258258
mcps_req.req.confirmed.data_rate = default_datarate.Value;
259259

260-
tr_info("Transmit confirmed compliance test frame %d bytes.", mcps_req.req.confirmed.fbuffer_size);
260+
tr_info("Transmit confirmed compliance test frame %d bytes.", mcps_req.f_buffer_size);
261261

262262
for (uint8_t i = 0; i < mcps_req.f_buffer_size; ++i) {
263263
tr_info("Byte %d, data is 0x%x", i+1, ((uint8_t*)mcps_req.f_buffer)[i]);

features/lorawan/lorastack/mac/LoRaMac.cpp

Lines changed: 58 additions & 37 deletions
Original file line numberDiff line numberDiff line change
@@ -1225,6 +1225,8 @@ lorawan_status_t LoRaMac::ScheduleTx( void )
12251225
{
12261226
lorawan_time_t dutyCycleTimeOff = 0;
12271227
NextChanParams_t nextChan;
1228+
GetPhyParams_t getPhy;
1229+
PhyParam_t phyParam;
12281230

12291231
// Check if the device is off
12301232
if( _params.sys_params.max_duty_cycle == 255 )
@@ -1251,7 +1253,9 @@ lorawan_status_t LoRaMac::ScheduleTx( void )
12511253
&_params.timers.aggregated_timeoff ) == false )
12521254
{
12531255
// Set the default datarate
1254-
_params.sys_params.channel_data_rate = _params.def_sys_params.channel_data_rate;
1256+
getPhy.Attribute = PHY_DEF_TX_DR;
1257+
phyParam = lora_phy->get_phy_params( &getPhy );
1258+
_params.sys_params.channel_data_rate = phyParam.Value;
12551259
// Update datarate in the function parameters
12561260
nextChan.Datarate = _params.sys_params.channel_data_rate;
12571261
}
@@ -1330,6 +1334,9 @@ void LoRaMac::CalculateBackOff( uint8_t channel )
13301334

13311335
void LoRaMac::ResetMacParameters( void )
13321336
{
1337+
GetPhyParams_t getPhy;
1338+
PhyParam_t phyParam;
1339+
13331340
_params.is_nwk_joined = false;
13341341

13351342
// Counters
@@ -1352,14 +1359,37 @@ void LoRaMac::ResetMacParameters( void )
13521359

13531360
_params.is_rx_window_enabled = true;
13541361

1355-
_params.sys_params.channel_tx_power = _params.def_sys_params.channel_tx_power;
1356-
_params.sys_params.channel_data_rate = _params.def_sys_params.channel_data_rate;
1357-
_params.sys_params.rx1_dr_offset = _params.def_sys_params.rx1_dr_offset;
1358-
_params.sys_params.rx2_channel = _params.def_sys_params.rx2_channel;
1359-
_params.sys_params.uplink_dwell_time = _params.def_sys_params.uplink_dwell_time;
1360-
_params.sys_params.downlink_dwell_time = _params.def_sys_params.downlink_dwell_time;
1361-
_params.sys_params.max_eirp = _params.def_sys_params.max_eirp;
1362-
_params.sys_params.antenna_gain = _params.def_sys_params.antenna_gain;
1362+
getPhy.Attribute = PHY_DEF_TX_POWER;
1363+
phyParam = lora_phy->get_phy_params( &getPhy );
1364+
1365+
_params.sys_params.channel_tx_power = phyParam.Value;
1366+
1367+
getPhy.Attribute = PHY_DEF_TX_DR;
1368+
phyParam = lora_phy->get_phy_params( &getPhy );
1369+
_params.sys_params.channel_data_rate = phyParam.Value;
1370+
1371+
getPhy.Attribute = PHY_DEF_DR1_OFFSET;
1372+
phyParam = lora_phy->get_phy_params( &getPhy );
1373+
_params.sys_params.rx1_dr_offset = phyParam.Value;
1374+
1375+
getPhy.Attribute = PHY_DEF_RX2_FREQUENCY;
1376+
phyParam = lora_phy->get_phy_params( &getPhy );
1377+
_params.sys_params.rx2_channel.frequency = phyParam.Value;
1378+
getPhy.Attribute = PHY_DEF_RX2_DR;
1379+
phyParam = lora_phy->get_phy_params( &getPhy );
1380+
_params.sys_params.rx2_channel.datarate = phyParam.Value;
1381+
1382+
getPhy.Attribute = PHY_DEF_UPLINK_DWELL_TIME;
1383+
phyParam = lora_phy->get_phy_params( &getPhy );
1384+
_params.sys_params.uplink_dwell_time = phyParam.Value;
1385+
1386+
getPhy.Attribute = PHY_DEF_MAX_EIRP;
1387+
phyParam = lora_phy->get_phy_params( &getPhy );
1388+
_params.sys_params.max_eirp = phyParam.Value;
1389+
1390+
getPhy.Attribute = PHY_DEF_ANTENNA_GAIN;
1391+
phyParam = lora_phy->get_phy_params( &getPhy );
1392+
_params.sys_params.antenna_gain = phyParam.Value;
13631393

13641394
_params.is_node_ack_requested = false;
13651395
_params.is_srv_ack_requested = false;
@@ -1727,75 +1757,66 @@ lorawan_status_t LoRaMac::LoRaMacInitialization(loramac_primitives_t *primitives
17271757

17281758
getPhy.Attribute = PHY_DEF_TX_POWER;
17291759
phyParam = lora_phy->get_phy_params( &getPhy );
1730-
_params.def_sys_params.channel_tx_power = phyParam.Value;
1760+
_params.sys_params.channel_tx_power = phyParam.Value;
17311761

17321762
getPhy.Attribute = PHY_DEF_TX_DR;
17331763
phyParam = lora_phy->get_phy_params( &getPhy );
1734-
_params.def_sys_params.channel_data_rate = phyParam.Value;
1764+
_params.sys_params.channel_data_rate = phyParam.Value;
17351765

17361766
getPhy.Attribute = PHY_MAX_RX_WINDOW;
17371767
phyParam = lora_phy->get_phy_params( &getPhy );
1738-
_params.def_sys_params.max_rx_win_time = phyParam.Value;
1768+
_params.sys_params.max_rx_win_time = phyParam.Value;
17391769

17401770
getPhy.Attribute = PHY_RECEIVE_DELAY1;
17411771
phyParam = lora_phy->get_phy_params( &getPhy );
1742-
_params.def_sys_params.recv_delay1 = phyParam.Value;
1772+
_params.sys_params.recv_delay1 = phyParam.Value;
17431773

17441774
getPhy.Attribute = PHY_RECEIVE_DELAY2;
17451775
phyParam = lora_phy->get_phy_params( &getPhy );
1746-
_params.def_sys_params.recv_delay2 = phyParam.Value;
1776+
_params.sys_params.recv_delay2 = phyParam.Value;
17471777

17481778
getPhy.Attribute = PHY_JOIN_ACCEPT_DELAY1;
17491779
phyParam = lora_phy->get_phy_params( &getPhy );
1750-
_params.def_sys_params.join_accept_delay1 = phyParam.Value;
1780+
_params.sys_params.join_accept_delay1 = phyParam.Value;
17511781

17521782
getPhy.Attribute = PHY_JOIN_ACCEPT_DELAY2;
17531783
phyParam = lora_phy->get_phy_params( &getPhy );
1754-
_params.def_sys_params.join_accept_delay2 = phyParam.Value;
1784+
_params.sys_params.join_accept_delay2 = phyParam.Value;
17551785

17561786
getPhy.Attribute = PHY_DEF_DR1_OFFSET;
17571787
phyParam = lora_phy->get_phy_params( &getPhy );
1758-
_params.def_sys_params.rx1_dr_offset = phyParam.Value;
1788+
_params.sys_params.rx1_dr_offset = phyParam.Value;
17591789

17601790
getPhy.Attribute = PHY_DEF_RX2_FREQUENCY;
17611791
phyParam = lora_phy->get_phy_params( &getPhy );
1762-
_params.def_sys_params.rx2_channel.frequency = phyParam.Value;
1792+
_params.sys_params.rx2_channel.frequency = phyParam.Value;
17631793

17641794
getPhy.Attribute = PHY_DEF_RX2_DR;
17651795
phyParam = lora_phy->get_phy_params( &getPhy );
1766-
_params.def_sys_params.rx2_channel.datarate = phyParam.Value;
1796+
_params.sys_params.rx2_channel.datarate = phyParam.Value;
17671797

17681798
getPhy.Attribute = PHY_DEF_UPLINK_DWELL_TIME;
17691799
phyParam = lora_phy->get_phy_params( &getPhy );
1770-
_params.def_sys_params.uplink_dwell_time = phyParam.Value;
1800+
_params.sys_params.uplink_dwell_time = phyParam.Value;
17711801

17721802
getPhy.Attribute = PHY_DEF_DOWNLINK_DWELL_TIME;
17731803
phyParam = lora_phy->get_phy_params( &getPhy );
1774-
_params.def_sys_params.downlink_dwell_time = phyParam.Value;
1804+
_params.sys_params.downlink_dwell_time = phyParam.Value;
17751805

17761806
getPhy.Attribute = PHY_DEF_MAX_EIRP;
17771807
phyParam = lora_phy->get_phy_params( &getPhy );
1778-
_params.def_sys_params.max_eirp = phyParam.fValue;
1808+
_params.sys_params.max_eirp = phyParam.fValue;
17791809

17801810
getPhy.Attribute = PHY_DEF_ANTENNA_GAIN;
17811811
phyParam = lora_phy->get_phy_params( &getPhy );
1782-
_params.def_sys_params.antenna_gain = phyParam.fValue;
1812+
_params.sys_params.antenna_gain = phyParam.fValue;
17831813

17841814
lora_phy->load_defaults(INIT_TYPE_INIT);
17851815

17861816
// Init parameters which are not set in function ResetMacParameters
1787-
_params.def_sys_params.retry_num = 1;
1788-
_params.def_sys_params.max_sys_rx_error = 10;
1789-
_params.def_sys_params.min_rx_symb = 6;
1790-
1791-
_params.sys_params.max_sys_rx_error = _params.def_sys_params.max_sys_rx_error;
1792-
_params.sys_params.min_rx_symb = _params.def_sys_params.min_rx_symb;
1793-
_params.sys_params.max_rx_win_time = _params.def_sys_params.max_rx_win_time;
1794-
_params.sys_params.recv_delay1 = _params.def_sys_params.recv_delay1;
1795-
_params.sys_params.recv_delay2 = _params.def_sys_params.recv_delay2;
1796-
_params.sys_params.join_accept_delay1 = _params.def_sys_params.join_accept_delay1;
1797-
_params.sys_params.join_accept_delay2 = _params.def_sys_params.join_accept_delay2;
1798-
_params.sys_params.retry_num = _params.def_sys_params.retry_num;
1817+
_params.sys_params.max_sys_rx_error = 10;
1818+
_params.sys_params.min_rx_symb = 6;
1819+
_params.sys_params.retry_num = 1;
17991820

18001821
ResetMacParameters( );
18011822

@@ -1831,8 +1852,8 @@ lorawan_status_t LoRaMac::LoRaMacQueryTxPossible( uint8_t size, loramac_tx_info_
18311852
AdrNextParams_t adrNext;
18321853
GetPhyParams_t getPhy;
18331854
PhyParam_t phyParam;
1834-
int8_t datarate = _params.def_sys_params.channel_data_rate;
1835-
int8_t txPower = _params.def_sys_params.channel_tx_power;
1855+
int8_t datarate = _params.sys_params.channel_data_rate;
1856+
int8_t txPower = _params.sys_params.channel_tx_power;
18361857
uint8_t fOptLen = mac_commands.GetLength() + mac_commands.GetRepeatLength();
18371858

18381859
if( txInfo == NULL )

features/lorawan/lorastack/mac/LoRaMacMib.cpp

Lines changed: 21 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -158,7 +158,7 @@ lorawan_status_t LoRaMacMib::set_request(loramac_mib_req_confirm_t *mibSet,
158158
verify.DatarateParams.DownlinkDwellTime = params->sys_params.downlink_dwell_time;
159159

160160
if (_lora_phy->verify(&verify, PHY_RX_DR) == true) {
161-
params->def_sys_params.rx2_channel = mibSet->param.default_rx2_channel;
161+
params->sys_params.rx2_channel = mibSet->param.default_rx2_channel;
162162
} else {
163163
status = LORAWAN_STATUS_PARAMETER_INVALID;
164164
}
@@ -215,7 +215,7 @@ lorawan_status_t LoRaMacMib::set_request(loramac_mib_req_confirm_t *mibSet,
215215
verify.DatarateParams.Datarate = mibSet->param.default_channel_data_rate;
216216

217217
if (_lora_phy->verify(&verify, PHY_DEF_TX_DR) == true) {
218-
params->def_sys_params.channel_data_rate = verify.DatarateParams.Datarate;
218+
params->sys_params.channel_data_rate = verify.DatarateParams.Datarate;
219219
} else {
220220
status = LORAWAN_STATUS_PARAMETER_INVALID;
221221
}
@@ -236,7 +236,7 @@ lorawan_status_t LoRaMacMib::set_request(loramac_mib_req_confirm_t *mibSet,
236236
verify.TxPower = mibSet->param.default_channel_tx_pwr;
237237

238238
if (_lora_phy->verify(&verify, PHY_DEF_TX_POWER) == true) {
239-
params->def_sys_params.channel_tx_power = verify.TxPower;
239+
params->sys_params.channel_tx_power = verify.TxPower;
240240
} else {
241241
status = LORAWAN_STATUS_PARAMETER_INVALID;
242242
}
@@ -261,15 +261,11 @@ lorawan_status_t LoRaMacMib::set_request(loramac_mib_req_confirm_t *mibSet,
261261
break;
262262
}
263263
case MIB_SYSTEM_MAX_RX_ERROR: {
264-
params->sys_params.max_sys_rx_error =
265-
params->def_sys_params.max_sys_rx_error =
266-
mibSet->param.max_rx_sys_error;
264+
params->sys_params.max_sys_rx_error = mibSet->param.max_rx_sys_error;
267265
break;
268266
}
269267
case MIB_MIN_RX_SYMBOLS: {
270-
params->sys_params.min_rx_symb =
271-
params->def_sys_params.min_rx_symb =
272-
mibSet->param.min_rx_symb;
268+
params->sys_params.min_rx_symb = mibSet->param.min_rx_symb;
273269
break;
274270
}
275271
case MIB_ANTENNA_GAIN: {
@@ -290,6 +286,7 @@ lorawan_status_t LoRaMacMib::get_request(loramac_mib_req_confirm_t *mibGet,
290286
lorawan_status_t status = LORAWAN_STATUS_OK;
291287
GetPhyParams_t getPhy;
292288
PhyParam_t phyParam;
289+
rx2_channel_params rx2_channel;
293290

294291
if( mibGet == NULL )
295292
{
@@ -358,7 +355,15 @@ lorawan_status_t LoRaMacMib::get_request(loramac_mib_req_confirm_t *mibGet,
358355
}
359356
case MIB_RX2_DEFAULT_CHANNEL:
360357
{
361-
mibGet->param.rx2_channel = params->def_sys_params.rx2_channel;
358+
getPhy.Attribute = PHY_DEF_RX2_DR;
359+
phyParam = _lora_phy->get_phy_params( &getPhy );
360+
rx2_channel.datarate = phyParam.Value;
361+
362+
getPhy.Attribute = PHY_DEF_RX2_FREQUENCY;
363+
phyParam = _lora_phy->get_phy_params( &getPhy );
364+
rx2_channel.frequency = phyParam.Value;
365+
366+
mibGet->param.rx2_channel = rx2_channel;
362367
break;
363368
}
364369
case MIB_CHANNELS_DEFAULT_MASK:
@@ -409,7 +414,9 @@ lorawan_status_t LoRaMacMib::get_request(loramac_mib_req_confirm_t *mibGet,
409414
}
410415
case MIB_CHANNELS_DEFAULT_DATARATE:
411416
{
412-
mibGet->param.default_channel_data_rate = params->def_sys_params.channel_data_rate;
417+
getPhy.Attribute = PHY_DEF_TX_DR;
418+
phyParam = _lora_phy->get_phy_params( &getPhy );
419+
mibGet->param.default_channel_data_rate = phyParam.Value;
413420
break;
414421
}
415422
case MIB_CHANNELS_DATARATE:
@@ -419,7 +426,9 @@ lorawan_status_t LoRaMacMib::get_request(loramac_mib_req_confirm_t *mibGet,
419426
}
420427
case MIB_CHANNELS_DEFAULT_TX_POWER:
421428
{
422-
mibGet->param.default_channel_tx_pwr = params->def_sys_params.channel_tx_power;
429+
getPhy.Attribute = PHY_DEF_TX_POWER;
430+
phyParam = _lora_phy->get_phy_params( &getPhy );
431+
mibGet->param.default_channel_tx_pwr = phyParam.Value;
423432
break;
424433
}
425434
case MIB_CHANNELS_TX_POWER:

features/lorawan/system/lorawan_data_structures.h

Lines changed: 0 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -2328,11 +2328,6 @@ typedef struct {
23282328
*/
23292329
lora_mac_system_params_t sys_params;
23302330

2331-
/*!
2332-
* LoRaMac default parameters
2333-
*/
2334-
lora_mac_system_params_t def_sys_params;
2335-
23362331
/*!
23372332
* Receive Window configurations for PHY layer
23382333
*/

0 commit comments

Comments
 (0)