Add default impl for health storage AIDL HAL am: feed84d11d

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

MUST ONLY BE SUBMITTED BY AUTOMERGER

Change-Id: I754f174b99367b60f17f5548e7df814f852e9b9e
This commit is contained in:
Yifan Hong
2021-01-20 20:00:49 +00:00
committed by Automerger Merge Worker
6 changed files with 188 additions and 0 deletions

View File

@@ -0,0 +1,53 @@
/*
* Copyright (C) 2021 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_defaults {
name: "libhealth_storage_impl_defaults",
vendor: true,
shared_libs: [
"libbase",
"libbinder_ndk",
"android.hardware.health.storage-unstable-ndk_platform",
],
static_libs: [
"libfstab",
"libhealth_storage_impl_common",
],
}
cc_library_static {
name: "libhealth_storage_default_impl",
defaults: ["libhealth_storage_impl_defaults"],
srcs: [
"Storage.cpp",
],
visibility: [
":__subpackages__",
"//hardware/interfaces/tests/extension/health/storage:__subpackages__",
],
}
cc_binary {
name: "android.hardware.health.storage-service.default",
defaults: ["libhealth_storage_impl_defaults"],
relative_install_path: "hw",
init_rc: ["health-storage-default.rc"],
vintf_fragments: ["health-storage-default.xml"],
srcs: ["main.cpp"],
static_libs: [
"libhealth_storage_default_impl",
],
}

View File

@@ -0,0 +1,54 @@
/*
* Copyright (C) 2021 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 "Storage.h"
#include <sstream>
#include <android-base/logging.h>
#include <health-storage-impl/common.h>
using ::android::hardware::health::storage::DebugDump;
using ::android::hardware::health::storage::GarbageCollect;
using HResult = android::hardware::health::storage::V1_0::Result;
using AResult = aidl::android::hardware::health::storage::Result;
// Ensure static_cast<AResult>(any HResult) works
static_assert(static_cast<AResult>(HResult::SUCCESS) == AResult::SUCCESS);
static_assert(static_cast<AResult>(HResult::IO_ERROR) == AResult::IO_ERROR);
static_assert(static_cast<AResult>(HResult::UNKNOWN_ERROR) == AResult::UNKNOWN_ERROR);
namespace aidl::android::hardware::health::storage {
ndk::ScopedAStatus Storage::garbageCollect(
int64_t timeout_seconds, const std::shared_ptr<IGarbageCollectCallback>& callback) {
AResult result = static_cast<AResult>(GarbageCollect(static_cast<uint64_t>(timeout_seconds)));
if (callback != nullptr) {
auto status = callback->onFinish(result);
if (!status.isOk()) {
LOG(WARNING) << "Cannot return result " << toString(result)
<< " to callback: " << status.getDescription();
}
}
return ndk::ScopedAStatus::ok();
}
binder_status_t Storage::dump(int fd, const char**, uint32_t) {
DebugDump(fd);
return STATUS_OK;
}
} // namespace aidl::android::hardware::health::storage

View File

@@ -0,0 +1,30 @@
/*
* Copyright (C) 2021 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 <aidl/android/hardware/health/storage/BnStorage.h>
namespace aidl::android::hardware::health::storage {
class Storage : public BnStorage {
ndk::ScopedAStatus garbageCollect(
int64_t timeout_seconds,
const std::shared_ptr<IGarbageCollectCallback>& callback) override;
binder_status_t dump(int fd, const char** args, uint32_t num_args) override;
};
} // namespace aidl::android::hardware::health::storage

View File

@@ -0,0 +1,7 @@
service vendor.health-storage-default /vendor/bin/hw/android.hardware.health.storage-service.default
interface aidl android.hardware.health.storage.IStorage/default
oneshot
disabled
class hal
user system
group system

View File

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

View File

@@ -0,0 +1,37 @@
/*
* Copyright (C) 2021 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 <android-base/logging.h>
#include <android/binder_manager.h>
#include <android/binder_process.h>
#include "Storage.h"
using aidl::android::hardware::health::storage::Storage;
using std::string_literals::operator""s;
int main() {
ABinderProcess_setThreadPoolMaxThreadCount(0);
// make a default storage service
auto storage = ndk::SharedRefBase::make<Storage>();
const std::string name = Storage::descriptor + "/default"s;
CHECK_EQ(STATUS_OK,
AServiceManager_registerLazyService(storage->asBinder().get(), name.c_str()));
ABinderProcess_joinThreadPool();
return EXIT_FAILURE; // should not reach
}