feat: Add rfid feature and .gitignore file

This commit is contained in:
lmx
2025-11-28 16:25:35 +08:00
parent 818e8c3778
commit ade4b0a1f8
1244 changed files with 342105 additions and 0 deletions

View File

@ -0,0 +1,209 @@
#ifndef _AEC_USER_H_
#define _AEC_USER_H_
#include "generic/typedef.h"
#include "user_cfg.h"
#define AEC_DEBUG_ONLINE 0
#define AEC_READ_CONFIG 1
/*
*CVP(清晰语音模式定义)
*/
#define CVP_MODE_NONE 0x00 //清晰语音处理关闭
#define CVP_MODE_NORMAL 0x01 //通用模式
#define CVP_MODE_DMS 0x02 //双mic降噪(ENC)模式
#define CVP_MODE_SMS 0x03 //单mic系统(外加延时估计)
#define CVP_MODE_SMS_TDE 0x04 //单mic系统(内置延时估计)
#define CVP_MODE_SEL CVP_MODE_NORMAL
#define AEC_EN BIT(0)
#define NLP_EN BIT(1)
#define ANS_EN BIT(2)
#define ENC_EN BIT(3)
#define AGC_EN BIT(4)
#define WNC_EN BIT(5)
#define MFDT_EN BIT(6)
/*aec module enable bit define*/
#define AEC_MODE_ADVANCE (AEC_EN | NLP_EN | ANS_EN )
#define AEC_MODE_REDUCE (NLP_EN | ANS_EN )
#define AEC_MODE_SIMPLEX (ANS_EN)
/*
*SMS模式选择
*(1)SMS模式性能更好同时也需要更多的ram和mips
*(2)SMS_NORMAL和SMS_TDE功能一样只是SMS_TDE内置了延时估计和延时补偿
*可以更好的兼容延时不固定的场景
*/
#define SMS_DISABLE 0
#define SMS_NORMAL 1
#define SMS_TDE 2
#define TCFG_AUDIO_SMS_ENABLE SMS_DISABLE
/*
*DMS版本配置
*DMS_GLOBAL_V100:第一版双麦算法
*DMS_GLOBAL_V200:第二版双麦算法更少的ram和mips
*/
#define TCFG_AUDIO_DMS_GLOBAL_VERSION DMS_GLOBAL_V100
#if (defined(CONFIG_MEDIA_NEW_ENABLE) || (defined(CONFIG_MEDIA_DEVELOP_ENABLE)))
extern const u8 CONST_AEC_SIMPLEX;
/*兼容SMS和DMS*/
#if TCFG_AUDIO_TRIPLE_MIC_ENABLE
#include "commproc_tms.h"
#define aec_open aec_tms_init
#define aec_close aec_tms_exit
#define aec_in_data aec_tms_fill_in_data
#define aec_in_data_ref aec_tms_fill_in_ref_data
#define aec_in_data_ref_1 aec_tms_fill_in_ref_1_data
#define aec_ref_data aec_tms_fill_ref_data
#elif TCFG_AUDIO_DUAL_MIC_ENABLE
#include "commproc_dms.h"
#if (TCFG_AUDIO_DMS_SEL == DMS_NORMAL)
#define aec_open aec_dms_init
#define aec_close aec_dms_exit
#define aec_in_data aec_dms_fill_in_data
#define aec_in_data_ref aec_dms_fill_in_ref_data
#define aec_ref_data aec_dms_fill_ref_data
#else
#define aec_open aec_dms_flexible_init
#define aec_close aec_dms_flexible_exit
#define aec_in_data aec_dms_flexible_fill_in_data
#define aec_in_data_ref aec_dms_flexible_fill_in_ref_data
#define aec_ref_data aec_dms_flexible_fill_ref_data
#endif/*TCFG_AUDIO_DMS_SEL*/
void aec_cfg_fill(AEC_DMS_CONFIG *cfg);
/*
*********************************************************************
* Audio AEC Output Select
* Description: 输出选择
* Arguments : sel = Default 默认输出算法处理结果
* = Master 输出主mic(通话mic)的原始数据
* = Slave 输出副mic(降噪mic)的原始数据
* agc 输出数据要不要经过agc自动增益控制模块
* Return : None.
* Note(s) : 可以通过选择不同的输出来测试mic的频响和ENC指标
*********************************************************************
*/
void audio_aec_output_sel(CVP_OUTPUT_ENUM sel, u8 agc);
#elif (TCFG_AUDIO_SMS_ENABLE == SMS_TDE)
#include "commproc.h"
#define aec_open sms_tde_init
#define aec_close sms_tde_exit
#define aec_in_data sms_tde_fill_in_data
#define aec_in_data_ref(...)
#define aec_ref_data sms_tde_fill_ref_data
void aec_cfg_fill(AEC_CONFIG *cfg);
#else
#include "commproc.h"
#define aec_open aec_init
#define aec_close aec_exit
#define aec_in_data aec_fill_in_data
#define aec_in_data_ref(...)
#define aec_ref_data aec_fill_ref_data
void aec_cfg_fill(AEC_CONFIG *cfg);
#endif
s8 aec_debug_online(void *buf, u16 size);
void aec_input_clear_enable(u8 enable);
int audio_aec_init(u16 sample_rate);
void audio_aec_close(void);
void audio_aec_inbuf(s16 *buf, u16 len);
void audio_aec_inbuf_ref(s16 *buf, u16 len);
void audio_aec_inbuf_ref_1(s16 *buf, u16 len);
void audio_aec_refbuf(s16 *buf, u16 len);
u8 audio_aec_status(void);
void audio_aec_reboot(u8 reduce);
void audio_aec_ref_start(u8 en);
/*
*********************************************************************
* Audio AEC Open
* Description: 初始化AEC模块
* Arguments : sr 采样率(8000/16000)
* enablebit 使能模块(AEC/NLP/AGC/ANS...)
* out_hdl 自定义回调函数NULL则用默认的回调
* Return : 0 成功 其他 失败
* Note(s) : 该接口是对audio_aec_init的扩展支持自定义使能模块以及
* 数据输出回调函数
*********************************************************************
*/
int audio_aec_open(u16 sample_rate, s16 enablebit, int (*out_hdl)(s16 *data, u16 len));
/*
*********************************************************************
* Audio CVP IOCTL
* Description: CVP功能配置
* Arguments : cmd 操作命令
* value 操作数
* priv 操作内存地址
* Return : 0 成功 其他 失败
* Note(s) : (1)比如动态开关降噪NS模块:
* audio_cvp_ioctl(CVP_NS_SWITCH,1,NULL); //降噪关
* audio_cvp_ioctl(CVP_NS_SWITCH,0,NULL); //降噪开
*********************************************************************
*/
int audio_cvp_ioctl(int cmd, int value, void *priv);
/*获取风噪的检测结果1有风噪0无风噪*/
int audio_cvp_dms_wnc_state(void);
/*获取单双麦切换状态
* 0: 正常双麦 ;
* 1: 副麦坏了,触发故障
* -1: 主麦坏了,触发故障
*/
int audio_cvp_dms_malfunc_state();
/*
* 获取mic的能量值开了MFDT_EN才能用
* mic: 0 获取主麦能量
* mic1 获取副麦能量
* return返回能量值[0~90.3],返回-1表示错误
*/
float audio_cvp_dms_mic_energy(u8 mic);
/*tri_en: 1 正常3MIC降噪
* 0 变成2MIC降噪不使用 FB MIC数据*/
int audio_tms_mode_choose(u8 tri_en);
#else
extern struct aec_s_attr aec_param;
extern const u8 CONST_AEC_SIMPLEX;
struct aec_s_attr *aec_param_init(u16 sr);
s8 aec_debug_online(void *buf, u16 size);
void aec_cfg_fill(AEC_CONFIG *cfg);
void aec_input_clear_enable(u8 enable);
#endif /* #if (defined(CONFIG_MEDIA_NEW_ENABLE) || (defined(CONFIG_MEDIA_DEVELOP_ENABLE))) */
//aec 上行音效
enum {
SOUND_ORIGINAL, //原声
SOUND_UNCLE, //大叔
SOUND_GODDESS, //女神
};
#if defined(AEC_PRESETS_UL_EQ_CONFIG) && AEC_PRESETS_UL_EQ_CONFIG
#ifndef UL_PRESETS_EQ_NSECTION
#define UL_PRESETS_EQ_NSECTION 5
#endif
#if (UL_PRESETS_EQ_NSECTION > EQ_SECTION_MAX )
#error "EQ_SETCTION_MAX too samll"
#endif
void aec_ul_eq_update();
void ul_presets_eq_set(u8 tab_num);
#endif/*AEC_PRESETS_UL_EQ_CONFIG*/
#endif/*_AEC_USER_H_*/

View File

@ -0,0 +1,31 @@
#ifndef APP_ACTION_H
#define APP_ACTION_H
#define ACTION_EARPHONE_MAIN 0x0001
#define ACTION_A2DP_START 0x0002
#define ACTION_ESCO_START 0x0003
#define ACTION_BY_KEY_MODE 0x0004
#define ACTION_IDLE_MAIN 0x0010
#define ACTION_IDLE_POWER_OFF 0x0011
#define ACTION_MUSIC_MAIN 0x0020
#define ACTION_MUSIC_TWS_RX 0x0021
#define ACTION_PC_MAIN 0x0030
#define ACTION_AUX_MAIN 0x0040
#define APP_NAME_BT "earphone"
#define APP_NAME_IDLE "idle"
#define APP_NAME_PC "pc"
#define APP_NAME_MUSIC "music"
#define APP_NAME_AUX "aux"
extern void task_switch(const char *name, int action);
#define task_switch_to_bt() task_switch(APP_NAME_BT, ACTION_EARPHONE_MAIN)
#endif

View File

@ -0,0 +1,12 @@
#ifndef _APP_ANCBOX_H_
#define _APP_ANCBOX_H_
#include "typedef.h"
#include "system/event.h"
extern int app_ancbox_event_handler(struct ancbox_event *anc_dev);
extern u8 ancbox_get_status(void);
extern void ancbox_clear_status(void);
#endif //_APP_CHARGESTORE_H_

View File

@ -0,0 +1,13 @@
#ifndef _APP_ANCTOOL_H_
#define _APP_ANCTOOL_H_
#include "typedef.h"
#include "anctool.h"
u8 app_anctool_spp_rx_data(u8 *packet, u16 size);
void app_anctool_spp_connect(void);
void app_anctool_spp_disconnect(void);
u8 get_app_anctool_spp_connected_flag();
#endif //_APP_CHARGESTORE_H_

View File

@ -0,0 +1,17 @@
#ifndef _APP_CHARGE_H_
#define _APP_CHARGE_H_
#include "typedef.h"
#include "system/event.h"
extern void charge_close_deal(void);
extern void charge_start_deal(void);
extern void ldo5v_keep_deal(void);
extern void charge_full_deal(void);
extern void charge_ldo5v_in_deal(void);
extern void charge_ldo5v_off_deal(void);
extern u8 get_charge_full_flag(void);
extern int app_charge_event_handler(struct device_event *dev);
#endif //_APP_CHARGE_H_

View File

@ -0,0 +1,78 @@
#ifndef _APP_CHARGESTORE_H_
#define _APP_CHARGESTORE_H_
#include "typedef.h"
#include "system/event.h"
//LDOIN升级口命令定义
#define CMD_TWS_CHANNEL_SET 0x01
#define CMD_TWS_REMOTE_ADDR 0x02
#define CMD_TWS_ADDR_DELETE 0x03
#define CMD_BOX_TWS_CHANNEL_SEL 0x04//测试盒获取地址
#define CMD_BOX_TWS_REMOTE_ADDR 0x05//测试盒交换地址
#define CMD_POWER_LEVEL_OPEN 0x06//开盖充电舱报告/获取电量
#define CMD_POWER_LEVEL_CLOSE 0x07//合盖充电舱报告/获取电量
#define CMD_RESTORE_SYS 0x08//恢复出厂设置
#define CMD_ENTER_DUT 0x09//进入测试模式
#define CMD_EX_FIRST_READ_INFO 0x0A//F95读取数据首包信息
#define CMD_EX_CONTINUE_READ_INFO 0x0B//F95读取数据后续包信息
#define CMD_EX_FIRST_WRITE_INFO 0x0C//F95写入数据首包信息
#define CMD_EX_CONTINUE_WRITE_INFO 0x0D//F95写入数据后续包信息
#define CMD_EX_INFO_COMPLETE 0x0E//F95完成信息交换
#define CMD_TWS_SET_CHANNEL 0x0F//F95设置左右声道信息
#define CMD_BOX_UPDATE 0x20//测试盒升级
#define CMD_BOX_MODULE 0x21//测试盒一级命令
#define CMD_SHUT_DOWN 0x80//充电舱关机,充满电关机,或者是低电关机
#define CMD_CLOSE_CID 0x81//充电舱盒盖
#define CMD_ANC_MODULE 0x90//ANC一级命令
#define CMD_FAIL 0xfe//失败
#define CMD_UNDEFINE 0xff//未知命令回复
enum {
TWS_CHANNEL_LEFT = 1, //左耳
TWS_CHANNEL_RIGHT, //右耳
};
enum {
TWS_DEL_TWS_ADDR = 1, //删除对箱地址
TWS_DEL_PHONE_ADDR,//删除手机地址
TWS_DEL_ALL_ADDR,//删除手机与对箱地址
};
struct _CHARGE_STORE_INFO {
u8 tws_local_addr[6];
u8 tws_remote_addr[6];
u8 tws_mac_addr[6];
u32 search_aa;
u32 pair_aa;
u8 local_channel;
u16 device_ind;
u16 reserved_data;
} _GNU_PACKED_;
typedef struct _CHARGE_STORE_INFO CHARGE_STORE_INFO;
extern void chargestore_set_tws_channel_info(u8 channel);
extern bool chargestore_set_tws_remote_info(u8 *data, u8 len);
extern u16 chargestore_get_tws_remote_info(u8 *data);
extern u8 chargestore_get_power_level(void);
extern u8 chargestore_get_power_status(void);
extern u8 chargestore_get_cover_status(void);
extern u8 chargestore_get_sibling_power_level(void);
extern void chargestore_set_bt_init_ok(u8 flag);
extern int app_chargestore_event_handler(struct chargestore_event *chargestore_dev);
extern u8 chargestore_get_earphone_online(void);
extern u8 chargestore_get_earphone_pos(void);
extern int chargestore_sync_chg_level(void);
extern void chargestore_set_power_level(u8 power);
extern void chargestore_set_sibling_chg_lev(u8 chg_lev);
extern void chargestore_set_phone_disconnect(void);
extern void chargestore_set_phone_connect(void);
extern u8 chargestore_check_going_to_poweroff(void);
extern void chargestore_shutdown_reset(void);
extern void testbox_set_testbox_tws_paired(u8 flag);
extern u8 testbox_get_testbox_tws_paired(void);
extern u8 testbox_get_touch_trim_en(u8 *sec);
extern u8 testbox_get_softpwroff_after_paired(void);
#endif //_APP_CHARGESTORE_H_

View File

