mtk android 关机充电,MTK 关机充电 - yueqiulijun的个人空间 - OSCHINA - 中文开源技术交流社区...
充电相关文件目录 alps\vendor\mediatek\proprietary\external\charger\
充电控制函数:charging_control.cpp
// total_time : ms
// interval : ms
static void draw_with_interval(void (*func)(int, int), int bc, int total_time_msec, int interval_msec)
{
struct timeval start;
int resume_started = 0, backlight_started = 0, cnt = 0;
int fd_fb = -1, err = 0;
char filename[32] = {0};
gettimeofday(&start, NULL);
while((!time_exceed(start, total_time_msec)) && (common_flag == false))
{
// check if need to draw animation before performing drawing
if (!is_charging_source_available())
return;
if (!resume_started) {
resume_started = 1;
request_suspend(false);
/* make fb unblank */
snprintf(filename, sizeof(filename), "/dev/graphics/fb0");
fd_fb = open(filename, O_RDWR);
if (fd_fb < 0) {
KPOC_LOGI("Failed to open fb0 device: %s", strerror(errno));
}
err = ioctl(fd_fb, FBIOBLANK, FB_BLANK_UNBLANK);
if (err < 0) {
KPOC_LOGI("Failed to unblank fb0 device: %s", strerror(errno));
}
if (fd_fb >= 0)
close(fd_fb);
}
func(bc, ++cnt);
if (!backlight_started) {
backlight_started = 1;
usleep(200*1000);
start_backlight();
}
KPOC_LOGI("draw_with_interval... key_trigger_suspend = %d\n",key_trigger_suspend);
usleep(interval_msec*1000);
}
}
#define charging_source_waiting_duration_ms 3000
#define charging_source_waiting_interval_ms 200
static void* draw_thread_routine(void *arg)
{
int i, bc, bc_offset = 0;
int fd_fb = -1, err =0;
char buf[PROPERTY_VALUE_MAX];
char filename[32] = {0};
// protect the following critical section for the 1st time
pthread_mutex_lock(&mutex);
do {
KPOC_LOGI("draw thread working...\n");
// move here to avoid suspend when syncing with surfaceflinger
//在别处初始化为 1
if(firstTime){
// make sure charging source online when in KPOC mode
// add 2s tolerance
if(wait_until(is_charging_source_available,
charging_source_waiting_duration_ms,
charging_source_waiting_interval_ms))
{
KPOC_LOGI("wait until charging source available\n");
}else{
KPOC_LOGI("charging source not available for %d ms at KPOC starup\n",
charging_source_waiting_duration_ms);
}
firstTime = 0;
}
inDraw = 1;
// check the bc offest value
bc = get_capacity();
//这个函数内部有一段时间的循环控制,最主要是这个函数操作图标显示以及背光开与关
draw_with_interval(bootlogo_show_charging, bc, nChgAnimDuration_msec, nCbInterval_msec);
stop_backlight();
// @@@ draw fb again to refresh ddp
bootlogo_show_charging(bc, 1);
/* make fb blank */
snprintf(filename, sizeof(filename), "/dev/graphics/fb0");
fd_fb = open(filename, O_RDWR);
if (fd_fb < 0) {
KPOC_LOGI("Failed to open fb0 device: %s", strerror(errno));
}
err = ioctl(fd_fb, FBIOBLANK, FB_BLANK_POWERDOWN);
if (err < 0) {
KPOC_LOGI("Failed to blank fb0 device: %s", strerror(errno));
}
if (fd_fb >= 0)
close(fd_fb);
//循环一遍之后,进入睡眠
request_suspend(true);
inDraw = 0;
pthread_mutex_unlock(&mutex);
KPOC_LOGI("draw thread waiting...\n");
pthread_mutex_lock(&mutex);
pthread_cond_wait(&cond, &mutex);
} while(1);
pthread_exit(NULL);
return NULL;
}
void charging_control()
{
firstTime = 1;
ret = pthread_create(&draw_thread, &attrd, draw_thread_routine, NULL);
}
充电是会被编译成模块的,最终生成 system/vendor/bin/kpoc_charger
kernel-3.18\drivers\misc\mediatek\video\common\aal20\ddp_pwm.c
vendor\mediatek\proprietary\bootable\bootloader\lk\platform\mt6735\ddp_pwm.c
以上两个文件的函数都会被用到
注意:关机充电需要对背光的结点具有读写权限
device\mediatek\common\sepolicy\bsp\kpoc_charger.te中添加
allow kpoc_charger lcd_bl_file:file rw_file_perms;
device\mediatek\common\sepolicy\bsp\file.te中添加
type lcd_bl_file, file_type,sysfs_type;
device\mediatek\common\sepolicy\bsp\file_contexts中添加
/sys/devices/platform/leds-mt65xx/leds/lcd-backlight/brightness u:object_r:lcd_bl_file:s0
device\mediatek\common\sepolicy\bsp\system_app.te中添加
allow system_app lcd_bl_file:file rw_file_perms;
device\mediatek\common\sepolicy\bsp\system_server.te中添加
allow system_server lcd_bl_file:file rw_file_perms;
mtk android 关机充电,MTK 关机充电 - yueqiulijun的个人空间 - OSCHINA - 中文开源技术交流社区...相关推荐
- ireader android 源码,仿ireader书架 - androidCode的个人空间 - OSCHINA - 中文开源技术交流社区...
public class ReaderActivity extends Activity { private ShelfAdapter mAdapter; // 书架列表 private ListVi ...
- android 8.0 ps 命令,全网最全adb命令 - osc_8exjk9uk的个人空间 - OSCHINA - 中文开源技术交流社区...
一.查看adb版本 adb version C:\Users\Administrator>adb version Android Debug Bridge version 1.0.41 Vers ...
- android加入聊天功能,app实现聊天功能 - houwanmin的个人空间 - OSCHINA - 中文开源技术交流社区...
. OpenIM(Android)主体功能集成 1.1 前置准备 如果您单纯是想体验OpenIM的功能,建议直接跳过这一步.直接查看快速集成. 在这个集成教程中,我们使用已创建的Demo应用,向您 ...
- android widget动画,widget 动画 - androidCode的个人空间 - OSCHINA - 中文开源技术交流社区...
摆在眼前的困难(如果你不能认识到,请再去研究一下): 1.widget能支持的控件及函数屈指可数 2.widget不支持快速刷新 3.widget设置的时候对内存大小有要求 一线曙光: 搜遍了国内外的 ...
- android 极光推送开源,极光推送 - Android攻城狮的个人空间 - OSCHINA - 中文开源技术交流社区...
1.设置 AndroidManifest.xml libs/jpush-sdk-release 1.x.y.jar libs/armeabi/libsys 1.x.y.so 2.基础API init ...
- android 数组排重方法,js数组去重方法集合 - osc_779ncf3o的个人空间 - OSCHINA - 中文开源技术交流社区...
//第一种方法,新建一个空数组,将原来的数组循环逐个与新数组的成员做比较,如果新数组没有该元素就push进来 var arr = ['a', 1, 1, 1, 2, 4, 4, 'b', 'c', ' ...
- android 编程klinon,一些常见的知识(四) - 393858338的个人空间 - OSCHINA - 中文开源技术交流社区...
24.CoreText基础-字体必修课 转自:http://www.dreamingwish.com/dream-2011/coretext-ji-chu-font-basis.html 介绍一些字体 ...
- android 基站定位 api,基站定位查询接口 - whoisliang的个人空间 - OSCHINA - 中文开源技术交流社区...
本站查询接口免费开放 所有免费接口禁止从移动设备端直接访问,请使用固定IP的服务器转发请求. 每5分钟限制查询300次,基站/WIFI/经纬度查询接口每日限制查询1000次,反向基站查询接口每日限制查 ...
- android宿舍管理系统源码,校园宿舍管理系统 - ATB的个人空间 - OSCHINA - 中文开源技术交流社区...
本实例为一个校园宿舍管理系统, 系统用户分为三个角色,系统管理员 , 楼宇管理员, 学生, 系统管理员可以应用对楼宇管理员的管理工作(增删改查), 学生的管理(增删改查), 楼宇管理(增删改查), 学 ...
最新文章
- 创建域名Linux服务器,linux 构建域名服务器
- 【Java TCP/IP Socket】TCP Socket通信中由read返回值造成的的死锁问题(含代码)(转)...
- c++如何侦测鼠标点击?
- 游戏制作大师RPGMAKER MV/MZ安装DLC的方法
- Python 文本处理的几个库
- php使用cookie获取浏览记录,php使用cookie存库浏览记录详解
- matlab兔子问题,【matlab】狼追击兔子问题的建模
- 第一个node.js应用
- MyBatis自带的缓存配置(Cache)
- FAST迅捷路由器设置
- GitHub 标星 2.3k+,比个手势,AI 自动识别 Emoji!
- elementUi中的图片预览功能(图片放大、缩小)preview-src-list属性
- java 随机字母_Java基础之随机生成数字和字母
- 扩展欧几里得算法 | exgcd 证明 + 板子 + 习题
- 抽象类及抽象方法作用
- JAVA经验:很有启发(四)
- UVa112992-贪心算法
- html中的mata标签详解
- apache2.2 设置最大连接数 默认是150个(最详细)
- zabbix监控服务器
热门文章
- 计算机病毒会破坏计算机网络吗,计算机病毒不会感染和破坏_______。
- *p++、*(p++)、++*p、++(*p)、(*p)++
- 使用SQL批量处理文章中的图片路径
- LSP与tunnel关系
- 对大学毕业生的建议_给大学毕业生的一些建议:开发软件的梦想
- 2019-01-10工作日志
- UVA1220 Hali-Bula的晚会 Party at Hali-Bula 题解
- Linux Socket 编程实验
- 苹果神武4手游等待服务器响应,新服想要成为大佬要注意这些细节
- chrome关闭硬件加速_Win10系统Chrome浏览器怎么关闭硬件加速?