diff --git a/contexthub/1.1/default/Android.bp b/contexthub/1.1/default/Android.bp new file mode 100644 index 0000000000..86858c0377 --- /dev/null +++ b/contexthub/1.1/default/Android.bp @@ -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. + */ + +cc_binary { + name: "android.hardware.contexthub@1.1-service.mock", + defaults: ["hidl_defaults"], + vendor: true, + relative_install_path: "hw", + init_rc: ["android.hardware.contexthub@1.1-service.rc"], + srcs: [ + "Contexthub.cpp", + "service.cpp", + ], + cflags: [ + "-Wall", + "-Werror", + ], + shared_libs: [ + "android.hardware.contexthub@1.0", + "android.hardware.contexthub@1.1", + "libbase", + "libcutils", + "libhardware", + "libhidlbase", + "liblog", + "libutils", + ], + vintf_fragments: ["android.hardware.contexthub@1.1.xml"], +} diff --git a/contexthub/1.1/default/Contexthub.cpp b/contexthub/1.1/default/Contexthub.cpp new file mode 100644 index 0000000000..19cc2628d7 --- /dev/null +++ b/contexthub/1.1/default/Contexthub.cpp @@ -0,0 +1,109 @@ +/* + * 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_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(); +} + +} // namespace implementation +} // namespace V1_1 +} // namespace contexthub +} // namespace hardware +} // namespace android diff --git a/contexthub/1.1/default/Contexthub.h b/contexthub/1.1/default/Contexthub.h new file mode 100644 index 0000000000..0da61d1464 --- /dev/null +++ b/contexthub/1.1/default/Contexthub.h @@ -0,0 +1,56 @@ +/* + * 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 + +namespace android { +namespace hardware { +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; + + 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 +} // namespace V1_1 +} // namespace contexthub +} // namespace hardware +} // namespace android diff --git a/contexthub/1.1/default/OWNERS b/contexthub/1.1/default/OWNERS new file mode 100644 index 0000000000..90c233030e --- /dev/null +++ b/contexthub/1.1/default/OWNERS @@ -0,0 +1,3 @@ +arthuri@google.com +bduddie@google.com +stange@google.com diff --git a/contexthub/1.1/default/android.hardware.contexthub@1.1-service.rc b/contexthub/1.1/default/android.hardware.contexthub@1.1-service.rc new file mode 100644 index 0000000000..9db00f9bf0 --- /dev/null +++ b/contexthub/1.1/default/android.hardware.contexthub@1.1-service.rc @@ -0,0 +1,6 @@ +service vendor.contexthub-hal-1-1-mock /vendor/bin/hw/android.hardware.contexthub@1.1-service.mock + interface android.hardware.contexthub@1.0::IContexthub default + interface android.hardware.contexthub@1.1::IContexthub default + class hal + user system + group system diff --git a/contexthub/1.1/default/android.hardware.contexthub@1.1.xml b/contexthub/1.1/default/android.hardware.contexthub@1.1.xml new file mode 100644 index 0000000000..388f7815f8 --- /dev/null +++ b/contexthub/1.1/default/android.hardware.contexthub@1.1.xml @@ -0,0 +1,11 @@ + + + android.hardware.contexthub + hwbinder + 1.1 + + IContexthub + default + + + diff --git a/contexthub/1.1/default/service.cpp b/contexthub/1.1/default/service.cpp new file mode 100644 index 0000000000..c5643f16df --- /dev/null +++ b/contexthub/1.1/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.1-service" + +#include +#include +#include +#include +#include "Contexthub.h" + +using ::android::hardware::configureRpcThreadpool; +using ::android::hardware::joinRpcThreadpool; +using ::android::hardware::contexthub::V1_1::IContexthub; +using ::android::hardware::contexthub::V1_1::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; +}