|
12 | 12 | #include <zephyr/console/console.h> |
13 | 13 | #include <zephyr/bluetooth/bluetooth.h> |
14 | 14 | #include <zephyr/bluetooth/iso.h> |
| 15 | +#include <zephyr/kernel.h> |
15 | 16 | #include <zephyr/sys/byteorder.h> |
16 | 17 |
|
17 | 18 | #include <zephyr/logging/log.h> |
@@ -86,7 +87,7 @@ static void iso_disconnected(struct bt_iso_chan *chan, uint8_t reason) |
86 | 87 | chan, reason); |
87 | 88 |
|
88 | 89 | connected_bis--; |
89 | | - if (connected_bis == big_create_param.num_bis) { |
| 90 | + if (connected_bis == 0) { |
90 | 91 | k_sem_give(&sem_big_term); |
91 | 92 | } |
92 | 93 | } |
@@ -681,7 +682,7 @@ static int create_big(struct bt_le_ext_adv **adv, struct bt_iso_big **big) |
681 | 682 | err = bt_le_ext_adv_set_data(*adv, ad, ARRAY_SIZE(ad), NULL, 0); |
682 | 683 | if (err) { |
683 | 684 | LOG_ERR("Failed to set advertising data (err %d)", err); |
684 | | - return 0; |
| 685 | + return err; |
685 | 686 | } |
686 | 687 |
|
687 | 688 | LOG_INF("Setting Periodic Advertising parameters"); |
@@ -739,32 +740,41 @@ static int delete_big(struct bt_le_ext_adv **adv, struct bt_iso_big **big) |
739 | 740 | { |
740 | 741 | int err; |
741 | 742 |
|
742 | | - err = bt_iso_big_terminate(*big); |
743 | | - if (err != 0) { |
744 | | - LOG_ERR("Failed to terminate BIG (err %d)", err); |
745 | | - return err; |
| 743 | + if (*big != NULL) { |
| 744 | + err = bt_iso_big_terminate(*big); |
| 745 | + if (err != 0) { |
| 746 | + LOG_ERR("Failed to terminate BIG (err %d)", err); |
| 747 | + return err; |
| 748 | + } |
| 749 | + err = k_sem_take(&sem_big_term, K_FOREVER); |
| 750 | + if (err != 0) { |
| 751 | + LOG_ERR("failed to take sem_big_term (err %d)", err); |
| 752 | + return err; |
| 753 | + } |
| 754 | + *big = NULL; |
746 | 755 | } |
747 | | - *big = NULL; |
748 | 756 |
|
749 | | - err = bt_le_per_adv_stop(*adv); |
750 | | - if (err != 0) { |
751 | | - LOG_ERR("Failed to stop periodic advertising (err %d)", err); |
752 | | - return err; |
753 | | - } |
| 757 | + if (*adv != NULL) { |
| 758 | + err = bt_le_per_adv_stop(*adv); |
| 759 | + if (err != 0) { |
| 760 | + LOG_ERR("Failed to stop periodic advertising (err %d)", err); |
| 761 | + return err; |
| 762 | + } |
754 | 763 |
|
755 | | - err = bt_le_ext_adv_stop(*adv); |
756 | | - if (err != 0) { |
757 | | - LOG_ERR("Failed to stop advertising (err %d)", err); |
758 | | - return err; |
759 | | - } |
| 764 | + err = bt_le_ext_adv_stop(*adv); |
| 765 | + if (err != 0) { |
| 766 | + LOG_ERR("Failed to stop advertising (err %d)", err); |
| 767 | + return err; |
| 768 | + } |
760 | 769 |
|
761 | | - err = bt_le_ext_adv_delete(*adv); |
762 | | - if (err != 0) { |
763 | | - LOG_ERR("Failed to delete advertiser (err %d)", err); |
764 | | - return err; |
765 | | - } |
| 770 | + err = bt_le_ext_adv_delete(*adv); |
| 771 | + if (err != 0) { |
| 772 | + LOG_ERR("Failed to delete advertiser (err %d)", err); |
| 773 | + return err; |
| 774 | + } |
766 | 775 |
|
767 | | - *adv = NULL; |
| 776 | + *adv = NULL; |
| 777 | + } |
768 | 778 |
|
769 | 779 | return 0; |
770 | 780 | } |
@@ -810,7 +820,15 @@ int test_run_broadcaster(void) |
810 | 820 |
|
811 | 821 | err = create_big(&adv, &big); |
812 | 822 | if (err) { |
| 823 | + int del_err; |
| 824 | + |
813 | 825 | LOG_ERR("Could not create BIG: %d", err); |
| 826 | + |
| 827 | + del_err = delete_big(&adv, &big); |
| 828 | + if (del_err) { |
| 829 | + LOG_ERR("Could not delete BIG: %d", del_err); |
| 830 | + } |
| 831 | + |
814 | 832 | return err; |
815 | 833 | } |
816 | 834 |
|
|
0 commit comments