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