Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(67)

Unified Diff: components/arc/bluetooth/arc_bluetooth_bridge.h

Issue 2394683007: Reland "components/arc: implement multi advertising" (Closed)
Patch Set: Created 4 years, 2 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
Index: components/arc/bluetooth/arc_bluetooth_bridge.h
diff --git a/components/arc/bluetooth/arc_bluetooth_bridge.h b/components/arc/bluetooth/arc_bluetooth_bridge.h
index c0ad8ffdb71f3ffdafd6350fc3e94b6afef2942b..de365c2e166e57b74a0cb422e41eb482f9a17333 100644
--- a/components/arc/bluetooth/arc_bluetooth_bridge.h
+++ b/components/arc/bluetooth/arc_bluetooth_bridge.h
@@ -21,6 +21,7 @@
#include "components/arc/instance_holder.h"
#include "device/bluetooth/bluetooth_adapter.h"
#include "device/bluetooth/bluetooth_adapter_factory.h"
+#include "device/bluetooth/bluetooth_advertisement.h"
#include "device/bluetooth/bluetooth_device.h"
#include "device/bluetooth/bluetooth_discovery_session.h"
#include "device/bluetooth/bluetooth_local_gatt_service.h"
@@ -273,6 +274,17 @@ class ArcBluetoothBridge
void RemoveSdpRecord(uint32_t service_handle,
const RemoveSdpRecordCallback& callback) override;
+ // Set up or disable multiple advertising.
+ void ReserveAdvertisementHandle(
+ const ReserveAdvertisementHandleCallback& callback) override;
+ void BroadcastAdvertisement(
+ int32_t adv_handle,
+ std::unique_ptr<device::BluetoothAdvertisement::Data> advertisement,
+ const BroadcastAdvertisementCallback& callback) override;
+ void ReleaseAdvertisementHandle(
+ int32_t adv_handle,
+ const ReleaseAdvertisementHandleCallback& callback) override;
+
// Chrome observer callbacks
void OnPoweredOn(
const base::Callback<void(mojom::BluetoothAdapterState)>& callback) const;
@@ -380,6 +392,42 @@ class ArcBluetoothBridge
void OnSetAdapterProperty(mojom::BluetoothStatus success,
mojom::BluetoothPropertyPtr property);
+ // Callbacks for managing advertisements registered from the instance.
+
+ // Called when we have an open slot in the advertisement map and want to
+ // register the advertisement given by |data| for handle |adv_handle|.
+ void OnReadyToRegisterAdvertisement(
+ const BroadcastAdvertisementCallback& callback,
+ int32_t adv_handle,
+ std::unique_ptr<device::BluetoothAdvertisement::Data> data);
+ // Called when we've successfully registered a new advertisement for
+ // handle |adv_handle|.
+ void OnRegisterAdvertisementDone(
+ const BroadcastAdvertisementCallback& callback,
+ int32_t adv_handle,
+ scoped_refptr<device::BluetoothAdvertisement> advertisement);
+ // Called when the attempt to register an advertisement for handle
+ // |adv_handle| has failed. |adv_handle| remains reserved, but no
+ // advertisement is associated with it.
+ void OnRegisterAdvertisementError(
+ const BroadcastAdvertisementCallback& callback,
+ int32_t adv_handle,
+ device::BluetoothAdvertisement::ErrorCode error_code);
+ // Both of the following are called after we've tried to unregister
+ // the advertisement for |adv_handle|. Either way, we will no
+ // longer be broadcasting this advertisement, so in either case, the
+ // handle can be released.
+ void OnUnregisterAdvertisementDone(
+ const ReleaseAdvertisementHandleCallback& callback,
+ int32_t adv_handle);
+ void OnUnregisterAdvertisementError(
+ const ReleaseAdvertisementHandleCallback& callback,
+ int32_t adv_handle,
+ device::BluetoothAdvertisement::ErrorCode error_code);
+ // Find the next free advertisement handle and put it in *adv_handle,
+ // or return false if the advertisement map is full.
+ bool GetAdvertisementHandle(int32_t* adv_handle);
+
bool CalledOnValidThread();
mojo::Binding<mojom::BluetoothHost> binding_;
@@ -411,6 +459,21 @@ class ArcBluetoothBridge
// Timer to turn adapter discoverable off.
base::OneShotTimer discoverable_off_timer_;
+ // Holds advertising data registered by the instance.
+ //
+ // When a handle is reserved, an entry is placed into the advertisements_
+ // map. This entry is not yet associated with a device::BluetoothAdvertisement
+ // because the instance hasn't sent us any advertising data yet, so its
+ // mapped value is nullptr until that happens. Thus we have three states for a
+ // handle:
+ // * unmapped -> free
+ // * mapped to nullptr -> reserved, awaiting data
+ // * mapped to a device::BluetoothAdvertisement -> in use, and the mapped
+ // BluetoothAdvertisement is currently registered with the adapter.
+ enum { kMaxAdvertisements = 5 };
+ std::map<int32_t, scoped_refptr<device::BluetoothAdvertisement>>
+ advertisements_;
+
base::ThreadChecker thread_checker_;
// WeakPtrFactory to use for callbacks.
« no previous file with comments | « no previous file | components/arc/bluetooth/arc_bluetooth_bridge.cc » ('j') | components/arc/bluetooth/bluetooth_struct_traits.cc » ('J')

Powered by Google App Engine
This is Rietveld 408576698