diff options
| -rw-r--r-- | system/gd/hci/le_advertising_manager.cc | 16 |
1 files changed, 15 insertions, 1 deletions
diff --git a/system/gd/hci/le_advertising_manager.cc b/system/gd/hci/le_advertising_manager.cc index fb868c992b..ab8c46c4d7 100644 --- a/system/gd/hci/le_advertising_manager.cc +++ b/system/gd/hci/le_advertising_manager.cc @@ -13,15 +13,17 @@ * See the License for the specific language governing permissions and * limitations under the License. */ +#include "hci/le_advertising_manager.h" + #include <memory> #include <mutex> +#include "common/init_flags.h" #include "hci/acl_manager.h" #include "hci/controller.h" #include "hci/hci_layer.h" #include "hci/hci_packets.h" #include "hci/le_advertising_interface.h" -#include "hci/le_advertising_manager.h" #include "module.h" #include "os/handler.h" #include "os/log.h" @@ -56,6 +58,7 @@ struct Advertiser { uint8_t max_extended_advertising_events; bool started = false; bool connectable = false; + bool directed = false; std::unique_ptr<os::Alarm> address_rotation_alarm; }; @@ -168,6 +171,7 @@ struct LeAdvertisingManager::impl : public bluetooth::hci::LeAddressManagerCallb LOG_INFO("Dropping invalid advertising event"); return; } + LOG_VERBOSE("Received LE Advertising Set Terminated with status %s", ErrorCodeText(event_view.GetStatus()).c_str()); uint8_t advertiser_id = event_view.GetAdvertisingHandle(); @@ -181,6 +185,15 @@ struct LeAdvertisingManager::impl : public bluetooth::hci::LeAddressManagerCallb acl_manager_->OnAdvertisingSetTerminated( event_view.GetStatus(), event_view.GetConnectionHandle(), advertiser_address); + + if (!advertising_sets_[advertiser_id].directed) { + // TODO calculate remaining duration and advertising events + if (advertising_sets_[advertiser_id].duration == 0 && + advertising_sets_[advertiser_id].max_extended_advertising_events == 0) { + LOG_INFO("Reenable advertising"); + enable_advertiser(advertiser_id, true, 0, 0); + } + } } AdvertiserId allocate_advertiser() { @@ -460,6 +473,7 @@ struct LeAdvertisingManager::impl : public bluetooth::hci::LeAddressManagerCallb void set_parameters(AdvertiserId advertiser_id, ExtendedAdvertisingConfig config) { advertising_sets_[advertiser_id].connectable = config.connectable; advertising_sets_[advertiser_id].tx_power = config.tx_power; + advertising_sets_[advertiser_id].directed = config.directed; switch (advertising_api_type_) { case (AdvertisingApiType::LEGACY): { |
