zoukankan      html  css  js  c++  java
  • 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线程
            ..........
            ..........
        }
        ..........
        ..........
    }
  • 相关阅读:
    MySQL事务处理
    MySQL触发器
    MySQL游标
    MySQL存储过程
    MySQL视图
    MySQL创建和操纵表
    Java异常体系结构以及异常处理机制、自定义异常
    Java的面向对象和抽象类、接口、内部类以及OOP实战
    Java数组声明创建和使用以及多维数组、Arrays类、稀疏数组
    Java通过循环结构和switch实现简易计算器
  • 原文地址:https://www.cnblogs.com/codeking100/p/10339125.html
Copyright © 2011-2022 走看看