充电相关文件目录 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 - 中文开源技术交流社区...相关推荐

  1. ireader android 源码,仿ireader书架 - androidCode的个人空间 - OSCHINA - 中文开源技术交流社区...

    public class ReaderActivity extends Activity { private ShelfAdapter mAdapter; // 书架列表 private ListVi ...

  2. android 8.0 ps 命令,全网最全adb命令 - osc_8exjk9uk的个人空间 - OSCHINA - 中文开源技术交流社区...

    一.查看adb版本 adb version C:\Users\Administrator>adb version Android Debug Bridge version 1.0.41 Vers ...

  3. android加入聊天功能,app实现聊天功能 - houwanmin的个人空间 - OSCHINA - 中文开源技术交流社区...

    .  OpenIM(Android)主体功能集成 1.1  前置准备 如果您单纯是想体验OpenIM的功能,建议直接跳过这一步.直接查看快速集成. 在这个集成教程中,我们使用已创建的Demo应用,向您 ...

  4. android widget动画,widget 动画 - androidCode的个人空间 - OSCHINA - 中文开源技术交流社区...

    摆在眼前的困难(如果你不能认识到,请再去研究一下): 1.widget能支持的控件及函数屈指可数 2.widget不支持快速刷新 3.widget设置的时候对内存大小有要求 一线曙光: 搜遍了国内外的 ...

  5. android 极光推送开源,极光推送 - Android攻城狮的个人空间 - OSCHINA - 中文开源技术交流社区...

    1.设置 AndroidManifest.xml libs/jpush-sdk-release 1.x.y.jar libs/armeabi/libsys 1.x.y.so 2.基础API init ...

  6. android 数组排重方法,js数组去重方法集合 - osc_779ncf3o的个人空间 - OSCHINA - 中文开源技术交流社区...

    //第一种方法,新建一个空数组,将原来的数组循环逐个与新数组的成员做比较,如果新数组没有该元素就push进来 var arr = ['a', 1, 1, 1, 2, 4, 4, 'b', 'c', ' ...

  7. android 编程klinon,一些常见的知识(四) - 393858338的个人空间 - OSCHINA - 中文开源技术交流社区...

    24.CoreText基础-字体必修课 转自:http://www.dreamingwish.com/dream-2011/coretext-ji-chu-font-basis.html 介绍一些字体 ...

  8. android 基站定位 api,基站定位查询接口 - whoisliang的个人空间 - OSCHINA - 中文开源技术交流社区...

    本站查询接口免费开放 所有免费接口禁止从移动设备端直接访问,请使用固定IP的服务器转发请求. 每5分钟限制查询300次,基站/WIFI/经纬度查询接口每日限制查询1000次,反向基站查询接口每日限制查 ...

  9. android宿舍管理系统源码,校园宿舍管理系统 - ATB的个人空间 - OSCHINA - 中文开源技术交流社区...

    本实例为一个校园宿舍管理系统, 系统用户分为三个角色,系统管理员 , 楼宇管理员, 学生, 系统管理员可以应用对楼宇管理员的管理工作(增删改查), 学生的管理(增删改查), 楼宇管理(增删改查), 学 ...

最新文章

  1. 创建域名Linux服务器,linux 构建域名服务器
  2. 【Java TCP/IP Socket】TCP Socket通信中由read返回值造成的的死锁问题(含代码)(转)...
  3. c++如何侦测鼠标点击?
  4. 游戏制作大师RPGMAKER MV/MZ安装DLC的方法
  5. Python 文本处理的几个库
  6. php使用cookie获取浏览记录,php使用cookie存库浏览记录详解
  7. matlab兔子问题,【matlab】狼追击兔子问题的建模
  8. 第一个node.js应用
  9. MyBatis自带的缓存配置(Cache)
  10. FAST迅捷路由器设置
  11. GitHub 标星 2.3k+,比个手势,AI 自动识别 Emoji!
  12. elementUi中的图片预览功能(图片放大、缩小)preview-src-list属性
  13. java 随机字母_Java基础之随机生成数字和字母
  14. 扩展欧几里得算法 | exgcd 证明 + 板子 + 习题
  15. 抽象类及抽象方法作用
  16. JAVA经验:很有启发(四)
  17. UVa112992-贪心算法
  18. html中的mata标签详解
  19. apache2.2 设置最大连接数 默认是150个(最详细)
  20. zabbix监控服务器

热门文章

  1. 计算机病毒会破坏计算机网络吗,计算机病毒不会感染和破坏_______。
  2. *p++、*(p++)、++*p、++(*p)、(*p)++
  3. 使用SQL批量处理文章中的图片路径
  4. LSP与tunnel关系
  5. 对大学毕业生的建议_给大学毕业生的一些建议:开发软件的梦想
  6. 2019-01-10工作日志
  7. UVA1220 Hali-Bula的晚会 Party at Hali-Bula 题解
  8. Linux Socket 编程实验
  9. 苹果神武4手游等待服务器响应,新服想要成为大佬要注意这些细节
  10. chrome关闭硬件加速_Win10系统Chrome浏览器怎么关闭硬件加速?