@ -0,0 +1,555 @@
#ifndef APP_CONFIG_H
#define APP_CONFIG_H
/*
* 系统打印总开关
*/
#define LIB_DEBUG 1 //1 //xtelllog 1是打开库打印
#define CONFIG_DEBUG_LIB(x) (x & LIB_DEBUG)
#define CONFIG_DEBUG_ENABLE //xtelllog 注释就关闭log
#ifndef CONFIG_DEBUG_ENABLE
//#define CONFIG_DEBUG_LITE_ENABLE //轻量级打印开关, 默认关闭
#endif
//*********************************************************************************//
// AI配置 //
//*********************************************************************************//
#define CONFIG_APP_BT_ENABLE
#ifdef CONFIG_APP_BT_ENABLE
#define TRANS_DATA_EN 0
#define RCSP_BTMATE_EN 0
#define RCSP_ADV_EN 1
#define AI_APP_PROTOCOL 0
#define LL_SYNC_EN 0
#define TUYA_DEMO_EN 0
#else
#define TRANS_DATA_EN 1
#define RCSP_BTMATE_EN 0
#define RCSP_ADV_EN 0
#define AI_APP_PROTOCOL 0
#define LL_SYNC_EN 0
#define TUYA_DEMO_EN 0
#endif
#include "board_config.h"
#ifdef TCFG_AUDIO_CVP_NS_MODE
#if (TCFG_AUDIO_CVP_NS_MODE==CVP_DNS_MODE) || (TCFG_KWS_VOICE_RECOGNITION_ENABLE == 1)||(TCFG_AUDIO_ANC_ENABLE==1&&TCFG_AUDIO_DUAL_MIC_ENABLE==1)
#undef CONFIG_MOVABLE_ENABLE
#define CONFIG_MOVABLE_ENABLE //省ram空间将部分ram空间的代码挪到flash
#endif
#endif
#if defined(TCFG_CVP_DEVELOP_ENABLE) && (TCFG_CVP_DEVELOP_ENABLE == 1)
#undef CONFIG_MOVABLE_ENABLE
#define CONFIG_MOVABLE_ENABLE //省ram空间将部分ram空间的代码挪到flash
#endif
#if CONFIG_UPDATE_WITH_MD5_CHECK_EN
#define UPDATE_MD5_ENABLE 1
#else
#define UPDATE_MD5_ENABLE 0
#endif
//升级需要打开CONFIG_APP_OTA_ENABLE,同时单双备份的配置也在board_xxx_global_cfg里配置需要注意只有JL_RCSP才支持单备份其余升级都是只支持双备份升级
//支持TWS同步升级OTA_TWS_SAME_TIME_NEW宏需要配置为1旧的流程已不再支持
#if (RCSP_ADV_EN) //rcsp需要打开ble
#define JL_EARPHONE_APP_EN 1
// #define CONFIG_CHARGESTORE_REMAP_ENABLE //充电仓重映射接收函数使能
#if CONFIG_APP_OTA_ENABLE
#define RCSP_UPDATE_EN 1 //是否支持rcsp升级
#if CONFIG_DOUBLE_BANK_ENABLE //双备份才能打开同步升级流程
#define OTA_TWS_SAME_TIME_ENABLE 0 //是否支持TWS同步升级
#define OTA_TWS_SAME_TIME_NEW 0 //使用新的tws ota流程
#else
#define OTA_TWS_SAME_TIME_ENABLE 1//0 xtellota //是否支持TWS同步升级
#define OTA_TWS_SAME_TIME_NEW 1//0 //使用新的tws ota流程
#endif //CONFIG_DOUBLE_BANK_ENABLE
#else
#define RCSP_UPDATE_EN 0 //是否支持rcsp升级
#define OTA_TWS_SAME_TIME_ENABLE 0 //是否支持TWS同步升级
#define OTA_TWS_SAME_TIME_NEW 0 //使用新的tws ota流程
#endif
#undef TCFG_USER_BLE_ENABLE
#define TCFG_USER_BLE_ENABLE 1 //BLE功能使能
#elif (AI_APP_PROTOCOL)
#define BT_MIC_EN 0
#define OTA_TWS_SAME_TIME_ENABLE 0 //是否支持TWS同步升级
#elif (LL_SYNC_EN)
#define JL_EARPHONE_APP_EN 0
#define OTA_TWS_SAME_TIME_ENABLE 1
#define OTA_TWS_SAME_TIME_NEW 1 //使用新的tws ota流程
#elif (TUYA_DEMO_EN)
#define JL_EARPHONE_APP_EN 0
#define OTA_TWS_SAME_TIME_ENABLE 0
#define OTA_TWS_SAME_TIME_NEW 0 //使用新的tws ota流程
#else
#define JL_EARPHONE_APP_EN 0
#define OTA_TWS_SAME_TIME_ENABLE 0
#define OTA_TWS_SAME_TIME_NEW 0 //使用新的tws ota流程
#endif
#define CONFIG_MEDIA_LIB_USE_MALLOC 1
#include "usb_std_class_def.h"
#undef USB_MALLOC_ENABLE
#define USB_MALLOC_ENABLE 1
///USB 配置重定义
// #undef USB_DEVICE_CLASS_CONFIG
// #define USB_DEVICE_CLASS_CONFIG (AUDIO_CLASS)
/////要确保 上面 undef 后在include usb
#include "usb_common_def.h"
#define USB_PC_NO_APP_MODE 0
#if ((TCFG_CHARGESTORE_ENABLE || TCFG_TEST_BOX_ENABLE || TCFG_ANC_BOX_ENABLE) \
&& TCFG_CHARGESTORE_PORT == IO_PORT_DP)
#undef TCFG_OTG_MODE
#define TCFG_OTG_MODE (TCFG_OTG_MODE_HOST|TCFG_OTG_MODE_SLAVE|TCFG_OTG_MODE_CHARGE|OTG_DET_DM_ONLY)
#endif
#include "btcontroller_mode.h"
#include "user_cfg_id.h"
#ifndef __LD__
#include "bt_profile_cfg.h"
#endif
// #ifdef CONFIG_APP_BT_ENABLE
// #if(APP_ONLINE_DEBUG)
// #error "they can not enable at the same time,just select one!!!"
// #endif
// #endif
#ifdef CONFIG_SDFILE_ENABLE
#define SDFILE_DEV "sdfile"
#define SDFILE_MOUNT_PATH "mnt/sdfile"
#if (USE_SDFILE_NEW)
#define SDFILE_APP_ROOT_PATH SDFILE_MOUNT_PATH"/app/" //app分区
#define SDFILE_RES_ROOT_PATH SDFILE_MOUNT_PATH"/res/" //资源文件分区
#else
#define SDFILE_RES_ROOT_PATH SDFILE_MOUNT_PATH"/C/"
#endif
#endif
#define STYLE_JL_WTACH (1)//彩屏demo
#define STYLE_JL_SOUNDBOX (2)//点阵屏demo
#define STYLE_JL_CHARGE (3)//点阵屏充电仓
#define STYLE_JL_LED7 (4)//led7
#define STYLE_UI_SIMPLE (5)//没有ui框架
//*********************************************************************************//
// 测试模式配置 //
//*********************************************************************************//
#if (CONFIG_BT_MODE != BT_NORMAL)
#undef TCFG_BD_NUM
#define TCFG_BD_NUM 1
#undef TCFG_USER_TWS_ENABLE
#define TCFG_USER_TWS_ENABLE 0 //tws功能使能
#undef TCFG_USER_BLE_ENABLE
#define TCFG_USER_BLE_ENABLE 1 //BLE功能使能
#undef TCFG_AUTO_SHUT_DOWN_TIME
#define TCFG_AUTO_SHUT_DOWN_TIME 0
#undef TCFG_SYS_LVD_EN
#define TCFG_SYS_LVD_EN 0
#undef TCFG_LOWPOWER_LOWPOWER_SEL
#define TCFG_LOWPOWER_LOWPOWER_SEL 0
#undef TCFG_AUDIO_DAC_LDO_VOLT
#define TCFG_AUDIO_DAC_LDO_VOLT DUT_AUDIO_DAC_LDO_VOLT
#undef TCFG_LOWPOWER_POWER_SEL
#define TCFG_LOWPOWER_POWER_SEL PWR_LDO15
#undef TCFG_PWMLED_ENABLE
#define TCFG_PWMLED_ENABLE DISABLE_THIS_MOUDLE
#undef TCFG_ADKEY_ENABLE
#define TCFG_ADKEY_ENABLE DISABLE_THIS_MOUDLE
#undef TCFG_IOKEY_ENABLE
#define TCFG_IOKEY_ENABLE DISABLE_THIS_MOUDLE
#undef TCFG_TEST_BOX_ENABLE
#define TCFG_TEST_BOX_ENABLE 0
#undef TCFG_AUTO_SHUT_DOWN_TIME
#define TCFG_AUTO_SHUT_DOWN_TIME 0
#undef TCFG_POWER_ON_NEED_KEY
#define TCFG_POWER_ON_NEED_KEY 0
/* #undef TCFG_UART0_ENABLE
#define TCFG_UART0_ENABLE DISABLE_THIS_MOUDLE */
dzfghsdfhgsfgh
#endif //(CONFIG_BT_MODE != BT_NORMAL)
#if TCFG_USER_TWS_ENABLE
#define CONFIG_TWS_COMMON_ADDR_AUTO 0 /* 自动生成TWS配对后的MAC地址 */
#define CONFIG_TWS_COMMON_ADDR_USED_LEFT 1 /* 使用左耳的MAC地址作为TWS配对后的地址
可配合烧写器MAC地址自增功能一起使用
多台交叉配对会出现MAC地址相同情况 */
#define CONFIG_TWS_COMMON_ADDR_SELECT CONFIG_TWS_COMMON_ADDR_AUTO
//*********************************************************************************//
// 对耳配置方式配置 //
//*********************************************************************************//
#define CONFIG_TWS_CONNECT_SIBLING_TIMEOUT 4 /* 开机或超时断开后对耳互连超时时间单位s */
// #define CONFIG_TWS_REMOVE_PAIR_ENABLE [> 不连手机的情况下双击按键删除配对信息 <]
#define CONFIG_TWS_POWEROFF_SAME_TIME 1 /*按键关机时两个耳机同时关机*/
#define ONE_KEY_CTL_DIFF_FUNC 1 /*通过左右耳实现一个按键控制两个功能*/
#define CONFIG_TWS_SCO_ONLY_MASTER 0 /*通话的时候只有主机出声音*/
/* 配对方式选择 */
#define CONFIG_TWS_PAIR_BY_CLICK 0 /* 按键发起配对 */
#define CONFIG_TWS_PAIR_BY_AUTO 1 /* 开机自动配对 */
#define CONFIG_TWS_PAIR_BY_FAST_CONN 2 /* 开机快速连接,连接速度比自动配对快,不支持取消配对操作 */
#define CONFIG_TWS_PAIR_MODE CONFIG_TWS_PAIR_BY_AUTO
/* 声道确定方式选择 */
#define CONFIG_TWS_MASTER_AS_LEFT 0 //主机作为左耳
#define CONFIG_TWS_AS_LEFT_CHANNEL 1 //固定左耳
#define CONFIG_TWS_AS_RIGHT_CHANNEL 2 //固定右耳
#define CONFIG_TWS_LEFT_START_PAIR 3 //双击发起配对的耳机做左耳
#define CONFIG_TWS_RIGHT_START_PAIR 4 //双击发起配对的耳机做右耳
#define CONFIG_TWS_EXTERN_UP_AS_LEFT 5 //外部有上拉电阻作为左耳
#define CONFIG_TWS_EXTERN_DOWN_AS_LEFT 6 //外部有下拉电阻作为左耳
#define CONFIG_TWS_SECECT_BY_CHARGESTORE 7 //充电仓决定左右耳
#define CONFIG_TWS_CHANNEL_SELECT CONFIG_TWS_LEFT_START_PAIR //配对方式选择
#define CONFIG_TWS_CHANNEL_CHECK_IO IO_PORTA_07 //上下拉电阻检测引脚
#if CONFIG_TWS_PAIR_MODE != CONFIG_TWS_PAIR_BY_CLICK
#if (CONFIG_TWS_CHANNEL_SELECT == CONFIG_TWS_LEFT_START_PAIR) ||\
(CONFIG_TWS_CHANNEL_SELECT == CONFIG_TWS_RIGHT_START_PAIR)
#undef CONFIG_TWS_CHANNEL_SELECT
#define CONFIG_TWS_CHANNEL_SELECT CONFIG_TWS_MASTER_AS_LEFT
#endif
#if CONFIG_TWS_PAIR_MODE == CONFIG_TWS_PAIR_BY_AUTO
#define CONFIG_TWS_AUTO_PAIR_WITHOUT_UNPAIR /* 不取消配对也可以配对新的耳机 */
#endif
#if CONFIG_TWS_PAIR_MODE == CONFIG_TWS_PAIR_BY_FAST_CONN
#undef CONFIG_TWS_REMOVE_PAIR_ENABLE
#endif
#endif
#define CONFIG_A2DP_GAME_MODE_ENABLE 0 //游戏模式
#define CONFIG_A2DP_GAME_MODE_DELAY_TIME 35 //游戏模式延时ms
//*********************************************************************************//
// 低延时游戏模式脚步声、枪声增强,需使能蓝牙音乐10段eq以及蓝牙音乐drc
// 用户开关宏AUDIO_GAME_EFFECT_CONFIG(开关蓝牙低延时模式的游戏音效)
// 低延时eq效果文件使用eq_game_eff.bin,调试时需保存成该文件,并在批处理-res后添加
// 非低延时eq效果文件使用eq_cfg_hw.bin,也需在批处理-res后添加
//*********************************************************************************//
#if CONFIG_A2DP_GAME_MODE_ENABLE
#define AUDIO_GAME_EFFECT_CONFIG 1 //低延时游戏模式脚步声、枪声增强 1:使能、0关闭
#else
#define AUDIO_GAME_EFFECT_CONFIG 0 //低延时游戏模式脚步声、枪声增强 1:使能、0关闭
#endif
/***********************************非用户配置区***********************************/
//以下宏定义,是游戏音效使能后,需要开启的宏定义,已配好,用户不用修改
#if AUDIO_GAME_EFFECT_CONFIG
#if (TCFG_EQ_ENABLE == 0)
#undef TCFG_EQ_ENABLE
#define TCFG_EQ_ENABLE 1
#endif/* (TCFG_EQ_ENABLE == 0) */
#if (TCFG_BT_MUSIC_EQ_ENABLE == 0)
#undef TCFG_BT_MUSIC_EQ_ENABLE
#define TCFG_BT_MUSIC_EQ_ENABLE 1
#endif/*(TCFG_BT_MUSIC_EQ_ENABLE == 0)*/
#if (TCFG_DRC_ENABLE == 0)
#undef TCFG_DRC_ENABLE
#define TCFG_DRC_ENABLE 1
#endif/* (TCFG_DRC_ENABLE == 0) */
#if (TCFG_BT_MUSIC_DRC_ENABLE == 0)
#undef TCFG_BT_MUSIC_DRC_ENABLE
#define TCFG_BT_MUSIC_DRC_ENABLE 1
#endif/* (TCFG_BT_MUSIC_DRC_ENABLE == 0) */
#if (EQ_SECTION_MAX < 10)
#undef EQ_SECTION_MAX
#define EQ_SECTION_MAX 10
#endif/* (EQ_SECTION_MAX < 10) */
#if (TCFG_USE_EQ_FILE == 0)
#undef TCFG_USE_EQ_FILE
#define TCFG_USE_EQ_FILE 1
#endif/* TCFG_USE_EQ_FILE */
#endif/* AUDIO_GAME_EFFECT_CONFIG */
/**********************************************************************************/
#if CONFIG_TWS_PAIR_MODE == CONFIG_TWS_PAIR_BY_CLICK
#define CONFIG_TWS_BY_CLICK_PAIR_WITHOUT_PAIR /*双击按键可以配对已配对过的样机,即交叉配对 */
#ifdef CONFIG_TWS_BY_CLICK_PAIR_WITHOUT_PAIR
#define CONFIG_TWS_AUTO_PAIR_WITHOUT_UNPAIR /* 不取消配对也可以配对新的耳机 */
#endif
#endif
#if TCFG_CHARGESTORE_ENABLE
#undef CONFIG_TWS_CHANNEL_SELECT
#define CONFIG_TWS_CHANNEL_SELECT CONFIG_TWS_SECECT_BY_CHARGESTORE //充电仓区分左右
#endif //TCFG_CHARGESTORE_ENABLE
#if TCFG_TEST_BOX_ENABLE && (!TCFG_CHARGESTORE_ENABLE)
#define CONFIG_TWS_SECECT_CHARGESTORE_PRIO 1 //测试盒配置左右耳优先
#else
#define CONFIG_TWS_SECECT_CHARGESTORE_PRIO 0
#endif //TCFG_TEST_BOX_ENABLE
//*********************************************************************************//
// 对耳电量显示方式 //
//*********************************************************************************//
#if BT_SUPPORT_DISPLAY_BAT
#define CONFIG_DISPLAY_TWS_BAT_LOWER 1 //对耳手机端电量显示,显示低电量耳机的电量
#define CONFIG_DISPLAY_TWS_BAT_HIGHER 2 //对耳手机端电量显示,显示高电量耳机的电量
#define CONFIG_DISPLAY_TWS_BAT_LEFT 3 //对耳手机端电量显示,显示左耳的电量
#define CONFIG_DISPLAY_TWS_BAT_RIGHT 4 //对耳手机端电量显示,显示右耳的电量
#define CONFIG_DISPLAY_TWS_BAT_TYPE CONFIG_DISPLAY_TWS_BAT_LOWER
#endif //BT_SUPPORT_DISPLAY_BAT
#define CONFIG_DISPLAY_DETAIL_BAT 0 //BLE广播显示具体的电量
#define CONFIG_NO_DISPLAY_BUTTON_ICON 1 //BLE广播不显示按键界面,智能充电仓置1
#endif //TCFG_USER_TWS_ENABLE
#ifndef CONFIG_BT_RX_BUFF_SIZE
#define CONFIG_BT_RX_BUFF_SIZE (14 * 1024)
#endif
#ifdef CONFIG_APP_BT_ENABLE
#if TCFG_BT_SUPPORT_AAC || TCFG_BT_SUPPORT_LDAC
#define CONFIG_BT_TX_BUFF_SIZE (5 * 1024)
#else
#define CONFIG_BT_TX_BUFF_SIZE (4 * 1024)
#endif
#else
#if TCFG_BT_SUPPORT_AAC || TCFG_BT_SUPPORT_LDAC
#define CONFIG_BT_TX_BUFF_SIZE (4 * 1024)
#else
#define CONFIG_BT_TX_BUFF_SIZE (3 * 1024)
#endif
#endif
#ifndef CONFIG_NEW_BREDR_ENABLE
#if TCFG_USER_TWS_ENABLE
#ifdef CONFIG_LOCAL_TWS_ENABLE
#define CONFIG_TWS_BULK_POOL_SIZE (4 * 1024)
#else
#define CONFIG_TWS_BULK_POOL_SIZE (2 * 1024)
#endif
#endif
#endif
#if (CONFIG_BT_MODE != BT_NORMAL)
////bqb 如果测试3M tx buf 最好加大一点
#undef CONFIG_BT_TX_BUFF_SIZE
#define CONFIG_BT_TX_BUFF_SIZE (6 * 1024)
#endif
//*********************************************************************************//
// 电源切换配置 //
//*********************************************************************************//
#define PHONE_CALL_USE_LDO15 CONFIG_PHONE_CALL_USE_LDO15
//*********************************************************************************//
// 时钟切换配置 //
//*********************************************************************************//
#define BT_NORMAL_HZ CONFIG_BT_NORMAL_HZ
#define BT_CONNECT_HZ CONFIG_BT_CONNECT_HZ
#define BT_A2DP_HZ CONFIG_BT_A2DP_HZ
#define BT_CALL_HZ CONFIG_BT_CALL_HZ
#define BT_CALL_ADVANCE_HZ CONFIG_BT_CALL_ADVANCE_HZ
#define BT_CALL_16k_HZ CONFIG_BT_CALL_16k_HZ
#define BT_CALL_16k_ADVANCE_HZ CONFIG_BT_CALL_16k_ADVANCE_HZ
#define MUSIC_DEC_FASTEST_CLOCK CONFIG_MUSIC_DEC_FASTEST_CLOCK
#define MUSIC_DEC_FAST_CLOCK CONFIG_MUSIC_DEC_FAST_CLOCK
#define MUSIC_DEC_CLOCK CONFIG_MUSIC_DEC_CLOCK
#define MUSIC_DEC_IDLE_CLOCK CONFIG_MUSIC_IDLE_CLOCK
#define MUSIC_FSCAN_CLOCK CONFIG_MUSIC_FSCAN_CLOCK
#define LINEIN_CLOCK CONFIG_LINEIN_CLOCK
#define FM_CLOCK CONFIG_FM_CLOCK
#define FM_EMITTER_CLOCK CONFIG_FM_EMITTER_CLOCK
#define PC_CLOCK CONFIG_PC_CLOCK
#define RECODRD_CLOCK CONFIG_RECORD_CLOCK
#define SPDIF_CLOCK CONFIG_SPDIF_CLOCK
////////////////////////
#if TCFG_BT_SUPPORT_AAC || TCFG_BT_SUPPORT_LDAC
#define BT_A2DP_STEREO_EQ_HZ 48 * 1000000L
#else
#define BT_A2DP_STEREO_EQ_HZ 32 * 1000000L
#endif
#define BT_A2DP_AAC_HZ 48 * 1000000L
#define BT_A2DP_TWS_AAC_HZ 64 * 1000000L
#define BT_A2DP_MONO_EQ_HZ 32 * 1000000L
#define BT_A2DP_ONLINE_EQ_HZ 48 * 1000000L
#define BT_CALL_SIMPLEX_HZ 96 * 1000000L
#ifdef CONFIG_ANS_V2
//#define BT_CALL_16k_HZ 96 * 1000000L
//#define BT_CALL_16k_ADVANCE_HZ 120 * 1000000L
#else
//#define BT_CALL_16k_HZ 80 * 1000000L
//#define BT_CALL_16k_ADVANCE_HZ 96 * 1000000L
#endif
#define BT_CALL_16k_SIMPLEX_HZ 120 * 1000000L
////////////////////////
#ifdef CONFIG_FPGA_ENABLE
// #undef TCFG_CLOCK_OSC_HZ
// #define TCFG_CLOCK_OSC_HZ 12000000
#endif
#ifdef CONFIG_CPU_BR26
#undef BT_CALL_16k_HZ
#undef BT_CALL_16k_ADVANCE_HZ
#define BT_CALL_16k_HZ 96 * 1000000L
#define BT_CALL_16k_ADVANCE_HZ 96 * 1000000L
#endif
#ifdef CONFIG_CPU_BR23
#undef BT_A2DP_STEREO_EQ_HZ
#define BT_A2DP_STEREO_EQ_HZ 48 * 1000000L
#undef BT_A2DP_MONO_EQ_HZ
#define BT_A2DP_MONO_EQ_HZ 48 * 1000000L
#endif
#ifdef CONFIG_CPU_BR25
#undef BT_A2DP_STEREO_EQ_HZ
#define BT_A2DP_STEREO_EQ_HZ 48 * 1000000L
#undef BT_A2DP_MONO_EQ_HZ
#define BT_A2DP_MONO_EQ_HZ 48 * 1000000L
#endif
#ifdef CONFIG_FPGA_ENABLE
// #undef TCFG_CLOCK_OSC_HZ
// #define TCFG_CLOCK_OSC_HZ 12000000
#undef TCFG_MC_BIAS_AUTO_ADJUST
#define TCFG_MC_BIAS_AUTO_ADJUST MC_BIAS_ADJUST_DISABLE
#endif
//*********************************************************************************//
// 低功耗配置 //
//*********************************************************************************//
#if TCFG_IRKEY_ENABLE
#undef TCFG_LOWPOWER_LOWPOWER_SEL
#define TCFG_LOWPOWER_LOWPOWER_SEL 0 //开红外不进入低功耗
#endif /* #if TCFG_IRKEY_ENABLE */
//*********************************************************************************//
// LED使用 16SLOT TIMER 同步 //
//*********************************************************************************//
//LED模块使用slot timer同步使用注意点:
// 1.soundbox不开该功能, 原因: 默认打开osc时钟, 使用原来的osc流程同步即可
// 2.带sd卡earphone不开该功能, 一般为单耳, 不需要同步, 使用原来的流程(lrc)
// 3.一般用在tws应用中, 而且默认关闭osc;
#if TCFG_USER_TWS_ENABLE
#define TCFG_PWMLED_USE_SLOT_TIME ENABLE_THIS_MOUDLE
#endif
//*********************************************************************************//
// 升级配置 //
//*********************************************************************************//
//升级LED显示使能
#define UPDATE_LED_REMIND
//升级提示音使能
#define UPDATE_VOICE_REMIND
#ifndef CONFIG_UPDATE_JUMP_TO_MASK
#define CONFIG_UPDATE_JUMP_TO_MASK 0
#endif
#if CONFIG_UPDATE_JUMP_TO_MASK
//升级IO保持使能
#define DEV_UPDATE_SUPPORT_JUMP //目前只有br23\br25支持
#endif
#if TCFG_APP_MUSIC_EN
#define CONFIG_SD_UPDATE_ENABLE
#define CONFIG_USB_UPDATE_ENABLE
#endif
//*********************************************************************************//
// Audio配置 //
//*********************************************************************************//
#if TCFG_AUDIO_ANC_ENABLE
#if ((defined VOL_TYPE_ANALOG) && (SYS_VOL_TYPE == VOL_TYPE_ANALOG)) || \
((defined VOL_TYPE_AD) && (SYS_VOL_TYPE == VOL_TYPE_AD))
#error "ANC can not use VOL_TYPE_ANALOG and VOL_TYPE_AD!!!"
#endif/*(SYS_VOL_TYPE = VOL_TYPE_ANALOG) || (SYS_VOL_TYPE = VOL_TYPE_AD)*/
#endif/*TCFG_AUDIO_ANC_ENABLE*/
/*通话语音处理算法放在.data段*/
#ifndef TCFG_AUDIO_CVP_CODE_AT_RAM
#define TCFG_AUDIO_CVP_CODE_AT_RAM 1
#endif/*TCFG_AUDIO_CVP_CODE_AT_RAM*/
/*AAC解码算法放在.data段*/
#ifndef TCFG_AUDIO_AAC_CODE_AT_RAM
#define TCFG_AUDIO_AAC_CODE_AT_RAM 1
#endif/*TCFG_AUDIO_AAC_CODE_AT_RAM*/
#if (TCFG_AUDIO_DUAL_MIC_ENABLE && TCFG_AUDIO_TRIPLE_MIC_ENABLE)
#error "TCFG_AUDIO_DUAL_MIC_ENABLE and TCFG_AUDIO_TRIPLE_MIC_ENABLE can not enable together !!!"
#endif
//*********************************************************************************//
// 充电中按键清除手机配对信息配置 //
//*********************************************************************************//
#define CHARGING_CLEAN_PHONE_INFO 0
#define PC_MODE_DETECTION
#endif

