Merge changes from topic "bluetooth_finder_hal" into main am: 2865f1ec72

Original change: https://android-review.googlesource.com/c/platform/hardware/interfaces/+/2829530

Change-Id: I5852bd380ca0feca6f1bf04e9571cde5fc29237b
Signed-off-by: Automerger Merge Worker <android-build-automerger-merge-worker@system.gserviceaccount.com>
This commit is contained in:
Ted Wang
2023-12-01 18:17:06 +00:00
committed by Automerger Merge Worker
9 changed files with 365 additions and 0 deletions

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>