2、增加VOX持续输出0V以唤醒耳机的情况; 3、解决超长按后,双向通讯一直发码的问题;(松开按键后Key_Press_ll_irq设为FALSE) 4、解决关盖上电时,不亮灯和不发码的问题(即把Hall_Sta_bk初始化); 5、长按发配对码时,主副耳的选择提取到config.h中;
414 lines
12 KiB
C
414 lines
12 KiB
C
/*
|
||
******************************************************************************
|
||
*
|
||
* @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
|
||
|