bluetooth_low_energy_peripheral_manager_delegate.mm 2.2 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071
  1. // Copyright 2018 The Chromium Authors. All rights reserved.
  2. // Use of this source code is governed by a BSD-style license that can be
  3. // found in the LICENSE file.
  4. #include "device/bluetooth/bluetooth_low_energy_peripheral_manager_delegate.h"
  5. #include <memory>
  6. #include "base/memory/raw_ptr.h"
  7. #include "device/bluetooth/bluetooth_adapter_mac.h"
  8. namespace device {
  9. // This class exists to bridge between the Objective-C
  10. // CBPeripheralManagerDelegate class and our BluetoothAdapterMac classes.
  11. class BluetoothLowEnergyPeripheralManagerBridge {
  12. public:
  13. BluetoothLowEnergyPeripheralManagerBridge(
  14. BluetoothLowEnergyAdvertisementManagerMac* advertisement_manager,
  15. BluetoothAdapterMac* adapter)
  16. : advertisement_manager_(advertisement_manager), adapter_(adapter) {}
  17. ~BluetoothLowEnergyPeripheralManagerBridge() {}
  18. void UpdatedState() {
  19. advertisement_manager_->OnPeripheralManagerStateChanged();
  20. }
  21. void DidStartAdvertising(NSError* error) {
  22. advertisement_manager_->DidStartAdvertising(error);
  23. }
  24. CBPeripheralManager* GetPeripheralManager() {
  25. return adapter_->GetPeripheralManager();
  26. }
  27. private:
  28. raw_ptr<BluetoothLowEnergyAdvertisementManagerMac> advertisement_manager_;
  29. raw_ptr<BluetoothAdapterMac> adapter_;
  30. };
  31. } // namespace device
  32. // Delegate for CBPeripheralManager, which forwards CoreBluetooth callbacks to
  33. // their appropriate handler.
  34. @implementation BluetoothLowEnergyPeripheralManagerDelegate {
  35. std::unique_ptr<device::BluetoothLowEnergyPeripheralManagerBridge> _bridge;
  36. }
  37. - (instancetype)
  38. initWithAdvertisementManager:
  39. (device::BluetoothLowEnergyAdvertisementManagerMac*)advertisementManager
  40. andAdapter:(device::BluetoothAdapterMac*)adapter {
  41. if ((self = [super init])) {
  42. _bridge =
  43. std::make_unique<device::BluetoothLowEnergyPeripheralManagerBridge>(
  44. advertisementManager, adapter);
  45. }
  46. return self;
  47. }
  48. - (void)peripheralManagerDidUpdateState:(CBPeripheralManager*)peripheral {
  49. _bridge->UpdatedState();
  50. }
  51. - (void)peripheralManagerDidStartAdvertising:(CBPeripheralManager*)peripheral
  52. error:(NSError*)error {
  53. _bridge->DidStartAdvertising(error);
  54. }
  55. @end