Merge changes from topic 'configstore'

* changes:
  configstore: build configstore-utils as header library
  configstore: add new configuration item
  configstore: add utility library functions for configstore
  configstore: add configstore@1.0 HAL
This commit is contained in:
Jaesoo Lee
2017-03-14 06:44:11 +00:00
committed by Gerrit Code Review
13 changed files with 735 additions and 0 deletions

View File

@@ -0,0 +1,62 @@
// This file is autogenerated by hidl-gen. Do not edit manually.
filegroup {
name: "android.hardware.configstore@1.0_hal",
srcs: [
"types.hal",
"ISurfaceFlingerConfigs.hal",
],
}
genrule {
name: "android.hardware.configstore@1.0_genc++",
tools: ["hidl-gen"],
cmd: "$(location hidl-gen) -o $(genDir) -Lc++ -randroid.hardware:hardware/interfaces -randroid.hidl:system/libhidl/transport android.hardware.configstore@1.0",
srcs: [
":android.hardware.configstore@1.0_hal",
],
out: [
"android/hardware/configstore/1.0/types.cpp",
"android/hardware/configstore/1.0/SurfaceFlingerConfigsAll.cpp",
],
}
genrule {
name: "android.hardware.configstore@1.0_genc++_headers",
tools: ["hidl-gen"],
cmd: "$(location hidl-gen) -o $(genDir) -Lc++ -randroid.hardware:hardware/interfaces -randroid.hidl:system/libhidl/transport android.hardware.configstore@1.0",
srcs: [
":android.hardware.configstore@1.0_hal",
],
out: [
"android/hardware/configstore/1.0/types.h",
"android/hardware/configstore/1.0/ISurfaceFlingerConfigs.h",
"android/hardware/configstore/1.0/IHwSurfaceFlingerConfigs.h",
"android/hardware/configstore/1.0/BnHwSurfaceFlingerConfigs.h",
"android/hardware/configstore/1.0/BpHwSurfaceFlingerConfigs.h",
"android/hardware/configstore/1.0/BsSurfaceFlingerConfigs.h",
],
}
cc_library_shared {
name: "android.hardware.configstore@1.0",
generated_sources: ["android.hardware.configstore@1.0_genc++"],
generated_headers: ["android.hardware.configstore@1.0_genc++_headers"],
export_generated_headers: ["android.hardware.configstore@1.0_genc++_headers"],
shared_libs: [
"libhidlbase",
"libhidltransport",
"libhwbinder",
"liblog",
"libutils",
"libcutils",
"android.hidl.base@1.0",
],
export_shared_lib_headers: [
"libhidlbase",
"libhidltransport",
"libhwbinder",
"libutils",
"android.hidl.base@1.0",
],
}

308
configstore/1.0/Android.mk Normal file
View File

