From 08596b462904e0f23e31c5c84535a05c1c8f61a5 Mon Sep 17 00:00:00 2001 From: Arthur Ishiguro Date: Wed, 30 Sep 2020 10:48:36 -0700 Subject: [PATCH 1/3] Adds Context Hub HAL v1.2 Add support for extended setting changes. Bug: 166845383 Test: Compile Change-Id: I912f01447e4d0e2f345620fa1b5599f50cc9a4f8 --- contexthub/1.2/Android.bp | 16 ++++++++++++++++ contexthub/1.2/IContexthub.hal | 31 +++++++++++++++++++++++++++++++ contexthub/1.2/types.hal | 34 ++++++++++++++++++++++++++++++++++ current.txt | 2 ++ 4 files changed, 83 insertions(+) create mode 100644 contexthub/1.2/Android.bp create mode 100644 contexthub/1.2/IContexthub.hal create mode 100644 contexthub/1.2/types.hal diff --git a/contexthub/1.2/Android.bp b/contexthub/1.2/Android.bp new file mode 100644 index 0000000000..e81948234a --- /dev/null +++ b/contexthub/1.2/Android.bp @@ -0,0 +1,16 @@ +// This file is autogenerated by hidl-gen -Landroidbp. + +hidl_interface { + name: "android.hardware.contexthub@1.2", + root: "android.hardware", + srcs: [ + "types.hal", + "IContexthub.hal", + ], + interfaces: [ + "android.hardware.contexthub@1.0", + "android.hardware.contexthub@1.1", + "android.hidl.base@1.0", + ], + gen_java: true, +} diff --git a/contexthub/1.2/IContexthub.hal b/contexthub/1.2/IContexthub.hal new file mode 100644 index 0000000000..819fc1d6e1 --- /dev/null +++ b/contexthub/1.2/IContexthub.hal @@ -0,0 +1,31 @@ +/* + * Copyright (C) 2020 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.contexthub@1.2; + +import @1.1::IContexthub; +import @1.1::SettingValue; + +interface IContexthub extends @1.1::IContexthub { + /** + * Notification sent by the framework to indicate that the user + * has changed a setting. + * + * @param setting User setting that has been modified. + * @param newValue The update value of the user setting. + */ + onSettingChanged_1_2(Setting setting, @1.1::SettingValue newValue); +}; diff --git a/contexthub/1.2/types.hal b/contexthub/1.2/types.hal new file mode 100644 index 0000000000..38f9f7af55 --- /dev/null +++ b/contexthub/1.2/types.hal @@ -0,0 +1,34 @@ +/* + * Copyright (C) 2020 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.contexthub@1.2; + +import @1.1::Setting; + +/** + * Used to indicate the type of user setting that has changed. + */ +enum Setting : @1.1::Setting { + /** + * Indicates that the WiFi capabilities can be used in CHRE. This setting + * follows the overall availability of WiFi-related functionality within + * the Android framework, for example if WiFi is disabled for connectivity + * purposes but is enabled for location purposes (scanning), then + * WIFI_AVAILABLE is enabled. + */ + WIFI_AVAILABLE, + AIRPLANE_MODE, +}; diff --git a/current.txt b/current.txt index c9a923ec74..9f03b7f3fc 100644 --- a/current.txt +++ b/current.txt @@ -778,6 +778,8 @@ cd84ab19c590e0e73dd2307b591a3093ee18147ef95e6d5418644463a6620076 android.hardwar # HALs released in Android S # NOTE: waiting to freeze HALs until later in the release # NOTE: new HALs are recommended to be in AIDL +6e64b33f1b720b66b0deb5e08dee37a99deaa94e2e9ebf7806703cabab56e21d android.hardware.contexthub@1.2::IContexthub +3fb83f4539cab2c7bf9fdbecf7265d1c1dd6e8de9694046fe512b493c127ccea android.hardware.contexthub@1.2::types 57d183b10b13ec0a8e542c0b3d61991ae541c60e85dbbc5499bb21dfd068cbb8 android.hardware.wifi.supplicant@1.4::types 17818b6b1952a75e4364ae82c534b9d2f5c0a9765a56256b16faa5a5cf45d3a8 android.hardware.wifi.supplicant@1.4::ISupplicant 8342b5f6ec8f48ad2b741128aede010995d0b5709257b7ec09bb469b4f61ef1a android.hardware.wifi.supplicant@1.4::ISupplicantStaIface From 46c2bd043926693a9dee2514e5079791127d33d4 Mon Sep 17 00:00:00 2001 From: Arthur Ishiguro Date: Tue, 6 Oct 2020 11:05:17 -0700 Subject: [PATCH 2/3] Adds default (mock) Context Hub HAL 1.2 impl Also refactors common code. Bug: 166845383 Test: Compile only (VTS test coming up in future CL) Change-Id: Iae6cf09e2fffb854af61c29e6004ceb062a892b3 --- contexthub/1.1/default/Android.bp | 3 + contexthub/1.1/default/Contexthub.cpp | 75 ----------- contexthub/1.1/default/Contexthub.h | 25 +--- contexthub/1.2/default/Android.bp | 46 +++++++ contexthub/1.2/default/Contexthub.cpp | 38 ++++++ contexthub/1.2/default/Contexthub.h | 45 +++++++ contexthub/1.2/default/OWNERS | 3 + ...android.hardware.contexthub@1.2-service.rc | 7 ++ .../android.hardware.contexthub@1.2.xml | 11 ++ contexthub/1.2/default/service.cpp | 42 +++++++ contexthub/common/default/1.X/Android.bp | 28 +++++ contexthub/common/default/1.X/ContextHub.h | 117 ++++++++++++++++++ 12 files changed, 344 insertions(+), 96 deletions(-) create mode 100644 contexthub/1.2/default/Android.bp create mode 100644 contexthub/1.2/default/Contexthub.cpp create mode 100644 contexthub/1.2/default/Contexthub.h create mode 100644 contexthub/1.2/default/OWNERS create mode 100644 contexthub/1.2/default/android.hardware.contexthub@1.2-service.rc create mode 100644 contexthub/1.2/default/android.hardware.contexthub@1.2.xml create mode 100644 contexthub/1.2/default/service.cpp create mode 100644 contexthub/common/default/1.X/Android.bp create mode 100644 contexthub/common/default/1.X/ContextHub.h diff --git a/contexthub/1.1/default/Android.bp b/contexthub/1.1/default/Android.bp index 86858c0377..5c9ec4e2c7 100644 --- a/contexthub/1.1/default/Android.bp +++ b/contexthub/1.1/default/Android.bp @@ -38,5 +38,8 @@ cc_binary { "liblog", "libutils", ], + header_libs: [ + "android.hardware.contexthub@1.X-common-impl", + ], vintf_fragments: ["android.hardware.contexthub@1.1.xml"], } diff --git a/contexthub/1.1/default/Contexthub.cpp b/contexthub/1.1/default/Contexthub.cpp index 19cc2628d7..e7fde84058 100644 --- a/contexthub/1.1/default/Contexthub.cpp +++ b/contexthub/1.1/default/Contexthub.cpp @@ -23,81 +23,6 @@ namespace contexthub { namespace V1_1 { namespace implementation { -using ::android::hardware::contexthub::V1_0::ContextHub; -using ::android::hardware::contexthub::V1_0::HubAppInfo; -using ::android::hardware::contexthub::V1_0::Result; - -namespace { - -constexpr uint32_t kMockHubId = 0; - -} // anonymous namespace - -Return Contexthub::getHubs(getHubs_cb _hidl_cb) { - ContextHub hub = {}; - hub.name = "Mock Context Hub"; - hub.vendor = "AOSP"; - hub.toolchain = "n/a"; - hub.platformVersion = 1; - hub.toolchainVersion = 1; - hub.hubId = kMockHubId; - hub.peakMips = 1; - hub.peakPowerDrawMw = 1; - hub.maxSupportedMsgLen = 4096; - hub.chrePlatformId = UINT64_C(0x476f6f6754000000); - hub.chreApiMajorVersion = 1; - hub.chreApiMinorVersion = 4; - - // Report a single mock hub - std::vector hubs; - hubs.push_back(hub); - - _hidl_cb(hubs); - return Void(); -} - -Return Contexthub::registerCallback(uint32_t hubId, const sp& cb) { - if (hubId == kMockHubId) { - mCallback = cb; - return Result::OK; - } - return Result::BAD_PARAMS; -} - -// We don't expose any nanoapps, therefore all nanoapp-related API calls return with BAD_PARAMS -Return Contexthub::sendMessageToHub(uint32_t /*hubId*/, const ContextHubMsg& /*msg*/) { - return Result::BAD_PARAMS; -} - -Return Contexthub::loadNanoApp(uint32_t /*hubId*/, const NanoAppBinary& /*appBinary*/, - uint32_t /*transactionId*/) { - return Result::BAD_PARAMS; -} - -Return Contexthub::unloadNanoApp(uint32_t /*hubId*/, uint64_t /*appId*/, - uint32_t /*transactionId*/) { - return Result::BAD_PARAMS; -} - -Return Contexthub::enableNanoApp(uint32_t /*hubId*/, uint64_t /*appId*/, - uint32_t /*transactionId*/) { - return Result::BAD_PARAMS; -} - -Return Contexthub::disableNanoApp(uint32_t /*hubId*/, uint64_t /*appId*/, - uint32_t /*transactionId*/) { - return Result::BAD_PARAMS; -} - -Return Contexthub::queryApps(uint32_t hubId) { - if (hubId == kMockHubId && mCallback != nullptr) { - std::vector nanoapps; - mCallback->handleAppsInfo(nanoapps); - return Result::OK; - } - return Result::BAD_PARAMS; -} - Return Contexthub::onSettingChanged(Setting /*setting*/, SettingValue /*newValue*/) { return Void(); } diff --git a/contexthub/1.1/default/Contexthub.h b/contexthub/1.1/default/Contexthub.h index 0da61d1464..1468fcfc0e 100644 --- a/contexthub/1.1/default/Contexthub.h +++ b/contexthub/1.1/default/Contexthub.h @@ -15,6 +15,8 @@ */ #pragma once +#include "ContextHub.h" + #include namespace android { @@ -23,30 +25,11 @@ namespace contexthub { namespace V1_1 { namespace implementation { -class Contexthub : public V1_1::IContexthub { - using ContextHubMsg = ::android::hardware::contexthub::V1_0::ContextHubMsg; - using IContexthubCallback = ::android::hardware::contexthub::V1_0::IContexthubCallback; - using NanoAppBinary = ::android::hardware::contexthub::V1_0::NanoAppBinary; - using Result = ::android::hardware::contexthub::V1_0::Result; - +class Contexthub + : public ::android::hardware::contexthub::V1_X::implementation::ContextHub { public: - // Methods from V1_0::IContexthub - Return getHubs(getHubs_cb _hidl_cb) override; - Return registerCallback(uint32_t hubId, - const ::android::sp& cb) override; - Return sendMessageToHub(uint32_t hubId, const ContextHubMsg& msg) override; - Return loadNanoApp(uint32_t hubId, const NanoAppBinary& appBinary, - uint32_t transactionId) override; - Return unloadNanoApp(uint32_t hubId, uint64_t appId, uint32_t transactionId) override; - Return enableNanoApp(uint32_t hubId, uint64_t appId, uint32_t transactionId) override; - Return disableNanoApp(uint32_t hubId, uint64_t appId, uint32_t transactionId) override; - Return queryApps(uint32_t hubId) override; - // Methods from V1_1::IContexthub Return onSettingChanged(Setting setting, SettingValue newValue) override; - - private: - sp mCallback; }; } // namespace implementation diff --git a/contexthub/1.2/default/Android.bp b/contexthub/1.2/default/Android.bp new file mode 100644 index 0000000000..49b54fc007 --- /dev/null +++ b/contexthub/1.2/default/Android.bp @@ -0,0 +1,46 @@ +/* + * Copyright (C) 2020 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. + */ + +cc_binary { + name: "android.hardware.contexthub@1.2-service.mock", + defaults: ["hidl_defaults"], + vendor: true, + relative_install_path: "hw", + init_rc: ["android.hardware.contexthub@1.2-service.rc"], + srcs: [ + "Contexthub.cpp", + "service.cpp", + ], + cflags: [ + "-Wall", + "-Werror", + ], + shared_libs: [ + "android.hardware.contexthub@1.0", + "android.hardware.contexthub@1.1", + "android.hardware.contexthub@1.2", + "libbase", + "libcutils", + "libhardware", + "libhidlbase", + "liblog", + "libutils", + ], + header_libs: [ + "android.hardware.contexthub@1.X-common-impl", + ], + vintf_fragments: ["android.hardware.contexthub@1.2.xml"], +} diff --git a/contexthub/1.2/default/Contexthub.cpp b/contexthub/1.2/default/Contexthub.cpp new file mode 100644 index 0000000000..d7ac7bf30e --- /dev/null +++ b/contexthub/1.2/default/Contexthub.cpp @@ -0,0 +1,38 @@ +/* + * Copyright (C) 2020 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 "Contexthub.h" + +#include + +namespace android { +namespace hardware { +namespace contexthub { +namespace V1_2 { +namespace implementation { + +Return Contexthub::onSettingChanged(SettingV1_1 /*setting*/, SettingValue /*newValue*/) { + return Void(); +} + +Return Contexthub::onSettingChanged_1_2(Setting /*setting*/, SettingValue /*newValue*/) { + return Void(); +} + +} // namespace implementation +} // namespace V1_2 +} // namespace contexthub +} // namespace hardware +} // namespace android diff --git a/contexthub/1.2/default/Contexthub.h b/contexthub/1.2/default/Contexthub.h new file mode 100644 index 0000000000..d2f8d69afc --- /dev/null +++ b/contexthub/1.2/default/Contexthub.h @@ -0,0 +1,45 @@ +/* + * Copyright (C) 2020 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 "ContextHub.h" + +#include + +namespace android { +namespace hardware { +namespace contexthub { +namespace V1_2 { +namespace implementation { + +class Contexthub + : public ::android::hardware::contexthub::V1_X::implementation::ContextHub { + using SettingValue = ::android::hardware::contexthub::V1_1::SettingValue; + using SettingV1_1 = ::android::hardware::contexthub::V1_1::Setting; + + public: + // Methods from V1_1::IContexthub + Return onSettingChanged(SettingV1_1 setting, SettingValue newValue) override; + + // Methods from V1_2::IContexthub + Return onSettingChanged_1_2(Setting setting, SettingValue newValue) override; +}; + +} // namespace implementation +} // namespace V1_2 +} // namespace contexthub +} // namespace hardware +} // namespace android diff --git a/contexthub/1.2/default/OWNERS b/contexthub/1.2/default/OWNERS new file mode 100644 index 0000000000..90c233030e --- /dev/null +++ b/contexthub/1.2/default/OWNERS @@ -0,0 +1,3 @@ +arthuri@google.com +bduddie@google.com +stange@google.com diff --git a/contexthub/1.2/default/android.hardware.contexthub@1.2-service.rc b/contexthub/1.2/default/android.hardware.contexthub@1.2-service.rc new file mode 100644 index 0000000000..936222a607 --- /dev/null +++ b/contexthub/1.2/default/android.hardware.contexthub@1.2-service.rc @@ -0,0 +1,7 @@ +service vendor.contexthub-hal-1.2-mock /vendor/bin/hw/android.hardware.contexthub@1.2-service.mock + interface android.hardware.contexthub@1.0::IContexthub default + interface android.hardware.contexthub@1.1::IContexthub default + interface android.hardware.contexthub@1.2::IContexthub default + class hal + user context_hub + group context_hub diff --git a/contexthub/1.2/default/android.hardware.contexthub@1.2.xml b/contexthub/1.2/default/android.hardware.contexthub@1.2.xml new file mode 100644 index 0000000000..ec6c684994 --- /dev/null +++ b/contexthub/1.2/default/android.hardware.contexthub@1.2.xml @@ -0,0 +1,11 @@ + + + android.hardware.contexthub + hwbinder + 1.2 + + IContexthub + default + + + diff --git a/contexthub/1.2/default/service.cpp b/contexthub/1.2/default/service.cpp new file mode 100644 index 0000000000..41cb753159 --- /dev/null +++ b/contexthub/1.2/default/service.cpp @@ -0,0 +1,42 @@ +/* + * Copyright (C) 2020 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 "android.hardware.contexthub@1.2-service" + +#include +#include +#include +#include +#include "Contexthub.h" + +using ::android::hardware::configureRpcThreadpool; +using ::android::hardware::joinRpcThreadpool; +using ::android::hardware::contexthub::V1_2::IContexthub; +using ::android::hardware::contexthub::V1_2::implementation::Contexthub; + +int main() { + configureRpcThreadpool(1, true /* callerWillJoin */); + + ::android::sp contexthub = new Contexthub(); + if (contexthub->registerAsService() != ::android::OK) { + ALOGE("Failed to register Contexthub HAL instance"); + return 1; + } + + joinRpcThreadpool(); + ALOGE("Service exited"); + return 1; +} diff --git a/contexthub/common/default/1.X/Android.bp b/contexthub/common/default/1.X/Android.bp new file mode 100644 index 0000000000..691a1b7c9d --- /dev/null +++ b/contexthub/common/default/1.X/Android.bp @@ -0,0 +1,28 @@ +// +// Copyright (C) 2020 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. + +cc_library_headers { + name: "android.hardware.contexthub@1.X-common-impl", + vendor_available: true, + defaults: ["hidl_defaults"], + export_include_dirs: ["."], + shared_libs: [ + "android.hardware.contexthub@1.0", + "libbinder", + "libcutils", + "libhidlbase", + "libutils", + ], +} diff --git a/contexthub/common/default/1.X/ContextHub.h b/contexthub/common/default/1.X/ContextHub.h new file mode 100644 index 0000000000..73d06319dd --- /dev/null +++ b/contexthub/common/default/1.X/ContextHub.h @@ -0,0 +1,117 @@ +/* + * Copyright (C) 2020 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. + */ + +#ifndef ANDROID_HARDWARE_CONTEXTHUB_V1_X_CONTEXTHUB_H +#define ANDROID_HARDWARE_CONTEXTHUB_V1_X_CONTEXTHUB_H + +#include +#include +#include + +namespace android { +namespace hardware { +namespace contexthub { +namespace V1_X { +namespace implementation { + +template +struct ContextHub : public IContextHubInterface { + using ContextHubMsg = ::android::hardware::contexthub::V1_0::ContextHubMsg; + using HubAppInfo = ::android::hardware::contexthub::V1_0::HubAppInfo; + using IContexthubCallback = ::android::hardware::contexthub::V1_0::IContexthubCallback; + using NanoAppBinary = ::android::hardware::contexthub::V1_0::NanoAppBinary; + using Result = ::android::hardware::contexthub::V1_0::Result; + using getHubs_cb = ::android::hardware::contexthub::V1_0::IContexthub::getHubs_cb; + + public: + Return getHubs(getHubs_cb _hidl_cb) override { + ::android::hardware::contexthub::V1_0::ContextHub hub = {}; + hub.name = "Mock Context Hub"; + hub.vendor = "AOSP"; + hub.toolchain = "n/a"; + hub.platformVersion = 1; + hub.toolchainVersion = 1; + hub.hubId = kMockHubId; + hub.peakMips = 1; + hub.peakPowerDrawMw = 1; + hub.maxSupportedMsgLen = 4096; + hub.chrePlatformId = UINT64_C(0x476f6f6754000000); + hub.chreApiMajorVersion = 1; + hub.chreApiMinorVersion = 4; + + // Report a single mock hub + std::vector<::android::hardware::contexthub::V1_0::ContextHub> hubs; + hubs.push_back(hub); + + _hidl_cb(hubs); + return Void(); + } + + Return registerCallback(uint32_t hubId, const sp& cb) override { + if (hubId == kMockHubId) { + mCallback = cb; + return Result::OK; + } + return Result::BAD_PARAMS; + } + + // We don't expose any nanoapps, therefore all nanoapp-related API calls return with BAD_PARAMS + Return sendMessageToHub(uint32_t /*hubId*/, const ContextHubMsg& /*msg*/) override { + return Result::BAD_PARAMS; + } + + Return loadNanoApp(uint32_t /*hubId*/, const NanoAppBinary& /*appBinary*/, + uint32_t /*transactionId*/) override { + return Result::BAD_PARAMS; + } + + Return unloadNanoApp(uint32_t /*hubId*/, uint64_t /*appId*/, + uint32_t /*transactionId*/) override { + return Result::BAD_PARAMS; + } + + Return enableNanoApp(uint32_t /*hubId*/, uint64_t /*appId*/, + uint32_t /*transactionId*/) override { + return Result::BAD_PARAMS; + } + + Return disableNanoApp(uint32_t /*hubId*/, uint64_t /*appId*/, + uint32_t /*transactionId*/) override { + return Result::BAD_PARAMS; + } + + Return queryApps(uint32_t hubId) override { + if (hubId == kMockHubId && mCallback != nullptr) { + std::vector nanoapps; + mCallback->handleAppsInfo(nanoapps); + return Result::OK; + } + return Result::BAD_PARAMS; + } + + private: + static constexpr uint32_t kMockHubId = 0; + + sp mCallback; +}; + +} // namespace implementation +} // namespace V1_X +} // namespace contexthub +} // namespace hardware +} // namespace android + +#endif // ANDROID_HARDWARE_CONTEXTHUB_V1_X_CONTEXTHUB_H From d06c45e008531aa3f2115260b3789bceab292655 Mon Sep 17 00:00:00 2001 From: Arthur Ishiguro Date: Tue, 6 Oct 2020 13:24:29 -0700 Subject: [PATCH 3/3] Add VTS tests for Context Hub HAL 1.2 Also updates the compatibility matrix. Bug: 166845383 Test: Run test on device with HAL 1.2 implemented, verify pass Change-Id: Iac53e755cfa38fbd1322421279475de76b4bb572 --- .../compatibility_matrix.current.xml | 2 +- contexthub/1.2/vts/functional/Android.bp | 31 +++++++++ contexthub/1.2/vts/functional/OWNERS | 8 +++ .../VtsHalContexthubV1_2TargetTest.cpp | 69 +++++++++++++++++++ 4 files changed, 109 insertions(+), 1 deletion(-) create mode 100644 contexthub/1.2/vts/functional/Android.bp create mode 100644 contexthub/1.2/vts/functional/OWNERS create mode 100644 contexthub/1.2/vts/functional/VtsHalContexthubV1_2TargetTest.cpp diff --git a/compatibility_matrices/compatibility_matrix.current.xml b/compatibility_matrices/compatibility_matrix.current.xml index 0535955f50..b2a86805b9 100644 --- a/compatibility_matrices/compatibility_matrix.current.xml +++ b/compatibility_matrices/compatibility_matrix.current.xml @@ -177,7 +177,7 @@ android.hardware.contexthub - 1.0-1 + 1.0-2 IContexthub default diff --git a/contexthub/1.2/vts/functional/Android.bp b/contexthub/1.2/vts/functional/Android.bp new file mode 100644 index 0000000000..6e425be258 --- /dev/null +++ b/contexthub/1.2/vts/functional/Android.bp @@ -0,0 +1,31 @@ +// +// Copyright (C) 2020 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. +// + +cc_test { + name: "VtsHalContexthubV1_2TargetTest", + defaults: ["VtsHalTargetTestDefaults"], + srcs: ["VtsHalContexthubV1_2TargetTest.cpp"], + static_libs: [ + "android.hardware.contexthub@1.0", + "android.hardware.contexthub@1.1", + "android.hardware.contexthub@1.2", + "VtsHalContexthubUtils", + ], + test_suites: [ + "general-tests", + "vts", + ], +} diff --git a/contexthub/1.2/vts/functional/OWNERS b/contexthub/1.2/vts/functional/OWNERS new file mode 100644 index 0000000000..161b2f069d --- /dev/null +++ b/contexthub/1.2/vts/functional/OWNERS @@ -0,0 +1,8 @@ +#Context Hub team +arthuri@google.com +bduddie@google.com +stange@google.com + +#VTS team +dshi@google.com +trong@google.com diff --git a/contexthub/1.2/vts/functional/VtsHalContexthubV1_2TargetTest.cpp b/contexthub/1.2/vts/functional/VtsHalContexthubV1_2TargetTest.cpp new file mode 100644 index 0000000000..77883c2423 --- /dev/null +++ b/contexthub/1.2/vts/functional/VtsHalContexthubV1_2TargetTest.cpp @@ -0,0 +1,69 @@ +/* + * Copyright (C) 2020 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 "contexthub_hidl_hal_test" + +#include "ContexthubCallbackBase.h" +#include "ContexthubHidlTestBase.h" +#include "VtsHalContexthubUtils.h" + +#include +#include +#include +#include +#include +#include +#include +#include +#include + +#include + +using ::android::hardware::contexthub::V1_1::SettingValue; +using ::android::hardware::contexthub::V1_2::IContexthub; +using ::android::hardware::contexthub::V1_2::Setting; +using ::android::hardware::contexthub::vts_utils::ContexthubCallbackBase; +using ::android::hardware::contexthub::vts_utils::ContexthubHidlTestBase; +using ::android::hardware::contexthub::vts_utils::getHalAndHubIdList; + +namespace { + +const std::vector> kTestParameters = + getHalAndHubIdList(); + +class ContexthubHidlTest : public ContexthubHidlTestBase {}; + +// In VTS, we only test that sending the values doesn't cause things to blow up - other test +// suites verify the expected E2E behavior in CHRE +TEST_P(ContexthubHidlTest, TestOnWifiSettingChanged) { + ASSERT_OK(registerCallback(new ContexthubCallbackBase())); + hubApi->onSettingChanged_1_2(Setting::WIFI_AVAILABLE, SettingValue::DISABLED); + hubApi->onSettingChanged_1_2(Setting::WIFI_AVAILABLE, SettingValue::ENABLED); + ASSERT_OK(registerCallback(nullptr)); +} + +TEST_P(ContexthubHidlTest, TestOnAirplaneModeSettingChanged) { + ASSERT_OK(registerCallback(new ContexthubCallbackBase())); + hubApi->onSettingChanged_1_2(Setting::AIRPLANE_MODE, SettingValue::DISABLED); + hubApi->onSettingChanged_1_2(Setting::AIRPLANE_MODE, SettingValue::ENABLED); + ASSERT_OK(registerCallback(nullptr)); +} + +GTEST_ALLOW_UNINSTANTIATED_PARAMETERIZED_TEST(ContexthubHidlTest); +INSTANTIATE_TEST_SUITE_P(HubIdSpecificTests, ContexthubHidlTest, testing::ValuesIn(kTestParameters), + android::hardware::PrintInstanceTupleNameToString<>); + +} // anonymous namespace