View File

@ -0,0 +1,90 @@
#ifndef APP_MAIN_H
#define APP_MAIN_H
typedef struct {
float talk;
float ff;
float fb;
} audio_mic_cmp_t;
typedef struct _APP_VAR {
s8 bt_volume;
s8 dev_volume;
s8 music_volume;
s8 call_volume;
s8 wtone_volume;
u8 opid_play_vol_sync;
u8 aec_dac_gain;
u8 aec_mic_gain;
u8 aec_mic1_gain;
u8 aec_mic2_gain;
u8 aec_mic3_gain;
u8 rf_power;
u8 goto_poweroff_flag;
u8 goto_poweroff_cnt;
u8 play_poweron_tone;
u8 remote_dev_company;
u8 siri_stu;
u8 cycle_mode;
u8 have_mass_storage;
int auto_stop_page_scan_timer; //用于1拖2时有一台连接上后超过三分钟自动关闭Page Scan
volatile int auto_shut_down_timer;
volatile int wait_exit_timer;
u16 auto_off_time;
u16 warning_tone_v;
u16 poweroff_tone_v;
u16 phone_dly_discon_time;
u8 usb_mic_gain;
int wait_timer_do;
u32 start_time;
float audio_mic_array_diff_cmp;//麦克风阵列补偿值
u8 audio_mic_array_trim_en; //麦克风阵列校准
audio_mic_cmp_t audio_mic_cmp;
float enc_degradation;//default:1,range[0:1]
/*3麦通话配置使用:选择第几个mic*/
u8 talk_mic_ch; //主MIC通道选择
u8 talk_ref_mic_ch; //副MIC通道选择
u8 talk_fb_mic_ch; //FB通道选择
} APP_VAR;
typedef struct _BT_USER_PRIV_VAR {
//phone
u8 phone_ring_flag: 1;
u8 phone_num_flag: 1;
u8 phone_income_flag: 1;
u8 phone_call_dec_begin: 1;
u8 phone_con_sync_num_ring: 1;
u8 phone_con_sync_ring: 1;
// u8 reserved: 2;
u8 emitter_or_receiver: 2;
u8 get_phone_num_timecnt;
u8 inband_ringtone;
u8 phone_vol;
u16 phone_timer_id;
u8 last_call_type;
u8 income_phone_num[30];
u8 income_phone_len;
s32 auto_connection_counter;
int auto_connection_timer;
u8 auto_connection_addr[6];
int tws_con_timer;
u8 tws_start_con_cnt;
u8 tws_conn_state;
bool search_tws_ing;
int sniff_timer;
bool fast_test_mode;
} BT_USER_PRIV_VAR;
#define BT_EMITTER_EN 1
#define BT_RECEIVER_EN 2
typedef struct _BT_USER_COMM_VAR {
} BT_USER_COMM_VAR;
extern APP_VAR app_var;
extern BT_USER_PRIV_VAR bt_user_priv_var;
#define earphone (&bt_user_priv_var)
#endif

View File

@ -0,0 +1,8 @@
#ifndef CONFIG_APP_MUSIC_H
#define CONFIG_APP_MUSIC_H
void app_music_exit();
int music_app_check(void);
#endif

View File

@ -0,0 +1,13 @@
#ifndef ONLINE_CONFIG_H
#define ONLINE_CONFIG_H
#define DEVICE_EVENT_FROM_CI_UART (('C' << 24) | ('I' << 16) | ('U' << 8) | '\0')
#define DEVICE_EVENT_FROM_CI_TWS (('C' << 24) | ('I' << 16) | ('T' << 8) | '\0')
#define CI_UART 0
#define CI_TWS 1
void ci_data_rx_handler(u8 type);
u32 eq_cfg_sync(u8 priority);
#endif

View File

@ -0,0 +1,39 @@
#ifndef APP_POWER_MANAGE_H
#define APP_POWER_MANAGE_H
#include "typedef.h"
#include "system/event.h"
#define LOW_POWER_SHUTDOWN 300 //低电直接关机电压-拔出不开机-开盖不开机
#define LOW_POWER_OFF_VAL 330 //低电关机电压
#define LOW_POWER_WARN_VAL 340 //低电提醒电压
#define LOW_POWER_WARN_TIME (60 * 1000) //低电提醒时间
#define DEVICE_EVENT_FROM_POWER (('P' << 24) | ('O' << 16) | ('W' << 8) | '\0')
enum {
POWER_EVENT_POWER_NORMAL,
POWER_EVENT_POWER_WARNING,
POWER_EVENT_POWER_LOW,
POWER_EVENT_POWER_CHANGE,
POWER_EVENT_SYNC_TWS_VBAT_LEVEL,
POWER_EVENT_POWER_CHARGE,
};
int app_power_event_handler(struct device_event *dev);
void check_power_on_voltage(void);
u16 get_vbat_level(void);
u8 get_vbat_percent(void);
void vbat_check_init(void);
void vbat_timer_update(u32 msec);
void vbat_timer_delete(void);
void tws_sync_bat_level(void);
u8 get_tws_sibling_bat_level(void);
u8 get_tws_sibling_bat_persent(void);
bool get_vbat_need_shutdown(void);
u8 get_self_battery_level(void);
void app_power_set_tws_sibling_bat_level(u8 vbat, u8 percent);
#endif

View File

@ -0,0 +1,6 @@
#ifndef CONFIG_APP_SD_MUSIC_H
#define CONFIG_APP_SD_MUSIC_H
int music_app_check(void);//music 在线检测 切换模式判断使用
#endif

View File

@ -0,0 +1,31 @@
#ifndef APP_TASK_H
#define APP_TASK_H
#include "typedef.h"
#define NULL_VALUE 0
enum {
APP_BT_TASK,
#if TCFG_APP_MUSIC_EN
APP_MUSIC_TASK,
#endif
#if TCFG_PC_ENABLE
APP_PC_TASK,
#endif
#if TCFG_APP_AUX_EN
APP_AUX_TASK,
#endif
};
extern u8 app_curr_task;
extern u8 app_next_task;
extern u8 app_prev_task;
int app_task_switch_check(u8 app_task);
int app_core_back_to_prev_app_over_check(void);
int app_task_switch_to(u8 app_task, int priv);
void app_task_switch_next(void);
void app_task_switch_prev(void);
u8 app_get_curr_task(void);
#endif

View File

@ -0,0 +1,18 @@
#ifndef _APP_TESTBOX_H_
#define _APP_TESTBOX_H_
#include "typedef.h"
#include "system/event.h"
extern void testbox_set_bt_init_ok(u8 flag);
extern u8 testbox_get_status(void);
extern void testbox_clear_status(void);
extern u8 testbox_get_ex_enter_dut_flag(void);
extern u8 testbox_get_ex_enter_storage_mode_flag(void);
extern u8 testbox_get_connect_status(void);
extern void testbox_clear_connect_status(void);
extern u8 testbox_get_keep_tws_conn_flag(void);
extern int app_testbox_event_handler(struct testbox_event *testbox_dev);
#endif //_APP_TESTBOX_H_

View File

@ -0,0 +1,50 @@
#ifndef _APP_UMIDIGI_CHARGESTORE_H_
#define _APP_UMIDIGI_CHARGESTORE_H_
#include "typedef.h"
#include "system/event.h"
#include "board_config.h"
/*******************************UMIDIGI充电舱数据包格式*****************************/
/*
* |<--1bit-->||<-------4bits----->||<--------------8bits------------>||<--1bit-->||<--1bits-->|
* |<-start-->||<-------CMD------->||<--------------DATA------------->|| crc_odd ||<--stop--->|
* | 14 || 13 | 12 | 11 | 10 || 9 | 8 | 7 | 6 | 5 | 4 | 3 | 2 || 1 || 0 |
*/
/*充电舱发送的命令列表*/
#define CMD_RESERVED_0 0x00 //reserved
#define CMD_FACTORY_RESET 0x01 //恢复出厂设置
#define CMD_RESERVED_2 0x02 //reserved
#define CMD_OPEN_CASE 0x03 //充电舱开盖
#define CMD_CLOSE_CASE 0x04 //充电舱关盖
#define CMD_ENTER_PAIRING_MODE 0x06 //进入配对模式
#define CMD_DUT_MODE_CMD 0x08 //进入DUT模式
#define CMD_USB_STATE 0x0A //USB状态
#define CMD_RESERVED_B 0x0B //reserved(RTK internal use)
#define CMD_SEND_CASE_BATTERY 0x0D //发送充电舱电量
/*message中的CMD与DATA位置用于从一个完整的数据包中截取CMD和DATA*/
/*CMD_IN_MESSAGE = 0xf000*/
#define CMD_IN_MESSAGE (BIT(13) | BIT(12) | BIT(11) | BIT(10))
/*DATA_IN_MESSAGE = 0x0ff0*/
#define DATA_IN_MESSAGE (BIT(9) | BIT(8) | BIT(7) | BIT(6) | BIT(5) | BIT(4) | BIT(3) | BIT(2))
void app_umidigi_chargetore_message_deal(u16 message);
extern u8 umidigi_chargestore_get_power_level(void); //获取充电舱电池电量
extern u8 umidigi_chargestore_get_power_status(void); //获取充电舱充电状态
extern u8 umidigi_chargestore_get_cover_status(void); //获取充电舱合盖或开盖状态
extern u8 umidigi_chargestore_get_earphone_online(void); //获取合盖状态时耳机在仓数量
extern void umidigi_chargestore_set_bt_init_ok(u8 flag); //获取蓝牙初始化成功标志位
extern u8 umidigi_chargestore_check_going_to_poweroff(void); //获取允许poweroff标志位
extern void umidigi_chargestore_set_phone_disconnect(void);
extern void umidigi_chargestore_set_phone_connect(void);
extern void umidigi_chargestore_set_sibling_chg_lev(u8 chg_lev);//设置对耳同步的充电舱电量
extern void umidigi_chargestore_set_power_level(u8 power); //设置充电舱电池电量
extern int umidigi_chargestore_sync_chg_level(void);
extern int app_umidigi_chargestore_event_handler(struct umidigi_chargestore_event *umidigi_chargestore_dev);
#endif

View File

@ -0,0 +1,69 @@
#ifndef __AUDIO_ENC_MPT_FRE_RESPONE_H_
#define __AUDIO_ENC_MPT_FRE_RESPONE_H_
#include "asm/cpu.h"
/********************用户配置****************************/
//计算长度 输入单位s16/输出单位float
#define AUDIO_ENC_MPT_FRERES_POINT 1024
/********************非用户配置****************************/
//MIC频响测试通道ID u16
#define AUDIO_ENC_MPT_FF_MIC 0X01 //测试TWS FFMIC or 头戴式LFF MIC
#define AUDIO_ENC_MPT_FB_MIC 0X02 //测试TWS FBMIC or 头戴式LFB MIC
#define AUDIO_ENC_MPT_RFF_MIC 0X04 //测试头戴式RFF MIC
#define AUDIO_ENC_MPT_RFB_MIC 0X08 //测试头戴式RFB MIC
#define AUDIO_ENC_MPT_CVP_OUT 0X10 //测试通话算法输出
#define AUDIO_ENC_MPT_TALK_MIC 0X20 //测试通话TALK 主MIC
#define AUDIO_ENC_MPT_SLAVE_MIC 0X40 //测试通话TALK 副MIC
#define AUDIO_ENC_MPT_TALK_FB_MIC 0X80 //测试通话TALK FBMIC
//常见通道组合
//FF+TALK+算法输出频响测试默认关闭DNS, 外部喇叭发声
#define AUDIO_ENC_MPT_CH_TWS_CVP_ENC (AUDIO_ENC_MPT_SLAVE_MIC | AUDIO_ENC_MPT_TALK_MIC | AUDIO_ENC_MPT_CVP_OUT)
//FF回声/气密性+FB频响测试耳机喇叭发声
#define AUDIO_ENC_MPT_CH_TWS_FF_FB (AUDIO_ENC_MPT_FF_MIC | AUDIO_ENC_MPT_FB_MIC)
#define AUDIO_ENC_MPT_FRERES_ASYNC 1 //是否异步处理, 异步算不过来要加时钟提醒
enum {
ENC_FRE_RES_STATE_START = 0,
ENC_FRE_RES_STATE_RUN,
ENC_FRE_RES_STATE_STOP,
};
enum {
ENC_FRE_RESPONE_MSG_RUN = 0xA1,
};
//更新目标通道输入buf、len
void audio_enc_mpt_fre_response_inbuf(u16 id, s16 *buf, int len);
//音频测试频响计算运行
void audio_enc_mpt_fre_response_post_run(u16 id);
//音频测试频响计算启动, ch 对应目标的通道
void audio_enc_mpt_fre_response_start(u16 ch);
//音频测试频响计算停止
void audio_enc_mpt_fre_response_stop(void);
//工具获取数据文件
int audio_enc_mpt_fre_response_file_get(u8 **buf);
//数据获取结束,释放内存
void audio_enc_mpt_fre_response_release(void);
//音频测试MIC频响开启 ch 对应目标的通道
void audio_enc_mpt_fre_response_open(u16 ch);
//音频测试MIC频响关闭
void audio_enc_mpt_fre_response_close(void);
#endif /*__AUDIO_ENC_MPT_FRE_RESPONE_H_*/

