twrp gui/actions.cpp 中的功能实现 tw_action ,tw_action_param ,第二章
继续分析 twrp ui.xml中的相关内容,以<page name="reboot">为讲解内容
<object type="button">
<highlight color="%highlight_color%" />
<condition var1="tw_reboot_system" var2="1" />
<placement x="%col1_x%" y="%row1_y%" />
<font resource="font" color="%button_text_color%" />
<text>System</text>
<image resource="main_button" />
<actions>
<action function="set">tw_back=reboot</action>
<action function="set">tw_action=reboot</action>
<action function="set">tw_action_param=system</action>
<action function="set">tw_has_action2=0</action>
<action function="set">tw_text1=No OS Installed! Are you</action>
<action function="set">tw_text2=sure you wish to reboot?</action>
<action function="set">tw_action_text1=Rebooting...</action>
<action function="set">tw_complete_text1=Rebooting...</action>
<action function="set">tw_slider_text=Swipe to Reboot</action>
<action function="page">rebootcheck</action>
</actions>
</object> <object type="button">
<highlight color="%highlight_color%" />
<condition var1="tw_reboot_poweroff" var2="1" />
<placement x="%col2_x%" y="%row1_y%" />
<font resource="font" color="%button_text_color%" />
<text>Power Off</text>
<image resource="main_button" />
<actions>
<action function="set">tw_back=reboot</action>
<action function="set">tw_action=reboot</action>
<action function="set">tw_action_param=poweroff</action>
<action function="set">tw_has_action2=0</action>
<action function="set">tw_text1=No OS Installed! Are you</action>
<action function="set">tw_text2=sure you wish to power off?</action>
<action function="set">tw_action_text1=Turning Off...</action>
<action function="set">tw_complete_text1=Turning Off...</action>
<action function="set">tw_slider_text=Swipe to Power Off</action>
<action function="page">rebootcheck</action>
</actions>
</object> <object type="button">
<highlight color="%highlight_color%" />
<condition var1="tw_reboot_recovery" var2="1" />
<placement x="%col1_x%" y="%row2_y%" />
<font resource="font" color="%button_text_color%" />
<text>Recovery</text>
<image resource="main_button" />
<actions>
<action function="set">tw_back=reboot</action>
<action function="set">tw_action=reboot</action>
<action function="set">tw_action_param=recovery</action>
<action function="set">tw_has_action2=0</action>
<action function="set">tw_text1=No OS Installed! Are you</action>
<action function="set">tw_text2=sure you wish to reboot?</action>
<action function="set">tw_action_text1=Rebooting...</action>
<action function="set">tw_complete_text1=Rebooting...</action>
<action function="set">tw_slider_text=Swipe to Reboot</action>
<action function="page">rebootcheck</action>
</actions>
</object> <object type="button">
<highlight color="%highlight_color%" />
<condition var1="tw_reboot_bootloader" var2="1" />
<placement x="%col2_x%" y="%row2_y%" />
<font resource="font" color="%button_text_color%" />
<text>Bootloader</text>
<image resource="main_button" />
<actions>
<action function="set">tw_back=reboot</action>
<action function="set">tw_action=reboot</action>
<action function="set">tw_action_param=bootloader</action>
<action function="set">tw_has_action2=0</action>
<action function="set">tw_text1=No OS Installed! Are you</action>
<action function="set">tw_text2=sure you wish to reboot?</action>
<action function="set">tw_action_text1=Rebooting...</action>
<action function="set">tw_complete_text1=Rebooting...</action>
<action function="set">tw_slider_text=Swipe to Reboot</action>
<action function="page">rebootcheck</action>
</actions>
</object>
tw_actoin=reboot传入的是命令,tw_action_param=system 传入的是参数
在gui/actions.cpp 中有如下的函数定义
int GUIAction::doAction(Action action, int isThreaded /* = 0 */)
{
static string zip_queue[];
static int zip_queue_index;
static pthread_t terminal_command;
int simulate; std::string arg = gui_parse_text(action.mArg); //这里获取tw_action=的参数即tw_action_param传入的参数 std::string function = gui_parse_text(action.mFunction); //获取tw_action传入的函数名字 DataManager::GetValue(TW_SIMULATE_ACTIONS, simulate); if (function == "reboot")
{
//curtainClose(); this sometimes causes a crash sync();
DataManager::SetValue("tw_gui_done", );
DataManager::SetValue("tw_reboot_arg", arg); //把参数传入到,其中tw_reboot_arg的类型是 map<string, string> return ;
}
...
好了,再看别外一个文件:
// reboot: Reboot the system. Return -1 on error, no return on success
int TWFunc::tw_reboot(RebootCommand command) //RebootCommand 中一个enum类型,定义在twrp-functions.hpp中
{
// Always force a sync before we reboot
sync(); switch (command) {
case rb_current:
case rb_system:
Update_Log_File();
Update_Intent_File("s");
sync();
check_and_run_script("/sbin/rebootsystem.sh", "reboot system");
return reboot(RB_AUTOBOOT);
case rb_recovery:
check_and_run_script("/sbin/rebootrecovery.sh", "reboot recovery");
return __reboot(LINUX_REBOOT_MAGIC1, LINUX_REBOOT_MAGIC2, LINUX_REBOOT_CMD_RESTART2, (void*) "recovery");
case rb_bootloader:
check_and_run_script("/sbin/rebootbootloader.sh", "reboot bootloader");
return __reboot(LINUX_REBOOT_MAGIC1, LINUX_REBOOT_MAGIC2, LINUX_REBOOT_CMD_RESTART2, (void*) "bootloader");
case rb_poweroff:
check_and_run_script("/sbin/poweroff.sh", "power off");
#ifdef ANDROID_RB_POWEROFF
android_reboot(ANDROID_RB_POWEROFF, , );
#endif
return reboot(RB_POWER_OFF);
case rb_download:
check_and_run_script("/sbin/rebootdownload.sh", "reboot download");
return __reboot(LINUX_REBOOT_MAGIC1, LINUX_REBOOT_MAGIC2, LINUX_REBOOT_CMD_RESTART2, (void*) "download");
default:
return -;
}
return -;
}
RebootCommand类型定义如下:
typedef enum {
rb_recovery,
rb_poweroff,
rb_bootloader,
rb_download,
} RebootCommand;
触发重启进入什么类型的调用在twrp.cpp::main()函数中
定义如下:
...
// Reboot
TWFunc::Update_Intent_File(Reboot_Value);
TWFunc::Update_Log_File();
gui_print("Rebooting...\n");
string Reboot_Arg;
DataManager::GetValue("tw_reboot_arg", Reboot_Arg); //这里获取tw_reboot_arg中的变量
if (Reboot_Arg == "recovery")
TWFunc::tw_reboot(rb_recovery); //传入enum变量,触发重启进入recovery动作
else if (Reboot_Arg == "poweroff")
TWFunc::tw_reboot(rb_poweroff);
else if (Reboot_Arg == "bootloader")
TWFunc::tw_reboot(rb_bootloader);
else if (Reboot_Arg == "download")
TWFunc::tw_reboot(rb_download);
else
TWFunc::tw_reboot(rb_system);
...
twrp gui/actions.cpp 中的功能实现 tw_action ,tw_action_param ,第二章的更多相关文章
- c/cpp中怎样切割字符串,相似于split的功能
在python中,假设要求当前时间的unix时间戳,我特别喜欢这么用: import time timestr = time.time() timestamp = int(timestr.split( ...
- Django——Xadmin中的功能
app_label 功能 如果不在标准models.py里面定义model,则必须指定这个model归属于哪个app. 使用 app_label = 'oms' actions 功能 Action插件 ...
- template 不能分别在.h和.cpp中定义模板
先上代码: #ifndef SEQLIST_H #define SEQLIST_H #include <iostream> ; template <typename type> ...
- Qt调用dll中的功能函数
声明: 事先我已经自己动手写了一个简单的dll文件(myDLL.dll),C版接口的.并且用我前两篇有关DLL文章里面的方法,从dll中导出了导入库(.lib)文件,dll中有两个函数,原型如下: ...
- OpenGL中的功能与OSG对应功能 (摘)
将OpenGL中的功能与OSG对应功能进行列举: OpenGL function OpenSceneGraph implementation glClear( GLbitfield mask ) os ...
- oracle数据库不支持mysql中limit功能
oracle数据库不支持mysql中limit功能,但可以通过rownum来限制返回的结果集的行数,rownum并不是用户添加的字段,而是oracle系统自动添加的. (1)使查询结果最多返回前10行 ...
- ppt画笔标记在哪里|ppt中画笔工具功能怎么用?
一.ppt中画笔工具功能在哪里? 这个画笔工具其实就相当于我们的一个标记工具,要实现标记功能首先将需要演示的PPT按住F5进入到放映状态,然后在右击ppt上的空白处就会弹出衣蛾对话框,在对话框中选择“ ...
- BEGINNING SHAREPOINT® 2013 DEVELOPMENT 第14章节--使用Office Services开发应用程序 Excel Services中新功能
BEGINNING SHAREPOINT® 2013 DEVELOPMENT 第14章节--使用Office Services开发应用程序 Excel Services中新功能 从S ...
- 浏览器中 F12 功能的简单介绍
chrome浏览器中 F12 功能的简单介绍 由于F12是前端开发人员的利器,所以我自己也在不断摸索中,查看一些博客和资料后,自己总结了一下来帮助自己理解和记忆,也希望能帮到有需要的小伙伴,嘿嘿! 首 ...
随机推荐
- spring-framework-3.2.4.RELEASE 综合hibernate-release-4.3.5.Final一个错误Caused by: java.lang.NoClassDefFound
LZ一体化的今天spring-framework-3.2.4.RELEASE 综合hibernate-release-4.3.5.Final一个错误Caused by: java.lang.NoCla ...
- Android Studio Gradle 添加.so 支持文件
近期发展Android Wear 关注商品.官员Demo所有gradle 工程. 当然,我也用eclipse配置一个可行的环境. 问题来了,eclipse,android studio 开发 andr ...
- A股市场暴跌背后的三大元凶?
周一两市低开低走,盘中空方连续打压股指,大盘一路下行,沪指2000点关口告急,收于1963.24点,跌幅超过了5%.行业板块全线溃败.银行.证券领衔大幅杀跌,板块跌幅一度超过5%:继上周五中国石油A股 ...
- uva10480(最小割)
传送门:Sabotage 题意:给定多个城市的网络,每个城市之间的通信有花费,要求使得首都和最大城市之间的通信断掉的最小花费.要求输出任意一组砸掉的边. 分析:跑一遍最大流dinic后,根据最小割定理 ...
- android greenDao SQLite数据库操作使用的工具
关于如何建立类生成一个演示project.今天介绍如何使用. 这是ExampleDaoGeneratorproject代码,做了一些改动 /* * Copyright (C) 2011 Markus ...
- UML它 时序图
在本文中,我们重点谈谈UML时序图,UML包括在主时序图的建模元素:对象(Actor).生命线(Lifeline).聚焦控制(Focusofcontrol).消息(Message)等等. 一.UML时 ...
- [置顶] Android常用适配器控件
Android常用适配器控件 列表控件用于显示数据集合,Android不是使用一种类型的控件管理显示和数据,而是将这两项功能分布用列表控件和适配器来实现.列表控件扩展了android.widget.A ...
- ASP.NET程序发布流程
1.在要发布的项目上 右键->发布,如下图所示 “目标位置”选择要发布到的本地目录,点击“发布” 2.打开IIS,在右键“网站”,选择“添加网站”,出现如下所示的对话框 在“网站名称”处添加一个 ...
- hdu 1561 The more, The Better (依赖背包 树形dp)
题目: 链接:点击打开链接 题意: 非常明显的依赖背包. 思路: dp[i][j]表示以i为根结点时攻击j个城堡得到的最大值.(以i为根的子树选择j个点所能达到的最优值) dp[root][j] = ...
- Android5.0L下因sensorservice crash导致systemserver重新启动的第二种场景分析
一.出问题的场景 1.Sensorservice线程正在处理compass sensor事件的过程中.检查了一次buffer的指针的有效性,并在稍后会传递到AKM获取数据的函数接口中使用 2.Sens ...