blob: 1bd2c0d70517da3972fc3a3bdfc438aaf3ac12e5 [file] [log] [blame]
// Copyright 2023 The ChromiumOS Authors
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
#ifndef FLEX_BLUETOOTH_FLEX_BLUETOOTH_OVERRIDES_H_
#define FLEX_BLUETOOTH_FLEX_BLUETOOTH_OVERRIDES_H_
#include <map>
#include <string>
#include <unordered_set>
#include <base/files/file_util.h>
namespace flex_bluetooth {
enum class SyspropOverride {
kDisableLEGetVendorCapabilities = 0,
kDisableEnhancedSCOConnection = 1,
};
const char kSyspropsLine[] = "[Sysprops]\n";
const std::map<SyspropOverride, std::string> kSyspropOverrideToString = {
{SyspropOverride::kDisableLEGetVendorCapabilities,
"bluetooth.core.le.vendor_capabilities.enabled=false\n"},
{SyspropOverride::kDisableEnhancedSCOConnection,
"bluetooth.sco.disable_enhanced_connection=true\n"}};
class BluetoothAdapter {
public:
bool operator<(const BluetoothAdapter& rhs) const {
return id_vendor_ < rhs.id_vendor_ ||
(id_vendor_ == rhs.id_vendor_ && id_product_ < rhs.id_product_);
}
const uint16_t id_vendor_;
const uint16_t id_product_;
};
class FlexBluetoothOverrides {
public:
explicit FlexBluetoothOverrides(
const base::FilePath& sysprop_override_path,
const std::map<BluetoothAdapter, std::unordered_set<SyspropOverride>>&
adapter_sysprop_overrides);
std::unordered_set<SyspropOverride> GetAdapterSyspropOverridesForVidPid(
const uint16_t id_vendor, const uint16_t id_product) const;
void ProcessOverridesForVidPid(const uint16_t id_vendor,
const uint16_t id_product) const;
void RemoveOverrides() const;
private:
const base::FilePath sysprop_override_path_;
const std::map<BluetoothAdapter, std::unordered_set<SyspropOverride>>
adapter_sysprop_overrides_;
};
bool HexStringToUInt16(const std::string& str, uint16_t* out);
} // namespace flex_bluetooth
#endif // FLEX_BLUETOOTH_FLEX_BLUETOOTH_OVERRIDES_H_