View File

@ -0,0 +1,43 @@
#ifndef BT_BACKGROUND_H
#define BT_BACKGROUND_H
#include "generic/typedef.h"
bool bt_in_background();
void bt_switch_to_foreground(int action, bool exit_curr_app);
int bt_switch_to_background();
void bt_stop_a2dp_slience_detect();
void bt_start_a2dp_slience_detect(int ingore_packet_num);
int bt_background_event_probe_handler(struct bt_event *bt);
#endif

View File

@ -0,0 +1,48 @@
#ifndef APP_BT_BLE_H
#define APP_BT_BLE_H
#include "typedef.h"
// #define ADV_RSP_PACKET_MAX 31
#define ADV_RAND_MAX 7
// typedef struct {
// u16 pid; //厂家id默认用杰理的id (0x5d6)
// u8 private_data[17];//厂家自定义数据内容
// } manufacturer_data_t;
enum {
ICON_TYPE_INQUIRY = 0,
ICON_TYPE_CONNECTED,
ICON_TYPE_RECONNECT,
ICON_TYPE_PRE_DEV,
};
enum {
ADV_ST_NULL,
ADV_ST_PRE1,
ADV_ST_PRE2,
ADV_ST_INQUIRY,
ADV_ST_CONN,
ADV_ST_RECONN,
ADV_ST_DISMISS,
ADV_ST_FAST_DISMISS,
ADV_ST_END,
};
extern void bt_ble_icon_set(u8 *info, u8 len);
extern u8 bt_ble_get_adv_enable(void);
extern void bt_ble_icon_open(u8 type);
extern void bt_ble_icon_close(u8 dismiss_flag);
extern void bt_ble_icon_set_comm_address(u8 *addr);
extern void bt_ble_icon_reset(void);
extern void bt_ble_set_control_en(u8 en);
extern void bt_ble_icon_slave_en(u8 en);
extern u8 bt_ble_icon_get_adv_state(void);
extern void bt_ble_icon_role_switch(u8 role);
extern void bt_ble_icon_state_sniff(u8 state);
#endif

View File

@ -0,0 +1,26 @@
#ifndef _BT_EMITTER_H
#define _BT_EMITTER_H
extern void bt_search_device(void);
extern void emitter_search_noname(u8 status, u8 *addr, u8 *name);
extern u8 bt_emitter_stu_set(u8 *addr, u8 on);
extern u8 bt_emitter_stu_get(void);
extern int bt_emitter_mic_open(void);
extern void bt_emitter_mic_close(void);
extern int bt_emitter_iis_open(void);
extern void bt_emitter_iis_close(void);
extern void emitter_media_source(u8 *addr, u8 source, u8 en);
extern u8 emitter_search_result(char *name, u8 name_len, u8 *addr, u32 dev_class, char rssi);
extern void emitter_search_stop(u8 result);
extern void emitter_media_source(u8 *addr, u8 source, u8 en);
extern void bt_emitter_receiver_sw();
extern u8 bt_emitter_pp(u8 pp);
extern void emitter_or_receiver_switch(u8 flag);
extern u8 bt_emitter_role_get();
extern void bt_emitter_start_search_device();
extern void bt_emitter_stop_search_device();
extern void emitter_open(u8 source);
extern void emitter_close(u8 source);
#endif

View File

@ -0,0 +1,194 @@
#ifndef APP_BT_TWS_H
#define APP_BT_TWS_H
#include "classic/tws_api.h"
#include "classic/tws_event.h"
#include "system/includes.h"
#define TWS_FUNC_ID_VOL_SYNC TWS_FUNC_ID('V', 'O', 'L', 'S')
#define TWS_FUNC_ID_VBAT_SYNC TWS_FUNC_ID('V', 'B', 'A', 'T')
#define TWS_FUNC_ID_CHARGE_SYNC TWS_FUNC_ID('C', 'H', 'G', 'S')
#define TWS_FUNC_ID_BOX_SYNC TWS_FUNC_ID('B', 'O', 'X', 'S')
#define TWS_FUNC_ID_AI_DMA_RAND TWS_FUNC_ID('A', 'I', 'D', 'M')
#define TWS_FUNC_ID_AI_SPEECH_STOP TWS_FUNC_ID('A', 'I', 'S', 'T')
#define TWS_FUNC_ID_APP_MODE TWS_FUNC_ID('M', 'O', 'D', 'E')
#define TWS_FUNC_ID_AI_SYNC TWS_FUNC_ID('A', 'I', 'P', 'A')
#define TWS_FUNC_ID_EAR_DETECT_SYNC TWS_FUNC_ID('E', 'D', 'E', 'T')
#define TWS_FUNC_ID_LL_SYNC_STATE TWS_FUNC_ID('L', 'L', 'S', 'S')
#define TWS_FUNC_ID_TUYA_STATE TWS_FUNC_ID('T', 'U', 'Y', 'A')
enum {
DEBUG_LINK_PAGE_STATE = 0,
DEBUG_LINK_INQUIRY_STATE,
DEBUG_LINK_PAGE_SCAN_STATE,
DEBUG_LINK_INQUIRY_SCAN_STATE,
DEBUG_LINK_CONNECTION_STATE,
DEBUG_LINK_PAGE_TWS_STATE,
DEBUG_LINK_PAGE_SCAN_TWS_STATE,
};
enum {
BT_TWS_STATUS_INIT_OK = 1,
BT_TWS_STATUS_SEARCH_START,
BT_TWS_STATUS_SEARCH_TIMEOUT,
BT_TWS_STATUS_PHONE_CONN,
BT_TWS_STATUS_PHONE_DISCONN,
};
enum {
SYNC_TONE_TWS_CONNECTED = 1,
SYNC_TONE_PHONE_CONNECTED,
SYNC_TONE_PHONE_DISCONNECTED,
SYNC_TONE_PHONE_NUM,
SYNC_TONE_PHONE_RING,
SYNC_TONE_PHONE_NUM_RING,
SYNC_TONE_MAX_VOL,
SYNC_TONE_POWER_OFF,
SYNC_TONE_ANC_ON,
SYNC_TONE_ANC_OFF,
SYNC_TONE_ANC_TRANS,
SYNC_TONE_EARDET_IN,
SYNC_TONE_VOICE_RECOGNIZE,
SYNC_TONE_HEARING_AID_OPEN,
SYNC_TONE_DHA_FITTING_CLOSE,
SYNC_TONE_ICSD_ADT_SUSPEND,
SYNC_TONE_ICSD_ADT_VOICE_STATE,
SYNC_TONE_ICSD_ADT_OPEN,
};
enum {
SYNC_LED_STA_TWS_CONN,
SYNC_LED_STA_PHONE_CONN,
SYNC_LED_STA_PHONE_DISCONN,
};
enum {
SYNC_CMD_SHUT_DOWN_TIME,
SYNC_CMD_POWER_OFF_TOGETHER,
SYNC_CMD_LOW_LATENCY_ENABLE,
SYNC_CMD_LOW_LATENCY_DISABLE,
SYNC_CMD_EARPHONE_CHAREG_START,
SYNC_CMD_IRSENSOR_EVENT_NEAR,
SYNC_CMD_IRSENSOR_EVENT_FAR,
#if(USE_DMA_TONE)
SYNC_CMD_CUT_TWS_TONE, //断开对耳提示音
SYNC_CMD_START_SPEECH_TONE,//AI键提示音
SYNC_CMD_DMA_CONNECTED_ALL_FINISH_TONE, //AI连接成功
SYNC_CMD_NEED_BT_TONE, //需要连接蓝牙
SYNC_CMD_PLEASE_OPEN_XIAODU_TONE,//请打开小度
#endif
#if(RCSP_ADV_EN)
SYNC_CMD_SYNC_ADV_SETTING,
SYNC_CMD_ADV_COMMON_SETTING_SYNC,
SYNC_CMD_APP_RESET_LED_UI,
SYNC_CMD_MUSIC_INFO,
SYNC_CMD_RCSP_AUTH_RES,
SYNC_CMD_MUSIC_PLAYER_STATE,
SYNC_CMD_MUSIC_PLAYER_TIEM_EN,
#endif
SYNC_CMD_OPUS_CLOSE,
};
enum {
TWS_SYNC_VOL = 0,
TWS_SYNC_VBAT,
TWS_SYNC_CHG,
TWS_SYNC_CALL_VOL,
TWS_SYNC_PBG_INFO,
TWS_SYNC_ADSP_UART_CMD,
TWS_APP_DATA_SEND,
TWS_AI_DMA_RAND,
TWS_DATA_SEND,
TWS_UPDATE_START,
TWS_UPDATE_RESULT_EXCHANGE,
TWS_UPDATE_RESULT_EXCHANGE_RES,
TWS_UPDATE_OVER,
TWS_UPDATE_OVER_CONFIRM,
TWS_UPDATE_OVER_CONFIRM_REQ,
TWS_UPDATE_OVER_CONFIRM_RES,
TWS_UPDATE_VERIFY,
TWS_AI_A2DP_DROP_FRAME_CTL,
};
struct tws_sync_info_t {
u8 type;
union {
s8 volume_lev;
u16 vbat_lev;
u8 chg_lev;
u8 adsp_cmd[2];
u8 conn_type;
u8 data[9];
u8 data_large[32];
} u;
};
struct tws_sync_big_info_t {
u8 type;
u8 sub_type;
union {
u8 pbg_info[36];
} u;
};
typedef struct time_stamp_bt_name {
u8 bt_name[32];
u32 time_stamp;
} tws_time_stamp_bt_name;
#define TWS_WAIT_CONN_TIMEOUT (400)
#define TWS_SYNC_TIME_DO 400
// #define TWS_CON_SUPER_TIMEOUT 8000
#define TWS_CON_SEARCH_TIMEOUT 0x07//(n*1.28s)
char bt_tws_get_local_channel();
int bt_tws_connction_status_event_handler(struct bt_event *evt);
int bt_tws_poweron();
int bt_tws_poweroff();
int bt_tws_start_search_sibling();
void bt_tws_hci_event_connect();
bool get_tws_phone_connect_state(void);
int bt_tws_phone_connected();
void bt_tws_phone_page_timeout();
void bt_tws_phone_connect_timeout();
void bt_tws_phone_disconnected();
int bt_tws_sync_phone_num(void *priv);
int bt_tws_sync_led_status();
int get_bt_tws_connect_status();
u8 get_bt_tws_discon_dly_state();
void bt_tws_sync_volume();
u8 tws_network_audio_was_started(void);
void tws_network_local_audio_start(void);
u32 bt_tws_future_slot_time(u32 msecs);
void bt_tws_play_tone_at_same_time(int tone_name, int msec);
void bt_tws_led_state_sync(int led_state, int msec);
bool get_tws_sibling_connect_state(void);
void tws_cancle_all_noconn();
void tws_sniff_controle_check_enable(void);
void tws_sniff_controle_check_disable(void);
#endif

View File

@ -0,0 +1,41 @@
#ifndef DEFAULT_EVENT_HANDLER_H
#define DEFAULT_EVENT_HANDLER_H
#include "system/includes.h"
void default_event_handler(struct sys_event *event);
#endif

View File

