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 中有如下的函数定义
1 int GUIAction::doAction(Action action, int isThreaded /* = 0 */) 2 { 3 static string zip_queue[10]; 4 static int zip_queue_index; 5 static pthread_t terminal_command; 6 int simulate; 7 8 std::string arg = gui_parse_text(action.mArg); //这里获取tw_action=的参数即tw_action_param传入的参数 9 10 std::string function = gui_parse_text(action.mFunction); //获取tw_action传入的函数名字 11 12 DataManager::GetValue(TW_SIMULATE_ACTIONS, simulate); 13 14 if (function == "reboot") 15 { 16 //curtainClose(); this sometimes causes a crash 17 18 sync(); 19 DataManager::SetValue("tw_gui_done", 1); 20 DataManager::SetValue("tw_reboot_arg", arg); //把参数传入到,其中tw_reboot_arg的类型是 map<string, string> 21 22 return 0; 23 } ...
好了,再看别外一个文件:
1 // reboot: Reboot the system. Return -1 on error, no return on success 2 int TWFunc::tw_reboot(RebootCommand command) //RebootCommand 中一个enum类型,定义在twrp-functions.hpp中 3 { 4 // Always force a sync before we reboot 5 sync(); 6 7 switch (command) { 8 case rb_current: 9 case rb_system: 10 Update_Log_File(); 11 Update_Intent_File("s"); 12 sync(); 13 check_and_run_script("/sbin/rebootsystem.sh", "reboot system"); 14 return reboot(RB_AUTOBOOT); 15 case rb_recovery: 16 check_and_run_script("/sbin/rebootrecovery.sh", "reboot recovery"); 17 return __reboot(LINUX_REBOOT_MAGIC1, LINUX_REBOOT_MAGIC2, LINUX_REBOOT_CMD_RESTART2, (void*) "recovery"); 18 case rb_bootloader: 19 check_and_run_script("/sbin/rebootbootloader.sh", "reboot bootloader"); 20 return __reboot(LINUX_REBOOT_MAGIC1, LINUX_REBOOT_MAGIC2, LINUX_REBOOT_CMD_RESTART2, (void*) "bootloader"); 21 case rb_poweroff: 22 check_and_run_script("/sbin/poweroff.sh", "power off"); 23 #ifdef ANDROID_RB_POWEROFF 24 android_reboot(ANDROID_RB_POWEROFF, 0, 0); 25 #endif 26 return reboot(RB_POWER_OFF); 27 case rb_download: 28 check_and_run_script("/sbin/rebootdownload.sh", "reboot download"); 29 return __reboot(LINUX_REBOOT_MAGIC1, LINUX_REBOOT_MAGIC2, LINUX_REBOOT_CMD_RESTART2, (void*) "download"); 30 default: 31 return -1; 32 } 33 return -1; 34 }
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);elseTWFunc::tw_reboot(rb_system);...
转载于:https://www.cnblogs.com/sn-dnv-aps/p/3676345.html
twrp gui/actions.cpp 中的功能实现 tw_action ,tw_action_param ,第二章相关推荐
- css 识别变量中的换行符_Python编程 第二章——变量和简单数据类型
变量名 变量名只能包含字母.数字.下划线,且不能以数字打头 变量名不能包含空格,一般以_作为分隔 不能使用保留字作为变量名 变量名通常使用小写 文件名 小写字母.下划线 字符串 用单引号或双引号括起的 ...
- 管理系统中计算机应用第二章思维导图,第二章 项目范例:剖析网络订票系统 课件(15张PPT)...
第二章 项目范例:剖析网络订票系统 课件(15张PPT) 2.1 信息系统及其组成 2.2 信息系统的功能 2.3 信息系统中的计算机和移动终端 第二章 信息系统的组成与功能 教材p29-p33 信息 ...
- 【Android 逆向】整体加固脱壳 ( DEX 优化流程分析 | DexPrepare.cpp 中 dvmOptimizeDexFile() 方法分析 | /bin/dexopt 源码分析 )
文章目录 前言 一.DexPrepare.cpp 中 dvmOptimizeDexFile() 方法分析 二./bin/dexopt 源码分析 前言 上一篇博客 [Android 逆向]整体加固脱壳 ...
- Redux中的功能式React式编程简介
by Bhuvan Malik 通过布凡·马利克(Bhuvan Malik) Redux中的功能式React式编程简介 (An introduction to functional Reactive ...
- Cpp中string使用
Cpp中string的使用 1. 创建和初始化 2. 操作符 3. string和char*的区别 4. 相关操作 4.1 append 添加文本 4.2 assign赋值 4.3 at 4.4 be ...
- SpringBoot和Mybatis实现评论楼中楼功能(一张表搞定)
文章目录 一.数据库设计 二.搭建SpringBoot框架 三.代码编写 零.效果 在网上搜索了很多,发现很多都是用两张表或者使用jpa实现的,本篇文章将讲述使用一张表来实现评论回复楼中楼功能,使用M ...
- SpringBoot和Mybatis实现评论楼中楼功能(一张表搞定,含源码)
原文链接:https://onestar.newstar.net.cn/blog/35 零.效果 在网上搜索了很多,发现很多都是用两张表或者使用jpa实现的,本篇文章将讲述使用一张表来实现评论回复楼中 ...
- matlab怎么美化gui按钮,matlab中美化gui
10分钟搞定matlabGUI 参考文献: MATLAB程序设计教程 李海涛,邓樱 编著 高等教育出版社,2002 2. 菜单方式 在Matlab的主窗口中,选择File菜单中的New菜单项, 再选择 ...
- Nature子刊:微生物系统中的功能与功能冗余
翻译:周之超@UW-Madison 编辑注:该文章发表于2018年的Perspective,目前被引405次.其作者Stilianos Louca大家并不陌生,正是常用微生物物种功能注释软件FAPRO ...
- 丰度决定了细菌在复杂群落中的功能作用
本文转载自"微生态笔记",已获授权 标题:Abundance determines the functional role of bacterial phylotypes in c ...
最新文章
- html5通html5通,HTML5 history详解
- ​Highmaps网页图表教程之绘图区显示标签显示数据标签定位
- Android--多点触控事件捕捉
- python工作好找吗-Python好找工作吗 不看会后悔
- php解析url并得到url中的参数及获取url参数的四种方式
- 云上“炼”码兵器 GitHub Codespaces
- Gitlab添加SSH密钥的解决办法
- 搭建、使用与维护私有PyPi仓库
- Kudu之Tablet的发现过程
- 思科路由器的基本配置
- iOS 强制屏幕实现旋转功能,超级简单。
- 计算机网络高级工程师证书,网络安全高级工程师的证书??
- 阻止事件冒泡 阻止浏览器的默认行为
- Postgresql语句持续更新
- 机器人史宾_史宾机器人:重启
- 基于scapy实现随机源IP的DNS发包工具
- Topcoder 2016 TCO Algorithm Algo Semifinal 1 Hard ColorfunPath [网络流]
- 设计模式-05.01-行为型-观察者模板模式
- 2010.10.15_ximo_VMP脱壳后antidump的处理及再谈简单的爆破(带视频)
- FPGA学习经典网站推荐
热门文章
- ECMAScript——(二)
- 大学计算机课程复习--汇编语言
- 如何快速清空一个文件内容
- linux docker安装_Linux -- Docker安装
- ceph搭建_【实战演练】基于各种存储模拟器与软件存储的存储实验07-Ceph分布式存储的3种存储类型使用方法...
- 小程序仿微视_争抢流量!腾讯微视也要开始搞短视频带货
- python await timeout_python等待10秒执行下一命令的方法
- linux系统的总父目录,Linux虚拟文件系统-资料路径名的解析(2)-回退父目录
- WEBPACK+ES6+REACT入门(7/7)-React中绑定文本框与state中的值
- 开源自动化运维工具_批量与重复运维压力如何破?了解一下这款自动化运维工具...