diff --git a/code/application/source/sf_app/code/include/sf_battery.h b/code/application/source/sf_app/code/include/sf_battery.h index a4a88d041..4045880e3 100644 --- a/code/application/source/sf_app/code/include/sf_battery.h +++ b/code/application/source/sf_app/code/include/sf_battery.h @@ -38,4 +38,5 @@ void sf_stamp_temperature_get(INT16 *fTem,INT16 *cTem); /*0:F 1:C*/ void sf_temper_update(void); INT16 sf_celsius_change_to_fahrenheit(INT16 cTemper); UINT16 sf_battery_val_get(void); +void sf_app_set_battery_level(unsigned long Val); #endif diff --git a/code/application/source/sf_app/code/source/app/sf_system.c b/code/application/source/sf_app/code/source/app/sf_system.c index 7e5161f38..52d59432f 100755 --- a/code/application/source/sf_app/code/source/app/sf_system.c +++ b/code/application/source/sf_app/code/source/app/sf_system.c @@ -1469,11 +1469,13 @@ UINT8 sf_check_power_on_mode(void) char *pStrUpFw = "UpFw="; char *pStrUpMcu = "mcu="; char *pStrOtsOk = "ota_flag=0x1"; - + char *pStrSF = "sf="; + char *temp = NULL; UINT8 startup = 0; UINT8 UpFw = 0; UINT8 Upmcu = 0; + unsigned long sftmp = 0; system("cat /proc/cmdline > /tmp/Mode.txt"); fp = fopen("/tmp/Mode.txt","r"); @@ -1512,6 +1514,14 @@ UINT8 sf_check_power_on_mode(void) SLOGI(": ota upgrade success\r\n"); sf_cmd_camera_restart(1); } + temp = strstr(pStrSrc, pStrSF); + if ( temp != NULL) { + temp += strlen("sf="); + // sscanf(temp, "%hhd", &sftmp); + sftmp = strtoul(temp, NULL, 10); + sf_app_set_battery_level(sftmp); + // sf_cardv_battery_level_set(sftmp); + } SLOGI("StartMode=%d,UpFw=%d Upmcu=%d ota=%d\r\n", startup, UpFw, Upmcu, sf_get_camera_restart()); free(pStrSrc); diff --git a/code/application/source/sf_app/code/source/battery/sf_battery.c b/code/application/source/sf_app/code/source/battery/sf_battery.c index 6f71a07b1..438453004 100755 --- a/code/application/source/sf_app/code/source/battery/sf_battery.c +++ b/code/application/source/sf_app/code/source/battery/sf_battery.c @@ -788,7 +788,7 @@ signed int sf_battery_value_fast_get(void) LiPolymerVoltageVal = 0; } - if((DcVoltageVal > LiPolymerVoltageVal) && (DcVoltageVal >= BatVoltageVal) && (DcVoltageVal >= SF_DC_IN_VOLATAGE)) + if((DcVoltageVal > LiPolymerVoltageVal) && (DcVoltageVal >= BatVoltageVal)) { IsPowerDcIn = 1; } @@ -877,7 +877,7 @@ SINT32 sf_battery_adc_value_get(void) if(batCnt) _BatVoltageVal = batTemp / batCnt; - if((_DcVoltageVal > _LiPolymerVoltageVal) && (_DcVoltageVal >= _BatVoltageVal) && (_DcVoltageVal >= SF_DC_IN_VOLATAGE)) + if((_DcVoltageVal > _LiPolymerVoltageVal) && (_DcVoltageVal >= _BatVoltageVal)) { IsPowerDcIn = 1; } @@ -967,7 +967,7 @@ void sf_battery_level_polling(void) if(batCnt) _BatVoltageVal = (UINT32)round(batTemp / batCnt); - if((_DcVoltageVal > _LiPolymerVoltageVal) && (_DcVoltageVal >= _BatVoltageVal) && (_DcVoltageVal >= SF_DC_IN_VOLATAGE)) + if((_DcVoltageVal > _LiPolymerVoltageVal) && (_DcVoltageVal >= _BatVoltageVal)) { IsPowerDcIn = 1; } @@ -1438,7 +1438,10 @@ UINT8 sf_battery_value_get(UINT8 nightMode) } else { - value = 100; + if(DcVoltageVal > SF_DC_IN_VOLATAGE) + { + value = 100; + } } return value; @@ -1506,11 +1509,11 @@ BOOL sf_is_battery_low(UINT8 refresh, UINT8 nightMode) UINT8 batteryVal = 0; UINT8 batteryLevel = 0; - if(refresh) - { - sf_battery_value_fast_get(); - //printf("DC=%d Custom=%d bat=%d\n", dcValue, CustomValue, batli8v); - } + // if(refresh) + // { + // sf_battery_value_fast_get(); + // //printf("DC=%d Custom=%d bat=%d\n", dcValue, CustomValue, batli8v); + // } batteryVal = sf_battery_value_get(nightMode); @@ -1720,4 +1723,28 @@ void sf_temper_update(void) } } + +void sf_app_set_battery_level(unsigned long Val) +{ + // UINT16 batteryVal = 0; + UINT16 powerVal = 0; + UINT16 batteryType = 0; + + // batteryVal = (Val>>18) & 0x7F;//0~100 + batteryType = (Val>>16) & 0x03; + powerVal = Val & 0xFF; + + if(batteryType == SF_POWER_TYPE_DC) + { + IsPowerDcIn = 1; + DcVoltageVal = powerVal; + } + else if (batteryType == SF_POWER_TYPE_LI_POLYER) { + LiPolymerVoltageVal = powerVal; + } + else { + BatVoltageVal = powerVal; + } + // MLOGI("batteryVal:%d batteryType:%d powerVal:%d p:%d\n",batteryVal, batteryType, powerVal,Val); +} #endif diff --git a/rtos/code/driver/na51089/source/mcu/sf_battery.c b/rtos/code/driver/na51089/source/mcu/sf_battery.c index 1993222c3..5aee5cb0f 100755 --- a/rtos/code/driver/na51089/source/mcu/sf_battery.c +++ b/rtos/code/driver/na51089/source/mcu/sf_battery.c @@ -359,6 +359,10 @@ UINT32 sf_battery_adc_value_get_once(void) if(sf_adc_value_get(SF_ADC_DC, &batAdc) == SUCCESS) { dcVoltageVal = sf_battery_voltage_convert(24, 100, batAdc); + if(dcVoltageVal) + { + dcVoltageVal += 1; + } //dcVoltageVal += 4; if(puiPara->BatteryLogSwitch) printf("DC ADC Value:%lu After Convert:%lu(%lu.%luV)\n",batAdc,dcVoltageVal,dcVoltageVal/10,dcVoltageVal%10); @@ -731,7 +735,7 @@ signed int sf_battery_value_fast_get(void) LiPolymerVoltageVal = 0; } - if((DcVoltageVal > LiPolymerVoltageVal) && (DcVoltageVal >= BatVoltageVal) && (DcVoltageVal >= SF_DC_IN_VOLATAGE)) + if((DcVoltageVal > LiPolymerVoltageVal) && (DcVoltageVal >= BatVoltageVal)) { IsPowerDcIn = 1; } @@ -823,7 +827,7 @@ void sf_battery_level_polling(void) if(batCnt) _BatVoltageVal = batTemp / batCnt; - if((_DcVoltageVal > _LiPolymerVoltageVal) && (_DcVoltageVal >= _BatVoltageVal) && (_DcVoltageVal >= SF_DC_IN_VOLATAGE)) + if((_DcVoltageVal > _LiPolymerVoltageVal) && (_DcVoltageVal >= _BatVoltageVal)) { IsPowerDcIn = 1; } @@ -936,6 +940,11 @@ THREAD_RETTYPE sf_battery_check_thread(void *arg) sf_set_power_off_flag(APP_POWER_OFF_BATT_EMPTY); flow_preview_set_stop_flag(TRUE); #endif + while(1) + { + vos_util_delay_ms(1000); + printf("[%s:%d] cnt power off because low battery\n", __FUNCTION__, __LINE__); + } } else { @@ -1298,7 +1307,10 @@ UINT8 sf_battery_value_get(UINT8 nightMode) } else { - value = 100; + if(DcVoltageVal > SF_DC_IN_VOLATAGE) + { + value = 100; + } } return value;