// PRINT("GPIO_PIN_ENABLE_CHARGE_0_2C uapi_gpio_get_output_val %d\r\n",level);
}
-
+uint8_t get_02c_value(void)
+{
+ if (GPIO_LEVEL_LOW == uapi_gpio_get_output_val(GPIO_PIN_ENABLE_CHARGE_0_2C))
+ return 0;
+ else
+ return 1;
+}
void disable_02c(void)
{
// PRINT("disable_charge_02c\r\n");
#define BATTERY_LOWPOWER_ALARM_POWERLEVEL 15
#define BATTERY_LOWPOWER_ALARM_SHUTDOWNLEVEL 5
-#define BATTERY_DISABLE_CHARGE_HI_TEMP_VALUE 50 //停止充电温度
+#define BATTERY_DISABLE_CHARGE_HI_TEMP_VALUE (50.0f) //停止充电温度
#define BATTERY_VOLTAGE_DEBOUNCE 2
batteryservice_get_voltage_by_channel(¤t_battery_info->pcb_ntc_temp,ADC_CHANNEL_PCB_TEMP);
uapi_tcxo_delay_ms(20);
}
+
+static int g_chargestatus =0;
+
+int get_charge_current_status(void)
+{
+ return g_chargestatus;
+}
/**
* 充电中则使能充电IC,并根据电量确认充电电流.
* 未插入充电线,则停止充电IC
{
float voltage;
float bat_temp;
+ //获取电量
uint8_t percent = batteryservice_get_voltage(&voltage);
+ //获取电池温度
batteryservice_get_battery_temp(&bat_temp);
- if(uapi_get_charger_plug_status()){
+ if(get_charge_stat() == 1){
+ PRINT("charging enable charge ! bat-temp %.2f Vs highest temp value %.2f !\n",bat_temp,BATTERY_DISABLE_CHARGE_HI_TEMP_VALUE);
/**
* 如果充电过程中,电池温度>=BATTERY_DISABLE_CHARGE_HI_TEMP_VALUE,则停止充电
* 否则按正常流程充电
*/
+
if(bat_temp >= BATTERY_DISABLE_CHARGE_HI_TEMP_VALUE)
{
+ PRINT("battery temp is too high : %.2f >= %.2f, disable charge!\n",bat_temp,BATTERY_DISABLE_CHARGE_HI_TEMP_VALUE);
disable_charge();
+ g_chargestatus = 0;
}else{
- enable_charge();
+
/**
* check and control charge current event
* larger than 90%, use low charge current
* other stat , use high charge current
* pay attention to : debounce
*/
- if(percent >=90) enable_02c();
- else disable_02c();
- PRINT("%d\r\n",BATTERY_VOLTAGE_DEBOUNCE);
+
+ if(percent >=90)
+ {
+ PRINT("%d >= 90 percent , enable low current charge !\r\n",percent);
+ enable_charge();
+ enable_02c();
+ g_chargestatus = 1;
+ }
+ else
+ {
+ PRINT("%d < 90 percent , enable normal current charge !\r\n",percent);
+ enable_charge();
+ disable_02c();
+ g_chargestatus = 2;
+ }
+ // PRINT("%d\r\n",BATTERY_VOLTAGE_DEBOUNCE);
}
}else{
//冗余操作,理论上不必在此关闭充电IC
- disable_charge();
+ PRINT("charger not plugged ,disable charge !\r\n");
+ disable_charge();
+ g_chargestatus = 0;
/**
* if no in_charge then :
* check and report low power event
/**开机初始化电量及充电状态 Start*/
- if(uapi_get_charger_plug_status())
+ if(get_charge_stat() == 1)
{ //如果充电线插入状态,为了获取准确电池数据,需要先停止充电一秒,再继续获取电量。
disable_charge();
uapi_tcxo_delay_ms(1000);
void enable_charge(void);
void disable_charge(void);
+//0 停止充电 , 1 低电流充电, 2 正常电流充电
+int get_charge_current_status(void);
+uint8_t get_02c_value(void);
#ifdef __cplusplus
#if __cplusplus
}
return ERRCODE_FAIL;
}
char *mode = (char*)argv[0];
+
+ PRINT("BATTERYTEST ATCMD %s\n",mode);
+
if (strcmp(mode, "enable") == 0) {
enable_charge();
} else if (strcmp(mode, "disable") == 0) {
#include "producttest/include/testmagnetic.h"
#include "mag_service.h"
#include "cmsis_os2.h"
-
+// #define TEST_BATTERY
+#ifdef TEST_BATTERY
+#include "battery_service.h"
+#include "battery_hal.h"
+#endif
namespace OHOS
{
testMagicView::GetInstance()->set_data();
}
uint8_t MG_TEST_FALG=0;
+ char buf[128]={0};
void testMagicView ::set_data(void)
{
-
- MG_TEST_FALG++;
+#ifdef TEST_BATTERY
+
+ float battery_voltage ;
+
+ uint8_t charge_stat = get_charge_stat();
+ int charge_current_status = get_charge_current_status();
+ float battery_temp;
+ battery_get_battery_temp(&battery_temp);
+ uint8_t percent = battery_get_voltage(&battery_voltage);
+ uint8_t _02c_vaule = get_02c_value();
+ memset(buf,0,sizeof(buf));
+ sprintf(buf,"V:%d,P:%d,T:%d,CS:%d,S:%d,2c:%d",
+ (int)(100.0f*battery_voltage),
+ percent,
+ (int)(100*battery_temp),
+ charge_current_status,
+ charge_stat,
+ _02c_vaule);
+ x->SetText(buf);
+ RootView::GetInstance()->Invalidate();
+#else
+ MG_TEST_FALG++;
uint16_t angle_value= (int16_t)mag_service_get_fAzimuth();
char buf[16]={0};
sprintf(buf,"angle:%d",angle_value);
if(MG_TEST_FALG>10)
CompassModel::GetInstance()->CloseCompassSensor();
+#endif
}
UILabel *testMagicView::InitLabel(LabelConfig &labelConfig)
{
uint32_t tick;
osStatus_t retTimer;
-
+#ifndef TEST_BATTERY
CompassModel::GetInstance()->OpenCompassSensor();
-
+#endif
testmagicScrollView = new UIScrollView();
if (testmagicScrollView == nullptr)
{
char buf[16]={0};
sprintf(buf,"angle:%d",angle_value);
Config = {
+#ifdef TEST_BATTERY
+ .left = 30,
+ .top = 160,
+ .width = 400,
+ .height = 35,
+ .fontSize = 20,
+#else
.left = 173,
.top = 160,
.width = 120,
.height = 35,
.fontSize = 50,
+#endif
.lineHeigh = 35,
.text = buf,
.lineBreakMode = UILabel::LINE_BREAK_ADAPT,