diff --git a/bk_aidk/bk_avdk/bk_idk/components/bk_batt_monitor/bat_monitor.h b/bk_aidk/bk_avdk/bk_idk/components/bk_batt_monitor/bat_monitor.h index 26711145..68e33f7a 100755 --- a/bk_aidk/bk_avdk/bk_idk/components/bk_batt_monitor/bat_monitor.h +++ b/bk_aidk/bk_avdk/bk_idk/components/bk_batt_monitor/bat_monitor.h @@ -4,7 +4,7 @@ #include "bk_gpio.h" #include "bk_uart.h" -#define BAT_MONITOR_DEBUG +//#define BAT_MONITOR_DEBUG #ifdef BAT_MONITOR_DEBUG #define BAT_MONITOR_PRT os_printf diff --git a/bk_aidk/components/bk_factory_config/bk_factory_config.c b/bk_aidk/components/bk_factory_config/bk_factory_config.c index b7ea12c3..87d828bb 100644 --- a/bk_aidk/components/bk_factory_config/bk_factory_config.c +++ b/bk_aidk/components/bk_factory_config/bk_factory_config.c @@ -30,11 +30,14 @@ static const uint32_t s_factory_volume = 7; +static const uint32_t s_bat_offset = 0; + const struct factory_config_t s_platform_config[] = { {"sys_initialized", (void *)"1", 1, BK_FALSE, 1}, // first config used to check whether factory config initialized. {"volume", (void *)&s_factory_volume, 4, BK_TRUE, 4}, {"d_network_id", (void *)"\0", 1, BK_TRUE, 198}, {"d_agent_info", (void *)"\0", 1, BK_TRUE, 162}, + {"bat_offset", (void *)&s_bat_offset, 4, BK_TRUE, 4}, }; static const struct factory_config_t *s_user_reg_config = NULL; diff --git a/bk_aidk/projects/beken_wss_paopao/main/bat_main.c b/bk_aidk/projects/beken_wss_paopao/main/bat_main.c index d6c622f6..990118ec 100755 --- a/bk_aidk/projects/beken_wss_paopao/main/bat_main.c +++ b/bk_aidk/projects/beken_wss_paopao/main/bat_main.c @@ -48,6 +48,8 @@ #include #include "sys_driver.h" #include + +#if (CONFIG_SYS_CPU0) #define BAT_DETEC_ADC_CLK 203125 #define BAT_DETEC_ADC_STEADY_CTRL 7 #define BAT_DETEC_ADC_SAMPLE_RATE 0 @@ -56,6 +58,8 @@ #define BATTERY_MIN_VOLTAGE 3400 static int batt_percent = 0; + int bat_offset = 0; +uint16_t vol; static battery_main_event_callback_t s_battery_main_event_callback = NULL; int battery_main_event_callback_register(battery_main_event_callback_t callback) { @@ -100,7 +104,8 @@ static uint16_t prvCalculateVoltage(void) static bk_err_t prvStartBatteryAdcOneTime() { // uint16_t value = 0; - uint16_t vol; + + uint16_t currend_vol; // int i1 = 0; // if (vol == NULL) { // BAT_MONITOR_WPRT("Error: vol pointer is NULL\r\n"); @@ -162,23 +167,26 @@ static bk_err_t prvStartBatteryAdcOneTime() // } vol = prvCalculateVoltage(); + bk_printf("adc prevol %d offset %d \n", vol,bat_offset); + + currend_vol = vol+ bat_offset; // BAT_MONITOR_PRT("ADC VALUE: %d .\r\n", *vol); gpio_dev_unmap(GPIO_50); bk_gpio_enable_input(GPIO_50); rtos_delay_milliseconds(100); uint8_t insert_value = bk_gpio_get_input(GPIO_50); bk_printf("Charging insert_value %d \n", insert_value); - bk_printf("ADC bat_value: %d mv\r\n", vol); + bk_printf("ADC currend_vol: %d mv\r\n", currend_vol); - batt_percent=(vol-BATTERY_MIN_VOLTAGE)*100/(BATTERY_MAX_VOLTAGE-BATTERY_MIN_VOLTAGE); - if(vol < BATTERY_MIN_VOLTAGE){ + batt_percent=(currend_vol-BATTERY_MIN_VOLTAGE)*100/(BATTERY_MAX_VOLTAGE-BATTERY_MIN_VOLTAGE); + if(currend_vol < BATTERY_MIN_VOLTAGE){ batt_percent=0; } - else if(vol > BATTERY_MAX_VOLTAGE){ + else if(currend_vol > BATTERY_MAX_VOLTAGE){ batt_percent = 100; } bk_printf("batt_percent:%d\r\n",batt_percent); - if (vol < 3500) + if (currend_vol < 3500) { if (s_battery_main_event_callback && insert_value == 0) { @@ -228,6 +236,11 @@ void init_bat_timer() { bk_printf("rtos_start_bat_timer fail\r\n"); } + + + bk_config_read("bat_offset", (void *)&bat_offset, 4); + + bk_printf("init_bat_timer_offset %d\r\n",bat_offset); prvStartBatteryAdcOneTime(); } @@ -254,7 +267,26 @@ void poweroff_voice() int battery_get_percent(){ return batt_percent; } - +//AT+BAT_CALIBRTATION +int battery_calibration(){ + bk_err_t ret = prvStartBatteryAdcOneTime(); + + if (ret == BK_OK) + { + ret = 1; + bat_offset = 3980-vol; + + bk_config_write("bat_offset", (void *)&bat_offset, 4); + bk_config_sync_flash_safely(); + bk_printf("BAT_CALIBRTATION SUCC ret: %d new_offset = %d\r\n", ret,bat_offset); + }else{ + ret = 0; + bk_printf("Failed to BAT_CALIBRTATION, err: %d\r\n", ret); + } + return ret; +} + +#endif diff --git a/bk_aidk/projects/beken_wss_paopao/main/bat_main.h b/bk_aidk/projects/beken_wss_paopao/main/bat_main.h index bc2c883a..0a5f838a 100755 --- a/bk_aidk/projects/beken_wss_paopao/main/bat_main.h +++ b/bk_aidk/projects/beken_wss_paopao/main/bat_main.h @@ -24,6 +24,8 @@ int battery_main_event_callback_register(battery_main_event_callback_t callback) void init_bat_timer(); void poweron_voice(); void poweroff_voice(); + +int battery_calibration(); /** * 获取电量百分百 */ diff --git a/bk_aidk/projects/beken_wss_paopao/main/boarding_service/wifi_boarding_utils.c b/bk_aidk/projects/beken_wss_paopao/main/boarding_service/wifi_boarding_utils.c index c5dd4762..2f8903b0 100755 --- a/bk_aidk/projects/beken_wss_paopao/main/boarding_service/wifi_boarding_utils.c +++ b/bk_aidk/projects/beken_wss_paopao/main/boarding_service/wifi_boarding_utils.c @@ -836,6 +836,27 @@ static int32_t wifi_boarding_gatts_cb(bk_gatts_cb_event_t event, bk_gatt_if_t ga ws2812_led_stop_ota(); + } + /** + * 用于APP 校准电池 + */ + else if (NULL != (ptr = strstr((char *)recv, "AT+BAT_CALIBRTATION"))) + { + wboard_loge("AT+BAT_CALIBRTATION!!"); + + int ret = battery_calibration(); + + bk_printf("AT+BAT_CALIBRTATION ret: %d\r\n", ret); + uint8_t str_respone[32] = {0}; + memset(str_respone, 0, sizeof(str_respone)); + if(ret == 1){ + sprintf((char *)str_respone, "%s", "AT+BAT_CALIBRTATION=OK"); + }else{ + sprintf((char *)str_respone, "%s", "AT+BAT_CALIBRTATION=FAIL"); + } + + + wifi_boarding_notify(str_respone, strlen((char *)&str_respone)); } /** * 12.获取设备状态