123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168 |
- /******************************************************************************
- *
- * Copyright 2016 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at:
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- *
- ******************************************************************************/
- #ifndef BLE_ADVERTISER_H
- #define BLE_ADVERTISER_H
- #include <base/bind.h>
- #include <base/memory/weak_ptr.h>
- #include <vector>
- #include "btm_ble_api.h"
- #define BTM_BLE_MULTI_ADV_SUCCESS 0
- #define BTM_BLE_MULTI_ADV_FAILURE 1
- #define ADVERTISE_FAILED_TOO_MANY_ADVERTISERS 0x02
- using MultiAdvCb = base::Callback<void(uint8_t /* status */)>;
- using ParametersCb =
- base::Callback<void(uint8_t /* status */, int8_t /* tx_power */)>;
- // methods we must have defined
- void btm_ble_update_dmt_flag_bits(uint8_t* flag_value,
- const uint16_t connect_mode,
- const uint16_t disc_mode);
- void btm_acl_update_conn_addr(uint16_t conn_handle, const RawAddress& address);
- // methods we expose to c code:
- void btm_ble_multi_adv_cleanup(void);
- void btm_ble_multi_adv_init();
- typedef struct {
- uint16_t advertising_event_properties;
- uint32_t adv_int_min;
- uint32_t adv_int_max;
- tBTM_BLE_ADV_CHNL_MAP channel_map;
- tBTM_BLE_AFP adv_filter_policy;
- int8_t tx_power;
- uint8_t primary_advertising_phy;
- uint8_t secondary_advertising_phy;
- uint8_t scan_request_notification_enable;
- } tBTM_BLE_ADV_PARAMS;
- typedef struct {
- uint8_t enable;
- uint16_t min_interval;
- uint16_t max_interval;
- uint16_t periodic_advertising_properties;
- } tBLE_PERIODIC_ADV_PARAMS;
- class BleAdvertiserHciInterface;
- class BleAdvertisingManager {
- public:
- virtual ~BleAdvertisingManager() = default;
- static const uint16_t advertising_prop_legacy_connectable = 0x0011;
- static const uint16_t advertising_prop_legacy_non_connectable = 0x0010;
- static void Initialize(BleAdvertiserHciInterface* interface);
- static void CleanUp();
- static bool IsInitialized();
- static base::WeakPtr<BleAdvertisingManager> Get();
- /* Register an advertising instance, status will be returned in |cb|
- * callback, with assigned id, if operation succeeds. Instance is freed when
- * advertising is disabled by calling |BTM_BleDisableAdvInstance|, or when any
- * of the operations fails.
- * The instance will have data set to |advertise_data|, scan response set to
- * |scan_response_data|, and will be enabled.
- */
- virtual void StartAdvertising(uint8_t advertiser_id, MultiAdvCb cb,
- tBTM_BLE_ADV_PARAMS* params,
- std::vector<uint8_t> advertise_data,
- std::vector<uint8_t> scan_response_data,
- int duration, MultiAdvCb timeout_cb) = 0;
- /* Register an advertising instance, status will be returned in |cb|
- * callback, with assigned id, if operation succeeds. Instance is freed when
- * advertising is disabled by calling |BTM_BleDisableAdvInstance|, or when any
- * of the operations fails.
- * The instance will have data set to |advertise_data|, scan response set to
- * |scan_response_data|, periodic data set to |periodic_data| and will be
- * enabled.
- */
- virtual void StartAdvertisingSet(
- base::Callback<void(uint8_t /* inst_id */, int8_t /* tx_power */,
- uint8_t /* status */)>
- cb,
- tBTM_BLE_ADV_PARAMS* params, std::vector<uint8_t> advertise_data,
- std::vector<uint8_t> scan_response_data,
- tBLE_PERIODIC_ADV_PARAMS* periodic_params,
- std::vector<uint8_t> periodic_data, uint16_t duration,
- uint8_t maxExtAdvEvents,
- base::Callback<void(uint8_t /* inst_id */, uint8_t /* status */)>
- timeout_cb) = 0;
- /* Register an advertising instance, status will be returned in |cb|
- * callback, with assigned id, if operation succeeds. Instance is freed when
- * advertising is disabled by calling |BTM_BleDisableAdvInstance|, or when any
- * of the operations fails. */
- virtual void RegisterAdvertiser(
- base::Callback<void(uint8_t /* inst_id */, uint8_t /* status */)>) = 0;
- /* This function enables/disables an advertising instance. Operation status is
- * returned in |cb| */
- virtual void Enable(uint8_t inst_id, bool enable, MultiAdvCb cb,
- uint16_t duration, uint8_t maxExtAdvEvents,
- MultiAdvCb timeout_cb) = 0;
- /* This function update a Multi-ADV instance with the specififed adv
- * parameters. */
- virtual void SetParameters(uint8_t inst_id, tBTM_BLE_ADV_PARAMS* p_params,
- ParametersCb cb) = 0;
- /* This function configure a Multi-ADV instance with the specified adv data or
- * scan response data.*/
- virtual void SetData(uint8_t inst_id, bool is_scan_rsp,
- std::vector<uint8_t> data, MultiAdvCb cb) = 0;
- /* This function configure instance with the specified periodic parameters */
- virtual void SetPeriodicAdvertisingParameters(
- uint8_t inst_id, tBLE_PERIODIC_ADV_PARAMS* params, MultiAdvCb cb) = 0;
- /* This function configure instance with the specified periodic data */
- virtual void SetPeriodicAdvertisingData(uint8_t inst_id,
- std::vector<uint8_t> data,
- MultiAdvCb cb) = 0;
- /* This function enables/disables periodic advertising on selected instance */
- virtual void SetPeriodicAdvertisingEnable(uint8_t inst_id, uint8_t enable,
- MultiAdvCb cb) = 0;
- /* This function disable a Multi-ADV instance */
- virtual void Unregister(uint8_t inst_id) = 0;
- /* When resolving list is used, we need to suspend and resume all advertising
- * instances for the time of operation. Suspend() saves current state,
- * Resume() resumes the advertising.
- */
- virtual void Suspend() = 0;
- virtual void Resume() = 0;
- /* This method is a member of BleAdvertiserHciInterface, and is exposed here
- * just for tests. It should never be called from upper layers*/
- virtual void OnAdvertisingSetTerminated(
- uint8_t status, uint8_t advertising_handle, uint16_t connection_handle,
- uint8_t num_completed_extended_adv_events) = 0;
- using GetAddressCallback =
- base::Callback<void(uint8_t /* address_type*/, RawAddress /*address*/)>;
- virtual void GetOwnAddress(uint8_t inst_id, GetAddressCallback cb) = 0;
- };
- #endif // BLE_ADVERTISER_H
|