android13/packages/modules/Bluetooth/system/gd/hci/le_scanning_manager.h

115 lines
3.6 KiB
C++

/*
* Copyright 2019 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.
*/
#pragma once
#include <memory>
#include "common/callback.h"
#include "hci/address_with_type.h"
#include "hci/hci_packets.h"
#include "hci/le_scanning_callback.h"
#include "hci/uuid.h"
#include "module.h"
namespace bluetooth {
namespace hci {
enum class BatchScanMode : uint8_t {
DISABLE = 0,
TRUNCATED = 1,
FULL = 2,
TRUNCATED_AND_FULL = 3,
};
class LeScanningManager : public bluetooth::Module {
public:
static constexpr uint8_t kMaxAppNum = 32;
static constexpr uint8_t kAdvertisingDataInfoNotPresent = 0xff;
static constexpr uint8_t kTxPowerInformationNotPresent = 0x7f;
static constexpr uint8_t kNotPeriodicAdvertisement = 0x00;
static constexpr ScannerId kInvalidScannerId = 0xFF;
LeScanningManager();
LeScanningManager(const LeScanningManager&) = delete;
LeScanningManager& operator=(const LeScanningManager&) = delete;
virtual void RegisterScanner(const Uuid app_uuid);
virtual void Unregister(ScannerId scanner_id);
virtual void Scan(bool start);
virtual void SetScanParameters(
ScannerId scanner_id, LeScanType scan_type, uint16_t scan_interval, uint16_t scan_window);
/* Scan filter */
virtual void ScanFilterEnable(bool enable);
virtual void ScanFilterParameterSetup(
ApcfAction action, uint8_t filter_index, AdvertisingFilterParameter advertising_filter_parameter);
virtual void ScanFilterAdd(uint8_t filter_index, std::vector<AdvertisingPacketContentFilterCommand> filters);
/*Batch Scan*/
virtual void BatchScanConifgStorage(
uint8_t batch_scan_full_max,
uint8_t batch_scan_truncated_max,
uint8_t batch_scan_notify_threshold,
ScannerId scanner_id);
virtual void BatchScanEnable(
BatchScanMode scan_mode,
uint32_t duty_cycle_scan_window_slots,
uint32_t duty_cycle_scan_interval_slots,
BatchScanDiscardRule batch_scan_discard_rule);
virtual void BatchScanDisable();
virtual void BatchScanReadReport(ScannerId scanner_id, BatchScanMode scan_mode);
virtual void StartSync(uint8_t sid, const AddressWithType& address, uint16_t skip, uint16_t timeout, int reg_id);
virtual void StopSync(uint16_t handle);
virtual void CancelCreateSync(uint8_t sid, const Address& address);
virtual void TransferSync(const Address& address, uint16_t service_data, uint16_t sync_handle, int pa_source);
virtual void TransferSetInfo(const Address& address, uint16_t service_data, uint8_t adv_handle, int pa_source);
virtual void SyncTxParameters(const Address& addr, uint8_t mode, uint16_t skip, uint16_t timeout, int reg_id);
virtual void TrackAdvertiser(uint8_t filter_index, ScannerId scanner_id);
virtual void RegisterScanningCallback(ScanningCallback* scanning_callback);
virtual bool IsAdTypeFilterSupported() const;
static const ModuleFactory Factory;
protected:
void ListDependencies(ModuleList* list) const override;
void Start() override;
void Stop() override;
std::string ToString() const override;
private:
struct impl;
std::unique_ptr<impl> pimpl_;
};
} // namespace hci
} // namespace bluetooth