OSDN Git Service

eclair snapshot
[android-x86/hardware-libhardware.git] / include / hardware / lights.h
1 /*
2  * Copyright (C) 2008 The Android Open Source Project
3  *
4  * Licensed under the Apache License, Version 2.0 (the "License");
5  * you may not use this file except in compliance with the License.
6  * You may obtain a copy of the License at
7  *
8  *      http://www.apache.org/licenses/LICENSE-2.0
9  *
10  * Unless required by applicable law or agreed to in writing, software
11  * distributed under the License is distributed on an "AS IS" BASIS,
12  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13  * See the License for the specific language governing permissions and
14  * limitations under the License.
15  */
16
17 #ifndef ANDROID_LIGHTS_INTERFACE_H
18 #define ANDROID_LIGHTS_INTERFACE_H
19
20 #include <stdint.h>
21 #include <sys/cdefs.h>
22 #include <sys/types.h>
23
24 #include <hardware/hardware.h>
25
26 __BEGIN_DECLS
27
28 /**
29  * The id of this module
30  */
31 #define LIGHTS_HARDWARE_MODULE_ID "lights"
32
33 /*
34  * These light IDs correspond to logical lights, not physical.
35  * So for example, if your INDICATOR light is in line with your
36  * BUTTONS, it might make sense to also light the INDICATOR
37  * light to a reasonable color when the BUTTONS are lit.
38  */
39 #define LIGHT_ID_BACKLIGHT          "backlight"
40 #define LIGHT_ID_KEYBOARD           "keyboard"
41 #define LIGHT_ID_BUTTONS            "buttons"
42 #define LIGHT_ID_BATTERY            "battery"
43 #define LIGHT_ID_NOTIFICATIONS      "notifications"
44 #define LIGHT_ID_ATTENTION          "attention"
45
46 /*
47  * These lights aren't currently supported by the higher
48  * layers, but could be someday, so we have the constants
49  * here now.
50  */
51 #define LIGHT_ID_BLUETOOTH          "bluetooth"
52 #define LIGHT_ID_WIFI               "wifi"
53
54 /* ************************************************************************
55  * Flash modes for the flashMode field of light_state_t.
56  */
57
58 #define LIGHT_FLASH_NONE            0
59
60 /**
61  * To flash the light at a given rate, set flashMode to LIGHT_FLASH_TIMED,
62  * and then flashOnMS should be set to the number of milliseconds to turn
63  * the light on, followed by the number of milliseconds to turn the light
64  * off.
65  */
66 #define LIGHT_FLASH_TIMED           1
67
68 /**
69  * To flash the light using hardware assist, set flashMode to
70  * the hardware mode.
71  */
72 #define LIGHT_FLASH_HARDWARE        2
73
74 /**
75  * Light brightness is managed by a user setting.
76  */
77 #define BRIGHTNESS_MODE_USER        0
78
79 /**
80  * Light brightness is managed by a light sensor.
81  */
82 #define BRIGHTNESS_MODE_SENSOR      1
83
84 /**
85  * The parameters that can be set for a given light.
86  *
87  * Not all lights must support all parameters.  If you
88  * can do something backward-compatible, you should.
89  */
90 struct light_state_t {
91     /**
92      * The color of the LED in ARGB.
93      *
94      * Do your best here.
95      *   - If your light can only do red or green, if they ask for blue,
96      *     you should do green.
97      *   - If you can only do a brightness ramp, then use this formula:
98      *      unsigned char brightness = ((77*((color>>16)&0x00ff))
99      *              + (150*((color>>8)&0x00ff)) + (29*(color&0x00ff))) >> 8;
100      *   - If you can only do on or off, 0 is off, anything else is on.
101      *
102      * The high byte should be ignored.  Callers will set it to 0xff (which
103      * would correspond to 255 alpha).
104      */
105     unsigned int color;
106
107     /**
108      * See the LIGHT_FLASH_* constants
109      */
110     int flashMode;
111     int flashOnMS;
112     int flashOffMS;
113
114     /**
115      * Policy used by the framework to manage the light's brightness.
116      * Currently the values are BRIGHTNESS_MODE_USER and BRIGHTNESS_MODE_SENSOR.
117      */
118     int brightnessMode;
119 };
120
121 struct light_device_t {
122     struct hw_device_t common;
123
124     /**
125      * Set the provided lights to the provided values.
126      *
127      * Returns: 0 on succes, error code on failure.
128      */
129     int (*set_light)(struct light_device_t* dev,
130             struct light_state_t const* state);
131 };
132
133
134 __END_DECLS
135
136 #endif  // ANDROID_LIGHTS_INTERFACE_H
137