static int board_probe_power_level(void) { int power_status; int power_start; //清除power按键 axp_probe_key(); //获取电源状态 power_status = axp_get_power_vol_level(); debug("power status = %d\n", power_status); if(power_status == BATTERY_RATIO_TOO_LOW_WITHOUT_DCIN) { tick_printf("battery power is low without no dc or ac, should be set off\n"); sunxi_bmp_display("bat\\low_pwr.bmp"); __msdelay(3000); return -1; } power_start = 0; //power_start的含义 //0: 不允许插火牛直接开机,必须通过判断:满足以下条件可以直接开机:长按power按键,前次是系统状态,如果电池电量过低,则不允许开机 //1: 任意状态下,允许插火牛直接开机,同时要求电池电量足够高 //2: 不允许插火牛直接开机,必须通过判断:满足以下条件可以直接开机:长按power按键,前次是系统状态,不要求电池电量 //3: 任意状态下,允许插火牛直接开机,不要求电池电量 script_parser_fetch(PMU_SCRIPT_NAME, "power_start", &power_start, 1); debug("power start cause = %d\n", power_start); if(power_status == BATTERY_RATIO_TOO_LOW_WITH_DCIN)//低电,同时带外部电源状态下 { if(!(power_start & 0x02)) //需要判断当前电池电量,要求power_start的第1bit的值为0 { //此种情况下,直接关机 tick_printf("battery low power with dc or ac, should charge longer\n"); sunxi_bmp_display("bat\\bempty.bmp"); __msdelay(3000); return -2; } else { if(power_start == 3) //不需要判断当前电池电量,如果为3,则进入系统,如果为0,则进行后续判断 { return 0; } } } else //电池电量足够情况下,或者没有电池 { if(power_start & 0x01) //如果第0bit的值为1,则进入系统 { return 0; } } return 1; }
static int board_probe_power_level(void) { int power_status; int power_start; //清除power按键 axp_probe_key(); //获取电源状态 power_status = axp_get_power_vol_level(); debug("power status = %d\n", power_status); if(power_status == BATTERY_RATIO_TOO_LOW_WITHOUT_DCIN) { tick_printf("battery power is low without no dc or ac, should be set off\n"); sunxi_bmp_display("bat\\low_pwr.bmp"); __msdelay(3000); if(!efex_test) return -1; else return 0; } power_start = 0; //power_start的含义 //0: 不允许插火牛直接开机,必须通过判断:满足以下条件可以直接开机:长按power按键,前次是系统状态,如果电池电量过低,则不允许开机 //1: 任意状态下,允许插火牛直接开机,同时要求电池电量足够高 //2: 不允许插火牛直接开机,必须通过判断:满足以下条件可以直接开机:长按power按键,前次是系统状态,不要求电池电量 //3: 任意状态下,允许插火牛直接开机,不要求电池电量 script_parser_fetch(PMU_SCRIPT_NAME, "power_start", &power_start, 1); debug("power start cause = %d\n", power_start); if(power_start == 3) { return 0; } if(power_status == BATTERY_RATIO_TOO_LOW_WITH_DCIN_VOL_TOO_LOW)//低电量低电压,带外部电源状态 { if(!(power_start & 0x02)) //根据配置,低电状态下不允许开机, power_start==0 | power_start==1 { tick_printf("battery low power and vol with dc or ac, should charge longer\n"); sunxi_bmp_display("bat\\bempty.bmp"); __msdelay(3000); return -1; } //低电池低电量,此时配置为2,进入检测,按键则进入系统,插入火牛则待机 return 1; } if(power_status == BATTERY_RATIO_TOO_LOW_WITH_DCIN)//低电量高电压,带外部电源状态 { //如果配置为0,进入检测,按键则显示低电图标然后关机,插入火牛则待机 //如果配置为1,进入检测,按键则显示低电图标然后关机,插入火牛则待机 //如果配置为2,进入检测,按键则进入系统,插入火牛则待机 if(!(power_start & 0x02)) //根据配置,低电状态下不允许开机, power_start==0 | power_start==1 { tick_printf("battery low power with dc or ac\n"); return 2; } //低电池低电量,此时配置为2,进入检测,按键则进入系统,插入火牛则待机 return 1; } //电池电压电流都足够 if(power_start == 0x01) //如果第0bit的值为1,则进入系统 { return 0; } return 1; }