初版
This commit is contained in:
@@ -0,0 +1,232 @@
|
||||
#ifdef SUPPORT_MS_EXTENSIONS
|
||||
#pragma bss_seg(".chargeIc_manage.data.bss")
|
||||
#pragma data_seg(".chargeIc_manage.data")
|
||||
#pragma const_seg(".chargeIc_manage.text.const")
|
||||
#pragma code_seg(".chargeIc_manage.text")
|
||||
#endif
|
||||
#include "chargeIc_manage.h"
|
||||
#include "device/device.h"
|
||||
#include "app_config.h"
|
||||
#include "app_main.h"
|
||||
#include "user_cfg.h"
|
||||
#include "chgbox_det.h"
|
||||
#include "chgbox_ctrl.h"
|
||||
#include "chgbox_wireless.h"
|
||||
#include "ui/ui_api.h"
|
||||
#if CONFIG_WATCH_CASE_ENABLE
|
||||
#include "jlui_app/ui_sys_param.h"
|
||||
#endif
|
||||
|
||||
#if (TCFG_CHARGE_BOX_ENABLE)
|
||||
|
||||
#define LOG_TAG_CONST APP_CHGBOX
|
||||
#define LOG_TAG "[APPCHG_IC]"
|
||||
#define LOG_ERROR_ENABLE
|
||||
#define LOG_DEBUG_ENABLE
|
||||
#define LOG_INFO_ENABLE
|
||||
/* #define LOG_DUMP_ENABLE */
|
||||
#define LOG_CLI_ENABLE
|
||||
#include "debug.h"
|
||||
|
||||
//充电涓流转恒流的电压点--使用内置充电时有效
|
||||
#define CHARGE_CURRENT_CHANGE (3000)
|
||||
#define CHARGE_FULL_MA (CHARGE_FULL_mA_30)
|
||||
#define CHARGE_SLOW_MA (CHARGE_mA_40)
|
||||
#define CHARGE_WL_FAST_MA (CHARGE_mA_200)//无线充电时,使用200mA充电电流
|
||||
#define CHARGE_FAST_MA (CHARGE_mA_320)//线充是使用320mA充电电流
|
||||
|
||||
#if (TCFG_CHARGE_MOUDLE_OUTSIDE == DISABLE)
|
||||
static volatile u8 inside_ma;
|
||||
static int charge_timer;
|
||||
#endif
|
||||
#if TCFG_SHORT_PROTECT_ENABLE
|
||||
extern void short_det_wakeup_disable();
|
||||
extern void short_det_wakeup_enable();
|
||||
#endif
|
||||
static volatile u8 charge_en;
|
||||
|
||||
charge_ic_t *charge_ic_get_mode()
|
||||
{
|
||||
struct charge_ic_mod *p;
|
||||
list_for_each_charge_ic(p) {
|
||||
return p;
|
||||
}
|
||||
ASSERT(0);
|
||||
return NULL;
|
||||
}
|
||||
/*------------------------------------------------------------------------------------*/
|
||||
/**@brief 根据电池电压设置电流档位
|
||||
@param 无
|
||||
@return 无
|
||||
@note 开始充电时调用该接口切到对应档位
|
||||
*/
|
||||
/*------------------------------------------------------------------------------------*/
|
||||
#if (TCFG_CHARGE_MOUDLE_OUTSIDE == DISABLE)
|
||||
void chargebox_charge_change_current(void *priv)
|
||||
{
|
||||
u8 inside_target = CHARGE_FAST_MA;
|
||||
u16 vbat_volt = get_vbat_voltage();
|
||||
charge_timer = 0;
|
||||
if (vbat_volt > CHARGE_CURRENT_CHANGE) {
|
||||
#if TCFG_WIRELESS_ENABLE
|
||||
if (sys_info.status[WIRELESS_DET] == STATUS_ONLINE) {
|
||||
inside_target = CHARGE_WL_FAST_MA;
|
||||
}
|
||||
#endif
|
||||
CHARGE_mA_SEL(inside_target);
|
||||
inside_ma = inside_target;
|
||||
} else {
|
||||
//涓流充电时,10s查看一次电量
|
||||
CHARGE_mA_SEL(CHARGE_SLOW_MA);
|
||||
inside_ma = CHARGE_SLOW_MA;
|
||||
charge_timer = sys_timeout_add(NULL, chargebox_charge_change_current, 10000);
|
||||
}
|
||||
}
|
||||
#endif
|
||||
|
||||
/*------------------------------------------------------------------------------------*/
|
||||
/**@brief 开始对电池仓充电
|
||||
@param 无
|
||||
@return 无
|
||||
@note
|
||||
*/
|
||||
/*------------------------------------------------------------------------------------*/
|
||||
void chargebox_charge_start(void)
|
||||
{
|
||||
log_info("charge start!\n");
|
||||
#if TCFG_CHARGE_MOUDLE_OUTSIDE
|
||||
charge_ic_t *mod = charge_ic_get_mode();
|
||||
mod->io_ctrl(CHARGE_IC_CMD_CHARGE, 1);
|
||||
CS_UI_POPUP_PAGE(ID_WINDOW_BATCHARGE);
|
||||
#else
|
||||
//先切根据电压切换电流档位,再开充电
|
||||
chargebox_charge_change_current(NULL);
|
||||
charge_start();
|
||||
#endif
|
||||
charge_en = 1;
|
||||
}
|
||||
|
||||
/*------------------------------------------------------------------------------------*/
|
||||
/**@brief 停止对电池仓充电
|
||||
@param 无
|
||||
@return 无
|
||||
@note
|
||||
*/
|
||||
/*------------------------------------------------------------------------------------*/
|
||||
void chargebox_charge_close(void)
|
||||
{
|
||||
log_info("charge close!\n");
|
||||
#if TCFG_CHARGE_MOUDLE_OUTSIDE
|
||||
charge_ic_t *mod = charge_ic_get_mode();
|
||||
mod->io_ctrl(CHARGE_IC_CMD_CHARGE, 0);
|
||||
#else
|
||||
if (charge_timer) {
|
||||
sys_timer_del(charge_timer);
|
||||
charge_timer = 0;
|
||||
}
|
||||
charge_close();
|
||||
CHARGE_mA_SEL(CHARGE_SLOW_MA);
|
||||
inside_ma = CHARGE_SLOW_MA;
|
||||
#endif
|
||||
charge_en = 0;
|
||||
power_set_mode(TCFG_LOWPOWER_POWER_SEL);
|
||||
}
|
||||
|
||||
/*------------------------------------------------------------------------------------*/
|
||||
/**@brief 获取系统是否在充电
|
||||
@param 无
|
||||
@return 1:正在充电, 0:充电关闭
|
||||
@note
|
||||
*/
|
||||
/*------------------------------------------------------------------------------------*/
|
||||
u8 chargebox_get_charge_en(void)
|
||||
{
|
||||
log_info("%s :%d", __func__, charge_en);
|
||||
return charge_en;
|
||||
}
|
||||
|
||||
/*------------------------------------------------------------------------------------*/
|
||||
/**@brief 充电升压开关
|
||||
@param 无
|
||||
@return 无
|
||||
@note
|
||||
*/
|
||||
/*------------------------------------------------------------------------------------*/
|
||||
void chargeIc_boost_ctrl(u8 en)
|
||||
{
|
||||
#if TCFG_SHORT_PROTECT_ENABLE
|
||||
if (en == 0) {
|
||||
short_det_wakeup_disable();
|
||||
}
|
||||
#endif
|
||||
charge_ic_t *mod = charge_ic_get_mode();
|
||||
mod->io_ctrl(CHARGE_IC_CMD_BOOST, en);
|
||||
log_debug("boost_ctrl:%s\n", en ? "open" : "close");
|
||||
#if TCFG_LDO_DET_ENABLE
|
||||
ldo_wakeup_deal(NULL);
|
||||
#else
|
||||
sys_info.status[LDO_DET] = en ? STATUS_ONLINE : STATUS_OFFLINE;
|
||||
#endif
|
||||
#if TCFG_CURRENT_LIMIT_ENABLE
|
||||
//开升压时才去检测耳机充电电流
|
||||
ear_current_detect_enable(en);
|
||||
#endif
|
||||
#if TCFG_SHORT_PROTECT_ENABLE
|
||||
if (en) {
|
||||
short_det_wakeup_enable();
|
||||
}
|
||||
#endif
|
||||
}
|
||||
|
||||
/*------------------------------------------------------------------------------------*/
|
||||
/**@brief 耳机充电电源开关
|
||||
@param 无
|
||||
@return 无
|
||||
@note
|
||||
*/
|
||||
/*------------------------------------------------------------------------------------*/
|
||||
void chargeIc_pwr_ctrl(u8 en)
|
||||
{
|
||||
charge_ic_t *mod = charge_ic_get_mode();
|
||||
mod->io_ctrl(CHARGE_IC_CMD_PWR, en);
|
||||
log_debug("vol_ctrl:%s\n", en ? "open" : "close");
|
||||
}
|
||||
|
||||
/*------------------------------------------------------------------------------------*/
|
||||
/**@brief 充电IC初始化
|
||||
@param null
|
||||
@return null
|
||||
@note 初始化充电IC相关的引脚
|
||||
*/
|
||||
/*------------------------------------------------------------------------------------*/
|
||||
void chargeIc_init(void)
|
||||
{
|
||||
log_info("func:%s line:%d", __func__, __LINE__);
|
||||
#if TCFG_CHARGE_MOUDLE_OUTSIDE
|
||||
charge_ic_t *mod = charge_ic_get_mode();
|
||||
mod->io_ctrl(CHARGE_IC_CMD_INIT, 1);
|
||||
charge_en = 0;
|
||||
#else
|
||||
//内置充电初始化
|
||||
CHGBG_EN(0);
|
||||
CHARGE_EN(0);
|
||||
CHARGE_WKUP_PND_CLR();
|
||||
|
||||
LVCMP_EN(1);
|
||||
LVCMP_EDGE_SEL(0);
|
||||
LVCMP_PND_CLR();
|
||||
LVCMP_EDGE_WKUP_EN(1);
|
||||
LVCMP_CMP_SEL(1);
|
||||
u16 charge_4202_trim_val = get_vbat_trim();
|
||||
if (charge_4202_trim_val == 0xf) {
|
||||
log_info("vbat not trim, use default config!!!!!!");
|
||||
}
|
||||
CHARGE_FULL_V_SEL(charge_4202_trim_val);
|
||||
CHARGE_FULL_mA_SEL(CHARGE_FULL_MA);
|
||||
CHARGE_mA_SEL(CHARGE_SLOW_MA);
|
||||
inside_ma = CHARGE_SLOW_MA;
|
||||
charge_en = 0;
|
||||
#endif
|
||||
}
|
||||
|
||||
#endif
|
||||
Reference in New Issue
Block a user