/******************************************************************************* * * 函数名 : 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; }
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; } } }