@@ -204,45 +204,52 @@ static const int8_t datarate_offsets_US915[5][4] =
204
204
/* !
205
205
* Maximum payload with respect to the datarate index. Cannot operate with repeater.
206
206
*/
207
- static const uint8_t max_payloads_US915[] = { 11 , 53 , 125 , 242 , 242 , 0 , 0 , 0 , 53 , 129 , 242 , 242 , 242 , 242 , 0 , 0 };
207
+ static const uint8_t max_payloads_US915[] = {11 , 53 , 125 , 242 , 242 , 0 , 0 , 0 , 53 , 129 , 242 , 242 , 242 , 242 , 0 , 0 };
208
208
209
209
/* !
210
210
* Maximum payload with respect to the datarate index. Can operate with repeater.
211
211
*/
212
212
static const uint8_t max_payloads_with_repeater_US915[] = {11 , 53 , 125 , 242 , 242 , 0 , 0 , 0 , 33 , 109 , 222 , 222 , 222 , 222 , 0 , 0 };
213
213
214
+ static const uint16_t fsb_mask[] = MBED_CONF_LORA_FSB_MASK;
215
+
214
216
LoRaPHYUS915::LoRaPHYUS915 ()
215
217
{
216
218
bands[0 ] = US915_BAND0;
217
219
218
220
// Channels
219
- // 125 kHz channels
221
+ // 125 kHz channels - Upstream
220
222
for (uint8_t i = 0 ; i < US915_MAX_NB_CHANNELS - 8 ; i++) {
221
223
channels[i].frequency = 902300000 + i * 200000 ;
222
224
channels[i].dr_range .value = ( DR_3 << 4 ) | DR_0;
223
225
channels[i].band = 0 ;
224
226
}
225
- // 500 kHz channels
227
+ // 500 kHz channels - Upstream
226
228
for (uint8_t i = US915_MAX_NB_CHANNELS - 8 ; i < US915_MAX_NB_CHANNELS; i++) {
227
229
channels[i].frequency = 903000000 + (i - ( US915_MAX_NB_CHANNELS - 8 )) * 1600000 ;
228
230
channels[i].dr_range .value = ( DR_4 << 4 ) | DR_4;
229
231
channels[i].band = 0 ;
230
232
}
231
233
232
234
// ChannelsMask
233
- default_channel_mask[0 ] = 0xFFFF ;
234
- default_channel_mask[1 ] = 0xFFFF ;
235
- default_channel_mask[2 ] = 0xFFFF ;
236
- default_channel_mask[3 ] = 0xFFFF ;
237
- default_channel_mask[4 ] = 0x00FF ;
235
+ for (uint8_t i = 0 ; i < US915_MAX_NB_CHANNELS; i++) {
236
+ if (i == (US915_MAX_NB_CHANNELS - 1 )) {
237
+ // 64 - 71, 500 kHz channels will get enabled
238
+ default_channel_mask[i] = 0x00FF & fsb_mask[i];
239
+ continue ;
240
+ }
241
+
242
+ // 0 - 63 125 kHz channels will get enabled
243
+ default_channel_mask[i] = 0xFFFF & fsb_mask[i];
244
+ }
238
245
239
246
memset (channel_mask, 0 , sizeof (channel_mask));
240
247
memset (current_channel_mask, 0 , sizeof (current_channel_mask));
241
248
242
249
// Copy channels default mask
243
250
copy_channel_mask (channel_mask, default_channel_mask, US915_CHANNEL_MASK_SIZE);
244
251
245
- // current channel masks keep track what of the
252
+ // current channel masks keep track of the
246
253
// channels previously used, i.e., which channels should be avoided in
247
254
// next transmission
248
255
copy_channel_mask (current_channel_mask, channel_mask, US915_CHANNEL_MASK_SIZE);
@@ -346,7 +353,7 @@ void LoRaPHYUS915::restore_default_channels()
346
353
// Copy channels default mask
347
354
copy_channel_mask (channel_mask, default_channel_mask, US915_CHANNEL_MASK_SIZE);
348
355
349
- for ( uint8_t i = 0 ; i < US915_CHANNEL_MASK_SIZE; i++ ) {
356
+ for (uint8_t i = 0 ; i < US915_CHANNEL_MASK_SIZE; i++) {
350
357
// Copy-And the channels mask
351
358
current_channel_mask[i] &= channel_mask[i];
352
359
}
@@ -384,10 +391,11 @@ bool LoRaPHYUS915::rx_config(rx_config_params_t* config)
384
391
385
392
_radio->lock ();
386
393
387
- _radio->set_channel ( frequency );
394
+ _radio->set_channel (frequency);
388
395
389
396
// Radio configuration
390
- _radio->set_rx_config (MODEM_LORA, config->bandwidth , phy_dr, 1 , 0 , 8 ,
397
+ _radio->set_rx_config (MODEM_LORA, config->bandwidth , phy_dr, 1 , 0 ,
398
+ MBED_CONF_LORA_DOWNLINK_PREAMBLE_LENGTH,
391
399
config->window_timeout , false , 0 , false , 0 , 0 , true ,
392
400
config->is_rx_continuous );
393
401
_radio->unlock ();
@@ -429,7 +437,8 @@ bool LoRaPHYUS915::tx_config(tx_config_params_t* config, int8_t* tx_power,
429
437
430
438
_radio->set_channel (channels[config->channel ].frequency );
431
439
432
- _radio->set_tx_config (MODEM_LORA, phy_tx_power, 0 , bandwidth, phy_dr, 1 , 8 ,
440
+ _radio->set_tx_config (MODEM_LORA, phy_tx_power, 0 , bandwidth, phy_dr, 1 ,
441
+ MBED_CONF_LORA_UPLINK_PREAMBLE_LENGTH,
433
442
false , true , 0 , 0 , false , 3000 );
434
443
435
444
// Setup maximum payload lenght of the radio driver
@@ -478,20 +487,20 @@ uint8_t LoRaPHYUS915::link_ADR_request(adr_req_params_t* params,
478
487
if (adr_settings.ch_mask_ctrl == 6 ) {
479
488
480
489
// Enable all 125 kHz channels
481
- temp_channel_masks[ 0 ] = 0xFFFF ;
482
- temp_channel_masks[1 ] = 0xFFFF ;
483
- temp_channel_masks[ 2 ] = 0xFFFF ;
484
- temp_channel_masks[ 3 ] = 0xFFFF ;
490
+ for ( uint8_t i = 0 ; i < US915_CHANNEL_MASK_SIZE - 1 ; i++) {
491
+ temp_channel_masks[i ] = 0xFFFF ;
492
+ }
493
+
485
494
// Apply chMask to channels 64 to 71
486
495
temp_channel_masks[4 ] = adr_settings.channel_mask ;
487
496
488
497
} else if (adr_settings.ch_mask_ctrl == 7 ) {
489
498
490
499
// Disable all 125 kHz channels
491
- temp_channel_masks[ 0 ] = 0x0000 ;
492
- temp_channel_masks[1 ] = 0x0000 ;
493
- temp_channel_masks[ 2 ] = 0x0000 ;
494
- temp_channel_masks[ 3 ] = 0x0000 ;
500
+ for ( uint8_t i = 0 ; i < US915_CHANNEL_MASK_SIZE - 1 ; i++) {
501
+ temp_channel_masks[i ] = 0x0000 ;
502
+ }
503
+
495
504
// Apply chMask to channels 64 to 71
496
505
temp_channel_masks[4 ] = adr_settings.channel_mask ;
497
506
@@ -531,11 +540,9 @@ uint8_t LoRaPHYUS915::link_ADR_request(adr_req_params_t* params,
531
540
// Copy Mask
532
541
copy_channel_mask (channel_mask, temp_channel_masks, US915_CHANNEL_MASK_SIZE);
533
542
534
- current_channel_mask[0 ] &= channel_mask[0 ];
535
- current_channel_mask[1 ] &= channel_mask[1 ];
536
- current_channel_mask[2 ] &= channel_mask[2 ];
537
- current_channel_mask[3 ] &= channel_mask[3 ];
538
- current_channel_mask[4 ] = channel_mask[4 ];
543
+ for (uint8_t i = 0 ; i < US915_CHANNEL_MASK_SIZE; i++) {
544
+ current_channel_mask[i] &= channel_mask[i];
545
+ }
539
546
}
540
547
541
548
// Update status variables
@@ -553,7 +560,7 @@ uint8_t LoRaPHYUS915::accept_rx_param_setup_req(rx_param_setup_req_t* params)
553
560
uint32_t freq = params->frequency ;
554
561
555
562
// Verify radio frequency
556
- if ((_radio->check_rf_frequency ( freq ) == false )
563
+ if ((_radio->check_rf_frequency (freq) == false )
557
564
|| (freq < US915_FIRST_RX1_CHANNEL)
558
565
|| (freq > US915_LAST_RX1_CHANNEL)
559
566
|| (((freq - (uint32_t ) US915_FIRST_RX1_CHANNEL) % (uint32_t ) US915_STEPWIDTH_RX1_CHANNEL) != 0 )) {
@@ -588,9 +595,6 @@ int8_t LoRaPHYUS915::get_alternate_DR(uint8_t nb_trials)
588
595
{
589
596
int8_t datarate = 0 ;
590
597
591
- // Re-enable 500 kHz default channels
592
- channel_mask[4 ] = 0x00FF ;
593
-
594
598
if ((nb_trials & 0x01 ) == 0x01 ) {
595
599
datarate = DR_4;
596
600
} else {
@@ -616,11 +620,10 @@ lorawan_status_t LoRaPHYUS915::set_next_channel(channel_selection_params_t* para
616
620
copy_channel_mask (current_channel_mask, channel_mask, 4 );
617
621
}
618
622
619
- // Check other channels
620
- if (params->current_datarate >= DR_4) {
621
- if ((current_channel_mask[4 ] & 0x00FF ) == 0 ) {
622
- current_channel_mask[4 ] = channel_mask[4 ];
623
- }
623
+ // Update the 500 kHz channels in the running mask
624
+ if ((params->current_datarate >= DR_4)
625
+ && (current_channel_mask[4 ] & 0x00FF ) == 0 ) {
626
+ current_channel_mask[4 ] = channel_mask[4 ];
624
627
}
625
628
626
629
if (params->aggregate_timeoff <= _lora_time->get_elapsed_time (params->last_aggregate_tx_time )) {
@@ -641,9 +644,9 @@ lorawan_status_t LoRaPHYUS915::set_next_channel(channel_selection_params_t* para
641
644
642
645
if (nb_enabled_channels > 0 ) {
643
646
// We found a valid channel
644
- *channel = enabled_channels[get_random ( 0 , nb_enabled_channels - 1 )];
647
+ *channel = enabled_channels[get_random (0 , nb_enabled_channels - 1 )];
645
648
// Disable the channel in the mask
646
- disable_channel (current_channel_mask, *channel, US915_MAX_NB_CHANNELS - 8 );
649
+ disable_channel (current_channel_mask, *channel, US915_MAX_NB_CHANNELS);
647
650
648
651
*time = 0 ;
649
652
return LORAWAN_STATUS_OK;
0 commit comments