@@ -0,0 +1,308 @@
# This file is autogenerated by hidl-gen. Do not edit manually.
LOCAL_PATH := $(call my-dir)
################################################################################
include $(CLEAR_VARS)
LOCAL_MODULE := android.hardware.configstore@1.0-java
LOCAL_MODULE_CLASS := JAVA_LIBRARIES
intermediates := $(call local-generated-sources-dir, COMMON)
HIDL := $(HOST_OUT_EXECUTABLES)/hidl-gen$(HOST_EXECUTABLE_SUFFIX)
LOCAL_JAVA_LIBRARIES := \
android.hidl.base@1.0-java \
#
# Build types.hal (OptionalBool)
#
GEN := $(intermediates)/android/hardware/configstore/V1_0/OptionalBool.java
$(GEN): $(HIDL)
$(GEN): PRIVATE_HIDL := $(HIDL)
$(GEN): PRIVATE_DEPS := $(LOCAL_PATH)/types.hal
$(GEN): PRIVATE_OUTPUT_DIR := $(intermediates)
$(GEN): PRIVATE_CUSTOM_TOOL = \
$(PRIVATE_HIDL) -o $(PRIVATE_OUTPUT_DIR) \
-Ljava \
-randroid.hardware:hardware/interfaces \
-randroid.hidl:system/libhidl/transport \
android.hardware.configstore@1.0::types.OptionalBool
$(GEN): $(LOCAL_PATH)/types.hal
$(transform-generated-source)
LOCAL_GENERATED_SOURCES += $(GEN)
#
# Build types.hal (OptionalInt32)
#
GEN := $(intermediates)/android/hardware/configstore/V1_0/OptionalInt32.java
$(GEN): $(HIDL)
$(GEN): PRIVATE_HIDL := $(HIDL)
$(GEN): PRIVATE_DEPS := $(LOCAL_PATH)/types.hal
$(GEN): PRIVATE_OUTPUT_DIR := $(intermediates)
$(GEN): PRIVATE_CUSTOM_TOOL = \
$(PRIVATE_HIDL) -o $(PRIVATE_OUTPUT_DIR) \
-Ljava \
-randroid.hardware:hardware/interfaces \
-randroid.hidl:system/libhidl/transport \
android.hardware.configstore@1.0::types.OptionalInt32
$(GEN): $(LOCAL_PATH)/types.hal
$(transform-generated-source)
LOCAL_GENERATED_SOURCES += $(GEN)
#
# Build types.hal (OptionalInt64)
#
GEN := $(intermediates)/android/hardware/configstore/V1_0/OptionalInt64.java
$(GEN): $(HIDL)
$(GEN): PRIVATE_HIDL := $(HIDL)
$(GEN): PRIVATE_DEPS := $(LOCAL_PATH)/types.hal
$(GEN): PRIVATE_OUTPUT_DIR := $(intermediates)
$(GEN): PRIVATE_CUSTOM_TOOL = \
$(PRIVATE_HIDL) -o $(PRIVATE_OUTPUT_DIR) \
-Ljava \
-randroid.hardware:hardware/interfaces \
-randroid.hidl:system/libhidl/transport \
android.hardware.configstore@1.0::types.OptionalInt64
$(GEN): $(LOCAL_PATH)/types.hal
$(transform-generated-source)
LOCAL_GENERATED_SOURCES += $(GEN)
#
# Build types.hal (OptionalString)
#
GEN := $(intermediates)/android/hardware/configstore/V1_0/OptionalString.java
$(GEN): $(HIDL)
$(GEN): PRIVATE_HIDL := $(HIDL)
$(GEN): PRIVATE_DEPS := $(LOCAL_PATH)/types.hal
$(GEN): PRIVATE_OUTPUT_DIR := $(intermediates)
$(GEN): PRIVATE_CUSTOM_TOOL = \
$(PRIVATE_HIDL) -o $(PRIVATE_OUTPUT_DIR) \
-Ljava \
-randroid.hardware:hardware/interfaces \
-randroid.hidl:system/libhidl/transport \
android.hardware.configstore@1.0::types.OptionalString
$(GEN): $(LOCAL_PATH)/types.hal
$(transform-generated-source)
LOCAL_GENERATED_SOURCES += $(GEN)
#
# Build types.hal (OptionalUInt32)
#
GEN := $(intermediates)/android/hardware/configstore/V1_0/OptionalUInt32.java
$(GEN): $(HIDL)
$(GEN): PRIVATE_HIDL := $(HIDL)
$(GEN): PRIVATE_DEPS := $(LOCAL_PATH)/types.hal
$(GEN): PRIVATE_OUTPUT_DIR := $(intermediates)
$(GEN): PRIVATE_CUSTOM_TOOL = \
$(PRIVATE_HIDL) -o $(PRIVATE_OUTPUT_DIR) \
-Ljava \
-randroid.hardware:hardware/interfaces \
-randroid.hidl:system/libhidl/transport \
android.hardware.configstore@1.0::types.OptionalUInt32
$(GEN): $(LOCAL_PATH)/types.hal
$(transform-generated-source)
LOCAL_GENERATED_SOURCES += $(GEN)
#
# Build types.hal (OptionalUInt64)
#
GEN := $(intermediates)/android/hardware/configstore/V1_0/OptionalUInt64.java
$(GEN): $(HIDL)
$(GEN): PRIVATE_HIDL := $(HIDL)
$(GEN): PRIVATE_DEPS := $(LOCAL_PATH)/types.hal
$(GEN): PRIVATE_OUTPUT_DIR := $(intermediates)
$(GEN): PRIVATE_CUSTOM_TOOL = \
$(PRIVATE_HIDL) -o $(PRIVATE_OUTPUT_DIR) \
-Ljava \
-randroid.hardware:hardware/interfaces \
-randroid.hidl:system/libhidl/transport \
android.hardware.configstore@1.0::types.OptionalUInt64
$(GEN): $(LOCAL_PATH)/types.hal
$(transform-generated-source)
LOCAL_GENERATED_SOURCES += $(GEN)
#
# Build ISurfaceFlingerConfigs.hal
#
GEN := $(intermediates)/android/hardware/configstore/V1_0/ISurfaceFlingerConfigs.java
$(GEN): $(HIDL)
$(GEN): PRIVATE_HIDL := $(HIDL)
$(GEN): PRIVATE_DEPS := $(LOCAL_PATH)/ISurfaceFlingerConfigs.hal
$(GEN): PRIVATE_DEPS += $(LOCAL_PATH)/types.hal
$(GEN): $(LOCAL_PATH)/types.hal
$(GEN): PRIVATE_OUTPUT_DIR := $(intermediates)
$(GEN): PRIVATE_CUSTOM_TOOL = \
$(PRIVATE_HIDL) -o $(PRIVATE_OUTPUT_DIR) \
-Ljava \
-randroid.hardware:hardware/interfaces \
-randroid.hidl:system/libhidl/transport \
android.hardware.configstore@1.0::ISurfaceFlingerConfigs
$(GEN): $(LOCAL_PATH)/ISurfaceFlingerConfigs.hal
$(transform-generated-source)
LOCAL_GENERATED_SOURCES += $(GEN)
include $(BUILD_JAVA_LIBRARY)
################################################################################
include $(CLEAR_VARS)
LOCAL_MODULE := android.hardware.configstore@1.0-java-static
LOCAL_MODULE_CLASS := JAVA_LIBRARIES
intermediates := $(call local-generated-sources-dir, COMMON)
HIDL := $(HOST_OUT_EXECUTABLES)/hidl-gen$(HOST_EXECUTABLE_SUFFIX)
LOCAL_STATIC_JAVA_LIBRARIES := \
android.hidl.base@1.0-java-static \
#
# Build types.hal (OptionalBool)
#
GEN := $(intermediates)/android/hardware/configstore/V1_0/OptionalBool.java
$(GEN): $(HIDL)
$(GEN): PRIVATE_HIDL := $(HIDL)
$(GEN): PRIVATE_DEPS := $(LOCAL_PATH)/types.hal
$(GEN): PRIVATE_OUTPUT_DIR := $(intermediates)
$(GEN): PRIVATE_CUSTOM_TOOL = \
$(PRIVATE_HIDL) -o $(PRIVATE_OUTPUT_DIR) \
-Ljava \
-randroid.hardware:hardware/interfaces \
-randroid.hidl:system/libhidl/transport \
android.hardware.configstore@1.0::types.OptionalBool
$(GEN): $(LOCAL_PATH)/types.hal
$(transform-generated-source)
LOCAL_GENERATED_SOURCES += $(GEN)
#
# Build types.hal (OptionalInt32)
#
GEN := $(intermediates)/android/hardware/configstore/V1_0/OptionalInt32.java
$(GEN): $(HIDL)
$(GEN): PRIVATE_HIDL := $(HIDL)
$(GEN): PRIVATE_DEPS := $(LOCAL_PATH)/types.hal
$(GEN): PRIVATE_OUTPUT_DIR := $(intermediates)
$(GEN): PRIVATE_CUSTOM_TOOL = \
$(PRIVATE_HIDL) -o $(PRIVATE_OUTPUT_DIR) \
-Ljava \
-randroid.hardware:hardware/interfaces \
-randroid.hidl:system/libhidl/transport \
android.hardware.configstore@1.0::types.OptionalInt32
$(GEN): $(LOCAL_PATH)/types.hal
$(transform-generated-source)
LOCAL_GENERATED_SOURCES += $(GEN)
#
# Build types.hal (OptionalInt64)
#
GEN := $(intermediates)/android/hardware/configstore/V1_0/OptionalInt64.java
$(GEN): $(HIDL)
$(GEN): PRIVATE_HIDL := $(HIDL)
$(GEN): PRIVATE_DEPS := $(LOCAL_PATH)/types.hal
$(GEN): PRIVATE_OUTPUT_DIR := $(intermediates)
$(GEN): PRIVATE_CUSTOM_TOOL = \
$(PRIVATE_HIDL) -o $(PRIVATE_OUTPUT_DIR) \
-Ljava \
-randroid.hardware:hardware/interfaces \
-randroid.hidl:system/libhidl/transport \
android.hardware.configstore@1.0::types.OptionalInt64
$(GEN): $(LOCAL_PATH)/types.hal
$(transform-generated-source)
LOCAL_GENERATED_SOURCES += $(GEN)
#
# Build types.hal (OptionalString)
#
GEN := $(intermediates)/android/hardware/configstore/V1_0/OptionalString.java
$(GEN): $(HIDL)
$(GEN): PRIVATE_HIDL := $(HIDL)
$(GEN): PRIVATE_DEPS := $(LOCAL_PATH)/types.hal
$(GEN): PRIVATE_OUTPUT_DIR := $(intermediates)
$(GEN): PRIVATE_CUSTOM_TOOL = \
$(PRIVATE_HIDL) -o $(PRIVATE_OUTPUT_DIR) \
-Ljava \
-randroid.hardware:hardware/interfaces \
-randroid.hidl:system/libhidl/transport \
android.hardware.configstore@1.0::types.OptionalString
$(GEN): $(LOCAL_PATH)/types.hal
$(transform-generated-source)
LOCAL_GENERATED_SOURCES += $(GEN)
#
# Build types.hal (OptionalUInt32)
#
GEN := $(intermediates)/android/hardware/configstore/V1_0/OptionalUInt32.java
$(GEN): $(HIDL)
$(GEN): PRIVATE_HIDL := $(HIDL)
$(GEN): PRIVATE_DEPS := $(LOCAL_PATH)/types.hal
$(GEN): PRIVATE_OUTPUT_DIR := $(intermediates)
$(GEN): PRIVATE_CUSTOM_TOOL = \
$(PRIVATE_HIDL) -o $(PRIVATE_OUTPUT_DIR) \
-Ljava \
-randroid.hardware:hardware/interfaces \
-randroid.hidl:system/libhidl/transport \
android.hardware.configstore@1.0::types.OptionalUInt32
$(GEN): $(LOCAL_PATH)/types.hal
$(transform-generated-source)
LOCAL_GENERATED_SOURCES += $(GEN)
#
# Build types.hal (OptionalUInt64)
#
GEN := $(intermediates)/android/hardware/configstore/V1_0/OptionalUInt64.java
$(GEN): $(HIDL)
$(GEN): PRIVATE_HIDL := $(HIDL)
$(GEN): PRIVATE_DEPS := $(LOCAL_PATH)/types.hal
$(GEN): PRIVATE_OUTPUT_DIR := $(intermediates)
$(GEN): PRIVATE_CUSTOM_TOOL = \
$(PRIVATE_HIDL) -o $(PRIVATE_OUTPUT_DIR) \
-Ljava \
-randroid.hardware:hardware/interfaces \
-randroid.hidl:system/libhidl/transport \
android.hardware.configstore@1.0::types.OptionalUInt64
$(GEN): $(LOCAL_PATH)/types.hal
$(transform-generated-source)
LOCAL_GENERATED_SOURCES += $(GEN)
#
# Build ISurfaceFlingerConfigs.hal
#
GEN := $(intermediates)/android/hardware/configstore/V1_0/ISurfaceFlingerConfigs.java
$(GEN): $(HIDL)
$(GEN): PRIVATE_HIDL := $(HIDL)
$(GEN): PRIVATE_DEPS := $(LOCAL_PATH)/ISurfaceFlingerConfigs.hal
$(GEN): PRIVATE_DEPS += $(LOCAL_PATH)/types.hal
$(GEN): $(LOCAL_PATH)/types.hal
$(GEN): PRIVATE_OUTPUT_DIR := $(intermediates)
$(GEN): PRIVATE_CUSTOM_TOOL = \
$(PRIVATE_HIDL) -o $(PRIVATE_OUTPUT_DIR) \
-Ljava \
-randroid.hardware:hardware/interfaces \
-randroid.hidl:system/libhidl/transport \
android.hardware.configstore@1.0::ISurfaceFlingerConfigs
$(GEN): $(LOCAL_PATH)/ISurfaceFlingerConfigs.hal
$(transform-generated-source)
LOCAL_GENERATED_SOURCES += $(GEN)
include $(BUILD_STATIC_JAVA_LIBRARY)
include $(call all-makefiles-under,$(LOCAL_PATH))

