Added example vendor extension for light.

Test: make
Bug: 32065239
Change-Id: I8004eaea180d768ccdec0e932d08c1167f5c10cd
This commit is contained in:
Steven Moreland 2016-10-14 12:27:48 -07:00
parent 7233539cf3
commit 08484f825d
10 changed files with 488 additions and 3 deletions

View file

@ -5,10 +5,10 @@ subdirs = [
"audio/effect/2.0",
"benchmarks/msgq/1.0",
"biometrics/fingerprint/2.1",
"boot/1.0",
"boot/1.0/default",
"gnss/1.0",
"bluetooth/1.0",
"boot/1.0",
"example/extension/light/2.0",
"gnss/1.0",
"graphics/allocator/2.0",
"graphics/allocator/2.0/default",
"graphics/composer/2.1",

View file

@ -0,0 +1,47 @@
// This file is autogenerated by hidl-gen. Do not edit manually.
genrule {
name: "android.hardware.example.extension.light@2.0_genc++",
tool: "hidl-gen",
cmd: "$tool -o $genDir -Lc++ -randroid.hardware:hardware/interfaces android.hardware.example.extension.light@2.0",
srcs: [
"types.hal",
"IExtLight.hal",
],
out: [
"android/hardware/example/extension/light/2.0/types.cpp",
"android/hardware/example/extension/light/2.0/ExtLightAll.cpp",
],
}
genrule {
name: "android.hardware.example.extension.light@2.0_genc++_headers",
tool: "hidl-gen",
cmd: "$tool -o $genDir -Lc++ -randroid.hardware:hardware/interfaces android.hardware.example.extension.light@2.0",
srcs: [
"types.hal",
"IExtLight.hal",
],
out: [
"android/hardware/example/extension/light/2.0/types.h",
"android/hardware/example/extension/light/2.0/IExtLight.h",
"android/hardware/example/extension/light/2.0/IHwExtLight.h",
"android/hardware/example/extension/light/2.0/BnExtLight.h",
"android/hardware/example/extension/light/2.0/BpExtLight.h",
"android/hardware/example/extension/light/2.0/BsExtLight.h",
],
}
cc_library_shared {
name: "android.hardware.example.extension.light@2.0",
generated_sources: ["android.hardware.example.extension.light@2.0_genc++"],
generated_headers: ["android.hardware.example.extension.light@2.0_genc++_headers"],
export_generated_headers: ["android.hardware.example.extension.light@2.0_genc++_headers"],
shared_libs: [
"libhidl",
"libhwbinder",
"libutils",
"libcutils",
"android.hardware.light@2.0",
],
}

View file

@ -0,0 +1,178 @@
# This file is autogenerated by hidl-gen. Do not edit manually.
LOCAL_PATH := $(call my-dir)
################################################################################
include $(CLEAR_VARS)
LOCAL_MODULE := android.hardware.example.extension.light@2.0-java
LOCAL_MODULE_CLASS := JAVA_LIBRARIES
intermediates := $(local-generated-sources-dir)
HIDL := $(HOST_OUT_EXECUTABLES)/hidl-gen$(HOST_EXECUTABLE_SUFFIX)
LOCAL_JAVA_LIBRARIES := \
android.hardware.light@2.0-java \
#
# Build types.hal (Default)
#
GEN := $(intermediates)/android/hardware/example/extension/light/2.0/Default.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 \
android.hardware.example.extension.light@2.0::types.Default
$(GEN): $(LOCAL_PATH)/types.hal
$(transform-generated-source)
LOCAL_GENERATED_SOURCES += $(GEN)
#
# Build types.hal (ExtBrightness)
#
GEN := $(intermediates)/android/hardware/example/extension/light/2.0/ExtBrightness.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 \
android.hardware.example.extension.light@2.0::types.ExtBrightness
$(GEN): $(LOCAL_PATH)/types.hal
$(transform-generated-source)
LOCAL_GENERATED_SOURCES += $(GEN)
#
# Build types.hal (ExtLightState)
#
GEN := $(intermediates)/android/hardware/example/extension/light/2.0/ExtLightState.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 \
android.hardware.example.extension.light@2.0::types.ExtLightState
$(GEN): $(LOCAL_PATH)/types.hal
$(transform-generated-source)
LOCAL_GENERATED_SOURCES += $(GEN)
#
# Build IExtLight.hal
#
GEN := $(intermediates)/android/hardware/example/extension/light/2.0/IExtLight.java
$(GEN): $(HIDL)
$(GEN): PRIVATE_HIDL := $(HIDL)
$(GEN): PRIVATE_DEPS := $(LOCAL_PATH)/IExtLight.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 \
android.hardware.example.extension.light@2.0::IExtLight
$(GEN): $(LOCAL_PATH)/IExtLight.hal
$(transform-generated-source)
LOCAL_GENERATED_SOURCES += $(GEN)
include $(BUILD_JAVA_LIBRARY)
################################################################################
include $(CLEAR_VARS)
LOCAL_MODULE := android.hardware.example.extension.light@2.0-java-static
LOCAL_MODULE_CLASS := JAVA_LIBRARIES
intermediates := $(local-generated-sources-dir)
HIDL := $(HOST_OUT_EXECUTABLES)/hidl-gen$(HOST_EXECUTABLE_SUFFIX)
LOCAL_STATIC_JAVA_LIBRARIES := \
android.hardware.light@2.0-java-static \
#
# Build types.hal (Default)
#
GEN := $(intermediates)/android/hardware/example/extension/light/2.0/Default.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 \
android.hardware.example.extension.light@2.0::types.Default
$(GEN): $(LOCAL_PATH)/types.hal
$(transform-generated-source)
LOCAL_GENERATED_SOURCES += $(GEN)
#
# Build types.hal (ExtBrightness)
#
GEN := $(intermediates)/android/hardware/example/extension/light/2.0/ExtBrightness.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 \
android.hardware.example.extension.light@2.0::types.ExtBrightness
$(GEN): $(LOCAL_PATH)/types.hal
$(transform-generated-source)
LOCAL_GENERATED_SOURCES += $(GEN)
#
# Build types.hal (ExtLightState)
#
GEN := $(intermediates)/android/hardware/example/extension/light/2.0/ExtLightState.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 \
android.hardware.example.extension.light@2.0::types.ExtLightState
$(GEN): $(LOCAL_PATH)/types.hal
$(transform-generated-source)
LOCAL_GENERATED_SOURCES += $(GEN)
#
# Build IExtLight.hal
#
GEN := $(intermediates)/android/hardware/example/extension/light/2.0/IExtLight.java
$(GEN): $(HIDL)
$(GEN): PRIVATE_HIDL := $(HIDL)
$(GEN): PRIVATE_DEPS := $(LOCAL_PATH)/IExtLight.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 \
android.hardware.example.extension.light@2.0::IExtLight
$(GEN): $(LOCAL_PATH)/IExtLight.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,35 @@
/*
* Copyright (C) 2016 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.
*/
// Would normally be 'vendor.example.extension.light@2.0' however, this is
// a google extension example. A vendor extension should also live in the
// vendor partition.
package android.hardware.example.extension.light@2.0;
import android.hardware.light@2.0;
interface IExtLight extends android.hardware.light@2.0::ILight {
/**
* Set the provided lights to the provided values.
*
* @param type logical light to set
* @param state describes what the light should look like.
* @return status result of applying state transformation.
*/
setExtLight(Type type, ExtLightState state) generates (Status status);
};

View file

@ -0,0 +1,17 @@
LOCAL_PATH := $(call my-dir)
include $(CLEAR_VARS)
LOCAL_MODULE := android.hardware.example.extension.light@2.0-service
LOCAL_INIT_RC := android.hardware.example.extension.light@2.0-service.rc
LOCAL_MODULE_RELATIVE_PATH := hw
LOCAL_SRC_FILES := \
Light.cpp \
LOCAL_SHARED_LIBRARIES := \
libhidl \
libhwbinder \
libutils \
android.hardware.light@2.0 \
android.hardware.example.extension.light@2.0 \
include $(BUILD_SHARED_LIBRARY)

View file

@ -0,0 +1,56 @@
#include "Light.h"
namespace android {
namespace hardware {
namespace example {
namespace extension {
namespace light {
namespace V2_0 {
namespace implementation {
// Methods from ::android::hardware::light::V2_0::ILight follow.
Return<Status> Light::setLight(Type type, const LightState& state) {
// Forward types for new methods.
ExtLightState extState {
.state = state,
.interpolationOmega =
static_cast<int32_t>(Default::INTERPOLATION_OMEGA),
.brightness = // ExtBrightness inherits from Brightness
static_cast<ExtBrightness>(state.brightnessMode)
};
return setExtLight(type, extState);
}
Return<void> Light::getSupportedTypes(getSupportedTypes_cb _hidl_cb) {
// implement unchanged method as you would always
hidl_vec<Type> vec{};
// ******************************************************
// Note: awesome proprietary hardware implementation here
// ******************************************************
_hidl_cb(vec);
return Void();
}
// Methods from ::android::hardware::example::extension::light::V2_0::ILight follow.
Return<Status> Light::setExtLight(Type /* type */,
const ExtLightState& /* state */) {
// ******************************************************
// Note: awesome proprietary hardware implementation here
// ******************************************************
return Status::SUCCESS;
}
} // namespace implementation
} // namespace V2_0
} // namespace light
} // namespace extension
} // namespace example
} // namespace hardware
} // namespace android

View file

@ -0,0 +1,46 @@
#ifndef HIDL_GENERATED_android_hardware_example_extension_light_V2_0_Light_H_
#define HIDL_GENERATED_android_hardware_example_extension_light_V2_0_Light_H_
#include <android/hardware/example/extension/light/2.0/IExtLight.h>
#include <hidl/Status.h>
#include <hidl/MQDescriptor.h>
namespace android {
namespace hardware {
namespace example {
namespace extension {
namespace light {
namespace V2_0 {
namespace implementation {
using ::android::hardware::example::extension::light::V2_0::ExtLightState;
using ::android::hardware::example::extension::light::V2_0::IExtLight;
using ::android::hardware::light::V2_0::ILight;
using ::android::hardware::light::V2_0::LightState;
using ::android::hardware::light::V2_0::Status;
using ::android::hardware::light::V2_0::Type;
using ::android::hardware::Return;
using ::android::hardware::Void;
using ::android::hardware::hidl_vec;
using ::android::hardware::hidl_string;
using ::android::sp;
struct Light : public IExtLight {
// Methods from ::android::hardware::light::V2_0::ILight follow.
Return<Status> setLight(Type type, const LightState& state) override;
Return<void> getSupportedTypes(getSupportedTypes_cb _hidl_cb) override;
// Methods from ::android::hardware::example::extension::light::V2_0::ILight follow.
Return<Status> setExtLight(Type type, const ExtLightState& state) override;
};
} // namespace implementation
} // namespace V2_0
} // namespace light
} // namespace extension
} // namespace example
} // namespace hardware
} // namespace android
#endif // HIDL_GENERATED_android_hardware_example_extension_light_V2_0_Light_H_

View file

@ -0,0 +1,4 @@
service light-ext-2-0 /system/bin/hw/android.hardware.example.extension.light@2.0-service
class hal
user system
group system readproc

View file

@ -0,0 +1,34 @@
#define LOG_TAG "android.hardware.light@2.0-service"
#include <utils/Log.h>
// #include <iostream>
// #include <unistd.h>
// #include <hidl/IServiceManager.h>
// #include <hwbinder/IPCThreadState.h>
// #include <hwbinder/ProcessState.h>
// #include <utils/Errors.h>
// #include <utils/StrongPointer.h>
#include "Light.h"
using android::sp;
// libhwbinder:
using android::hardware::IPCThreadState;
using android::hardware::ProcessState;
// Generated HIDL files
using android::hardware::light::V2_0::ILight;
int main() {
const char instance[] = "light";
android::sp<ILight> service = new Light();
service->registerAsService(instance);
ProcessState::self()->setThreadPoolMaxThreadCount(0);
ProcessState::self()->startThreadPool();
IPCThreadState::self()->joinThreadPool();
}

View file

@ -0,0 +1,68 @@
/*
* Copyright (C) 2016 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.example.extension.light@2.0;
import android.hardware.light@2.0;
enum Default : int32_t {
// for calls to setLight from the framework that don't know about this
// extension or its requirements
INTERPOLATION_OMEGA = 2
};
/**
* One possibility is renaming an old type. Another possibility is taking
* advantages of the different namespaces.
*/
enum ExtBrightness : Brightness {
/**
* Say we're really going to use the phone as a heater.
*/
EXTREME,
/**
* Sometimes at night, we need it to be day.
*/
THE_SUN,
};
/**
* Structs can't inherit eachother in hidl. Use composition instead. In this
* case, I won't use inheritence because I want to replace Brightness with
* ExtBrightness.
*/
struct ExtLightState {
LightState state;
/**
* This is the secret sauce that will really make this extension shine.
* No other person has such a cool feature in their hals. Don't forget
* to describe all details of parameters. An interface is a contract, and
* specifying this contract to the letter is what allows that contracted
* to be maintained. :)
*
* So, this parameter represents the speed at which brightness is changed
* to the new value in the three dimensional space with coordinates RGB
* from the red, blue, and green.
*/
int32_t interpolationOmega;
/**
* Include new values.
*/
ExtBrightness brightness;
};