summaryrefslogtreecommitdiff
authorFrank Chen <Frank.Chen@amlogic.com>2012-07-18 13:31:26 (GMT)
committer Frank Chen <Frank.Chen@amlogic.com>2012-07-18 13:31:26 (GMT)
commit3cb547df50101f3358597ecd61fbfd03519f8a19 (patch)
tree3b0718e7c8ad25fb5b4a8b56c1b3f4aa78e62c03
parent28d2a8104e6d50402d44e3deb0ff245e6d8e7714 (diff)
downloadlights-3cb547df50101f3358597ecd61fbfd03519f8a19.zip
lights-3cb547df50101f3358597ecd61fbfd03519f8a19.tar.gz
lights-3cb547df50101f3358597ecd61fbfd03519f8a19.tar.bz2
merge from ics and goldfish
Diffstat
-rwxr-xr-x[-rw-r--r--]Android.mk21
-rwxr-xr-xlights.c164
2 files changed, 157 insertions, 28 deletions
diff --git a/Android.mk b/Android.mk
index 2bff8a6..23e66ea 100644..100755
--- a/Android.mk
+++ b/Android.mk
@@ -1,9 +1,26 @@
-LOCAL_PATH:= $(call my-dir)
+# Copyright (C) 2011 The Android Open Source Project.
+#
+# Original code licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this software 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.
+
+LOCAL_PATH := $(call my-dir)
+
+# HAL module implemenation, not prelinked and stored in
+# hw/<LIGHTS_HARDWARE_MODULE_ID>.<ro.hardware>.so
include $(CLEAR_VARS)
LOCAL_SRC_FILES := lights.c
LOCAL_PRELINK_MODULE := false
LOCAL_MODULE_PATH := $(TARGET_OUT_SHARED_LIBRARIES)/hw
-LOCAL_SHARED_LIBRARIES := liblog
+LOCAL_SHARED_LIBRARIES := liblog libcutils
LOCAL_MODULE := lights.amlogic
LOCAL_MODULE_TAGS := optional
include $(BUILD_SHARED_LIBRARY)
diff --git a/lights.c b/lights.c
index c387faf..63dbc5c 100755
--- a/lights.c
+++ b/lights.c
@@ -1,14 +1,57 @@
-#include <stdio.h>
+/* Copyright (C) 2011 The Android Open Source Project
+ *
+ * Original code licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this software 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.
+ *
+ * This implements a lights hardware library for the Android emulator.
+ * the following code should be built as a shared library that will be
+ * placed into /system/lib/hw/lights.goldfish.so
+ *
+ * It will be loaded by the code in hardware/libhardware/hardware.c
+ * which is itself called from
+ * ./frameworks/base/services/jni/com_android_server_HardwareService.cpp
+ */
+
+#ifdef LOG_TAG
+#undef LOG_TAG
+#define LOG_TAG "Lights"
+#endif
+#include <cutils/log.h>
+#include <stdint.h>
+#include <string.h>
#include <unistd.h>
-#include <fcntl.h>
#include <errno.h>
+#include <fcntl.h>
+#include <pthread.h>
+#include <sys/ioctl.h>
+#include <sys/types.h>
#include <hardware/lights.h>
#include <hardware/hardware.h>
+/* Set to 1 to enable debug messages to the log */
+#define DEBUG 0
+#if DEBUG
+# define D(...) ALOGD(__VA_ARGS__)
+#else
+# define D(...) do{}while(0)
+#endif
+
+#define E(...) ALOGE(__VA_ARGS__)
#define BACKLIGHT "/sys/class/backlight/aml-bl/brightness"
-static int set_light_backlight(struct light_device_t* dev,
- struct light_state_t const* state)
+/* set backlight brightness by LIGHTS_SERVICE_NAME service. */
+static int
+set_light_backlight( struct light_device_t* dev, struct light_state_t const* state )
+
{
int nwr, ret = -1, fd;
char value[20];
@@ -25,41 +68,110 @@ static int set_light_backlight(struct light_device_t* dev,
return ret;
}
-static int open_lights(const struct hw_module_t* module, char const* name,
- struct hw_device_t** device)
+static int
+set_light_buttons( struct light_device_t* dev, struct light_state_t const* state )
+{
+ /* @Waiting for later implementation. */
+ D( "%s: Not implemented.", __FUNCTION__ );
+
+ return 0;
+}
+static int
+set_light_battery( struct light_device_t* dev, struct light_state_t const* state )
+{
+ /* @Waiting for later implementation. */
+ D( "%s: Not implemented.", __FUNCTION__ );
+
+ return 0;
+}
+static int
+set_light_keyboard( struct light_device_t* dev, struct light_state_t const* state )
+{
+ /* @Waiting for later implementation. */
+ D( "%s: Not implemented.", __FUNCTION__ );
+
+ return 0;
+}
+static int
+set_light_notifications( struct light_device_t* dev, struct light_state_t const* state )
{
- int res = -EINVAL;
-
- if (strcmp(LIGHT_ID_BACKLIGHT, name) == 0) {
- struct light_device_t *dev = malloc(sizeof(struct light_device_t));
- if (!dev) {
- return res;
- }
-
- memset(dev, 0, sizeof(*dev));
- dev->common.tag = HARDWARE_DEVICE_TAG;
- dev->common.version = 0;
- dev->common.module = (struct hw_module_t*)module;
- dev->common.close = NULL;
- dev->set_light = set_light_backlight;
-
- *device = (struct hw_device_t*)dev;
- res = 0;
+ /* @Waiting for later implementation. */
+ D( "%s: Not implemented.", __FUNCTION__ );
+
+ return 0;
+}
+static int
+set_light_attention( struct light_device_t* dev, struct light_state_t const* state )
+{
+ /* @Waiting for later implementation. */
+ D( "%s: Not implemented.", __FUNCTION__ );
+
+ return 0;
+}
+/** Close the lights device */
+static int
+close_lights( struct light_device_t *dev )
+{
+ free( dev );
+
+ return 0;
+}
+/**
+ * module methods
+ */
+/** Open a new instance of a lights device using name */
+static int
+open_lights( const struct hw_module_t* module, char const *name,
+ struct hw_device_t **device )
+{
+ void* set_light;
+
+ if (0 == strcmp( LIGHT_ID_BACKLIGHT, name )) {
+ set_light = set_light_backlight;
+ } else if (0 == strcmp( LIGHT_ID_KEYBOARD, name )) {
+ set_light = set_light_keyboard;
+ } else if (0 == strcmp( LIGHT_ID_BUTTONS, name )) {
+ set_light = set_light_buttons;
+ } else if (0 == strcmp( LIGHT_ID_BATTERY, name )) {
+ set_light = set_light_battery;
+ } else if (0 == strcmp( LIGHT_ID_NOTIFICATIONS, name )) {
+ set_light = set_light_notifications;
+ } else if (0 == strcmp( LIGHT_ID_ATTENTION, name )) {
+ set_light = set_light_attention;
+ } else {
+ D( "%s: %s light isn't supported yet.", __FUNCTION__, name );
+ return -EINVAL;
}
- return res;
+ struct light_device_t *dev = malloc( sizeof(struct light_device_t) );
+ if (dev == NULL) {
+ return -EINVAL;
+ }
+ memset( dev, 0, sizeof(*dev) );
+
+ dev->common.tag = HARDWARE_DEVICE_TAG;
+ dev->common.version = 0;
+ dev->common.module = (struct hw_module_t*)module;
+ dev->common.close = (int (*)(struct hw_device_t*))close_lights;
+ dev->set_light = set_light;
+
+ *device = (struct hw_device_t*)dev;
+ return 0;
}
static struct hw_module_methods_t lights_module_methods = {
.open = open_lights,
};
-const struct hw_module_t HAL_MODULE_INFO_SYM = {
+/*
+ * The emulator lights Module
+ */
+struct hw_module_t HAL_MODULE_INFO_SYM = {
.tag = HARDWARE_MODULE_TAG,
.version_major = 1,
.version_minor = 0,
.id = LIGHTS_HARDWARE_MODULE_ID,
- .name = "Backlight",
+ .name = "Amlogic lights Module",
.author = "Amlogic",
.methods = &lights_module_methods,
};