1、将双向通信的具体场景提到vox_Comm_Handle函数中

2、增加VOX持续输出0V以唤醒耳机的情况;
3、解决超长按后,双向通讯一直发码的问题;(松开按键后Key_Press_ll_irq设为FALSE)
4、解决关盖上电时,不亮灯和不发码的问题(即把Hall_Sta_bk初始化);
5、长按发配对码时,主副耳的选择提取到config.h中;
This commit is contained in:
rb_peng 2025-02-21 17:24:44 +08:00
parent 4343445b05
commit c743af0aa6
17 changed files with 837 additions and 534 deletions

View File

@ -34,21 +34,21 @@
/******************************************************************************\ /******************************************************************************\
Variables definitions 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 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; extern int16_t g_Vntc_Adc;
@ -60,7 +60,7 @@ extern int16_t g_Vbat_Adc;
extern int16_t g_pmu_Adc_Vout; extern int16_t g_pmu_Adc_Vout;
extern uint8_t g_ADC_Chn; //extern uint8_t g_ADC_Chn;
/* ADCͨµÀö¾Ù¡£ */ /* ADCͨµÀö¾Ù¡£ */
typedef enum { typedef enum {

View File

@ -36,9 +36,74 @@
#define TWS_BOX 0x02 #define TWS_BOX 0x02
#define TWS_PC 0x03 #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 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 #if JIELI
@ -57,19 +122,19 @@ typedef enum {
typedef enum _VOX_BES_COMMAND_E typedef enum _VOX_BES_COMMAND_E
{ {
VHOUSE_CMD_PAIR = 0x01, //充电仓发起的配对信息 VHOUSE_CMD_PAIR = 0x01, //充电仓发起的配对信息
VHOUSE_CMD_EXCH_TWS_BTADDR = 0x02, //交换对耳的蓝牙地址信息。 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_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, VHOUSE_CMD_CLOSE_BOX = 0x81,
@ -175,14 +240,17 @@ typedef enum _VOX_BES_COMMAND_E
\******************************************************************************/ \******************************************************************************/
#ifdef VOX_RX #ifdef VOX_RX
extern uint8_t Vox_Get_Vbat_Flag[2]; //耳机配对状态VOL:低4bitVOR:高4bit。0是无效1是正在配对2是配对成功3不处理保持当前状态。 extern idata uint8_t Vox_Get_Vbat_Flag[2]; //耳机配对状态VOL:低4bitVOR:高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 #endif
extern void Vox_Comm_Cfg_Clear(void);
extern void HandleTxCommand(VOX_BES_COMMAND_E TxCommand, e_Vox_Chan nVox_Chn_Select); extern void HandleTxCommand(VOX_BES_COMMAND_E TxCommand, e_Vox_Chan nVox_Chn_Select);
extern void Vox_Comm_Handle(void);
extern void HandleVoxCommMsg(void); extern void HandleVoxCommMsg(void);

View File

@ -278,7 +278,7 @@
#define VFLOAT_SET CHG_VFLOAT_4_200V //配置浮充电压。 #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 //配置涓流充超时时间。 #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 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_EVENT_VOX_5V_DEBOUNCE 5 //配置开盖动作后VOX 输出5V持续时间100ms * 5单位100ms。
#define HALL_OPEN_VOX_0V_DEBOUNCE 5 //配置开盖动作后VOX 输出0V持续时间100ms * 5单位100ms。
#define VOX_OCP_HICUUP_DEBOUNCE 5 //配置关盖条件下VOX 打嗝时间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 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 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调用周期) */ /* Vox跟随充参数设置。(100ms调用周期) */

View File

@ -23,7 +23,7 @@
#include "config.h" #include "config.h"
/*Function Select功能选择宏定义*/ /*Function Select功能选择宏定义*/
//#define SY8837 //合封芯片SY8838 //#define SY8837 //非合封芯片SY8837
#define TIMER1_ENABLE 0 //Timer1 定时周期1ms。(120Bytes) #define TIMER1_ENABLE 0 //Timer1 定时周期1ms。(120Bytes)
@ -51,6 +51,8 @@
#if VOX_ENABLE #if VOX_ENABLE
#define VOX_COMM_ENABLE //双向通讯处理功能
#define VOX_TX //959Bytes #define VOX_TX //959Bytes
#define VOX_RX //739Bytes #define VOX_RX //739Bytes
@ -73,7 +75,7 @@
#define SLEEP_ENABLE 1 //110Bytes #define SLEEP_ENABLE 1 //110Bytes
#define TIM_WKUP //定时唤醒功能 //#define TIM_WKUP //定时唤醒功能
#define ADC_ENABLE 1 //587Bytes #define ADC_ENABLE 1 //587Bytes
@ -87,14 +89,14 @@
#define BAT_VALUE 1 //171Bytes #define BAT_VALUE 1 //171Bytes
//#define _DEBUG_ALL //打开打印功能 #define _DEBUG_ALL //打开打印功能
#ifdef _DEBUG_ALL #ifdef _DEBUG_ALL
#define UART0_ENABLE //UART0功能,Debug Log。(133Bytes) #define UART0_ENABLE //UART0功能,Debug Log。(133Bytes)
// #define _DEBUG_MAIN #define _DEBUG_MAIN
// #define _DEBUG_KEY #define _DEBUG_KEY
// #define _DEBUG_VOX // #define _DEBUG_VOX
// #define _DEBUG_FOLLOW // #define _DEBUG_FOLLOW
// #define _DEBUG_HALL // #define _DEBUG_HALL
@ -145,9 +147,7 @@ typedef enum{false = 0, true = !false} bool;
#define ON true #define ON true
#define OFF false #define OFF false
#ifdef XIAOMI
#include "stdlib.h" #include "stdlib.h"
#endif
#include "reg883x.h" #include "reg883x.h"

View File

@ -44,21 +44,25 @@
#define C_TIM1_Reload (65535 - T1MS) //1ms #define C_TIM1_Reload (65535 - T1MS) //1ms
extern bit F_sys_tim1_tick; extern bit F_sys_tim1_tick;
extern void Sys_Tim1_Init(void ); extern void Sys_Tim1_Init(void );
#endif #endif
extern bit F_sys_tim_1ms; extern bit F_sys_tim_1ms;
extern bit F_sys_tim_5ms; extern bit F_sys_tim_5ms;
extern bit F_sys_tim_10ms; extern bit F_sys_tim_10ms;
extern bit F_sys_tim_250ms; extern bit F_sys_tim_250ms;
extern bit F_sys_tim_100ms; extern bit F_sys_tim_100ms;
extern bit F_sys_tim_1s; extern bit F_sys_tim_1s;
extern bit F_sys_tim1_tick; extern bit F_sys_tim1_tick;
extern bit F_sys_tim2_tick;
extern void Sys_Tim0_Init(void ); extern void Sys_Tim0_Init(void );
extern void Sys_Tim0_Handler(void ); extern void Sys_Tim0_Handler(void );

View File

@ -52,7 +52,7 @@ extern char putchar (char ch);
#endif #endif
#define COM1_Data_Lenth 32 #define COM1_Data_Lenth 38
#ifdef VOX_RX #ifdef VOX_RX

View File

@ -36,10 +36,6 @@
extern bit Vox_Output_Short_Flag; extern bit Vox_Output_Short_Flag;
#define IVOX_THN 20 //耳机跟随充电流下降阈值
#define IVOX_THP 200 //耳机跟随充电流上升阈值
#define VOL_TYPE 0x00 #define VOL_TYPE 0x00
#define VOR_TYPE 0x01 #define VOR_TYPE 0x01
@ -72,7 +68,7 @@ extern bit Vox_Output_Short_Flag;
extern bit Vox_Vout_Enable; //Vox功率输出标志位 extern bit Vox_Vout_Enable; //Vox功率输出标志位
extern uint8_t EarPhone_Num; extern idata uint8_t EarPhone_Num;
#else #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_Pos_Msk (0x1U << Vox_Pull_Up_50k_Pos)
#define Vox_Pull_Up_50k Vox_Pull_Up_50k_Pos_Msk #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 Variables definitions
\******************************************************************************/ \******************************************************************************/

View File

@ -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 Functions definitions
@ -99,8 +99,6 @@ void Adc_Init(void)
SFRADDR = IRQ_EN10; //Enable ADC Interrupt(INT6). SFRADDR = IRQ_EN10; //Enable ADC Interrupt(INT6).
SFRDATA |= 0x01; SFRDATA |= 0x01;
#if 1
ADC_Offset_Error = (int8_t)( ( ADC_OFFSET & 0x0F ) - 8 ); //获取ADC Offset Error校准值。 ADC_Offset_Error = (int8_t)( ( ADC_OFFSET & 0x0F ) - 8 ); //获取ADC Offset Error校准值。
Bat_ADC_Offset_Error = (int8_t)( ADC_OFFSET >> 4 ); Bat_ADC_Offset_Error = (int8_t)( ADC_OFFSET >> 4 );
@ -114,8 +112,6 @@ void Adc_Init(void)
Vor_Isense_Gain_Error = IVOR_GAIN; Vor_Isense_Gain_Error = IVOR_GAIN;
#endif
EX6 = 1; //ADC IRQ Enable 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) * void PMU_ADC_Chn_Data(PMU_ADC_CHANNELS_E pmu_Adc_Chn)
* *
* Description : 使使,8 * Description : 使使,8
ADC值 ADC值
* *
* Arguments : NONE * Arguments : PMU_ADC_CHANNELS_E pmu_Adc_Chn
* Returns : NONE * 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_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。 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 ) //只处理正电流 if( g_pmu_Adc_Ivol < 0 ) //只处理正电流
{ {
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: 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。 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 ) //只处理正电流 if( g_pmu_Adc_Ivor < 0 ) //只处理正电流
{ {
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: 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分压。 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: 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 ) 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; 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 else
{ {
g_ADC_Chn = pmu_Adc_Chn; 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; g_Value_Adc_Avg = 0;

View File

@ -21,13 +21,14 @@
#include "vox_module.h" #include "vox_module.h"
#include "vox_comm.h" #include "vox_comm.h"
#include "system.h" #include "system.h"
#include "vox_comm.h"
#include "bat.h" #include "bat.h"
#include "hall.h" #include "hall.h"
#include "key.h"
/******************************************************************************\ /******************************************************************************\
Macro definitions Macro definitions
\******************************************************************************/ \******************************************************************************/
#define MAX_PACKET_SIZE 0x20 #define MAX_PACKET_SIZE 0x20
/******************************************************************************\ /******************************************************************************\
@ -72,28 +73,482 @@ bit gShip_Mode_Flag; //
#elif JIELI #elif JIELI
uint8_t Vox_Type; idata uint8_t Vox_Type;
uint8_t Net_Info[2][13]; uint8_t Net_Info[2][13];
idata uint8_t MAC_Addr[2][18]; idata uint8_t MAC_Addr[2][18];
uint8_t Earphone_Vbat[2]; //对耳电量 idata uint8_t Earphone_Vbat[2]; //对耳电量
#endif #endif
#ifdef VOX_RX #ifdef VOX_RX
uint8_t Vox_Get_Vbat_Flag[2]; //耳机配对状态VOL:低4bitVOR:高4bit。0是无效1是正在配对2是配对成功3不处理保持当前状态。 idata uint8_t Vox_Get_Vbat_Flag[2]; //耳机配对状态VOL:低4bitVOR:高4bit。0是无效1是正在配对2是配对成功3不处理保持当前状态。
uint8_t Vox_Get_BES_Addr_Flag[2]; 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 //idata uint8_t BES_Addr[6] = {0}; //À¶ÑÀ¶ú»úµØÖ·£¬Vox_Bes_Addr[0][6]£ºVOL£»Vox_Bes_Addr[1][6]£ºVOR
#endif #endif
#ifdef VOX_COMM_ENABLE
/* 双向通讯功能参数。 */
Vox_Comm_Cfg gVox_Comm;
/******************************************************************************\ /******************************************************************************\
Functions definitions 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 #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 wCRCin = 0xFFFF;
uint16_t wCPoly = 0x1021; 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 i;
u8 crc = 0; u8 crc = 0;
@ -185,7 +640,6 @@ uint8_t Vox_Get_BES_Addr_Flag[2];
#endif #endif
#ifdef VOX_TX
/* /*
******************************************************************************* *******************************************************************************
* void HandleTxCommand(VOX_BES_COMMAND_E RxCommand, e_Vox_Chan nVox_Chn_Select) * 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 tx_pData[COM1_Data_Lenth] = 0;
uint8_t i = 0; uint8_t i = 0;
uint8_t Exch_BtAddr = 0;
#if JIELI #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: case VHOUSE_CMD_EXCH_TWS_BTADDR:
/*Data Length*/ /*Data Length*/
tx_pData[3] = MAX_PACKET_SIZE; 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; break;
@ -664,7 +1131,8 @@ static void HandleRxMsg(VOX_BES_COMMAND_E RxCommand)
MAC_Addr[Vox_Type][i] = RX1_Buffer[4+i]; 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]; Net_Info[Vox_Type][i] = RX1_Buffer[22+i];
} }
@ -924,7 +1392,7 @@ void HandleVoxCommMsg(void)
Uart1_RX_Finish_Flag = FALSE; Uart1_RX_Finish_Flag = FALSE;
#ifdef _DEBUG_VOX #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 #endif
#if JIELI #if JIELI

View File

@ -53,7 +53,7 @@ uint8_t LED_On_Timer; //led
bit LED_On_Flag; //led显示复位标志位1灯效复位。 bit LED_On_Flag; //led显示复位标志位1灯效复位。
#ifdef PWM_ENABLE #ifdef PWM_ENABLE
uint8_t Breathing_Light_Cnt; //呼吸灯流水计数器 idata uint8_t Breathing_Light_Cnt; //呼吸灯流水计数器
#endif #endif
/******************************************************************************\ /******************************************************************************\

View File

@ -26,6 +26,8 @@
#include "sleep.h" #include "sleep.h"
#include "system.h" #include "system.h"
#include "display_ui.h" #include "display_ui.h"
#include "vox_comm.h"
/******************************************************************************\ /******************************************************************************\
Macro definitions Macro definitions
@ -41,7 +43,7 @@ bit CoverEvent_Flg; //Hall
#if HALL_ENABLE #if HALL_ENABLE
uint8_t Hall_Sta_bk; uint8_t Hall_Sta_bk=0xFF;
/******************************************************************************\ /******************************************************************************\
Functions definitions Functions definitions
@ -109,7 +111,9 @@ uint8_t Hall_Sta_bk;
#endif #endif
} }
Vox_Comm_Cfg_Clear();
CoverEvent_Flg = TRUE; CoverEvent_Flg = TRUE;
Boost_Open_Flag = FALSE; Boost_Open_Flag = FALSE;

View File

@ -42,10 +42,6 @@
#define KEY_PRESS_8S_CNT 535 //按键按下计数8s(调用周期15ms) #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_TWS_PAIR_CLEAR_CNT 180
#define KEY_LL_TX_Interval 8 //Vox定时发送指令时间间隔 #define KEY_LL_TX_Interval 8 //Vox定时发送指令时间间隔
@ -63,17 +59,20 @@ bit Key_Press_l_irq;
bit Key_Press_ll_irq; bit Key_Press_ll_irq;
KEY_EVENT_E Event_key; KEY_EVENT_E Event_key;
#if 0
uint8_t Key_TWS_Pair_Tim; uint8_t Key_TWS_Pair_Tim;
uint8_t Key_TWS_Clear_Pair_Tim; uint8_t Key_TWS_Clear_Pair_Tim;
uint8_t Key_TWS_Pair_Cnt; uint8_t Key_TWS_Pair_Cnt;
#endif
uint16_t Key_Press_Debounce; uint16_t Key_Press_Debounce;
uint8_t Key_Lift_Debounce; uint8_t Key_Lift_Debounce;
uint8_t Key_Voltage_Hold_Timer;
/******************************************************************************\ /******************************************************************************\
Functions definitions Functions definitions
\******************************************************************************/ \******************************************************************************/
@ -147,7 +146,9 @@ uint8_t Key_Lift_Debounce;
Key_Lift_Flag = TRUE; Key_Lift_Flag = TRUE;
Key_Lift_Debounce = 0; Key_Lift_Debounce = 0;
Key_Voltage_Hold_Timer = 0;
if( (Key_Press_Debounce <= KEY_PRESS_500MS_CNT) ) //松开按键按下时间小于500ms则识别为短按显示电量 if( (Key_Press_Debounce <= KEY_PRESS_500MS_CNT) ) //松开按键按下时间小于500ms则识别为短按显示电量
{ {
Key_Press_short_irq_led = TRUE; Key_Press_short_irq_led = TRUE;
@ -163,6 +164,8 @@ uint8_t Key_Lift_Debounce;
if( nKey_Press_2s_Flag ) if( nKey_Press_2s_Flag )
{ {
Key_Press_l_irq = TRUE; Key_Press_l_irq = TRUE;
Key_Press_ll_irq = FALSE;
} }
} }
@ -175,7 +178,8 @@ uint8_t Key_Lift_Debounce;
Key_Press_Debounce = 0; Key_Press_Debounce = 0;
} }
/* 用于按键发码VOX先升压一段时间用于唤醒耳机后发码。 */
if( Key_Lift_Flag && gBoost_Prepared_Flag ) if( Key_Lift_Flag && gBoost_Prepared_Flag )
{ {
if( Key_Press_l_irq ) if( Key_Press_l_irq )
@ -213,18 +217,32 @@ uint8_t Key_Lift_Debounce;
return; 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; Key_Press_l_irq = FALSE;
/*todo*/ /*todo*/
Event_key = KEY_EVENT_L_2S; 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[VOL_TYPE] = 0x00;
Vox_Get_BES_Addr_Flag[VOR_TYPE] = 0x00; Vox_Get_BES_Addr_Flag[VOR_TYPE] = 0x00;
#endif
#ifdef _DEBUG_KEY #ifdef _DEBUG_KEY
printf("long 2s press\r\n"); printf("long 2s press\r\n");
#endif #endif
@ -285,231 +303,34 @@ uint8_t Key_Lift_Debounce;
return; 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; 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*/ /*todo*/
Event_key = KEY_EVENT_LL_8S; Event_key = KEY_EVENT_LL_8S;
#ifdef _DEBUG_KEY #ifdef _DEBUG_KEY
printf("supper long 8s press.(line:%d)\r\n",(u16)__LINE__); printf("supper long 8s press.(line:%d)\r\n",(u16)__LINE__);
#endif #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 #endif

View File

@ -15,7 +15,7 @@
* History: * History:
* Revision Date Author Desc * Revision Date Author Desc
* 1.0.0 2024/11/01 Alex build this file * 1.0.0 2024/11/01 Alex build this file
* DescriptionPWM功能中4PWM_PRE0PWM0_RELPWMx_CMP设置不同通道PWM输出的占空比 * DescriptionPWM功能中4PWM_PRE0PWM0_RELPWMx_CMP设置不同通道PWM输出的占空比
****************************************************************************** ******************************************************************************
*/ */
#include "pwm.h" #include "pwm.h"

View File

@ -33,15 +33,17 @@
Variables definitions 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; bit F_sys_tim_1ms;
@ -55,11 +57,11 @@ bit F_sys_tim_100ms;
bit F_sys_tim_1s; bit F_sys_tim_1s;
uint8_t F_sys_tim_tick; #if TIMER1_ENABLE
bit F_sys_tim1_tick; bit F_sys_tim1_tick;
bit F_sys_tim2_tick; #endif
/******************************************************************************\ /******************************************************************************\
Functions definitions Functions definitions
@ -83,6 +85,7 @@ void Sys_Tim0_Handler(void)
if(F_sys_tim_tick == 0) if(F_sys_tim_tick == 0)
return; return;
F_sys_tim_tick = 0; F_sys_tim_tick = 0;
//system tick //system tick
F_sys_tim_1ms = TRUE; F_sys_tim_1ms = TRUE;
@ -91,6 +94,7 @@ void Sys_Tim0_Handler(void)
if(cnt_sys_tim_5ms >= 5) if(cnt_sys_tim_5ms >= 5)
{ {
cnt_sys_tim_5ms = 0; cnt_sys_tim_5ms = 0;
F_sys_tim_5ms = TRUE; F_sys_tim_5ms = TRUE;
} }
@ -98,7 +102,8 @@ void Sys_Tim0_Handler(void)
cnt_sys_tim_10ms++; cnt_sys_tim_10ms++;
if(cnt_sys_tim_10ms >= 10) if(cnt_sys_tim_10ms >= 10)
{ {
cnt_sys_tim_10ms = 0; cnt_sys_tim_10ms = 0;
F_sys_tim_10ms = TRUE; F_sys_tim_10ms = TRUE;
} }
@ -107,6 +112,7 @@ void Sys_Tim0_Handler(void)
if(cnt_sys_tim_100ms >= 100) if(cnt_sys_tim_100ms >= 100)
{ {
cnt_sys_tim_100ms = 0; cnt_sys_tim_100ms = 0;
F_sys_tim_100ms = TRUE; F_sys_tim_100ms = TRUE;
} }
@ -115,6 +121,7 @@ void Sys_Tim0_Handler(void)
if(cnt_sys_tim_250ms>=250) if(cnt_sys_tim_250ms>=250)
{ {
cnt_sys_tim_250ms = 0; cnt_sys_tim_250ms = 0;
F_sys_tim_250ms = TRUE; F_sys_tim_250ms = TRUE;
//-----------------250ms------------------------- //-----------------250ms-------------------------
@ -122,6 +129,7 @@ void Sys_Tim0_Handler(void)
if(cnt_sys_tim_1s >= 4) if(cnt_sys_tim_1s >= 4)
{ {
cnt_sys_tim_1s = 0; cnt_sys_tim_1s = 0;
F_sys_tim_1s = TRUE; F_sys_tim_1s = TRUE;
} }
} }

View File

@ -21,6 +21,7 @@
#include "system.h" #include "system.h"
#include "vox_module.h" #include "vox_module.h"
#include "sleep.h" #include "sleep.h"
#include "vox_comm.h"
/******************************************************************************\ /******************************************************************************\
Macro definitions Macro definitions

View File

@ -133,6 +133,11 @@ void System_Drivers_Machine(void)
#if VOX_ENABLE #if VOX_ENABLE
#ifdef VOX_COMM_ENABLE
/*双向通讯功能处理函数*/
Vox_Comm_Handle();
#endif
#ifdef VOX_ADT_ENABLE #ifdef VOX_ADT_ENABLE
/*Vox 过流保护两只耳机都每隔200ms打嗝一次*/ /*Vox 过流保护两只耳机都每隔200ms打嗝一次*/

View File

@ -51,13 +51,6 @@ bit Vox_Output_Short_Flag;
/******************************************************************************\ /******************************************************************************\
Macro definitions 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 #if VOX_FOLLOW_CHG
#define VOX_FOLLOW_CHG_NOWCURCHK_CNT 5 #define VOX_FOLLOW_CHG_NOWCURCHK_CNT 5
@ -70,9 +63,9 @@ bit Vox_Output_Short_Flag;
\******************************************************************************/ \******************************************************************************/
#if VOX_FOLLOW_CHG #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; g_Vox_Fllow_Chg_Cfg Vox_Fllow_Chg;
@ -80,7 +73,7 @@ e_Vox_Follow_Chg_Sta Follow_Chg_Sta;
#endif #endif
uint8_t EarPhone_Num; idata uint8_t EarPhone_Num;
bit Vox_Ocp_Flag; bit Vox_Ocp_Flag;
@ -174,7 +167,6 @@ bit OpenCover_TX_Cmd_Flag;
default: default:
break; break;
} }
} }
/* /*
@ -261,7 +253,6 @@ bit OpenCover_TX_Cmd_Flag;
default: default:
break; break;
} }
} }
#else #else
@ -377,7 +368,6 @@ bit Vol_GetOut_Box_Flag; //Vol
* *
******************************************************************************* *******************************************************************************
*/ */
void Vol_Det_Machine(void) void Vol_Det_Machine(void)
{ {
static uint8_t nVol_Loadon_Det_Debounce; //loadon标志检测延时计数 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_Flag0;
static bit Get_CHIP_STA1_Flag1; static bit nVox_Comm_Flag;
static bit nVox_Comm_Over_Flag;
static bit Cover_Close_Flag; static bit Cover_Close_Flag;
@ -977,7 +969,9 @@ void Vox_Det_Machine(void)
Get_CHIP_STA1_Flag0 = FALSE; Get_CHIP_STA1_Flag0 = FALSE;
Get_CHIP_STA1_Flag1 = FALSE; nVox_Comm_Flag = FALSE;
nVox_Comm_Over_Flag = FALSE;
CoverEvent_Flg1 = TRUE; CoverEvent_Flg1 = TRUE;
@ -1037,8 +1031,9 @@ void Vox_Det_Machine(void)
CoverEvent_Flg = FALSE; CoverEvent_Flg = FALSE;
} }
/* 开关盖后VOX先升压5.2V 一段时间唤醒耳机后转入ADT获取盒内耳机数量。 */ /* 开关盖后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++; 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) ); printf( "Open/Close Box,Earphones In Box(Num:%d)(VoxSta:0x%x).\r\n",(u16)EarPhone_Num, (u16)(CHIP_STA1) );
#endif #endif
} }
} }
/* 发送开盖指令*/ /* 发送开盖指令*/
if( Cover_Open_Flag ) /*开盖后5V持续N00ms后0V持续N00ms保证耳机能被唤醒之后发开盖码。*/ 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 if( Vox_TX_Timer < HALL_OPEN_VOX_0V_DEBOUNCE ) //转0V N00ms
{ {
VOX_EN_Type(VOX_PD1K_Mode); VOX_EN_Type(VOX_PD1K_Mode);
@ -1094,68 +1088,63 @@ void Vox_Det_Machine(void)
} }
else else
#endif #endif
{ {
if( !Get_CHIP_STA1_Flag1 ) #ifdef VOX_COMM_ENABLE
{
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
} /* 双向通讯,开盖发码。 */
if( !nVox_Comm_Flag )
Vox_Output_Debounce++; {
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 else
{ {
VOX_EN_Type(VOX_ADT_Mode); return;
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
} }
} }
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 );
} if( Event_key == KEY_EVENT_Empty )
else {
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状态改变则说明有耳机出入盒。 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; Wkup_Earphone_Flag = FALSE;
} }
else else
{ {
#ifdef VOX_COMM_ENABLE
if( !Cover_Close_Force_Vout_Flag ) if( !Cover_Close_Force_Vout_Flag )
{ {
#if VOX_0V_WAKEUP_EAR /*关盖后5V持续N00ms后0V持续N00ms保证耳机能被唤醒之后发关盖码。*/
/*发码*/ if( Vox_TX_Timer < HALL_CLOSE_VOX_0V_DEBOUNCE ) //转0V N00ms
if( Vox_TX_Timer <= Vox_COM_MSG_Tim ) //发送关盖指令。 {
{ VOX_EN_Type(VOX_PD1K_Mode);
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
}
Vox_TX_Timer++; Vox_TX_Timer++;
return;
} }
else
if( Vox_Output_Debounce <= Vox_COM_MSG_Tim ) //关盖后5s发送获取电量命令。 #endif
{ {
if( (Vox_Output_Debounce % Vox_TX_Interval_2) == 0 ) //200ms发送一次 /* 双向通讯,关盖发码。 */
if( !nVox_Comm_Flag )
{ {
#ifdef VOX_TX Vox_Comm_Cfg_Clear();
#if JIELI gVox_Comm.Cover_Close_Flag = TRUE; //置关盖发码标志位
HandleTxCommand(VHOUSE_CMD_CLOSE_WIN_GET_VBAT,VOL_CHAN); //左耳发开盖指令,区分耳机通道。
#elif ZHONGKE nVox_Comm_Flag = TRUE;
HandleTxCommand(VHOUSE_CMD_GET_TWS_BTADDR,VOL_CHAN); //左耳发开盖指令,区分耳机通道。
#elif XUANHENG #ifdef _DEBUG_VOX
HandleTxCommand(CMD_TWS_GET_BTADDR,VOL_CHAN); printf("TX Comm Cover Close.(line:%d)\r\n ", (u16)__LINE__);
#endif #endif
return;
#endif
} }
else else
if( (Vox_Output_Debounce % Vox_TX_Interval) == 0 ) //200ms发送一次 {
{ if( gVox_Comm.Cover_Close_Flag ) //关盖发码中
#ifdef VOX_TX {
return;
#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
} }
Vox_Output_Debounce++;
return;
} }
} }
#endif
} }
/*Vox 过流保护两只耳机都每隔500ms打嗝一次*/ /*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__); printf("VOX Vout 5V(STA1:0x%x,line:%d).\r\n",(uint16_t)CHIP_STA1, (uint16_t)__LINE__);
#endif #endif
Cover_Close_Flag1 = FALSE; Cover_Close_Flag1 = FALSE;
Vox_Voltage_Hold_Timer = 0;
} }
else else
{ {
@ -1394,51 +1345,40 @@ void Vox_Det_Machine(void)
} }
} }
else else
{ {
if( Vox_Output_Cnt <= Vox_COM_MSG_Tim ) #ifdef VOX_COMM_ENABLE
{ if( !Vox_Getinto_Sleep_Flag )
if( (Vox_Output_Cnt % Vox_TX_Interval_2) == 0 ) //200ms发送一次 {
{ Vox_Getinto_Sleep_Flag = TRUE;
#ifdef VOX_TX
Vox_Comm_Cfg_Clear();
#if XUANHENG
HandleTxCommand(CMD_SHUT_DOWN,VOL_CHAN); //左耳发关机指令,区分耳机通道。 gVox_Comm.Vox_Chg_Full_Flag = TRUE;
#else #ifdef _DEBUG_VOX
HandleTxCommand(VHOUSE_CMD_PWROFF,VOL_CHAN); //左耳发关机指令,区分耳机通道。 printf("TX Comm Vox Chg Full.(line:%d)\r\n ", (u16)__LINE__);
#endif #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++;
} }
else else
{ #endif
if( !Vox_Getinto_Sleep_Flag ) {
{ #ifdef VOX_COMM_ENABLE
Vox_Getinto_Sleep_Flag = TRUE; if( !gVox_Comm.Vox_Chg_Full_Flag )
VOX_EN_Type(VOX_ADT_Mode);
Vox_Vout_Enable = OFF;
#ifdef _DEBUG_VOX
printf("VOX Get Into Sleep.\r\n");
#endif #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 ) * 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 * 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; static bit nVpmid_Value_Setting;
switch (Follow_Chg_Sta) switch ( Follow_Chg_Sta )
{ {
case Vox_Follow_Chg_InitSta: //STA0:PMID=5.2V可以保证耳机一定能进入充电状态,并持续一段时间保证耳机能开始抽电。 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 #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__); 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 #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);
} }
} }
} }