SY8837_Demo_For_OurSelf/UsrSrc/display/display_ui.c
rb_peng c743af0aa6 1、将双向通信的具体场景提到vox_Comm_Handle函数中
2、增加VOX持续输出0V以唤醒耳机的情况;
3、解决超长按后,双向通讯一直发码的问题;(松开按键后Key_Press_ll_irq设为FALSE)
4、解决关盖上电时,不亮灯和不发码的问题(即把Hall_Sta_bk初始化);
5、长按发配对码时,主副耳的选择提取到config.h中;
2025-02-21 17:24:44 +08:00

384 lines
7.9 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 sy8837/8
*
* @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
idata 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; //拔出VIN动作标志位。
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 && !Vox_Ocp_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);
}
if( Vox_Output_Short_Flag )
{
if( LED_On_Timer < LED_PRO_TIM )
{
LED_On_Timer++;
}
else
{
Vox_Ocp_Flag = TRUE;
LED_On_Flag = TRUE;
}
}
}
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