recovery 升级过程LED灯闪烁

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

 

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

 

    第一,控制LED的闪烁,这个需要kernel提供方法或者接口,我们掉用kernel提供的API,或者控制某个节点(/sys/class/leds/xxxx/xxxx)来控制灯的闪烁,这个每个平台的硬件配置不一样,控制ledgpio也不一样,所以首先要找到控制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线程 .......... .......... } .......... .......... }

猜你喜欢

转载自www.cnblogs.com/codeking100/p/10339125.html