@ -0,0 +1,272 @@
#ifndef EARPHONE_H
#define EARPHONE_H
#include "system/includes.h"
///搜索完整结束的事件
#define HCI_EVENT_INQUIRY_COMPLETE 0x01
///连接完成的事件
#define HCI_EVENT_CONNECTION_COMPLETE 0x03
///断开的事件,会有一些错误码区分不同情况的断开
#define HCI_EVENT_DISCONNECTION_COMPLETE 0x05
///连接中请求pin code的事件,给这个事件上来目前是做了一个确认的操作
#define HCI_EVENT_PIN_CODE_REQUEST 0x16
///连接设备发起了简易配对加密的连接
#define HCI_EVENT_IO_CAPABILITY_REQUEST 0x31
///这个事件上来目前是做了一个连接确认的操作
#define HCI_EVENT_USER_CONFIRMATION_REQUEST 0x33
///这个事件是需要输入6个数字的连接消息一般在键盘应用才会有
#define HCI_EVENT_USER_PASSKEY_REQUEST 0x34
///<可用于显示输入passkey位置 value 0:start 1:enrer 2:earse 3:clear 4:complete
#define HCI_EVENT_USER_PRESSKEY_NOTIFICATION 0x3B
///杰理自定义的事件上电回连的时候读不到VM的地址。
#define HCI_EVENT_VENDOR_NO_RECONN_ADDR 0xF8
///杰理自定义的事件,有测试盒连接的时候会有这个事件
#define HCI_EVENT_VENDOR_REMOTE_TEST 0xFE
///杰理自定义的事件,可以认为是断开之后协议栈资源释放完成的事件
#define BTSTACK_EVENT_HCI_CONNECTIONS_DELETE 0x6D
#define ERROR_CODE_SUCCESS 0x00
///<回连超时退出消息
#define ERROR_CODE_PAGE_TIMEOUT 0x04
///<连接过程中linkkey错误
#define ERROR_CODE_AUTHENTICATION_FAILURE 0x05
///<连接过程中linkkey丢失手机删除了linkkey回连就会出现一次
#define ERROR_CODE_PIN_OR_KEY_MISSING 0x06
///<连接超时,一般拿远就会断开有这个消息
#define ERROR_CODE_CONNECTION_TIMEOUT 0x08
///<连接个数超出了资源允许
#define ERROR_CODE_SYNCHRONOUS_CONNECTION_LIMIT_TO_A_DEVICE_EXCEEDED 0x0A
///<回连的时候发现设备还没释放我们这个地址,一般直接断电开机回连会出现
#define ERROR_CODE_ACL_CONNECTION_ALREADY_EXISTS 0x0B
///<需要回连的设备资源不够。有些手机连了一个设备之后就会用这个拒绝。或者其它的资源原因
#define ERROR_CODE_CONNECTION_REJECTED_DUE_TO_LIMITED_RESOURCES 0x0D
///<有些可能只允许指定地址连接的可能会用这个去拒绝连接。或者我们设备的地址全0或者有问题
#define ERROR_CODE_CONNECTION_REJECTED_DUE_TO_UNACCEPTABLE_BD_ADDR 0x0F
///<连接的时间太长了,手机要断开了。这种容易复现可以联系我们分析
#define ERROR_CODE_CONNECTION_ACCEPT_TIMEOUT_EXCEEDED 0x10
///<经常用的连接断开消息。就认为断开就行
#define ERROR_CODE_REMOTE_USER_TERMINATED_CONNECTION 0x13
///<正常的断开消息本地L2CAP资源释放之后就会发这个值上来了
#define ERROR_CODE_CONNECTION_TERMINATED_BY_LOCAL_HOST 0x16
///<回连的时候发现设备两次role switch失败了发断开在重新连接
#define ERROR_CODE_ROLE_SWITCH_FAILED 0x35
///杰理自定义在回连的过程中使用page cancel命令主动取消成功会有这个命令
#define CUSTOM_BB_AUTO_CANCEL_PAGE 0xFD //// app cancle page
///杰理自定义库里面有些功能需要停止page的时候会有。比如page的时候来了电话
#define BB_CANCEL_PAGE 0xFE //// bb cancle page
#if (TCFG_USER_BLE_ENABLE && (CONFIG_BT_MODE == BT_NORMAL))
#if RCSP_ADV_EN
int rcsp_earphone_state_init();
int rcsp_earphone_state_set_page_scan_enable();
int rcsp_earphone_state_get_connect_mac_addr();
int rcsp_earphone_state_cancel_page_scan();
int rcsp_earphone_state_enter_soft_poweroff();
int rcsp_earphone_state_tws_init(int paired);
int rcsp_earphone_state_tws_connected(int first_pair, u8 *comm_addr);
int rcsp_sys_event_handler_specific(struct sys_event *event);
#define EARPHONE_STATE_INIT() rcsp_earphone_state_init()
#define EARPHONE_STATE_SET_PAGE_SCAN_ENABLE() rcsp_earphone_state_set_page_scan_enable()
#define EARPHONE_STATE_GET_CONNECT_MAC_ADDR() rcsp_earphone_state_get_connect_mac_addr()
#define EARPHONE_STATE_CANCEL_PAGE_SCAN() rcsp_earphone_state_cancel_page_scan()
#define EARPHONE_STATE_ENTER_SOFT_POWEROFF() rcsp_earphone_state_enter_soft_poweroff()
#define EARPHONE_STATE_TWS_INIT(a) rcsp_earphone_state_tws_init(a)
#define EARPHONE_STATE_TWS_CONNECTED(a, b) rcsp_earphone_state_tws_connected(a,b)
#define SYS_EVENT_HANDLER_SPECIFIC(a) rcsp_sys_event_handler_specific(a)
#define SYS_EVENT_REMAP(a) 0
#define EARPHONE_STATE_SNIFF(a)
#define EARPHONE_STATE_ROLE_SWITCH(a)
#elif TRANS_DATA_EN
int trans_data_earphone_state_init();
int trans_data_earphone_state_set_page_scan_enable();
int trans_data_earphone_state_get_connect_mac_addr();
int trans_data_earphone_state_cancel_page_scan();
int trans_data_earphone_state_enter_soft_poweroff();
int trans_data_earphone_state_tws_init(int paired);
int trans_data_earphone_state_tws_connected(int first_pair, u8 *comm_addr);
int trans_data_sys_event_handler_specific(struct sys_event *event);
#define EARPHONE_STATE_INIT() trans_data_earphone_state_init()
#define EARPHONE_STATE_SET_PAGE_SCAN_ENABLE() trans_data_earphone_state_set_page_scan_enable()
#define EARPHONE_STATE_GET_CONNECT_MAC_ADDR() trans_data_earphone_state_get_connect_mac_addr()
#define EARPHONE_STATE_CANCEL_PAGE_SCAN() trans_data_earphone_state_cancel_page_scan()
#define EARPHONE_STATE_ENTER_SOFT_POWEROFF() trans_data_earphone_state_enter_soft_poweroff()
#define EARPHONE_STATE_TWS_INIT(a) trans_data_earphone_state_tws_init(a)
#define EARPHONE_STATE_TWS_CONNECTED(a, b) trans_data_earphone_state_tws_connected(a,b)
#define SYS_EVENT_HANDLER_SPECIFIC(a) trans_data_sys_event_handler_specific(a)
#define SYS_EVENT_REMAP(a) 0
#define EARPHONE_STATE_SNIFF(a)
#define EARPHONE_STATE_ROLE_SWITCH(a)
#elif BLE_HID_EN
int ble_hid_earphone_state_init();
int ble_hid_earphone_state_set_page_scan_enable();
int ble_hid_earphone_state_get_connect_mac_addr();
int ble_hid_earphone_state_cancel_page_scan();
int ble_hid_earphone_state_enter_soft_poweroff();
int ble_hid_earphone_state_tws_init(int paired);
int ble_hid_earphone_state_tws_connected(int first_pair, u8 *comm_addr);
int ble_hid_sys_event_handler_specific(struct sys_event *event);
#define EARPHONE_STATE_INIT() ble_hid_earphone_state_init()
#define EARPHONE_STATE_SET_PAGE_SCAN_ENABLE() ble_hid_earphone_state_set_page_scan_enable()
#define EARPHONE_STATE_GET_CONNECT_MAC_ADDR() ble_hid_earphone_state_get_connect_mac_addr()
#define EARPHONE_STATE_CANCEL_PAGE_SCAN() ble_hid_earphone_state_cancel_page_scan()
#define EARPHONE_STATE_ENTER_SOFT_POWEROFF() ble_hid_earphone_state_enter_soft_poweroff()
#define EARPHONE_STATE_TWS_INIT(a) ble_hid_earphone_state_tws_init(a)
#define EARPHONE_STATE_TWS_CONNECTED(a, b) ble_hid_earphone_state_tws_connected(a,b)
#define SYS_EVENT_HANDLER_SPECIFIC(a) ble_hid_sys_event_handler_specific(a)
#define SYS_EVENT_REMAP(a) 0
#define EARPHONE_STATE_SNIFF(a)
#define EARPHONE_STATE_ROLE_SWITCH(a)
#elif LL_SYNC_EN
int ll_sync_earphone_state_init();
int ll_sync_earphone_state_set_page_scan_enable();
int ll_sync_earphone_state_get_connect_mac_addr();
int ll_sync_earphone_state_cancel_page_scan();
int ll_sync_earphone_state_enter_soft_poweroff();
int ll_sync_earphone_state_tws_init(int paired);
int ll_sync_earphone_state_tws_connected(int first_pair, u8 *comm_addr);
int ll_sync_sys_event_handler_specific(struct sys_event *event);
#define EARPHONE_STATE_INIT() ll_sync_earphone_state_init()
#define EARPHONE_STATE_SET_PAGE_SCAN_ENABLE() ll_sync_earphone_state_set_page_scan_enable()
#define EARPHONE_STATE_GET_CONNECT_MAC_ADDR() ll_sync_earphone_state_get_connect_mac_addr()
#define EARPHONE_STATE_CANCEL_PAGE_SCAN() ll_sync_earphone_state_cancel_page_scan()
#define EARPHONE_STATE_ENTER_SOFT_POWEROFF() ll_sync_earphone_state_enter_soft_poweroff()
#define EARPHONE_STATE_TWS_INIT(a) ll_sync_earphone_state_tws_init(a)
#define EARPHONE_STATE_TWS_CONNECTED(a, b) ll_sync_earphone_state_tws_connected(a,b)
#define SYS_EVENT_HANDLER_SPECIFIC(a) ll_sync_sys_event_handler_specific(a)
#define SYS_EVENT_REMAP(a) 0
#define EARPHONE_STATE_SNIFF(a)
#define EARPHONE_STATE_ROLE_SWITCH(a)
#elif TUYA_DEMO_EN
int tuya_earphone_state_init();
int tuya_earphone_state_set_page_scan_enable();
int tuya_earphone_state_get_connect_mac_addr();
int tuya_earphone_state_cancel_page_scan();
int tuya_earphone_state_enter_soft_poweroff();
int tuya_earphone_state_tws_init(int paired);
int tuya_earphone_state_tws_connected(int first_pair, u8 *comm_addr);
int tuya_sys_event_handler_specific(struct sys_event *event);
#define EARPHONE_STATE_INIT() tuya_earphone_state_init()
#define EARPHONE_STATE_SET_PAGE_SCAN_ENABLE() tuya_earphone_state_set_page_scan_enable()
#define EARPHONE_STATE_GET_CONNECT_MAC_ADDR() tuya_earphone_state_get_connect_mac_addr()
#define EARPHONE_STATE_CANCEL_PAGE_SCAN() tuya_earphone_state_cancel_page_scan()
#define EARPHONE_STATE_ENTER_SOFT_POWEROFF() tuya_earphone_state_enter_soft_poweroff()
#define EARPHONE_STATE_TWS_INIT(a) tuya_earphone_state_tws_init(a)
#define EARPHONE_STATE_TWS_CONNECTED(a, b) tuya_earphone_state_tws_connected(a,b)
#define SYS_EVENT_HANDLER_SPECIFIC(a) tuya_sys_event_handler_specific(a)
#define SYS_EVENT_REMAP(a) 0
#define EARPHONE_STATE_SNIFF(a)
#define EARPHONE_STATE_ROLE_SWITCH(a)
#elif (AI_APP_PROTOCOL | LE_AUDIO_EN)
int app_protocol_sys_event_handler(struct sys_event *event);
#define EARPHONE_STATE_INIT() do { } while(0)
#define EARPHONE_STATE_SET_PAGE_SCAN_ENABLE() do { } while(0)
#define EARPHONE_STATE_GET_CONNECT_MAC_ADDR() do { } while(0)
#define EARPHONE_STATE_CANCEL_PAGE_SCAN() do { } while(0)
#define EARPHONE_STATE_ENTER_SOFT_POWEROFF() do { } while(0)
#define EARPHONE_STATE_TWS_INIT(a) do { } while(0)
#define EARPHONE_STATE_TWS_CONNECTED(a, b) do { } while(0)
#define SYS_EVENT_HANDLER_SPECIFIC(a) app_protocol_sys_event_handler(a)
#define SYS_EVENT_REMAP(a) 0
#define EARPHONE_STATE_SNIFF(a)
#define EARPHONE_STATE_ROLE_SWITCH(a)
#elif TCFG_WIRELESS_MIC_ENABLE
#define EARPHONE_STATE_INIT() do { } while(0)
#define EARPHONE_STATE_SET_PAGE_SCAN_ENABLE() do { } while(0)
#define EARPHONE_STATE_GET_CONNECT_MAC_ADDR() do { } while(0)
#define EARPHONE_STATE_CANCEL_PAGE_SCAN() do { } while(0)
#define EARPHONE_STATE_ENTER_SOFT_POWEROFF() do { } while(0)
#define EARPHONE_STATE_TWS_INIT(a) do { } while(0)
#define EARPHONE_STATE_TWS_CONNECTED(a, b) do { } while(0)
#define SYS_EVENT_HANDLER_SPECIFIC(a) do { } while(0)
#define SYS_EVENT_REMAP(a) 0
#define EARPHONE_STATE_SNIFF(a)
#define EARPHONE_STATE_ROLE_SWITCH(a)
#else
int adv_earphone_state_init();
int adv_earphone_state_set_page_scan_enable();
int adv_earphone_state_get_connect_mac_addr();
int adv_earphone_state_cancel_page_scan();
int adv_earphone_state_enter_soft_poweroff();
int adv_earphone_state_tws_init(int paired);
int adv_earphone_state_tws_connected(int first_pair, u8 *comm_addr);
int adv_sys_event_handler_specific(struct sys_event *event);
int adv_earphone_state_sniff(u8 state);
int adv_earphone_state_role_switch(u8 role);
#define EARPHONE_STATE_INIT() adv_earphone_state_init()
#define EARPHONE_STATE_SET_PAGE_SCAN_ENABLE() adv_earphone_state_set_page_scan_enable()
#define EARPHONE_STATE_GET_CONNECT_MAC_ADDR() adv_earphone_state_get_connect_mac_addr()
#define EARPHONE_STATE_CANCEL_PAGE_SCAN() adv_earphone_state_cancel_page_scan()
#define EARPHONE_STATE_ENTER_SOFT_POWEROFF() adv_earphone_state_enter_soft_poweroff()
#define EARPHONE_STATE_TWS_INIT(a) adv_earphone_state_tws_init(a)
#define EARPHONE_STATE_TWS_CONNECTED(a, b) adv_earphone_state_tws_connected(a,b)
#define SYS_EVENT_HANDLER_SPECIFIC(a) adv_sys_event_handler_specific(a)
#define SYS_EVENT_REMAP(a) 0
#define EARPHONE_STATE_SNIFF(a) adv_earphone_state_sniff(a)
#define EARPHONE_STATE_ROLE_SWITCH(a) adv_earphone_state_role_switch(a)
#endif
#else
#define EARPHONE_STATE_INIT() do { } while(0)
#define EARPHONE_STATE_SET_PAGE_SCAN_ENABLE() do { } while(0)
#define EARPHONE_STATE_GET_CONNECT_MAC_ADDR() do { } while(0)
#define EARPHONE_STATE_CANCEL_PAGE_SCAN() do { } while(0)
#define EARPHONE_STATE_ENTER_SOFT_POWEROFF() do { } while(0)
#define EARPHONE_STATE_TWS_INIT(a) do { } while(0)
#define EARPHONE_STATE_TWS_CONNECTED(a, b) do { } while(0)
#define SYS_EVENT_HANDLER_SPECIFIC(a) do { } while(0)
#define SYS_EVENT_REMAP(a) 0
#define EARPHONE_STATE_SNIFF(a)
#define EARPHONE_STATE_ROLE_SWITCH(a)
#endif
extern void sys_auto_shut_down_enable(void);
extern void sys_auto_shut_down_disable(void);
extern int bt_in_background_event_handler(struct sys_event *event);
extern u8 bt_app_exit_check(void);
#endif

View File

@ -0,0 +1,100 @@
#ifndef __KEY_EVENT_DEAL_H__
#define __KEY_EVENT_DEAL_H__
#include "typedef.h"
#include "bt_profile_cfg.h"
#include "system/event.h"
enum {
KEY_POWER_ON = KEY_EVENT_MAX,
KEY_POWEROFF,
KEY_POWEROFF_HOLD,
KEY_MUSIC_PP,
KEY_MUSIC_PREV,
KEY_MUSIC_NEXT,
KEY_VOL_UP,
KEY_VOL_DOWN,
KEY_CALL_LAST_NO,
KEY_CALL_HANG_UP,
KEY_CALL_ANSWER,
KEY_CALL_ANSWER_UP,
KEY_OPEN_SIRI,
KEY_HID_CONTROL,
KEY_LOW_LANTECY,
KEY_MODE_SWITCH,
KEY_EQ_MODE,
KEY_THIRD_CLICK,
KEY_MUSIC_FF,
KEY_MUSIC_FR,
KEY_MUSIC_PLAYER_START,
KEY_MUSIC_PLAYER_END,
KEY_MUSIC_PLAYER_DEC_ERR,
KEY_MUSIC_DEVICE_TONE_END,
KEY_MUSIC_PLAYER_QUIT,
KEY_MUSIC_PLAYER_AUTO_NEXT,
KEY_MUSIC_PLAYER_PLAY_FIRST,
KEY_MUSIC_PLAYER_PLAY_LAST,
KEY_MUSIC_CHANGE_REPEAT,
KEY_MUSIC_CHANGE_DEV,
KEY_MUSIC_AUTO_NEXT_DEV,
KEY_MUSIC_CHANGE_DEV_REPEAT,
KEY_MUSIC_SET_PITCH,
KEY_MUSIC_SET_SPEED,
KEY_MUSIC_PLAYE_BY_DEV_FILENUM,
KEY_MUSIC_PLAYE_BY_DEV_SCLUST,
KEY_MUSIC_PLAYE_BY_DEV_PATH,
KEY_MUSIC_DELETE_FILE,
KEY_MUSIC_PLAYE_NEXT_FOLDER,
KEY_MUSIC_PLAYE_PREV_FOLDER,
KEY_MUSIC_PLAYE_REC_FOLDER_SWITCH,
KEY_MUSIC_PLAYER_AB_REPEAT_SWITCH,
KEY_SEND_SPEECH_START,
KEY_SEND_SPEECH_STOP,
#if (BT_FOR_APP_EN)
KEY_AI_DEC_SUSPEND,
KEY_AI_DEC_RESUME,
#endif
KEY_EARTCH_ENABLE,
KEY_EARTCH_DISABLE,
KEY_ANC_SWITCH,
KEY_ANC_EAR_ADAPTIVE,
KEY_ANC_COEFF_SWITCH,
KEY_MUSIC_EFF, //播歌音效切换
KEY_PHONE_PITCH,//通话上行 变声切换
KEY_HEARING_AID_TOGGLE,//辅听功能开关
MSG_HALF_SECOND,
KEY_CLEAN_PHONE_INFO,
KEY_CLEAN_PHONE_INFO_HOLD,
KEY_CLEAN_PHONE_INFO_UP,
KEY_SPATIAL_EFFECT_MODE_SWITCH, /*切换空间音频模式*/
KEY_SPEAK_TO_CHAT_SWITCH, /*智能免摘开关*/
KEY_WIND_NOISE_DET_SWITCH, /*风噪检测开关*/
KEY_WIDE_AREA_TAP_SWITCH, /*广域点击开关*/
KEY_ANC_MULT_SCENE_SWITCH, /*多滤波器切换demo*/
KEY_NULL = 0xFF,
};
enum {
ONE_KEY_CTL_NEXT_PREV = 1,
ONE_KEY_CTL_VOL_UP_DOWN,
};
enum {
EARTCH_STATE_IN,
EARTCH_STATE_OUT,
EARTCH_STATE_TRIM_OK,
EARTCH_STATE_TRIM_ERR,
};
extern void volume_up(u8 inc);
extern void volume_down(u8 inc);
extern int app_earphone_key_event_handler(struct sys_event *);
#endif

View File

@ -0,0 +1,31 @@
#ifndef PBG_USER_H_
#define PBG_USER_H_
#include "typedef.h"
#include "key_event_deal.h"
enum {
PBG_POS_IN_EAR = 0, //入耳
PBG_POS_OUT_BOX, //出仓
PBG_POS_IN_BOX, //在仓
PBG_POS_NOT_EXIST, //不在线
PBG_POS_KEEP_NOW = 0x0f, //维持,不改变
PBG_POS_MAX, //
};
#define BD_ADDR_LEN 6
typedef uint8_t bd_addr_t[BD_ADDR_LEN];
void pbg_user_set_tws_state(u8 conn_flag);
void pbg_user_recieve_sync_info(u8 *sync_info);
void pbg_user_mic_fixed_deal(u8 mode);
void pbg_user_event_deal(struct pbg_event *evt);
bool pbg_user_key_vaild(u8 *key_msg, struct sys_event *event);
void pbg_user_ear_pos_sync(u8 left, u8 right);
void pbg_user_battery_level_sync(u8 *dev_bat);
int pbg_user_is_connected(void);
#endif

View File

