Merge changes from topic "bluetooth_finder_hal" into main

* changes:
  Bluetooth Finder: Add Vts and AIDL default implement
  Bluetooth Finder: Interface for Bluetooth Finder
This commit is contained in:
Ted Wang 2023-12-01 17:41:04 +00:00 committed by Gerrit Code Review
commit 2865f1ec72
15 changed files with 556 additions and 0 deletions

View file

@ -0,0 +1,34 @@
// Copyright (C) 2023 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.
package {
default_applicable_licenses: ["Android-Apache-2.0"],
}
aidl_interface {
name: "android.hardware.bluetooth.finder",
vendor_available: true,
srcs: ["android/hardware/bluetooth/finder/*.aidl"],
stability: "vintf",
backend: {
ndk: {
enabled: true,
},
java: {
enabled: true,
platform_apis: true,
},
},
}

View file

@ -0,0 +1,38 @@
/*
* Copyright (C) 2023 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.
*/
///////////////////////////////////////////////////////////////////////////////
// THIS FILE IS IMMUTABLE. DO NOT EDIT IN ANY CASE. //
///////////////////////////////////////////////////////////////////////////////
// This file is a snapshot of an AIDL file. Do not edit it manually. There are
// two cases:
// 1). this is a frozen version file - do not edit this in any case.
// 2). this is a 'current' file. If you make a backwards compatible change to
// the interface (from the latest frozen version), the build system will
// prompt you to update this file with `m <name>-update-api`.
//
// You must not make a backward incompatible change to any AIDL file built
// with the aidl_interface module type with versions property set. The module
// type is used to build AIDL files in a way that they can be used across
// independently updatable components of the system. If a device is shipped
// with such a backward incompatible change, it has a high risk of breaking
// later when a module using the interface is updated, e.g., Mainline modules.
package android.hardware.bluetooth.finder;
@VintfStability
parcelable Eid {
byte[20] bytes;
}

View file

@ -0,0 +1,40 @@
/*
* Copyright (C) 2023 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.
*/
///////////////////////////////////////////////////////////////////////////////
// THIS FILE IS IMMUTABLE. DO NOT EDIT IN ANY CASE. //
///////////////////////////////////////////////////////////////////////////////
// This file is a snapshot of an AIDL file. Do not edit it manually. There are
// two cases:
// 1). this is a frozen version file - do not edit this in any case.
// 2). this is a 'current' file. If you make a backwards compatible change to
// the interface (from the latest frozen version), the build system will
// prompt you to update this file with `m <name>-update-api`.
//
// You must not make a backward incompatible change to any AIDL file built
// with the aidl_interface module type with versions property set. The module
// type is used to build AIDL files in a way that they can be used across
// independently updatable components of the system. If a device is shipped
// with such a backward incompatible change, it has a high risk of breaking
// later when a module using the interface is updated, e.g., Mainline modules.
package android.hardware.bluetooth.finder;
@VintfStability
interface IBluetoothFinder {
void sendEids(in android.hardware.bluetooth.finder.Eid[] eids);
void setPoweredOffFinderMode(in boolean enable);
boolean getPoweredOffFinderMode();
}

View file

@ -0,0 +1,25 @@
/*
* Copyright (C) 2023 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.
*/
package android.hardware.bluetooth.finder;
/**
* Ephemeral Identifier
*/
@VintfStability
parcelable Eid {
byte[20] bytes;
}

View file

@ -0,0 +1,46 @@
/*
* Copyright (C) 2023 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.
*/
package android.hardware.bluetooth.finder;
import android.hardware.bluetooth.finder.Eid;
@VintfStability
interface IBluetoothFinder {
/**
* API to set the EIDs to the Bluetooth Controller
*
* @param eids array of 20 bytes EID to the Bluetooth
* controller
*/
void sendEids(in Eid[] eids);
/**
* API to enable the powered-off finder feature, which allows the Bluetooth controller to send
* beacons after the device is powered off.
*
* @param enable true to enable; false to disable
*/
void setPoweredOffFinderMode(in boolean enable);
/**
* API for retrieving feature enablement status
*
* @return the value last set by setPoweredOffFinderMode, false if setPoweredOffFinderMode was
* never been invoked since boot.
*/
boolean getPoweredOffFinderMode();
}

View file

@ -0,0 +1,42 @@
// Copyright (C) 2023 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.
package {
default_applicable_licenses: ["Android-Apache-2.0"],
}
cc_binary {
name: "android.hardware.bluetooth.finder-service.default",
relative_install_path: "hw",
init_rc: ["bluetooth-finder-service-default.rc"],
vintf_fragments: [":manifest_android.hardware.bluetooth.finder-service.default.xml"],
vendor: true,
srcs: [
"BluetoothFinder.cpp",
"service.cpp",
],
shared_libs: [
"android.hardware.bluetooth.finder-V1-ndk",
"libbase",
"libbinder_ndk",
"libhidlbase",
"libutils",
"liblog",
],
}
filegroup {
name: "manifest_android.hardware.bluetooth.finder-service.default.xml",
srcs: ["bluetooth-finder-service-default.xml"],
}

