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