View File

@@ -0,0 +1,21 @@
/*
* Copyright (C) 2017 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.configstore@1.0;
interface ISurfaceFlingerConfigs {
vsyncEventPhaseOffsetNs() generates (OptionalInt64 value);
useTripleFramebuffer() generates (OptionalBool value);
};

View File

@@ -0,0 +1,40 @@
LOCAL_PATH := $(call my-dir)
################################################################################
include $(CLEAR_VARS)
LOCAL_MODULE := android.hardware.configstore@1.0-impl
LOCAL_PROPRIETARY_MODULE := true
LOCAL_MODULE_CLASS := SHARED_LIBRARIES
LOCAL_MODULE_RELATIVE_PATH := hw
include $(LOCAL_PATH)/surfaceflinger.mk
LOCAL_SHARED_LIBRARIES := \
libbase \
libhidlbase \
libhidltransport \
libutils \
android.hardware.configstore@1.0 \
android.hidl.base@1.0
include $(BUILD_SHARED_LIBRARY)
################################################################################
include $(CLEAR_VARS)
LOCAL_MODULE := android.hardware.configstore@1.0-service
LOCAL_PROPRIETARY_MODULE := true
LOCAL_MODULE_CLASS := EXECUTABLES
LOCAL_MODULE_RELATIVE_PATH := hw
LOCAL_INIT_RC := android.hardware.configstore@1.0-service.rc
LOCAL_SRC_FILES:= service.cpp
LOCAL_SHARED_LIBRARIES := \
liblog \
libdl \
libutils \
libhidlbase \
libhidltransport \
android.hardware.configstore@1.0 \
include $(BUILD_EXECUTABLE)

View File

@@ -0,0 +1,42 @@
#include "SurfaceFlingerConfigs.h"
#include <android-base/logging.h>
namespace android {
namespace hardware {
namespace configstore {
namespace V1_0 {
namespace implementation {
// Methods from ::android::hardware::configstore::V1_0::ISurfaceFlingerConfigs follow.
Return<void> SurfaceFlingerConfigs::vsyncEventPhaseOffsetNs(vsyncEventPhaseOffsetNs_cb _hidl_cb) {
#ifdef VSYNC_EVENT_PHASE_OFFSET_NS
_hidl_cb({true, VSYNC_EVENT_PHASE_OFFSET_NS});
LOG(INFO) << "vsync event phase offset ns = " << VSYNC_EVENT_PHASE_OFFSET_NS;
#else
_hidl_cb({false, 0});
#endif
return Void();
}
Return<void> SurfaceFlingerConfigs::useTripleFramebuffer(useTripleFramebuffer_cb _hidl_cb) {
bool value = false;
#ifdef USE_TRIPLE_FRAMEBUFFER
value = true;
#endif
_hidl_cb({true, value});
LOG(INFO) << "SurfaceFlinger FrameBuffer: " << (value ? "triple" : "double");
return Void();
}
// Methods from ::android::hidl::base::V1_0::IBase follow.
ISurfaceFlingerConfigs* HIDL_FETCH_ISurfaceFlingerConfigs(const char* /* name */) {
return new SurfaceFlingerConfigs();
}
} // namespace implementation
} // namespace V1_0
} // namespace configstore
} // namespace hardware
} // namespace android