View file

@ -0,0 +1,37 @@
/*
* Copyright (C) 2023 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.
*/
#include "BluetoothFinder.h"
namespace aidl::android::hardware::bluetooth::finder::impl {
::ndk::ScopedAStatus BluetoothFinder::sendEids(const ::std::vector<Eid>& keys) {
keys_.insert(keys_.end(), keys.begin(), keys.end());
return ::ndk::ScopedAStatus::ok();
}
::ndk::ScopedAStatus BluetoothFinder::setPoweredOffFinderMode(bool enable) {
pof_enabled_ = enable;
return ::ndk::ScopedAStatus::ok();
}
::ndk::ScopedAStatus BluetoothFinder::getPoweredOffFinderMode(
bool* _aidl_return) {
*_aidl_return = pof_enabled_;
return ::ndk::ScopedAStatus::ok();
}
} // namespace aidl::android::hardware::bluetooth::finder::impl

View file

@ -0,0 +1,39 @@
/*
* Copyright (C) 2023 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.
*/
#include <aidl/android/hardware/bluetooth/finder/BnBluetoothFinder.h>
#include <vector>
namespace aidl::android::hardware::bluetooth::finder::impl {
using ::aidl::android::hardware::bluetooth::finder::BnBluetoothFinder;
using ::aidl::android::hardware::bluetooth::finder::Eid;
class BluetoothFinder : public BnBluetoothFinder {
public:
BluetoothFinder() = default;
::ndk::ScopedAStatus sendEids(const ::std::vector<Eid>& keys) override;
::ndk::ScopedAStatus setPoweredOffFinderMode(bool enable) override;
::ndk::ScopedAStatus getPoweredOffFinderMode(bool* _aidl_return) override;
private:
bool pof_enabled_;
std::vector<Eid> keys_;
};
} // namespace aidl::android::hardware::bluetooth::finder::impl

View file

@ -0,0 +1,6 @@
service vendor.bluetooth.finder-default /vendor/bin/hw/android.hardware.bluetooth.finder.default
class hal
capabilities BLOCK_SUSPEND NET_ADMIN SYS_NICE
user bluetooth
group bluetooth
task_profiles ServicePerformance

View file

@ -0,0 +1,7 @@
<manifest version="1.0" type="device">
<hal format="aidl">
<name>android.hardware.bluetooth.finder</name>
<version>1</version>
<fqname>IBluetoothFinder/default</fqname>
</hal>
</manifest>

View file

@ -0,0 +1,46 @@
/*
* Copyright (C) 2023 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.
*/
#define LOG_TAG "aidl.android.hardware.bluetooth.finder.default"
#include <android/binder_manager.h>
#include <android/binder_process.h>
#include <utils/Log.h>
#include "BluetoothFinder.h"
using ::aidl::android::hardware::bluetooth::finder::impl::BluetoothFinder;
int main(int /* argc */, char** /* argv */) {
ALOGI("Bluetooth Finder HAL registering");
if (!ABinderProcess_setThreadPoolMaxThreadCount(0)) {
ALOGE("failed to set thread pool max thread count");
return 1;
}
std::shared_ptr<BluetoothFinder> service =
ndk::SharedRefBase::make<BluetoothFinder>();
std::string instance =
std::string() + BluetoothFinder::descriptor + "/default";
auto result =
AServiceManager_addService(service->asBinder().get(), instance.c_str());
if (result == STATUS_OK) {
ABinderProcess_joinThreadPool();
} else {
ALOGE("Could not register as a service!");
}
return 0;
}

View file

@ -0,0 +1,41 @@
// Copyright (C) 2023 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.
package {
default_applicable_licenses: ["hardware_interfaces_license"],
}
cc_test {
name: "VtsHalBluetoothFinderTargetTest",
defaults: [
"use_libaidlvintf_gtest_helper_static",
],
srcs: ["VtsHalBluetoothFinderTargetTest.cpp"],
shared_libs: [
"libbase",
"libcutils",
"libbinder_ndk",
"liblog",
"libutils",
],
static_libs: [
"android.hardware.bluetooth.finder-V1-ndk",
"libbluetooth-types",
],
test_config: "VtsHalBluetoothFinderTargetTest.xml",
test_suites: [
"general-tests",
"vts",
],
}

View file

