@@ -471,91 +471,19 @@ lora_mac_status_t LoRaWANStack::add_channels(const lora_channelplan_t &channel_p
471
471
return LORA_MAC_STATUS_NOT_INITIALIZED;
472
472
}
473
473
474
- ChannelParams_t mac_layer_ch_params;
475
- LoRaMacStatus_t status;
474
+ LoRaMacStatus_t status = _loramac.AddChannelPlan (channel_plan);
476
475
477
- GetPhyParams_t get_phy;
478
- PhyParam_t phy_param;
479
- uint8_t max_num_channels;
480
-
481
- // Check first how many channels the selected PHY layer supports
482
- get_phy.Attribute = PHY_MAX_NB_CHANNELS;
483
- phy_param = _lora_phy.get_phy_params (&get_phy);
484
- max_num_channels = (uint8_t ) phy_param.Value ;
485
-
486
- // check if user is setting more channels than supported
487
- if (channel_plan.nb_channels > max_num_channels) {
488
- return LORA_MAC_STATUS_PARAMETER_INVALID;
489
- }
490
-
491
- for (uint8_t i = 0 ; i < channel_plan.nb_channels ; i++) {
492
- mac_layer_ch_params.Band = channel_plan.channels [i].ch_param .band ;
493
- mac_layer_ch_params.DrRange .Fields .Max = channel_plan.channels [i].ch_param .dr_range .lora_mac_fields_s .max ;
494
- mac_layer_ch_params.DrRange .Fields .Min = channel_plan.channels [i].ch_param .dr_range .lora_mac_fields_s .min ;
495
- mac_layer_ch_params.DrRange .Value = channel_plan.channels [i].ch_param .dr_range .value ;
496
- mac_layer_ch_params.Frequency = channel_plan.channels [i].ch_param .frequency ;
497
- mac_layer_ch_params.Rx1Frequency =channel_plan.channels [i].ch_param .rx1_frequency ;
498
-
499
- status = _loramac.LoRaMacChannelAdd (channel_plan.channels [i].id , mac_layer_ch_params);
500
-
501
- if (status != LORAMAC_STATUS_OK) {
502
- return error_type_converter (status);
503
- }
504
- }
505
-
506
- return LORA_MAC_STATUS_OK;
476
+ return error_type_converter (status);
507
477
}
508
478
509
479
lora_mac_status_t LoRaWANStack::drop_channel_list ()
510
480
{
511
- if (_device_current_state == DEVICE_STATE_NOT_INITIALIZED )
512
- {
481
+ if (_device_current_state == DEVICE_STATE_NOT_INITIALIZED) {
513
482
tr_error (" Stack not initialized!" );
514
483
return LORA_MAC_STATUS_NOT_INITIALIZED;
515
484
}
516
485
517
- lora_mac_status_t status = LORA_MAC_STATUS_OK;
518
-
519
- GetPhyParams_t get_phy;
520
- PhyParam_t phy_param;
521
- uint8_t max_num_channels;
522
- uint16_t *channel_masks;
523
- uint16_t *default_channel_masks;
524
-
525
- // Check first how many channels the selected PHY layer supports
526
- get_phy.Attribute = PHY_MAX_NB_CHANNELS;
527
- phy_param = _lora_phy.get_phy_params (&get_phy);
528
- max_num_channels = (uint8_t ) phy_param.Value ;
529
-
530
- // Now check the channel mask for enabled channels
531
- get_phy.Attribute = PHY_CHANNELS_MASK;
532
- phy_param = _lora_phy.get_phy_params (&get_phy);
533
- channel_masks = phy_param.ChannelsMask ;
534
-
535
- // Now check the channel mask for default channels
536
- get_phy.Attribute = PHY_CHANNELS_DEFAULT_MASK;
537
- phy_param = _lora_phy.get_phy_params (&get_phy);
538
- default_channel_masks = phy_param.ChannelsMask ;
539
-
540
- for (uint8_t i = 0 ; i < max_num_channels; i++) {
541
- // skip any default channels
542
- if ((default_channel_masks[0 ] & (1U <<i)) != 0 ) {
543
- continue ;
544
- }
545
-
546
- // skip any channels which are not currently enabled
547
- if ((channel_masks[0 ] & (1U <<i)) == 0 ) {
548
- continue ;
549
- }
550
-
551
- status = error_type_converter (_loramac.LoRaMacChannelRemove (i));
552
-
553
- if (status != LORA_MAC_STATUS_OK) {
554
- return status;
555
- }
556
- }
557
-
558
- return status;
486
+ return error_type_converter (_loramac.RemoveChannelPlan ());
559
487
}
560
488
561
489
lora_mac_status_t LoRaWANStack::remove_a_channel (uint8_t channel_id)
@@ -566,38 +494,7 @@ lora_mac_status_t LoRaWANStack::remove_a_channel(uint8_t channel_id)
566
494
return LORA_MAC_STATUS_NOT_INITIALIZED;
567
495
}
568
496
569
- GetPhyParams_t get_phy;
570
- PhyParam_t phy_param;
571
- uint8_t max_num_channels;
572
- uint16_t *channel_masks;
573
-
574
- // Check first how many channels the selected PHY layer supports
575
- get_phy.Attribute = PHY_MAX_NB_CHANNELS;
576
- phy_param = _lora_phy.get_phy_params (&get_phy);
577
- max_num_channels = (uint8_t ) phy_param.Value ;
578
-
579
- // According to specification channel IDs start from 0 and last valid
580
- // channel ID is N-1 where N=MAX_NUM_CHANNELS.
581
- // So any ID which is larger or equal to the Max number of channels is invalid
582
- if (channel_id >= max_num_channels) {
583
- return LORA_MAC_STATUS_PARAMETER_INVALID;
584
- }
585
-
586
- // Now check the Default channel mask
587
- get_phy.Attribute = PHY_CHANNELS_DEFAULT_MASK;
588
- phy_param = _lora_phy.get_phy_params (&get_phy);
589
- channel_masks = phy_param.ChannelsMask ;
590
-
591
- // check if the channel ID give belongs to a default channel
592
- // Mostly the default channels are in the first mask if the region
593
- // have multiple channel masks for various sub-bands. So we check the first
594
- // mask only and return an error code if user sent a default channel id
595
- if ((channel_masks[0 ] & (1U << channel_id)) != 0 ) {
596
- tr_error (" Not allowed to remove a Default Channel." );
597
- return LORA_MAC_STATUS_PARAMETER_INVALID;
598
- }
599
-
600
- return error_type_converter (_loramac.LoRaMacChannelRemove (channel_id));
497
+ return error_type_converter (_loramac.RemoveSingleChannel (channel_id));
601
498
}
602
499
603
500
lora_mac_status_t LoRaWANStack::get_enabled_channels (lora_channelplan_t & channel_plan)
@@ -610,49 +507,7 @@ lora_mac_status_t LoRaWANStack::get_enabled_channels(lora_channelplan_t& channel
610
507
return LORA_MAC_STATUS_BUSY;
611
508
}
612
509
613
- lora_mac_mib_request_confirm_t mib_params;
614
-
615
- GetPhyParams_t get_phy;
616
- PhyParam_t phy_param;
617
- uint8_t max_num_channels;
618
- uint16_t *channel_masks;
619
- uint8_t count = 0 ;
620
-
621
- // Check first how many channels the selected PHY layer supports
622
- get_phy.Attribute = PHY_MAX_NB_CHANNELS;
623
- phy_param = _lora_phy.get_phy_params (&get_phy);
624
- max_num_channels = (uint8_t ) phy_param.Value ;
625
-
626
- // Now check the Default channel mask
627
- get_phy.Attribute = PHY_CHANNELS_MASK;
628
- phy_param = _lora_phy.get_phy_params (&get_phy);
629
- channel_masks = phy_param.ChannelsMask ;
630
-
631
- // Request Mib to get channels
632
- memset (&mib_params, 0 , sizeof (mib_params));
633
- mib_params.type = LORA_MIB_CHANNELS;
634
- mib_get_request (&mib_params);
635
-
636
- for (uint8_t i = 0 ; i < max_num_channels; i++) {
637
- // skip the channels which are not enabled
638
- if ((channel_masks[0 ] & (1U << i)) == 0 ) {
639
- continue ;
640
- }
641
-
642
- // otherwise add them to the channel_plan struct
643
- channel_plan.channels [count].id = i;
644
- channel_plan.channels [count].ch_param .frequency = mib_params.param .channel_list [i].frequency ;
645
- channel_plan.channels [count].ch_param .dr_range .value = mib_params.param .channel_list [i].dr_range .value ;
646
- channel_plan.channels [count].ch_param .dr_range .lora_mac_fields_s .min = mib_params.param .channel_list [i].dr_range .lora_mac_fields_s .min ;
647
- channel_plan.channels [count].ch_param .dr_range .lora_mac_fields_s .max = mib_params.param .channel_list [i].dr_range .lora_mac_fields_s .max ;
648
- channel_plan.channels [count].ch_param .band = mib_params.param .channel_list [i].band ;
649
- channel_plan.channels [count].ch_param .rx1_frequency = mib_params.param .channel_list [i].rx1_frequency ;
650
- count++;
651
- }
652
-
653
- channel_plan.nb_channels = count;
654
-
655
- return LORA_MAC_STATUS_OK;
510
+ return error_type_converter (_loramac.GetChannelPlan (channel_plan));
656
511
}
657
512
658
513
lora_mac_status_t LoRaWANStack::enable_adaptive_datarate (bool adr_enabled)
0 commit comments