You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
231 lines
9.8 KiB
231 lines
9.8 KiB
/*
|
|
* Copyright 2019 HIMSA II K/S - www.himsa.com.
|
|
* Represented by EHIMA - www.ehima.com
|
|
*
|
|
* 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_SCANNER_HCI_INTERFACE_H
|
|
#define BLE_SCANNER_HCI_INTERFACE_H
|
|
|
|
#include <base/callback.h>
|
|
|
|
#include <vector>
|
|
|
|
#include "stack/include/bt_types.h"
|
|
|
|
class BleScannerHciInterface {
|
|
public:
|
|
using status_cb = base::Callback<void(uint8_t /* status */)>;
|
|
using list_size_cb = base::Callback<void(int8_t /* list_size */)>;
|
|
using handle_cb =
|
|
base::Callback<void(uint8_t /* status */, uint16_t /* adv_handle */)>;
|
|
|
|
static void Initialize();
|
|
static BleScannerHciInterface* Get();
|
|
static void CleanUp();
|
|
|
|
virtual ~BleScannerHciInterface() = default;
|
|
|
|
class ScanEventObserver {
|
|
public:
|
|
virtual ~ScanEventObserver() = default;
|
|
virtual void OnPeriodicScanResult(uint16_t sync_handle, uint8_t tx_power,
|
|
int8_t rssi, uint8_t cte_type,
|
|
uint8_t pkt_data_status,
|
|
uint8_t pkt_data_len,
|
|
const uint8_t* pkt_data) = 0;
|
|
virtual void OnPeriodicScanEstablished(
|
|
uint8_t status, uint16_t sync_handle, uint8_t set_id,
|
|
uint8_t adv_addr_type, const RawAddress& adv_addr, uint8_t adv_phy,
|
|
uint16_t adv_interval, uint8_t adv_clock_accuracy) = 0;
|
|
virtual void OnPeriodicScanLost(uint16_t sync_handle) = 0;
|
|
};
|
|
|
|
virtual void SetScanEventObserver(ScanEventObserver* observer) = 0;
|
|
|
|
/**
|
|
* Used to synchronize with a periodic advertising train from an advertiser
|
|
* and begin receiving periodic advertising packets.
|
|
*
|
|
* @param options bit 0: whether to use advertiser list, adv_sid,
|
|
* adv_addr_type and adv_addr parameters are being used otherwise, bit 1:
|
|
* whether reporting is initially disabled, all other bits: Reserved for
|
|
* future use
|
|
* @param adv_sid advertising set ID
|
|
* @param adv_addr_type advertiser device address type
|
|
* @param adv_addr advertiser device address
|
|
* @param skip_num the maximum number of periodic advertising events that can
|
|
* be skipped after a successful receive. Range: 0x0000 to 0x01F3.
|
|
* @param sync_timeout synchronization timeout for the periodic advertising
|
|
* train, Range: 0x000A to 0x4000, Time = N*10 ms, Range: 100 ms to 163.84s
|
|
* @param sync_cte_type bit 0: do not sync to packets with an AoA Constant
|
|
* Tone Extension, bit 1: do not sync to packets with an AoD Constant Tone
|
|
* Extension with 1 μs slots, bit 2: do not sync to packets with an AoD
|
|
* Constant Tone Extension with 2 μs slots, bit 3: do not sync to packets with
|
|
* a type 3 Constant Tone Extension (currently reserved for future use),
|
|
* bit 4: do not sync to packets without a Constant Tone Extension, all other
|
|
* bits: reserved for future use.
|
|
*/
|
|
virtual void PeriodicScanStart(uint8_t options, uint8_t set_id,
|
|
uint8_t adv_addr_type,
|
|
const RawAddress& adv_addr, uint16_t skip_num,
|
|
uint16_t sync_timeout,
|
|
uint8_t sync_cte_type) = 0;
|
|
|
|
/**
|
|
* Used to cancel the HCI_LE_Periodic_Advertising_Create_Sync command while it
|
|
* is pending.
|
|
*
|
|
* @param cb status callback
|
|
*/
|
|
virtual void PeriodicScanCancelStart(status_cb cb) = 0;
|
|
|
|
/**
|
|
* Used to stop reception of the periodic advertising train identified by the
|
|
* Sync_Handle parameter.
|
|
*
|
|
* @param sync_handle synced advertising handle
|
|
* @param cb status callback
|
|
*/
|
|
virtual void PeriodicScanTerminate(uint16_t sync_handle, status_cb cb) = 0;
|
|
|
|
/**
|
|
* Enable or disable reports for the periodic advertising train defined by the
|
|
* sync_handle.
|
|
*
|
|
* @param sync_handle synced advewrtising handle
|
|
* @param enable whether enable or disable the advertising reports
|
|
* @param cb status callback
|
|
*/
|
|
virtual void PeriodicScanResultEvtEnable(uint16_t sync_handle, bool enable,
|
|
status_cb cb) = 0;
|
|
|
|
/**
|
|
* Used to add an entry, consisting of a single device address and SID, to the
|
|
* Periodic Advertiser list stored in the Controller. Any additions to the
|
|
* Periodic Advertiser list take effect immediately. If the entry is already
|
|
* on the list, the Controller shall return the error code Invalid HCI Command
|
|
* Parameters (0x12).
|
|
*
|
|
* @param adv_addr_type advertiser device address type
|
|
* @param adv_addr advertiser device address
|
|
* @param adv_sid advertising set ID
|
|
* @param cb status callback
|
|
*/
|
|
virtual void PeriodicAdvertiserListAddDevice(uint8_t adv_addr_type,
|
|
RawAddress& adv_addr,
|
|
uint8_t adv_sid,
|
|
status_cb cb) = 0;
|
|
/**
|
|
* Remove one entry from the list of Periodic Advertisers stored in the
|
|
* Controller. Removals from the Periodic Advertisers List take effect
|
|
* immediately.
|
|
*
|
|
* @param adv_addr_type advertiser device address type
|
|
* @param adv_addr advertiser device address
|
|
* @param adv_sid advertising set ID
|
|
* @param cb status callback
|
|
*/
|
|
virtual void PeriodicAdvertiserListRemoveDevice(uint8_t adv_addr_type,
|
|
RawAddress& adv_addr,
|
|
uint8_t adv_sid,
|
|
status_cb cb) = 0;
|
|
|
|
/**
|
|
* Remove all entries from the list of Periodic Advertisers in the Controller.
|
|
*
|
|
* @param cb status callback
|
|
*/
|
|
virtual void PeriodicAdvertiserListClear(status_cb cb) = 0;
|
|
|
|
/**
|
|
* Read the total number of Periodic Advertiser list entries that can be
|
|
* stored in the Controller.
|
|
*
|
|
* @param cb status and advertiser list size callback
|
|
*/
|
|
virtual void PeriodicAdvertiserListGetSize(list_size_cb cb) = 0;
|
|
|
|
/**
|
|
* Send synchronization information about the periodic advertising train
|
|
* identified by the sync_handle parameter to a connected device.
|
|
*
|
|
* @param bd_addr connected peer device address to whom sync data is
|
|
* transferred
|
|
* @param service_data a value provided by the Host
|
|
* @param sync_handle synced advewrtising handle
|
|
* @param cb status and connection handle callback
|
|
*/
|
|
virtual void PeriodicAdvSyncTransfer(const RawAddress& bd_addr,
|
|
uint16_t service_data,
|
|
uint16_t sync_handle, handle_cb cb) = 0;
|
|
|
|
/**
|
|
* Send synchronization information about the periodic advertising in an
|
|
* advertising set to a connected device.
|
|
*
|
|
* @param bd_addr connected peer device address to whom set info is
|
|
* transferred
|
|
* @param service_data a value provided by the Host
|
|
* @param sync_handle synced advertising handle
|
|
* @param cb status and connection handle callback
|
|
*/
|
|
virtual void PeriodicAdvSetInfoTransfer(const RawAddress& bd_addr,
|
|
uint16_t service_data,
|
|
uint8_t sync_handle,
|
|
handle_cb cb) = 0;
|
|
|
|
/**
|
|
* Specify how the Controller will process periodic advertising
|
|
* synchronization information received from the device identified by the
|
|
* bd_addr
|
|
*
|
|
* @param bd_addr connected peer device address who transfers the sync data
|
|
* @param mode 0x00: No attempt is made to synchronize to the periodic
|
|
* advertising and no HCI_LE_Periodic_Advertising_Sync_Transfer_Received event
|
|
* is sent to the Host. 0x01: An
|
|
* HCI_LE_Periodic_Advertising_Sync_Transfer_Received event is sent to the
|
|
* Host. HCI_LE_Periodic_Advertising_Report events will be disabled. 0x02: An
|
|
* HCI_LE_Periodic_Advertising_Sync_Transfer_Received event is sent to the
|
|
* Host. HCI_LE_Periodic_Advertising_Report events will be enabled. All other
|
|
* values: Reserved for future use.
|
|
* @param skip The number of periodic advertising packets that can be skipped
|
|
* after a successful receive, Range: 0x0000 to 0x01F3
|
|
* @param sync_timeout Synchronization timeout for the periodic advertising
|
|
* train. Range: 0x000A to 0x4000. Time = N*10 ms. Time Range: 100 ms to
|
|
* 163.84 s
|
|
* @param cte_type bit 0: do not sync to packets with an AoA Constant Tone
|
|
* Extension, bit 1: do not sync to packets with an AoD Constant Tone
|
|
* Extension with 1 μs slots, bit 2: do not sync to packets with an AoD
|
|
* Constant Tone Extension with 2 μs slots, bit 4: do not sync to packets
|
|
* without a Constant Tone Extension, all other values: reserved for future
|
|
* use.
|
|
* @param set_defaults whether to send
|
|
* HCI_LE_SET_DEFAULT_PERIODIC_ADVERTISING_SYNC_TRANSFER_PARAM or
|
|
* HCI_LE_SET_PERIODIC_ADVERTISING_SYNC_TRANSFER_PARAM.
|
|
* @param cb status callback
|
|
*/
|
|
virtual void SetPeriodicAdvSyncTransferParams(const RawAddress& bd_addr,
|
|
uint8_t mode, uint16_t skip,
|
|
uint16_t sync_timeout,
|
|
uint8_t cte_type,
|
|
bool set_defaults,
|
|
status_cb cb) = 0;
|
|
|
|
static constexpr uint8_t kOptUseAdvertiserList = 0x01;
|
|
static constexpr uint8_t kOptReportsInitiallyEnabled = 0x02;
|
|
};
|
|
|
|
#endif // BLE_SCANNER_HCI_INTERFACE_H
|