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:
parent
4343445b05
commit
c743af0aa6
@ -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 {
|
||||
|
@ -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);
|
||||
|
||||
|
@ -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调用周期) */
|
||||
|
||||
|
@ -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"
|
||||
|
||||
|
@ -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 );
|
||||
|
@ -52,7 +52,7 @@ extern char putchar (char ch);
|
||||
|
||||
#endif
|
||||
|
||||
#define COM1_Data_Lenth 32
|
||||
#define COM1_Data_Lenth 38
|
||||
|
||||
#ifdef VOX_RX
|
||||
|
||||
|
@ -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
|
||||
\******************************************************************************/
|
||||
|
@ -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;
|
||||
|
||||
|
@ -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
|
||||
|
@ -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
|
||||
|
||||
/******************************************************************************\
|
||||
|
@ -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;
|
||||
|
275
UsrSrc/key/key.c
275
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
|
||||
|
||||
|
@ -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"
|
||||
|
@ -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;
|
||||
}
|
||||
}
|
||||
|
@ -21,6 +21,7 @@
|
||||
#include "system.h"
|
||||
#include "vox_module.h"
|
||||
#include "sleep.h"
|
||||
#include "vox_comm.h"
|
||||
|
||||
/******************************************************************************\
|
||||
Macro definitions
|
||||
|
@ -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打嗝一次*/
|
||||
|
@ -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);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user