Both_Way_Comm_SY8833/TP3310_Demo.si4project/Backup/userapp(1828).c

380 lines
8.8 KiB
C
Raw Permalink 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 UserApp.c
* @brief UserApp module
*
*
* @version 1.0
* @date 2023/03/27 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 2023/03/27 Alex build this file
******************************************************************************/
/*_____ I N C L U D E S ____________________________________________________*/
#include "userapp.h"
#include "gpio.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
\******************************************************************************/
/******************************************************************************\
Variables definitions
\******************************************************************************/
uint8_t LED_On_Timer = 0; //led亮时间计时
//uint8_t LED_On_Timer1 = 0; //led亮时间计时
bit led_blink_1time_flag = 0;
/******************************************************************************\
Functions definitions
\******************************************************************************/
/*****************************************************************************
* Function : void LED_Display_App(void)
* Description : 5ms调用周期
* Input : None
* Output : None
* Return : None
* Note : None
*****************************************************************************/
/*
充电:
1、充电中无其它行为打断时开关盒状态下都显示充电常亮灯效1Hz闪烁
2、充满常亮可被其它灯效打断
非充电:
1、首次使用开盖灯效①高电亮4s后灭②低电1Hz闪4s后灭
2、非首次使用开盖灯效①耳机在盒亮4s后灭②耳机不在盒
③充电中,开盖闪一下,如何闪?亮多久后灭?
3、关盖灯效高电亮4s后灭低电1Hz闪4s后灭
4、关盒状态下无灯效显示
*/
#ifdef LED_DISPLAY
void LED_Display_App(void)
{
#if 0
if( CoverEvent_Flg_led ) //Hall开关盒状态发送改变非充电高电LED亮4s灭、低电闪4次1Hz充电LED闪一下后进入1Hz闪烁。
{
#if 1
if( F_batlevel_low ) //盒子电池低电闪4次后灭。说明在系统上电期间由于Bat_level初始化为0Bat_level要等于ADC对应的电量值需要5s的debounce因此在上电期间开关盖灯效会不正确。
{
LED_R_FLASH(100,4);
CoverEvent_Flg_led = 0;
}
else
#endif
{
/*配对状态灯效显示*/
if( (CoverStatus == OPEN) && ( (Vox_Pairing_State[VOL_CHAN] != VOX_PAIR_NONE) || (Vox_Pairing_State[VOR_CHAN] != VOX_PAIR_NONE) ) ) /* 开盖状态,有耳机在仓。显示配对灯效 */
{
if( (Vox_Pairing_State[VOL_CHAN] == VOX_PAIR_ING) || (Vox_Pairing_State[VOR_CHAN] == VOX_PAIR_ING) ) /*配对中LED闪频率2Hz*/
{
if (Display_Sta != LED_FLASH)
{
LED_R_KEEP_FLASHING(50);
}
LED_On_Timer = 0;
}
else
if( (Vox_Pairing_State[VOL_CHAN] == VOX_PAIR_OK) && (Vox_Pairing_State[VOR_CHAN] == VOX_PAIR_OK) ) /*配对成功*/
{
if( LED_On_Timer < LED_ON_CNT ) //配对成功LED亮4s后灭。
{
LED_On_Timer++;
LED_R_ON();
}
else
{
LED_R_OFF();
// CoverEvent_Flg_led = 0;
}
}
}
else
{
if ( (CHIP_STA4 & 0x80) && (CoverStatus == OPEN) ) //盒子充电中开盖灯闪一下无论当前灯是什么状态灭100ms后恢复原来的灯效。
{
if( !led_blink_1time_flag ) //问题充电中LED灯效为1Hz闪烁如果这个灭100ms在闪的高电平中有效果如果在闪的低电平中没效果。
{
led_blink_1time_flag = 1;
LED_R_OFF();
CoverEvent_Flg_led = 0;
return;
}
}
if( LED_On_Timer < LED_ON_CNT ) //开关盖盒子非低电LED亮4s后灭。
{
LED_On_Timer++;
LED_R_ON();
}
else
{
LED_R_OFF();
if( CoverStatus == CLOSE )
{
CoverEvent_Flg_led = 0;
}
}
}
}
}
else
{
// 有充电时, LED闪烁
// 充电LED指示
if (CHIP_STA4 & 0x80)
{
if (Display_Sta != LED_FLASH) // 充电中LED闪烁
{
LED_R_KEEP_FLASHING(100);
}
}
else // 未充电, 则将其熄灭
{
LED_R_OFF();
}
}
#endif
if (CHIP_STA4 & 0x80) //充电中
{
if ( Charger_Done ) // 充电完成LED常亮
{
LED_R_ON();
}
else
{
if ( CoverEvent_Flg_led && (CoverStatus == OPEN) ) //盒子充电中开盖灯闪一下无论当前灯是什么状态灭100ms后恢复原来的灯效。
{
if( !led_blink_1time_flag ) //问题充电中LED灯效为1Hz闪烁如果这个灭100ms在闪的高电平中有效果如果在闪的低电平中没效果。
{
led_blink_1time_flag = 1;
LED_R_OFF();
CoverEvent_Flg_led = 0;
return;
}
}
if (Display_Sta != LED_FLASH) // 充电中LED闪烁
{
LED_R_KEEP_FLASHING(100);
}
}
}
else
{
if( F_batlevel_low ) //盒子电池低电闪4次后灭。说明在系统上电期间由于Bat_level初始化为0Bat_level要等于ADC对应的电量值需要5s的debounce因此在上电期间开关盖灯效会不正确。
{
if (CoverEvent_Flg_led) // 充电中LED闪烁
{
LED_R_FLASH(100,4);
CoverEvent_Flg_led = 0;
}
}
else
{
/*配对状态灯效显示*/
if( (CoverStatus == OPEN) && ( (Vox_Pairing_State[VOL_CHAN] != VOX_PAIR_NONE) || (Vox_Pairing_State[VOR_CHAN] != VOX_PAIR_NONE) ) ) /* 开盖状态,有耳机在仓。显示配对灯效 */
{
if( (Vox_Pairing_State[VOL_CHAN] == VOX_PAIR_ING) || (Vox_Pairing_State[VOR_CHAN] == VOX_PAIR_ING) ) /*配对中LED闪频率2Hz*/
{
if (Display_Sta != LED_FLASH)
{
LED_R_KEEP_FLASHING(50);
}
LED_On_Timer = 0;
Enter_Sleep_Cnt_Restart_Flag = 1;
}
else
if( (Vox_Pairing_State[VOL_CHAN] == VOX_PAIR_OK) && (Vox_Pairing_State[VOR_CHAN] == VOX_PAIR_OK) ) /*配对成功*/
{
if( LED_On_Timer < LED_ON_CNT ) //配对成功LED亮4s后灭。
{
LED_On_Timer++;
LED_R_ON();
}
else
{
LED_R_OFF();
}
}
}
else
{
if( LED_On_Timer < LED_ON_CNT ) //开关盖盒子非低电LED亮4s后灭。
{
LED_On_Timer++;
LED_R_ON();
}
else
{
LED_R_OFF();
}
}
}
}
}
#endif
/*****************************************************************************
* Function : UserAPP
* Description : 5ms调用周期
* Input : None
* Output : None
* Return : None
* Note : None
*****************************************************************************/
void UserAPP(void)
{
if( F_sys_tim_5ms )
{
F_sys_tim_5ms = 0;
#if KEY_HALL_ENABLE
//Key_Handler(); //按键检测
Hall_Handler(); //开关盖检测
#endif
#if DISCHARGE_ENABLE
DisCharge_Handler(); //放电boost功能
#endif
}
#ifdef LED_DISPLAY
if(F_sys_tim_10ms)
{
F_sys_tim_10ms = 0;
LED_Drv();
}
#endif
if( F_sys_tim_100ms )
{
F_sys_tim_100ms = 0;
#if CHARGER_ENABLE
Charger_Handler(); //充电功能
#endif
#if ADC_ENABLE
Vbat_Adc = Vbat_Value(); //获取Bat电压
#endif
#if VOX_ENABLE
Vox_Det_Machine(); //开关盖盒子功能逻辑。
#endif
#ifdef LED_DISPLAY
LED_Display_App(); //LED 灯效
#endif
#if BAT_VALUE
check_bat_level(); //电量计
#endif
#ifdef VOX_RX
HandleVoxCommMsg();
#endif
}
if( F_sys_tim_1s )
{
F_sys_tim_1s = 0;
#if SLEEP_ENABLE
/*1、唤醒后工作Ns后进入Sleep Mode,N需要大于100ms。
2、有VIN存在的情况下系不会进入sleep mode。
*/
if( Decnt_SleepDelay > 0 ) /*能否在数字中实现此功能?*/
{
Decnt_SleepDelay--;
/*倒数进Sleep Mode过程中出现了KEY\HALL\Loadon\IOFF中断则重新计时。*/
if( Enter_Sleep_Cnt_Restart_Flag )
{
Enter_Sleep_Cnt_Restart_Flag = 0;
Decnt_SleepDelay = ENTER_STANDBYMODE_CNT;
}
return;
}
if( Check_Require_Sleep() )
{
/* 唤醒中断使能设置 */
//SFRADDR = WKUP_EN0;
//SFRDATA = 0xE6; //wake0 up enable.
//SFRADDR = WKUP_EN3;
//SFRDATA = 0xFF; //wake3 up enable.VOX loadon wake up.
/* Enter Sleep */
/* InSleep Handler */ //Disable All IRQ
#if UART0_ENABLE
ES0 = 0; //UART0 IRQ Disable
#endif
EX4 = 0;
EX2 = 0;
ET0 = 0; //timer0 IRQ Disable
#if TIMER1_ENABLE
ET1 = 0; //timer1 IRQ Disable
#endif
SFRADDR = ADC_CTL0;
SFRDATA &= ~0x80; //ADC Disable.
PCON |= 0x02; //Enter StandbyMode, Only int0 or int1 can wake up system
/* OutSleep Handler */ //Enable IRQ
#if UART0_ENABLE
ES0 = 1; //UART0 IRQ
#endif
EX4 = 1;
EX2 = 1;
ET0 = 1; //timer0 IRQ
#if TIMER1_ENABLE
ET1 = 1; //timer1 IRQ
#endif
Decnt_SleepDelay = ENTER_STANDBYMODE_CNT;
}
else
{
Decnt_SleepDelay = ENTER_STANDBYMODE_CNT;
}
#endif
}
}