View File

@@ -0,0 +1,42 @@
#ifndef ANDROID_HARDWARE_CONFIGSTORE_V1_0_SURFACEFLINGERCONFIGS_H
#define ANDROID_HARDWARE_CONFIGSTORE_V1_0_SURFACEFLINGERCONFIGS_H
#include <android/hardware/configstore/1.0/ISurfaceFlingerConfigs.h>
#include <hidl/MQDescriptor.h>
#include <hidl/Status.h>
namespace android {
namespace hardware {
namespace configstore {
namespace V1_0 {
namespace implementation {
using ::android::hardware::configstore::V1_0::ISurfaceFlingerConfigs;
using ::android::hardware::configstore::V1_0::OptionalBool;
using ::android::hidl::base::V1_0::IBase;
using ::android::hardware::hidl_array;
using ::android::hardware::hidl_memory;
using ::android::hardware::hidl_string;
using ::android::hardware::hidl_vec;
using ::android::hardware::Return;
using ::android::hardware::Void;
using ::android::sp;
struct SurfaceFlingerConfigs : public ISurfaceFlingerConfigs {
// Methods from ::android::hardware::configstore::V1_0::ISurfaceFlingerConfigs follow.
Return<void> vsyncEventPhaseOffsetNs(vsyncEventPhaseOffsetNs_cb _hidl_cb) override;
Return<void> useTripleFramebuffer(useTripleFramebuffer_cb _hidl_cb) override;
// Methods from ::android::hidl::base::V1_0::IBase follow.
};
extern "C" ISurfaceFlingerConfigs* HIDL_FETCH_ISurfaceFlingerConfigs(const char* name);
} // namespace implementation
} // namespace V1_0
} // namespace configstore
} // namespace hardware
} // namespace android
#endif // ANDROID_HARDWARE_CONFIGSTORE_V1_0_SURFACEFLINGERCONFIGS_H

