/* ****************************************************************************** * * @file VOX_Module.h * @brief VOL/R module * @ic sy8835 * * @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_Vout_Enable; extern bit Earphone_Chg_Flag; //耳机出入盒标志位 extern bit Vox_Output_Short_Flag; #define IVOX_THN 20 //耳机跟随充电流下降阈值 #define IVOX_THP 200 //耳机跟随充电流上升阈值 #define VOL_TYPE 0x00 #define VOR_TYPE 0x01 /*耳机配对状态*/ 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; #if VOX_ENABLE /******************************************************************************\ Macro definitions \******************************************************************************/ /*CHIP_STA1*/ #define VOX_Sta_Vol_Output_Short_Pos (0U) #define VOX_Sta_Vol_Output_Short_Pos_Msk (0x1UL << 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 (0x1UL << 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 (0x1UL << 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 (0x1UL << 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 (0x1UL << 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 (0x1UL << VOX_Sta_Vor_Loadon_Pos) #define VOR_LoadOn VOX_Sta_Vor_Loadon_Pos_Msk /* VOL/R Control Register - VOX_CTL0 */ #define EN_VOL_ADTL_Pos (0U) #define EN_VOL_ADTL_Pos_Msk (0x1UL << 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 (0x1UL << 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 (0x1UL << 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 (0x1UL << 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 (0x1UL << 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 (0x1UL << 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 (0x1UL << 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 (0x1UL << 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 (0x1UL << 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 (0x1UL << 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 (0x1UL << Vol_Pull_Down_Pos) #define Vol_Pull_Down Vol_Pull_Down_Pos_Msk /*自动识别负载电流阈值。*/ #define VOX_ADT_Cur_0_5UA (0x0UL) #define VOX_ADT_Cur_1_5UA (0x1UL) #define VOX_ADT_Cur_2_5UA (0x2UL) #define VOX_ADT_Cur_3_5UA (0x3UL) #define VOX_ADT_Cur_4_5UA (0x4UL) #define VOX_ADT_Cur_5_5UA (0x5UL) #define VOX_ADT_Cur_6_5UA (0x6UL) #define VOX_ADT_Cur_7_5UA (0x7UL) /* 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 (0x0UL) #define Vox_Ioff_3mA (0x1UL) #define Vox_Ioff_4mA (0x2UL) #define Vox_Ioff_5mA (0x3UL) /*轻载转重载滤波时间配置。*/ #define VOX_LIGHT_TO_HAVEY_1 (0x0UL) #define VOX_LIGHT_TO_HAVEY_8 (0x1UL) #define VOX_LIGHT_TO_HAVEY_128 (0x2UL) #define VOX_LIGHT_TO_HAVEY_256 (0x3UL) /*重载转轻载滤波时间配置。*/ #define VOX_HAVEY_TO_LIGHT_0_125 (0x0UL) #define VOX_HAVEY_TO_LIGHT_1 (0x1UL) #define VOX_HAVEY_TO_LIGHT_8 (0x2UL) #define VOX_HAVEY_TO_LIGHT_64 (0x3UL) /* VOL/R Comm Control Register,COMM_CTL */ #define Vor_EN_COMR_Pos (7U) #define Vor_EN_COMR_Pos_Msk (0x1UL << 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 (0x1UL << Vor_SW_MD_Pos) #define Vor_SW_MD Vor_SW_MD_Pos_Msk #define Vor_SWDT_Pos (5U) #define Vor_SWDT_Pos_Msk (0x1UL << Vor_SWDT_Pos) #define Vor_SWDT Vor_SWDT_Pos_Msk #define Vor_SWDR_Pos (4U) #define Vor_SWDR_Pos_Msk (0x1UL << Vor_SWDR_Pos) #define Vor_SWDR Vor_SWDR_Pos_Msk #define Vol_EN_COMR_Pos (3U) #define Vol_EN_COMR_Pos_Msk (0x1UL << 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 (0x1UL << Vol_SW_MD_Pos) #define Vol_SW_MD Vol_SW_MD_Pos_Msk #define Vol_SWDT_Pos (1U) #define Vol_SWDT_Pos_Msk (0x1UL << Vol_SWDT_Pos) #define Vol_SWDT Vol_SWDT_Pos_Msk #define Vol_SWDR_Pos (0U) #define Vol_SWDR_Pos_Msk (0x1UL << Vol_SWDR_Pos) #define Vol_SWDR Vol_SWDR_Pos_Msk /* VOL/R Comm TRx Data Register,COMM_DAT */ #define Vor_COMR_RX_Pos (5U) #define Vor_COMR_RX_Pos_Msk (0x1UL << 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 (0x1UL << 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 (0x1UL << 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 (0x1UL << 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 (0x00UL) #define Vox_COMM_PULL_Vol_2_5_Pos_Msk (0x01UL) #define Vox_COMM_PULL_Vol_3_0_Pos_Msk (0x02UL) #define Vox_COMM_PULL_Vol_5_0_Pos_Msk (0x03UL) #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 (0x1UL << Vox_Pull_Up_50k_Pos) #define Vox_Pull_Up_50k Vox_Pull_Up_50k_Pos_Msk #define BOXHEADER 0x55AA //VOX通讯数据包头 #define BOXIDCODE 0xFF //VOX通讯耳机->仓数据包头 #define Vox_TX_Interval 2 //Vox定时发送指令时间间隔 #define TIM_SHUTDOWN_DEBOUNCE 600 //关机前debounce时间 /******************************************************************************\ Variables definitions \******************************************************************************/ /*耳机通道选择*/ #define TWS_VOL 0x04 #define TWS_VOR 0x05 #define TWS_BOX 0x02 #define TWS_PC 0x03 /*耳机通道选择*/ typedef enum { VOL_CHAN = 0x00, VOR_CHAN = 0x01, VOX_MAX_CHAN = 0x02, VOX_BOTH = 0xFF, }e_Vox_Chan; /*耳机和充电仓进行双向通讯的协议命令ID。*/ typedef enum _VOX_BES_COMMAND_E { VHOUSE_CMD_PAIR = 0x01, //充电仓发起的配对信息 VHOUSE_CMD_EXCH_TWS_BTADDR = 0x02, //交换对耳的蓝牙地址信息。 VHOUSE_CMD_CLEAR_PAIR = 0x03, //清配对信息 VHOUSE_CMD_OPEN_BOX = 0x06, //开盖获取电量包 VHOUSE_CMD_CLOSE_WIN_GET_VBAT = 0x07, //关盖获取电量包 VHOUSE_CMD_RST = 0x08, // VHOUSE_CMD_PWROFF = 0x80, //关机消息 VHOUSE_CMD_CLOSE_BOX = 0x81, BES_RESET = 0xE1, }VOX_BES_COMMAND_E; /* Vox Channel Select. */ typedef enum { VOL_CHAN_SET = 0x00, VOR_CHAN_SET = 0x01, VOX_BOTH_SET = 0x02, }e_Vox_Chan_Set; /* 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, // VOX 1K 电阻下拉使能 1: VOR 通过 1K 电阻下拉至 gnd } VOX_Enable_Mode_e; extern bit Cover_Open_Flag; extern bit Vox_Ocp_Flag; #ifdef VOX_RX extern xdata uint8_t Vox_Get_Vbat_Flag[2]; //耳机配对状态,VOL:低4bit;VOR:高4bit。0是无效,1是正在配对,2是配对成功,3不处理,保持当前状态。 extern xdata uint8_t Vox_Get_BES_Addr_Flag[2] ; #endif 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]; //耳机在盒标志 uint16_t Vpmid_Threshold_Neg; //Vpmid电压下降阈值 uint16_t Vpmid_Threshold_At_Present; //Vpmid电压当前值 uint16_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; /******************************************************************************\ UserCfg.Functions definitions \******************************************************************************/ extern void HandleTxCommand(VOX_BES_COMMAND_E TxCommand, e_Vox_Chan nVox_Chn_Select); extern void Vox_Det_Machine(void); extern void Vox_Follow_Chg( g_Vox_Fllow_Chg_Cfg *n_Vox_Fllow_Chg ); extern void VOX_EN_Type(VOX_Enable_Mode_e VOX_Enable_Mode); #ifdef VOX_RX extern void HandleVoxCommMsg(void); #endif #endif #endif