SY8837_Demo_For_OurSelf/UsrInc/vox/vox_module.h
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

414 lines
12 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 vox_module.h
* @brief VOL/R module
* @ic sy8837/8
*
* @version 1.0
* @date 2024/11/01 09:59:40
* @author Alex Xu
*
* Copyright (c) 2013-2099,Tkplusemi Technology Co.,Ltd.
* All Rights Reserved
*
* History:
* Revision Date Author Desc
* 1.0.0 2024/11/01 Alex build this file
******************************************************************************
*/
#ifndef __VOX_MODULE_H__
#define __VOX_MODULE_H__
/*_____ I N C L U D E S ____________________________________________________*/
#include "define.h"
/*耳机方案商选择*/
//#define QIANCHENG //岍丞
//#define ZHONGKELANXUN //中科蓝讯
#define XIAOMI //小米
/*硬件版本信息*/
#define HW_VER 0x01 //硬件版本信息范围0-9
/*软件版本信息*/
#define FW_VER 0x001 //程序版本
extern bit Vox_Output_Short_Flag;
#define VOL_TYPE 0x00
#define VOR_TYPE 0x01
#define VOX_MAX_CHAN 0x02
/*耳机配对状态*/
typedef enum {
VOX_PAIR_NONE = 0, //无效
VOX_PAIR_ING, //配对中
VOX_PAIR_OK, //配对完成
VOX_PAIR_KEEP, //不处理,保持当前状态
}e_Vox_Pairing_State;
/*耳机配对记录*/
typedef enum {
VOX_PAIRED_NONE = 0, //无配对过
VOX_PAIRED_OK, //有配对记录
}e_Vox_Paired_State;
#ifdef VOX_COVER_ENABLE
extern bit Vox_Vout_Enable; //Vox功率输出标志位
extern idata uint8_t EarPhone_Num;
#else
typedef enum {
VOX_NONE_IN_BOX = 0, //空仓
VOX_GET_INTO_BOX, //耳机入仓
VOX_STAY_IN_BOX, //耳机在仓
}Vox_State_e;
extern bit Vor_Vout_Enable; //Vor功率输出标志位
extern bit Vol_Vout_Enable; //Vol功率输出标志位
extern bit Vor_GetOut_Box_Flag;
extern bit Vol_GetOut_Box_Flag;
extern Vox_State_e Vor_State;
extern Vox_State_e Vol_State;
#endif
#if VOX_ENABLE
/******************************************************************************\
Macro definitions
\******************************************************************************/
/*CHIP_STA1<E3h>*/
#define VOX_Sta_Vol_Output_Short_Pos (0U)
#define VOX_Sta_Vol_Output_Short_Pos_Msk (0x1U << VOX_Sta_Vol_Output_Short_Pos)
#define VOL_Output_Short VOX_Sta_Vol_Output_Short_Pos_Msk
#define VOX_Sta_Vor_Output_Short_Pos (1U)
#define VOX_Sta_Vor_Output_Short_Pos_Msk (0x1U << VOX_Sta_Vor_Output_Short_Pos)
#define VOR_Output_Short VOX_Sta_Vor_Output_Short_Pos_Msk
#define VOX_Sta_Vol_Ioff_Pos (2U)
#define VOX_Sta_Vol_Ioff_Pos_Msk (0x1U << VOX_Sta_Vol_Ioff_Pos)
#define VOL_Ioff VOX_Sta_Vol_Ioff_Pos_Msk
#define VOX_Sta_Vor_Ioff_Pos (3U)
#define VOX_Sta_Vor_Ioff_Pos_Msk (0x1U << VOX_Sta_Vor_Ioff_Pos)
#define VOR_Ioff VOX_Sta_Vor_Ioff_Pos_Msk
#define VOX_Sta_Vol_Loadon_Pos (5U)
#define VOX_Sta_Vol_Loadon_Pos_Msk (0x1U << VOX_Sta_Vol_Loadon_Pos)
#define VOL_LoadOn VOX_Sta_Vol_Loadon_Pos_Msk
#define VOX_Sta_Vor_Loadon_Pos (7U)
#define VOX_Sta_Vor_Loadon_Pos_Msk (0x1U << VOX_Sta_Vor_Loadon_Pos)
#define VOR_LoadOn VOX_Sta_Vor_Loadon_Pos_Msk
/* VOL/R Control Register - VOX_CTL0 <B7h> */
#define EN_VOL_ADTL_Pos (0U)
#define EN_VOL_ADTL_Pos_Msk (0x1U << EN_VOL_ADTL_Pos)
#define EN_VOL_ADTL EN_VOL_ADTL_Pos_Msk
#define EN_VOR_ADTR_Pos (1U)
#define EN_VOR_ADTR_Pos_Msk (0x1U << EN_VOR_ADTR_Pos)
#define EN_VOR_ADTR EN_VOR_ADTR_Pos_Msk
#define EN_VOL_PU_Pos (2U)
#define EN_VOL_PU_Pos_Msk (0x1U << EN_VOL_PU_Pos)
#define EN_VOL_PU EN_VOL_PU_Pos_Msk
#define EN_VOR_PU_Pos (3U)
#define EN_VOR_PU_Pos_Msk (0x1U << EN_VOR_PU_Pos)
#define EN_VOR_PU EN_VOR_PU_Pos_Msk
#define EN_VOL_VOUT_Pos (4U)
#define EN_VOL_VOUT_Pos_Msk (0x1U << EN_VOL_VOUT_Pos)
#define EN_VOL_VOUT EN_VOL_VOUT_Pos_Msk
#define EN_VOR_VOUT_Pos (5U)
#define EN_VOR_VOUT_Pos_Msk (0x1U << EN_VOR_VOUT_Pos)
#define EN_VOR_VOUT EN_VOR_VOUT_Pos_Msk
#define EN_VOL_VDS_Pos (6U)
#define EN_VOL_VDS_Pos_Msk (0x1U << EN_VOL_VDS_Pos)
#define EN_VOL_VDS EN_VOL_VDS_Pos_Msk
#define EN_VOR_VDS_Pos (7U)
#define EN_VOR_VDS_Pos_Msk (0x1U << EN_VOR_VDS_Pos)
#define EN_VOR_VDS EN_VOR_VDS_Pos_Msk
/* VOL/R ADT Config Register,VOX_CON0<6Ah> */
#define Vox_Pull_Up_Pos (7U)
#define Vox_Pull_Up_Pos_Msk (0x1U << Vox_Pull_Up_Pos)
#define Vox_Pull_Up Vox_Pull_Up_Pos_Msk
#define Vox_Pull_Up_Deb_Pos (6U)
#define Vox_Pull_Up_Deb_8Ms_Pos_Msk 0
#define Vox_Pull_Up_Deb_16Ms_Pos_Msk 1
#define Vox_Pull_Up_Deb_8Ms (Vox_Pull_Up_Deb_8Ms_Pos_Msk << Vox_Pull_Up_Deb_Pos)
#define Vox_Pull_Up_Deb_16Ms (Vox_Pull_Up_Deb_16Ms_Pos_Msk << Vox_Pull_Up_Deb_Pos)
#define Vor_Pull_Down_Pos (5U)
#define Vor_Pull_Down_Pos_Msk (0x1U << Vor_Pull_Down_Pos)
#define Vor_Pull_Down Vor_Pull_Down_Pos_Msk
#define Vol_Pull_Down_Pos (4U)
#define Vol_Pull_Down_Pos_Msk (0x1U << Vol_Pull_Down_Pos)
#define Vol_Pull_Down Vol_Pull_Down_Pos_Msk
/*自动识别负载电流阈值。*/
#define VOX_ADT_CUR_0_5UA (0x00U)
#define VOX_ADT_CUR_1_5UA (0x01U)
#define VOX_ADT_CUR_2_5UA (0x02U)
#define VOX_ADT_CUR_3_5UA (0x03U)
#define VOX_ADT_CUR_4_5UA (0x04U)
#define VOX_ADT_CUR_5_5UA (0x05U)
#define VOX_ADT_CUR_6_5UA (0x06U)
#define VOX_ADT_CUR_7_5UA (0x07U)
/*
VOX过流档位设置在系统初始化中(Vox_init())通过配置VOX_CON0
SFRADDR = VOX_CON0; //设置VOX输出200mA负载识别电流2.5uA。
SFRDATA |= VOX_ADT_Cur_2_5UA;
//Vox轻重载滤波时间配置
SFRADDR = VOX_CON2;
SFRDATA |= (VOX_LIGHT_TO_HAVEY_128 << 2) | VOX_HAVEY_TO_LIGHT_8;
*/
/* VOL/R Misc Config Register,VOX_CON2<6Ch> */
#define VOX_IOFF_2MA (0x00U)
#define VOX_IOFF_3MA (0x01U)
#define VOX_IOFF_4MA (0x02U)
#define VOX_IOFF_5MA (0x03U)
/*轻载转重载滤波时间配置。*/
#define VOX_LIGHT_TO_HAVEY_1MS (0x00U)
#define VOX_LIGHT_TO_HAVEY_8MS (0x01U)
#define VOX_LIGHT_TO_HAVEY_128MS (0x02U)
#define VOX_LIGHT_TO_HAVEY_256MS (0x03U)
/*重载转轻载滤波时间配置。*/
#define VOX_HAVEY_TO_LIGHT_0_125MS (0x00U)
#define VOX_HAVEY_TO_LIGHT_1MS (0x01U)
#define VOX_HAVEY_TO_LIGHT_8MS (0x02U)
#define VOX_HAVEY_TO_LIGHT_64MS (0x03U)
/* VOL/R Comm Control Register,COMM_CTL<BDh> */
#define Vor_EN_COMR_Pos (7U)
#define Vor_EN_COMR_Pos_Msk (0x1U << Vor_EN_COMR_Pos)
#define Vor_EN_COMR Vor_EN_COMR_Pos_Msk
#define Vor_SW_MD_Pos (6U)
#define Vor_SW_MD_Pos_Msk (0x1U << Vor_SW_MD_Pos)
#define Vor_SW_MD Vor_SW_MD_Pos_Msk
#define Vor_SWDT_Pos (5U)
#define Vor_SWDT_Pos_Msk (0x1U << Vor_SWDT_Pos)
#define Vor_SWDT Vor_SWDT_Pos_Msk
#define Vor_SWDR_Pos (4U)
#define Vor_SWDR_Pos_Msk (0x1U << Vor_SWDR_Pos)
#define Vor_SWDR Vor_SWDR_Pos_Msk
#define Vol_EN_COMR_Pos (3U)
#define Vol_EN_COMR_Pos_Msk (0x1U << Vol_EN_COMR_Pos)
#define Vol_EN_COMR Vol_EN_COMR_Pos_Msk
#define Vol_SW_MD_Pos (2U)
#define Vol_SW_MD_Pos_Msk (0x1U << Vol_SW_MD_Pos)
#define Vol_SW_MD Vol_SW_MD_Pos_Msk
#define Vol_SWDT_Pos (1U)
#define Vol_SWDT_Pos_Msk (0x1U << Vol_SWDT_Pos)
#define Vol_SWDT Vol_SWDT_Pos_Msk
#define Vol_SWDR_Pos (0U)
#define Vol_SWDR_Pos_Msk (0x1U << Vol_SWDR_Pos)
#define Vol_SWDR Vol_SWDR_Pos_Msk
/* VOL/R Comm TRx Data Register,COMM_DAT<BEh> */
#define Vor_COMR_RX_Pos (5U)
#define Vor_COMR_RX_Pos_Msk (0x1U << Vor_COMR_RX_Pos)
#define Vor_COMR_RX Vor_COMR_RX_Pos_Msk
#define Vol_COML_RX_Pos (4U)
#define Vol_COML_RX_Pos_Msk (0x1U << Vol_COML_RX_Pos)
#define Vol_COML_RX Vol_COML_RX_Pos_Msk
#define Vor_COMR_DT_Pos (1U)
#define Vor_COMR_DT_Pos_Msk (0x1U << Vor_COMR_DT_Pos)
#define Vor_COMR_DT Vor_COMR_DT_Pos_Msk
#define Vol_COML_DT_Pos (0U)
#define Vol_COML_DT_Pos_Msk (0x1U << Vol_COML_DT_Pos)
#define Vol_COML_DT Vol_COML_DT_Pos_Msk
/* VOL/R Comm Config Register,COMM_CON<6Fh> */
#define Vox_COMM_PULL_Vol_Pos (2U)
#define Vox_COMM_PULL_Vol_1_8_Pos_Msk (0x00U)
#define Vox_COMM_PULL_Vol_2_5_Pos_Msk (0x01U)
#define Vox_COMM_PULL_Vol_3_0_Pos_Msk (0x02U)
#define Vox_COMM_PULL_Vol_5_0_Pos_Msk (0x03U)
#define Vox_COMM_PULL_Vol_1_8 (Vox_COMM_PULL_Vol_1_8_Pos_Msk << Vox_COMM_PULL_Vol_Pos)
#define Vox_COMM_PULL_Vol_2_5 (Vox_COMM_PULL_Vol_2_5_Pos_Msk << Vox_COMM_PULL_Vol_Pos)
#define Vox_COMM_PULL_Vol_3_0 (Vox_COMM_PULL_Vol_3_0_Pos_Msk << Vox_COMM_PULL_Vol_Pos)
#define Vox_COMM_PULL_Vol_5_0 (Vox_COMM_PULL_Vol_5_0_Pos_Msk << Vox_COMM_PULL_Vol_Pos)
#define Vox_Pull_Up_50k_Pos (0U)
#define Vox_Pull_Up_50k_Pos_Msk (0x1U << Vox_Pull_Up_50k_Pos)
#define Vox_Pull_Up_50k Vox_Pull_Up_50k_Pos_Msk
/******************************************************************************\
Variables definitions
\******************************************************************************/
/* Vox Follow Charge State. */
typedef enum {
Vox_Follow_Chg_InitSta = 0x00,
Vox_Follow_Chg_Sta1,
Vox_Follow_Chg_Sta2,
Vox_Follow_Chg_Sta3,
Vox_Follow_Chg_Sta4,
}e_Vox_Follow_Chg_Sta;
/* VOX Enable Type */
typedef enum {
VOX_TRANS_Mode = 0x00, //VOx UART 透传功能使能
VOX_COMM_Mode_Uart, //VOx 通讯 UART Mode
VOX_COMM_Mode_Reg, //VOx 通讯 Register Mode
VOX_VOUT_Mode, //VOx 5V 输出使能
VOX_ADT_Mode, //VOx 负载接入、存在识别功能使能,负载自动识别
VOX_PUnK_Mode, //Vox上拉电阻配置上拉到VOX_Vup。
VOX_PD1K_Mode, //<SHIP_CTL[VOX_PD1K 5:4]> VOX 1K 电阻下拉使能 1: VOR 通过 1K 电阻下拉至 gnd
} VOX_Enable_Mode_e;
extern bit Cover_Open_Flag;
extern bit Vox_Ocp_Flag;
extern bit Boost_Open_Flag;
extern bit OpenCover_TX_Cmd_Flag;
#if VOX_FOLLOW_CHG
typedef struct {
uint16_t IVox_Init[VOX_MAX_CHAN]; //跟随充Vox初始化电流值。
uint16_t IVox_Threshold_Neg[VOX_MAX_CHAN]; //Vox电流下降阈值
uint16_t IVox_Threshold_Pos[VOX_MAX_CHAN]; //Vox电流上升阈值
uint16_t IVox_At_Present[VOX_MAX_CHAN]; //Vox当前电流
uint8_t IVox_TC_Mode[VOX_MAX_CHAN]; //Vox CV_TC充电电流阈值
uint8_t Vpmid_SubSta[VOX_MAX_CHAN]; //Vox的Vpmid电压下降标志
uint8_t Vpmid_SubSta_Flag; //Vpmid电压下降标志
uint8_t Vpmid_AddSta[VOX_MAX_CHAN]; //Vpmid电压上升标志
uint8_t Vox_InBox_Sta[VOX_MAX_CHAN]; //耳机在盒标志
uint8_t Vpmid_Threshold_Neg; //Vpmid电压下降阈值
uint8_t Vpmid_Threshold_At_Present; //Vpmid电压当前值
uint8_t Vpmid_Threshold_Pos; //Vpmid电压上升阈值
uint8_t Vox_PTM_Type; //Boost 直通模式使能状态位ON:Enable;OFF:Disable。
uint8_t Vox_Follow_Start; //跟随充启动标志
uint8_t Vox_Follow_Stop; //跟随充结束标志
} g_Vox_Fllow_Chg_Cfg;
extern g_Vox_Fllow_Chg_Cfg xdata Vox_Fllow_Chg;
#endif
/******************************************************************************\
UserCfg.Functions definitions
\******************************************************************************/
#ifdef VOX_ADT_ENABLE
extern void Vol_Det_Machine(void);
extern void Vor_Det_Machine(void);
#else
extern void Vox_Det_Machine(void);
#endif
#if VOX_FOLLOW_CHG
extern void Vox_Follow_Chg( g_Vox_Fllow_Chg_Cfg *n_Vox_Fllow_Chg );
#endif
#ifdef VOX_ADT_ENABLE
extern void VOL_EN_Type(VOX_Enable_Mode_e VOX_Enable_Mode);
extern void VOR_EN_Type(VOX_Enable_Mode_e VOX_Enable_Mode);
#else
extern void VOX_EN_Type(VOX_Enable_Mode_e VOX_Enable_Mode);
#endif
#endif
#endif