View File

@@ -0,0 +1,4 @@
service configstore-hal-1-0 /vendor/bin/hw/android.hardware.configstore@1.0-service
class hal
user system
group system

View File

@@ -0,0 +1,34 @@
/*
* Copyright (C) 2017 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.configstore@1.0-service"
#include <android/hardware/configstore/1.0/ISurfaceFlingerConfigs.h>
#include <hidl/LegacySupport.h>
using android::hardware::configstore::V1_0::ISurfaceFlingerConfigs;
using android::hardware::configureRpcThreadpool;
using android::hardware::registerPassthroughServiceImplementation;
using android::hardware::joinRpcThreadpool;
int main() {
// TODO(b/34857894): tune the max thread count.
configureRpcThreadpool(10, true);
registerPassthroughServiceImplementation<ISurfaceFlingerConfigs>();
// other interface registration comes here
joinRpcThreadpool();
return 0;
}

View File

@@ -0,0 +1,10 @@
LOCAL_SRC_FILES += SurfaceFlingerConfigs.cpp
ifneq ($(VSYNC_EVENT_PHASE_OFFSET_NS),)
LOCAL_CFLAGS += -DVSYNC_EVENT_PHASE_OFFSET_NS=$(VSYNC_EVENT_PHASE_OFFSET_NS)
endif
ifeq ($(NUM_FRAMEBUFFER_SURFACE_BUFFERS),3)
LOCAL_CFLAGS += -DUSE_TRIPLE_FRAMEBUFFER
endif

46
configstore/1.0/types.hal Normal file
View File

@@ -0,0 +1,46 @@
/*
* Copyright (C) 2017 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.configstore@1.0;
struct OptionalBool {
bool specified;
bool value;
};
struct OptionalInt32 {
bool specified;
int32_t value;
};
struct OptionalUInt32 {
bool specified;
uint32_t value;
};
struct OptionalInt64 {
bool specified;
int64_t value;
};
struct OptionalUInt64 {
bool specified;
uint64_t value;
};
struct OptionalString {
bool specified;
string value;
};

5
configstore/Android.bp Normal file
View File

@@ -0,0 +1,5 @@
// This is an autogenerated file, do not edit.
subdirs = [
"1.0",
"utils",
]

View File

@@ -0,0 +1,27 @@
//
// Copyright (C) 2017 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.configstore-utils",
defaults: ["hidl_defaults"],
export_include_dirs: ["include"],
shared_libs: [
"libhidlbase"
],
export_shared_lib_headers: [
"libhidlbase"
],
}

View File

@@ -0,0 +1,94 @@
//
// Copyright (C) 2017 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_CONFIGSTORE_UTILS_H
#define ANDROID_HARDWARE_CONFIGSTORE_UTILS_H
#include <hidl/Status.h>
#include <stdatomic.h>
namespace android {
namespace hardware {
namespace configstore {
// arguments V: type for the value (i.e., OptionalXXX)
// I: interface class name
// func: member function pointer
using namespace V1_0;
template<typename V, typename I, android::hardware::Return<void> (I::* func)
(std::function<void(const V&)>)>
decltype(V::value) get(const decltype(V::value) &defValue) {
auto getHelper = []()->V {
V ret;
sp<I> configs = I::getService();
if (!configs.get()) {
// fallback to the default value
ret.specified = false;
} else {
(*configs.*func)([&ret](V v) {
ret = v;
});
}
return ret;
};
static V cachedValue = getHelper();
return cachedValue.specified ? cachedValue.value : defValue;
}
template<typename I, android::hardware::Return<void> (I::* func)
(std::function<void(const OptionalBool&)>)>
bool getBool(const bool defValue) {
return get<OptionalBool, I, func>(defValue);
}
template<typename I, android::hardware::Return<void> (I::* func)
(std::function<void(const OptionalInt32&)>)>
int32_t getInt32(const int32_t defValue) {
return get<OptionalInt32, I, func>(defValue);
}
template<typename I, android::hardware::Return<void> (I::* func)
(std::function<void(const OptionalUInt32&)>)>
uint32_t getUInt32(const uint32_t defValue) {
return get<OptionalUInt32, I, func>(defValue);
}
template<typename I, android::hardware::Return<void> (I::* func)
(std::function<void(const OptionalInt64&)>)>
int64_t getInt64(const int64_t defValue) {
return get<OptionalInt64, I, func>(defValue);
}
template<typename I, android::hardware::Return<void> (I::* func)
(std::function<void(const OptionalUInt64&)>)>
uint64_t getUInt64(const uint64_t defValue) {
return get<OptionalUInt64, I, func>(defValue);
}
template<typename I, android::hardware::Return<void> (I::* func)
(std::function<void(const OptionalString&)>)>
std::string getString(const std::string &defValue) {
return get<OptionalString, I, func>(defValue);
}
} // namespace configstore
} // namespace hardware
} // namespace android
#endif // ANDROID_HARDWARE_CONFIGSTORE_UTILS_H