SY8835_For_Demo_Ourself/UsrSrc/display/display_ui.c

372 lines
7.5 KiB
C
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

/*******************************************************************************
*
* @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