165f2d3aeee4a3179fe662e8f7cabce0a3e29a325The Android Open Source Project/* 265f2d3aeee4a3179fe662e8f7cabce0a3e29a325The Android Open Source Project * Copyright (C) 2008 The Android Open Source Project 365f2d3aeee4a3179fe662e8f7cabce0a3e29a325The Android Open Source Project * 465f2d3aeee4a3179fe662e8f7cabce0a3e29a325The Android Open Source Project * Licensed under the Apache License, Version 2.0 (the "License"); 565f2d3aeee4a3179fe662e8f7cabce0a3e29a325The Android Open Source Project * you may not use this file except in compliance with the License. 665f2d3aeee4a3179fe662e8f7cabce0a3e29a325The Android Open Source Project * You may obtain a copy of the License at 765f2d3aeee4a3179fe662e8f7cabce0a3e29a325The Android Open Source Project * 865f2d3aeee4a3179fe662e8f7cabce0a3e29a325The Android Open Source Project * http://www.apache.org/licenses/LICENSE-2.0 965f2d3aeee4a3179fe662e8f7cabce0a3e29a325The Android Open Source Project * 1065f2d3aeee4a3179fe662e8f7cabce0a3e29a325The Android Open Source Project * Unless required by applicable law or agreed to in writing, software 1165f2d3aeee4a3179fe662e8f7cabce0a3e29a325The Android Open Source Project * distributed under the License is distributed on an "AS IS" BASIS, 1265f2d3aeee4a3179fe662e8f7cabce0a3e29a325The Android Open Source Project * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 1365f2d3aeee4a3179fe662e8f7cabce0a3e29a325The Android Open Source Project * See the License for the specific language governing permissions and 1465f2d3aeee4a3179fe662e8f7cabce0a3e29a325The Android Open Source Project * limitations under the License. 1565f2d3aeee4a3179fe662e8f7cabce0a3e29a325The Android Open Source Project */ 1665f2d3aeee4a3179fe662e8f7cabce0a3e29a325The Android Open Source Project 1765f2d3aeee4a3179fe662e8f7cabce0a3e29a325The Android Open Source Project#ifndef ANDROID_LIGHTS_INTERFACE_H 1865f2d3aeee4a3179fe662e8f7cabce0a3e29a325The Android Open Source Project#define ANDROID_LIGHTS_INTERFACE_H 1965f2d3aeee4a3179fe662e8f7cabce0a3e29a325The Android Open Source Project 2065f2d3aeee4a3179fe662e8f7cabce0a3e29a325The Android Open Source Project#include <stdint.h> 2165f2d3aeee4a3179fe662e8f7cabce0a3e29a325The Android Open Source Project#include <sys/cdefs.h> 2265f2d3aeee4a3179fe662e8f7cabce0a3e29a325The Android Open Source Project#include <sys/types.h> 2365f2d3aeee4a3179fe662e8f7cabce0a3e29a325The Android Open Source Project 2465f2d3aeee4a3179fe662e8f7cabce0a3e29a325The Android Open Source Project#include <hardware/hardware.h> 2565f2d3aeee4a3179fe662e8f7cabce0a3e29a325The Android Open Source Project 2665f2d3aeee4a3179fe662e8f7cabce0a3e29a325The Android Open Source Project__BEGIN_DECLS 2765f2d3aeee4a3179fe662e8f7cabce0a3e29a325The Android Open Source Project 2865f2d3aeee4a3179fe662e8f7cabce0a3e29a325The Android Open Source Project/** 2965f2d3aeee4a3179fe662e8f7cabce0a3e29a325The Android Open Source Project * The id of this module 3065f2d3aeee4a3179fe662e8f7cabce0a3e29a325The Android Open Source Project */ 3165f2d3aeee4a3179fe662e8f7cabce0a3e29a325The Android Open Source Project#define LIGHTS_HARDWARE_MODULE_ID "lights" 3265f2d3aeee4a3179fe662e8f7cabce0a3e29a325The Android Open Source Project 3365f2d3aeee4a3179fe662e8f7cabce0a3e29a325The Android Open Source Project/* 3465f2d3aeee4a3179fe662e8f7cabce0a3e29a325The Android Open Source Project * These light IDs correspond to logical lights, not physical. 3565f2d3aeee4a3179fe662e8f7cabce0a3e29a325The Android Open Source Project * So for example, if your INDICATOR light is in line with your 3665f2d3aeee4a3179fe662e8f7cabce0a3e29a325The Android Open Source Project * BUTTONS, it might make sense to also light the INDICATOR 3765f2d3aeee4a3179fe662e8f7cabce0a3e29a325The Android Open Source Project * light to a reasonable color when the BUTTONS are lit. 3865f2d3aeee4a3179fe662e8f7cabce0a3e29a325The Android Open Source Project */ 3965f2d3aeee4a3179fe662e8f7cabce0a3e29a325The Android Open Source Project#define LIGHT_ID_BACKLIGHT "backlight" 4065f2d3aeee4a3179fe662e8f7cabce0a3e29a325The Android Open Source Project#define LIGHT_ID_KEYBOARD "keyboard" 4165f2d3aeee4a3179fe662e8f7cabce0a3e29a325The Android Open Source Project#define LIGHT_ID_BUTTONS "buttons" 4265f2d3aeee4a3179fe662e8f7cabce0a3e29a325The Android Open Source Project#define LIGHT_ID_BATTERY "battery" 4365f2d3aeee4a3179fe662e8f7cabce0a3e29a325The Android Open Source Project#define LIGHT_ID_NOTIFICATIONS "notifications" 4465f2d3aeee4a3179fe662e8f7cabce0a3e29a325The Android Open Source Project#define LIGHT_ID_ATTENTION "attention" 4565f2d3aeee4a3179fe662e8f7cabce0a3e29a325The Android Open Source Project 4665f2d3aeee4a3179fe662e8f7cabce0a3e29a325The Android Open Source Project/* 4765f2d3aeee4a3179fe662e8f7cabce0a3e29a325The Android Open Source Project * These lights aren't currently supported by the higher 4865f2d3aeee4a3179fe662e8f7cabce0a3e29a325The Android Open Source Project * layers, but could be someday, so we have the constants 4965f2d3aeee4a3179fe662e8f7cabce0a3e29a325The Android Open Source Project * here now. 5065f2d3aeee4a3179fe662e8f7cabce0a3e29a325The Android Open Source Project */ 5165f2d3aeee4a3179fe662e8f7cabce0a3e29a325The Android Open Source Project#define LIGHT_ID_BLUETOOTH "bluetooth" 5265f2d3aeee4a3179fe662e8f7cabce0a3e29a325The Android Open Source Project#define LIGHT_ID_WIFI "wifi" 5365f2d3aeee4a3179fe662e8f7cabce0a3e29a325The Android Open Source Project 5465f2d3aeee4a3179fe662e8f7cabce0a3e29a325The Android Open Source Project/* ************************************************************************ 5565f2d3aeee4a3179fe662e8f7cabce0a3e29a325The Android Open Source Project * Flash modes for the flashMode field of light_state_t. 5665f2d3aeee4a3179fe662e8f7cabce0a3e29a325The Android Open Source Project */ 5765f2d3aeee4a3179fe662e8f7cabce0a3e29a325The Android Open Source Project 5865f2d3aeee4a3179fe662e8f7cabce0a3e29a325The Android Open Source Project#define LIGHT_FLASH_NONE 0 5965f2d3aeee4a3179fe662e8f7cabce0a3e29a325The Android Open Source Project 6065f2d3aeee4a3179fe662e8f7cabce0a3e29a325The Android Open Source Project/** 6165f2d3aeee4a3179fe662e8f7cabce0a3e29a325The Android Open Source Project * To flash the light at a given rate, set flashMode to LIGHT_FLASH_TIMED, 6265f2d3aeee4a3179fe662e8f7cabce0a3e29a325The Android Open Source Project * and then flashOnMS should be set to the number of milliseconds to turn 6365f2d3aeee4a3179fe662e8f7cabce0a3e29a325The Android Open Source Project * the light on, followed by the number of milliseconds to turn the light 6465f2d3aeee4a3179fe662e8f7cabce0a3e29a325The Android Open Source Project * off. 6565f2d3aeee4a3179fe662e8f7cabce0a3e29a325The Android Open Source Project */ 6665f2d3aeee4a3179fe662e8f7cabce0a3e29a325The Android Open Source Project#define LIGHT_FLASH_TIMED 1 6765f2d3aeee4a3179fe662e8f7cabce0a3e29a325The Android Open Source Project 68e00013c4957e24b14f0751af40492bbdf2b332e0Dan Murphy/** 69a58556d7d8919ca193ec894b3f8553357bbbccc4Eric Olsen * To flash the light using hardware assist, set flashMode to 70a58556d7d8919ca193ec894b3f8553357bbbccc4Eric Olsen * the hardware mode. 71a58556d7d8919ca193ec894b3f8553357bbbccc4Eric Olsen */ 72a58556d7d8919ca193ec894b3f8553357bbbccc4Eric Olsen#define LIGHT_FLASH_HARDWARE 2 73a58556d7d8919ca193ec894b3f8553357bbbccc4Eric Olsen 74a58556d7d8919ca193ec894b3f8553357bbbccc4Eric Olsen/** 75baf21439df7b4e641dfa990f12c287dc53c40f09Mike Lockwood * Light brightness is managed by a user setting. 76baf21439df7b4e641dfa990f12c287dc53c40f09Mike Lockwood */ 77baf21439df7b4e641dfa990f12c287dc53c40f09Mike Lockwood#define BRIGHTNESS_MODE_USER 0 78baf21439df7b4e641dfa990f12c287dc53c40f09Mike Lockwood 79baf21439df7b4e641dfa990f12c287dc53c40f09Mike Lockwood/** 80baf21439df7b4e641dfa990f12c287dc53c40f09Mike Lockwood * Light brightness is managed by a light sensor. 81baf21439df7b4e641dfa990f12c287dc53c40f09Mike Lockwood */ 82baf21439df7b4e641dfa990f12c287dc53c40f09Mike Lockwood#define BRIGHTNESS_MODE_SENSOR 1 83baf21439df7b4e641dfa990f12c287dc53c40f09Mike Lockwood 84baf21439df7b4e641dfa990f12c287dc53c40f09Mike Lockwood/** 8565f2d3aeee4a3179fe662e8f7cabce0a3e29a325The Android Open Source Project * The parameters that can be set for a given light. 8665f2d3aeee4a3179fe662e8f7cabce0a3e29a325The Android Open Source Project * 8765f2d3aeee4a3179fe662e8f7cabce0a3e29a325The Android Open Source Project * Not all lights must support all parameters. If you 8865f2d3aeee4a3179fe662e8f7cabce0a3e29a325The Android Open Source Project * can do something backward-compatible, you should. 8965f2d3aeee4a3179fe662e8f7cabce0a3e29a325The Android Open Source Project */ 9065f2d3aeee4a3179fe662e8f7cabce0a3e29a325The Android Open Source Projectstruct light_state_t { 9165f2d3aeee4a3179fe662e8f7cabce0a3e29a325The Android Open Source Project /** 9265f2d3aeee4a3179fe662e8f7cabce0a3e29a325The Android Open Source Project * The color of the LED in ARGB. 9365f2d3aeee4a3179fe662e8f7cabce0a3e29a325The Android Open Source Project * 9465f2d3aeee4a3179fe662e8f7cabce0a3e29a325The Android Open Source Project * Do your best here. 9565f2d3aeee4a3179fe662e8f7cabce0a3e29a325The Android Open Source Project * - If your light can only do red or green, if they ask for blue, 9665f2d3aeee4a3179fe662e8f7cabce0a3e29a325The Android Open Source Project * you should do green. 9765f2d3aeee4a3179fe662e8f7cabce0a3e29a325The Android Open Source Project * - If you can only do a brightness ramp, then use this formula: 9865f2d3aeee4a3179fe662e8f7cabce0a3e29a325The Android Open Source Project * unsigned char brightness = ((77*((color>>16)&0x00ff)) 9965f2d3aeee4a3179fe662e8f7cabce0a3e29a325The Android Open Source Project * + (150*((color>>8)&0x00ff)) + (29*(color&0x00ff))) >> 8; 10065f2d3aeee4a3179fe662e8f7cabce0a3e29a325The Android Open Source Project * - If you can only do on or off, 0 is off, anything else is on. 10165f2d3aeee4a3179fe662e8f7cabce0a3e29a325The Android Open Source Project * 10265f2d3aeee4a3179fe662e8f7cabce0a3e29a325The Android Open Source Project * The high byte should be ignored. Callers will set it to 0xff (which 10365f2d3aeee4a3179fe662e8f7cabce0a3e29a325The Android Open Source Project * would correspond to 255 alpha). 10465f2d3aeee4a3179fe662e8f7cabce0a3e29a325The Android Open Source Project */ 10565f2d3aeee4a3179fe662e8f7cabce0a3e29a325The Android Open Source Project unsigned int color; 10665f2d3aeee4a3179fe662e8f7cabce0a3e29a325The Android Open Source Project 10765f2d3aeee4a3179fe662e8f7cabce0a3e29a325The Android Open Source Project /** 10865f2d3aeee4a3179fe662e8f7cabce0a3e29a325The Android Open Source Project * See the LIGHT_FLASH_* constants 10965f2d3aeee4a3179fe662e8f7cabce0a3e29a325The Android Open Source Project */ 11065f2d3aeee4a3179fe662e8f7cabce0a3e29a325The Android Open Source Project int flashMode; 11165f2d3aeee4a3179fe662e8f7cabce0a3e29a325The Android Open Source Project int flashOnMS; 11265f2d3aeee4a3179fe662e8f7cabce0a3e29a325The Android Open Source Project int flashOffMS; 113baf21439df7b4e641dfa990f12c287dc53c40f09Mike Lockwood 114baf21439df7b4e641dfa990f12c287dc53c40f09Mike Lockwood /** 115baf21439df7b4e641dfa990f12c287dc53c40f09Mike Lockwood * Policy used by the framework to manage the light's brightness. 116baf21439df7b4e641dfa990f12c287dc53c40f09Mike Lockwood * Currently the values are BRIGHTNESS_MODE_USER and BRIGHTNESS_MODE_SENSOR. 117baf21439df7b4e641dfa990f12c287dc53c40f09Mike Lockwood */ 118baf21439df7b4e641dfa990f12c287dc53c40f09Mike Lockwood int brightnessMode; 11965f2d3aeee4a3179fe662e8f7cabce0a3e29a325The Android Open Source Project}; 12065f2d3aeee4a3179fe662e8f7cabce0a3e29a325The Android Open Source Project 12165f2d3aeee4a3179fe662e8f7cabce0a3e29a325The Android Open Source Projectstruct light_device_t { 12265f2d3aeee4a3179fe662e8f7cabce0a3e29a325The Android Open Source Project struct hw_device_t common; 12365f2d3aeee4a3179fe662e8f7cabce0a3e29a325The Android Open Source Project 12465f2d3aeee4a3179fe662e8f7cabce0a3e29a325The Android Open Source Project /** 12565f2d3aeee4a3179fe662e8f7cabce0a3e29a325The Android Open Source Project * Set the provided lights to the provided values. 12665f2d3aeee4a3179fe662e8f7cabce0a3e29a325The Android Open Source Project * 12765f2d3aeee4a3179fe662e8f7cabce0a3e29a325The Android Open Source Project * Returns: 0 on succes, error code on failure. 12865f2d3aeee4a3179fe662e8f7cabce0a3e29a325The Android Open Source Project */ 12965f2d3aeee4a3179fe662e8f7cabce0a3e29a325The Android Open Source Project int (*set_light)(struct light_device_t* dev, 13065f2d3aeee4a3179fe662e8f7cabce0a3e29a325The Android Open Source Project struct light_state_t const* state); 13165f2d3aeee4a3179fe662e8f7cabce0a3e29a325The Android Open Source Project}; 13265f2d3aeee4a3179fe662e8f7cabce0a3e29a325The Android Open Source Project 13365f2d3aeee4a3179fe662e8f7cabce0a3e29a325The Android Open Source Project 13465f2d3aeee4a3179fe662e8f7cabce0a3e29a325The Android Open Source Project__END_DECLS 13565f2d3aeee4a3179fe662e8f7cabce0a3e29a325The Android Open Source Project 13665f2d3aeee4a3179fe662e8f7cabce0a3e29a325The Android Open Source Project#endif // ANDROID_LIGHTS_INTERFACE_H 13765f2d3aeee4a3179fe662e8f7cabce0a3e29a325The Android Open Source Project 138