auto import from //branches/cupcake_rel/...@140373
diff --git a/include/hardware/lights.h b/include/hardware/lights.h
new file mode 100644
index 0000000..bb89c89
--- /dev/null
+++ b/include/hardware/lights.h
@@ -0,0 +1,116 @@
+/*
+ * Copyright (C) 2008 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_LIGHTS_INTERFACE_H
+#define ANDROID_LIGHTS_INTERFACE_H
+
+#include <stdint.h>
+#include <sys/cdefs.h>
+#include <sys/types.h>
+
+#include <hardware/hardware.h>
+
+__BEGIN_DECLS
+
+/**
+ * The id of this module
+ */
+#define LIGHTS_HARDWARE_MODULE_ID "lights"
+
+/*
+ * These light IDs correspond to logical lights, not physical.
+ * So for example, if your INDICATOR light is in line with your
+ * BUTTONS, it might make sense to also light the INDICATOR
+ * light to a reasonable color when the BUTTONS are lit.
+ */
+#define LIGHT_ID_BACKLIGHT          "backlight"
+#define LIGHT_ID_KEYBOARD           "keyboard"
+#define LIGHT_ID_BUTTONS            "buttons"
+#define LIGHT_ID_BATTERY            "battery"
+#define LIGHT_ID_NOTIFICATIONS      "notifications"
+#define LIGHT_ID_ATTENTION          "attention"
+
+/*
+ * These lights aren't currently supported by the higher
+ * layers, but could be someday, so we have the constants
+ * here now.
+ */
+#define LIGHT_ID_BLUETOOTH          "bluetooth"
+#define LIGHT_ID_WIFI               "wifi"
+
+/* ************************************************************************
+ * Flash modes for the flashMode field of light_state_t.
+ */
+
+#define LIGHT_FLASH_NONE            0
+
+/**
+ * To flash the light at a given rate, set flashMode to LIGHT_FLASH_TIMED,
+ * and then flashOnMS should be set to the number of milliseconds to turn
+ * the light on, followed by the number of milliseconds to turn the light
+ * off.
+ */
+#define LIGHT_FLASH_TIMED           1
+
+
+/**
+ * The parameters that can be set for a given light.
+ *
+ * Not all lights must support all parameters.  If you
+ * can do something backward-compatible, you should.
+ */
+struct light_state_t {
+    /**
+     * The color of the LED in ARGB.
+     *
+     * Do your best here.
+     *   - If your light can only do red or green, if they ask for blue,
+     *     you should do green.
+     *   - If you can only do a brightness ramp, then use this formula:
+     *      unsigned char brightness = ((77*((color>>16)&0x00ff))
+     *              + (150*((color>>8)&0x00ff)) + (29*(color&0x00ff))) >> 8;
+     *   - If you can only do on or off, 0 is off, anything else is on.
+     *
+     * The high byte should be ignored.  Callers will set it to 0xff (which
+     * would correspond to 255 alpha).
+     */
+    unsigned int color;
+
+    /**
+     * See the LIGHT_FLASH_* constants
+     */
+    int flashMode;
+    int flashOnMS;
+    int flashOffMS;
+};
+
+struct light_device_t {
+    struct hw_device_t common;
+
+    /**
+     * Set the provided lights to the provided values.
+     *
+     * Returns: 0 on succes, error code on failure.
+     */
+    int (*set_light)(struct light_device_t* dev,
+            struct light_state_t const* state);
+};
+
+
+__END_DECLS
+
+#endif  // ANDROID_LIGHTS_INTERFACE_H
+
diff --git a/include/hardware/qemud.h b/include/hardware/qemud.h
new file mode 100644
index 0000000..874a32f
--- /dev/null
+++ b/include/hardware/qemud.h
@@ -0,0 +1,144 @@
+/*
+ * Copyright (C) 2008 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_INCLUDE_HARDWARE_QEMUD_H
+#define ANDROID_INCLUDE_HARDWARE_QEMUD_H
+
+#include <cutils/sockets.h>
+
+/* the following is helper code that is used by the QEMU-specific
+ * hardware HAL modules to communicate with the emulator program
+ * through the 'qemud' multiplexing daemon.
+ *
+ * see the documentation comments for details in
+ * development/emulator/qemud/qemud.c
+ *
+ * all definitions here are built into the HAL module to avoid
+ * having to write a tiny shared library for this.
+ */
+
+/* we expect the D macro to be defined to a function macro
+ * that sends its formatted string argument(s) to the log.
+ * If not, ignore the traces.
+ */
+#ifndef D
+#  define  D(...)  ((void)0)
+#endif
+
+static __inline__ int
+qemud_fd_write(int  fd, const void*  buff, int  len)
+{
+    int  len2;
+    do {
+        len2 = write(fd, buff, len);
+    } while (len2 < 0 && errno == EINTR);
+    return len2;
+}
+
+static __inline__ int
+qemud_fd_read(int  fd, void*  buff, int  len)
+{
+    int  len2;
+    do {
+        len2 = read(fd, buff, len);
+    } while (len2 < 0 && errno == EINTR);
+    return len2;
+}
+
+static __inline__ int
+qemud_channel_open(const char*  name)
+{
+    int  fd;
+    int  namelen = strlen(name);
+    char answer[2];
+
+    /* connect to qemud control socket */
+    fd = socket_local_client( "qemud",
+                              ANDROID_SOCKET_NAMESPACE_RESERVED,
+                              SOCK_STREAM );
+    if (fd < 0) {
+        D("no qemud control socket: %s", strerror(errno));
+        return -1;
+    }
+
+    /* send service name to connect */
+    if (qemud_fd_write(fd, name, namelen) != namelen) {
+        D("can't send service name to qemud: %s",
+           strerror(errno));
+        close(fd);
+        return -1;
+    }
+
+    /* read answer from daemon */
+    if (qemud_fd_read(fd, answer, 2) != 2 ||
+        answer[0] != 'O' || answer[1] != 'K') {
+        D("cant' connect to %s service through qemud", name);
+        close(fd);
+        return -1;
+    }
+    return fd;
+}
+
+static __inline__ int
+qemud_channel_send(int  fd, const void*  msg, int  msglen)
+{
+    char  header[5];
+
+    if (msglen < 0)
+        msglen = strlen((const char*)msg);
+
+    if (msglen == 0)
+        return 0;
+
+    snprintf(header, sizeof header, "%04x", msglen);
+    if (qemud_fd_write(fd, header, 4) != 4) {
+        D("can't write qemud frame header: %s", strerror(errno));
+        return -1;
+    }
+
+    if (qemud_fd_write(fd, msg, msglen) != msglen) {
+        D("can4t write qemud frame payload: %s", strerror(errno));
+        return -1;
+    }
+    return 0;
+}
+
+static __inline__ int
+qemud_channel_recv(int  fd, void*  msg, int  msgsize)
+{
+    char  header[5];
+    int   size, avail;
+
+    if (qemud_fd_read(fd, header, 4) != 4) {
+        D("can't read qemud frame header: %s", strerror(errno));
+        return -1;
+    }
+    header[4] = 0;
+    if (sscanf(header, "%04x", &size) != 1) {
+        D("malformed qemud frame header: '%.*s'", 4, header);
+        return -1;
+    }
+    if (size > msgsize)
+        return -1;
+
+    if (qemud_fd_read(fd, msg, size) != size) {
+        D("can't read qemud frame payload: %s", strerror(errno));
+        return -1;
+    }
+    return size;
+}
+
+#endif /* ANDROID_INCLUDE_HARDWARE_QEMUD_H */