• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 /*
2  * Copyright (C) 2016 The Android Open Source Project
3  *
4  * Licensed under the Apache License, Version 2.0 (the "License");
5  * you may not use this file except in compliance with the License.
6  * You may obtain a copy of the License at
7  *
8  *      http://www.apache.org/licenses/LICENSE-2.0
9  *
10  * Unless required by applicable law or agreed to in writing, software
11  * distributed under the License is distributed on an "AS IS" BASIS,
12  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13  * See the License for the specific language governing permissions and
14  * limitations under the License.
15  */
16 
17 #ifndef ANDROID_INCLUDE_BLE_ADVERTISER_H
18 #define ANDROID_INCLUDE_BLE_ADVERTISER_H
19 
20 #include <base/functional/callback_forward.h>
21 #include <raw_address.h>
22 #include <stdint.h>
23 
24 #include <vector>
25 
26 #include "bt_common_types.h"
27 #include "bt_gatt_types.h"
28 
29 struct AdvertiseParameters {
30   uint16_t advertising_event_properties;
31   uint32_t min_interval;
32   uint32_t max_interval;
33   uint8_t channel_map;
34   int8_t tx_power;
35   uint8_t primary_advertising_phy;
36   uint8_t secondary_advertising_phy;
37   uint8_t scan_request_notification_enable;
38   int8_t own_address_type;
39 };
40 
41 struct PeriodicAdvertisingParameters {
42   bool enable;
43   bool include_adi;
44   uint16_t min_interval;
45   uint16_t max_interval;
46   uint16_t periodic_advertising_properties;
47 };
48 
49 /**
50  * LE Advertising related callbacks invoked from from the Bluetooth native stack
51  * All callbacks are invoked on the JNI thread
52  */
53 class AdvertisingCallbacks {
54  public:
55   virtual ~AdvertisingCallbacks() = default;
56   virtual void OnAdvertisingSetStarted(int reg_id, uint8_t advertiser_id,
57                                        int8_t tx_power, uint8_t status) = 0;
58   virtual void OnAdvertisingEnabled(uint8_t advertiser_id, bool enable,
59                                     uint8_t status) = 0;
60   virtual void OnAdvertisingDataSet(uint8_t advertiser_id, uint8_t status) = 0;
61   virtual void OnScanResponseDataSet(uint8_t advertiser_id, uint8_t status) = 0;
62   virtual void OnAdvertisingParametersUpdated(uint8_t advertiser_id,
63                                               int8_t tx_power,
64                                               uint8_t status) = 0;
65   virtual void OnPeriodicAdvertisingParametersUpdated(uint8_t advertiser_id,
66                                                       uint8_t status) = 0;
67   virtual void OnPeriodicAdvertisingDataSet(uint8_t advertiser_id,
68                                             uint8_t status) = 0;
69   virtual void OnPeriodicAdvertisingEnabled(uint8_t advertiser_id, bool enable,
70                                             uint8_t status) = 0;
71   virtual void OnOwnAddressRead(uint8_t advertiser_id, uint8_t address_type,
72                                 RawAddress address) = 0;
73 };
74 
75 class BleAdvertiserInterface {
76  public:
77   virtual ~BleAdvertiserInterface() = default;
78 
79   /** Callback invoked when multi-adv operation has completed */
80   using StatusCallback = base::Callback<void(uint8_t /* status */)>;
81   using IdStatusCallback =
82       base::Callback<void(uint8_t /* advertiser_id */, uint8_t /* status */)>;
83   using IdTxPowerStatusCallback =
84       base::Callback<void(uint8_t /* advertiser_id */, int8_t /* tx_power */,
85                           uint8_t /* status */)>;
86   using ParametersCallback =
87       base::Callback<void(uint8_t /* status */, int8_t /* tx_power */)>;
88 
89   /** Registers an advertiser with the stack */
90   virtual void RegisterAdvertiser(IdStatusCallback) = 0;
91 
92   using GetAddressCallback =
93       base::Callback<void(uint8_t /* address_type*/, RawAddress /*address*/)>;
94   virtual void GetOwnAddress(uint8_t advertiser_id, GetAddressCallback cb) = 0;
95 
96   /* Set the parameters as per spec, user manual specified values */
97   virtual void SetParameters(uint8_t advertiser_id, AdvertiseParameters params,
98                              ParametersCallback cb) = 0;
99 
100   /* Setup the data */
101   virtual void SetData(int advertiser_id, bool set_scan_rsp,
102                        std::vector<uint8_t> data, StatusCallback cb) = 0;
103 
104   /* Enable the advertising instance */
105   virtual void Enable(uint8_t advertiser_id, bool enable, StatusCallback cb,
106                       uint16_t duration, uint8_t maxExtAdvEvents,
107                       StatusCallback timeout_cb) = 0;
108 
109   /*  Unregisters an advertiser */
110   virtual void Unregister(uint8_t advertiser_id) = 0;
111 
112   virtual void StartAdvertising(uint8_t advertiser_id, StatusCallback cb,
113                                 AdvertiseParameters params,
114                                 std::vector<uint8_t> advertise_data,
115                                 std::vector<uint8_t> scan_response_data,
116                                 int timeout_s, StatusCallback timeout_cb) = 0;
117 
118   /** Start the advertising set. This include registering, setting all
119    * parameters and data, and enabling it. |register_cb| is called when the set
120    * is advertising. |timeout_cb| is called when the timeout_s have passed.
121    * |reg_id| is the callback id assigned from upper layer
122    */
123   virtual void StartAdvertisingSet(
124       int reg_id, IdTxPowerStatusCallback register_cb,
125       AdvertiseParameters params, std::vector<uint8_t> advertise_data,
126       std::vector<uint8_t> scan_response_data,
127       PeriodicAdvertisingParameters periodic_params,
128       std::vector<uint8_t> periodic_data, uint16_t duration,
129       uint8_t maxExtAdvEvents, IdStatusCallback timeout_cb) = 0;
130 
131   virtual void SetPeriodicAdvertisingParameters(
132       int advertiser_id, PeriodicAdvertisingParameters parameters,
133       StatusCallback cb) = 0;
134 
135   virtual void SetPeriodicAdvertisingData(int advertiser_id,
136                                           std::vector<uint8_t> data,
137                                           StatusCallback cb) = 0;
138 
139   virtual void SetPeriodicAdvertisingEnable(int advertiser_id, bool enable,
140                                             bool include_adi,
141                                             StatusCallback cb) = 0;
142   virtual void RegisterCallbacks(AdvertisingCallbacks* callbacks) = 0;
143 };
144 
145 #endif /* ANDROID_INCLUDE_BLE_ADVERTISER_H */
146