From c743af0aa69c1b469e4e937fe92d1506c86ee71e Mon Sep 17 00:00:00 2001 From: rb_peng Date: Fri, 21 Feb 2025 17:24:44 +0800 Subject: [PATCH] =?UTF-8?q?1=E3=80=81=E5=B0=86=E5=8F=8C=E5=90=91=E9=80=9A?= =?UTF-8?q?=E4=BF=A1=E7=9A=84=E5=85=B7=E4=BD=93=E5=9C=BA=E6=99=AF=E6=8F=90?= =?UTF-8?q?=E5=88=B0vox=5FComm=5FHandle=E5=87=BD=E6=95=B0=E4=B8=AD=202?= =?UTF-8?q?=E3=80=81=E5=A2=9E=E5=8A=A0VOX=E6=8C=81=E7=BB=AD=E8=BE=93?= =?UTF-8?q?=E5=87=BA0V=E4=BB=A5=E5=94=A4=E9=86=92=E8=80=B3=E6=9C=BA?= =?UTF-8?q?=E7=9A=84=E6=83=85=E5=86=B5=EF=BC=9B=203=E3=80=81=E8=A7=A3?= =?UTF-8?q?=E5=86=B3=E8=B6=85=E9=95=BF=E6=8C=89=E5=90=8E=EF=BC=8C=E5=8F=8C?= =?UTF-8?q?=E5=90=91=E9=80=9A=E8=AE=AF=E4=B8=80=E7=9B=B4=E5=8F=91=E7=A0=81?= =?UTF-8?q?=E7=9A=84=E9=97=AE=E9=A2=98=EF=BC=9B=EF=BC=88=E6=9D=BE=E5=BC=80?= =?UTF-8?q?=E6=8C=89=E9=94=AE=E5=90=8EKey=5FPress=5Fll=5Firq=E8=AE=BE?= =?UTF-8?q?=E4=B8=BAFALSE=EF=BC=89=204=E3=80=81=E8=A7=A3=E5=86=B3=E5=85=B3?= =?UTF-8?q?=E7=9B=96=E4=B8=8A=E7=94=B5=E6=97=B6=EF=BC=8C=E4=B8=8D=E4=BA=AE?= =?UTF-8?q?=E7=81=AF=E5=92=8C=E4=B8=8D=E5=8F=91=E7=A0=81=E7=9A=84=E9=97=AE?= =?UTF-8?q?=E9=A2=98=EF=BC=88=E5=8D=B3=E6=8A=8AHall=5FSta=5Fbk=E5=88=9D?= =?UTF-8?q?=E5=A7=8B=E5=8C=96=EF=BC=89=EF=BC=9B=205=E3=80=81=E9=95=BF?= =?UTF-8?q?=E6=8C=89=E5=8F=91=E9=85=8D=E5=AF=B9=E7=A0=81=E6=97=B6=EF=BC=8C?= =?UTF-8?q?=E4=B8=BB=E5=89=AF=E8=80=B3=E7=9A=84=E9=80=89=E6=8B=A9=E6=8F=90?= =?UTF-8?q?=E5=8F=96=E5=88=B0config.h=E4=B8=AD=EF=BC=9B?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- UsrInc/adc/adc.h | 16 +- UsrInc/comm/vox_comm.h | 82 +++++- UsrInc/inc/config.h | 33 ++- UsrInc/inc/define.h | 14 +- UsrInc/timer/sys_tim.h | 8 +- UsrInc/uart/uart.h | 2 +- UsrInc/vox/vox_module.h | 27 +- UsrSrc/adc/adc.c | 63 ++--- UsrSrc/comm/vox_comm.c | 498 ++++++++++++++++++++++++++++++++++-- UsrSrc/display/display_ui.c | 2 +- UsrSrc/hall/hall.c | 8 +- UsrSrc/key/key.c | 275 ++++---------------- UsrSrc/pwm/pwm.c | 2 +- UsrSrc/timer/sys_tim.c | 24 +- UsrSrc/uart/uart.c | 1 + UsrSrc/userapp/userapp.c | 5 + UsrSrc/vox/vox_module.c | 311 +++++++++------------- 17 files changed, 837 insertions(+), 534 deletions(-) diff --git a/UsrInc/adc/adc.h b/UsrInc/adc/adc.h index 3551a1e..62795db 100644 --- a/UsrInc/adc/adc.h +++ b/UsrInc/adc/adc.h @@ -34,21 +34,21 @@ /******************************************************************************\ Variables definitions \******************************************************************************/ -extern int8_t ADC_Offset_Error; //ADC Offset Error 校准值寄存器 +//extern int8_t ADC_Offset_Error; //ADC Offset Error 校准值寄存器 -extern uint8_t Vor_Isense_Gain_Error; +//extern uint8_t Vor_Isense_Gain_Error; -extern uint8_t Vol_Isense_Gain_Error; +//extern uint8_t Vol_Isense_Gain_Error; -extern int8_t Vor_Isense_Offset_Error; +//extern int8_t Vor_Isense_Offset_Error; -extern int8_t Vol_Isense_Offset_Error; +//extern int8_t Vol_Isense_Offset_Error; extern uint8_t ADC_Chn_Num; -extern uint16_t g_Value_Adc; +//extern uint16_t g_Value_Adc; -extern uint16_t g_Value_Adc_Avg; +//extern uint16_t g_Value_Adc_Avg; extern int16_t g_Vntc_Adc; @@ -60,7 +60,7 @@ extern int16_t g_Vbat_Adc; extern int16_t g_pmu_Adc_Vout; -extern uint8_t g_ADC_Chn; +//extern uint8_t g_ADC_Chn; /* ADC通道枚举。 */ typedef enum { diff --git a/UsrInc/comm/vox_comm.h b/UsrInc/comm/vox_comm.h index e907738..ff5cc83 100644 --- a/UsrInc/comm/vox_comm.h +++ b/UsrInc/comm/vox_comm.h @@ -36,9 +36,74 @@ #define TWS_BOX 0x02 #define TWS_PC 0x03 +/*100ms调用周期*/ +#define KEY_TWS_PAIR_TIMER 3 + +#define KEY_TWS_PAIR_CNT 10 + +#define Vox_COM_MSG_Tim 20 + +#if XUANHENG + +#define BOXHEADER (0xAAU) //VOX通讯数据包头 + +#else + +#define BOXHEADER (0x55AAUL) //VOX通讯数据包头 + +#define EARPHONE_HEADER_HIGH (0x55U) +#define EARPHONE_HEADER_LOW (0xAAU) + +#define BOXIDCODE (0xFFU) //VOX通讯耳机->仓数据包头 + +#endif + +#define Vox_TX_Interval (2U) //Vox定时发送指令时间间隔 + +#define Vox_TX_Interval_2 (4U) + +#define TIM_SHUTDOWN_DEBOUNCE (600UL) //关机前debounce时间 + /******************************************************************************\ Typedef definitions \******************************************************************************/ +#ifdef VOX_COMM_ENABLE + +/* 双向通讯功能场景参数。 */ +typedef struct VOX_COMM +{ +#ifdef VOX_COVER_ENABLE + + uint8_t Cover_Close_Flag :1; //关盖发码标志位 + uint8_t Cover_Open_Flag :1; //开盖发码标志位 + uint8_t Vox_Chg_Full_Flag :1; //耳机充满发关机码标志位 + +#else + + uint8_t Vol_GetInto_Box_Flag :1; //VOL耳机入盒发码标志位 + uint8_t Vor_GetInto_Box_Flag :1; //VOR耳机入盒发码标志位 + + uint8_t Vol_Chg_Full_Flag :1; //VOL耳机充满发码标志位 + uint8_t Vor_Chg_Full_Flag :1; //VOR耳机充满发码标志位 + +#endif + + uint8_t Key_L_2S_Flag :1; //按键2s发码标志位 + uint8_t Key_LL_8s_Flag :1; //按键8s发码标志位 + /*发码相关计时器*/ + uint8_t Msg_TX_Debounce; + uint8_t Msg_TX_Debounce1; + + /*按键发码相关计时器*/ + uint8_t Key_TWS_Pair_Tim; + uint8_t Key_TWS_Clear_Pair_Tim; + uint8_t Key_TWS_Pair_Cnt; + +}Vox_Comm_Cfg; + +extern Vox_Comm_Cfg gVox_Comm; + +#endif #if JIELI @@ -57,19 +122,19 @@ typedef enum { typedef enum _VOX_BES_COMMAND_E { - VHOUSE_CMD_PAIR = 0x01, //充电仓发起的配对信息 + VHOUSE_CMD_PAIR = 0x01, //充电仓发起的配对信息 VHOUSE_CMD_EXCH_TWS_BTADDR = 0x02, //交换对耳的蓝牙地址信息。 - VHOUSE_CMD_CLEAR_PAIR = 0x03, //清配对信息 + VHOUSE_CMD_CLEAR_PAIR = 0x03, //清配对信息 - VHOUSE_CMD_OPEN_BOX = 0x06, //开盖获取电量包 + VHOUSE_CMD_OPEN_BOX = 0x06, //开盖获取电量包 VHOUSE_CMD_CLOSE_WIN_GET_VBAT = 0x07, //关盖获取电量包 - VHOUSE_CMD_RST = 0x08, // + VHOUSE_CMD_RST = 0x08, // - VHOUSE_CMD_PWROFF = 0x80, //关机消息 + VHOUSE_CMD_PWROFF = 0x80, //关机消息 VHOUSE_CMD_CLOSE_BOX = 0x81, @@ -175,14 +240,17 @@ typedef enum _VOX_BES_COMMAND_E \******************************************************************************/ #ifdef VOX_RX -extern uint8_t Vox_Get_Vbat_Flag[2]; //耳机配对状态,VOL:低4bit;VOR:高4bit。0是无效,1是正在配对,2是配对成功,3不处理,保持当前状态。 +extern idata uint8_t Vox_Get_Vbat_Flag[2]; //耳机配对状态,VOL:低4bit;VOR:高4bit。0是无效,1是正在配对,2是配对成功,3不处理,保持当前状态。 -extern uint8_t Vox_Get_BES_Addr_Flag[2] ; +extern idata uint8_t Vox_Get_BES_Addr_Flag[2] ; #endif +extern void Vox_Comm_Cfg_Clear(void); + extern void HandleTxCommand(VOX_BES_COMMAND_E TxCommand, e_Vox_Chan nVox_Chn_Select); +extern void Vox_Comm_Handle(void); extern void HandleVoxCommMsg(void); diff --git a/UsrInc/inc/config.h b/UsrInc/inc/config.h index cc58695..1c10d53 100644 --- a/UsrInc/inc/config.h +++ b/UsrInc/inc/config.h @@ -278,7 +278,7 @@ #define VFLOAT_SET CHG_VFLOAT_4_200V //配置浮充电压。 -#define VFLOAT_VOLTAGE_SET (4200UL) //配置浮充电压实际电压值,用于仓复充,单位:mv。 +#define VFLOAT_VOLTAGE_SET ( 4200UL ) //配置浮充电压实际电压值,用于仓复充,单位:mv。 #define PRECHG_TIM_SET PRECHG_TMR_EN_1H //配置涓流充超时时间。 @@ -304,21 +304,42 @@ #define VOX_CHG_FULL_5V_LEAST_CNT 40 //配置关盖条件下,VOX 耳机充满后,VOX输出5V持续时间(100ms * 40) -#define HALL_OPEN_VOX_5V_DEBOUNCE 5 //配置开盖动作后,VOX 输出5V持续时间(100ms * 5),单位:100ms。 - -#define HALL_OPEN_VOX_0V_DEBOUNCE 5 //配置开盖动作后,VOX 输出0V持续时间(100ms * 5),单位:100ms。 +#define HALL_EVENT_VOX_5V_DEBOUNCE 5 //配置开盖动作后,VOX 输出5V持续时间(100ms * 5),单位:100ms。 #define VOX_OCP_HICUUP_DEBOUNCE 5 //配置关盖条件下,VOX 打嗝时间(100ms * 5),单位:100ms。 #define HALL_CLOSE_VOX_5V_HOLD_CNT 3 //配置关盖动作后,VOX 输出5V持续时间(100ms * 3),单位:100ms。 +#define VOX_0V_WAKEUP_EAR 0 //VOX持续输出0V以唤醒耳机 + +#if VOX_0V_WAKEUP_EAR + +#define HALL_CLOSE_VOX_0V_DEBOUNCE 5 //配置关盖动作后,VOX 输出0V持续时间(100ms * 3),单位:100ms。 + +#define HALL_OPEN_VOX_0V_DEBOUNCE 5 //配置开盖动作后,VOX 输出0V持续时间(100ms * 5),单位:100ms。 + +#define Key_VOLTAGE_HOLD_CNT 5 //配置长按或超长按动作后,VOX 输出0V持续时间(15ms * 5),单位:15ms。 + +#endif + /* 双向通讯协议选择 */ -#define JIELI 0 //杰理耳机芯片 +#define JIELI 1 //杰理耳机芯片 #define ZHONGKE 0 //中科蓝讯耳机芯片 -#define XUANHENG 1 //玄恒耳机芯片 +#define XUANHENG 0 //玄恒耳机芯片 + +/* 主副耳机选择:双向通讯耳机配对时使用 */ + +#define MASTER_TYPE VOR_TYPE //主通道 + +#define MASTER_SIDE VOR_CHAN //主耳机 + +#define SLAVE_TYPE VOL_TYPE //副通道 + +#define SLAVE_SIDE VOL_CHAN //主耳机 + /* Vox跟随充参数设置。(100ms调用周期) */ diff --git a/UsrInc/inc/define.h b/UsrInc/inc/define.h index cb51823..fb05ab8 100644 --- a/UsrInc/inc/define.h +++ b/UsrInc/inc/define.h @@ -23,7 +23,7 @@ #include "config.h" /*Function Select,功能选择宏定义*/ -//#define SY8837 //合封芯片SY8838 +//#define SY8837 //非合封芯片SY8837 #define TIMER1_ENABLE 0 //Timer1 定时周期1ms。(120Bytes) @@ -51,6 +51,8 @@ #if VOX_ENABLE +#define VOX_COMM_ENABLE //双向通讯处理功能 + #define VOX_TX //959Bytes #define VOX_RX //739Bytes @@ -73,7 +75,7 @@ #define SLEEP_ENABLE 1 //110Bytes -#define TIM_WKUP //定时唤醒功能 +//#define TIM_WKUP //定时唤醒功能 #define ADC_ENABLE 1 //587Bytes @@ -87,14 +89,14 @@ #define BAT_VALUE 1 //171Bytes -//#define _DEBUG_ALL //打开打印功能 +#define _DEBUG_ALL //打开打印功能 #ifdef _DEBUG_ALL #define UART0_ENABLE //UART0功能,Debug Log。(133Bytes) -// #define _DEBUG_MAIN -// #define _DEBUG_KEY + #define _DEBUG_MAIN + #define _DEBUG_KEY // #define _DEBUG_VOX // #define _DEBUG_FOLLOW // #define _DEBUG_HALL @@ -145,9 +147,7 @@ typedef enum{false = 0, true = !false} bool; #define ON true #define OFF false -#ifdef XIAOMI #include "stdlib.h" -#endif #include "reg883x.h" diff --git a/UsrInc/timer/sys_tim.h b/UsrInc/timer/sys_tim.h index d97b60f..0146fbc 100644 --- a/UsrInc/timer/sys_tim.h +++ b/UsrInc/timer/sys_tim.h @@ -44,21 +44,25 @@ #define C_TIM1_Reload (65535 - T1MS) //1ms extern bit F_sys_tim1_tick; + extern void Sys_Tim1_Init(void ); #endif extern bit F_sys_tim_1ms; + extern bit F_sys_tim_5ms; + extern bit F_sys_tim_10ms; + extern bit F_sys_tim_250ms; + extern bit F_sys_tim_100ms; + extern bit F_sys_tim_1s; extern bit F_sys_tim1_tick; -extern bit F_sys_tim2_tick; - extern void Sys_Tim0_Init(void ); extern void Sys_Tim0_Handler(void ); diff --git a/UsrInc/uart/uart.h b/UsrInc/uart/uart.h index f45a6da..b77329a 100644 --- a/UsrInc/uart/uart.h +++ b/UsrInc/uart/uart.h @@ -52,7 +52,7 @@ extern char putchar (char ch); #endif -#define COM1_Data_Lenth 32 +#define COM1_Data_Lenth 38 #ifdef VOX_RX diff --git a/UsrInc/vox/vox_module.h b/UsrInc/vox/vox_module.h index b3f4ef2..b3febe9 100644 --- a/UsrInc/vox/vox_module.h +++ b/UsrInc/vox/vox_module.h @@ -36,10 +36,6 @@ extern bit Vox_Output_Short_Flag; -#define IVOX_THN 20 //耳机跟随充电流下降阈值 - -#define IVOX_THP 200 //耳机跟随充电流上升阈值 - #define VOL_TYPE 0x00 #define VOR_TYPE 0x01 @@ -72,7 +68,7 @@ extern bit Vox_Output_Short_Flag; extern bit Vox_Vout_Enable; //Vox功率输出标志位 -extern uint8_t EarPhone_Num; +extern idata uint8_t EarPhone_Num; #else @@ -290,27 +286,6 @@ SFRDATA |= (VOX_LIGHT_TO_HAVEY_128 << 2) | VOX_HAVEY_TO_LIGHT_8; #define Vox_Pull_Up_50k_Pos_Msk (0x1U << Vox_Pull_Up_50k_Pos) #define Vox_Pull_Up_50k Vox_Pull_Up_50k_Pos_Msk -#if XUANHENG - -#define BOXHEADER (0xAAU) //VOX通讯数据包头 - -#else - -#define BOXHEADER (0x55AAUL) //VOX通讯数据包头 - -#define EARPHONE_HEADER_HIGH (0x55U) -#define EARPHONE_HEADER_LOW (0xAAU) - -#define BOXIDCODE (0xFFU) //VOX通讯耳机->仓数据包头 - -#endif - -#define Vox_TX_Interval (2U) //Vox定时发送指令时间间隔 - -#define Vox_TX_Interval_2 (4U) - -#define TIM_SHUTDOWN_DEBOUNCE (600UL) //关机前debounce时间 - /******************************************************************************\ Variables definitions \******************************************************************************/ diff --git a/UsrSrc/adc/adc.c b/UsrSrc/adc/adc.c index e458e90..aa1cc85 100644 --- a/UsrSrc/adc/adc.c +++ b/UsrSrc/adc/adc.c @@ -34,39 +34,39 @@ \******************************************************************************/ -int8_t ADC_Offset_Error; //ADC Offset Error 校准值寄存器 +static int8_t ADC_Offset_Error; //ADC Offset Error 校准值,有符号数 -int8_t Bat_ADC_Offset_Error; +static int8_t Bat_ADC_Offset_Error;//电池 ADC Offset Error 校准值,有符号数 -uint8_t Vor_Isense_Gain_Error; +static uint8_t Vor_Isense_Gain_Error;//Vor 电流ADC GAIN Error 校准值,无符号数 -uint8_t Vol_Isense_Gain_Error; +static uint8_t Vol_Isense_Gain_Error;//Vol 电流ADC GAIN Error 校准值,无符号数 -int8_t Vor_Isense_Offset_Error; +static int8_t Vor_Isense_Offset_Error;//Vor 电流ADC Offset Error 校准值,无符号数 -int8_t Vol_Isense_Offset_Error; +static int8_t Vol_Isense_Offset_Error;//Vol 电流ADC Offset Error 校准值,无符号数 -uint8_t ADC_Chn_Num; +static uint8_t g_ADC_Chn;//ADC采样通道 -uint16_t g_Value_Adc; +static uint8_t Adc_Index;//ADC采样次数计数器 -uint16_t g_Value_Adc_Avg; +static bit ADC_Cal_Over_Flag;//ADC采样完成标志位 -int16_t g_Vntc_Adc; +static uint16_t g_Value_Adc;//ADC采样码值 -int16_t g_pmu_Adc_Ivol; +static uint16_t g_Value_Adc_Avg;//ADC多次采样值和 -int16_t g_pmu_Adc_Ivor; +uint8_t ADC_Chn_Num; //ADC采样通道计数器 -int16_t g_Vbat_Adc; +int16_t g_Vntc_Adc;//NTC通道ADC采样码值 -int16_t g_pmu_Adc_Vout; +int16_t g_pmu_Adc_Ivol;//Vol通道电流ADC采样码值 -uint8_t g_ADC_Chn; +int16_t g_pmu_Adc_Ivor;//Vor通道电流ADC采样码值 -uint8_t Adc_Index; +int16_t g_Vbat_Adc;//Bat通道ADC采样码值 -bit ADC_Cal_Over_Flag; +int16_t g_pmu_Adc_Vout;//Vout通道ADC采样码值 /******************************************************************************\ Functions definitions @@ -99,8 +99,6 @@ void Adc_Init(void) SFRADDR = IRQ_EN10; //Enable ADC Interrupt(INT6). SFRDATA |= 0x01; -#if 1 - ADC_Offset_Error = (int8_t)( ( ADC_OFFSET & 0x0F ) - 8 ); //获取ADC Offset Error校准值。 Bat_ADC_Offset_Error = (int8_t)( ADC_OFFSET >> 4 ); @@ -114,8 +112,6 @@ void Adc_Init(void) Vor_Isense_Gain_Error = IVOR_GAIN; -#endif - EX6 = 1; //ADC IRQ Enable } @@ -123,10 +119,10 @@ void Adc_Init(void) ******************************************************************************* * void PMU_ADC_Chn_Data(PMU_ADC_CHANNELS_E pmu_Adc_Chn) * -* Description : 设置相应通道的使能。在主循环中按通道设置各个通道的使能,连续模式,进中断8次后,取值,切通道。 +* Description : 设置相应通道的使能。在主循环中按通道设置各个通道的使能,连续模式,进中断取值8次叠加后,切通道。 在中断中获取对应的ADC值,减少主函数的阻塞,提升系统性能。 * -* Arguments : NONE +* Arguments : PMU_ADC_CHANNELS_E pmu_Adc_Chn * Returns : NONE @@ -159,9 +155,7 @@ void PMU_ADC_Chn_Data( PMU_ADC_CHANNELS_E pmu_Adc_Chn ) g_Value_Adc_Avg = ( (uint32_t)g_Value_Adc_Avg * 2500 ) >> 10 ; //ADC的LSB = 2500mV / 1024 = 2.44mV g_pmu_Adc_Ivol = (int32)( (int16)( g_Value_Adc_Avg - Vol_Isense_Offset_Error ) ) * 100 / (int16)( 500 + 2 * Vol_Isense_Gain_Error ) ; //IVOL电压位VOL的电流放大5倍送给ADC,例如:100mA电流,ADC采样电压为500mV。 -#ifdef _DEBUG_ADC - // printf("Vol:Adc_Avg:%d,Ivol:%d,Offset_Error:%d,Gain_Error:%d,temp:%d\r\n",(u16)g_Value_Adc_Avg,(u16)g_pmu_Adc_Ivol,(u16)Vol_Isense_Offset_Error,(u16)Vol_Isense_Gain_Error,(u16)( ( g_Value_Adc_Avg - Vol_Isense_Offset_Error ) )); -#endif + if( g_pmu_Adc_Ivol < 0 ) //只处理正电流 { g_pmu_Adc_Ivol = 0; @@ -171,12 +165,10 @@ void PMU_ADC_Chn_Data( PMU_ADC_CHANNELS_E pmu_Adc_Chn ) case ADC_IVOR: - g_Value_Adc_Avg = ( (uint32_t)g_Value_Adc_Avg * 2500 ) >> 10 ; //ADC的LSB = 2500mV / 1024 = 2.44mV + g_Value_Adc_Avg = ( (uint32_t)g_Value_Adc_Avg * 2500 ) >> 10 ; //ADC的LSB = 2500mV / 1024 = 2.44mV g_pmu_Adc_Ivor = (int32)( (int16)( g_Value_Adc_Avg - Vor_Isense_Offset_Error ) ) * 100 / (int16)( 500 + 2 * Vor_Isense_Gain_Error ) ; //IVOR电压位VOR的电流放大5倍送给ADC,例如:100mA电流,ADC采样电压为500mV。 -#ifdef _DEBUG_ADC - // printf("Vor:Adc_Avg:%d,Ivor:%d,Offset_Error:%d,Gain_Error:%d,temp:%d\r\n",(u16)g_Value_Adc_Avg,(u16)g_pmu_Adc_Ivor,(u16)Vor_Isense_Offset_Error,(u16)Vor_Isense_Gain_Error,(u16)( ( g_Value_Adc_Avg - Vor_Isense_Offset_Error ) )); -#endif + if( g_pmu_Adc_Ivor < 0 ) //只处理正电流 { g_pmu_Adc_Ivor = 0; @@ -186,7 +178,7 @@ void PMU_ADC_Chn_Data( PMU_ADC_CHANNELS_E pmu_Adc_Chn ) case ADC_BAT: - g_Value_Adc_Avg = ((uint32_t)( g_Value_Adc_Avg ) * 2500) >> 10 ; //ADC的LSB = 2500mV / 1024 = 2.44mV + g_Value_Adc_Avg = ((uint32_t)( g_Value_Adc_Avg ) * 2500) >> 10 ; //ADC的LSB = 2500mV / 1024 = 2.44mV g_Vbat_Adc = g_Value_Adc_Avg << 1; //VBAT的2分压。 @@ -201,9 +193,9 @@ void PMU_ADC_Chn_Data( PMU_ADC_CHANNELS_E pmu_Adc_Chn ) case ADC_VOUT: - g_Value_Adc_Avg = ( (int32_t)( g_Value_Adc_Avg - ADC_Offset_Error ) * 2500 ) >> 10 ; //ADC的LSB = 2500mV / 1024 = 2.44mV + g_Value_Adc_Avg = ( (int32_t)( g_Value_Adc_Avg - ADC_Offset_Error ) * 2500 ) >> 10 ; //ADC的LSB = 2500mV / 1024 = 2.44mV - g_pmu_Adc_Vout = g_Value_Adc_Avg << 1; //VOUT的2分压。 + g_pmu_Adc_Vout = g_Value_Adc_Avg << 1; //VOUT的2分压。 if( g_pmu_Adc_Vout <0 ) { @@ -217,16 +209,13 @@ void PMU_ADC_Chn_Data( PMU_ADC_CHANNELS_E pmu_Adc_Chn ) ADC_Cal_Over_Flag = FALSE; -#ifdef _DEBUG_ADC - printf("adc chn:%d,adc_value:%d,Ivol:%d,Vbat:%d,Vout:%d,Ivor:%d,Vntc:%d.\r\n",(uint16_t)ADC_Chn_Num,(uint16_t)g_Value_Adc_Avg,(uint16_t)g_pmu_Adc_Ivol,(uint16_t)g_Vbat_Adc,(uint16_t)g_pmu_Adc_Vout,(uint16_t)g_pmu_Adc_Ivor,(uint16_t)g_Vntc_Adc); -#endif } else { g_ADC_Chn = pmu_Adc_Chn; - ADC_CTL1 = ( pmu_Adc_Chn << 4 ) | 0x01; //ADC Start Enable,Set Channel N Enabel. + ADC_CTL1 = ( pmu_Adc_Chn << 4 ) | 0x01; //ADC Start Enable,Set Channel N Enabel. g_Value_Adc_Avg = 0; diff --git a/UsrSrc/comm/vox_comm.c b/UsrSrc/comm/vox_comm.c index 0067f89..30eb1f3 100644 --- a/UsrSrc/comm/vox_comm.c +++ b/UsrSrc/comm/vox_comm.c @@ -21,13 +21,14 @@ #include "vox_module.h" #include "vox_comm.h" #include "system.h" -#include "vox_comm.h" #include "bat.h" #include "hall.h" +#include "key.h" /******************************************************************************\ Macro definitions \******************************************************************************/ + #define MAX_PACKET_SIZE 0x20 /******************************************************************************\ @@ -72,28 +73,482 @@ bit gShip_Mode_Flag; // #elif JIELI -uint8_t Vox_Type; +idata uint8_t Vox_Type; uint8_t Net_Info[2][13]; idata uint8_t MAC_Addr[2][18]; -uint8_t Earphone_Vbat[2]; //对耳电量 +idata uint8_t Earphone_Vbat[2]; //对耳电量 #endif #ifdef VOX_RX -uint8_t Vox_Get_Vbat_Flag[2]; //耳机配对状态,VOL:低4bit;VOR:高4bit。0是无效,1是正在配对,2是配对成功,3不处理,保持当前状态。 -uint8_t Vox_Get_BES_Addr_Flag[2]; +idata uint8_t Vox_Get_Vbat_Flag[2]; //耳机配对状态,VOL:低4bit;VOR:高4bit。0是无效,1是正在配对,2是配对成功,3不处理,保持当前状态。 +idata uint8_t Vox_Get_BES_Addr_Flag[2]; //idata uint8_t BES_Addr[6] = {0}; //蓝牙耳机地址,Vox_Bes_Addr[0][6]:VOL;Vox_Bes_Addr[1][6]:VOR #endif +#ifdef VOX_COMM_ENABLE + +/* 双向通讯功能参数。 */ +Vox_Comm_Cfg gVox_Comm; + /******************************************************************************\ Functions definitions \******************************************************************************/ + +/* +******************************************************************************* +* void Vox_Comm_Cfg_Init(void) +* +* Description : Vox 双向通讯参数初始化函数。 (系统初始化调用周期) +* +* Arguments : NONE + +* Returns : NONE + +* Notes : NONE +* +******************************************************************************* +*/ +void Vox_Comm_Cfg_Clear(void) +{ +#ifdef VOX_COVER_ENABLE + + gVox_Comm.Cover_Close_Flag = FALSE; + gVox_Comm.Cover_Open_Flag = FALSE; + gVox_Comm.Vox_Chg_Full_Flag = FALSE; + +#else + + gVox_Comm.Vol_GetInto_Box_Flag = FALSE; + gVox_Comm.Vor_GetInto_Box_Flag = FALSE; + gVox_Comm.Vol_Chg_Full_Flag = FALSE; + gVox_Comm.Vor_Chg_Full_Flag = FALSE; + +#endif + + gVox_Comm.Key_L_2S_Flag = FALSE; + gVox_Comm.Key_LL_8s_Flag = FALSE; + + /*发码相关计时器*/ + gVox_Comm.Msg_TX_Debounce = 0; + gVox_Comm.Msg_TX_Debounce1 = 0; + + /*按键发码相关计时器*/ + gVox_Comm.Key_TWS_Pair_Tim = 0; + gVox_Comm.Key_TWS_Clear_Pair_Tim= 0; + gVox_Comm.Key_TWS_Pair_Cnt = 0; +} + + +/* +******************************************************************************* +* void Vox_Comm_Handle(void) +* +* Description : Vox 双向通讯处理函数。 (100ms调用周期) +* +* Arguments : NONE + +* Returns : NONE + +* Notes : NONE +* +******************************************************************************* +*/ +void Vox_Comm_Handle(void) +{ + if( gVox_Comm.Cover_Open_Flag ) /* 发码:开盖码。 */ + { + if( gVox_Comm.Msg_TX_Debounce <= Vox_COM_MSG_Tim ) + { + if( ( gVox_Comm.Msg_TX_Debounce % Vox_TX_Interval_2 ) == 0 ) //200ms发送一次 + { +#ifdef VOX_TX + +#if JIELI + HandleTxCommand(VHOUSE_CMD_OPEN_BOX,VOL_CHAN); //左耳发开盖指令,区分耳机通道。 +#elif ZHONGKE + HandleTxCommand(VHOUSE_CMD_OPEN_WINDOW,VOL_CHAN); //左耳发开盖指令,区分耳机通道。 +#elif XUANHENG + HandleTxCommand(CMD_HEARTBEAT,VOL_CHAN); +#endif + +#endif + } + else + if( ( gVox_Comm.Msg_TX_Debounce % Vox_TX_Interval ) == 0 ) //200ms发送一次 + { +#ifdef VOX_TX + +#if JIELI + HandleTxCommand(VHOUSE_CMD_OPEN_BOX,VOR_CHAN); //右耳发开盖指令,区分耳机通道。 +#elif ZHONGKE + HandleTxCommand(VHOUSE_CMD_OPEN_WINDOW,VOR_CHAN); //右耳发开盖指令,区分耳机通道。 +#elif XUANHENG + HandleTxCommand(CMD_HEARTBEAT,VOR_CHAN); +#endif + +#endif + } + + gVox_Comm.Msg_TX_Debounce++; + } + else + { + Vox_Comm_Cfg_Clear(); + } + } + else + if( gVox_Comm.Cover_Close_Flag ) /*发码:关盖码*/ + { + + if( gVox_Comm.Msg_TX_Debounce <= Vox_COM_MSG_Tim ) //发送关盖指令。 + { + if( (gVox_Comm.Msg_TX_Debounce % Vox_TX_Interval_2) == 0 ) //200ms发送一次 + { +#ifdef VOX_TX + +#if JIELI + HandleTxCommand(VHOUSE_CMD_CLOSE_BOX,VOL_CHAN); //左耳发开盖指令,区分耳机通道。 +#elif ZHONGKE + HandleTxCommand(VHOUSE_CMD_CLOSE_WINDOW,VOL_CHAN); //左耳发开盖指令,区分耳机通道。 +#elif XUANHENG + HandleTxCommand(CMD_HEARTBEAT,VOL_CHAN); +#endif + +#endif + } + else + if( (gVox_Comm.Msg_TX_Debounce % Vox_TX_Interval) == 0 ) //200ms发送一次 + { +#ifdef VOX_TX + +#if JIELI + HandleTxCommand(VHOUSE_CMD_CLOSE_BOX,VOR_CHAN); //右耳发开盖指令,区分耳机通道。 +#elif ZHONGKE + HandleTxCommand(VHOUSE_CMD_CLOSE_WINDOW,VOR_CHAN); //右耳发开盖指令,区分耳机通道。 +#elif XUANHENG + HandleTxCommand(CMD_HEARTBEAT,VOR_CHAN); +#endif + +#endif + } + + gVox_Comm.Msg_TX_Debounce++; + + return; + } + + /*发码:获取耳机电量码*/ + if( gVox_Comm.Msg_TX_Debounce1 <= Vox_COM_MSG_Tim ) //关盖后5s发送获取电量命令。 + { + if( (gVox_Comm.Msg_TX_Debounce1 % Vox_TX_Interval_2) == 0 ) //200ms发送一次 + { +#ifdef VOX_TX + +#if JIELI + HandleTxCommand(VHOUSE_CMD_CLOSE_WIN_GET_VBAT,VOL_CHAN); //左耳发开盖指令,区分耳机通道。 +#elif ZHONGKE + HandleTxCommand(VHOUSE_CMD_CLOSE_WIN_GET_VBAT,VOL_CHAN); //左耳发开盖指令,区分耳机通道。 +#elif XUANHENG + HandleTxCommand(CMD_TWS_GET_BTADDR,VOL_CHAN); +#endif + +#endif + } + else + if( (gVox_Comm.Msg_TX_Debounce1 % Vox_TX_Interval) == 0 ) //200ms发送一次 + { +#ifdef VOX_TX + +#if JIELI + HandleTxCommand(VHOUSE_CMD_CLOSE_WIN_GET_VBAT,VOR_CHAN); //右耳发开盖指令,区分耳机通道。 +#elif ZHONGKE + HandleTxCommand(VHOUSE_CMD_CLOSE_WIN_GET_VBAT,VOR_CHAN); //右耳发开盖指令,区分耳机通道。 +#elif XUANHENG + HandleTxCommand(CMD_TWS_GET_BTADDR,VOR_CHAN); +#endif + +#endif + } + + gVox_Comm.Msg_TX_Debounce1++; + + return; + } + + Vox_Comm_Cfg_Clear(); + } + else + if( gVox_Comm.Vox_Chg_Full_Flag ) /* 发码:Vox耳机充满发关机码。 */ + { + if( gVox_Comm.Msg_TX_Debounce <= Vox_COM_MSG_Tim ) + { + if( (gVox_Comm.Msg_TX_Debounce % Vox_TX_Interval_2) == 0 ) //200ms发送一次 + { +#ifdef VOX_TX + +#if XUANHENG + HandleTxCommand(CMD_SHUT_DOWN,VOL_CHAN); //左耳发关机指令,区分耳机通道。 +#else + HandleTxCommand(VHOUSE_CMD_PWROFF,VOL_CHAN); //左耳发关机指令,区分耳机通道。 +#endif + +#endif + } + else + if( (gVox_Comm.Msg_TX_Debounce % Vox_TX_Interval) == 0 ) //200ms发送一次 + { +#ifdef VOX_TX + +#if XUANHENG + HandleTxCommand(CMD_SHUT_DOWN,VOR_CHAN); //右耳发关机指令,区分耳机通道。 +#else + HandleTxCommand(VHOUSE_CMD_PWROFF,VOR_CHAN); //右耳发关机指令,区分耳机通道。 +#endif + +#endif + } + + gVox_Comm.Msg_TX_Debounce++; + } + else + { + Vox_Comm_Cfg_Clear(); + } + } + else + if( gVox_Comm.Key_L_2S_Flag ) /*按键2s发码:配对码*/ + { + if ( CoverStatus == OPEN ) + { + if( gVox_Comm.Key_TWS_Pair_Tim < 1 ) + { +#ifdef VOX_TX + +#if XUANHENG + HandleTxCommand(CMD_TWS_GET_BTADDR,MASTER_SIDE); +#else + HandleTxCommand(VHOUSE_CMD_PAIR,MASTER_SIDE); //右耳发配对指令,区分耳机通道。 +#endif + +#endif + Vox_Get_BES_Addr_Flag[SLAVE_TYPE] = 0x00; + + Vox_Get_BES_Addr_Flag[MASTER_TYPE] = 0x00; + +#ifdef _DEBUG_KEY + printf("Key Pair TX MASTER(line:%d).\r\n",(uint16_t)__LINE__); +#endif + } + else + { + if(gVox_Comm.Key_TWS_Pair_Cnt > KEY_TWS_PAIR_CNT) //耳机蓝牙地址置换超时10s,关闭蓝牙地址置换,开启VOX 5V。 + { + gVox_Comm.Key_TWS_Pair_Cnt = 0; +#if XUANHENG + + HandleTxCommand(CMD_PAIRING_IMD,MASTER_SIDE); + + HandleTxCommand(CMD_PAIRING_IMD,SLAVE_SIDE); + +#endif + Event_key = KEY_EVENT_Empty; + + gVox_Comm.Key_L_2S_Flag = FALSE; + + OpenCover_TX_Cmd_Flag = TRUE; +#if VOX_ENABLE + +#ifdef VOX_ADT_ENABLE + + Vol_State = VOX_GET_INTO_BOX; + + Vor_State = VOX_GET_INTO_BOX; +#else + VOX_EN_Type(VOX_VOUT_Mode); //VOX Enable 5V +#endif + +#endif + +#ifdef _DEBUG_KEY + printf("Key Pair TimeOut(line:%d).\r\n",(uint16_t)__LINE__); +#endif + + return; + } + else + { + if( Vox_Get_BES_Addr_Flag[MASTER_TYPE] == 0x01 ) /*收到右耳回复的CMD3指令。*/ + { +#ifdef VOX_TX + +#if JIELI + HandleTxCommand(VHOUSE_CMD_EXCH_TWS_BTADDR,SLAVE_SIDE); /*获取到右耳回复的CMD3指令,转发给左耳。*/ +#elif ZHONGKE + HandleTxCommand( VHOUSE_CMD_GET_TWS_BTADDR, SLAVE_SIDE ); /*获取到右耳回复的CMD3指令,转发给左耳。*/ +#elif XUANHENG + HandleTxCommand( CMD_TWS_SET_BTADDR, SLAVE_SIDE ); +#endif + +#endif + Vox_Get_BES_Addr_Flag[MASTER_TYPE] = 0x02; +#ifdef _DEBUG_KEY + printf("Key Pair Get SLAVE(line:%d).\r\n",(uint16_t)__LINE__); +#endif + + } + else + if( Vox_Get_BES_Addr_Flag[MASTER_TYPE] == 0x02 ) + { + if( Vox_Get_BES_Addr_Flag[SLAVE_TYPE] != 0x00 ) + { +#ifdef VOX_TX + +#if JIELI + HandleTxCommand(VHOUSE_CMD_EXCH_TWS_BTADDR,MASTER_SIDE); /*获取到右耳回复的CMD3指令,转发给左耳。*/ +#elif ZHONGKE + HandleTxCommand( VHOUSE_CMD_GET_TWS_BTADDR, MASTER_SIDE ); /*获取到右耳回复的CMD3指令,转发给左耳。*/ +#elif XUANHENG + HandleTxCommand( CMD_TWS_SET_BTADDR, MASTER_SIDE ); +#endif + +#endif + Vox_Get_BES_Addr_Flag[MASTER_TYPE] = 0x00; + Vox_Get_BES_Addr_Flag[SLAVE_TYPE] = 0x00; + + gVox_Comm.Key_TWS_Pair_Tim = 0; + + gVox_Comm.Key_TWS_Pair_Cnt = 0; + + Event_key = KEY_EVENT_Empty; + + gVox_Comm.Key_L_2S_Flag = FALSE; + + OpenCover_TX_Cmd_Flag = TRUE; +#if VOX_ENABLE + +#ifdef VOX_ADT_ENABLE + + Vol_State = VOX_NONE_IN_BOX; + + Vor_State = VOX_NONE_IN_BOX; +#else + VOX_EN_Type(VOX_ADT_Mode); //VOX Enable 5V +#endif + +#endif + +#ifdef _DEBUG_KEY + printf("Key Pair Get MASTER(line:%d).\r\n",(uint16_t)__LINE__); +#endif + return; + } + else + { +#ifdef VOX_TX + +#if XUANHENG + HandleTxCommand(CMD_TWS_GET_BTADDR,SLAVE_SIDE); +#else + HandleTxCommand(VHOUSE_CMD_PAIR,SLAVE_SIDE); //右耳发配对指令,区分耳机通道。 +#endif + +#endif +#ifdef _DEBUG_KEY + printf("Key Pair TX SLAVE(line:%d).\r\n",(uint16_t)__LINE__); +#endif + + } + } + } + } + + if(gVox_Comm.Key_TWS_Pair_Tim >= KEY_TWS_PAIR_TIMER) //3s重发一次。重发5次后超时 + { + gVox_Comm.Key_TWS_Pair_Cnt++; + + gVox_Comm.Key_TWS_Pair_Tim = 0; +#ifdef _DEBUG_KEY + printf("Key Pair Cnt:%d.(line:%d)\r\n",(uint16_t)gVox_Comm.Key_TWS_Pair_Cnt,(uint16_t)__LINE__); +#endif + } + else + { + gVox_Comm.Key_TWS_Pair_Tim++; + } + } + else + { + Vox_Comm_Cfg_Clear(); + } + } + else + if( gVox_Comm.Key_LL_8s_Flag ) /*按键8s发码:清配对码*/ + { + if( gVox_Comm.Key_TWS_Clear_Pair_Tim < Vox_COM_MSG_Tim ) //每隔200ms发送一次,持续时间3s。 + { + if( !( gVox_Comm.Key_TWS_Clear_Pair_Tim % Vox_TX_Interval_2 ) ) + { +#ifdef VOX_TX + +#if XUANHENG + HandleTxCommand(CMD_CLEAR_PAIR,VOR_CHAN); +#else + HandleTxCommand(VHOUSE_CMD_CLEAR_PAIR,VOR_CHAN); +#endif + +#endif + } + else + if( !( gVox_Comm.Key_TWS_Clear_Pair_Tim % Vox_TX_Interval ) ) + { +#ifdef VOX_TX + +#if XUANHENG + HandleTxCommand(CMD_CLEAR_PAIR,VOL_CHAN); +#else + HandleTxCommand(VHOUSE_CMD_CLEAR_PAIR,VOL_CHAN); +#endif + +#endif + } + + gVox_Comm.Key_TWS_Clear_Pair_Tim++; + } + else + { + Event_key = KEY_EVENT_Empty; + + OpenCover_TX_Cmd_Flag = TRUE; + + Vox_Comm_Cfg_Clear(); + +#if VOX_ENABLE + +#ifdef VOX_ADT_ENABLE + + Vol_State = VOX_NONE_IN_BOX; + + Vor_State = VOX_NONE_IN_BOX; +#else + VOX_EN_Type(VOX_ADT_Mode); //VOX Enable 5V +#endif + +#endif + } + } +} + +#endif + +#ifdef VOX_TX + #if XUANHENG /* @@ -113,7 +568,7 @@ uint8_t Vox_Get_BES_Addr_Flag[2]; ******************************************************************************* */ - uint16_t CalCheckCrc16(uint8_t *pucFrame, unsigned int usLen) +static uint16_t CalCheckCrc16(uint8_t *pucFrame, unsigned int usLen) { uint16_t wCRCin = 0xFFFF; uint16_t wCPoly = 0x1021; @@ -161,7 +616,7 @@ uint8_t Vox_Get_BES_Addr_Flag[2]; * ******************************************************************************* */ - uint8_t Crc8Maxim(u8 *buf, u8 length) + static uint8_t Crc8Maxim(u8 *buf, u8 length) { u8 i; u8 crc = 0; @@ -185,7 +640,6 @@ uint8_t Vox_Get_BES_Addr_Flag[2]; #endif -#ifdef VOX_TX /* ******************************************************************************* * void HandleTxCommand(VOX_BES_COMMAND_E RxCommand, e_Vox_Chan nVox_Chn_Select) @@ -211,6 +665,7 @@ void HandleTxCommand(VOX_BES_COMMAND_E TxCommand, e_Vox_Chan nVox_Chn_Select) uint8_t tx_pData[COM1_Data_Lenth] = 0; uint8_t i = 0; + uint8_t Exch_BtAddr = 0; #if JIELI @@ -248,16 +703,28 @@ void HandleTxCommand(VOX_BES_COMMAND_E TxCommand, e_Vox_Chan nVox_Chn_Select) case VHOUSE_CMD_EXCH_TWS_BTADDR: /*Data Length*/ tx_pData[3] = MAX_PACKET_SIZE; - - for(i=5;i<18;i++) + + if( nVox_Chn_Select == VOL_CHAN ) { - tx_pData[i] = MAC_Addr[nVox_Chn_Select][i]; + Exch_BtAddr = VOR_CHAN; + } + else + if( nVox_Chn_Select == VOR_CHAN ) + { + Exch_BtAddr = VOL_CHAN; + } + + for(i=5;i<23;i++) + { + tx_pData[i] = MAC_Addr[Exch_BtAddr][i-5]; } - for(i=23;i<13;i++) + for(i=23;i<36;i++) { - tx_pData[i] = Net_Info[nVox_Chn_Select][i]; + tx_pData[i] = Net_Info[Exch_BtAddr][i-23]; } + + break; @@ -664,7 +1131,8 @@ static void HandleRxMsg(VOX_BES_COMMAND_E RxCommand) MAC_Addr[Vox_Type][i] = RX1_Buffer[4+i]; } - for(i=0;i<8;i++) + for(i=0;i<13;i++) + { Net_Info[Vox_Type][i] = RX1_Buffer[22+i]; } @@ -924,7 +1392,7 @@ void HandleVoxCommMsg(void) Uart1_RX_Finish_Flag = FALSE; #ifdef _DEBUG_VOX - printf("RX1_Buffer[0]:0x%x,RX1_Buffer[1]:0x%x,RX1_Buffer[2]:0x%x,RX1_Buffer[3]:0x%x,RX1_Buffer[4]:0x%x,RX1_Buffer[5]:0x%x,RX1_Buffer[6]:0x%x,line:%d\r\n",(u16)RX1_Buffer[0],(u16)RX1_Buffer[1],(u16)RX1_Buffer[2],(u16)RX1_Buffer[3],(u16)RX1_Buffer[4],(u16)RX1_Buffer[5],(u16)RX1_Buffer[6],(u16)__LINE__); + // printf("RX0_Buffer[0]:0x%x,RX0_Buffer[1]:0x%x,RX0_Buffer[2]:0x%x,RX0_Buffer[3]:0x%x,RX0_Buffer[4]:0x%x,RX0_Buffer[5]:0x%x,RX0_Buffer[6]:0x%x,RX0_Buffer[7]:0x%x,RX0_Buffer[8]:0x%x,RX0_Buffer[9]:0x%x,RX0_Buffer[10]:0x%x,RX0_Buffer[11]:0x%x,line:%d\r\n",(u16)RX0_Buffer[0],(u16)RX0_Buffer[1],(u16)RX0_Buffer[2],(u16)RX0_Buffer[3],(u16)RX0_Buffer[4],(u16)RX0_Buffer[5],(u16)RX0_Buffer[6],(u16)RX0_Buffer[7],(u16)RX0_Buffer[8],(u16)RX0_Buffer[9],(u16)RX0_Buffer[10],(u16)RX0_Buffer[11],(u16)__LINE__); #endif #if JIELI diff --git a/UsrSrc/display/display_ui.c b/UsrSrc/display/display_ui.c index 0be691e..758850f 100644 --- a/UsrSrc/display/display_ui.c +++ b/UsrSrc/display/display_ui.c @@ -53,7 +53,7 @@ uint8_t LED_On_Timer; //led bit LED_On_Flag; //led显示复位标志位,1:灯效复位。 #ifdef PWM_ENABLE -uint8_t Breathing_Light_Cnt; //呼吸灯流水计数器 +idata uint8_t Breathing_Light_Cnt; //呼吸灯流水计数器 #endif /******************************************************************************\ diff --git a/UsrSrc/hall/hall.c b/UsrSrc/hall/hall.c index e4437d0..7d12bc1 100644 --- a/UsrSrc/hall/hall.c +++ b/UsrSrc/hall/hall.c @@ -26,6 +26,8 @@ #include "sleep.h" #include "system.h" #include "display_ui.h" +#include "vox_comm.h" + /******************************************************************************\ Macro definitions @@ -41,7 +43,7 @@ bit CoverEvent_Flg; //Hall #if HALL_ENABLE -uint8_t Hall_Sta_bk; +uint8_t Hall_Sta_bk=0xFF; /******************************************************************************\ Functions definitions @@ -109,7 +111,9 @@ uint8_t Hall_Sta_bk; #endif } - + + Vox_Comm_Cfg_Clear(); + CoverEvent_Flg = TRUE; Boost_Open_Flag = FALSE; diff --git a/UsrSrc/key/key.c b/UsrSrc/key/key.c index f020872..3a619bf 100644 --- a/UsrSrc/key/key.c +++ b/UsrSrc/key/key.c @@ -42,10 +42,6 @@ #define KEY_PRESS_8S_CNT 535 //按键按下计数8s(调用周期15ms) -#define KEY_TWS_PAIR_TIMER 20 - -#define KEY_TWS_PAIR_CNT 5 - #define KEY_TWS_PAIR_CLEAR_CNT 180 #define KEY_LL_TX_Interval 8 //Vox定时发送指令时间间隔 @@ -63,17 +59,20 @@ bit Key_Press_l_irq; bit Key_Press_ll_irq; KEY_EVENT_E Event_key; - +#if 0 uint8_t Key_TWS_Pair_Tim; uint8_t Key_TWS_Clear_Pair_Tim; uint8_t Key_TWS_Pair_Cnt; - +#endif uint16_t Key_Press_Debounce; uint8_t Key_Lift_Debounce; +uint8_t Key_Voltage_Hold_Timer; + + /******************************************************************************\ Functions definitions \******************************************************************************/ @@ -147,7 +146,9 @@ uint8_t Key_Lift_Debounce; Key_Lift_Flag = TRUE; Key_Lift_Debounce = 0; - + + Key_Voltage_Hold_Timer = 0; + if( (Key_Press_Debounce <= KEY_PRESS_500MS_CNT) ) //松开按键,按下时间小于500ms,则识别为短按,显示电量 { Key_Press_short_irq_led = TRUE; @@ -163,6 +164,8 @@ uint8_t Key_Lift_Debounce; if( nKey_Press_2s_Flag ) { Key_Press_l_irq = TRUE; + + Key_Press_ll_irq = FALSE; } } @@ -175,7 +178,8 @@ uint8_t Key_Lift_Debounce; Key_Press_Debounce = 0; } - + + /* 用于按键发码,VOX先升压一段时间用于唤醒耳机,后发码。 */ if( Key_Lift_Flag && gBoost_Prepared_Flag ) { if( Key_Press_l_irq ) @@ -213,18 +217,32 @@ uint8_t Key_Lift_Debounce; return; } - + + #if VOX_0V_WAKEUP_EAR /*长按后,5V持续N00ms后0V持续N00ms,保证耳机能被唤醒;之后发长按码。*/ + if( Key_Voltage_Hold_Timer < Key_VOLTAGE_HOLD_CNT ) //转0V N00ms + { + VOX_EN_Type(VOX_PD1K_Mode); + + Key_Voltage_Hold_Timer++; + + return; + } + #endif + Key_Press_l_irq = FALSE; /*todo*/ Event_key = KEY_EVENT_L_2S; - - Key_TWS_Pair_Tim = 0; + Vox_Comm_Cfg_Clear(); + + gVox_Comm.Key_L_2S_Flag = TRUE; //按键2s发码。 + +#ifdef VOX_TX /*耳机配对*/ Vox_Get_BES_Addr_Flag[VOL_TYPE] = 0x00; Vox_Get_BES_Addr_Flag[VOR_TYPE] = 0x00; - +#endif #ifdef _DEBUG_KEY printf("long 2s press\r\n"); #endif @@ -285,231 +303,34 @@ uint8_t Key_Lift_Debounce; return; } + + #if VOX_0V_WAKEUP_EAR /*长按后,5V持续N00ms后0V持续N00ms,保证耳机能被唤醒;之后发长按码。*/ + if( Key_Voltage_Hold_Timer < Key_VOLTAGE_HOLD_CNT ) //转0V N00ms + { + VOX_EN_Type(VOX_PD1K_Mode); + + Key_Voltage_Hold_Timer++; + + return; + } + #endif Boost_Open_Flag = FALSE; - Key_Press_ll_irq = FALSE; + Vox_Comm_Cfg_Clear(); - Key_TWS_Clear_Pair_Tim = 0; + gVox_Comm.Key_LL_8s_Flag = TRUE; + + Key_Press_ll_irq = FALSE; + /*todo*/ Event_key = KEY_EVENT_LL_8S; #ifdef _DEBUG_KEY printf("supper long 8s press.(line:%d)\r\n",(u16)__LINE__); #endif - } - -#if 1 - if ( CoverStatus == OPEN ) - { - if( Event_key == KEY_EVENT_L_2S ) //长按2s,充电仓发送配对指令。 - { - if( Key_TWS_Pair_Tim < 1 ) - { -#ifdef VOX_TX - -#if XUANHENG - HandleTxCommand(CMD_TWS_GET_BTADDR,VOL_CHAN); -#else - HandleTxCommand(VHOUSE_CMD_PAIR,VOL_CHAN); //右耳发配对指令,区分耳机通道。 -#endif - -#endif - Vox_Get_BES_Addr_Flag[VOL_TYPE] = 0x00; - - Vox_Get_BES_Addr_Flag[VOR_TYPE] = 0x00; -#ifdef _DEBUG_KEY - printf("Key Pair TX VOR(line:%d).\r\n",(uint16_t)__LINE__); -#endif - } - else - { - if(Key_TWS_Pair_Cnt > KEY_TWS_PAIR_CNT) //耳机蓝牙地址置换超时10s,关闭蓝牙地址置换,开启VOX 5V。 - { - Key_TWS_Pair_Cnt = 0; -#if XUANHENG - - HandleTxCommand(CMD_PAIRING_IMD,VOR_CHAN); - - HandleTxCommand(CMD_PAIRING_IMD,VOL_CHAN); - -#endif - Event_key = KEY_EVENT_Empty; - - OpenCover_TX_Cmd_Flag = TRUE; -#if VOX_ENABLE - -#ifdef VOX_ADT_ENABLE - - Vol_State = VOX_GET_INTO_BOX; - - Vor_State = VOX_GET_INTO_BOX; -#else - VOX_EN_Type(VOX_VOUT_Mode); //VOX Enable 5V -#endif - -#endif -#ifdef _DEBUG_KEY - printf("Key Pair TimeOut(line:%d).\r\n",(uint16_t)__LINE__); -#endif - - return; - } - else - { - if( Vox_Get_BES_Addr_Flag[VOL_TYPE] == 0x01 ) /*收到右耳回复的CMD3指令。*/ - { -#ifdef VOX_TX - -#if JIELI - HandleTxCommand(VHOUSE_CMD_EXCH_TWS_BTADDR,VOR_CHAN); /*获取到右耳回复的CMD3指令,转发给左耳。*/ -#elif ZHONGKE - HandleTxCommand( VHOUSE_CMD_GET_TWS_BTADDR, VOR_CHAN ); /*获取到右耳回复的CMD3指令,转发给左耳。*/ -#elif XUANHENG - HandleTxCommand( CMD_TWS_SET_BTADDR, VOR_CHAN ); -#endif - -#endif - Vox_Get_BES_Addr_Flag[VOL_TYPE] = 0x02; -#ifdef _DEBUG_KEY - printf("Key Pair Get VOR(line:%d).\r\n",(uint16_t)__LINE__); -#endif - - } - else - if( Vox_Get_BES_Addr_Flag[VOL_TYPE] == 0x02 ) - { - if( Vox_Get_BES_Addr_Flag[VOR_TYPE] != 0x00 ) - { -#ifdef VOX_TX - -#if JIELI - HandleTxCommand(VHOUSE_CMD_EXCH_TWS_BTADDR,VOL_CHAN); /*获取到右耳回复的CMD3指令,转发给左耳。*/ -#elif ZHONGKE - HandleTxCommand( VHOUSE_CMD_GET_TWS_BTADDR, VOL_CHAN ); /*获取到右耳回复的CMD3指令,转发给左耳。*/ -#elif XUANHENG - HandleTxCommand( CMD_TWS_SET_BTADDR, VOL_CHAN ); -#endif - -#endif - Vox_Get_BES_Addr_Flag[VOL_TYPE] = 0x00; - Vox_Get_BES_Addr_Flag[VOR_TYPE] = 0x00; - - Key_TWS_Pair_Tim = 0; - - Key_TWS_Pair_Cnt = 0; - - Event_key = KEY_EVENT_Empty; - - OpenCover_TX_Cmd_Flag = TRUE; -#if VOX_ENABLE - -#ifdef VOX_ADT_ENABLE - - Vol_State = VOX_NONE_IN_BOX; - - Vor_State = VOX_NONE_IN_BOX; -#else - VOX_EN_Type(VOX_ADT_Mode); //VOX Enable 5V -#endif - -#endif -#ifdef _DEBUG_KEY - printf("Key Pair Get VOL(line:%d).\r\n",(uint16_t)__LINE__); -#endif - return; - } - else - { -#ifdef VOX_TX - -#if XUANHENG - HandleTxCommand(CMD_TWS_GET_BTADDR,VOR_CHAN); -#else - HandleTxCommand(VHOUSE_CMD_PAIR,VOR_CHAN); //右耳发配对指令,区分耳机通道。 -#endif - -#endif -#ifdef _DEBUG_KEY - printf("Key Pair TX VOL(line:%d).\r\n",(uint16_t)__LINE__); -#endif - - } - } - } - } - - if(Key_TWS_Pair_Tim > KEY_TWS_PAIR_TIMER) //2s重发一次。重发5次后超时 - { - Key_TWS_Pair_Cnt++; - Key_TWS_Pair_Tim = 0; -#ifdef _DEBUG_KEY - printf("Key Pair Cnt:%d.(line:%d)\r\n",(uint16_t)Key_TWS_Pair_Cnt,(uint16_t)__LINE__); -#endif - } - else - { - Key_TWS_Pair_Tim++; - } - } - else - if( Event_key == KEY_EVENT_LL_8S ) - { - if( Key_TWS_Clear_Pair_Tim < KEY_TWS_PAIR_CLEAR_CNT ) //每隔200ms发送一次,持续时间3s。 - { - if( !( Key_TWS_Clear_Pair_Tim % KEY_LL_TX_Interval_2 ) ) - { -#ifdef VOX_TX - -#if XUANHENG - HandleTxCommand(CMD_CLEAR_PAIR,VOR_CHAN); -#else - HandleTxCommand(VHOUSE_CMD_CLEAR_PAIR,VOR_CHAN); -#endif - -#endif - } - else - if( !( Key_TWS_Clear_Pair_Tim % KEY_LL_TX_Interval ) ) - { -#ifdef VOX_TX - -#if XUANHENG - HandleTxCommand(CMD_CLEAR_PAIR,VOL_CHAN); -#else - HandleTxCommand(VHOUSE_CMD_CLEAR_PAIR,VOL_CHAN); -#endif - -#endif - } - - Key_TWS_Clear_Pair_Tim++; - } - else - { - Event_key = KEY_EVENT_Empty; - - OpenCover_TX_Cmd_Flag = TRUE; - - Key_TWS_Clear_Pair_Tim = 0; - -#if VOX_ENABLE - -#ifdef VOX_ADT_ENABLE - - Vol_State = VOX_NONE_IN_BOX; - - Vor_State = VOX_NONE_IN_BOX; -#else - VOX_EN_Type(VOX_ADT_Mode); //VOX Enable 5V -#endif - -#endif - } - } - } -#endif - } + } +} #endif diff --git a/UsrSrc/pwm/pwm.c b/UsrSrc/pwm/pwm.c index 76ec82b..2213ef2 100644 --- a/UsrSrc/pwm/pwm.c +++ b/UsrSrc/pwm/pwm.c @@ -15,7 +15,7 @@ * History: * Revision Date Author Desc * 1.0.0 2024/11/01 Alex build this file - * Description:PWM功能中,4个通道公用一个源;也就是分频数(PWM_PRE0)、计数初值(PWM0_REL)只有一个,通过更改PWMx_CMP设置不同通道PWM输出的占空比。 + * Description:PWM功能中,4个通道共用一个源;也就是分频数(PWM_PRE0)、计数初值(PWM0_REL)只有一个,通过更改PWMx_CMP设置不同通道PWM输出的占空比。 ****************************************************************************** */ #include "pwm.h" diff --git a/UsrSrc/timer/sys_tim.c b/UsrSrc/timer/sys_tim.c index e30d6a2..ea2e1b7 100644 --- a/UsrSrc/timer/sys_tim.c +++ b/UsrSrc/timer/sys_tim.c @@ -33,15 +33,17 @@ Variables definitions \******************************************************************************/ -uint8_t cnt_sys_tim_5ms; +static uint8_t cnt_sys_tim_5ms; -uint8_t cnt_sys_tim_10ms; +static uint8_t cnt_sys_tim_10ms; -uint8_t cnt_sys_tim_250ms; +static uint8_t cnt_sys_tim_250ms; -uint16_t cnt_sys_tim_100ms; +static uint16_t cnt_sys_tim_100ms; -uint8_t cnt_sys_tim_1s; +static uint8_t cnt_sys_tim_1s; + +static uint8_t F_sys_tim_tick; bit F_sys_tim_1ms; @@ -55,11 +57,11 @@ bit F_sys_tim_100ms; bit F_sys_tim_1s; -uint8_t F_sys_tim_tick; +#if TIMER1_ENABLE bit F_sys_tim1_tick; -bit F_sys_tim2_tick; +#endif /******************************************************************************\ Functions definitions @@ -83,6 +85,7 @@ void Sys_Tim0_Handler(void) if(F_sys_tim_tick == 0) return; F_sys_tim_tick = 0; + //system tick F_sys_tim_1ms = TRUE; @@ -91,6 +94,7 @@ void Sys_Tim0_Handler(void) if(cnt_sys_tim_5ms >= 5) { cnt_sys_tim_5ms = 0; + F_sys_tim_5ms = TRUE; } @@ -98,7 +102,8 @@ void Sys_Tim0_Handler(void) cnt_sys_tim_10ms++; if(cnt_sys_tim_10ms >= 10) { - cnt_sys_tim_10ms = 0; + cnt_sys_tim_10ms = 0; + F_sys_tim_10ms = TRUE; } @@ -107,6 +112,7 @@ void Sys_Tim0_Handler(void) if(cnt_sys_tim_100ms >= 100) { cnt_sys_tim_100ms = 0; + F_sys_tim_100ms = TRUE; } @@ -115,6 +121,7 @@ void Sys_Tim0_Handler(void) if(cnt_sys_tim_250ms>=250) { cnt_sys_tim_250ms = 0; + F_sys_tim_250ms = TRUE; //-----------------250ms------------------------- @@ -122,6 +129,7 @@ void Sys_Tim0_Handler(void) if(cnt_sys_tim_1s >= 4) { cnt_sys_tim_1s = 0; + F_sys_tim_1s = TRUE; } } diff --git a/UsrSrc/uart/uart.c b/UsrSrc/uart/uart.c index f51e3c9..a465f85 100644 --- a/UsrSrc/uart/uart.c +++ b/UsrSrc/uart/uart.c @@ -21,6 +21,7 @@ #include "system.h" #include "vox_module.h" #include "sleep.h" +#include "vox_comm.h" /******************************************************************************\ Macro definitions diff --git a/UsrSrc/userapp/userapp.c b/UsrSrc/userapp/userapp.c index d56b0b0..b01da0f 100644 --- a/UsrSrc/userapp/userapp.c +++ b/UsrSrc/userapp/userapp.c @@ -133,6 +133,11 @@ void System_Drivers_Machine(void) #if VOX_ENABLE +#ifdef VOX_COMM_ENABLE + /*双向通讯功能处理函数*/ + Vox_Comm_Handle(); +#endif + #ifdef VOX_ADT_ENABLE /*Vox 过流保护,两只耳机都每隔200ms打嗝一次*/ diff --git a/UsrSrc/vox/vox_module.c b/UsrSrc/vox/vox_module.c index a5c8fc4..c36d6a6 100644 --- a/UsrSrc/vox/vox_module.c +++ b/UsrSrc/vox/vox_module.c @@ -51,13 +51,6 @@ bit Vox_Output_Short_Flag; /******************************************************************************\ Macro definitions \******************************************************************************/ -/*100ms调用周期*/ -#define KEY_TWS_PAIR_TIMER 2 - -#define KEY_TWS_PAIR_CNT 6 - -#define Vox_COM_MSG_Tim 20 - #if VOX_FOLLOW_CHG #define VOX_FOLLOW_CHG_NOWCURCHK_CNT 5 @@ -70,9 +63,9 @@ bit Vox_Output_Short_Flag; \******************************************************************************/ #if VOX_FOLLOW_CHG -uint8_t Vox_Follow_Init_Deb; +idata uint8_t Vox_Follow_Init_Deb; -uint16_t Vox_Follow_Chg_Debounce; +idata uint16_t Vox_Follow_Chg_Debounce; g_Vox_Fllow_Chg_Cfg Vox_Fllow_Chg; @@ -80,7 +73,7 @@ e_Vox_Follow_Chg_Sta Follow_Chg_Sta; #endif -uint8_t EarPhone_Num; +idata uint8_t EarPhone_Num; bit Vox_Ocp_Flag; @@ -174,7 +167,6 @@ bit OpenCover_TX_Cmd_Flag; default: break; } - } /* @@ -261,7 +253,6 @@ bit OpenCover_TX_Cmd_Flag; default: break; } - } #else @@ -377,7 +368,6 @@ bit Vol_GetOut_Box_Flag; //Vol * ******************************************************************************* */ - void Vol_Det_Machine(void) { static uint8_t nVol_Loadon_Det_Debounce; //loadon标志检测延时计数 @@ -920,7 +910,9 @@ void Vox_Det_Machine(void) { static bit Get_CHIP_STA1_Flag0; - static bit Get_CHIP_STA1_Flag1; + static bit nVox_Comm_Flag; + + static bit nVox_Comm_Over_Flag; static bit Cover_Close_Flag; @@ -977,7 +969,9 @@ void Vox_Det_Machine(void) Get_CHIP_STA1_Flag0 = FALSE; - Get_CHIP_STA1_Flag1 = FALSE; + nVox_Comm_Flag = FALSE; + + nVox_Comm_Over_Flag = FALSE; CoverEvent_Flg1 = TRUE; @@ -1037,8 +1031,9 @@ void Vox_Det_Machine(void) CoverEvent_Flg = FALSE; } + /* 开关盖后,VOX先升压5.2V 一段时间,唤醒耳机,后转入ADT,获取盒内耳机数量。 */ - if( Vox_Voltage_Hold_Timer < HALL_OPEN_VOX_5V_DEBOUNCE ) //开盖后5V N00ms。 + if( Vox_Voltage_Hold_Timer < HALL_EVENT_VOX_5V_DEBOUNCE ) //开盖后5V N00ms。 { Vox_Voltage_Hold_Timer++; @@ -1079,13 +1074,12 @@ void Vox_Det_Machine(void) printf( "Open/Close Box,Earphones In Box(Num:%d)(VoxSta:0x%x).\r\n",(u16)EarPhone_Num, (u16)(CHIP_STA1) ); #endif } - } /* 发送开盖指令*/ if( Cover_Open_Flag ) /*开盖后,5V持续N00ms后0V持续N00ms,保证耳机能被唤醒;之后发开盖码。*/ { - #if 1 + #if VOX_0V_WAKEUP_EAR if( Vox_TX_Timer < HALL_OPEN_VOX_0V_DEBOUNCE ) //转0V N00ms { VOX_EN_Type(VOX_PD1K_Mode); @@ -1094,68 +1088,63 @@ void Vox_Det_Machine(void) } else #endif - { - if( !Get_CHIP_STA1_Flag1 ) - { - if( Vox_Output_Debounce <= Vox_COM_MSG_Tim ) - { - if( ( Vox_Output_Debounce % Vox_TX_Interval_2 ) == 0 ) //200ms发送一次 - { -#ifdef VOX_TX -#if JIELI - HandleTxCommand(VHOUSE_CMD_OPEN_BOX,VOL_CHAN); //左耳发开盖指令,区分耳机通道。 -#elif ZHONGKE - HandleTxCommand(VHOUSE_CMD_GET_VBAT,VOL_CHAN); //左耳发开盖指令,区分耳机通道。 -#elif XUANHENG - HandleTxCommand(CMD_HEARTBEAT,VOL_CHAN); -#endif -#endif - } - else - if( ( Vox_Output_Debounce % Vox_TX_Interval ) == 0 ) //200ms发送一次 - { -#ifdef VOX_TX -#if JIELI - HandleTxCommand(VHOUSE_CMD_OPEN_BOX,VOR_CHAN); //右耳发开盖指令,区分耳机通道。 -#elif ZHONGKE - HandleTxCommand(VHOUSE_CMD_GET_VBAT,VOR_CHAN); //右耳发开盖指令,区分耳机通道。 -#elif XUANHENG - HandleTxCommand(CMD_HEARTBEAT,VOR_CHAN); -#endif -#endif + { +#ifdef VOX_COMM_ENABLE - } - - Vox_Output_Debounce++; + /* 双向通讯,开盖发码。 */ + if( !nVox_Comm_Flag ) + { + Vox_Comm_Cfg_Clear(); + + gVox_Comm.Cover_Open_Flag = TRUE; //置开盖发码标志位 + + nVox_Comm_Flag = TRUE; +#ifdef _DEBUG_VOX + printf("TX Comm Cover Open.(line:%d)\r\n ", (u16)__LINE__); +#endif + return; + } + else +#endif + { +#ifdef VOX_COMM_ENABLE + if( !gVox_Comm.Cover_Open_Flag ) //开盖发码完成 +#endif + { + if ( !nVox_Comm_Over_Flag ) + { + nVox_Comm_Over_Flag = TRUE; + + VOX_EN_Type(VOX_ADT_Mode); + + OpenCover_TX_Cmd_Flag = TRUE; + + Vox_Vout_Enable = OFF; +#ifdef _DEBUG_VOX + printf("Open Box CMD TX Over.\r\n"); +#endif + } } else { - VOX_EN_Type(VOX_ADT_Mode); - - Vox_Output_Debounce = 0; - - Get_CHIP_STA1_Flag1 = TRUE; - - OpenCover_TX_Cmd_Flag = TRUE; - - Vox_Vout_Enable = OFF; -#ifdef _DEBUG_VOX - printf("Open Box CMD TX Over.\r\n"); -#endif + return; } } - else - { - if( Event_key == KEY_EVENT_Empty ) - { - if( OpenCover_TX_Cmd_Flag ) - { - OpenCover_TX_Cmd_Flag = FALSE; - - CHIP_STA1_BK = CHIP_STA1 & ( VOR_LoadOn | VOL_LoadOn ); - } - else + if( Event_key == KEY_EVENT_Empty ) + { + if( OpenCover_TX_Cmd_Flag ) + { + OpenCover_TX_Cmd_Flag = FALSE; + + nVox_Comm_Over_Flag = TRUE; + + CHIP_STA1_BK = CHIP_STA1 & ( VOR_LoadOn | VOL_LoadOn ); + + } + else + { + if( nVox_Comm_Over_Flag ) { /*耳机出入盒判断*/ if( CHIP_STA1_BK != ( CHIP_STA1 & ( VOR_LoadOn | VOL_LoadOn ) ) ) //查询耳机loadon状态,loadon状态改变,则说明有耳机出入盒。 @@ -1236,85 +1225,45 @@ void Vox_Det_Machine(void) Wkup_Earphone_Flag = FALSE; } else - { + { +#ifdef VOX_COMM_ENABLE if( !Cover_Close_Force_Vout_Flag ) { - - /*发码*/ - if( Vox_TX_Timer <= Vox_COM_MSG_Tim ) //发送关盖指令。 - { - if( (Vox_TX_Timer % Vox_TX_Interval_2) == 0 ) //200ms发送一次 - { -#ifdef VOX_TX - -#if JIELI - HandleTxCommand(VHOUSE_CMD_CLOSE_BOX,VOL_CHAN); //左耳发开盖指令,区分耳机通道。 -#elif ZHONGKE - HandleTxCommand(VHOUSE_CMD_CLOSE_WINDOW,VOL_CHAN); //左耳发开盖指令,区分耳机通道。 -#elif XUANHENG - HandleTxCommand(CMD_HEARTBEAT,VOL_CHAN); -#endif - -#endif - } - else - if( (Vox_TX_Timer % Vox_TX_Interval) == 0 ) //200ms发送一次 - { -#ifdef VOX_TX - -#if JIELI - HandleTxCommand(VHOUSE_CMD_CLOSE_BOX,VOR_CHAN); //右耳发开盖指令,区分耳机通道。 -#elif ZHONGKE - HandleTxCommand(VHOUSE_CMD_CLOSE_WINDOW,VOR_CHAN); //右耳发开盖指令,区分耳机通道。 -#elif XUANHENG - HandleTxCommand(CMD_HEARTBEAT,VOR_CHAN); -#endif - -#endif - } - + #if VOX_0V_WAKEUP_EAR /*关盖后,5V持续N00ms后0V持续N00ms,保证耳机能被唤醒;之后发关盖码。*/ + if( Vox_TX_Timer < HALL_CLOSE_VOX_0V_DEBOUNCE ) //转0V N00ms + { + VOX_EN_Type(VOX_PD1K_Mode); + Vox_TX_Timer++; - - return; } - - if( Vox_Output_Debounce <= Vox_COM_MSG_Tim ) //关盖后5s发送获取电量命令。 + else + #endif { - if( (Vox_Output_Debounce % Vox_TX_Interval_2) == 0 ) //200ms发送一次 + /* 双向通讯,关盖发码。 */ + if( !nVox_Comm_Flag ) { -#ifdef VOX_TX + Vox_Comm_Cfg_Clear(); -#if JIELI - HandleTxCommand(VHOUSE_CMD_CLOSE_WIN_GET_VBAT,VOL_CHAN); //左耳发开盖指令,区分耳机通道。 -#elif ZHONGKE - HandleTxCommand(VHOUSE_CMD_GET_TWS_BTADDR,VOL_CHAN); //左耳发开盖指令,区分耳机通道。 -#elif XUANHENG - HandleTxCommand(CMD_TWS_GET_BTADDR,VOL_CHAN); + gVox_Comm.Cover_Close_Flag = TRUE; //置关盖发码标志位 + + nVox_Comm_Flag = TRUE; + +#ifdef _DEBUG_VOX + printf("TX Comm Cover Close.(line:%d)\r\n ", (u16)__LINE__); #endif - -#endif - } - else - if( (Vox_Output_Debounce % Vox_TX_Interval) == 0 ) //200ms发送一次 - { -#ifdef VOX_TX - -#if JIELI - HandleTxCommand(VHOUSE_CMD_CLOSE_WIN_GET_VBAT,VOR_CHAN); //右耳发开盖指令,区分耳机通道。 -#elif ZHONGKE - HandleTxCommand(VHOUSE_CMD_GET_TWS_BTADDR,VOR_CHAN); //右耳发开盖指令,区分耳机通道。 -#elif XUANHENG - HandleTxCommand(CMD_TWS_GET_BTADDR,VOR_CHAN); -#endif - -#endif + return; + + } + else + { + if( gVox_Comm.Cover_Close_Flag ) //关盖发码中 + { + return; + } } - - Vox_Output_Debounce++; - - return; } } +#endif } /*Vox 过流保护,两只耳机都每隔500ms打嗝一次*/ @@ -1356,6 +1305,8 @@ void Vox_Det_Machine(void) printf("VOX Vout 5V(STA1:0x%x,line:%d).\r\n",(uint16_t)CHIP_STA1, (uint16_t)__LINE__); #endif Cover_Close_Flag1 = FALSE; + + Vox_Voltage_Hold_Timer = 0; } else { @@ -1394,51 +1345,40 @@ void Vox_Det_Machine(void) } } else - { - if( Vox_Output_Cnt <= Vox_COM_MSG_Tim ) - { - if( (Vox_Output_Cnt % Vox_TX_Interval_2) == 0 ) //200ms发送一次 - { -#ifdef VOX_TX - -#if XUANHENG - HandleTxCommand(CMD_SHUT_DOWN,VOL_CHAN); //左耳发关机指令,区分耳机通道。 -#else - HandleTxCommand(VHOUSE_CMD_PWROFF,VOL_CHAN); //左耳发关机指令,区分耳机通道。 -#endif - -#endif - } - else - if( (Vox_Output_Cnt % Vox_TX_Interval) == 0 ) //200ms发送一次 - { -#ifdef VOX_TX - -#if XUANHENG - HandleTxCommand(CMD_SHUT_DOWN,VOR_CHAN); //右耳发关机指令,区分耳机通道。 -#else - HandleTxCommand(VHOUSE_CMD_PWROFF,VOR_CHAN); //右耳发关机指令,区分耳机通道。 -#endif - -#endif - } - - Vox_Output_Cnt++; + { +#ifdef VOX_COMM_ENABLE + if( !Vox_Getinto_Sleep_Flag ) + { + Vox_Getinto_Sleep_Flag = TRUE; + + Vox_Comm_Cfg_Clear(); + + gVox_Comm.Vox_Chg_Full_Flag = TRUE; +#ifdef _DEBUG_VOX + printf("TX Comm Vox Chg Full.(line:%d)\r\n ", (u16)__LINE__); +#endif + } else - { - if( !Vox_Getinto_Sleep_Flag ) - { - Vox_Getinto_Sleep_Flag = TRUE; - - VOX_EN_Type(VOX_ADT_Mode); - - Vox_Vout_Enable = OFF; -#ifdef _DEBUG_VOX - printf("VOX Get Into Sleep.\r\n"); +#endif + { +#ifdef VOX_COMM_ENABLE + if( !gVox_Comm.Vox_Chg_Full_Flag ) #endif + { + if ( !nVox_Comm_Over_Flag ) + { + nVox_Comm_Over_Flag = TRUE; + + VOX_EN_Type(VOX_ADT_Mode); + + Vox_Vout_Enable = OFF; +#ifdef _DEBUG_VOX + printf("VOX Get Into Sleep.\r\n"); +#endif + } } - } + } } } } @@ -1484,7 +1424,7 @@ void Vox_Det_Machine(void) ******************************************************************************* * void Vox_Follow_Chg( g_Vox_Fllow_Chg_Cfg *g_Vox_Fllow_Chg ) * -* Description : Vox 跟随充处理函数。 (40ms调用周期) +* Description : Vox 跟随充处理函数。 (100ms调用周期) * * Arguments : g_Vox_Fllow_Chg_Cfg *g_Vox_Fllow_Chg @@ -1499,7 +1439,7 @@ void Vox_Follow_Chg( g_Vox_Fllow_Chg_Cfg *n_Vox_Fllow_Chg ) { static bit nVpmid_Value_Setting; - switch (Follow_Chg_Sta) + switch ( Follow_Chg_Sta ) { case Vox_Follow_Chg_InitSta: //STA0:PMID=5.2V可以保证耳机一定能进入充电状态,并持续一段时间保证耳机能开始抽电。 @@ -1959,8 +1899,7 @@ void Vox_Follow_Chg( g_Vox_Fllow_Chg_Cfg *n_Vox_Fllow_Chg ) #ifdef _DEBUG_FOLLOW printf("Follow CHG AddSta,(STA:0x%x,Vpmid:0x%x)(line:%d)\r\n",(uint16_t)Follow_Chg_Sta,(uint16_t)n_Vox_Fllow_Chg->Vpmid_Threshold_At_Present,(uint16_t)__LINE__); #endif - DisCharge_Boost_Open(OFF, n_Vox_Fllow_Chg->Vpmid_Threshold_At_Present); - + DisCharge_Boost_Open(OFF, n_Vox_Fllow_Chg->Vpmid_Threshold_At_Present); } } } -- 2.39.0