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

Commit ee9f5c59 authored by Treehugger Robot's avatar Treehugger Robot Committed by Gerrit Code Review
Browse files

Merge "GD: Reenable advertising when terminated"

parents bddb986a 985c11f7
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): {