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 81ec611b0..1279f3862 100644 --- a/code/application/source/sf_app/code/source/battery/sf_battery.c +++ b/code/application/source/sf_app/code/source/battery/sf_battery.c @@ -85,7 +85,7 @@ UINT32 sf_battery_voltage_convert(UINT32 resistanceGnd, UINT32 resistanceVin, UI SARADC reference voltage:1.8V */ - volt = 25 * adcVal * (resistanceGnd + resistanceVin) / resistanceGnd / 512; + volt = 27 * adcVal * (resistanceGnd + resistanceVin) / resistanceGnd / 511; return volt; } @@ -94,7 +94,7 @@ UINT32 sf_battery_convert_to_adc(UINT32 resistanceGnd, UINT32 resistanceVin, UIN { UINT32 adcVal = 0; - adcVal = volt * resistanceGnd * 512 / 25 / (resistanceGnd + resistanceVin); + adcVal = volt * resistanceGnd * 511 / 27 / (resistanceGnd + resistanceVin); return adcVal; } @@ -288,17 +288,19 @@ UINT32 sf_battery_adc_value_get_once(void) if(sf_adc_value_get(SF_ADC_DC, &batAdc) == SUCCESS) { dcVoltageVal = sf_battery_voltage_convert(10, 100, batAdc); + dcVoltageVal += 2; } if(sf_adc_value_get(SF_ADC_LI, &batAdc) == SUCCESS) { liPolymerVoltageVal = sf_battery_voltage_convert(15, 100, batAdc); + liPolymerVoltageVal += 2; } if(sf_adc_value_get(SF_ADC_BATT, &batAdc) == SUCCESS) { batVoltageVal = sf_battery_voltage_convert(15, 100, batAdc); - batVoltageVal += 3; + batVoltageVal += 2; } _DcVoltageVal = dcVoltageVal; @@ -729,15 +731,15 @@ void sf_battery_level_polling(void) if(puiPara->BatteryLogSwitch) { - printf("\n[average]DC,After Convert:(%d.%dV),Is Dc In=%s\n", DcVoltageVal / 10, DcVoltageVal % 10, IsPowerDcIn == 1? "Yes" : "No"); + printf("\n[average]DC Adc:%d After Convert:(%d.%dV),Is Dc In=%s\n", sf_battery_convert_to_adc(10, 100, DcVoltageVal), DcVoltageVal / 10, DcVoltageVal % 10, IsPowerDcIn == 1? "Yes" : "No"); if(LiPolymerVoltageVal) { - printf("[average]Li Battery,After Convert:(%d.%dV)\n\n", LiPolymerVoltageVal / 10, LiPolymerVoltageVal % 10); + printf("[average]Li Battery Adc:%d After Convert:(%d.%dV)\n\n", sf_battery_convert_to_adc(15, 100, LiPolymerVoltageVal), LiPolymerVoltageVal / 10, LiPolymerVoltageVal % 10); } else { - printf("[average]Other Battery,After Convert:(%d.%dV)\n\n", BatVoltageVal / 10, BatVoltageVal % 10); + printf("[average]Other Battery Adc:%d After Convert:(%d.%dV)\n\n", sf_battery_convert_to_adc(15, 100, BatVoltageVal),BatVoltageVal / 10, BatVoltageVal % 10); } } } diff --git a/rtos/code/driver/na51089/include/sf_battery.h b/rtos/code/driver/na51089/include/sf_battery.h index 11cd9b50c..e27af3e54 100644 --- a/rtos/code/driver/na51089/include/sf_battery.h +++ b/rtos/code/driver/na51089/include/sf_battery.h @@ -33,4 +33,5 @@ BOOL sf_battery_check_init(void); void sf_set_need_check_first(void); BOOL sf_is_enough_power_to_update(void); BOOL sf_is_battery_low(UINT8 refresh, UINT8 nightMode); +void sf_BatteryInfoSave(char *name); #endif diff --git a/rtos/code/driver/na51089/source/mcu/sf_battery.c b/rtos/code/driver/na51089/source/mcu/sf_battery.c index 8b56bc8be..0bd105289 100644 --- a/rtos/code/driver/na51089/source/mcu/sf_battery.c +++ b/rtos/code/driver/na51089/source/mcu/sf_battery.c @@ -69,6 +69,10 @@ ID FLG_ID_SF_BSTTERY = 0; #define SF_DC_IN_VOLATAGE 70 #define SF_LI_IN_VOLATAGE 99 +#if SF_BATTERY_TEST == ENABLE +UINT32 LiPolymerVoltageValTest = 0; +UINT32 BatVoltageValTest = 0; +#endif /************************************************* Function: sf_battery_voltage_convert Description: battery voltage convert @@ -86,7 +90,7 @@ UINT32 sf_battery_voltage_convert(UINT32 resistanceGnd, UINT32 resistanceVin, UI SARADC reference voltage:1.8V */ - volt = 25 * adcVal * (resistanceGnd + resistanceVin) / resistanceGnd / 512; + volt = 27 * adcVal * (resistanceGnd + resistanceVin) / resistanceGnd / 511; return volt; } @@ -95,7 +99,7 @@ UINT32 sf_battery_convert_to_adc(UINT32 resistanceGnd, UINT32 resistanceVin, UIN { UINT32 adcVal = 0; - adcVal = volt * resistanceGnd * 512 / 25 / (resistanceGnd + resistanceVin); + adcVal = volt * resistanceGnd * 511 / 27 / (resistanceGnd + resistanceVin); return adcVal; } @@ -132,6 +136,8 @@ void sf_adc_init(void) // Enable adc control logic adc_setEnable(TRUE); + gpio_direction_output(P_GPIO_0,0); + gpio_direction_output(P_GPIO_1,0); } /************************************************* Function: sf_adc_value_get @@ -144,7 +150,7 @@ void sf_adc_init(void) UINT32 sf_adc_value_get(UINT32 mux, UINT32 *pval) { static UINT8 getAdcFlg = 0; - static UINT8 outputflag = 1; + //static UINT8 outputflag = 1; *pval = 0; if(getAdcFlg) @@ -153,13 +159,6 @@ UINT32 sf_adc_value_get(UINT32 mux, UINT32 *pval) } getAdcFlg = 1; - if(outputflag) - { - outputflag = 0; - gpio_direction_output(P_GPIO_0,0); - gpio_direction_output(P_GPIO_1,0); - vos_util_delay_ms(1); - } if(SF_ADC_BATT == mux)//bat_det { @@ -187,7 +186,7 @@ UINT32 sf_adc_value_get(UINT32 mux, UINT32 *pval) gpio_set_value(P_GPIO_1, 1);//adc_muxb } - //vos_util_delay_us(500); + //vos_util_delay_us(400); vos_util_delay_ms(1); *pval = adc_readData(0); @@ -291,17 +290,19 @@ UINT32 sf_battery_adc_value_get_once(void) if(sf_adc_value_get(SF_ADC_DC, &batAdc) == SUCCESS) { dcVoltageVal = sf_battery_voltage_convert(10, 100, batAdc); + dcVoltageVal += 4; } if(sf_adc_value_get(SF_ADC_LI, &batAdc) == SUCCESS) { liPolymerVoltageVal = sf_battery_voltage_convert(15, 100, batAdc); + liPolymerVoltageVal += 4; } if(sf_adc_value_get(SF_ADC_BATT, &batAdc) == SUCCESS) { batVoltageVal = sf_battery_voltage_convert(15, 100, batAdc); - batVoltageVal += 3; + batVoltageVal += 4; } _DcVoltageVal = dcVoltageVal; @@ -640,7 +641,10 @@ signed int sf_battery_value_fast_get(void) ret = SUCCESS; } - + #if SF_BATTERY_TEST == ENABLE + LiPolymerVoltageValTest = LiPolymerVoltageVal; + BatVoltageValTest = BatVoltageVal; + #endif return ret; } @@ -827,7 +831,7 @@ void sf_battery_thread_init(void) if(!dofirst) return; dofirst = 0; - sf_adc_init(); + VK_TASK_HANDLE s_handle_batt = 0; vos_flag_create(&FLG_ID_SF_BSTTERY, NULL, "FLG_ID_SF_BSTTERY"); @@ -1228,24 +1232,16 @@ BOOL sf_is_battery_low(UINT8 refresh, UINT8 nightMode) *************************************************/ BOOL sf_battery_check_init(void) { - if(sf_battery_value_fast_get() == SUCCESS) - { - if(sf_is_battery_low(0, 0) == TRUE) - { - printf("[%s:%d]power off because low battery\n", __FUNCTION__, __LINE__); - //Ux_PostEvent(NVTEVT_SYSTEM_SHUTDOWN, 1, APP_POWER_OFF_BATT_EMPTY); //shutdown start - sf_set_power_off_flag(1); - flow_preview_set_stop_flag(TRUE); - return FALSE; - } - } - else - { - return FALSE; - } - #if HW_S530 - sf_view_osd_battery_draw(TRUE); - #endif + sf_adc_init(); + if(sf_is_battery_low(1, 0) == TRUE) + { + printf("[%s:%d]power off because low battery\n", __FUNCTION__, __LINE__); + //Ux_PostEvent(NVTEVT_SYSTEM_SHUTDOWN, 1, APP_POWER_OFF_BATT_EMPTY); //shutdown start + #if SF_IQ_TEST != ENABLE + sf_set_power_off_flag(1); + flow_preview_set_stop_flag(TRUE); + #endif + } return TRUE; } void sf_set_need_check_first(void) @@ -1276,5 +1272,55 @@ BOOL sf_is_enough_power_to_update(void) return TRUE; } +#if SF_BATTERY_TEST == ENABLE + + +void sf_BatteryInfoSave(char *name) +{ + char *tmpBuf = NULL; + UINT32 LibatAdc = 0; + UINT32 batAdc = 0; + + //char fileName[64] = {0}; + int fd = 0; + struct stat st; + + tmpBuf = malloc(512); + + if (tmpBuf == NULL) { + printf("%s:%d tmpBuf malloc err\n", __FUNCTION__, __LINE__); + return; + } + + //snprintf(fileName, sizeof(fileName), "%s", SF_BATTERY_TEST_FILE); + + if(access(SF_BATTERY_TEST_FILE, F_OK) == 0) + { + printf("fileName:%s\n",SF_BATTERY_TEST_FILE); + fd = open(SF_BATTERY_TEST_FILE, O_APPEND | O_WRONLY); + } + else { + fd = open(SF_BATTERY_TEST_FILE, O_APPEND | O_WRONLY | O_CREAT); + } + + LibatAdc = sf_battery_convert_to_adc(15, 100, LiPolymerVoltageValTest); + batAdc = sf_battery_convert_to_adc(15, 100, BatVoltageValTest); + + + sprintf(tmpBuf, "%s BatAdc=%lu BatVal=%lu LiBatAdc=%lu LiBatVal=%lu\r\n", name, batAdc, BatVoltageValTest, LibatAdc, LiPolymerVoltageValTest); + printf("%s\r", tmpBuf); + + if(fd) + { + fstat(fd, &st); + lseek(fd, 0, SEEK_END); + write(fd, tmpBuf, strlen(tmpBuf)); + close(fd); + printf("Add Success st_size:%ld\n", st.st_size); + } + free(tmpBuf); +} + +#endif #endif diff --git a/rtos/code/driver/na51089/source/mcu/sf_mcu.c b/rtos/code/driver/na51089/source/mcu/sf_mcu.c index 388c85afa..5538e8a8e 100644 --- a/rtos/code/driver/na51089/source/mcu/sf_mcu.c +++ b/rtos/code/driver/na51089/source/mcu/sf_mcu.c @@ -35,6 +35,7 @@ #include #include #include "PrjCfg.h" +#include "sf_battery.h" static UINT8 McuSubVersion = 0; static UINT16 McuVersion = 0; @@ -1375,7 +1376,7 @@ UINT8 sf_mcu_reg_set(MCUParam_t attrId, UINT8 val) printf("Firmware compile time:%s %s VER:%s\n", __DATE__, __TIME__,SF_BASE_VERSION); printf("%s:%d DailyReportSwitch=%d %02d:%02d\n",__FUNCTION__,__LINE__, puiPara->DailyReportSwitch, puiPara->DailyReportTime2.Hour, puiPara->DailyReportTime2.Min); printf("%s:%d isUsb = %d isCard = %d isCardFull = %d val = %d simCardInsert = %ld start mode = %d\n",__FUNCTION__,__LINE__, isUsb, isCard, isCardFull, val, simCardInsert, PowerOnMode); - + sf_mcu_get_irshtter(); if (attrId > SF_MCU_PARAM_MAX) { printf("attrId ERROR!\n"); @@ -2193,6 +2194,11 @@ void sf_add_file_name_to_send_list(char *sendfname) close(fd); printf("Add Success st_size:%ld\n", st.st_size); } +#if SF_BATTERY_TEST == ENABLE + char str1[5] = { 0 }; + memcpy(str1, sendfname + 4, 4); + sf_BatteryInfoSave(str1); +#endif } #if defined __FREERTOS