Exemple #1
0
/*******************************************************************************
 *
 * 函数名  : cmos_delay
 * 负责人  : 彭鹏
 * 创建日期:20151224
 * 函数功能: delay系统调用
 *
 * 输入参数: millisec 延迟时间(CMOS_TICK_TIMES)数
 * 输出参数: 无
 * 返回值  : 无
 * 调用关系: 无
 * 其 它   : CMOS_TICK_TIMES一般以ms为单位 该函数延迟任务millisec毫秒
 *
 ******************************************************************************/
void cmos_delay(cmos_int32_T millisec)
{ 
    cmos_assert(0 < millisec, __FILE__, __LINE__);

    cmos_delay_before(millisec);
    svc_delay(millisec);
    cmos_delay_after(millisec);

    return;
}
Exemple #2
0
int check_power_status(void)
{
    int var4;
    int var5;
    struct ShowBatteryChangeHandle *var6;
    int var7;
    int var8;
    int var9;
    int vasl;
    int sp0;
    int sp4;
    int sp8;
    int sp12;

    sp12 = svc_3e();
    if(sp12 == 1) {
        wlibc_uprintf(
                "battery low power with no dc or ac, should set power off\n");
        ShowPictureEx("c:\\os_show\\low_pwr.bmp", 0);
        svc_delay(3000);
        return -1;
    }
    if(sp12 == 3) {
        wlibc_uprintf(
                "battery low power with dc or ac, should charge longer\n");
        ShowPictureEx("c:\\os_show\\bempty.bmp", 0);
        svc_delay(3000);
        return -1;

    }
    sp12 = -1;
    svc_b0("target", "power_start", &sp12, 1);
    if(sp12 == 1) {
        return 0;
    }
    sp12 = svc_3b();
    wlibc_uprintf("startup status = %d\n", sp12);
    if( sp12 != 0)
        return 0;
    var6 = 0;
    sp0 = 0;
    power_int_reg();
    usb_detect_enter();
    var6 = ShowBatteryCharge_init();

    svc_delay(1500);
    sp8 = 0;
    sp4 = 0;
    svc_38(&sp8, &sp4);
    if(sp4 == 0) {
        wlibc_uprintf("no battery exist\n");
        ShowBatteryCharge_exit(var6);
        power_int_rel();
        usb_detect_exit();
        return 0;

    }
    wlibc_int_disable();
    var5 = svc_batt_chargerate();
    wlibc_int_enable();
    wlibc_uprintf("base bat_cal = %d\n", var5);
    if(var5 > 95)
        var5 = 100;
    if(var5 == 100) {
        ShowBatteryCharge_exit(var6);
        var6 = 0;
        fnL428008D0(&sp0);
        var7 = 0;
        while(var7 < 12) {
            if( *L4280A3A8 & 2 ) {
                *L4280A3A8 &= ~2;
                var8 = 0;
                wlibc_uprintf("short key\n");
            } else if( *L4280A3A8 & 1 ) {
                wlibc_int_disable();
                power_int_rel();
                usb_detect_exit();
                *L4280A3A8 &= ~1;
                wlibc_int_enable();
                power_int_reg();
                wlibc_uprintf("long key\n");
                return 0;
            }
            svc_delay(250);
            var7 = var7 + 1;
        }
    } else { 
        vasl = 10 - var5 / 10;
        var9 = 1000 / vasl;
        var8 = 0;
        while(var8 < 3) {
            var7 = var5;
            while(var7 < 110) {
                ShowBatteryCharge_rate(var6, var7);
                svc_delay(var9);
                if( *L4280A3A8 & 2 ) {
                    *L4280A3A8 &= ~2;
                    var8 = 0;
                    wlibc_uprintf("short key\n");
                } else if( *L4280A3A8 & 1 ) {
                    ShowBatteryCharge_exit(var6);
                    wlibc_int_disable();
                    power_int_rel();
                    usb_detect_exit();
                    *L4280A3A8 &= ~1;
                    wlibc_int_enable();
                    power_int_reg();
                    wlibc_uprintf("long key\n");
                    return 0;
                }
                var7 = var7 + 10;
            }
            var8 = var8 + 1;
        }
        ShowBatteryCharge_rate(var6, var5);
        svc_delay(1000);
    }
    svc_3a();
    wlibc_uprintf("extenal power low go high startup\n");
    while(1) {
        wlibc_uprintf("enter standby\n");
        if( *L4280A3A8 & 4 ) {
            sp12 = 8;
            *L4280A3A8 &= ~4;
        } else { 
            wlibc_int_disable();
            power_int_rel();
            usb_detect_exit();
            wlibc_int_enable();
            //De_CloseLayer(gDeParam0);
            sp12 = svc_05();
            wlibc_uprintf("exit standby by %d\n", sp12);
            wlibc_int_disable();
            var4 = svc_batt_chargerate();
            wlibc_int_enable();
            wlibc_uprintf("current bat_cal = %d\n", var4);
            if(var4 > var5) {
                var5 = var4;
                var4 = var5;
                if(var5 > 95) {
                    var5 = 100;
                }
            }
        }
        switch( sp12 - 2 ) {
        case 0:
            power_int_reg();
            //De_OpenLayer(gDeParam0);

            if(var5 == 100) {
                if(var6 != 0) {
                    ShowBatteryCharge_exit(var6);
                    var6 = 0;
                }
                fnL428008D0(&sp0);
                var7 = 0;
                while(var7 < 12) {
                    if( *L4280A3A8 & 2 ) {
                        *L4280A3A8 &= ~2;
                        var7 = 0;
                        wlibc_uprintf("MSG:L%d(%s):", 321,
                                "Board/fel_detect/fel_detect.c");
                        wlibc_ntprintf("short key\n");
                    } else { 
                        if( *L4280A3A8 & 1 ) {
                            ShowBatteryCharge_exit(var6);
                            wlibc_int_disable();
                            power_int_rel();
                            usb_detect_exit();
                            *L4280A3A8 &= ~1;
                            wlibc_int_enable();
                            power_int_reg();
                            wlibc_uprintf("long key\n");
                            return 0;
                        }
                    }
                    svc_delay(250);
                    var7 = var7 + 1;
                }
            } else { 
                vasl = 10 - var5 / 10;
                var9 = 1000 / vasl;
                var8 = 0;
                while(var8 < 3) {
                    var7 = var5;
                    while(var7 < 110) {
                        ShowBatteryCharge_rate(var6, var7);
                        svc_delay(var9);
                        if( *L4280A3A8 & 2 ) {
                            *L4280A3A8 &= ~2;
                            var8 = 0;
                            wlibc_uprintf("MSG:L%d(%s):", 354,
                                    "Board/fel_detect/fel_detect.c");
                            wlibc_ntprintf("short key\n");
                        } else if( *L4280A3A8 & 1 ) {
                            ShowBatteryCharge_exit(var6);
                            wlibc_int_disable();
                            power_int_rel();
                            usb_detect_exit();
                            *L4280A3A8 &= ~1;
                            wlibc_int_enable();
                            power_int_reg();
                            wlibc_uprintf("long key\n");
                            return 0;
                        }
                        var7 = var7 + 10;
                    }
                    var8 = var8 + 1;
                }
                ShowBatteryCharge_rate(var6, var5);
                svc_delay(1000);
            }
            break;
        case 1:
            ShowBatteryCharge_exit(var6);
            power_int_reg();
            return 0;
        case 2:
        case 3:
            //De_OpenLayer(gDeParam0);
            ShowBatteryCharge_rate(var6, var5);
        case 4:
        case 5:
            power_int_reg();
            if(sp12 != 4) {
                if(sp12 != 5) {
                    //De_OpenLayer(gDeParam0);
                    ShowBatteryCharge_rate(var6, var5);
                }
            }
            svc_delay(500);
            if(var6 != 0) {
                ShowBatteryCharge_degrade(var6);
                ShowBatteryCharge_exit(var6);
            } else { 
                fnL42800848();
            }
            return -1;
        case 6:
            usb_detect_enter();
            svc_delay(600);
            usb_detect_exit();
            break;
        case 7:
            power_set_usbpc();
            break;
        default:
            break;
        }
    }
}