lights.h revision a58556d7d8919ca193ec894b3f8553357bbbccc4
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/** 7565f2d3aeee4a3179fe662e8f7cabce0a3e29a325The Android Open Source Project * The parameters that can be set for a given light. 7665f2d3aeee4a3179fe662e8f7cabce0a3e29a325The Android Open Source Project * 7765f2d3aeee4a3179fe662e8f7cabce0a3e29a325The Android Open Source Project * Not all lights must support all parameters. If you 7865f2d3aeee4a3179fe662e8f7cabce0a3e29a325The Android Open Source Project * can do something backward-compatible, you should. 7965f2d3aeee4a3179fe662e8f7cabce0a3e29a325The Android Open Source Project */ 8065f2d3aeee4a3179fe662e8f7cabce0a3e29a325The Android Open Source Projectstruct light_state_t { 8165f2d3aeee4a3179fe662e8f7cabce0a3e29a325The Android Open Source Project /** 8265f2d3aeee4a3179fe662e8f7cabce0a3e29a325The Android Open Source Project * The color of the LED in ARGB. 8365f2d3aeee4a3179fe662e8f7cabce0a3e29a325The Android Open Source Project * 8465f2d3aeee4a3179fe662e8f7cabce0a3e29a325The Android Open Source Project * Do your best here. 8565f2d3aeee4a3179fe662e8f7cabce0a3e29a325The Android Open Source Project * - If your light can only do red or green, if they ask for blue, 8665f2d3aeee4a3179fe662e8f7cabce0a3e29a325The Android Open Source Project * you should do green. 8765f2d3aeee4a3179fe662e8f7cabce0a3e29a325The Android Open Source Project * - If you can only do a brightness ramp, then use this formula: 8865f2d3aeee4a3179fe662e8f7cabce0a3e29a325The Android Open Source Project * unsigned char brightness = ((77*((color>>16)&0x00ff)) 8965f2d3aeee4a3179fe662e8f7cabce0a3e29a325The Android Open Source Project * + (150*((color>>8)&0x00ff)) + (29*(color&0x00ff))) >> 8; 9065f2d3aeee4a3179fe662e8f7cabce0a3e29a325The Android Open Source Project * - If you can only do on or off, 0 is off, anything else is on. 9165f2d3aeee4a3179fe662e8f7cabce0a3e29a325The Android Open Source Project * 9265f2d3aeee4a3179fe662e8f7cabce0a3e29a325The Android Open Source Project * The high byte should be ignored. Callers will set it to 0xff (which 9365f2d3aeee4a3179fe662e8f7cabce0a3e29a325The Android Open Source Project * would correspond to 255 alpha). 9465f2d3aeee4a3179fe662e8f7cabce0a3e29a325The Android Open Source Project */ 9565f2d3aeee4a3179fe662e8f7cabce0a3e29a325The Android Open Source Project unsigned int color; 9665f2d3aeee4a3179fe662e8f7cabce0a3e29a325The Android Open Source Project 9765f2d3aeee4a3179fe662e8f7cabce0a3e29a325The Android Open Source Project /** 9865f2d3aeee4a3179fe662e8f7cabce0a3e29a325The Android Open Source Project * See the LIGHT_FLASH_* constants 9965f2d3aeee4a3179fe662e8f7cabce0a3e29a325The Android Open Source Project */ 10065f2d3aeee4a3179fe662e8f7cabce0a3e29a325The Android Open Source Project int flashMode; 10165f2d3aeee4a3179fe662e8f7cabce0a3e29a325The Android Open Source Project int flashOnMS; 10265f2d3aeee4a3179fe662e8f7cabce0a3e29a325The Android Open Source Project int flashOffMS; 10365f2d3aeee4a3179fe662e8f7cabce0a3e29a325The Android Open Source Project}; 10465f2d3aeee4a3179fe662e8f7cabce0a3e29a325The Android Open Source Project 10565f2d3aeee4a3179fe662e8f7cabce0a3e29a325The Android Open Source Projectstruct light_device_t { 10665f2d3aeee4a3179fe662e8f7cabce0a3e29a325The Android Open Source Project struct hw_device_t common; 10765f2d3aeee4a3179fe662e8f7cabce0a3e29a325The Android Open Source Project 10865f2d3aeee4a3179fe662e8f7cabce0a3e29a325The Android Open Source Project /** 10965f2d3aeee4a3179fe662e8f7cabce0a3e29a325The Android Open Source Project * Set the provided lights to the provided values. 11065f2d3aeee4a3179fe662e8f7cabce0a3e29a325The Android Open Source Project * 11165f2d3aeee4a3179fe662e8f7cabce0a3e29a325The Android Open Source Project * Returns: 0 on succes, error code on failure. 11265f2d3aeee4a3179fe662e8f7cabce0a3e29a325The Android Open Source Project */ 11365f2d3aeee4a3179fe662e8f7cabce0a3e29a325The Android Open Source Project int (*set_light)(struct light_device_t* dev, 11465f2d3aeee4a3179fe662e8f7cabce0a3e29a325The Android Open Source Project struct light_state_t const* state); 11565f2d3aeee4a3179fe662e8f7cabce0a3e29a325The Android Open Source Project}; 11665f2d3aeee4a3179fe662e8f7cabce0a3e29a325The Android Open Source Project 11765f2d3aeee4a3179fe662e8f7cabce0a3e29a325The Android Open Source Project 11865f2d3aeee4a3179fe662e8f7cabce0a3e29a325The Android Open Source Project__END_DECLS 11965f2d3aeee4a3179fe662e8f7cabce0a3e29a325The Android Open Source Project 12065f2d3aeee4a3179fe662e8f7cabce0a3e29a325The Android Open Source Project#endif // ANDROID_LIGHTS_INTERFACE_H 12165f2d3aeee4a3179fe662e8f7cabce0a3e29a325The Android Open Source Project 122