@ -0,0 +1,157 @@
#ifndef TONE_PLAYER_H
#define TONE_PLAYER_H
#include "app_config.h"
#include "tone_player_api.h"
#define TONE_NUM_0 SDFILE_RES_ROOT_PATH"tone/0.*"
#define TONE_NUM_1 SDFILE_RES_ROOT_PATH"tone/1.*"
#define TONE_NUM_2 SDFILE_RES_ROOT_PATH"tone/2.*"
#define TONE_NUM_3 SDFILE_RES_ROOT_PATH"tone/3.*"
#define TONE_NUM_4 SDFILE_RES_ROOT_PATH"tone/4.*"
#define TONE_NUM_5 SDFILE_RES_ROOT_PATH"tone/5.*"
#define TONE_NUM_6 SDFILE_RES_ROOT_PATH"tone/6.*"
#define TONE_NUM_7 SDFILE_RES_ROOT_PATH"tone/7.*"
#define TONE_NUM_8 SDFILE_RES_ROOT_PATH"tone/8.*"
#define TONE_NUM_9 SDFILE_RES_ROOT_PATH"tone/9.*"
#define TONE_BT_MODE SDFILE_RES_ROOT_PATH"tone/bt.*"
#define TONE_BT_CONN SDFILE_RES_ROOT_PATH"tone/bt_conn.*"
#define TONE_BT_DISCONN SDFILE_RES_ROOT_PATH"tone/bt_dconn.*"
#define TONE_TWS_CONN SDFILE_RES_ROOT_PATH"tone/tws_conn.*"
#define TONE_TWS_DISCONN SDFILE_RES_ROOT_PATH"tone/tws_dconn.*"
#define TONE_LOW_POWER SDFILE_RES_ROOT_PATH"tone/low_power.*"
#define TONE_POWER_OFF SDFILE_RES_ROOT_PATH"tone/power_off.*"
#define TONE_POWER_ON SDFILE_RES_ROOT_PATH"tone/power_on.*"
#define TONE_RING SDFILE_RES_ROOT_PATH"tone/ring.*"
#define TONE_MAX_VOL SDFILE_RES_ROOT_PATH"tone/vol_max.*"
#define TONE_ANC_OFF SDFILE_RES_ROOT_PATH"tone/anc_off.*"
#define TONE_ANC_ON SDFILE_RES_ROOT_PATH"tone/anc_on.*"
#define TONE_TRANSPARENCY SDFILE_RES_ROOT_PATH"tone/anc_trans.*"
#define TONE_ANC_ADAPTIVE SDFILE_RES_ROOT_PATH"tone/adaptive.*"
#define TONE_ANC_ADAPTIVE_COEFF SDFILE_RES_ROOT_PATH"tone/adap_coeff.*"
#define TONE_ANC_NORMAL_COEFF SDFILE_RES_ROOT_PATH"tone/nor_coeff.*"
#define TONE_EAR_CHECK SDFILE_RES_ROOT_PATH"tone/ear_check.*"
#define TONE_MUSIC_MODE SDFILE_RES_ROOT_PATH"tone/music.*"
#define TONE_PC_MODE SDFILE_RES_ROOT_PATH"tone/pc.*"
#define TONE_SPKCHAT_OFF SDFILE_RES_ROOT_PATH"tone/spkchat_off.*"
#define TONE_SPKCHAT_ON SDFILE_RES_ROOT_PATH"tone/spkchat_on.*"
#define TONE_WCLICK_OFF SDFILE_RES_ROOT_PATH"tone/wclick_off.*"
#define TONE_WCLICK_ON SDFILE_RES_ROOT_PATH"tone/wclick_on.*"
#define TONE_WINDDET_OFF SDFILE_RES_ROOT_PATH"tone/winddet_off.*"
#define TONE_WINDDET_ON SDFILE_RES_ROOT_PATH"tone/winddet_on.*"
#define SINE_WTONE_NORAML 0
#define SINE_WTONE_TWS_CONNECT 1
#define SINE_WTONE_TWS_DISCONNECT 2
#define SINE_WTONE_LOW_POWER 4
#define SINE_WTONE_RING 5
#define SINE_WTONE_MAX_VOLUME 6
#define SINE_WTONE_ADSP 7
#define SINE_WTONE_LOW_LATENRY_IN 8
#define SINE_WTONE_LOW_LATENRY_OUT 9
#define SINE_WTONE_ANC_ADAPTIVE_1 10
#define SINE_WTONE_ANC_ADAPTIVE_2 11
#if CONFIG_USE_DEFAULT_SINE
#undef TONE_TWS_CONN
#define TONE_TWS_CONN DEFAULT_SINE_TONE(SINE_WTONE_TWS_CONNECT)
#undef TONE_TWS_DISCONN
#define TONE_TWS_DISCONN DEFAULT_SINE_TONE(SINE_WTONE_TWS_DISCONNECT)
#undef TONE_MAX_VOL
#define TONE_MAX_VOL DEFAULT_SINE_TONE(SINE_WTONE_MAX_VOLUME)
#undef TONE_NORMAL
#define TONE_NORMAL DEFAULT_SINE_TONE(SINE_WTONE_NORAML)
#if BT_PHONE_NUMBER
#else
#undef TONE_RING
#define TONE_RING DEFAULT_SINE_TONE(SINE_WTONE_RING)
#endif
#undef TONE_LOW_POWER
#define TONE_LOW_POWER DEFAULT_SINE_TONE(SINE_WTONE_LOW_POWER)
#endif
#define TONE_SIN_NORMAL DEFAULT_SINE_TONE(SINE_WTONE_NORAML)
#define TONE_LOW_LATENCY_IN DEFAULT_SINE_TONE(SINE_WTONE_LOW_LATENRY_IN)
#define TONE_LOW_LATENCY_OUT DEFAULT_SINE_TONE(SINE_WTONE_LOW_LATENRY_OUT)
#define TONE_ANC_ADAPTIVE_LVL1 DEFAULT_SINE_TONE(SINE_WTONE_ANC_ADAPTIVE_1)
#define TONE_ANC_ADAPTIVE_LVL2 DEFAULT_SINE_TONE(SINE_WTONE_ANC_ADAPTIVE_2)
enum {
IDEX_TONE_NUM_0,
IDEX_TONE_NUM_1,
IDEX_TONE_NUM_2,
IDEX_TONE_NUM_3,
IDEX_TONE_NUM_4,
IDEX_TONE_NUM_5,
IDEX_TONE_NUM_6,
IDEX_TONE_NUM_7,
IDEX_TONE_NUM_8,
IDEX_TONE_NUM_9,
IDEX_TONE_BT_MODE,
IDEX_TONE_BT_CONN,
IDEX_TONE_BT_DISCONN,
IDEX_TONE_TWS_CONN,
IDEX_TONE_TWS_DISCONN,
IDEX_TONE_LOW_POWER,
IDEX_TONE_POWER_OFF,
IDEX_TONE_POWER_ON,
IDEX_TONE_RING,
IDEX_TONE_MAX_VOL,
IDEX_TONE_NORMAL,
IDEX_TONE_ANC_OFF,
IDEX_TONE_ANC_ON,
IDEX_TONE_TRANSPARCNCY,
IDEX_TONE_ANC_ADAPTIVE,
IDEX_TONE_ANC_ADAPTIVE_COEFF,
IDEX_TONE_ANC_NORMAL_COEFF,
IDEX_TONE_NONE = 0xFF,
};
int tone_play_init(void);
int tone_play_index(u8 index, u8 preemption);
int tone_play_index_with_callback(u8 index, u8 preemption, void (*user_evt_handler)(void *priv), void *priv);
int tone_play_index_no_tws(u8 index, u8 preemption);
/*
*@brief:提示音比较,确认目标提示音和正在播放的提示音是否一致
*@return: 0 匹配
* 非0 不匹配或者当前没有提示音播放
*@note:通过提示音索引比较
*/
int tone_name_cmp_by_index(u8 index);
// 按键提示音初始化
int audio_key_tone_init(void);
// 注销按键提示音播放
void audio_key_tone_destroy(void);
// 播放正弦波数组
int audio_key_tone_play_sin(struct audio_sin_param *sin, u8 sin_num, u8 preemption);
// 播放文件
int audio_key_tone_play_name(const char *name, u8 preemption);
// 按序号播放文件 // 使用key_tone_index[]数组
int audio_key_tone_play_index(u8 index, u8 preemption);
// 按键提示音播放 // 默认播放数组中第一个
void audio_key_tone_play(void);
// 检测按键提示音是否在播放
int audio_key_tone_is_play(void);
// 设置按键提示音的音量
void audio_key_tone_digvol_set(u8 volume);
#endif

View File

@ -0,0 +1,134 @@
#ifndef _LCD_SEG3X9_DRV_H_
#define _LCD_SEG3X9_DRV_H_
typedef struct _lcd_seg3x9_var {
u8 bCoordinateX;
u8 bFlashChar;
u8 bShowBuff[4]; //[0] ~ [3]显示的数字/字母显示的所有段
u32 bShowIcon; //每1bit对应LED4的1段, maybe icon > 7段
u32 bFlashIcon; //闪烁标志
} LCD_SEG3X9_VAR;
#define LCD_SEG3X9_USB BIT(0) //0: USB图标
#define LCD_SEG3X9_SD BIT(1) //1: SD图标
#define LCD_SEG3X9_VOL BIT(2) //2: SD图标
#define LCD_SEG3X9_MHZ BIT(3) //3: FM图标
#define LCD_SEG3X9_DIGIT1 BIT(4) //4: 数字1
#define LCD_SEG3X9_2POINT BIT(5) //5: 冒号
#define LCD_SEG3X9_DOT BIT(6) //6: 点
typedef u32 UI_LCD_SEG3X9_ICON;
struct lcd_seg3x9_pin {
u8 pin_com[3];
u8 pin_seg[9];
};
enum LCD_SEG3X9_BIAS {
LCD_SEG3X9_BIAS_OFF = 0,
LCD_SEG3X9_BIAS_1_2, // 1/2 bias
LCD_SEG3X9_BIAS_1_3, // 1/3 bias
LCD_SEG3X9_BIAS_1_4, // 1/4 bias
};
enum LCD_SEG3X9_COM_NUMBER {
LCD_SEG3X9_COM_NUMBER_3 = 0,
LCD_SEG3X9_COM_NUMBER_4,
LCD_SEG3X9_COM_NUMBER_5,
LCD_SEG3X9_COM_NUMBER_6,
};
enum LCD_SEG3X9_VOLTAGE {
LCD_SEG3X9_VOLTAGE_2_6V = 0, //000b
LCD_SEG3X9_VOLTAGE_2_7V, //001b
LCD_SEG3X9_VOLTAGE_2_8V, //010b
LCD_SEG3X9_VOLTAGE_2_9V, //011b
LCD_SEG3X9_VOLTAGE_3_0V, //100b
LCD_SEG3X9_VOLTAGE_3_1V, //101b
LCD_SEG3X9_VOLTAGE_3_2V, //110b
LCD_SEG3X9_VOLTAGE_3_3V, //111b
};
struct lcd_seg3x9_platform_data {
enum LCD_SEG3X9_VOLTAGE vlcd;
enum LCD_SEG3X9_BIAS bias;
struct lcd_seg3x9_pin pin_cfg;
};
//=================================================================================//
// 关于LCD段码屏接线问题 //
// 1.COM口需要从COM0按顺序开始连接, 如3COM, 则IO必须占用COM0/1/2而不能COM1/2/3;
// 2.COM0/1/2与LCD屏可以不按照对应需要接线, 如:
// LCD_COM0 --> CHIP_COM2;
// LCD_COM1 --> CHIP_COM1;
// LCD_COM2 --> CHIP_COM0;
// 但一般建议按顺序接线;
// 2.SEG可以根据实际情况选择SEG0~SEG21接线, 如;
// LCD_SEG0 --> CHIP_SEG7;
// LCD_SEG1 --> CHIP_SEG8;
// LCD_SEG2 --> CHIP_SEG9;
//=================================================================================//
#define LCD_SEG3X9_PLATFORM_DATA_BEGIN(data) \
const struct lcd_seg3x9_platform_data data = {
#define LCD_SEG3X9_PLATFORM_DATA_END() \
};
//UI LED7 API:
//=================================================================================//
// 模块初始化显示接口 //
//=================================================================================//
void lcd_seg3x9_init(const struct lcd_seg3x9_platform_data *_data);
const struct ui_display_api *ui_lcd_seg3x9_init(void *para);
//=================================================================================//
// 设置显示坐标接口 //
/*
___ ___ ___
|___| |___| |___|
|___| |___| |___|
---0------1------2----> X
*/
//=================================================================================//
void lcd_seg3x9_setX(u8 X);
//=================================================================================//
// 字符类显示接口 //
//=================================================================================//
void lcd_seg3x9_show_char(u8 chardata); //显示字符(追加方式)
void lcd_seg3x9_flash_char_start(u8 index); //闪烁单个字符
void lcd_seg3x9_flash_char_stop(u8 index); //取消闪烁单个字符
void lcd_seg3x9_show_string(u8 *str); //显示字符串(追加方式)
void lcd_seg3x9_show_string_reset_x(u8 *str); //显示字符串, x从0开始
void lcd_seg3x9_show_string_align_right(u8 *str); //led7显示字符串(清屏&右方式)
void lcd_seg3x9_show_string_align_left(u8 *str); //led7显示字符串(清屏&左方式)
//=================================================================================//
// 数字类显示接口 //
//=================================================================================//
void lcd_seg3x9_show_number(u16 val); //显示数字(清屏&高位显示0)
void lcd_seg3x9_show_number2(u16 val); //显示数字(清屏&高位不显示)
void lcd_seg3x9_show_number_add(u16 val); //显示数字(追加方式)
//=================================================================================//
// 图标类显示接口 //
//=================================================================================//
void lcd_seg3x9_show_icon(UI_LCD_SEG3X9_ICON icon); //显示单个图标(追加)
void lcd_seg3x9_flash_icon(UI_LCD_SEG3X9_ICON icon); //闪烁单个图标(追加)
//=================================================================================//
// 模式类类显示接口 //
//=================================================================================//
//=================================================================================//
// 清屏类显示接口 //
//=================================================================================//
void lcd_seg3x9_show_null(void); //清除所有显示(数字,字符串和图标)
void lcd_seg3x9_clear_string(void); //清除显示数字和字母
void lcd_seg3x9_clear_icon(UI_LCD_SEG3X9_ICON icon); //清除显示单个图标
void lcd_seg3x9_clear_all_icon(void); //清除显示所有图标
#endif /* #ifndef _LCD_SEG3X9_DRV_H_ */

View File

@ -0,0 +1,363 @@
//generated by ResBuilder in 2011//
#ifndef _MENU_H_
#define _MENU_H_
////StringResID Define Table////
#define Chinese_Simplified 1
#define Chinese_Traditional 2
#define Japanese 3
#define Korean 4
#define English 5
#define French 6
#define German 7
#define Italian 8
#define Dutch 9
#define Portuguese 10
#define Spanish 11
#define Swedish 12
#define Czech 13
#define Danish 14
#define Polish 15
#define Russian 16
#define Turkey 17
#define Hebrew 18
#define Thai 19
#define Hungarian 20
#define Romanian 21
#define Arabic 22
#define LANGUAGEID_SUM 22
////Multi Language Define Table////
#define vplaym1 1
#define mplay2 2
#define mplay4 3
#define mplay5 4
#define vstopm1 5
#define vstopm2 6
#define udisk 7
#define cdelfile 8
#define cdelall 9
#define mstop5 10
#define vloopm1 11
#define vloopm2 12
#define vloopm3 13
#define vloopm4 14
#define vloopm5 15
#define vloopm6 16
#define meq1 17
#define meq2 18
#define meq3 19
#define meq4 20
#define meq5 21
#define meq6 22
#define meq7 23
#define meq8 24
#define recpara 25
#define mrstop3 26
#define rsetgain 27
#define main2 28
#define mbps 29
#define msrate 30
#define smain7 31
#define mrbps0 32
#define mrbps1 33
#define mrbps2 34
#define mrbps3 35
#define mrbps4 36
#define mrbps5 37
#define mrbps6 38
#define mrbps7 39
#define mrbps8 40
#define mrbps9 41
#define mrbps10 42
#define mrbps11 43
#define srate48k 44
#define srate32k 45
#define srate24k 46
#define srate16k 47
#define srate12k 48
#define record1 49
#define record2 50
#define record 51
#define rsaving 52
#define fmenu16 53
#define sreplay1 54
#define fmenu1 55
#define fmenu15 56
#define fmfreq 57
#define fmenu2 58
#define fmenu3 59
#define smain1 60
#define smain2 61
#define smain3 62
#define s_tools 63
#define kvoice1 64
#define kvoice2 65
#define smain6 66
#define smain8 67
#define smain9 68
#define slan1 69
#define slan3 70
#define slan4 71
#define slan5 72
#define slan2 73
#define slan6 74
#define slan7 75
#define slan8 76
#define slan9 77
#define slan10 78
#define slan11 79
#define slan12 80
#define slan13 81
#define slan14 82
#define slan15 83
#define slan16 84
#define slan17 85
#define slan18 86
#define slan19 87
#define slan20 88
#define slan21 89
#define slan22 90
#define smain4 91
#define clock 92
#define fmset 93
#define alarmon 94
#define alarmoff 95
#define alarmtm 96
#define alarmcyc 97
#define alarmmus 98
#define alarmvol 99
#define ringonce 100
#define ringday 101
#define ringweek 102
#define ringinl 103
#define fm_rmon 104
#define fm_rtue 105
#define fm_rwed 106
#define fm_rthu 107
#define fm_rfri 108
#define fm_rsat 109
#define fm_rsun 110
#define timingfmon 111
#define timingfmoff 112
#define fmrecordon 113
#define fmrecordoff 114
#define fmtime 115
#define fm_manual 116
#define fmautoload 117
#define fm_switch 118
#define fm_vol 119
#define t_cal 120
#define t_music 121
#define t_record 122
#define t_fm 123
#define t_sys 124
#define f_browse 125
#define alarm1 126
#define t_ebook 127
#define sel_file 128
#define play_set 129
#define handplay 130
#define autoplay 131
#define playspeed 132
#define STRINGID_SUM 132
////BmpResID Define Table////
#define CH_NOFILE 1
#define CLOCK 2
#define CLOCKA 3
#define CONTRSTW 4
#define DELLA 5
#define DIRROOTA 6
#define EBOOK 7
#define EBOOKA 8
#define ENGDELLA 9
#define EN_NOFILE 10
#define FM 11
#define FMA 12
#define MMP3 13
#define MUSIC1 14
#define MUSICA 15
#define MWAV 16
#define MWMA 17
#define NOUDISK 18
#define PMDSCOM 19
#define RTC_NUM_0 20
#define RTC_NUM_1 21
#define RTC_NUM_2 22
#define RTC_NUM_3 23
#define RTC_NUM_4 24
#define RTC_NUM_5 25
#define RTC_NUM_6 26
#define RTC_NUM_7 27
#define RTC_NUM_8 28
#define RTC_NUM_9 29
#define RTC_NUM_A 30
#define RTC_NUM_B 31
#define RECORD1 32
#define RECORDA 33
#define SDMMC 34
#define SIGNAL_1 35
#define SIGNAL_2 36
#define SIGNAL_3 37
#define SIGNAL_4 38
#define SIGNAL_5 39
#define SIGNAL_6 40
#define SYSTEM1 41
#define SYSTEMA 42
#define UDISK 43
#define UDISKOUT 44
#define ACTIVE 45
#define ALARM 46
#define ALARM_C 47
#define ALARM_CA 48
#define ALARM_O 49
#define ALARM_OA 50
#define ALARM_T 51
#define ALARM_TA 52
#define ALARM_V 53
#define ALARM_VA 54
#define ALMICON 55
#define BATTERY01 56
#define BATTERY02 57
#define BATTERY03 58
#define BATTERY04 59
#define BATTERY05 60
#define BATTERY06 61
#define BIGBAT1 62
#define BIGBAT2 63
#define BIGBAT3 64
#define BIGBAT4 65
#define BIGBAT5 66
#define BKCLR1 67
#define BPS128 68
#define BPS160 69
#define BPS48 70
#define BPS64 71
#define BPS96 72
#define C_NOSEL 73
#define C_SEL 74
#define CALENDAR 75
#define CALENDAR1 76
#define CALENDAR2 77
#define CARDOUT 78
#define CDEL_NO 79
#define CDEL_YES 80
#define CHNDEL 81
#define CHNSAVE 82
#define CHNWAIT 83
#define CONTRSTB 84
#define CYCLE1 85
#define CYCLE2 86
#define CYCLE3 87
#define CYCLE4 88
#define DELFILE 89
#define DISCERR 90
#define EDELFILE 91
#define EFICON 92
#define ENGCOUT 93
#define ENGDEL 94
#define ENGDICERR 95
#define ENGNOCARD 96
#define ENGNODISK 97
#define ENGNOSPAC 98
#define ENGSAVE 99
#define ENGUOUT 100
#define ENGWAIT 101
#define ENOFILE 102
#define EQCLAS 103
#define EQDBB 104
#define EQJAZZ 105
#define EQNOR 106
#define EQPOP 107
#define EQROCK 108
#define EQSOFT 109
#define EQWOW 110
#define FLASH 111
#define FMUSIC 112
#define FOLDER 113
#define FOLDERM 114
#define FQBAR 115
#define FQBAR2 116
#define GOODBYTE 117
#define LARROW 118
#define LINEIN1 119
#define LINEIN2 120
#define LINEINBIG 121
#define LINEINXXX 122
#define LOGOFM 123
#define LOWBAT 124
#define MICIN 125
#define MLOOP1 126
#define MLOOP2 127
#define MLOOP3 128
#define MLOOP4 129
#define MLOOP5 130
#define MLOOP6 131
#define MP3_128 132
#define MP3_16 133
#define MP3_192 134
#define MP3_24K 135
#define MP3_256 136
#define MP3_32 137
#define MP3_320 138
#define MP3_32K 139
#define MP3_48 140
#define MP3_48K 141
#define MP3_64 142
#define MP3_8 143
#define MP3_96 144
#define MREC 145
#define MWAV128K 146
#define MWAV176K 147
#define MWAV192K 148
#define MWAV256K 149
#define MWAV32K 150
#define MWAV353K 151
#define MWAV384K 152
#define MWAV64K 153
#define MWMA128K 154
#define MWMA176K 155
#define MWMA192K 156
#define MWMA32K 157
#define MWMA64K 158
#define MWMA96K 159
#define NO_ICON 160
#define NOCARD 161
#define NOFILE 162
#define NOMEMORY 163
#define NONGZI 164
#define OFF_SEL 165
#define ON_SEL 166
#define PAUSE 167
#define PAUSE1 168
#define RARROW 169
#define REC_FILE 170
#define RECSAVE 171
#define SCANSD1 172
#define SCANSDMMC 173
#define SCANUD1 174
#define SCANUDISK 175
#define SLIDER 176
#define SLIDER_P 177
#define TOOLP 178
#define TOOLPA 179
#define UNACTIVE 180
#define WAV_12K 181
#define WAV_16K 182
#define WAV_24K 183
#define WAV_32K 184
#define WAV_48K 185
#define WAV_8K 186
#define BMPID_SUM 186
#endif

