@@ -220,6 +220,7 @@ static const uint8_t max_payload_AU915[] = { 51, 51, 51, 115, 242, 242,
220
220
static const uint8_t max_payload_with_repeater_AU915[] = { 51 , 51 , 51 , 115 ,
221
221
222 , 222 , 222 , 0 , 33 , 109 , 222 , 222 , 222 , 222 , 0 , 0 };
222
222
223
+ static const uint16_t fsb_mask[] = MBED_CONF_LORA_FSB_MASK;
223
224
224
225
LoRaPHYAU915::LoRaPHYAU915 ()
225
226
{
@@ -244,11 +245,17 @@ LoRaPHYAU915::LoRaPHYAU915()
244
245
// All channels are default channels here
245
246
// Join request needs to alternate between 125 KHz and 500 KHz channels
246
247
// randomly.
247
- default_channel_mask[0 ] = 0xFFFF ;
248
- default_channel_mask[1 ] = 0xFFFF ;
249
- default_channel_mask[2 ] = 0xFFFF ;
250
- default_channel_mask[3 ] = 0xFFFF ;
251
- default_channel_mask[4 ] = 0x00FF ;
248
+ // ChannelsMask
249
+ for (uint8_t i = 0 ; i < AU915_MAX_NB_CHANNELS; i++) {
250
+ if (i == (AU915_MAX_NB_CHANNELS - 1 )) {
251
+ // 64 - 71, 500 kHz channels will get enabled
252
+ default_channel_mask[i] = 0x00FF & fsb_mask[i];
253
+ continue ;
254
+ }
255
+
256
+ // 0 - 63 125 kHz channels will get enabled
257
+ default_channel_mask[i] = 0xFFFF & fsb_mask[i];
258
+ }
252
259
253
260
memset (channel_mask, 0 , sizeof (channel_mask));
254
261
memset (current_channel_mask, 0 , sizeof (current_channel_mask));
@@ -445,18 +452,18 @@ uint8_t LoRaPHYAU915::link_ADR_request(adr_req_params_t* params,
445
452
446
453
if (adr_settings.ch_mask_ctrl == 6 ) {
447
454
// Enable all 125 kHz channels
448
- temp_channel_masks[ 0 ] = 0xFFFF ;
449
- temp_channel_masks[1 ] = 0xFFFF ;
450
- temp_channel_masks[ 2 ] = 0xFFFF ;
451
- temp_channel_masks[ 3 ] = 0xFFFF ;
455
+ for ( uint8_t i = 0 ; i < AU915_CHANNEL_MASK_SIZE - 1 ; i++) {
456
+ temp_channel_masks[i ] = 0xFFFF ;
457
+ }
458
+
452
459
// Apply chMask to channels 64 to 71
453
460
temp_channel_masks[4 ] = adr_settings.channel_mask ;
454
461
} else if (adr_settings.ch_mask_ctrl == 7 ) {
455
462
// Disable all 125 kHz channels
456
- temp_channel_masks[ 0 ] = 0x0000 ;
457
- temp_channel_masks[1 ] = 0x0000 ;
458
- temp_channel_masks[ 2 ] = 0x0000 ;
459
- temp_channel_masks[ 3 ] = 0x0000 ;
463
+ for ( uint8_t i = 0 ; i < AU915_CHANNEL_MASK_SIZE - 1 ; i++) {
464
+ temp_channel_masks[i ] = 0x0000 ;
465
+ }
466
+
460
467
// Apply chMask to channels 64 to 71
461
468
temp_channel_masks[4 ] = adr_settings.channel_mask ;
462
469
} else if (adr_settings.ch_mask_ctrl == 5 ) {
@@ -493,11 +500,9 @@ uint8_t LoRaPHYAU915::link_ADR_request(adr_req_params_t* params,
493
500
// Copy Mask
494
501
copy_channel_mask (channel_mask, temp_channel_masks, AU915_CHANNEL_MASK_SIZE);
495
502
496
- current_channel_mask[0 ] &= channel_mask[0 ];
497
- current_channel_mask[1 ] &= channel_mask[1 ];
498
- current_channel_mask[2 ] &= channel_mask[2 ];
499
- current_channel_mask[3 ] &= channel_mask[3 ];
500
- current_channel_mask[4 ] = channel_mask[4 ];
503
+ for (uint8_t i = 0 ; i < AU915_CHANNEL_MASK_SIZE; i++) {
504
+ current_channel_mask[i] &= channel_mask[i];
505
+ }
501
506
}
502
507
503
508
// Update status variables
@@ -548,9 +553,6 @@ int8_t LoRaPHYAU915::get_alternate_DR(uint8_t nb_trials)
548
553
{
549
554
int8_t datarate = 0 ;
550
555
551
- // Re-enable 500 kHz default channels
552
- channel_mask[4 ] = 0x00FF ;
553
-
554
556
if ((nb_trials & 0x01 ) == 0x01 ) {
555
557
datarate = DR_6;
556
558
} else {
@@ -576,11 +578,10 @@ lorawan_status_t LoRaPHYAU915::set_next_channel(channel_selection_params_t* next
576
578
}
577
579
578
580
// Check other channels
579
- if (next_chan_params->current_datarate >= DR_6) {
580
- if ((current_channel_mask[4 ] & 0x00FF ) == 0 ) {
581
- // fall back to 500 kHz default channels
582
- current_channel_mask[4 ] = channel_mask[4 ];
583
- }
581
+ if ((next_chan_params->current_datarate >= DR_6)
582
+ && (current_channel_mask[4 ] & 0x00FF ) == 0 ) {
583
+ // fall back to 500 kHz default channels
584
+ current_channel_mask[4 ] = channel_mask[4 ];
584
585
}
585
586
586
587
if (next_chan_params->aggregate_timeoff <= _lora_time->get_elapsed_time (next_chan_params->last_aggregate_tx_time )) {
@@ -605,8 +606,7 @@ lorawan_status_t LoRaPHYAU915::set_next_channel(channel_selection_params_t* next
605
606
// We found a valid channel
606
607
*channel = enabled_channels[get_random (0 , nb_enabled_channels - 1 )];
607
608
// Disable the channel in the mask
608
- disable_channel (current_channel_mask, *channel,
609
- AU915_MAX_NB_CHANNELS - 8 );
609
+ disable_channel (current_channel_mask, *channel, AU915_MAX_NB_CHANNELS);
610
610
611
611
*time = 0 ;
612
612
return LORAWAN_STATUS_OK;
0 commit comments