372 lines
7.5 KiB
C
372 lines
7.5 KiB
C
/*******************************************************************************
|
||
*
|
||
* @file display_ui.c
|
||
* @brief display_ui module
|
||
* @ic sy8835
|
||
*
|
||
* @version 1.0
|
||
* @date 2025/01/14 15:00:40
|
||
* @author Alex Xu
|
||
*
|
||
* Copyright (c) 2013-2099,Tkplusemi Technology Co.,Ltd.
|
||
* All Rights Reserved
|
||
*
|
||
* History:
|
||
* Revision Date Author Desc
|
||
* 1.0.0 2025/01/14 Alex build this file
|
||
******************************************************************************/
|
||
/*_____ I N C L U D E S ____________________________________________________*/
|
||
#include "display_ui.h"
|
||
#include "userapp.h"
|
||
#include "adc.h"
|
||
#include "hall.h"
|
||
#include "key.h"
|
||
#include "sleep.h"
|
||
#include "system.h"
|
||
#include "bat.h"
|
||
#include "sys_tim.h"
|
||
#include "charger_module.h"
|
||
#include "discharge_module.h"
|
||
#include "led.h"
|
||
#include "vox_module.h"
|
||
|
||
/******************************************************************************\
|
||
Macro definitions
|
||
\******************************************************************************/
|
||
#define LED_ON_CNT 100 //10s,电量灯触发后亮的时间。
|
||
|
||
#define LED_PRO_TIM 40
|
||
|
||
#define LED_OFF_CNT 1
|
||
|
||
/******************************************************************************\
|
||
Variables definitions
|
||
\******************************************************************************/
|
||
bit Earphone_Chg_Flag_led; //耳机出入盒标志位
|
||
|
||
bit CoverEvent_Flg_led; //Hall开关触发事件标志位,用于灯效显示。
|
||
|
||
bit Key_Press_short_irq_led; //按键短按动作标志位,用于LED UI显示,TRUE:有按键短按动作。
|
||
|
||
uint8_t LED_On_Timer; //led亮时间计时
|
||
|
||
bit LED_On_Flag; //led显示复位标志位,1:灯效复位。
|
||
|
||
#ifdef PWM_ENABLE
|
||
uint8_t Breathing_Light_Cnt; //呼吸灯流水计数器
|
||
#endif
|
||
|
||
/******************************************************************************\
|
||
Functions definitions
|
||
\******************************************************************************/
|
||
|
||
#ifdef LED_DISPLAY
|
||
/*****************************************************************************
|
||
* Function : void LED_Breating_Light_Off(void)
|
||
* Description : 需要时调用周期,呼吸灯全熄灭函数。
|
||
* Input : None
|
||
* Output : None
|
||
* Return : None
|
||
* Note : None
|
||
*****************************************************************************/
|
||
void LED_Breating_Light_Off(void)
|
||
{
|
||
#ifdef PWM_ENABLE
|
||
|
||
LED_R_BREATHING_LIGHT(SHOW_NONE);
|
||
|
||
LED_G_BREATHING_LIGHT(SHOW_NONE);
|
||
|
||
LED_Y_BREATHING_LIGHT(SHOW_NONE);
|
||
|
||
LED_B_BREATHING_LIGHT(SHOW_NONE);
|
||
|
||
#endif
|
||
}
|
||
|
||
/*****************************************************************************
|
||
* Function : void LED_Display_App(void)
|
||
* Description : 100ms调用周期
|
||
* Input : None
|
||
* Output : None
|
||
* Return : None
|
||
* Note : None
|
||
*****************************************************************************/
|
||
/*
|
||
充电:
|
||
1、充电中,无其它行为打断时,开关盒状态下都显示充电常亮灯效(1Hz闪烁);
|
||
2、充满,常亮;可被其它灯效打断;
|
||
|
||
非充电:
|
||
1、首次使用开盖灯效:①高电:亮4s后灭;②低电:1Hz闪4s后灭;
|
||
2、非首次使用开盖灯效:①耳机在盒:亮4s后灭;②耳机不在盒:????
|
||
③充电中,开盖闪一下,如何闪?亮多久后灭?
|
||
3、关盖灯效,高电:亮4s后灭;低电:1Hz闪4s后灭;
|
||
4、关盒状态下无灯效显示;
|
||
|
||
*/
|
||
void LED_Display_App(void)
|
||
{
|
||
#ifdef NTC_ENABLE
|
||
static bit LED_On_Flag1;
|
||
#endif
|
||
static bit LED_On_Chg_Flag;
|
||
|
||
static bit LED_On_ChgDone_Flag;
|
||
|
||
static bit Disp_Bat_Lev;
|
||
|
||
if( LED_On_Flag )
|
||
{
|
||
LED_On_Flag = FALSE;
|
||
|
||
LED_On_Timer = 0;
|
||
|
||
offset_bat_level = 0;
|
||
|
||
Display_AllOff();
|
||
|
||
#if SLEEP_ENABLE
|
||
Enter_Sleep_Cnt_Restart_Flag = TRUE;
|
||
#endif
|
||
return;
|
||
}
|
||
|
||
#ifdef NTC_ENABLE
|
||
/*NTC保护,4灯一直快闪(2Hz)*/
|
||
if( CHG_NTC_Pro_Flag || Boost_NTC_Pro_Flag || Vox_Output_Short_Flag )
|
||
{
|
||
if( !LED_On_Flag1 )
|
||
{
|
||
LED_On_Flag1 = TRUE;
|
||
|
||
LED_On_Flag = TRUE;
|
||
}
|
||
else
|
||
{
|
||
if( Display_RSta != LED_FLASH )
|
||
{
|
||
Display_Red_Flash(20,10);
|
||
}
|
||
|
||
if( Display_GSta != LED_FLASH )
|
||
{
|
||
Display_Green_Flash(20,10);
|
||
}
|
||
|
||
if( Display_YSta != LED_FLASH )
|
||
{
|
||
Display_Yellow_Flash(20,10);
|
||
}
|
||
|
||
if( Display_BSta != LED_FLASH )
|
||
{
|
||
Display_Blue_Flash(20,10);
|
||
}
|
||
}
|
||
|
||
return;
|
||
}
|
||
|
||
/* 保护消失后,需要开启5V升压一段时间。 */
|
||
if( LED_On_Flag1 )
|
||
{
|
||
LED_On_Flag1 = FALSE;
|
||
|
||
LED_On_ChgDone_Flag = FALSE;
|
||
|
||
LED_On_Chg_Flag = FALSE;
|
||
|
||
CoverEvent_Flg_led = FALSE;
|
||
|
||
Earphone_Chg_Flag_led = FALSE;
|
||
|
||
Wkup_Earphone_Flag = TRUE;
|
||
}
|
||
|
||
#endif
|
||
|
||
if (ChgStatus != CHG_NONE)
|
||
{
|
||
if ( ChgStatus == CHG_STA_COMPLETED ) // 充电完成,4个LED常亮
|
||
{
|
||
if( !LED_On_ChgDone_Flag )
|
||
{
|
||
LED_On_ChgDone_Flag = TRUE;
|
||
|
||
LED_On_Chg_Flag = FALSE;
|
||
|
||
LED_Breating_Light_Off();
|
||
|
||
return;
|
||
}
|
||
|
||
Display_AllOn();
|
||
}
|
||
else
|
||
{
|
||
if( !LED_On_Chg_Flag )
|
||
{
|
||
LED_On_Chg_Flag = TRUE;
|
||
|
||
LED_On_ChgDone_Flag = FALSE;
|
||
|
||
LED_On_Flag = TRUE;
|
||
#ifdef PWM_ENABLE
|
||
Breathing_Light_Cnt = LED_R;
|
||
#endif
|
||
}
|
||
else
|
||
{
|
||
#ifdef PWM_ENABLE
|
||
if( LED_On_Timer < LED_OFF_CNT )
|
||
{
|
||
LED_On_Timer++;
|
||
|
||
switch ( Breathing_Light_Cnt )
|
||
{
|
||
case LED_R:
|
||
|
||
if( Display_RSta != LED_BREATHING_LIGHT )
|
||
{
|
||
LED_R_BREATHING_LIGHT(SLOW_DARK);
|
||
}
|
||
|
||
break;
|
||
case LED_G:
|
||
|
||
if( Display_GSta != LED_BREATHING_LIGHT )
|
||
{
|
||
LED_G_BREATHING_LIGHT(SLOW_DARK);
|
||
}
|
||
|
||
break;
|
||
|
||
case LED_Y:
|
||
|
||
if( Display_YSta != LED_BREATHING_LIGHT )
|
||
{
|
||
LED_Y_BREATHING_LIGHT(SLOW_DARK);
|
||
}
|
||
|
||
break;
|
||
|
||
case LED_B:
|
||
|
||
if( Display_BSta != LED_BREATHING_LIGHT )
|
||
{
|
||
LED_B_BREATHING_LIGHT(SLOW_DARK);
|
||
}
|
||
|
||
break;
|
||
|
||
default:
|
||
|
||
break;
|
||
}
|
||
}
|
||
else
|
||
if( LED_On_Timer < 15 ) //LED显示1.5s。
|
||
{
|
||
LED_On_Timer++;
|
||
}
|
||
else
|
||
{
|
||
LED_On_Timer = 0;
|
||
|
||
Breathing_Light_Cnt++;
|
||
|
||
if( Breathing_Light_Cnt >= LED_ID_MAX )
|
||
{
|
||
Breathing_Light_Cnt = LED_R;
|
||
}
|
||
}
|
||
#endif
|
||
}
|
||
}
|
||
|
||
CoverEvent_Flg_led = FALSE;
|
||
|
||
Earphone_Chg_Flag_led = FALSE;
|
||
|
||
Key_Press_short_irq_led = FALSE;
|
||
|
||
Disp_Bat_Lev = TRUE;
|
||
}
|
||
else
|
||
{
|
||
if( LED_On_Chg_Flag )
|
||
{
|
||
LED_On_Chg_Flag = FALSE;
|
||
|
||
LED_Breating_Light_Off();
|
||
|
||
LED_On_Flag = TRUE;
|
||
|
||
Wkup_Earphone_Flag = TRUE;
|
||
|
||
return;
|
||
}
|
||
|
||
if( CoverEvent_Flg_led || Disp_Bat_Lev || Earphone_Chg_Flag_led || Key_Press_short_irq_led )
|
||
{
|
||
if( LED_On_Timer < LED_OFF_CNT )
|
||
{
|
||
LED_On_Timer++;
|
||
}
|
||
else
|
||
if( LED_On_Timer < LED_ON_CNT ) //LED显示10s后灭。
|
||
{
|
||
LED_On_Timer++;
|
||
|
||
/*电量显示,25%电量左侧第1个灯闪;25%-50%电量2个灯常亮;50%-75%电量3个灯常亮;75%-100%电量4个灯常量。*/
|
||
if( F_batlevel_25p )
|
||
{
|
||
if (Display_RSta != LED_KEEP_FLASHING)
|
||
{
|
||
Display_Red_KeepFlash(100);
|
||
Display_Green_Off();
|
||
Display_Yellow_Off();
|
||
Display_Blue_Off();
|
||
}
|
||
}
|
||
else
|
||
if( F_batlevel_50p )
|
||
{
|
||
Display_Red_On();
|
||
Display_Green_On();
|
||
Display_Yellow_Off();
|
||
Display_Blue_Off();
|
||
}
|
||
else
|
||
if( F_batlevel_75p )
|
||
{
|
||
Display_Red_On();
|
||
Display_Green_On();
|
||
Display_Yellow_On();
|
||
Display_Blue_Off();
|
||
}
|
||
else
|
||
{
|
||
Display_AllOn();
|
||
}
|
||
}
|
||
else
|
||
{
|
||
CoverEvent_Flg_led = FALSE;
|
||
|
||
Disp_Bat_Lev = FALSE;
|
||
|
||
Earphone_Chg_Flag_led = FALSE;
|
||
|
||
Key_Press_short_irq_led = FALSE;
|
||
|
||
Display_AllOff(); //清LED显示
|
||
}
|
||
}
|
||
}
|
||
}
|
||
|
||
#endif
|
||
|