View File

@ -0,0 +1,76 @@
#ifndef __LCDSIMULATOR_H__
#define __LCDSIMULATOR_H__
#include "menu.h"
#include "font/language_list.h"
#include "typedef.h"
// #define USE_BLANK_FUNC 1
// #define LCDPAGE 8
// #define LCDCOLUMN 128
// #define SCR_WIDTH LCDCOLUMN
// #define SCR_HEIGHT (LCDPAGE*8)
#define MENUICONWIDTH 12 //菜单项目左边图标的宽度(象素)
#define MENUITEMHEIGHT 16 //菜单项目的高度(象素)
#define SCROLLBARWIDTH 6 //垂直滚动条的宽度(象素)
#define MENUITEMSUMPERSCR (SCR_HEIGHT/MENUITEMHEIGHT) //每屏可显示的最大菜单项
#define MENUITEMPAGEHEIGHT 2 //每个菜单项所占的页数 2个LCDPAGE --> 2*8=16个像素
#define RESFILESTARTADDRESS 0 //资源文件的起始地址
#define PROGRESSLENGTH 100 //进度条长度(象素)
#define SLIDERLENGTH 100 //滑动条长度(象素)
#define SLIDERMOVESTEP 5 //滑动块的移动步长
#define SLIDER_NOMOVE_TIMEEXIT 10 //滑动条不动超过此时间自动退出,(*0.5S)
#define MENUWAITTIME (8*2) //菜单界面不操作超过MENUWAITTIME时间则自动返回
#define ntohl(x) (unsigned long)((x>>24)|((x>>8)&0xff00)|(x<<24)|((x&0xff00)<<8))
#define ntoh(x) (unsigned short int )((x>>8&0x00ff)|x<<8&0xff00)
//#pragma pack(1)
typedef u8(* FUN)(u8 mode);
typedef struct _MENULIST {
u8 ItemSum; //菜单项目总数
u8 ActiveItemNum; //当前活动菜单项目序号:1--ItemSum
u8 IconID[2]; //第一个为菜单选中时显示图标的ID号,第二个为菜单未选中时显示图标的ID号
u16 TitleID; //菜单的标题字符串ID号,没有标题此值为0
u16 *ItemString; //菜单项目对应的字符串ID号
// FUN fun;
} MENULIST;
//////函数声明//////
u8 TurnPixelReverse_Page(u8 startpage, u8 pagelen);
u8 TurnPixelReverse_Rect(u8 left, u8 top, u8 right, u8 bottom);
void UI_MenuSelectOn(u8 showitemnum);
void Scrol_String(u16 StringID);
u8 SetScrollBar(u8 Start_x);
u8 SetSlideBlock(u8 Start_x, u8 Start_y);
u8 UI_Slider(FUN gslider);
u8 UI_Progress(u8 currentpos, u8 progress_y_pos, u8 progresslength);
u8 SetSlider(u8 start_x, u8 start_y, u8 length);
u8 SetProgress(u8 start_x, u8 start_y, u8 length);
u8 ClearLcdBuf_Page(u8 startpage, u8 pagelen);
u8 ClearLcdBuf_Rect(u8 left, u8 top, u8 right, u8 bottom);
u8 draw_slider(s8 currentpos, u8 slider_y_pos, u8 sliderlength);
#define UI_SLIDER_CURR_VALUE 0
#define UI_SLIDER_DEC 1
#define UI_SLIDER_INC 2
extern s8 MenuItemSelectOnNum; //当前屏幕活动page序号:0--(MENUITEMSUMPERSCR-1)
extern s8 CurrentScreenNum; //当前所处屏幕数,从0序号开始
extern u8 NeedScreenSumViaItem; //菜单项目总数将占用屏幕的屏数
extern u8 LaseScreenRemainMenuItem; //最后一屏只需显示的菜单项目数
extern u8 LanguageMode;
extern void clear_lcd();
extern void draw_lcd(u8 start_page, u8 page_len);
extern void clear_lcd_area(u8 start_page, u8 end_page);
#endif

View File

@ -0,0 +1,21 @@
#ifndef __UI_MAINMENU_H__
#define __UI_MAINMENU_H__
#define AUTORUNTIMEMAX 10
#define TASKTOTLE 24 //任务总数
#define SCREENSHOWTASKSUM 5 //屏幕需显示的任务图标
//#define SHOWTASKSUM 8 //需显示的任务图标总数
typedef struct {
u8 taskname[16]; //任务名
u16 bmpID; //该任务在主界面显示的图标
u16 strID; //该任务在主界面显示的字符串
u8 showflag; //标识该任务是否显式的显示任务图标
} TASKSTRUCT;
extern const TASKSTRUCT taskbuf[TASKTOTLE];
extern u8 taskshow[TASKTOTLE];
u8 UI_mainmenu(s8 apprun);
void findtaskexist(u8 tasksum);
#endif

View File

@ -0,0 +1,150 @@
#ifndef __SPI_LCD_DRIVER_H
#define __SPI_LCD_DRIVER_H
#include "asm/spi.h"
#if (SPI_LCD_DEBUG_ENABLE == 0)
#define lcd_d(...)
#define lcd_w(...)
#define lcd_e(fmt, ...) printf("[LCD ERROR]: "fmt, ##__VA_ARGS__)
#elif (SPI_LCD_DEBUG_ENABLE == 1)
#define lcd_d(...)
#define lcd_w(fmt, ...) printf("[LCD WARNING]: "fmt, ##__VA_ARGS__)
#define lcd_e(fmt, ...) printf("[LCD ERROR]: "fmt, ##__VA_ARGS__)
#else
#define lcd_d(fmt, ...) printf("[LCD DEBUG]: "fmt, ##__VA_ARGS__)
#define lcd_w(fmt, ...) printf("[LCD WARNING]: "fmt, ##__VA_ARGS__)
#define lcd_e(fmt, ...) printf("[LCD ERROR]: "fmt, ##__VA_ARGS__)
#endif
// 两毫秒延时
extern void delay_2ms(int cnt);
#define delay2ms(t) delay_2ms(t)
/* 定义初始化数据结构体 */
typedef struct {
u8 cmd; // 地址
u8 cnt; // 数据个数
u8 dat[64]; // 数据
} InitCode;
#define REGFLAG_DELAY 0xFF
struct spi_lcd_init {
char *name; // 名称
u8 spi_pending;
u8 soft_spi;
u16 lcd_width;
u16 lcd_height;
u8 color_format;
u8 interface;
u8 column_addr_align;
u8 row_addr_align;
u8 backlight_status;
u8 *dispbuf;
u32 bufsize;
InitCode *initcode; // 初始化代码
u16 initcode_cnt; // 初始化代码条数
void (*Init)(void);
void (*WriteComm)(u16 cmd); // 写命令
void (*WriteData)(u16 dat); // 写数据
void (*WriteMap)(char *map, int size); // 写整个buf
void (*WritePAGE)(char *map, u8 page_star, u8 page_len); // 写page
void (*SetDrawArea)(int, int, int, int);
void (*Reset)(void);
void (*BackLightCtrl)(u8);
void (*EnterSleep)();
void (*ExitSleep)();
};
void spi_dma_send_byte(u8 dat);
void spi_dma_send_map(u8 *map, u32 size);
void SPI_LcdTest();
struct lcd_spi_platform_data {
u32 pin_reset;
u32 pin_cs;
u32 pin_rs;
u32 pin_bl;
spi_dev spi_cfg;
const struct spi_platform_data *spi_pdata;
};
// LCD 初始化接口
#define REGISTER_LCD_DRIVE() \
const struct spi_lcd_init dev_drive
enum LCD_COLOR {
LCD_COLOR_RGB565,
LCD_COLOR_MONO,
};
enum LCD_IF {
LCD_SPI,
LCD_EMI,
};
struct lcd_info {
u16 width;
u16 height;
u8 color_format;
u8 interface;
u8 col_align;
u8 row_align;
u8 bl_status;
};
struct lcd_interface {
void (*init)(void *);
void (*get_screen_info)(struct lcd_info *info);
void (*buffer_malloc)(u8 **buf, u32 *size);
void (*buffer_free)(u8 *buf);
void (*draw)(u8 *buf, u32 len, u8 wait);
void (*set_draw_area)(u16 xs, u16 xe, u16 ys, u16 ye);
void (*clear_screen)(u16 color);
int (*backlight_ctrl)(u8 on);
void (*draw_page)(u8 *buf, u8 page_star, u8 page_len);
};
extern struct lcd_interface lcd_interface_begin[];
extern struct lcd_interface lcd_interface_end[];
#define REGISTER_LCD_INTERFACE(lcd) \
static const struct lcd_interface lcd sec(.lcd_if_info) __attribute__((used))
struct lcd_interface *lcd_get_hdl();
#define LCD_SPI_PLATFORM_DATA_BEGIN(data) \
const struct lcd_spi_platform_data data = {
#define LCD_SPI__PLATFORM_DATA_END() \
};
void lcd_reset_l();
void lcd_reset_h();
void lcd_cs_l();
void lcd_cs_h();
void lcd_rs_l();
void lcd_rs_h();
void lcd_bl_l();
void lcd_bl_h();
u8 lcd_bl_io();
extern int lcd_backlight_status();
u8 lcd_spi_recv_byte();
int lcd_spi_send_byte(u8 byte);
#endif

View File

@ -0,0 +1,143 @@
#ifndef _LED7_DRV_H_
#define _LED7_DRV_H_
typedef struct _led7_VAR {
u8 bCoordinateX;
u8 bFlashChar;
u8 bShowBuff[4]; //[0] ~ [3]显示的数字/字母显示的所有段
u32 bShowIcon; //每1bit对应LED4的1段, maybe icon > 7段
u32 bFlashIcon; //闪烁标志
u8 bShowBuff1[9]; //[i]->第i个管脚, value的每一bit对应一个管脚, scan时使用
} LED7_VAR;
#define LED7_PLAY BIT(0) //0: 播放图标
#define LED7_PAUSE BIT(1) //1: 暂停图标
#define LED7_USB BIT(2) //2: USB图标
#define LED7_SD BIT(3) //3: SD图标
#define LED7_2POINT BIT(4) //4: 冒号图标
#define LED7_FM BIT(5) //5: FM图标
#define LED7_DOT BIT(6) //6: 小数点图标
#define LED7_MP3 BIT(7) //7: MP3图标
#define LED7_REPEAT BIT(8) //8: REPEAT图标
#define LED7_CHARGE BIT(9) //9: 充电图标
#define LED7_BT BIT(10) //10: 充电图标
#define LED7_AUX BIT(11) //11: AUX图标
#define LED7_WMA BIT(12) //12: WMA图标
typedef u32 UI_LED7_ICON;
typedef enum _led7_pin_type {
LED7_PIN7, //7个引脚
LED7_PIN12, //12个引脚
LED7_PIN13, //13个引脚
} LED7_PIN_TYPE;
struct seg2pin {
u8 pinH;
u8 pinL;
};
struct icon_seg2pin {
UI_LED7_ICON icon;
struct seg2pin seg2pin;
};
struct led7_pin7 {
u8 pin[7];
};
struct led7_pin12 {
u8 pin_comh[5];
u8 pin_segl[7];
};
struct led7_pin13 {
u8 pin_com[6];
u8 pin_seg[7];
};
union led7_pin_cfg {
struct led7_pin7 pin7;
struct led7_pin12 pin12;
struct led7_pin13 pin13;
};
#define LED_A BIT(0)
#define LED_B BIT(1)
#define LED_C BIT(2)
#define LED_D BIT(3)
#define LED_E BIT(4)
#define LED_F BIT(5)
#define LED_G BIT(6)
#define LED_H BIT(7)
struct led7_platform_data {
LED7_PIN_TYPE pin_type;
union led7_pin_cfg pin_cfg;
};
#define LED7_PLATFORM_DATA_BEGIN(data) \
const struct led7_platform_data data = {
#define LED7_PLATFORM_DATA_END() \
};
//UI LED7 API:
//=================================================================================//
// 模块初始化显示接口 //
//=================================================================================//
void *led7_init(const struct led7_platform_data *_data);
const struct ui_display_api *ui_led7_init(void *para);
//=================================================================================//
// 设置显示坐标接口 //
/*
___ ___ ___ ___
|___| |___| |___| |___|
|___| |___| |___| |___|
---0------1------2------3------> X
*/
//=================================================================================//
void led7_setX(u8 X);
//=================================================================================//
// 字符类显示接口 //
//=================================================================================//
void led7_show_char(u8 chardata); //显示字符(追加方式)
void led7_flash_char_start(u8 index); //闪烁单个字符
void led7_flash_char_stop(u8 index); //取消闪烁单个字符
void led7_show_string(u8 *str); //显示字符串(追加方式)
void led7_show_string_reset_x(u8 *str); //显示字符串, x从0开始
void led7_show_string_align_right(u8 *str); //led7显示字符串(清屏&右方式)
void led7_show_string_align_left(u8 *str); //led7显示字符串(清屏&左方式)
//=================================================================================//
// 数字类显示接口 //
//=================================================================================//
void led7_show_number(u16 val); //显示数字(清屏&高位显示0)
void led7_show_number2(u16 val); //显示数字(清屏&高位不显示)
void led7_show_number_add(u16 val); //显示数字(追加方式)
//=================================================================================//
// 图标类显示接口 //
//=================================================================================//
void led7_show_icon(UI_LED7_ICON icon); //显示单个图标(追加)
void led7_flash_icon(UI_LED7_ICON icon); //闪烁单个图标(追加)
//=================================================================================//
// 模式类类显示接口 //
//=================================================================================//
//=================================================================================//
// 清屏类显示接口 //
//=================================================================================//
void led7_show_null(void); //清除所有显示(数字,字符串和图标)
void led7_clear_string(void); //清除显示数字和字母
void led7_clear_icon(UI_LED7_ICON icon); //清除显示单个图标
void led7_clear_all_icon(void); //清除显示所有图标
#endif /* _LED_H_ */

View File

@ -0,0 +1,26 @@
#ifndef __RES_CONFIG_H__
#define __RES_CONFIG_H__
#define EXTERN_PATH "storage/virfat_flash/C/"
#define INTERN_PATH "mnt/sdfile/res/"
#define RES_PATH INTERN_PATH
#define FONT_PATH RES_PATH
#define UI_STY_CHECK_PATH \
RES_PATH"JL.sty",
#define UI_RES_CHECK_PATH \
RES_PATH"JL.res",
#define UI_STR_CHECK_PATH \
RES_PATH"JL.str",
#define UI_WATCH_RES_ENABLE 0//表盘功能
#endif

View File

@ -0,0 +1,130 @@
#ifndef UI_STYLE_LED7_H
#define UI_STYLE_LED7_H
#include "ui/ui_common.h"
#include "ui/led7/led7_driver.h"
#include "ui/lcd_seg/lcd_seg3x9_driver.h"
enum ui_menu_main {
UI_MENU_MAIN_NULL = 0,
UI_RTC_MENU_MAIN,
UI_MUSIC_MENU_MAIN,
UI_AUX_MENU_MAIN,
UI_BT_MENU_MAIN,
UI_RECORD_MENU_MAIN,
UI_FM_MENU_MAIN,
UI_PC_MENU_MAIN,
UI_IDLE_MENU_MAIN,
};
enum {
MENU_POWER_UP = 1,
MENU_WAIT,
MENU_BT,
MENU_PC,
MENU_PC_VOL_UP,
MENU_PC_VOL_DOWN,
MENU_AUX,
MENU_ALM_UP,
MENU_SHOW_STRING,
MENU_MAIN_VOL,
MENU_SET_EQ,
MENU_SET_PLAY_MODE,
MENU_PLAY_TIME,
MENU_FILENUM,
MENU_INPUT_NUMBER,
MENU_MUSIC_PAUSE,
MENU_MUSIC_REPEATMODE,
MENU_FM_MAIN,
MENU_FM_DISP_FRE,
MENU_FM_SET_FRE,
MENU_FM_STATION,
MENU_IR_FM_SET_FRE,
MENU_RTC_SET,
MENU_RTC_PWD,
MENU_ALM_SET,
MENU_BT_SEARCH_DEVICE,
MENU_BT_CONNECT_DEVICE,
MENU_BT_DEVICE_ADD,
MENU_BT_DEVICE_NAME,
MENU_RECODE_MAIN,
MENU_RECODE_ERR,
MENU_POWER,
MENU_LIST_DISPLAY,
MENU_LED0,
MENU_LED1,
MENU_RECORD,
MENU_SEC_REFRESH = 0x80,
MENU_REFRESH,
MENU_MAIN = 0xff,
};
//=================================================================================//
// UI 配置数据结构 //
//=================================================================================//
struct ui_dis_api {
int ui;
void *(*open)(void *hd);
void (*ui_main)(void *hd, void *private);
int (*ui_user)(void *hd, void *private, int menu, int arg);
void (*close)(void *hd, void *private);
};
typedef struct _LCD_DISP_API {
void (*clear)(void);
void (*setXY)(u32 x, u32 y);
void (*FlashChar)(u32);
void (*Clear_FlashChar)(u32);
void (*show_string)(u8 *);
void (*show_char)(u8);
void (*show_number)(u8);
void (*show_icon)(u32);
void (*flash_icon)(u32);
void (*clear_icon)(u32);
void (*show_pic)(u32);
void (*hide_pic)(u32);
void (*lock)(u32);
} LCD_API;
extern const struct ui_dis_api bt_main;
extern const struct ui_dis_api fm_main;
extern const struct ui_dis_api music_main;
extern const struct ui_dis_api record_main;
extern const struct ui_dis_api rtc_main;
extern const struct ui_dis_api pc_main;
extern const struct ui_dis_api linein_main;
extern const struct ui_dis_api idle_main;
#endif

