实现:充电的时候,灯控为呼吸灯,在充满电之后,维持长亮一段时间,维持时间结束,耳机再呼吸灭。具体实现如下:
首先创建一个全局变量用于控制呼吸灯:
func_bt.c下
u16 charge_breath_flag = 0;//控制充满电呼吸灯
func_bt.h下
extern u16 charge_breath_flag;//控制充满电呼吸灯
之后就是修改充电的灯:
bsp_charge.c下bsp_charge_box_process_do()中
#if LED_BREATHE_EN
if (xcfg_cb.charge_breathe_en) { //充电过程中红蓝呼吸灯功能
if(sys_cb.charge_sta == 1)//充电中,呼吸亮
{
charge_breath_flag = 0;
breathe_led_start(0, 0);
}
else//充满电
{
if((charge_breath_flag < 2047)&&(CHARGE_DC_IN()))//充维持长亮以及呼吸灭
{
if(charge_breath_flag ==0)
charge_breath_flag = 1;
breathe_led_start(0, 0);
}
else//关闭灯控
{
breathe_led_stop();
}
}
}
#endif
//还需要注意:
if (((bsp_charge_box_sta() == 2) || (vhouse_sta == 2) || (sys_cb.ntc_2_pwrdwn_flag))&&(charge_breath_flag >= 2047)) //是否充满或NTC关机
{
bsp_charge_inbox_wakeup_enable(); //INBOX Wakeup enable
saradc_exit(adc_cb.channel);
bsp_charge_tebcnt_calibration_stop();
sfunc_pwrdown(0);
}
if (!CHARGE_DC_IN()) { //DC IN online?
charge_breath_flag = 0;
led_func_enable(); //打开现有LED扫描控制
......
} else {
led_func_disable(); //关掉现有LED扫描控制
......
}
另外耳机充满电的时候,系统等到呼吸灯结束再关闭:
bsp_bt.c下bsp_bt_tws_switch_for_charge()的while循环中:
if ((bsp_charge_box_process())&&(charge_breath_flag >= 2047)) {
break;
}
接下来就是呼吸灯里面的修改:
port_breathe_led.c下breathe_led_timer2_isr()中:
if(bre_led_cb.count == bre_led_cb.pwm_level){ //呼吸灯调节参数
if((charge_breath_flag >= 1)&&(charge_breath_flag <= 2045))
{//维持充满电的时候长亮,以及维持长亮的时间
charge_breath_flag++;
bre_led_cb.time++;
if(bre_led_cb.time == bre_led_cb.pwm_time)
{
bre_led_cb.time = 0;
bre_led_cb.duty = bre_led_cb.pwm_level / 2;
}
}
if((bre_led_cb.dir == 0)&&(charge_breath_flag ==0))
{//还没有充满的时候得呼吸亮,充满之后就不能呼吸亮
bre_led_cb.time++;
if(bre_led_cb.time == bre_led_cb.pwm_time){
bre_led_cb.time = 0;
bre_led_cb.duty++;
if(bre_led_cb.duty >= (bre_led_cb.pwm_level / 2)){
bre_led_cb.dir = 1;
}
}
}
if((bre_led_cb.dir == 1)||(charge_breath_flag == 2046))
{//长亮之后的呼吸灭
bre_led_cb.time++;
if(bre_led_cb.time == bre_led_cb.pwm_time){
bre_led_cb.time = 0;
bre_led_cb.duty--;
if(bre_led_cb.duty <= 1){
if(charge_breath_flag == 2046)
{//呼吸灭之后,就得进入低功耗
charge_breath_flag = 2047;
}
bre_led_cb.dir = 0;
bre_led_cb.toggle ^= 1;
}
}
}
}