android mtk6592 添加led三色灯,红色蓝色绿色
本文的led是三色的分别是红色,蓝色,绿色
红色:低电量,电量低于15%
蓝色:充电,电量在15%到90%之间
绿色:电量在90%到100%
开机充电情况:
驱动层:
mediatek\custom\**project\lk\cust_leds.c
static struct cust_mt65xx_led cust_led_list[MT65XX_LED_TYPE_TOTAL] = {{"red", MT65XX_LED_MODE_PMIC, MT65XX_LED_PMIC_NLED_ISINK0,{0,0,0,0,0}},{"green", MT65XX_LED_MODE_PMIC, MT65XX_LED_PMIC_NLED_ISINK1,{0,0,0,0,0}},{"blue", MT65XX_LED_MODE_NONE, MT65XX_LED_PMIC_NLED_ISINK2,{0,0,0,0,0}},{"jogball-backlight", MT65XX_LED_MODE_NONE, -1,{0,0,0,0,0}},{"keyboard-backlight",MT65XX_LED_MODE_NONE, -1,{0,0,0,0,0}},{"button-backlight", MT65XX_LED_MODE_NONE, -1,{0,0,0,0,0}},{"lcd-backlight", MT65XX_LED_MODE_CUST_BLS_PWM, (int)disp_bls_set_backlight,{0,0,0,0,0}},
};
上层:
aplse\frameworks\base\core\res\res\values\config.xml
上层配置文件,修改开机充电模式下led显示情况
<!-- Display low battery warning when battery level dips to this value --><integer name="config_lowBatteryWarningLevel">15</integer> 控制低电量的最低值<!-- Close low battery warning when battery level reaches this value --><integer name="config_lowBatteryCloseWarningLevel">20</integer><!-- Default color for notification LED. --><color name="config_defaultNotificationColor">#ffffffff</color><!-- Default LED on time for notification LED in milliseconds. --><integer name="config_defaultNotificationLedOn">500</integer><!-- Default LED off time for notification LED in milliseconds. --><integer name="config_defaultNotificationLedOff">2000</integer><!-- Default value for led color when battery is low on charge --><integer name="config_notificationsBatteryLowARGB">0xFFFF0000</integer> 低电量红色<!-- Default value for led color when battery is medium charged --><integer name="config_notificationsBatteryMediumARGB">0xFF0000FF</integer> 15到90 蓝色<!-- Default value for led color when battery is fully charged --><integer name="config_notificationsBatteryFullARGB">0xFF00FF00</integer> 90以上绿色
apls\ frameworks\base\services\java\com\android\server\BatteryService.java
public void updateLightsLocked() {final int level = mBatteryProps.batteryLevel;final int status = mBatteryProps.batteryStatus;if(mIPOBoot){//Get led status in IPO modegetIpoLedStatus();}if (level < mLowBatteryWarningLevel) {if (status == BatteryManager.BATTERY_STATUS_CHARGING) {updateLedStatus();// Solid red when battery is chargingmBatteryLight.setColor(mBatteryLowARGB);} else {LowLevelFlag = true;updateLedStatus();// Flash red when battery is low and not chargingmBatteryLight.setFlashing(mBatteryLowARGB, LightsService.LIGHT_FLASH_TIMED,mBatteryLedOn, mBatteryLedOff);}} else if (status == BatteryManager.BATTERY_STATUS_CHARGING|| status == BatteryManager.BATTERY_STATUS_FULL) {if (status == BatteryManager.BATTERY_STATUS_FULL || level >= 90) {updateLedStatus();// Solid green when full or charging and nearly full mBatteryFullARGBmBatteryLight.setColor(mBatteryFullARGB);} else {updateLedStatus();// Solid orange when charging and halfway fullmBatteryLight.setColor(mBatteryMediumARGB);}} else {if(ipo_led_on && mIPOBoot){if (status == BatteryManager.BATTERY_STATUS_FULL || level >= 90) {mBatteryLight.setColor(mBatteryFullARGB);}else {mBatteryLight.setColor(mBatteryMediumARGB);}mIPOBoot = false;ipo_led_on = false;}// No lights if not charging and not lowmBatteryLight.turnOff();}}
这里是对三色的判断并输出
关机充电情况:
修改两个文件: mediatek\external\ipod目录下面的ipodlights.cpp和ipodmain.h
修改的代码如下:
ipodlights.cpp
#include <stdio.h>
#include <utils/Log.h>
#include "ipodmain.h"#define LED_RED_PATH "/sys/class/leds/red/brightness"
#define LED_BLUE_PATH "/sys/class/leds/blue/brightness"
#define BATTERY_CAPACITY_PATH "/sys/class/power_supply/battery/capacity"
#define LED_GREEN_PATH "/sys/class/leds/green/brightness"
#define LED_ONOFF_PROP "sys.ipo.ledon"/*
int (*ipod_chglights[])(void) = {lights_init,lights_chgfull,lights_chgon,lights_chgexit,
};
*/static int led_isOn = CONTROL_UNKNOWN;
static int led_green_isOn = CONTROL_UNKNOWN;
static int led_red_isOn = CONTROL_UNKNOWN;
static int led_blue_isOn = CONTROL_UNKNOWN;
static int nChargingFull = CONTROL_UNKNOWN;
static int nChargingRemoved = CONTROL_UNKNOWN;void turn_led_on()
{if (led_isOn == CONTROL_ON)return;led_isOn = CONTROL_ON;property_set(LED_ONOFF_PROP, "1");
}void turn_led_off()
{if (led_isOn == CONTROL_OFF)return;led_isOn = CONTROL_OFF;property_set(LED_ONOFF_PROP, "0");
}void start_blue_led(int skew)
{if (led_blue_isOn == CONTROL_ON)return;led_blue_isOn = CONTROL_ON;if (skew > 255) skew = 255;else if (skew < 0) skew = 0;set_int_value(LED_BLUE_PATH, skew);
}void stop_blue_led()
{if (led_blue_isOn == CONTROL_OFF)return;led_blue_isOn = CONTROL_OFF;set_int_value(LED_BLUE_PATH, 0);
}void start_red_led(int skew)
{if (led_red_isOn == CONTROL_ON)return;led_red_isOn = CONTROL_ON;if (skew > 255) skew = 255;else if (skew < 0) skew = 0;set_int_value(LED_RED_PATH, skew);
}void stop_red_led()
{if (led_red_isOn == CONTROL_OFF)return;led_red_isOn = CONTROL_OFF;set_int_value(LED_RED_PATH, 0);
}void start_green_led(int skew)
{if (led_green_isOn == CONTROL_ON)return;led_green_isOn = CONTROL_ON;if (skew > 255) skew = 255;else if (skew < 0) skew = 0;set_int_value(LED_GREEN_PATH, skew);
}void stop_green_led()
{if (led_green_isOn == CONTROL_OFF)return;led_green_isOn = CONTROL_OFF;set_int_value(LED_GREEN_PATH, 0);
}int lights_chgfull()
{/* do not block this function like sleep */SXLOGI("lights_chgfull");pthread_mutex_lock(&mutex);nChargingFull = CONTROL_ON;nChargingRemoved = CONTROL_OFF;stop_blue_led(); start_green_led(255);turn_led_on();pthread_mutex_unlock(&mutex);return 0;
}int lights_chgon()
{SXLOGI("lights_chgon");#if 1pthread_mutex_lock(&mutex);nChargingFull = CONTROL_OFF;nChargingRemoved = CONTROL_OFF;stop_green_led();if(get_int_value(BATTERY_CAPACITY_PATH) < 15){stop_blue_led(); start_red_led(255); }else{stop_red_led();start_blue_led(255); }turn_led_on(); pthread_mutex_unlock(&mutex);
#else// an example of light on 2sec, off 3sec.pthread_mutex_lock(&mutex);if (nChargingFull != CONTROL_ON && nChargingRemoved != CONTROL_ON){nChargingFull = CONTROL_OFF;nChargingRemoved = CONTROL_OFF;stop_green_led();start_red_led(255); turn_led_on();}else{nChargingFull = CONTROL_OFF;nChargingRemoved = CONTROL_OFF;pthread_mutex_unlock(&mutex);return 0;}pthread_mutex_unlock(&mutex);usleep(2000*1000); //sleep 2 secpthread_mutex_lock(&mutex);if (nChargingFull != CONTROL_ON && nChargingRemoved != CONTROL_ON){stop_red_led();turn_led_off();}// reset the state to let next time chgon can work normally.nChargingFull = CONTROL_OFF;nChargingRemoved = CONTROL_OFF;pthread_mutex_unlock(&mutex);
#endif return 0;
}int lights_chgexit()
{/* do not block this function like sleep */SXLOGI("lights_chgexit");pthread_mutex_lock(&mutex);nChargingFull = CONTROL_OFF;nChargingRemoved = CONTROL_ON;stop_green_led();if(get_int_value(BATTERY_CAPACITY_PATH) < 15){stop_red_led();}else{stop_blue_led();}turn_led_off();pthread_mutex_unlock(&mutex);return 0;
}
ipodmain.h头文件中需要添加get_int_value()
android mtk6592 添加led三色灯,红色蓝色绿色相关推荐
- AIE红色/蓝色/绿色荧光聚苯乙烯微球/比色-荧光双信号ALE荧光微球的相关研究
下面小编给大家整理了AIE红色/蓝色/绿色荧光聚苯乙烯微球/比色-荧光双信号ALE荧光微球的相关研究和制备方法,和小编一起来看! AIE红色/蓝色/绿色聚苯乙烯微球的制备: 以乙醇为分散介质,聚乙烯吡 ...
- Web前端作业:Html+JS实现的图片镜像、黑白、红色、绿色、蓝色及还原
基本实现 首先我们来到主界面,有一些图片供选择. 我们随便挑选一张图片,假如选择甘雨,进入甘雨的二级界面: 我们看到有六个按钮,上面五个分别是镜像.黑白.红色.绿色.蓝色,下面最大的是还原. 使用镜像 ...
- Java实现扣去图像蓝色绿色背景
首先我们知道图像的一个色彩空间就是RGB,意思是说从该角度看,每一张图片其实都是由Red(红色).Green(绿色).Blue(蓝色)这样的三基色组成.因此在许多电影拍摄或照相过程中,会经常用使用绿色 ...
- 亚马逊echo中国使用_为什么我的Amazon Echo闪烁黄色,红色或绿色?
亚马逊echo中国使用 You just set up your Amazon Echo, and then you noticed that the ring around the top is d ...
- 【为您的 Android 应用添加图片】
上一篇:[创建 Birthday Card 应用] 一.简介 在本文章中,您将学习如何使用 ImageView 向应用添加图片. 前提条件 了解如何在 Android Studio 中创建和运行新应用 ...
- Android端控制LED屏
今天老师给讲了讲LED屏的协议,写了一个控制LED的程序,为了深入了解,我自己给代码全部加上注释. 布局: <LinearLayout xmlns:android="http://sc ...
- android水印控件,Android图片添加文字水印并保存水印文字图片到指定文件
Android图片添加文字水印并保存水印文字图片到指定文件package zhangphil.test;import android.graphics.Bitmap;import android.gr ...
- Nodemcu 驱动WS2812点灯红色变绿色的原因及解决
初次接触FastLed,先点灯.开发环境VSCODE PlatformIO . 直接使用FastLed的示例blink程序,略有修改DATA_PIN D1,注释掉CLOCK_PIN. #include ...
- Android系统移植与调试之-------如何修改Android设备添加重启、飞行模式、静音模式等功能(一)...
1.首先先来看一下修改前后的效果对比图 修改之后的图片 确认重启界面 具体的修改内容在下一篇中具体介绍. Android系统移植与调试之------->如何修改Android设备添加重启.飞行模 ...
最新文章
- HDU 1248 寒冰王座(全然背包:入门题)
- 她穿着自己用 17 封拒信做成的裙子,参加了博士论文答辩...
- celldex包使用
- QT学习:常用SQL命令
- python 错误处理 assert
- 令人振奋的好消息!2016年12月8日Google Developers中文网站发布!
- 带你熟悉鸿蒙轻内核Kconfig使用指南
- 固定字符结尾的正则_新手上路:图文解读助你理解和使用正则表达式
- android wps页面设置,WPS中设置纸张的方法
- PPT模板下载网站推荐
- android 音频压缩 silk,有损音频压缩格式大比拼─MP3、Ogg、AAC、HE-AAC、HE-AACv2、Opus究竟谁才是王者?...
- ps2手柄linux,索尼为PS5 DualSense手柄推出官方Linux驱动程序
- APS54085 外围电路简单_调光无频闪 智能家居照明
- 视网膜数据集(2)Messidor
- 中国都市女性抗衰洞察:Z世代抗衰意识普遍觉醒,“纹”题成抗衰重点
- ssm电影院管理系统的设计与实现毕业设计源码241505
- Uable to attach or mount volumes: unmounted volumes=[xxxx], unattached volumes=[xxxx]: timed out wa
- 微信自动发朋友圈源码
- 如何向别人介绍你做的东西
- 上传各种尺寸的头像,处理成正圆形的方法:【孟祥阳】