Android设备在进入recovery升级的过程,我们在屏幕上面可以看到升级的机器人动画,以及升级的进度显示。这仅限于有屏幕的设备,比如平板PAD,电视TV等,对与没有屏幕的盒子BOX,那么在不接入输出设备的时候,升级过程无法可视化的显示,所以就有了这个需求,在升级过程,通过控制面板LED等的闪烁,来告知用户,正在升级,升级完成等状态。

我们添加这个功能,需要分两个步骤:

第一,控制LED的闪烁,这个需要kernel提供方法或者接口,我们掉用kernel提供的API,或者控制某个节点(/sys/class/leds/xxxx/xxxx)来控制灯的闪烁,这个每个平台的硬件配置不一样,控制led的gpio也不一样,所以首先要找到控制led灯的方法。

第二,我们在recovery.cpp中,当需要升级的时候,在升级开始之前,创建一个线程,在线程里,按照第一步的方法,循环点亮LED等,在升级完成之后,终止线程即可。如果升级成功,则LED等常亮,若升级失败,则LED熄灭。即可通过LED的状态,判断升级过程,升级结果等。

参考流程:bootable/recovery/recovery.cpp

//LED控制实现
int set_led_status(int status){
//LED 控制方法实现
} //LED 控制线程
void* LED_thread(void *cookie){
int flag = 0;
for(;;){
if(strcmp(cookie,"over")==0) {
break;
} if(flag == 0) {
set_led_status(1);
flag = 1;
} else {
set_led_status(0);
flag = 0;
}
usleep(500000);
}
return NULL;
} int main(int argc, char **argv) {
if (update_package != NULL) {
//创建LED线程控制线程
//pthread_create(&ntid, NULL, LED_thread, (void *)message);
status = install_package(update_package, &wipe_cache, TEMPORARY_INSTALL_FILE, true);
if (status == INSTALL_SUCCESS && wipe_cache) {
if (erase_volume("/cache")) {
LOGE("Cache wipe (requested by package) failed.");
}
}
//终止LED线程
..........
..........
}
..........
..........
}

recovery 升级过程LED灯闪烁的更多相关文章

  1. Arduino 翻译系列 - LED 灯闪烁

    原文地址 - https://www.arduino.cc/en/Tutorial/Blink 闪烁 这个例子展示了你能拿 Arduino / Genuino 板子来干的最简单的事:使开发板上的 LE ...

  2. 树莓派开机运行Python脚本 控制LED灯闪烁

    一.新建一个开机运行文件 在 /home/pi/.config 下创建一个文件夹,名称为 autostart,并在该文件夹下创建一个led.desktop文件(文件名以.desktop结尾) 编辑le ...

  3. 1个LED灯闪烁的Arduino控制

    控制任务和要求 让一个LED灯闪烁 接线 程序设计 1 int half_cycle=1000; // define the cycle time of LED blink 2 int LED_pin ...

  4. recovery 升级过程执行自定义shell命令

    有时候我们需要,在升级的过程中,执行一些shell命令,来完成我们的一些需求,利用升级过程,进行一些特殊化的操作,思路如下: 第一: 把我们需要执行的命令,写成一个test.sh脚本,然后在recov ...

  5. android recovery升级过程中掉电处理

    一般在升级过程,都会提示用户,请勿断电,不管是android的STB,TV还是PHONE,或者是其他的终端设备,升级过程,基本上都可以看到“正在升级,请勿断电”,然后有个进度条,显示升级的进度. 但是 ...

  6. 使用uart串口接收模块接收信号,控制led灯闪烁

    功能描述: 使用遵循uart协议的接收模块接收控制信号,用来控制led的闪烁. 设计输入: 1.uart输入信号 2.时钟信号 3.复位信号 4.led信号 设计思路: 总体上:前面已经写了串口接收模 ...

  7. DSP28335的上手试用LED灯闪烁-第一篇

    1. 本次以三兄弟的DSP28335开发板为例,看下JTAG接口,EMU0,EMU1的用途,不是很懂,不深入研究,用到再说 EMU0/1是TI芯片的JTAG才有的信号,本身不属于JTAG标准里的信号, ...

  8. STM32通用定时器实现LED灯闪烁

    刚才看了一下STM32通用定时器的教程,其实和51的定时器使用差不多.只是因为32的时钟更复杂,可操控的寄存器更多,所以写的时候可能更复杂. 使用通用定时器中断的一般步骤:1.使能定时器时钟 这个需要 ...

  9. android recovery 升级之USB设备挂载

    Recovery升级过程,通常会从两个地方获取升级包update.zip升级,一般在线升级,会把升级包下载到cache分区,本地升级会从usb或者tf卡中升级.本文讨论下,本地USB升级时,无法挂载U ...

随机推荐

  1. :nth-child(n)选择器

    p:nth-child(n)   选择属于父元素的第n个子元素的每个p标签

  2. 2D转换与3D转换的区别

    2D与3D的区别——2D 转换元素能够改变元素 x 和 y 轴.3D 转换元素还能改变其 Z 轴.

  3. Django--中间件相关

    一 什么是中间件 中间件顾名思义,是介于request与response处理之间的一道处理过程,相对比较轻量级,并且在全局上改变django的输入与输出.因为改变的是全局,所以需要谨慎实用,用不好会影 ...

  4. thymeleaf 的使用

    thymeleaf 语法详解1.变量输出: th:text :在页面中输出某个值 th:value :将一个值放到input标签中的value中.2.判断字符串是否为空 ①:调用内置对象一定要用# ② ...

  5. Makefile.am文件配置

    Makefile.am Makefile.am是一种比Makefile更高层次的编译规则,可以和configure.in文件一起通过调用automake命令,生成Makefile.in文件,再调用./ ...

  6. vue 动态组件、父子组件传参

    1.vue中的自定义属性并获得属性的值 自定义属性::data-id语法为 :data-属性  获取属性的值:ev.target.dataset.id 2.vue父子组件传值 3.动态组件使用

  7. Python pandas学习总结

    本来打算学习pandas模块,并写一个博客记录一下自己的学习,但是不知道怎么了,最近好像有点急功近利,就想把别人的东西复制过来,当心沉下来,自己自觉地将原本写满的pandas学习笔记删除了,这次打算写 ...

  8. SQL Server重置INDETITY的开始值

    @@IDENTITY 和SCOPE_IDENTITY 返回在当前会话中的任何表内所生成的最后一个标识值.但是,SCOPE_IDENTITY 只返回插入到当前作用域中的值:@@IDENTITY 不受限于 ...

  9. IE8浏览器官方下载 包含Windows中繁英文各个版本

    当你的Windows XP安裝IE8时提示"此安装不支持您的操作系统的当前语言",或者安装IE8,在语言包安装时报错,可以尝试使用先安装英文版本,再安装多国语言包的方式操作. 20 ...

  10. MySQL学习(三) SQL基础查询

    其实在数据库最经常用的当属查询操作 基本语法 SELECT [ALL | DISTINCT | DISTINCTROW ] 字段列表 AS 字段别名 [FROM 表名 WHERE 条件表示式 GROU ...