Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 57a80713 authored by Treehugger Robot's avatar Treehugger Robot Committed by Automerger Merge Worker
Browse files

Merge "GD: Reenable advertising when terminated" am: ee9f5c59

Original change: https://android-review.googlesource.com/c/platform/packages/modules/Bluetooth/+/1893466

Change-Id: Ic7e26bf3956ff10d36ae70c177b3ac600bafffea
parents 27762ac8 ee9f5c59
Loading
Loading
Loading
Loading
+15 −1
Original line number Diff line number Diff line
@@ -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): {