已绑定手机
|
1. 概述
文档主要描述 Tina 功耗管理,包含 Standby 管理、场景管理、用户层接口等内容。
1.1. 编写目的
简要介绍 Tina 功耗管理机制,
1.2. 适用范围
适用于 Tina SDK
2. nativepower 全局描述
实时监控电源状态,包括电池充放电、电源状态变化,利用消息通知机制,从底层上报给应用,保护系统用电安全以及监控电源状态变化。
2.1. 代码文件
关键代码路径:
/tina/package/Allwinner/nativepower/deamon/main.c
/tina/package/allwinner/nativepower/libpower
/tina/package/allwinner/nativepower/lIBSuspend
2.2. nativepower package tree
/tina/ackage/allwinner/nativepower
---daemon 场景管理,服务端监控和处理客户端发来的 dbus 消息
---demo 使用说明
---files 不同功耗场景的配置
---include 具体场景的宏定义和函数定义
---libnativepower 应用层接口,具体场景函数的实现以及客户端的处理
---libpower wake_lock 的请求,释放,计数,获取等
---libsuspend 监测 wake_lock 的状态,使系统进入不同状态
---Makefile 编译规则
2.3. 框架流程
在 daemon 的 main.cpp 的 main 函数里:
首先会申请一个 NATIVE_POWER_DISPLAY_LOCK 的锁 , 让系统不能进入休眠。
然后通过 autosuspend_enable 启动 libsuspend 中的线程去监测 wake_lock 的状态, 当状态为无锁时,系统自动进入休眠。具体启动的线程与内核支持的 suspend 方式有关。有 earlysuspend_thread_func 和suspend_thread_func 两种。
接着会启动 ubus_server_thread_func , 去响应客户端的请求。
完成这些初始化的动作之后, 会进入 while 循环,循环监测自动休眠时间是否到了, 到了的话就释放NATIVE_POWER_DISPLAY_LOCK 锁, 让系统进入休眠。
具体框架示意图如下:
2.4. 场景管理
系统启动后,会自动设置一个 boot complete 的场景。其他场景的设置,则由用户程序根据自己的需求去调用应用层接口,通过 bus 来设置。不同的场景,通过配置文件去配置, 详见 3.4 节。
具体到守护进程内,这是调用了 np_scene_change, 然后根据场景名称, 读取/etc/config/nativepower下的对应配置, 设置到/sys 文件系统的对应节点中。
具体流程示意图如下:
3. 应用层接口
3.1. 代码文件
关键代码路径:
package/allwinner/nativepower/include
package/allwinner/nativepower/libnativepower
3.2. 总体框架
Libnativepower 封装了通过 dbus 发送请求的接口,这些请求会调用守护进程 nativepower_daemon 的功能函数。
文件下载, 请回复
|
|