141 lines
3.9 KiB
C
141 lines
3.9 KiB
C
|
#include "chargeIc_manage.h"
|
||
|
#include "device/device.h"
|
||
|
#include "app_config.h"
|
||
|
#include "app_main.h"
|
||
|
#include "user_cfg.h"
|
||
|
#include "chgbox_det.h"
|
||
|
|
||
|
#if (TCFG_CHARGE_BOX_ENABLE)
|
||
|
|
||
|
#define LOG_TAG_CONST APP_CHGBOX
|
||
|
#define LOG_TAG "[CHG_IC]"
|
||
|
#define LOG_ERROR_ENABLE
|
||
|
#define LOG_DEBUG_ENABLE
|
||
|
#define LOG_INFO_ENABLE
|
||
|
/* #define LOG_DUMP_ENABLE */
|
||
|
#define LOG_CLI_ENABLE
|
||
|
#include "debug.h"
|
||
|
|
||
|
/*------------------------------------------------------------------------------------*/
|
||
|
/**@brief 开始对电池仓充电
|
||
|
@param 无
|
||
|
@return 无
|
||
|
@note
|
||
|
*/
|
||
|
/*------------------------------------------------------------------------------------*/
|
||
|
void chargebox_charge_start(void)
|
||
|
{
|
||
|
log_info("charge start!\n");
|
||
|
#if TCFG_CHARGE_MOUDLE_OUTSIDE
|
||
|
gpio_direction_input(TCFG_STOP_CHARGE_IO);
|
||
|
#else
|
||
|
charge_start();
|
||
|
#endif
|
||
|
}
|
||
|
|
||
|
/*------------------------------------------------------------------------------------*/
|
||
|
/**@brief 停止对电池仓充电
|
||
|
@param 无
|
||
|
@return 无
|
||
|
@note
|
||
|
*/
|
||
|
/*------------------------------------------------------------------------------------*/
|
||
|
void chargebox_charge_close(void)
|
||
|
{
|
||
|
log_info("charge close!\n");
|
||
|
#if TCFG_CHARGE_MOUDLE_OUTSIDE
|
||
|
gpio_direction_output(TCFG_STOP_CHARGE_IO, 1);
|
||
|
#else
|
||
|
charge_close();
|
||
|
#endif
|
||
|
}
|
||
|
|
||
|
/*------------------------------------------------------------------------------------*/
|
||
|
/**@brief 充电升压开关
|
||
|
@param 无
|
||
|
@return 无
|
||
|
@note
|
||
|
*/
|
||
|
/*------------------------------------------------------------------------------------*/
|
||
|
void chargeIc_boost_ctrl(u8 en)
|
||
|
{
|
||
|
gpio_direction_output(TCFG_BOOST_CTRL_IO, 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
|
||
|
}
|
||
|
|
||
|
/*------------------------------------------------------------------------------------*/
|
||
|
/**@brief 耳机充电电源开关
|
||
|
@param 无
|
||
|
@return 无
|
||
|
@note
|
||
|
*/
|
||
|
/*------------------------------------------------------------------------------------*/
|
||
|
void chargeIc_pwr_ctrl(u8 en)
|
||
|
{
|
||
|
#if TCFG_PWR_CTRL_IO_IS_HIGH_VOLTAGE
|
||
|
if (en == 0) {
|
||
|
gpio_direction_input(TCFG_PWR_CTRL_IO);
|
||
|
} else {
|
||
|
gpio_direction_output(TCFG_PWR_CTRL_IO, 0);
|
||
|
}
|
||
|
#else
|
||
|
if (en == 0) {
|
||
|
gpio_set_pull_up(TCFG_PWR_CTRL_IO, 0);
|
||
|
gpio_set_pull_down(TCFG_PWR_CTRL_IO, 1);
|
||
|
} else {
|
||
|
gpio_set_pull_down(TCFG_PWR_CTRL_IO, 0);
|
||
|
gpio_set_pull_up(TCFG_PWR_CTRL_IO, 1);
|
||
|
}
|
||
|
#endif
|
||
|
log_debug("vol_ctrl:%s\n", en ? "open" : "close");
|
||
|
}
|
||
|
|
||
|
/*------------------------------------------------------------------------------------*/
|
||
|
/**@brief 充电IC初始化
|
||
|
@param null
|
||
|
@return null
|
||
|
@note 初始化充电IC相关的引脚
|
||
|
*/
|
||
|
/*------------------------------------------------------------------------------------*/
|
||
|
void chargeIc_init(void)
|
||
|
{
|
||
|
//使能IO输出低电平
|
||
|
gpio_set_die(TCFG_BOOST_CTRL_IO, 0);
|
||
|
gpio_set_pull_down(TCFG_BOOST_CTRL_IO, 0);
|
||
|
gpio_set_pull_up(TCFG_BOOST_CTRL_IO, 0);
|
||
|
gpio_direction_output(TCFG_BOOST_CTRL_IO, 0);
|
||
|
|
||
|
#if TCFG_PWR_CTRL_IO_IS_HIGH_VOLTAGE
|
||
|
//PWR_CTRL充电的时候要输出0
|
||
|
gpio_set_die(TCFG_PWR_CTRL_IO, 0);
|
||
|
gpio_set_pull_down(TCFG_PWR_CTRL_IO, 0);
|
||
|
gpio_set_pull_up(TCFG_PWR_CTRL_IO, 0);
|
||
|
gpio_direction_input(TCFG_PWR_CTRL_IO);
|
||
|
#else
|
||
|
//PWR_CTRL充电的时候要拉高
|
||
|
gpio_set_die(TCFG_PWR_CTRL_IO, 0);
|
||
|
gpio_set_pull_down(TCFG_PWR_CTRL_IO, 1);
|
||
|
gpio_set_pull_up(TCFG_PWR_CTRL_IO, 0);
|
||
|
gpio_direction_input(TCFG_PWR_CTRL_IO);
|
||
|
#endif
|
||
|
|
||
|
#if TCFG_CHARGE_MOUDLE_OUTSIDE
|
||
|
//充电控制脚,高阻时正常充电,输出1时充电截止
|
||
|
gpio_set_die(TCFG_STOP_CHARGE_IO, 1);
|
||
|
gpio_set_pull_down(TCFG_STOP_CHARGE_IO, 0);
|
||
|
gpio_set_pull_up(TCFG_STOP_CHARGE_IO, 0);
|
||
|
gpio_direction_output(TCFG_STOP_CHARGE_IO, 1);
|
||
|
#endif
|
||
|
}
|
||
|
|
||
|
#endif
|