View File

@ -0,0 +1,131 @@
#ifndef _UI_API_H_
#define _UI_API_H_
#include "app_config.h"
#include "ui/lcd_spi/lcd_drive.h"
#include "ui/ui.h"
#include "ui/ui_style.h"
#define GRT_CUR_MENU (0)
#define GET_MAIN_MENU (1)
enum ui_devices_type {
LED_7,
LCD_SEG3X9,
TFT_LCD,//彩屏
DOT_LCD,//点阵屏
};
//板级配置数据结构
struct ui_devices_cfg {
enum ui_devices_type type;
void *private_data;
};
struct touch_event {
int event;
int x;
int y;
};
//led7 api
extern int led7_ui_init(const struct ui_devices_cfg *ui_cfg);
extern void ui_set_main_menu(enum ui_menu_main menu);
extern void ui_menu_reflash(u8 break_in);//break_in 是否打断显示,例如显示设置过程中需要刷新新界面。是是否打断设置界面显示
extern u8 ui_get_app_menu(u8);
extern void ui_set_led(u8 app_menu, u8 on, u8 phase, u16 highlight, u16 period);
extern void ui_set_auto_reflash(u32 msec);//自动刷新主页
extern void ui_close_main_menu();
extern void ui_set_tmp_menu(u8 app_menu, u16 ret_time, s32 arg, void (*timeout_cb)(u8 menu));
extern void ui_common(void *hd, void *private, u8 menu, u32 arg);//公共显示
//lcd api
//
extern int lcd_ui_init(void *arg);
extern int ui_hide_main(int id);
extern int ui_show_main(int id);
extern int ui_server_msg_post(const char *msg, ...);
extern int ui_hide_curr_main();
extern int ui_touch_msg_post(struct touch_event *event);
extern int ui_key_msg_post(int msg);
extern void key_ui_takeover(u8 on);
extern int key_is_ui_takeover();
extern void ui_backlight_open(void);
extern void ui_backlight_close(void);
extern void ui_touch_timer_delete();
extern void ui_touch_timer_start();
extern void ui_auto_shut_down_modify(void);
extern void ui_auto_shut_down_enable(void);
extern void ui_auto_shut_down_disable(void);
extern int ui_simple_key_msg_post(int, int);
//=================================================================================//
// UI API //
//=================================================================================//
#if (TCFG_UI_ENABLE)
#if(CONFIG_UI_STYLE == STYLE_JL_LED7)//led7 显示
#define UI_INIT(a) led7_ui_init(a)
#define UI_SHOW_WINDOW(a) ui_set_main_menu(a)
#define UI_HIDE_WINDOW(...) ui_close_main_menu()
#define UI_HIDE_CURR_WINDOW() ui_close_main_menu()
#define UI_GET_WINDOW_ID() ui_get_app_menu(GET_MAIN_MENU)
#define UI_GET_CURR_MENU() ui_get_app_menu(GRT_CUR_MENU)
#define UI_REFLASH_WINDOW(a) ui_menu_reflash(a)
#define UI_SHOW_MENU ui_set_tmp_menu
#define UI_MSG_POST(...)
#define UI_KEY_MSG_POST(...)
#elif(CONFIG_UI_STYLE == STYLE_UI_SIMPLE)//去框架显示显示
#define UI_INIT(a) lcd_ui_init(a)
#define UI_SHOW_WINDOW(...)
#define UI_HIDE_WINDOW(...)
#define UI_GET_WINDOW_ID() (0)
#define UI_HIDE_CURR_WINDOW()
#define UI_SHOW_MENU(...)
#define UI_MSG_POST(...)
#define UI_REFLASH_WINDOW(a)
#define UI_KEY_MSG_POST(a)
#else
#define UI_INIT(a) lcd_ui_init(a)
#define UI_SHOW_WINDOW(a) ui_show_main(a)
#define UI_HIDE_WINDOW(a) ui_hide_main(a)
#define UI_HIDE_CURR_WINDOW() ui_hide_curr_main()
#define UI_GET_WINDOW_ID() ui_get_current_window_id()
#define UI_MSG_POST ui_server_msg_post
#define UI_SHOW_MENU(...)
#define UI_GET_CURR_MENU()
#define UI_REFLASH_WINDOW(a)
#define UI_KEY_MSG_POST(a) ui_key_msg_post
#endif//if(CONFIG_UI_STYLE == STYLE_JL_LED7)
#else
//common api lcd屏和led7 通用api
#define UI_INIT(...)
#define UI_SHOW_WINDOW(...)
#define UI_HIDE_WINDOW(...)
#define UI_GET_WINDOW_ID()
#define UI_HIDE_CURR_WINDOW()
#define UI_SHOW_MENU(...)
#define UI_MSG_POST(...)
#define UI_REFLASH_WINDOW(a)
#define UI_KEY_MSG_POST(...)
#endif /* #if TCFG_UI_ENABLE */
#endif

View File

@ -0,0 +1,15 @@
#ifndef _UI_COMMON_H_
#define _UI_COMMON_H_
#include "typedef.h"
/* =================== 十进制数值(1位)转ASCII值 =================== */
void itoa1(u8 i, u8 *buf);
/* =================== 十进制数值(2位)转ASCII值 =================== */
void itoa2(u8 i, u8 *buf);
/* =================== 十进制数值(3位)转ASCII值 =================== */
void itoa3(u16 i, u8 *buf);
/* =================== 十进制数值(4位)转ASCII值 =================== */
void itoa4(u16 i, u8 *buf);
#endif

View File

@ -0,0 +1,72 @@
#ifndef UI_STYLE_H
#define UI_STYLE_H
#include "ui/style_led7.h"//led7
#if(CONFIG_UI_STYLE == STYLE_JL_WTACH)
#include "ui/style_jl01.h"//彩屏//
#define ID_WINDOW_MAIN PAGE_3
#define ID_WINDOW_BT PAGE_0
#define ID_WINDOW_MUSIC PAGE_1
#define ID_WINDOW_LINEIN PAGE_1
// #define ID_WINDOW_FM PAGE_2
#define ID_WINDOW_CLOCK PAGE_0
// #define ID_WINDOW_BT_MENU PAGE_3
#define ID_WINDOW_POWER_ON PAGE_4
#define ID_WINDOW_POWER_OFF PAGE_5
#define CONFIG_UI_STYLE_JL_ENABLE
#endif
#if(CONFIG_UI_STYLE == STYLE_JL_SOUNDBOX)
#include "ui/style_jl02.h"//点阵//
#define ID_WINDOW_MAIN PAGE_0
#define ID_WINDOW_BT PAGE_1
#define ID_WINDOW_FM PAGE_2
#define ID_WINDOW_CLOCK PAGE_3
#define ID_WINDOW_MUSIC PAGE_4
#define ID_WINDOW_LINEIN PAGE_9
#define ID_WINDOW_POWER_ON PAGE_5
#define ID_WINDOW_POWER_OFF PAGE_6
#define ID_WINDOW_SYS PAGE_7
#define ID_WINDOW_PC PAGE_8
#define ID_WINDOW_IDLE (-1)
#define ID_WINDOW_REC PAGE_10
#endif
#if(CONFIG_UI_STYLE == STYLE_JL_LED7)//led7 显示
#define ID_WINDOW_BT UI_BT_MENU_MAIN
#define ID_WINDOW_FM UI_FM_MENU_MAIN
#define ID_WINDOW_CLOCK UI_RTC_MENU_MAIN
#define ID_WINDOW_MUSIC UI_MUSIC_MENU_MAIN
#define ID_WINDOW_LINEIN UI_AUX_MENU_MAIN
#define ID_WINDOW_PC UI_PC_MENU_MAIN
#define ID_WINDOW_REC UI_RECORD_MENU_MAIN
#define ID_WINDOW_POWER_ON UI_IDLE_MENU_MAIN
#define ID_WINDOW_POWER_OFF UI_IDLE_MENU_MAIN
#define ID_WINDOW_SPDIF UI_IDLE_MENU_MAIN
#define ID_WINDOW_IDLE UI_IDLE_MENU_MAIN
#endif
#if(CONFIG_UI_STYLE == STYLE_UI_SIMPLE)//lcd 去架构
#define ID_WINDOW_BT (0)
#define ID_WINDOW_FM (0)
#define ID_WINDOW_CLOCK (0)
#define ID_WINDOW_MUSIC (0)
#define ID_WINDOW_LINEIN (0)
#define ID_WINDOW_PC (0)
#define ID_WINDOW_REC (0)
#define ID_WINDOW_POWER_ON (0)
#define ID_WINDOW_POWER_OFF (0)
#define ID_WINDOW_SPDIF (0)
#define ID_WINDOW_IDLE (0)
#endif
#endif

View File

@ -0,0 +1,39 @@
#ifndef __UI_MANAGE_H_
#define __UI_MANAGE_H_
#include "typedef.h"
typedef enum {
STATUS_NULL = 0,
STATUS_POWERON,
STATUS_POWEROFF,
STATUS_POWERON_LOWPOWER,
STATUS_BT_INIT_OK,
STATUS_BT_CONN,
STATUS_BT_SLAVE_CONN_MASTER,
STATUS_BT_MASTER_CONN_ONE,
STATUS_BT_DISCONN,
STATUS_BT_TWS_CONN,
STATUS_BT_TWS_DISCONN,
STATUS_PHONE_INCOME,
STATUS_PHONE_OUT,
STATUS_PHONE_ACTIV,
STATUS_CHARGE_START,
STATUS_CHARGE_FULL,
STATUS_CHARGE_CLOSE,
STATUS_CHARGE_ERR,
STATUS_LOWPOWER,
STATUS_CHARGE_LDO5V_OFF,
STATUS_EXIT_LOWPOWER,
STATUS_NORMAL_POWER,
STATUS_POWER_NULL,
} UI_STATUS;
int ui_manage_init(void);
void ui_update_status(u8 status);
u8 get_ui_busy_status();
void led_module_enter_sniff_mode();
void led_module_exit_sniff_mode();
#endif

View File

@ -0,0 +1,68 @@
#ifndef _USER_CFG_ID_H_
#define _USER_CFG_ID_H_
//=================================================================================//
// 与APP CASE相关配置项[1 ~ 60] //
//=================================================================================//
#define CFG_EARTCH_ENABLE_ID 1
#define CFG_PBG_MODE_INFO 2
#define CFG_CHARGESTORE_TWS_CHANNEL 3
#define CFG_SYS_VOL 4
#define CFG_MIC_ARRAY_DIFF_CMP_VALUE 5//麦克风阵列算法前补偿值
#define CFG_MIC_ARRAY_TRIM_EN 6//麦克风补偿使能
#define CFG_DMS_MALFUNC_STATE_ID 7//dms故障麦克风检测默认使用哪个mic的参数id
#define CFG_MIC_TARGET_DIFF_CMP 8//目标MIC补偿值
#define CFG_DHA_FITTING_ID 26 //辅听验配保存参数的id
#define CFG_REMOTE_DN_00 27
#define CFG_IMU_GYRO_OFFEST_ID 28 //空间音频imu陀螺仪偏置
#define CFG_IMU_ACC_OFFEST_ID 29 //空间音频imu加速度偏置
#define VM_LP_TOUCH_KEY0_ALOG_CFG 30
#define VM_LP_TOUCH_KEY1_ALOG_CFG 31
#define VM_LP_TOUCH_KEY2_ALOG_CFG 32
#define VM_LP_TOUCH_KEY3_ALOG_CFG 33
#define VM_LP_TOUCH_KEY4_ALOG_CFG 34
#define VM_UPDATE_FLAG 35
#define VM_DMA_RAND 36
#define VM_DMA_RAND 37
#define VM_GMA_ALI_PARA 38
#define CFG_BCS_MAP_WEIGHT 39
#define CFG_RCSP_ADV_HIGH_LOW_VOL 40
#define CFG_RCSP_ADV_EQ_MODE_SETTING 41
#define CFG_RCSP_ADV_EQ_DATA_SETTING 42
#define ADV_SEQ_RAND 43
#define CFG_RCSP_ADV_TIME_STAMP 44
#define CFG_RCSP_ADV_WORK_SETTING 45
#define CFG_RCSP_ADV_MIC_SETTING 46
#define CFG_RCSP_ADV_LED_SETTING 47
#define CFG_RCSP_ADV_KEY_SETTING 48
#define CFG_USB_BREAKPOINT0 49
#define CFG_SD0_BREAKPOINT0 50
#define CFG_SD1_BREAKPOINT0 51
#define CFG_HAVE_MASS_STORAGE 52
#define CFG_MUSIC_MODE 53
#define LP_KEY_EARTCH_TRIM_VALUE 54
#define CFG_RCSP_ADV_ANC_VOICE 55
#define CFG_RCSP_ADV_ANC_VOICE_MODE 56
#define CFG_RCSP_ADV_ANC_VOICE_KEY 57
#define CFG_SPK_EQ_SEG_SAVE 58
#define CFG_SPK_EQ_GLOBAL_GAIN_SAVE 59
#define CFG_ANC_ADAPTIVE_DATA_ID 60//保存ANC自适应参数id
#define CFG_REMOTE_DN_00 63
#endif /* #ifndef _USER_CFG_ID_H_ */

View File

@ -0,0 +1,9 @@
#ifndef __VOL_SYNC_H__
#define __VOL_SYNC_H__
void vol_sys_tab_init(void);
void set_music_device_volume(int volume);
int phone_get_device_vol(void);
void opid_play_vol_sync_fun(u8 *vol, u8 mode);
#endif

View File

@ -0,0 +1,104 @@
#ifndef __BT_EDR_FUN_H__
#define __BT_EDR_FUN_H__
#include "adapter_odev_bt.h"
#include "app_main.h"
/*配置通话时前面丢掉的数据包包数*/
#define ESCO_DUMP_PACKET_ADJUST 1 /*配置使能*/
#define ESCO_DUMP_PACKET_DEFAULT 0
#define ESCO_DUMP_PACKET_CALL 120 /*0~0xFF*/
#if(TCFG_UI_ENABLE && TCFG_SPI_LCD_ENABLE)//点阵屏断开蓝牙连接时可选择不跳回蓝牙模式
#define BACKGROUND_GOBACK 0 //后台链接是否跳回蓝牙 1跳回
#else
#define BACKGROUND_GOBACK 1
#endif
#define TIMEOUT_CONN_TIME 60 //超时断开之后回连的时间s
#define POWERON_AUTO_CONN_TIME 12 //开机去回连的时间
#define PHONE_CALL_FORCE_POWEROFF 0 //通话时候强制关机
#define SBC_FILTER_TIME_MS 1000 //后台音频过滤时间ms
#define SBC_ZERO_TIME_MS 500 //静音多长时间认为已经退出
#define NO_SBC_TIME_MS 200 //无音频时间ms
#define SNIFF_CNT_TIME 5/////<空闲5S之后进入sniff模式
#define SNIFF_MAX_INTERVALSLOT 800
#define SNIFF_MIN_INTERVALSLOT 100
#define SNIFF_ATTEMPT_SLOT 4
#define SNIFF_TIMEOUT_SLOT 1
enum {
BT_AS_IDEV = 0,
BT_AS_ODEV,
};
void set_bt_dev_role(u8 role);
struct app_bt_opr {
u8 init_ok : 1; // 1-初始化完成
u8 call_flag : 1; // 1-由于蓝牙打电话命令切回蓝牙模式
u8 exit_flag : 1; // 1-可以退出蓝牙标志
u8 exiting : 1; // 1-正在退出蓝牙模式
u8 wait_exit : 1; // 1-等退出蓝牙模式
u8 a2dp_decoder_type: 3; // 从后台返回时记录解码格式用
u8 cmd_flag ; // 1-由于蓝牙命令切回蓝牙模式
u8 init_start ; //蓝牙协议栈初始化开始 ,但未初始化不一定已经完成要判断initok完成的标志
u8 ignore_discon_tone; // 1-退出蓝牙模式, 不响应discon提示音
u8 sbc_packet_valid_cnt; // 有效sbc包计数
u8 sbc_packet_valid_cnt_max;// 最大有效sbc包计数
u8 sbc_packet_lose_cnt; // sbc丢失的包数
u8 sbc_packet_step; // 0-正常1-退出中2-后台
u32 tws_local_back_role : 4;
u32 tws_local_to_bt_mode : 1;
u32 a2dp_start_flag : 1;
u32 bt_back_flag : 4;
u32 replay_tone_flag : 1;
u8 esco_dump_packet;
u8 last_connecting_addr[6];
u32 sbc_packet_filter_to; // 过滤超时
u32 no_sbc_packet_to; // 无声超时
u32 init_ok_time; // 初始化完成时间
u32 auto_exit_limit_time; // 自动退出时间限制
u8 bt_direct_init;
u8 bt_close_bredr;
u8 hid_mode;
u8 force_poweroff;
u8 call_back_flag; //BIT(0):hfp_status BIT(1):esco_status
int timer;
int tmr_cnt;
int back_mode_systime;
int max_tone_timer_hdl;
int exit_sniff_timer ;
u32 sco_info;
};
extern struct app_bt_opr app_bt_hdl;
extern BT_USER_PRIV_VAR bt_user_priv_var;
void bt_init();
void bt_close(void);
void sys_auto_shut_down_enable(void);
void sys_auto_shut_down_disable(void);
u8 get_bt_init_status();
void bt_set_led_status(u8 status);
void sys_auto_sniff_controle(u8 enable, u8 *addr);
void bt_wait_phone_connect_control(u8 enable);
int bt_wait_connect_and_phone_connect_switch(void *p);
u8 is_call_now();
//bt status
int bt_connction_status_event_handler(struct bt_event *bt, struct _odev_bt *odev_bt);
//hci event
int bt_hci_event_handler(struct bt_event *bt, struct _odev_bt *odev_bt);
#endif //__BT_EDR_FUN_H__

View File

@ -0,0 +1,12 @@
#ifndef _WIRELESS_MIC_TEST_
#define _WIRELESS_MIC_TEST_
#include "system/includes.h"
// struct adapter_media {
// };
#endif