@ -0,0 +1,114 @@
/*
* Copyright (C) 2023 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.
*/
#include <aidl/Gtest.h>
#include <aidl/Vintf.h>
#include <aidl/android/hardware/bluetooth/finder/IBluetoothFinder.h>
#include <android-base/logging.h>
#include <android/binder_manager.h>
#include <android/binder_process.h>
#include <binder/IServiceManager.h>
#include <utils/Log.h>
#include <array>
#include <vector>
using ::aidl::android::hardware::bluetooth::finder::Eid;
using ::aidl::android::hardware::bluetooth::finder::IBluetoothFinder;
using ::ndk::ScopedAStatus;
class BluetoothFinderTest : public ::testing::TestWithParam<std::string> {
public:
virtual void SetUp() override {
ALOGI("SetUp Finder Test");
bluetooth_finder = IBluetoothFinder::fromBinder(
ndk::SpAIBinder(AServiceManager_waitForService(GetParam().c_str())));
ASSERT_NE(bluetooth_finder, nullptr);
}
virtual void TearDown() override {
ALOGI("TearDown Finder Test");
bluetooth_finder = nullptr;
ASSERT_EQ(bluetooth_finder, nullptr);
}
ScopedAStatus sendEids(uint8_t num);
ScopedAStatus setPoweredOffFinderMode(bool enable);
ScopedAStatus getPoweredOffFinderMode(bool* status);
private:
std::shared_ptr<IBluetoothFinder> bluetooth_finder;
};
ScopedAStatus BluetoothFinderTest::sendEids(uint8_t numKeys) {
std::vector<Eid> keys(numKeys);
for (uint_t i = 0; i < numKeys; i++) {
std::array<uint8_t, 20> key;
key.fill(i + 1);
keys[i].bytes = key;
}
return bluetooth_finder->sendEids(keys);
}
ScopedAStatus BluetoothFinderTest::setPoweredOffFinderMode(bool enable) {
return bluetooth_finder->setPoweredOffFinderMode(enable);
}
ScopedAStatus BluetoothFinderTest::getPoweredOffFinderMode(bool* status) {
return bluetooth_finder->getPoweredOffFinderMode(status);
}
TEST_P(BluetoothFinderTest, SendEidsSingle) {
ScopedAStatus status = sendEids(1);
ASSERT_TRUE(status.isOk());
}
TEST_P(BluetoothFinderTest, Send255Eids) {
ScopedAStatus status = sendEids(255);
ASSERT_TRUE(status.isOk());
}
TEST_P(BluetoothFinderTest, setAndGetPoweredOffFinderModeEnable) {
ScopedAStatus status = setPoweredOffFinderMode(true);
ASSERT_TRUE(status.isOk());
bool pof_status;
status = getPoweredOffFinderMode(&pof_status);
ASSERT_TRUE(status.isOk());
ASSERT_TRUE(pof_status);
}
TEST_P(BluetoothFinderTest, setAndGetPoweredOffFinderModeDisable) {
ScopedAStatus status = setPoweredOffFinderMode(false);
ASSERT_TRUE(status.isOk());
bool pof_status;
status = getPoweredOffFinderMode(&pof_status);
ASSERT_TRUE(status.isOk());
ASSERT_TRUE(!pof_status);
}
GTEST_ALLOW_UNINSTANTIATED_PARAMETERIZED_TEST(BluetoothFinderTest);
INSTANTIATE_TEST_SUITE_P(PerInstance, BluetoothFinderTest,
testing::ValuesIn(android::getAidlHalInstanceNames(
IBluetoothFinder::descriptor)),
android::PrintInstanceNameToString);
int main(int argc, char** argv) {
::testing::InitGoogleTest(&argc, argv);
ABinderProcess_startThreadPool();
int status = RUN_ALL_TESTS();
ALOGI("Test result = %d", status);
return status;
}

View file

@ -0,0 +1,33 @@
<!--
Copyright (C) 2023 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.
-->
<configuration description="Runs VtsHalBluetoothFinderTargetTest.">
<option name="test-suite-tag" value="apct" />
<option name="test-suite-tag" value="apct-native" />
<target_preparer class="com.android.tradefed.targetprep.RootTargetPreparer">
</target_preparer>
<target_preparer class="com.android.tradefed.targetprep.PushFilePreparer">
<option name="cleanup" value="true" />
<option name="push" value="VtsHalBluetoothFinderTargetTest->/data/local/tmp/VtsHalBluetoothFinderTargetTest" />
</target_preparer>
<test class="com.android.tradefed.testtype.GTest" >
<option name="native-test-device-path" value="/data/local/tmp" />
<option name="module-name" value="VtsHalBluetoothFinderTargetTest" />
</test>
</configuration>

View file

@ -146,6 +146,14 @@
<instance>default</instance>
</interface>
</hal>
<hal format="aidl" optional="true">
<name>android.hardware.bluetooth.finder</name>
<version>1</version>
<interface>
<name>IBluetoothFinder</name>
<instance>default</instance>
</interface>
</hal>
<hal format="aidl" optional="true">
<name>android.hardware.boot</name>
<interface>