Compare commits
4 Commits
8828f24549
...
ac7299e7ad
| Author | SHA1 | Date | |
|---|---|---|---|
| ac7299e7ad | |||
| 6be3cd1070 | |||
| 671730a351 | |||
| 97e85df2f8 |
5
.vscode/settings.json
vendored
5
.vscode/settings.json
vendored
@ -19,6 +19,9 @@
|
||||
"hci_lmp.h": "c",
|
||||
"bluetooth.h": "c",
|
||||
"SCU722.C": "cpp",
|
||||
"math.h": "c"
|
||||
"math.h": "c",
|
||||
"avctp_user.h": "c",
|
||||
"string.h": "c",
|
||||
"dev_manager.h": "c"
|
||||
}
|
||||
}
|
||||
4
Makefile
4
Makefile
@ -248,6 +248,7 @@ INCLUDES := \
|
||||
-Iapps/earphone/xtell_Sensor/buffer \
|
||||
-Iapps/earphone/xtell_Sensor/sensor \
|
||||
-Iapps/earphone/xtell_Sensor \
|
||||
-Iapps/earphone/xtell_Sensor/calculate \
|
||||
-I$(SYS_INC_DIR) \
|
||||
|
||||
|
||||
@ -617,7 +618,8 @@ c_SRC_FILES := \
|
||||
apps/earphone/xtell_Sensor/send_data.c \
|
||||
apps/earphone/xtell_Sensor/buffer/circle_buffer.c \
|
||||
apps/earphone/xtell_Sensor/sensor/LIS2DH12.c \
|
||||
apps/earphone/xtell_Sensor/sensor/SCU722.c \
|
||||
apps/earphone/xtell_Sensor/sensor/SC7U22.c \
|
||||
apps/earphone/xtell_Sensor/calculate/skiing_tracker.c \
|
||||
|
||||
|
||||
# 需要编译的 .S 文件
|
||||
|
||||
@ -18,12 +18,24 @@
|
||||
#include "bt_tws.h"
|
||||
#endif
|
||||
|
||||
#define ENABLE_XLOG 1
|
||||
#ifdef xlog
|
||||
#undef xlog
|
||||
#endif
|
||||
#if ENABLE_XLOG
|
||||
#define xlog(format, ...) printf("[XT:%s] " format, __func__, ##__VA_ARGS__)
|
||||
#else
|
||||
#define xlog(format, ...) ((void)0)
|
||||
#endif
|
||||
|
||||
|
||||
|
||||
spinlock_t iic_lock;
|
||||
|
||||
#define LOG_TAG "[GSENSOR]"
|
||||
#define LOG_ERROR_ENABLE
|
||||
#define LOG_DEBUG_ENABLE
|
||||
#define LOG_INFO_ENABLE
|
||||
#define xlog_ENABLE
|
||||
/* #define LOG_DUMP_ENABLE */
|
||||
#define LOG_CLI_ENABLE
|
||||
#include "debug.h"
|
||||
@ -82,20 +94,20 @@ void gSensor_int_io_detect(void *priv)
|
||||
u8 int_io_status = 0;
|
||||
u8 det_result = 0;
|
||||
int_io_status = gpio_read(platform_data->gSensor_int_io);
|
||||
//log_info("status %d\n",int_io_status);
|
||||
//xlog("status %d\n",int_io_status);
|
||||
gSensor_hdl->gravity_sensor_ctl(GSENSOR_INT_DET, &int_io_status);
|
||||
if (gSensor_hdl->gravity_sensor_check == NULL) {
|
||||
return;
|
||||
}
|
||||
det_result = gSensor_hdl->gravity_sensor_check();
|
||||
if (det_result == 1) {
|
||||
log_info("GSENSOR_EVENT_CLICK\n");
|
||||
xlog("GSENSOR_EVENT_CLICK\n");
|
||||
gSensor_event_to_user(KEY_EVENT_CLICK);
|
||||
} else if (det_result == 2) {
|
||||
log_info("GSENSOR_EVENT_DOUBLE_CLICK\n");
|
||||
xlog("GSENSOR_EVENT_DOUBLE_CLICK\n");
|
||||
gSensor_event_to_user(KEY_EVENT_DOUBLE_CLICK);
|
||||
} else if (det_result == 3) {
|
||||
log_info("GSENSOR_EVENT_THREE_CLICK\n");
|
||||
xlog("GSENSOR_EVENT_THREE_CLICK\n");
|
||||
gSensor_event_to_user(KEY_EVENT_TRIPLE_CLICK);
|
||||
}
|
||||
}
|
||||
@ -117,7 +129,7 @@ int gSensor_read_data(u8 *buf, u8 buflen)
|
||||
//
|
||||
int get_gSensor_data(short *buf)
|
||||
{
|
||||
// printf("%s",__func__);
|
||||
// xlog("%s",__func__);
|
||||
axis_info_t accel_data[32];
|
||||
if (!gpio_read(platform_data->gSensor_int_io)) {
|
||||
gSensor_hdl->gravity_sensor_ctl(READ_GSENSOR_DATA, accel_data);
|
||||
@ -126,7 +138,7 @@ int get_gSensor_data(short *buf)
|
||||
buf[i * 2] = accel_data[i].x;
|
||||
buf[i * 2 + 1] = accel_data[i].y;
|
||||
buf[i * 2 + 2] = accel_data[i].z;
|
||||
// printf("cnt:%1d x:%5d y:%5d z:%5d\n", i, accel_data[i].x, accel_data[i].y, accel_data[i].z);
|
||||
// xlog("cnt:%1d x:%5d y:%5d z:%5d\n", i, accel_data[i].x, accel_data[i].y, accel_data[i].z);
|
||||
|
||||
}
|
||||
|
||||
@ -144,7 +156,7 @@ int read_gsensor_buf(short *buf)
|
||||
static u8 wr_lock;
|
||||
int read_gsensor_nbuf(short *buf, short datalen)
|
||||
{
|
||||
// printf("%s",__func__);
|
||||
// xlog("%s",__func__);
|
||||
if (data_w_cbuf == NULL) {
|
||||
return 0;
|
||||
}
|
||||
@ -161,7 +173,7 @@ int read_gsensor_nbuf(short *buf, short datalen)
|
||||
return 0;
|
||||
}
|
||||
} else {
|
||||
printf("%s NOT ONLINE ", __func__);
|
||||
xlog("%s NOT ONLINE ", __func__);
|
||||
return 0;
|
||||
}
|
||||
}
|
||||
@ -175,27 +187,27 @@ void write_gsensor_data_handle(void)
|
||||
if (gSensor_info->init_flag == 1) {
|
||||
|
||||
// if (read_write_status == 0) {
|
||||
// printf("%s ",__func__);
|
||||
// xlog("%s ",__func__);
|
||||
// return;
|
||||
// }
|
||||
|
||||
if (!gpio_read(platform_data->gSensor_int_io)) {
|
||||
gSensor_hdl->gravity_sensor_ctl(READ_GSENSOR_DATA, accel_data);
|
||||
/*for(int i=0;i<29;i++){
|
||||
printf("cnt:%1d x:%5d y:%5d z:%5d\n", i, accel_data[i].x, accel_data[i].y, accel_data[i].z);
|
||||
xlog("cnt:%1d x:%5d y:%5d z:%5d\n", i, accel_data[i].x, accel_data[i].y, accel_data[i].z);
|
||||
|
||||
}*/
|
||||
u8 wlen;
|
||||
wlen = cbuf_write(data_w_cbuf, accel_data, 2 * 3 * 29);
|
||||
/* for(int i=0;i<29;i++){ */
|
||||
/* printf("sour x=%06d y=%06d z=%06d",accel_data[i].x,accel_data[i].y,accel_data[i].z); */
|
||||
/* xlog("sour x=%06d y=%06d z=%06d",accel_data[i].x,accel_data[i].y,accel_data[i].z); */
|
||||
/* } */
|
||||
if (wlen == 0) {
|
||||
printf("data_w_cbuf_full");
|
||||
xlog("data_w_cbuf_full");
|
||||
}
|
||||
}
|
||||
} else {
|
||||
// printf("%s ",__func__);
|
||||
// xlog("%s ",__func__);
|
||||
return ;
|
||||
}
|
||||
}
|
||||
@ -207,7 +219,7 @@ u8 gravity_sensor_command(u8 w_chip_id, u8 register_address, u8 function_command
|
||||
iic_start(gSensor_info->iic_hdl);
|
||||
if (0 == iic_tx_byte(gSensor_info->iic_hdl, w_chip_id)) {
|
||||
ret = 0;
|
||||
log_e("\n gsen iic wr err 0\n");
|
||||
xlog("\n gsen iic wr err 0\n");
|
||||
goto __gcend;
|
||||
}
|
||||
|
||||
@ -215,7 +227,7 @@ u8 gravity_sensor_command(u8 w_chip_id, u8 register_address, u8 function_command
|
||||
|
||||
if (0 == iic_tx_byte(gSensor_info->iic_hdl, register_address)) {
|
||||
ret = 0;
|
||||
log_e("\n gsen iic wr err 1\n");
|
||||
xlog("\n gsen iic wr err 1\n");
|
||||
goto __gcend;
|
||||
}
|
||||
|
||||
@ -223,7 +235,7 @@ u8 gravity_sensor_command(u8 w_chip_id, u8 register_address, u8 function_command
|
||||
|
||||
if (0 == iic_tx_byte(gSensor_info->iic_hdl, function_command)) {
|
||||
ret = 0;
|
||||
log_e("\n gsen iic wr err 2\n");
|
||||
xlog("\n gsen iic wr err 2\n");
|
||||
goto __gcend;
|
||||
}
|
||||
|
||||
@ -236,14 +248,14 @@ __gcend:
|
||||
|
||||
u8 _gravity_sensor_get_ndata(u8 r_chip_id, u8 register_address, u8 *buf, u8 data_len)
|
||||
{
|
||||
// printf("%s",__func__);
|
||||
// xlog("%s",__func__);
|
||||
// spin_lock(&sensor_iic);
|
||||
/* os_mutex_pend(&SENSOR_IIC_MUTEX,0); */
|
||||
u8 read_len = 0;
|
||||
|
||||
iic_start(gSensor_info->iic_hdl);
|
||||
if (0 == iic_tx_byte(gSensor_info->iic_hdl, r_chip_id - 1)) {
|
||||
log_e("\n gsen iic rd err 0\n");
|
||||
xlog("\n gsen iic rd err 0\n");
|
||||
read_len = 0;
|
||||
goto __gdend;
|
||||
}
|
||||
@ -251,14 +263,14 @@ u8 _gravity_sensor_get_ndata(u8 r_chip_id, u8 register_address, u8 *buf, u8 data
|
||||
|
||||
delay(gSensor_info->iic_delay);
|
||||
if (0 == iic_tx_byte(gSensor_info->iic_hdl, register_address)) {
|
||||
log_e("\n gsen iic rd err 1\n");
|
||||
xlog("\n gsen iic rd err 1\n");
|
||||
read_len = 0;
|
||||
goto __gdend;
|
||||
}
|
||||
|
||||
iic_start(gSensor_info->iic_hdl);
|
||||
if (0 == iic_tx_byte(gSensor_info->iic_hdl, r_chip_id)) {
|
||||
log_e("\n gsen iic rd err 2\n");
|
||||
xlog("\n gsen iic rd err 2\n");
|
||||
read_len = 0;
|
||||
goto __gdend;
|
||||
}
|
||||
@ -302,13 +314,13 @@ int gravity_sensor_init(void *_data)
|
||||
gSensor_info->iic_hdl = platform_data->iic;
|
||||
retval = iic_init(gSensor_info->iic_hdl);
|
||||
|
||||
log_e("\n gravity_sensor_init\n");
|
||||
xlog("\n gravity_sensor_init\n");
|
||||
|
||||
if (retval < 0) {
|
||||
log_e("\n open iic for gsensor err\n");
|
||||
xlog("\n open iic for gsensor err\n");
|
||||
return retval;
|
||||
} else {
|
||||
log_info("\n iic open succ\n");
|
||||
xlog("\n iic open succ\n");
|
||||
}
|
||||
|
||||
retval = -EINVAL;
|
||||
@ -320,14 +332,14 @@ int gravity_sensor_init(void *_data)
|
||||
}
|
||||
|
||||
if (retval < 0) {
|
||||
log_e(">>>gSensor_hdl logo err\n");
|
||||
xlog(">>>gSensor_hdl logo err\n");
|
||||
return retval;
|
||||
}
|
||||
|
||||
if (gSensor_hdl->gravity_sensor_init()) {
|
||||
log_e(">>>>gSensor_Int ERROR\n");
|
||||
xlog(">>>>gSensor_Int ERROR\n");
|
||||
} else {
|
||||
log_info(">>>>gSensor_Int SUCC\n");
|
||||
xlog(">>>>gSensor_Int SUCC\n");
|
||||
gSensor_info->init_flag = 1;
|
||||
if (platform_data->gSensor_int_io != -1) {
|
||||
gpio_set_pull_up(platform_data->gSensor_int_io, 1);
|
||||
@ -336,7 +348,7 @@ int gravity_sensor_init(void *_data)
|
||||
gpio_set_die(platform_data->gSensor_int_io, 1);
|
||||
data_buf = zalloc(BUF_SIZE);
|
||||
if (data_buf == NULL) {
|
||||
printf("gsensor_cbuf_error!");
|
||||
xlog("gsensor_cbuf_error!");
|
||||
|
||||
return 0;
|
||||
}
|
||||
@ -347,7 +359,7 @@ int gravity_sensor_init(void *_data)
|
||||
cbuf_init(data_w_cbuf, data_buf, BUF_SIZE);
|
||||
/* port_edge_wkup_set_callback(write_gsensor_data_handle); */
|
||||
/* 已改为使用port_edge_wkup_set_callback_by_index,使用时需要重新实现 */
|
||||
printf("cbuf_init");
|
||||
xlog("cbuf_init");
|
||||
// spin_lock_init(&iic_lock);
|
||||
|
||||
// sys_s_hi_timer_add(NULL, gSensor_int_io_detect, 10); //10ms
|
||||
@ -388,7 +400,7 @@ int gsensor_enable(void)
|
||||
//工作空间
|
||||
data_buf = zalloc(BUF_SIZE);
|
||||
if (data_buf == NULL) {
|
||||
printf("gsensor_cbuf_error!");
|
||||
xlog("gsensor_cbuf_error!");
|
||||
return -1;
|
||||
}
|
||||
data_w_cbuf = zalloc(sizeof(cbuffer_t));
|
||||
@ -396,7 +408,7 @@ int gsensor_enable(void)
|
||||
return -1;
|
||||
}
|
||||
cbuf_init(data_w_cbuf, data_buf, BUF_SIZE);
|
||||
printf("cbuf_init");
|
||||
xlog("cbuf_init");
|
||||
//设置参数
|
||||
valid = 0;
|
||||
gSensor_hdl->gravity_sensor_ctl(GSENSOR_RESET_INT, &valid);
|
||||
@ -404,6 +416,6 @@ int gsensor_enable(void)
|
||||
if (valid == -1) {
|
||||
return -1;
|
||||
}
|
||||
printf("gsensor_reset_succeed\n");
|
||||
xlog("gsensor_reset_succeed\n");
|
||||
return 0;
|
||||
}
|
||||
|
||||
@ -588,7 +588,7 @@ static const u8 dueros_dma_uuid_16bit[] = {0x04, 0xFE};
|
||||
extern u8 *get_chargebox_adv_addr(void);
|
||||
#endif
|
||||
|
||||
static void rcsp_adv_fill_mac_addr(u8 *mac_addr_buf)
|
||||
void rcsp_adv_fill_mac_addr(u8 *mac_addr_buf)
|
||||
{
|
||||
#if (MUTIl_CHARGING_BOX_EN)
|
||||
u8 *mac_addr = get_chargebox_adv_addr();
|
||||
|
||||
@ -41,7 +41,7 @@
|
||||
'C': IO_PORTA_07 IO_PORTA_08
|
||||
'D': IO_PORTA_05 IO_PORTA_06
|
||||
*/
|
||||
#define TCFG_HW_I2C0_PORTS 'B'
|
||||
#define TCFG_HW_I2C0_PORTS 'D'
|
||||
#define TCFG_HW_I2C0_CLK 100000 //硬件IIC波特率
|
||||
|
||||
//*********************************************************************************//
|
||||
|
||||
219
apps/earphone/xtell_Sensor/A_hide/1/skiing_tracker.c
Normal file
219
apps/earphone/xtell_Sensor/A_hide/1/skiing_tracker.c
Normal file
@ -0,0 +1,219 @@
|
||||
/*
|
||||
静态ZUPT+卡尔曼,效果貌似还行
|
||||
*/
|
||||
|
||||
#include "skiing_tracker.h"
|
||||
#include "../sensor/SC7U22.h" // 包含传感器驱动头文件以调用姿态解算函数
|
||||
#include <math.h>
|
||||
#include <string.h>
|
||||
|
||||
#define G_ACCELERATION 9.81f // 重力加速度 (m/s^2)
|
||||
#define DEG_TO_RAD (3.14159265f / 180.0f)
|
||||
|
||||
// --- 状态检测阈值 ---
|
||||
// 判断是否静止的加速度阈值 (m/s^2)。当加速度的模长减去重力后,小于此值,则认为可能静止。
|
||||
#define STATIC_ACC_THRESHOLD 1.0f
|
||||
// 连续多少帧满足静止条件才确认为静止状态
|
||||
#define STATIC_FRAMES_REQUIRED 50 // 累加,超过这个数加速度仍变化不大,说明近似静止
|
||||
|
||||
/**
|
||||
* @brief 初始化滑雪追踪器
|
||||
*/
|
||||
void skiing_tracker_init(skiing_tracker_t *tracker)
|
||||
{
|
||||
if (!tracker) {
|
||||
return;
|
||||
}
|
||||
memset(tracker, 0, sizeof(skiing_tracker_t));
|
||||
tracker->state = SKIING_STATE_STATIC; // 初始状态为静止
|
||||
}
|
||||
|
||||
/**
|
||||
* @brief 将设备坐标系下的加速度转换为世界坐标系
|
||||
* @param acc_device 设备坐标系下的加速度 [x, y, z]
|
||||
* @param angle 姿态角 [pitch, roll, yaw],单位: 度
|
||||
* @param acc_world 输出:世界坐标系下的加速度 [x, y, z]
|
||||
*/
|
||||
static void transform_acc_to_world_frame(const float *acc_device, const float *angle, float *acc_world)
|
||||
{
|
||||
// 修正#1:驱动输出的角度与标准航空定义相反,需要取反才能用于标准旋转矩阵。
|
||||
float pitch = -angle[0] * DEG_TO_RAD;
|
||||
float roll = -angle[1] * DEG_TO_RAD;
|
||||
|
||||
float cp = cosf(pitch);
|
||||
float sp = sinf(pitch);
|
||||
float cr = cosf(roll);
|
||||
float sr = sinf(roll);
|
||||
|
||||
float ax = acc_device[0];
|
||||
float ay = acc_device[1];
|
||||
float az = acc_device[2];
|
||||
|
||||
// 修正#2:使用经过验证的、正确的身体坐标系到世界坐标系的旋转矩阵 (基于 Y-X 旋转顺序)
|
||||
// 这个矩阵将设备测量的加速度(ax, ay, az)正确地转换到世界坐标系(acc_world)。
|
||||
acc_world[0] = cp * ax + sp * sr * ay + sp * cr * az;
|
||||
acc_world[1] = 0 * ax + cr * ay - sr * az;
|
||||
acc_world[2] = -sp * ax + cp * sr * ay + cp * cr * az;
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* @brief 更新滑雪状态机
|
||||
*/
|
||||
static void update_state_machine(skiing_tracker_t *tracker, const float *acc_device)
|
||||
{
|
||||
// 计算当前加速度的模长
|
||||
float acc_magnitude = sqrtf(acc_device[0] * acc_device[0] + acc_device[1] * acc_device[1] + acc_device[2] * acc_device[2]);
|
||||
|
||||
// 状态判断逻辑
|
||||
switch (tracker->state) {
|
||||
case SKIING_STATE_STATIC:
|
||||
// 如果加速度变化较大,则切换到滑雪状态
|
||||
if (fabsf(acc_magnitude - G_ACCELERATION) > STATIC_ACC_THRESHOLD * 2.0f) { // 使用一个更大的阈值来启动
|
||||
tracker->state = SKIING_STATE_SKIING;
|
||||
tracker->static_frames_count = 0;
|
||||
}
|
||||
break;
|
||||
|
||||
case SKIING_STATE_SKIING:
|
||||
// 检测是否进入静止状态 (零速更新 ZUPT)
|
||||
if (fabsf(acc_magnitude - G_ACCELERATION) < STATIC_ACC_THRESHOLD) {
|
||||
tracker->static_frames_count++;
|
||||
if (tracker->static_frames_count >= STATIC_FRAMES_REQUIRED) {
|
||||
tracker->state = SKIING_STATE_STATIC;
|
||||
// 进入静止状态,强制将速度清零以消除漂移
|
||||
memset(tracker->velocity, 0, sizeof(tracker->velocity));
|
||||
tracker->speed = 0.0f;
|
||||
}
|
||||
} else {
|
||||
// 如果在运动,则重置静止计数器
|
||||
tracker->static_frames_count = 0;
|
||||
}
|
||||
break;
|
||||
|
||||
// 可以在此添加摔倒等其他状态的判断
|
||||
case SKIING_STATE_FALLEN:
|
||||
// TODO: 添加从摔倒状态恢复的逻辑
|
||||
break;
|
||||
|
||||
default:
|
||||
tracker->state = SKIING_STATE_UNKNOWN;
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* @brief 主更新函数
|
||||
*/
|
||||
void skiing_tracker_update(skiing_tracker_t *tracker, float *acc, float *angle, float dt)
|
||||
{
|
||||
if (!tracker || !acc || !angle || dt <= 0) {
|
||||
return;
|
||||
}
|
||||
|
||||
// 将原始g单位的加速度转换为 m/s^2
|
||||
float acc_device_ms2[3];
|
||||
acc_device_ms2[0] = acc[0] * G_ACCELERATION;
|
||||
acc_device_ms2[1] = acc[1] * G_ACCELERATION;
|
||||
acc_device_ms2[2] = acc[2] * G_ACCELERATION;
|
||||
|
||||
// 更新状态机
|
||||
update_state_machine(tracker, acc_device_ms2);
|
||||
|
||||
// 只有在滑雪状态下才进行计算
|
||||
if (tracker->state == SKIING_STATE_SKIING) {
|
||||
// 坐标系转换: 首先,利用姿态角(Pitch, Roll)将传感器测得的总加速度(运动加速度+重力)
|
||||
// 从不断变化的“设备坐标系”转换到一个固定的“世界坐标系”。在这个世界坐标系里,Z轴永远垂直于地面指向上方。
|
||||
// 执行坐标系转换
|
||||
transform_acc_to_world_frame(acc_device_ms2, angle, tracker->acc_world);
|
||||
// 转换完成后,重力就变成了一个恒定的、方向沿Z轴向下的矢量。
|
||||
|
||||
// 修正#3:经过正确的坐标转换后,静止时重力在世界坐标系Z轴上的分量精确为+g。
|
||||
// 必须减去这个g,才能得到纯粹的运动加速度。
|
||||
tracker->acc_world[2] -= G_ACCELERATION;
|
||||
|
||||
// 积分计算速度 (v = v0 + a*t)
|
||||
tracker->velocity[0] += tracker->acc_world[0] * dt;
|
||||
tracker->velocity[1] += tracker->acc_world[1] * dt;
|
||||
tracker->velocity[2] += tracker->acc_world[2] * dt; // 垂直方向速度也计算在内
|
||||
|
||||
// 计算当前速率
|
||||
tracker->speed = sqrtf(tracker->velocity[0] * tracker->velocity[0] +
|
||||
tracker->velocity[1] * tracker->velocity[1] +
|
||||
tracker->velocity[2] * tracker->velocity[2]);
|
||||
|
||||
// 积分计算距离 (d = d0 + v*t)
|
||||
tracker->distance += tracker->speed * dt;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
// 传感器数据采集与处理任务
|
||||
void sensor_processing_task(signed short * acc_data_buf,signed short * gyr_data_buf) {
|
||||
// --- 1. 定义静态变量 ---
|
||||
static skiing_tracker_t my_skiing_tracker;
|
||||
static int initialized = 0;
|
||||
static int calibration_done = 0; // 新增:用于标记一次性静态校准是否完成
|
||||
|
||||
static signed short combined_raw_data[6];
|
||||
static float final_angle_data[3];
|
||||
static float calibrated_acc_g[3];
|
||||
|
||||
// sensor_processing_task的调用频率, dt = 0.001s
|
||||
const float delta_time = 0.01f;
|
||||
|
||||
// --- 2. 初始化 ---
|
||||
if (!initialized) {
|
||||
skiing_tracker_init(&my_skiing_tracker);
|
||||
initialized = 1;
|
||||
printf("Skiing Tracker Initialized. Waiting for sensor calibration...\n");
|
||||
}
|
||||
|
||||
// --- 3. 数据处理 ---
|
||||
//合并加速度和陀螺仪数据
|
||||
memcpy(&combined_raw_data[0], acc_data_buf, 3 * sizeof(signed short));
|
||||
memcpy(&combined_raw_data[3], gyr_data_buf, 3 * sizeof(signed short));
|
||||
|
||||
unsigned char status;
|
||||
if (get_calibration_state() == 0) { //正在校准
|
||||
//领票校准
|
||||
status = SL_SC7U22_Angle_Output(1, combined_raw_data, final_angle_data, 0);
|
||||
if (status == 1) {
|
||||
calibration_done = 1;
|
||||
printf("Sensor calibration successful! Skiing mode is active.\n");
|
||||
}
|
||||
} else {
|
||||
status = SL_SC7U22_Angle_Output(0, combined_raw_data, final_angle_data, 0);
|
||||
}
|
||||
|
||||
// c. 检查姿态解算是否成功
|
||||
if (status == 1) {
|
||||
// 将校准后的加速度数据从 LSB (原始值) 转换为 g (重力单位)
|
||||
// ±8g量程下,8192 LSB 对应 1g
|
||||
calibrated_acc_g[0] = (float)combined_raw_data[0] / 8192.0f;
|
||||
calibrated_acc_g[1] = (float)combined_raw_data[1] / 8192.0f;
|
||||
calibrated_acc_g[2] = (float)combined_raw_data[2] / 8192.0f;
|
||||
|
||||
skiing_tracker_update(&my_skiing_tracker, calibrated_acc_g, final_angle_data, delta_time);
|
||||
|
||||
static count = 0;
|
||||
if(count < 10){
|
||||
count++;
|
||||
return;
|
||||
}else{
|
||||
count = 0;
|
||||
}
|
||||
printf("State: %d, Speed: %.2f m/s, Distance: %.2f m\n",
|
||||
my_skiing_tracker.state,
|
||||
my_skiing_tracker.speed,
|
||||
my_skiing_tracker.distance);
|
||||
|
||||
} else if (status == 0) {
|
||||
// 传感器正在进行静态校准
|
||||
// printf("Sensor is calibrating...\n");
|
||||
} else {
|
||||
// status == 2, 表示校准失败或发生错误
|
||||
// printf("Angle calculation error or calibration not finished.\n");
|
||||
}
|
||||
}
|
||||
41
apps/earphone/xtell_Sensor/A_hide/1/skiing_tracker.h
Normal file
41
apps/earphone/xtell_Sensor/A_hide/1/skiing_tracker.h
Normal file
@ -0,0 +1,41 @@
|
||||
#ifndef SKIING_TRACKER_H
|
||||
#define SKIING_TRACKER_H
|
||||
|
||||
// 定义滑雪者可能的状态
|
||||
typedef enum {
|
||||
SKIING_STATE_STATIC, // 静止
|
||||
SKIING_STATE_SKIING, // 正在滑雪
|
||||
SKIING_STATE_FALLEN, // 已摔倒
|
||||
SKIING_STATE_UNKNOWN // 未知状态
|
||||
} skiing_state_t;
|
||||
|
||||
// 追踪器数据结构体
|
||||
typedef struct {
|
||||
float velocity[3]; // 当前速度 (x, y, z),单位: m/s
|
||||
float distance; // 总滑行距离,单位: m
|
||||
float speed; // 当前速率 (标量),单位: m/s
|
||||
skiing_state_t state; // 当前滑雪状态
|
||||
|
||||
// 私有成员,用于内部计算
|
||||
int static_frames_count; // 用于判断静止状态的帧计数器
|
||||
float acc_world[3]; // 在世界坐标系下的加速度
|
||||
} skiing_tracker_t;
|
||||
|
||||
/**
|
||||
* @brief 初始化滑雪追踪器
|
||||
*
|
||||
* @param tracker 指向 skiing_tracker_t 结构体的指针
|
||||
*/
|
||||
void skiing_tracker_init(skiing_tracker_t *tracker);
|
||||
|
||||
/**
|
||||
* @brief 处理传感器数据并更新滑雪状态
|
||||
*
|
||||
* @param tracker 指向 skiing_tracker_t 结构体的指针
|
||||
* @param acc 校准后的加速度数据 [x, y, z],单位: g (1g = 9.8m/s^2)
|
||||
* @param angle 姿态角数据 [pitch, roll, yaw],单位: 度
|
||||
* @param dt 采样时间间隔,单位: 秒 (s)
|
||||
*/
|
||||
void skiing_tracker_update(skiing_tracker_t *tracker, float *acc, float *angle, float dt);
|
||||
|
||||
#endif // SKIING_TRACKER_H
|
||||
259
apps/earphone/xtell_Sensor/A_hide/2/skiing_tracker.c
Normal file
259
apps/earphone/xtell_Sensor/A_hide/2/skiing_tracker.c
Normal file
@ -0,0 +1,259 @@
|
||||
/*
|
||||
动态ZUPT+卡尔曼
|
||||
*/
|
||||
#include "skiing_tracker.h"
|
||||
#include "../sensor/SC7U22.h"
|
||||
#include <math.h>
|
||||
#include <string.h>
|
||||
|
||||
#define G_ACCELERATION 9.81f
|
||||
#define DEG_TO_RAD (3.14159265f / 180.0f)
|
||||
|
||||
// --- 算法阈值定义 ---
|
||||
// 动态零速更新(ZUPT)阈值:加速度方差小于此值,认为处于动态稳定状态
|
||||
#define ZUPT_ACC_VARIANCE_THRESHOLD 0.05f
|
||||
// 旋转检测阈值:Z轴角速度大于此值(度/秒),认为正在原地旋转
|
||||
#define ROTATION_GYR_Z_THRESHOLD 60.0f
|
||||
// 启动滑雪阈值:加速度模长与重力的差值大于此值,认为开始运动
|
||||
#define START_SKIING_ACC_THRESHOLD 1.5f
|
||||
|
||||
/**
|
||||
* @brief 初始化滑雪追踪器
|
||||
*/
|
||||
void skiing_tracker_init(skiing_tracker_t *tracker)
|
||||
{
|
||||
if (!tracker) {
|
||||
return;
|
||||
}
|
||||
// 使用memset一次性清零整个结构体,包括新增的缓冲区
|
||||
memset(tracker, 0, sizeof(skiing_tracker_t));
|
||||
tracker->state = SKIING_STATE_STATIC;
|
||||
}
|
||||
|
||||
/**
|
||||
* @brief 将设备坐标系下的加速度转换为世界坐标系
|
||||
* @param acc_device 设备坐标系下的加速度 [x, y, z]
|
||||
* @param angle 姿态角 [pitch, roll, yaw],单位: 度
|
||||
* @param acc_world 输出:世界坐标系下的加速度 [x, y, z]
|
||||
*/
|
||||
static void transform_acc_to_world_frame(const float *acc_device, const float *angle, float *acc_world)
|
||||
{
|
||||
// 驱动输出的角度与标准航空定义相反,需要取反才能用于标准旋转矩阵。
|
||||
float pitch = -angle[0] * DEG_TO_RAD;
|
||||
float roll = -angle[1] * DEG_TO_RAD;
|
||||
|
||||
float cp = cosf(pitch);
|
||||
float sp = sinf(pitch);
|
||||
float cr = cosf(roll);
|
||||
float sr = sinf(roll);
|
||||
|
||||
float ax = acc_device[0];
|
||||
float ay = acc_device[1];
|
||||
float az = acc_device[2];
|
||||
|
||||
// 使用经过验证的、正确的身体坐标系到世界坐标系的旋转矩阵 (基于 Y-X 旋转顺序)
|
||||
// 这个矩阵将设备测量的加速度(ax, ay, az)正确地转换到世界坐标系(acc_world)。
|
||||
acc_world[0] = cp * ax + sp * sr * ay + sp * cr * az;
|
||||
acc_world[1] = 0 * ax + cr * ay - sr * az;
|
||||
acc_world[2] = -sp * ax + cp * sr * ay + cp * cr * az;
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* @brief 计算缓冲区内三轴数据的方差之和
|
||||
*/
|
||||
static float calculate_variance(float buffer[VARIANCE_BUFFER_SIZE][3])
|
||||
{
|
||||
float mean[3] = {0};
|
||||
float variance[3] = {0};
|
||||
|
||||
// 1. 计算均值
|
||||
for (int i = 0; i < VARIANCE_BUFFER_SIZE; i++) {
|
||||
mean[0] += buffer[i][0];
|
||||
mean[1] += buffer[i][1];
|
||||
mean[2] += buffer[i][2];
|
||||
}
|
||||
mean[0] /= VARIANCE_BUFFER_SIZE;
|
||||
mean[1] /= VARIANCE_BUFFER_SIZE;
|
||||
mean[2] /= VARIANCE_BUFFER_SIZE;
|
||||
|
||||
// 2. 计算方差
|
||||
for (int i = 0; i < VARIANCE_BUFFER_SIZE; i++) {
|
||||
variance[0] += (buffer[i][0] - mean[0]) * (buffer[i][0] - mean[0]);
|
||||
variance[1] += (buffer[i][1] - mean[1]) * (buffer[i][1] - mean[1]);
|
||||
variance[2] += (buffer[i][2] - mean[2]) * (buffer[i][2] - mean[2]);
|
||||
}
|
||||
variance[0] /= VARIANCE_BUFFER_SIZE;
|
||||
variance[1] /= VARIANCE_BUFFER_SIZE;
|
||||
variance[2] /= VARIANCE_BUFFER_SIZE;
|
||||
|
||||
// 返回三轴方差之和,作为一个综合的稳定度指标
|
||||
return variance[0] + variance[1] + variance[2];
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* @brief 升级后的状态机,包含旋转检测和动态零速更新
|
||||
*/
|
||||
static void update_state_machine(skiing_tracker_t *tracker, const float *acc_device_ms2, const float *gyr_dps)
|
||||
{
|
||||
// 缓冲区未填满时,不进行状态判断,默认为静止
|
||||
if (!tracker->buffer_filled) {
|
||||
tracker->state = SKIING_STATE_STATIC;
|
||||
return;
|
||||
}
|
||||
|
||||
// --- 计算关键指标 ---
|
||||
float acc_variance = calculate_variance(tracker->acc_buffer);
|
||||
float gyr_z_abs = fabsf(gyr_dps[2]);
|
||||
float acc_magnitude = sqrtf(acc_device_ms2[0]*acc_device_ms2[0] + acc_device_ms2[1]*acc_device_ms2[1] + acc_device_ms2[2]*acc_device_ms2[2]);
|
||||
|
||||
// --- 状态切换逻辑 (按优先级) ---
|
||||
|
||||
// 旋转检测
|
||||
// 如果Z轴角速度很大,则判断为原地旋转,暂停积分
|
||||
if (gyr_z_abs > ROTATION_GYR_Z_THRESHOLD) {
|
||||
tracker->state = SKIING_STATE_ROTATING;
|
||||
return; // 直接返回,不执行后续判断
|
||||
}
|
||||
|
||||
// 动态零速更新 (ZUPT)
|
||||
// 如果加速度在窗口期内非常稳定(方差很小),则认为是动态稳定状态,进行零速校正
|
||||
if (acc_variance < ZUPT_ACC_VARIANCE_THRESHOLD) {
|
||||
tracker->state = SKIING_STATE_STATIC;
|
||||
// 速度清零,抑制漂移
|
||||
memset(tracker->velocity, 0, sizeof(tracker->velocity));
|
||||
tracker->speed = 0.0f;
|
||||
return;
|
||||
}
|
||||
|
||||
// 从静止/旋转状态启动
|
||||
if (tracker->state == SKIING_STATE_STATIC || tracker->state == SKIING_STATE_ROTATING) {
|
||||
if (fabsf(acc_magnitude - G_ACCELERATION) > START_SKIING_ACC_THRESHOLD) {
|
||||
tracker->state = SKIING_STATE_SKIING;
|
||||
return;
|
||||
}
|
||||
}
|
||||
|
||||
// 滑雪
|
||||
if (tracker->state != SKIING_STATE_STATIC) {
|
||||
tracker->state = SKIING_STATE_SKIING;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* @brief 主更新函数
|
||||
*/
|
||||
void skiing_tracker_update(skiing_tracker_t *tracker, float *acc_g, float *gyr_dps, float *angle, float dt)
|
||||
{
|
||||
if (!tracker || !acc_g || !gyr_dps || !angle || dt <= 0) {
|
||||
return;
|
||||
}
|
||||
|
||||
// --- 1. 数据预处理和缓冲 ---
|
||||
float acc_device_ms2[3];
|
||||
acc_device_ms2[0] = acc_g[0] * G_ACCELERATION;
|
||||
acc_device_ms2[1] = acc_g[1] * G_ACCELERATION;
|
||||
acc_device_ms2[2] = acc_g[2] * G_ACCELERATION;
|
||||
|
||||
// 将最新数据存入缓冲区
|
||||
memcpy(tracker->acc_buffer[tracker->buffer_index], acc_device_ms2, sizeof(acc_device_ms2));
|
||||
memcpy(tracker->gyr_buffer[tracker->buffer_index], gyr_dps, 3 * sizeof(float));
|
||||
|
||||
tracker->buffer_index++;
|
||||
if (tracker->buffer_index >= VARIANCE_BUFFER_SIZE) {
|
||||
tracker->buffer_index = 0;
|
||||
tracker->buffer_filled = 1; // 标记缓冲区已满
|
||||
}
|
||||
|
||||
// --- 2. 更新状态机 ---
|
||||
update_state_machine(tracker, acc_device_ms2, gyr_dps);
|
||||
|
||||
// --- 3. 根据状态进行计算 ---
|
||||
// 只有在明确的“滑雪”状态下才进行积分
|
||||
if (tracker->state == SKIING_STATE_SKIING) {
|
||||
transform_acc_to_world_frame(acc_device_ms2, angle, tracker->acc_world);
|
||||
tracker->acc_world[2] -= G_ACCELERATION;
|
||||
|
||||
tracker->velocity[0] += tracker->acc_world[0] * dt;
|
||||
tracker->velocity[1] += tracker->acc_world[1] * dt;
|
||||
tracker->velocity[2] += tracker->acc_world[2] * dt;
|
||||
}
|
||||
// 在其他状态下(静止、旋转),速度已经在状态机内部被清零或保持不变
|
||||
|
||||
// --- 4. 更新速率和距离 ---
|
||||
// 速率和距离总是在更新,但在非滑雪状态下,速度为0,所以它们不会增加
|
||||
tracker->speed = sqrtf(tracker->velocity[0] * tracker->velocity[0] +
|
||||
tracker->velocity[1] * tracker->velocity[1] +
|
||||
tracker->velocity[2] * tracker->velocity[2]);
|
||||
tracker->distance += tracker->speed * dt;
|
||||
}
|
||||
|
||||
|
||||
// 传感器数据采集与处理任务
|
||||
void sensor_processing_task(signed short * acc_data_buf, signed short * gyr_data_buf) {
|
||||
static skiing_tracker_t my_skiing_tracker;
|
||||
static int initialized = 0;
|
||||
static int calibration_done = 0;
|
||||
|
||||
static signed short combined_raw_data[6];
|
||||
static float final_angle_data[3];
|
||||
static float calibrated_acc_g[3];
|
||||
static float calibrated_gyr_dps[3]; // 新增:用于存放转换后的陀螺仪数据
|
||||
|
||||
const float delta_time = 0.01f;
|
||||
|
||||
if (!initialized) {
|
||||
skiing_tracker_init(&my_skiing_tracker);
|
||||
initialized = 1;
|
||||
printf("Skiing Tracker Initialized. Waiting for sensor calibration...\n");
|
||||
}
|
||||
|
||||
memcpy(&combined_raw_data[0], acc_data_buf, 3 * sizeof(signed short));
|
||||
memcpy(&combined_raw_data[3], gyr_data_buf, 3 * sizeof(signed short));
|
||||
|
||||
unsigned char status;
|
||||
if (!calibration_done) {
|
||||
status = SL_SC7U22_Angle_Output(1, combined_raw_data, final_angle_data, 0);
|
||||
if (status == 1) {
|
||||
calibration_done = 1;
|
||||
printf("Sensor calibration successful! Skiing mode is active.\n");
|
||||
}
|
||||
} else {
|
||||
status = SL_SC7U22_Angle_Output(0, combined_raw_data, final_angle_data, 0);
|
||||
}
|
||||
|
||||
if (status == 1) {
|
||||
// 加速度 LSB to g
|
||||
calibrated_acc_g[0] = (float)combined_raw_data[0] / 8192.0f;
|
||||
calibrated_acc_g[1] = (float)combined_raw_data[1] / 8192.0f;
|
||||
calibrated_acc_g[2] = (float)combined_raw_data[2] / 8192.0f;
|
||||
|
||||
// 陀螺仪 LSB to dps (度/秒)
|
||||
// ±2000dps量程下,转换系数约为 0.061
|
||||
calibrated_gyr_dps[0] = (float)combined_raw_data[3] * 0.061f;
|
||||
calibrated_gyr_dps[1] = (float)combined_raw_data[4] * 0.061f;
|
||||
calibrated_gyr_dps[2] = (float)combined_raw_data[5] * 0.061f;
|
||||
|
||||
skiing_tracker_update(&my_skiing_tracker, calibrated_acc_g, calibrated_gyr_dps, final_angle_data, delta_time);
|
||||
|
||||
// 打印逻辑保持不变
|
||||
static int count = 0;
|
||||
if(count < 10){
|
||||
count++;
|
||||
return;
|
||||
} else {
|
||||
count = 0;
|
||||
}
|
||||
printf("State: %d, Speed: %.2f m/s, Distance: %.2f m\n",
|
||||
my_skiing_tracker.state,
|
||||
my_skiing_tracker.speed,
|
||||
my_skiing_tracker.distance);
|
||||
|
||||
} else if (status == 0) {
|
||||
// printf("Sensor is calibrating...\n");
|
||||
} else {
|
||||
// printf("Angle calculation error or calibration not finished.\n");
|
||||
}
|
||||
}
|
||||
50
apps/earphone/xtell_Sensor/A_hide/2/skiing_tracker.h
Normal file
50
apps/earphone/xtell_Sensor/A_hide/2/skiing_tracker.h
Normal file
@ -0,0 +1,50 @@
|
||||
#ifndef SKIING_TRACKER_H
|
||||
#define SKIING_TRACKER_H
|
||||
|
||||
// 定义滑雪者可能的状态
|
||||
typedef enum {
|
||||
SKIING_STATE_STATIC, // 静止或动态稳定
|
||||
SKIING_STATE_SKIING, // 正在滑雪
|
||||
SKIING_STATE_ROTATING, // 正在原地旋转 (新增)
|
||||
SKIING_STATE_FALLEN, // 已摔倒
|
||||
SKIING_STATE_UNKNOWN // 未知状态
|
||||
} skiing_state_t;
|
||||
|
||||
#define VARIANCE_BUFFER_SIZE 15 // 用于计算方差的数据窗口大小 (15个样本 @ 100Hz = 150ms)
|
||||
|
||||
// 追踪器数据结构体
|
||||
typedef struct {
|
||||
// 公开数据
|
||||
float velocity[3]; // 当前速度 (x, y, z),单位: m/s
|
||||
float distance; // 总滑行距离,单位: m
|
||||
float speed; // 当前速率 (标量),单位: m/s
|
||||
skiing_state_t state; // 当前滑雪状态
|
||||
|
||||
// 内部计算使用的私有成员
|
||||
float acc_world[3]; // 在世界坐标系下的加速度
|
||||
|
||||
// 用于动态零速更新和旋转检测的缓冲区
|
||||
float acc_buffer[VARIANCE_BUFFER_SIZE][3]; // 加速度数据窗口
|
||||
float gyr_buffer[VARIANCE_BUFFER_SIZE][3]; // 角速度数据窗口
|
||||
int buffer_index; // 缓冲区当前索引
|
||||
int buffer_filled; // 缓冲区是否已填满的标志
|
||||
} skiing_tracker_t;
|
||||
|
||||
/**
|
||||
* @brief 初始化滑雪追踪器
|
||||
*
|
||||
* @param tracker 指向 skiing_tracker_t 结构体的指针
|
||||
*/
|
||||
void skiing_tracker_init(skiing_tracker_t *tracker);
|
||||
|
||||
/**
|
||||
* @brief 处理传感器数据并更新滑雪状态
|
||||
*
|
||||
* @param tracker 指向 skiing_tracker_t 结构体的指针
|
||||
* @param acc_g 校准后的加速度数据 [x, y, z],单位: g (1g = 9.8m/s^2)
|
||||
* @param gyr_dps 角速度
|
||||
* @param angle 姿态角数据 [pitch, roll, yaw],单位: 度
|
||||
* @param dt 采样时间间隔,单位: 秒 (s)
|
||||
*/
|
||||
void skiing_tracker_update(skiing_tracker_t *tracker, float *acc_g, float *gyr_dps, float *angle, float dt);
|
||||
#endif // SKIING_TRACKER_H
|
||||
265
apps/earphone/xtell_Sensor/calculate/skiing_tracker.c
Normal file
265
apps/earphone/xtell_Sensor/calculate/skiing_tracker.c
Normal file
@ -0,0 +1,265 @@
|
||||
/*
|
||||
动态ZUPT+卡尔曼
|
||||
*/
|
||||
#include "skiing_tracker.h"
|
||||
#include "../sensor/SC7U22.h"
|
||||
#include <math.h>
|
||||
#include <string.h>
|
||||
|
||||
#define G_ACCELERATION 9.81f
|
||||
#define DEG_TO_RAD (3.14159265f / 180.0f)
|
||||
|
||||
// --- 算法阈值定义 ---
|
||||
//两个判断是否静止的必要条件
|
||||
// 动态零速更新(ZUPT)阈值
|
||||
#define ZUPT_ACC_VARIANCE_THRESHOLD 0.05f
|
||||
// 陀螺仪方差阈值
|
||||
#define ZUPT_GYR_VARIANCE_THRESHOLD 5.0f
|
||||
|
||||
// 旋转/摆动检测阈值:角速度总模长大于此值(度/秒),认为正在进行非滑雪的旋转或摆动
|
||||
#define ROTATION_GYR_MAG_THRESHOLD 100.0f
|
||||
// 启动滑雪阈值:加速度模长与重力的差值大于此值,认为开始运动
|
||||
#define START_SKIING_ACC_THRESHOLD 1.5f
|
||||
|
||||
/**
|
||||
* @brief 初始化滑雪追踪器
|
||||
*/
|
||||
void skiing_tracker_init(skiing_tracker_t *tracker)
|
||||
{
|
||||
if (!tracker) {
|
||||
return;
|
||||
}
|
||||
// 使用memset一次性清零整个结构体,包括新增的缓冲区
|
||||
memset(tracker, 0, sizeof(skiing_tracker_t));
|
||||
tracker->state = SKIING_STATE_STATIC;
|
||||
}
|
||||
|
||||
/**
|
||||
* @brief 将设备坐标系下的加速度转换为世界坐标系
|
||||
* @param acc_device 设备坐标系下的加速度 [x, y, z]
|
||||
* @param angle 姿态角 [pitch, roll, yaw],单位: 度
|
||||
* @param acc_world 输出:世界坐标系下的加速度 [x, y, z]
|
||||
*/
|
||||
static void transform_acc_to_world_frame(const float *acc_device, const float *angle, float *acc_world)
|
||||
{
|
||||
// 驱动输出的角度与标准航空定义相反,需要取反才能用于标准旋转矩阵。
|
||||
float pitch = -angle[0] * DEG_TO_RAD;
|
||||
float roll = -angle[1] * DEG_TO_RAD;
|
||||
|
||||
float cp = cosf(pitch);
|
||||
float sp = sinf(pitch);
|
||||
float cr = cosf(roll);
|
||||
float sr = sinf(roll);
|
||||
|
||||
float ax = acc_device[0];
|
||||
float ay = acc_device[1];
|
||||
float az = acc_device[2];
|
||||
|
||||
// 使用经过验证的、正确的身体坐标系到世界坐标系的旋转矩阵 (基于 Y-X 旋转顺序)
|
||||
// 这个矩阵将设备测量的加速度(ax, ay, az)正确地转换到世界坐标系(acc_world)。
|
||||
acc_world[0] = cp * ax + sp * sr * ay + sp * cr * az;
|
||||
acc_world[1] = 0 * ax + cr * ay - sr * az;
|
||||
acc_world[2] = -sp * ax + cp * sr * ay + cp * cr * az;
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* @brief 计算缓冲区内三轴数据的方差之和
|
||||
*/
|
||||
static float calculate_variance(float buffer[VARIANCE_BUFFER_SIZE][3])
|
||||
{
|
||||
float mean[3] = {0};
|
||||
float variance[3] = {0};
|
||||
|
||||
// 1. 计算均值
|
||||
for (int i = 0; i < VARIANCE_BUFFER_SIZE; i++) {
|
||||
mean[0] += buffer[i][0];
|
||||
mean[1] += buffer[i][1];
|
||||
mean[2] += buffer[i][2];
|
||||
}
|
||||
mean[0] /= VARIANCE_BUFFER_SIZE;
|
||||
mean[1] /= VARIANCE_BUFFER_SIZE;
|
||||
mean[2] /= VARIANCE_BUFFER_SIZE;
|
||||
|
||||
// 2. 计算方差
|
||||
for (int i = 0; i < VARIANCE_BUFFER_SIZE; i++) {
|
||||
variance[0] += (buffer[i][0] - mean[0]) * (buffer[i][0] - mean[0]);
|
||||
variance[1] += (buffer[i][1] - mean[1]) * (buffer[i][1] - mean[1]);
|
||||
variance[2] += (buffer[i][2] - mean[2]) * (buffer[i][2] - mean[2]);
|
||||
}
|
||||
variance[0] /= VARIANCE_BUFFER_SIZE;
|
||||
variance[1] /= VARIANCE_BUFFER_SIZE;
|
||||
variance[2] /= VARIANCE_BUFFER_SIZE;
|
||||
|
||||
// 返回三轴方差之和,作为一个综合的稳定度指标
|
||||
return variance[0] + variance[1] + variance[2];
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* @brief 升级后的状态机,包含旋转检测和动态零速更新
|
||||
*/
|
||||
static void update_state_machine(skiing_tracker_t *tracker, const float *acc_device_ms2, const float *gyr_dps)
|
||||
{
|
||||
// 缓冲区未填满时,不进行状态判断,默认为静止
|
||||
if (!tracker->buffer_filled) {
|
||||
tracker->state = SKIING_STATE_STATIC;
|
||||
return;
|
||||
}
|
||||
|
||||
// --- 1. 计算关键指标 ---
|
||||
float acc_variance = calculate_variance(tracker->acc_buffer); // 计算加速度方差
|
||||
float gyr_variance = calculate_variance(tracker->gyr_buffer); // 计算陀螺仪方差
|
||||
float gyr_magnitude = sqrtf(gyr_dps[0]*gyr_dps[0] + gyr_dps[1]*gyr_dps[1] + gyr_dps[2]*gyr_dps[2]);
|
||||
float acc_magnitude = sqrtf(acc_device_ms2[0]*acc_device_ms2[0] + acc_device_ms2[1]*acc_device_ms2[1] + acc_device_ms2[2]*acc_device_ms2[2]);
|
||||
|
||||
// --- 2. 状态切换逻辑 (按优先级) ---
|
||||
|
||||
// 优先级1:原地旋转/摆动检测 (最终版)
|
||||
// 增加一个关键前提:只在当前不处于滑雪状态时,才检测原地旋转。
|
||||
// 这可以防止滑雪过程中的高速转弯被误判为原地旋转。
|
||||
if (gyr_magnitude > ROTATION_GYR_MAG_THRESHOLD && tracker->state != SKIING_STATE_SKIING) {
|
||||
tracker->state = SKIING_STATE_ROTATING;
|
||||
return;
|
||||
}
|
||||
|
||||
// 动态零速更新 (ZUPT)
|
||||
// 必须同时满足加速度和角速度都稳定,才能判断为“真静止”,以区分匀速运动
|
||||
if (acc_variance < ZUPT_ACC_VARIANCE_THRESHOLD && gyr_variance < ZUPT_GYR_VARIANCE_THRESHOLD) {
|
||||
tracker->state = SKIING_STATE_STATIC;
|
||||
// 速度清零,抑制漂移
|
||||
memset(tracker->velocity, 0, sizeof(tracker->velocity));
|
||||
tracker->speed = 0.0f;
|
||||
return;
|
||||
}
|
||||
|
||||
// 从静止/旋转状态启动
|
||||
if (tracker->state == SKIING_STATE_STATIC || tracker->state == SKIING_STATE_ROTATING) {
|
||||
if (fabsf(acc_magnitude - G_ACCELERATION) > START_SKIING_ACC_THRESHOLD) {
|
||||
tracker->state = SKIING_STATE_SKIING;
|
||||
return;
|
||||
}
|
||||
}
|
||||
|
||||
// 滑雪
|
||||
if (tracker->state != SKIING_STATE_STATIC) {
|
||||
tracker->state = SKIING_STATE_SKIING;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* @brief 主更新函数
|
||||
*/
|
||||
void skiing_tracker_update(skiing_tracker_t *tracker, float *acc_g, float *gyr_dps, float *angle, float dt)
|
||||
{
|
||||
if (!tracker || !acc_g || !gyr_dps || !angle || dt <= 0) {
|
||||
return;
|
||||
}
|
||||
|
||||
// --- 1. 数据预处理和缓冲 ---
|
||||
float acc_device_ms2[3];
|
||||
acc_device_ms2[0] = acc_g[0] * G_ACCELERATION;
|
||||
acc_device_ms2[1] = acc_g[1] * G_ACCELERATION;
|
||||
acc_device_ms2[2] = acc_g[2] * G_ACCELERATION;
|
||||
|
||||
// 将最新数据存入缓冲区
|
||||
memcpy(tracker->acc_buffer[tracker->buffer_index], acc_device_ms2, sizeof(acc_device_ms2));
|
||||
memcpy(tracker->gyr_buffer[tracker->buffer_index], gyr_dps, 3 * sizeof(float));
|
||||
|
||||
tracker->buffer_index++;
|
||||
if (tracker->buffer_index >= VARIANCE_BUFFER_SIZE) {
|
||||
tracker->buffer_index = 0;
|
||||
tracker->buffer_filled = 1; // 标记缓冲区已满
|
||||
}
|
||||
|
||||
// --- 2. 更新状态机 ---
|
||||
update_state_machine(tracker, acc_device_ms2, gyr_dps);
|
||||
|
||||
// --- 3. 根据状态进行计算 ---
|
||||
// 只有在明确的“滑雪”状态下才进行积分
|
||||
if (tracker->state == SKIING_STATE_SKIING) {
|
||||
transform_acc_to_world_frame(acc_device_ms2, angle, tracker->acc_world);
|
||||
tracker->acc_world[2] -= G_ACCELERATION;
|
||||
|
||||
tracker->velocity[0] += tracker->acc_world[0] * dt;
|
||||
tracker->velocity[1] += tracker->acc_world[1] * dt;
|
||||
tracker->velocity[2] += tracker->acc_world[2] * dt;
|
||||
}
|
||||
// 在其他状态下(静止、旋转),速度已经在状态机内部被清零或保持不变
|
||||
|
||||
// --- 4. 更新速率和距离 ---
|
||||
// 速率和距离总是在更新,但在非滑雪状态下,速度为0,所以它们不会增加
|
||||
tracker->speed = sqrtf(tracker->velocity[0] * tracker->velocity[0] +
|
||||
tracker->velocity[1] * tracker->velocity[1] +
|
||||
tracker->velocity[2] * tracker->velocity[2]);
|
||||
tracker->distance += tracker->speed * dt;
|
||||
}
|
||||
|
||||
|
||||
// 传感器数据采集与处理任务
|
||||
void sensor_processing_task(signed short * acc_data_buf, signed short * gyr_data_buf) {
|
||||
static skiing_tracker_t my_skiing_tracker;
|
||||
static int initialized = 0;
|
||||
static int calibration_done = 0;
|
||||
|
||||
static signed short combined_raw_data[6];
|
||||
static float final_angle_data[3]; // 计算得到的欧若拉角
|
||||
static float calibrated_acc_g[3]; // 转换后的加速度计数据
|
||||
static float calibrated_gyr_dps[3]; // 转换后的陀螺仪数据
|
||||
|
||||
const float delta_time = 0.01f;
|
||||
|
||||
if (!initialized) {
|
||||
skiing_tracker_init(&my_skiing_tracker);
|
||||
initialized = 1;
|
||||
printf("Skiing Tracker Initialized. Waiting for sensor calibration...\n");
|
||||
}
|
||||
|
||||
memcpy(&combined_raw_data[0], acc_data_buf, 3 * sizeof(signed short));
|
||||
memcpy(&combined_raw_data[3], gyr_data_buf, 3 * sizeof(signed short));
|
||||
|
||||
unsigned char status;
|
||||
if (!calibration_done) { //第1次启动,开启零漂检测
|
||||
status = SL_SC7U22_Angle_Output(1, combined_raw_data, final_angle_data, 0);
|
||||
if (status == 1) {
|
||||
calibration_done = 1;
|
||||
printf("Sensor calibration successful! Skiing mode is active.\n");
|
||||
}
|
||||
} else {
|
||||
status = SL_SC7U22_Angle_Output(0, combined_raw_data, final_angle_data, 0);
|
||||
}
|
||||
|
||||
if (status == 1) {
|
||||
// 加速度 LSB to g
|
||||
calibrated_acc_g[0] = (float)combined_raw_data[0] / 8192.0f;
|
||||
calibrated_acc_g[1] = (float)combined_raw_data[1] / 8192.0f;
|
||||
calibrated_acc_g[2] = (float)combined_raw_data[2] / 8192.0f;
|
||||
|
||||
// 陀螺仪 LSB to dps (度/秒)
|
||||
// ±2000dps量程下,转换系数约为 0.061
|
||||
calibrated_gyr_dps[0] = (float)combined_raw_data[3] * 0.061f;
|
||||
calibrated_gyr_dps[1] = (float)combined_raw_data[4] * 0.061f;
|
||||
calibrated_gyr_dps[2] = (float)combined_raw_data[5] * 0.061f;
|
||||
|
||||
skiing_tracker_update(&my_skiing_tracker, calibrated_acc_g, calibrated_gyr_dps, final_angle_data, delta_time);
|
||||
|
||||
// 打印逻辑保持不变
|
||||
static int count = 0;
|
||||
if(count < 10){
|
||||
count++;
|
||||
return;
|
||||
} else {
|
||||
count = 0;
|
||||
}
|
||||
printf("State: %d, Speed: %.2f m/s, Distance: %.2f m\n",
|
||||
my_skiing_tracker.state,
|
||||
my_skiing_tracker.speed,
|
||||
my_skiing_tracker.distance);
|
||||
|
||||
} else if (status == 0) {
|
||||
// printf("Sensor is calibrating...\n");
|
||||
} else {
|
||||
// printf("Angle calculation error or calibration not finished.\n");
|
||||
}
|
||||
}
|
||||
50
apps/earphone/xtell_Sensor/calculate/skiing_tracker.h
Normal file
50
apps/earphone/xtell_Sensor/calculate/skiing_tracker.h
Normal file
@ -0,0 +1,50 @@
|
||||
#ifndef SKIING_TRACKER_H
|
||||
#define SKIING_TRACKER_H
|
||||
|
||||
// 定义滑雪者可能的状态
|
||||
typedef enum {
|
||||
SKIING_STATE_STATIC, // 静止或动态稳定
|
||||
SKIING_STATE_SKIING, // 正在滑雪
|
||||
SKIING_STATE_ROTATING, // 正在原地旋转 (新增)
|
||||
SKIING_STATE_FALLEN, // 已摔倒
|
||||
SKIING_STATE_UNKNOWN // 未知状态
|
||||
} skiing_state_t;
|
||||
|
||||
#define VARIANCE_BUFFER_SIZE 15 // 用于计算方差的数据窗口大小 (15个样本 @ 100Hz = 150ms)
|
||||
|
||||
// 追踪器数据结构体
|
||||
typedef struct {
|
||||
// 公开数据
|
||||
float velocity[3]; // 当前速度 (x, y, z),单位: m/s
|
||||
float distance; // 总滑行距离,单位: m
|
||||
float speed; // 当前速率 (标量),单位: m/s
|
||||
skiing_state_t state; // 当前滑雪状态
|
||||
|
||||
// 内部计算使用的私有成员
|
||||
float acc_world[3]; // 在世界坐标系下的加速度
|
||||
|
||||
// 用于动态零速更新和旋转检测的缓冲区
|
||||
float acc_buffer[VARIANCE_BUFFER_SIZE][3]; // 加速度数据窗口
|
||||
float gyr_buffer[VARIANCE_BUFFER_SIZE][3]; // 角速度数据窗口
|
||||
int buffer_index; // 缓冲区当前索引
|
||||
int buffer_filled; // 缓冲区是否已填满的标志
|
||||
} skiing_tracker_t;
|
||||
|
||||
/**
|
||||
* @brief 初始化滑雪追踪器
|
||||
*
|
||||
* @param tracker 指向 skiing_tracker_t 结构体的指针
|
||||
*/
|
||||
void skiing_tracker_init(skiing_tracker_t *tracker);
|
||||
|
||||
/**
|
||||
* @brief 处理传感器数据并更新滑雪状态
|
||||
*
|
||||
* @param tracker 指向 skiing_tracker_t 结构体的指针
|
||||
* @param acc_g 校准后的加速度数据 [x, y, z],单位: g (1g = 9.8m/s^2)
|
||||
* @param gyr_dps 角速度
|
||||
* @param angle 姿态角数据 [pitch, roll, yaw],单位: 度
|
||||
* @param dt 采样时间间隔,单位: 秒 (s)
|
||||
*/
|
||||
void skiing_tracker_update(skiing_tracker_t *tracker, float *acc_g, float *gyr_dps, float *angle, float dt);
|
||||
#endif // SKIING_TRACKER_H
|
||||
@ -19,7 +19,7 @@
|
||||
#include "circle_buffer.h"
|
||||
#include "circle_buffer.h"
|
||||
#include "btstack/avctp_user.h"
|
||||
|
||||
#include "calculate/skiing_tracker.h"
|
||||
///////////////////////////////////////////////////////////////////////////////////////////////////
|
||||
//宏定义
|
||||
#define ENABLE_XLOG 1
|
||||
@ -37,6 +37,7 @@
|
||||
//////////////////////////////////////////////////////////////////////////////////////////////////
|
||||
//START -- 函数定义
|
||||
void send_data_to_ble_client(const u8* data, u16 length);
|
||||
extern void create_process(u16* pid, const char* name, void *priv, void (*func)(void *priv), u32 msec);
|
||||
//END -- 函数定义
|
||||
//////////////////////////////////////////////////////////////////////////////////////////////////
|
||||
|
||||
@ -53,76 +54,158 @@ static u16 send_data_id;
|
||||
#define SENSOR_DATA_BUFFER_SIZE 512
|
||||
static u8 sensor_data_buffer[SENSOR_DATA_BUFFER_SIZE];
|
||||
static circle_buffer_t sensor_cb;
|
||||
|
||||
|
||||
//--- test ---
|
||||
// 全局变量
|
||||
u16 gsensor_id=0;
|
||||
u16 test_id=0;
|
||||
//END -- 变量定义
|
||||
//////////////////////////////////////////////////////////////////////////////////////////////////
|
||||
|
||||
|
||||
// 采集传感器数据并存入环形缓冲区的任务
|
||||
void collect_and_buffer_sensor_data_task(void) {
|
||||
// /**
|
||||
// * @brief 向匿名上位机发送数据帧
|
||||
// * @param function_id 功能码 (例如 0x01, 0x03)
|
||||
// * @param data 指向 int16_t 数据数组的指针 (例如加速度、欧拉角)
|
||||
// * @param data_len int16_t 数据的个数 (例如发送6轴数据时为6,发送3个欧拉角时为3)
|
||||
// * @param status_byte 附加的状态字节 (例如 SHOCK_STA 或 FUSION_STA)
|
||||
// */
|
||||
// void send_data_anotc(uint8_t function_id, int16_t* data, uint8_t data_len, uint8_t status_byte) {
|
||||
// // 定义一个足够大的缓冲区来构建数据帧
|
||||
// // 最大长度(ID 0x01): 1(HEAD)+1(D_ADDR)+1(ID)+1(LEN)+13(DATA)+1(SC)+1(AC) = 19字节
|
||||
// uint8_t buffer[32];
|
||||
|
||||
motion_data_t current_motion;
|
||||
axis_info_xtell total_accel;
|
||||
axis_info_xtell linear_accel;
|
||||
char data_string[256];
|
||||
// uint8_t data_payload_len = data_len * sizeof(int16_t) + sizeof(uint8_t);
|
||||
|
||||
// 从驱动获取最新的运动数据
|
||||
get_motion_data(¤t_motion);
|
||||
total_accel = get_current_accel_mss();
|
||||
linear_accel = get_linear_accel_mss();
|
||||
// // 1. 填充帧头和地址
|
||||
// buffer[0] = 0xAA; // 帧头 HEAD
|
||||
// buffer[1] = 0xFF; // 目标地址 D_ADDR
|
||||
|
||||
// 将浮点数据转换为整数(乘以100以保留两位小数)进行格式化
|
||||
int len = snprintf(data_string, sizeof(data_string),
|
||||
"T:%d,%d,%d;L:%d,%d,%d;V:%d,%d,%d;D:%d,%d,%d\n",
|
||||
(int)(total_accel.x * 100), (int)(total_accel.y * 100), (int)(total_accel.z * 100),
|
||||
(int)(linear_accel.x * 100), (int)(linear_accel.y * 100), (int)(linear_accel.z * 100),
|
||||
(int)(current_motion.velocity.x * 100), (int)(current_motion.velocity.y * 100), (int)(current_motion.velocity.z * 100),
|
||||
(int)(current_motion.distance.x * 100), (int)(current_motion.distance.y * 100), (int)(current_motion.distance.z * 100));
|
||||
// // 2. 填充功能码和数据长度
|
||||
// buffer[2] = function_id;
|
||||
// buffer[3] = data_payload_len;
|
||||
|
||||
// 写入环形缓冲区
|
||||
u16 written = circle_buffer_write(&sensor_cb, (u8*)data_string, len);
|
||||
if (written < len) {
|
||||
xlog("The circular buffer is full!\n");
|
||||
// // 3. 填充数据内容 (DATA)
|
||||
// // 首先使用 memcpy 拷贝主要的 int16_t 数组数据
|
||||
// // &buffer[4] 是数据区的起始地址
|
||||
// memcpy(&buffer[4], (uint8_t*)data, data_len * sizeof(int16_t));
|
||||
// // 然后在数据区末尾填充状态字节
|
||||
// buffer[4 + data_len * sizeof(int16_t)] = status_byte;
|
||||
|
||||
// // 4. 计算校验和 (SC 和 AC)
|
||||
// uint8_t sum_check = 0;
|
||||
// uint8_t add_check = 0;
|
||||
|
||||
// // SC: 和校验 (从帧头到数据区最后一个字节)
|
||||
// for (int i = 0; i < 4 + data_payload_len; ++i) {
|
||||
// sum_check += buffer[i];
|
||||
// }
|
||||
|
||||
// // 将SC填充到缓冲区
|
||||
// buffer[4 + data_payload_len] = sum_check;
|
||||
|
||||
// // AC: 附加校验 (从帧头到SC)
|
||||
// for (int i = 0; i < 4 + data_payload_len + 1; ++i) {
|
||||
// add_check += buffer[i];
|
||||
// }
|
||||
|
||||
// // 将AC填充到缓冲区
|
||||
// buffer[4 + data_payload_len + 1] = add_check;
|
||||
|
||||
// // 5. 发送整个数据帧
|
||||
// uint16_t frame_length = 4 + data_payload_len + 2;
|
||||
// // Serial_Send_Buffer(buffer, frame_length);
|
||||
// for (int i = 0; i < frame_length; ++i) {
|
||||
// // 使用 %c 格式化字符来发送单个字节的原始值
|
||||
// printf("%c", buffer[i]);
|
||||
// }
|
||||
// printf("\n");
|
||||
// }
|
||||
|
||||
void ble_send_data(signed short *acc_gyro_input, float *Angle_output){
|
||||
char buffer[50]; //一次最多发送50字节
|
||||
u8 len = 0;
|
||||
//AA FF 01 六轴数据 EE
|
||||
//TO DO
|
||||
send_data_to_ble_client(&buffer,len);
|
||||
|
||||
|
||||
//AA FF 02 欧若拉角数据 EE
|
||||
// TO DO
|
||||
send_data_to_ble_client(&buffer,len);
|
||||
}
|
||||
}
|
||||
|
||||
// 定义数组大小
|
||||
#define ARRAY_SIZE (178)
|
||||
// 在 main 函数外部声明为全局变量,它将被存储在静态数据区
|
||||
unsigned char global_data_array[ARRAY_SIZE];
|
||||
|
||||
// 从环形缓冲区读取数据并发送
|
||||
void send_sensor_data_task(void) {
|
||||
|
||||
// printf("xtell_ble_send\n");
|
||||
send_data_to_ble_client(&global_data_array,ARRAY_SIZE);
|
||||
}
|
||||
|
||||
extern void create_process(u16* pid, const char* name, void *priv, void (*func)(void *priv), u32 msec);
|
||||
void test(){
|
||||
|
||||
signed short acc_data_buf[3] = {0};
|
||||
signed short gyr_data_buf[3] = {0};
|
||||
|
||||
signed short acc_gyro_input[6] = {0};
|
||||
float Angle_output[3] = {0};
|
||||
extern void SL_SC7U22_RawData_Read(signed short * acc_data_buf,signed short * gyr_data_buf);
|
||||
SL_SC7U22_RawData_Read(acc_data_buf,gyr_data_buf);
|
||||
acc_gyro_input[0] = acc_data_buf[0];
|
||||
acc_gyro_input[1] = acc_data_buf[1];
|
||||
acc_gyro_input[2] = acc_data_buf[2];
|
||||
acc_gyro_input[3] = gyr_data_buf[0];
|
||||
acc_gyro_input[4] = gyr_data_buf[1];
|
||||
acc_gyro_input[5] = gyr_data_buf[2];
|
||||
// extern unsigned char SL_SC7U22_Angle_Output(unsigned char calibration_en, signed short *acc_gyro_input, float *Angle_output, unsigned char yaw_rst);
|
||||
// SL_SC7U22_Angle_Output(0,acc_gyro_input,Angle_output,1);
|
||||
static int count = 0;
|
||||
if(count >=100){ //1s打印1次
|
||||
count = 0;
|
||||
xlog("ACC_X:%d, ACC_Y:%d, ACC_Z:%d, GYR_X:%.d, GYR_Y:%d, GYR_Z:%d",
|
||||
acc_gyro_input[0],acc_gyro_input[1],acc_gyro_input[2],acc_gyro_input[3],acc_gyro_input[4],acc_gyro_input[5]
|
||||
);
|
||||
// xlog("Pitch:%.2f, Roll:%.2f, Yaw:%.2f\n",
|
||||
// Angle_output[0],Angle_output[1],Angle_output[2]
|
||||
// );
|
||||
}
|
||||
count++;
|
||||
|
||||
void sensor_processing_task(signed short * acc_data_buf,signed short * gyr_data_buf);
|
||||
sensor_processing_task(acc_data_buf, gyr_data_buf);
|
||||
}
|
||||
void gsensor_test(){
|
||||
|
||||
sys_timer_del(gsensor_id);
|
||||
|
||||
void rcsp_adv_fill_mac_addr(u8 *mac_addr_buf) //by xtell
|
||||
{
|
||||
swapX(bt_get_mac_addr(), mac_addr_buf, 6);
|
||||
}
|
||||
|
||||
|
||||
void xtell_task_create(void){
|
||||
|
||||
xlog("xtell_task_create\n");
|
||||
//写入测试数据
|
||||
for (int i = 0; i < ARRAY_SIZE; i++) { //ARRAY_SIZE字节的数组
|
||||
global_data_array[i] = i % 256;
|
||||
}
|
||||
// int ret = hw_iic_init(0);
|
||||
// xlog("hw_iic_init result:%d\n",ret);
|
||||
// //初始化传感器
|
||||
// SL_SC7U22_Config();
|
||||
|
||||
soft_iic_init(0);
|
||||
gpio_set_direction(IO_PORTE_05,0); //设置PE5 输出模式
|
||||
gpio_set_pull_up(IO_PORTE_05,1);
|
||||
gpio_direction_output(IO_PORTE_05,1);
|
||||
|
||||
SL_SC7U22_Config();
|
||||
// extern u8 LIS2DH12_Config(void);
|
||||
// LIS2DH12_Config();
|
||||
|
||||
xlog("xtell_task_create\n");
|
||||
// 初始化环形缓冲区
|
||||
circle_buffer_init(&sensor_cb, sensor_data_buffer, SENSOR_DATA_BUFFER_SIZE);
|
||||
|
||||
|
||||
// 创建一个定时器,每200ms调用一次核心计算任务
|
||||
// create_process(&xtell_i2c_test_id, "xtell_i2c_test", NULL, xtell_i2c_test, (u32)(SAMPLING_PERIOD_S * 1000));
|
||||
//初始化滑雪追踪器
|
||||
// SkiingTracker_Init(&skiing_data);
|
||||
xlog("SkiingTracker_Init\n");
|
||||
|
||||
// 创建一个定时器,每1000ms采集一次数据
|
||||
// create_process(&collect_data_id, "collect_data", NULL, collect_and_buffer_sensor_data_task, 1000);
|
||||
// create_process(&gsensor_id, "gsensor",NULL, gsensor_test, 1000);
|
||||
create_process(&test_id, "test",NULL, test, 10);
|
||||
|
||||
// 创建一个定时器,每200ms尝试发送一次数据
|
||||
create_process(&send_data_id, "send_data", NULL, send_sensor_data_task, 1);
|
||||
}
|
||||
|
||||
@ -33,7 +33,7 @@
|
||||
#define LIS2DH12_R_ADDR 0x33
|
||||
|
||||
// --- IIC 寄存器地址宏定义 ---
|
||||
#define LIS2DH12_WHO_AM_I 0x0F
|
||||
#define LIS2DH12_WHO_AM_I 0x01 //0F
|
||||
#define LIS2DH12_CTRL_REG1 0x20
|
||||
#define LIS2DH12_CTRL_REG4 0x23
|
||||
#define LIS2DH12_CTRL_REG5 0x24
|
||||
@ -93,7 +93,7 @@ static u8 SL_MEMS_i2cWrite(u8 addr, u8 reg, u8 data) {
|
||||
char LIS2DH12_Check() {
|
||||
u8 reg_value = 0;
|
||||
SL_MEMS_i2cRead(LIS2DH12_R_ADDR, LIS2DH12_WHO_AM_I, 1, ®_value);
|
||||
if (reg_value == 0x33) {
|
||||
if (reg_value == 0x6A) { //0x33
|
||||
return 0x01;
|
||||
}
|
||||
return 0x00;
|
||||
@ -150,7 +150,7 @@ void LIS2DH12_calibrate() {
|
||||
// 初始化并配置LIS2DH12传感器
|
||||
u8 LIS2DH12_Config(void) {
|
||||
if (LIS2DH12_Check() != 1) {
|
||||
xlog("LIS2DH12 I2C检查失败\n");
|
||||
xlog("LIS2DH12 I2C error\n");
|
||||
return -1;
|
||||
}
|
||||
|
||||
@ -163,7 +163,7 @@ u8 LIS2DH12_Config(void) {
|
||||
// 执行开机校准
|
||||
LIS2DH12_calibrate();
|
||||
|
||||
xlog("LIS2DH12 I2C检查成功\n");
|
||||
xlog("LIS2DH12 I2C success\n");
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
||||
@ -1,12 +1,18 @@
|
||||
|
||||
#include "SCU722.h"
|
||||
#include "SC7U22.h"
|
||||
#include "math.h"
|
||||
#include "os/os_api.h"
|
||||
|
||||
#if SL_Sensor_Algo_Release_Enable==0x00
|
||||
#include "printf.h"
|
||||
#endif
|
||||
|
||||
#define ENABLE_XLOG 0
|
||||
#ifdef xlog
|
||||
#undef xlog
|
||||
#endif
|
||||
#if ENABLE_XLOG
|
||||
#define xlog(format, ...) printf("[XT:%s] " format, __func__, ##__VA_ARGS__)
|
||||
#else
|
||||
#define xlog(format, ...) ((void)0)
|
||||
#endif
|
||||
|
||||
//I2C SPI选择
|
||||
//#define SL_SC7U22_SPI_EN_I2C_DISABLE 0x00 //需要配合SL_SPI_IIC_INTERFACE使用
|
||||
@ -61,13 +67,11 @@ static void sl_delay(unsigned char sl_i)
|
||||
unsigned char SL_SC7U22_Check(void)
|
||||
{
|
||||
unsigned char reg_value=0;
|
||||
|
||||
xlog("SL_SC7U22_Check\n");
|
||||
SL_SC7U22_I2c_Spi_Write(SL_SPI_IIC_INTERFACE, 0x7F, 0x00);//goto 0x00
|
||||
SL_SC7U22_I2c_Spi_Read(SL_SPI_IIC_INTERFACE, SC7U22_WHO_AM_I, 1, ®_value);
|
||||
#if SL_Sensor_Algo_Release_Enable==0x00
|
||||
printf("0x%x=0x%x\r\n",SC7U22_WHO_AM_I,reg_value);
|
||||
#endif
|
||||
if(reg_value==0x6A)
|
||||
xlog("0x%x=0x%x\r\n",SC7U22_WHO_AM_I,reg_value);
|
||||
if(reg_value==0x6A) //设备的id
|
||||
return 0x01;//SC7U22
|
||||
else
|
||||
return 0x00;//通信异常
|
||||
@ -75,6 +79,7 @@ unsigned char SL_SC7U22_Check(void)
|
||||
|
||||
unsigned char SL_SC7U22_Config(void)
|
||||
{
|
||||
xlog("SL_SC7U22_Config\n");
|
||||
unsigned char Check_Flag=0;
|
||||
unsigned char reg_value=0;
|
||||
|
||||
@ -95,23 +100,18 @@ unsigned char SL_SC7U22_Config(void)
|
||||
Check_Flag=SL_SC7U22_Check();
|
||||
// Check_Flag= SL_SC7U22_SOFT_RESET();
|
||||
// Check_Flag=1;//强制初始化
|
||||
#if SL_Sensor_Algo_Release_Enable==0x00
|
||||
printf("SL_SC7U22_Check=0x%x\r\n",Check_Flag);
|
||||
#endif
|
||||
|
||||
xlog("SL_SC7U22_Check=0x%x\r\n",Check_Flag);
|
||||
if(Check_Flag==1)
|
||||
{
|
||||
Check_Flag= SL_SC7U22_POWER_DOWN();
|
||||
}
|
||||
#if SL_Sensor_Algo_Release_Enable==0x00
|
||||
printf("SL_SC7U22_POWER_DOWN=0x%x\r\n",Check_Flag);
|
||||
#endif
|
||||
xlog("SL_SC7U22_POWER_DOWN=0x%x\r\n",Check_Flag);
|
||||
if(Check_Flag==1)
|
||||
{
|
||||
Check_Flag= SL_SC7U22_SOFT_RESET();
|
||||
}
|
||||
#if SL_Sensor_Algo_Release_Enable==0x00
|
||||
printf("SL_SC7U22_SOFT_RESET=0x%x\r\n",Check_Flag);
|
||||
#endif
|
||||
xlog("SL_SC7U22_SOFT_RESET=0x%x\r\n",Check_Flag);
|
||||
if(Check_Flag==1)
|
||||
{
|
||||
SL_SC7U22_I2c_Spi_Write(SL_SPI_IIC_INTERFACE, 0x7F, 0x00);//goto 0x00
|
||||
@ -119,9 +119,9 @@ unsigned char SL_SC7U22_Config(void)
|
||||
SL_SC7U22_I2c_Spi_Write(SL_SPI_IIC_INTERFACE, 0x7D, 0x0E);//PWR_CTRL ENABLE ACC+GYR+TEMP
|
||||
os_time_dly(1);//10ms
|
||||
|
||||
SL_SC7U22_I2c_Spi_Write(SL_SPI_IIC_INTERFACE, 0x40, 0x06);//ACC_CONF 0x07=50Hz
|
||||
SL_SC7U22_I2c_Spi_Write(SL_SPI_IIC_INTERFACE, 0x41, 0x01);//ACC_RANGE ±8G
|
||||
SL_SC7U22_I2c_Spi_Write(SL_SPI_IIC_INTERFACE, 0x42, 0x86);//GYR_CONF 0x87=50Hz
|
||||
SL_SC7U22_I2c_Spi_Write(SL_SPI_IIC_INTERFACE, 0x40, 0x06);//ACC_CONF 0x07=50Hz 0x06=25Hz
|
||||
SL_SC7U22_I2c_Spi_Write(SL_SPI_IIC_INTERFACE, 0x41, 0x01);//ACC_RANGE 10:±8G 01:±4G
|
||||
SL_SC7U22_I2c_Spi_Write(SL_SPI_IIC_INTERFACE, 0x42, 0x86);//GYR_CONF 0x87=50Hz 0x86=25Hz
|
||||
SL_SC7U22_I2c_Spi_Write(SL_SPI_IIC_INTERFACE, 0x43, 0x00);//GYR_RANGE 2000dps
|
||||
SL_SC7U22_I2c_Spi_Write(SL_SPI_IIC_INTERFACE, 0x43, 0x00);//GYR_RANGE 2000dps
|
||||
SL_SC7U22_I2c_Spi_Write(SL_SPI_IIC_INTERFACE, 0x04, 0x50);//COM_CFG
|
||||
@ -218,24 +218,23 @@ void SL_SC7U22_RawData_Read(signed short * acc_data_buf,signed short * gyr_data_
|
||||
if(drdy_cnt>30000) break;
|
||||
}
|
||||
|
||||
#if SL_Sensor_Algo_Release_Enable==0x00
|
||||
// SL_SC7U22_I2c_Spi_Read(SL_SPI_IIC_INTERFACE, 0x30, 1, &drdy_satus);
|
||||
// printf("RawData:0x40=%x\r\n",drdy_satus);
|
||||
// xlog("RawData:0x40=%x\r\n",drdy_satus);
|
||||
// SL_SC7U22_I2c_Spi_Read(SL_SPI_IIC_INTERFACE, 0x40, 1, &drdy_satus);
|
||||
// printf("RawData:0x40=%x\r\n",drdy_satus);
|
||||
// xlog("RawData:0x40=%x\r\n",drdy_satus);
|
||||
// SL_SC7U22_I2c_Spi_Read(SL_SPI_IIC_INTERFACE, 0x06, 1, &drdy_satus);
|
||||
// printf("RawData:0x06=%x\r\n",drdy_satus);
|
||||
// xlog("RawData:0x06=%x\r\n",drdy_satus);
|
||||
// SL_SC7U22_I2c_Spi_Read(SL_SPI_IIC_INTERFACE, 0x07, 1, &drdy_satus);
|
||||
// printf("RawData:0x07=%x\r\n",drdy_satus);
|
||||
// xlog("RawData:0x07=%x\r\n",drdy_satus);
|
||||
// SL_SC7U22_I2c_Spi_Read(SL_SPI_IIC_INTERFACE, 0x7D, 1, &drdy_satus);
|
||||
// printf("RawData:0x7D=%x\r\n",drdy_satus);
|
||||
// xlog("RawData:0x7D=%x\r\n",drdy_satus);
|
||||
// SL_SC7U22_I2c_Spi_Read(SL_SPI_IIC_INTERFACE, 0x31, 1, &drdy_satus);
|
||||
// printf("RawData:0x31=%x\r\n",drdy_satus);
|
||||
// xlog("RawData:0x31=%x\r\n",drdy_satus);
|
||||
// SL_SC7U22_I2c_Spi_Read(SL_SPI_IIC_INTERFACE, 0x02, 1, &drdy_satus);
|
||||
// printf("RawData:0x02=%x\r\n",drdy_satus);
|
||||
// xlog("RawData:0x02=%x\r\n",drdy_satus);
|
||||
// SL_SC7U22_I2c_Spi_Read(SL_SPI_IIC_INTERFACE, 0x03, 1, &drdy_satus);
|
||||
// printf("RawData:0x03=%x\r\n",drdy_satus);
|
||||
#endif
|
||||
// xlog("RawData:0x03=%x\r\n",drdy_satus);
|
||||
|
||||
|
||||
SL_SC7U22_I2c_Spi_Read(SL_SPI_IIC_INTERFACE, 0x0C, 12, &raw_data[0]);
|
||||
|
||||
@ -246,9 +245,7 @@ void SL_SC7U22_RawData_Read(signed short * acc_data_buf,signed short * gyr_data_
|
||||
gyr_data_buf[1] =(signed short)((((unsigned char)raw_data[8])* 256) + ((unsigned char)raw_data[9]));//GYRY-16位
|
||||
gyr_data_buf[2] =(signed short)((((unsigned char)raw_data[10])* 256) + ((unsigned char)raw_data[11]));//GYRZ-16位
|
||||
|
||||
#if SL_Sensor_Algo_Release_Enable==0x00
|
||||
printf("RawData:AX=%d,AY=%d,AZ=%d,GX=%d,GY=%d,GZ=%d\r\n",acc_data_buf[0],acc_data_buf[1],acc_data_buf[2],gyr_data_buf[0],gyr_data_buf[1],gyr_data_buf[2]);
|
||||
#endif
|
||||
xlog("RawData:AX=%d,AY=%d,AZ=%d,GX=%d,GY=%d,GZ=%d\r\n",acc_data_buf[0],acc_data_buf[1],acc_data_buf[2],gyr_data_buf[0],gyr_data_buf[1],gyr_data_buf[2]);
|
||||
|
||||
}
|
||||
#else
|
||||
@ -322,10 +319,10 @@ unsigned short SL_SC7U22_FIFO_Read(signed short *accx_buf,signed short *accy_buf
|
||||
SL_SC7U22_I2c_Spi_Read(SL_SPI_IIC_INTERFACE, 0x21, fifo_num*2, SL_SC7U22_FIFO_DATA);//读取FIFO数据 BYTE NUM
|
||||
// SL_SC7U22_I2c_Spi_Write(SL_SPI_IIC_INTERFACE, 0x1D, 0x00);//BY PASS MODE
|
||||
// SL_SC7U22_I2c_Spi_Write(SL_SPI_IIC_INTERFACE, 0x1D, 0x20);//Stream MODE
|
||||
printf("SC7U22_FIFO_NUM1:%d\n",fifo_num);
|
||||
xlog("SC7U22_FIFO_NUM1:%d\n",fifo_num);
|
||||
#if SL_Sensor_Algo_Release_Enable==0x00
|
||||
// printf("0x1F:0x%x 0x20:0x%x\n",fifo_num1,fifo_num2);
|
||||
// printf("SC7U22_FIFO_NUM1:%d\n",fifo_num);
|
||||
// xlog("0x1F:0x%x 0x20:0x%x\n",fifo_num1,fifo_num2);
|
||||
// xlog("SC7U22_FIFO_NUM1:%d\n",fifo_num);
|
||||
#endif
|
||||
fifo_len=0;
|
||||
|
||||
@ -350,7 +347,7 @@ unsigned short SL_SC7U22_FIFO_Read(signed short *accx_buf,signed short *accy_buf
|
||||
accx_buf[Acc_FIFO_Num] = ((s16)(SL_SC7U22_FIFO_DATA[i + 0] * 256 + SL_SC7U22_FIFO_DATA[i + 1])) ;
|
||||
accy_buf[Acc_FIFO_Num] = ((s16)(SL_SC7U22_FIFO_DATA[i + 2] * 256 + SL_SC7U22_FIFO_DATA[i + 3])) ;
|
||||
accz_buf[Acc_FIFO_Num] = ((s16)(SL_SC7U22_FIFO_DATA[i + 4] * 256 + SL_SC7U22_FIFO_DATA[i + 5])) ;
|
||||
printf("AccNum : %d ,Acc_x : %4d, Acc_y : %4d, Acc_z : %4d,\r\n",Acc_FIFO_Num, accx_buf[Acc_FIFO_Num], accy_buf[Acc_FIFO_Num], accz_buf[Acc_FIFO_Num]);
|
||||
xlog("AccNum : %d ,Acc_x : %4d, Acc_y : %4d, Acc_z : %4d,\r\n",Acc_FIFO_Num, accx_buf[Acc_FIFO_Num], accy_buf[Acc_FIFO_Num], accz_buf[Acc_FIFO_Num]);
|
||||
i = i + 6;
|
||||
Acc_FIFO_Num++;
|
||||
}
|
||||
@ -360,7 +357,7 @@ unsigned short SL_SC7U22_FIFO_Read(signed short *accx_buf,signed short *accy_buf
|
||||
gyrx_buf[Gyr_FIFO_Num] = ((s16)(SL_SC7U22_FIFO_DATA[i + 0] * 256 + SL_SC7U22_FIFO_DATA[i + 1])) ;
|
||||
gyry_buf[Gyr_FIFO_Num] = ((s16)(SL_SC7U22_FIFO_DATA[i + 2] * 256 + SL_SC7U22_FIFO_DATA[i + 3])) ;
|
||||
gyrz_buf[Gyr_FIFO_Num] = ((s16)(SL_SC7U22_FIFO_DATA[i + 4] * 256 + SL_SC7U22_FIFO_DATA[i + 5])) ;
|
||||
printf("GyrNum : %d, Gyr_x : %4d, Gyr_y : %4d, Gyr_z : %4d,\r\n",Gyr_FIFO_Num, gyrx_buf[Gyr_FIFO_Num], gyry_buf[Gyr_FIFO_Num], gyrz_buf[Gyr_FIFO_Num]);
|
||||
xlog("GyrNum : %d, Gyr_x : %4d, Gyr_y : %4d, Gyr_z : %4d,\r\n",Gyr_FIFO_Num, gyrx_buf[Gyr_FIFO_Num], gyry_buf[Gyr_FIFO_Num], gyrz_buf[Gyr_FIFO_Num]);
|
||||
i = i + 6;
|
||||
Gyr_FIFO_Num++;
|
||||
}
|
||||
@ -398,21 +395,16 @@ unsigned char SL_SC7U22_SOFT_RESET(void)
|
||||
|
||||
SL_SC7U22_I2c_Spi_Write(SL_SPI_IIC_INTERFACE, 0x7F, 0x00);//goto 0x00
|
||||
os_time_dly(1);
|
||||
#if SL_Sensor_Algo_Release_Enable==0x00
|
||||
SL_SC7U22_I2c_Spi_Read(SL_SPI_IIC_INTERFACE, 0x04, 1,&SL_Read_Reg);
|
||||
printf("SL_SC7U22_SOFT_RESET1 0x04=0x%x\r\n",SL_Read_Reg);
|
||||
xlog("SL_SC7U22_SOFT_RESET1 0x04=0x%x\r\n",SL_Read_Reg);
|
||||
SL_Read_Reg = 0xff;
|
||||
#endif
|
||||
SL_SC7U22_I2c_Spi_Write(SL_SPI_IIC_INTERFACE, 0x04, 0x10);//BOOT
|
||||
#if SL_Sensor_Algo_Release_Enable==0x00
|
||||
#endif
|
||||
|
||||
SL_SC7U22_I2c_Spi_Write(SL_SPI_IIC_INTERFACE, 0x4A, 0xA5);//SOFT_RESET
|
||||
SL_SC7U22_I2c_Spi_Write(SL_SPI_IIC_INTERFACE, 0x4A, 0xA5);//SOFT_RESET
|
||||
os_time_dly(20);
|
||||
SL_SC7U22_I2c_Spi_Read(SL_SPI_IIC_INTERFACE, 0x04, 1,&SL_Read_Reg);
|
||||
#if SL_Sensor_Algo_Release_Enable==0x00
|
||||
printf("SL_SC7U22_SOFT_RESET2 0x08=0x%x\r\n",SL_Read_Reg);
|
||||
#endif
|
||||
xlog("SL_SC7U22_SOFT_RESET2 0x08=0x%x\r\n",SL_Read_Reg);
|
||||
if(SL_Read_Reg==0x50) return 1;
|
||||
else return 0;
|
||||
|
||||
@ -453,9 +445,7 @@ unsigned char SL_SC7U22_Open_Close_SET(unsigned char acc_enable,unsigned char gy
|
||||
SL_SC7U22_I2c_Spi_Read(SL_SPI_IIC_INTERFACE, 0x7D, 1,&SL_Read_Check);
|
||||
if(SL_Read_Reg!=SL_Read_Check)
|
||||
{
|
||||
#if SL_Sensor_Algo_Release_Enable==0x00
|
||||
printf("SL_Read_Reg=0x%x SL_Read_Check=0x%x\r\n",SL_Read_Reg,SL_Read_Check);
|
||||
#endif
|
||||
xlog("SL_Read_Reg=0x%x SL_Read_Check=0x%x\r\n",SL_Read_Reg,SL_Read_Check);
|
||||
return 0;
|
||||
}
|
||||
return 1;
|
||||
@ -513,9 +503,7 @@ unsigned char SL_SC7U22_IN_SLEEP_SET(unsigned char acc_odr,unsigned char vth,uns
|
||||
|
||||
if(SL_Read_Reg!=0x04)
|
||||
{
|
||||
#if SL_Sensor_Algo_Release_Enable==0x00
|
||||
printf("SL_Read_Reg=0x%x 0x04\r\n",SL_Read_Reg);
|
||||
#endif
|
||||
xlog("SL_Read_Reg=0x%x 0x04\r\n",SL_Read_Reg);
|
||||
return 0;
|
||||
}
|
||||
return 1;
|
||||
@ -617,23 +605,20 @@ unsigned char SL_SC7U22_WakeUp_SET(unsigned char odr_mode,unsigned char acc_rang
|
||||
}
|
||||
SL_SC7U22_I2c_Spi_Write(SL_SPI_IIC_INTERFACE, 0x43, SL_gyro_range_Reg);//GYR_RANGE 2000dps
|
||||
SL_SC7U22_I2c_Spi_Write(SL_SPI_IIC_INTERFACE, 0x43, SL_gyro_range_Reg);//GYR_RANGE 2000dps
|
||||
#if SL_Sensor_Algo_Release_Enable==0x00
|
||||
// SL_SC7U22_I2c_Spi_Read(SL_SPI_IIC_INTERFACE, 0x40, 1, &SL_Read_Check);
|
||||
// printf("RawData:0x40=%x\r\n",SL_Read_Check);
|
||||
// xlog("RawData:0x40=%x\r\n",SL_Read_Check);
|
||||
// SL_SC7U22_I2c_Spi_Read(SL_SPI_IIC_INTERFACE, 0x41, 1, &SL_Read_Check);
|
||||
// printf("RawData:0x41=%x\r\n",SL_Read_Check);
|
||||
// xlog("RawData:0x41=%x\r\n",SL_Read_Check);
|
||||
// SL_SC7U22_I2c_Spi_Read(SL_SPI_IIC_INTERFACE, 0x42, 1, &SL_Read_Check);
|
||||
// printf("RawData:0x42=%x\r\n",SL_Read_Check);
|
||||
// xlog("RawData:0x42=%x\r\n",SL_Read_Check);
|
||||
// SL_SC7U22_I2c_Spi_Read(SL_SPI_IIC_INTERFACE, 0x43, 1, &SL_Read_Check);
|
||||
// printf("RawData:0x43=%x\r\n",SL_Read_Check);
|
||||
#endif
|
||||
// xlog("RawData:0x43=%x\r\n",SL_Read_Check);
|
||||
|
||||
|
||||
SL_SC7U22_I2c_Spi_Read(SL_SPI_IIC_INTERFACE, 0x43, 1,&SL_Read_Check);
|
||||
if(SL_Read_Check!=SL_gyro_range_Reg)
|
||||
{
|
||||
#if SL_Sensor_Algo_Release_Enable==0x00
|
||||
printf("SL_Read_Check=0x%x SL_gyro_range_Reg=0x%x\r\n",SL_Read_Check,SL_gyro_range_Reg);
|
||||
#endif
|
||||
xlog("SL_Read_Check=0x%x SL_gyro_range_Reg=0x%x\r\n",SL_Read_Check,SL_gyro_range_Reg);
|
||||
return 0;
|
||||
}
|
||||
return 1;
|
||||
@ -748,7 +733,8 @@ unsigned char SL_SC7U22_Angle_Output(unsigned char calibration_en, signed short
|
||||
}
|
||||
|
||||
// 判断是否处于静止状态:加速度变化量、陀螺仪变化量、各轴加速度值都在一个很小的范围内
|
||||
if ((acc_gyro_delta[0] / 8 < 80) && (acc_gyro_delta[1] < 20) && (SL_GetAbsShort(acc_gyro_input[0]) < 3000) && (SL_GetAbsShort(acc_gyro_input[1]) < 3000) && (SL_GetAbsShort(acc_gyro_input[2] - 8192) < 3000)) { //acc<80mg gyro<20 lsb
|
||||
if ((acc_gyro_delta[0] / 8 < 160) && (acc_gyro_delta[1] < 40) && (SL_GetAbsShort(acc_gyro_input[0]) < 3000) && (SL_GetAbsShort(acc_gyro_input[1]) < 3000) && (SL_GetAbsShort(acc_gyro_input[2] - 8192) < 3000)) { //acc<160mg gyro<40 lsb
|
||||
// if ((acc_gyro_delta[0] / 8 < 80) && (acc_gyro_delta[1] < 20) && (SL_GetAbsShort(acc_gyro_input[0]) < 3000) && (SL_GetAbsShort(acc_gyro_input[1]) < 3000) && (SL_GetAbsShort(acc_gyro_input[2] - 8192) < 3000)) { //acc<80mg gyro<20 lsb
|
||||
if (SL_SC7U22_Error_cnt < 200) {
|
||||
SL_SC7U22_Error_cnt++; // 静止计数器累加
|
||||
}
|
||||
@ -773,17 +759,14 @@ unsigned char SL_SC7U22_Angle_Output(unsigned char calibration_en, signed short
|
||||
}
|
||||
|
||||
// 计算零点偏移:理想值 - 实际平均值
|
||||
// 加速度Z轴的理想值是8192,对应1g(假设量程为±8g)
|
||||
Error_Accgyro[0] = 0 - Sum_Avg_Accgyro[0];
|
||||
Error_Accgyro[1] = 0 - Sum_Avg_Accgyro[1];
|
||||
Error_Accgyro[2] = 8192 - Sum_Avg_Accgyro[2];
|
||||
Error_Accgyro[3] = 0 - Sum_Avg_Accgyro[3];
|
||||
Error_Accgyro[4] = 0 - Sum_Avg_Accgyro[4];
|
||||
Error_Accgyro[5] = 0 - Sum_Avg_Accgyro[5];
|
||||
#if SL_Sensor_Algo_Release_Enable == 0x00
|
||||
printf("AVG_Recode AX:%d,AY:%d,AZ:%d,GX:%d,GY:%d,GZ:%d\r\n", Sum_Avg_Accgyro[0], Sum_Avg_Accgyro[1], Sum_Avg_Accgyro[2], Sum_Avg_Accgyro[3], Sum_Avg_Accgyro[4], Sum_Avg_Accgyro[5]);
|
||||
printf("Error_Recode AX:%d,AY:%d,AZ:%d,GX:%d,GY:%d,GZ:%d\r\n", Error_Accgyro[0], Error_Accgyro[1], Error_Accgyro[2], Error_Accgyro[3], Error_Accgyro[4], Error_Accgyro[5]);
|
||||
#endif
|
||||
xlog("AVG_Recode AX:%d,AY:%d,AZ:%d,GX:%d,GY:%d,GZ:%d\r\n", Sum_Avg_Accgyro[0], Sum_Avg_Accgyro[1], Sum_Avg_Accgyro[2], Sum_Avg_Accgyro[3], Sum_Avg_Accgyro[4], Sum_Avg_Accgyro[5]);
|
||||
xlog("Error_Recode AX:%d,AY:%d,AZ:%d,GX:%d,GY:%d,GZ:%d\r\n", Error_Accgyro[0], Error_Accgyro[1], Error_Accgyro[2], Error_Accgyro[3], Error_Accgyro[4], Error_Accgyro[5]);
|
||||
}
|
||||
} else {
|
||||
// 如果在累加过程中发生移动,则重新开始
|
||||
@ -944,6 +927,9 @@ unsigned char SL_SC7U22_Angle_Output(unsigned char calibration_en, signed short
|
||||
return 2; // 校准未完成,返回错误状态
|
||||
}
|
||||
|
||||
unsigned char get_calibration_state(void){
|
||||
return SL_SC7U22_Error_Flag;
|
||||
}
|
||||
|
||||
|
||||
#endif
|
||||
@ -982,13 +968,13 @@ void sensor_processing_task(void *priv)
|
||||
// 7. 检查函数返回的状态
|
||||
if (status == 1) {
|
||||
// 计算成功,final_angle_data 中的数据有效
|
||||
printf("Pitch: %.2f, Roll: %.2f, Yaw: %.2f\n", final_angle_data[0], final_angle_data[1], final_angle_data[2]);
|
||||
xlog("Pitch: %.2f, Roll: %.2f, Yaw: %.2f\n", final_angle_data[0], final_angle_data[1], final_angle_data[2]);
|
||||
} else if (status == 0) {
|
||||
// 传感器正在进行静态校准,此时角度数据可能不准确
|
||||
printf("Sensor is calibrating...\n");
|
||||
xlog("Sensor is calibrating...\n");
|
||||
} else {
|
||||
// status == 2, 表示校准未完成或发生错误
|
||||
printf("Angle calculation error or calibration not finished.\n");
|
||||
xlog("Angle calculation error or calibration not finished.\n");
|
||||
}
|
||||
|
||||
// 延时一段时间,例如10ms (对应100Hz)
|
||||
@ -1005,11 +991,11 @@ void app_main()
|
||||
unsigned char init_success = SL_SC7U22_Config();
|
||||
|
||||
if (init_success) {
|
||||
printf("SCU722 初始化成功!\n");
|
||||
xlog("SCU722 初始化成功!\n");
|
||||
// 3. 创建一个任务来周期性地读取和处理数据
|
||||
task_create(sensor_processing_task, NULL, "sensor_task");
|
||||
} else {
|
||||
printf("SCU722 初始化失败!\n");
|
||||
xlog("SCU722 初始化失败!\n");
|
||||
}
|
||||
|
||||
// ...
|
||||
@ -11,7 +11,7 @@ Copyright (c) 2022 Silan MEMS. All Rights Reserved.
|
||||
#include "printf.h"
|
||||
|
||||
//是否使能串口打印调试
|
||||
#define SL_Sensor_Algo_Release_Enable 0x01
|
||||
#define SL_Sensor_Algo_Release_Enable 0x00
|
||||
//是否开启FIFO模式,默认STREAM模式
|
||||
#define SL_SC7U22_FIFO_ENABLE 0x00
|
||||
|
||||
@ -130,7 +130,7 @@ unsigned char SL_SC7U22_Angle_Output(unsigned char calibration_en,signed short *
|
||||
/**output Angle_output[2]: Yaw*******************************/
|
||||
/**input yaw_rst: reset yaw value***************************/
|
||||
|
||||
|
||||
unsigned char get_calibration_state(void);
|
||||
/**寄存器宏定义*******************************/
|
||||
#define SC7U22_WHO_AM_I 0x01
|
||||
|
||||
996
apps/earphone/xtell_Sensor/sensor/SC7U22_Ma.c
Normal file
996
apps/earphone/xtell_Sensor/sensor/SC7U22_Ma.c
Normal file
@ -0,0 +1,996 @@
|
||||
#include "SC7U22.h"
|
||||
#include "math.h"
|
||||
#include "os/os_api.h"
|
||||
|
||||
#if SL_Sensor_Algo_Release_Enable==0x00
|
||||
#include "printf.h"
|
||||
#endif
|
||||
|
||||
|
||||
//I2C SPI选择
|
||||
//#define SL_SC7U22_SPI_EN_I2C_DISABLE 0x00 //需要配合SL_SPI_IIC_INTERFACE使用
|
||||
#define SL_SPI_IIC_INTERFACE 0x01 //需要配合SL_SC7A22H_SPI_EN_I2C_DISABLE 使用
|
||||
//是否使能原始数据高通滤波
|
||||
#define SL_SC7U22_RAWDATA_HPF_ENABLE 0x00
|
||||
//中断默认电平
|
||||
#define SL_SC7U22_INT_DEFAULT_LEVEL 0x01
|
||||
//SDO 是否上拉
|
||||
#define SL_SC7U22_SDO_PullUP_ENABLE 0x01
|
||||
//AOI中断是否唤醒
|
||||
#define SL_SC7U22_AOI_Wake_Up_ENABLE 0x00
|
||||
|
||||
//FIFO_STREAM模式//FIFO_WTM模式
|
||||
//#define SL_SC7U22_FIFO_STREAM_WTM 0x01//0X00=STREAM MODE 0X01=FIFO MODE
|
||||
|
||||
#define SL_SC7U22_IIC_DELAY_US 5
|
||||
|
||||
static u32 SL_MEMS_i2cRead(u8 addr, u8 reg, u8 len, u8 *buf) {
|
||||
return _gravity_sensor_get_ndata(addr, reg, buf, len);
|
||||
}
|
||||
static u8 SL_MEMS_i2cWrite(u8 addr, u8 reg, u8 data) {
|
||||
gravity_sensor_command(addr, reg, data);
|
||||
return 0;
|
||||
}
|
||||
|
||||
unsigned char SL_SC7U22_I2c_Spi_Write(unsigned char sl_spi_iic, unsigned char reg, unsigned char dat)
|
||||
{
|
||||
if (sl_spi_iic == 1) {
|
||||
SL_MEMS_i2cWrite(SL_SC7U22_IIC_8BITS_WRITE_ADDR, reg, dat);
|
||||
return 0;
|
||||
}
|
||||
// SPI not implemented
|
||||
return 1; // 失败
|
||||
}
|
||||
|
||||
unsigned char SL_SC7U22_I2c_Spi_Read(unsigned char sl_spi_iic, unsigned char reg, unsigned short len, unsigned char* buf)
|
||||
{
|
||||
if (sl_spi_iic == 1) {
|
||||
return SL_MEMS_i2cRead(SL_SC7U22_IIC_8BITS_READ_ADDR, reg, len, buf);
|
||||
}
|
||||
// SPI not implemented
|
||||
return 0; // 失败
|
||||
}
|
||||
|
||||
static void sl_delay(unsigned char sl_i)
|
||||
{
|
||||
os_time_dly(sl_i);
|
||||
}
|
||||
|
||||
|
||||
unsigned char SL_SC7U22_Check(void)
|
||||
{
|
||||
unsigned char reg_value=0;
|
||||
|
||||
SL_SC7U22_I2c_Spi_Write(SL_SPI_IIC_INTERFACE, 0x7F, 0x00);//goto 0x00
|
||||
SL_SC7U22_I2c_Spi_Read(SL_SPI_IIC_INTERFACE, SC7U22_WHO_AM_I, 1, ®_value);
|
||||
#if SL_Sensor_Algo_Release_Enable==0x00
|
||||
printf("0x%x=0x%x\r\n",SC7U22_WHO_AM_I,reg_value);
|
||||
#endif
|
||||
if(reg_value==0x6A)
|
||||
return 0x01;//SC7U22
|
||||
else
|
||||
return 0x00;//通信异常
|
||||
}
|
||||
|
||||
unsigned char SL_SC7U22_Config(void)
|
||||
{
|
||||
unsigned char Check_Flag=0;
|
||||
unsigned char reg_value=0;
|
||||
|
||||
#if SL_SPI_IIC_INTERFACE==0x00 //SPI
|
||||
SL_SC7U22_I2c_Spi_Write(SL_SPI_IIC_INTERFACE, 0x7F, 0x00);//goto 0x90
|
||||
sl_delay(1);
|
||||
SL_SC7U22_I2c_Spi_Write(SL_SPI_IIC_INTERFACE, 0x4A, 0x66);
|
||||
sl_delay(1);
|
||||
SL_SC7U22_I2c_Spi_Write(SL_SPI_IIC_INTERFACE, 0x7F, 0x83);//goto 0x6F
|
||||
sl_delay(1);
|
||||
SL_SC7U22_I2c_Spi_Write(SL_SPI_IIC_INTERFACE, 0x6F, 0x04);//I2C disable
|
||||
sl_delay(1);
|
||||
SL_SC7U22_I2c_Spi_Write(SL_SPI_IIC_INTERFACE, 0x7F, 0x00);//goto 0x6F
|
||||
sl_delay(1);
|
||||
SL_SC7U22_I2c_Spi_Write(SL_SPI_IIC_INTERFACE, 0x4A, 0x00);
|
||||
sl_delay(1);
|
||||
#endif
|
||||
Check_Flag=SL_SC7U22_Check();
|
||||
// Check_Flag= SL_SC7U22_SOFT_RESET();
|
||||
// Check_Flag=1;//强制初始化
|
||||
#if SL_Sensor_Algo_Release_Enable==0x00
|
||||
printf("SL_SC7U22_Check=0x%x\r\n",Check_Flag);
|
||||
#endif
|
||||
if(Check_Flag==1)
|
||||
{
|
||||
Check_Flag= SL_SC7U22_POWER_DOWN();
|
||||
}
|
||||
#if SL_Sensor_Algo_Release_Enable==0x00
|
||||
printf("SL_SC7U22_POWER_DOWN=0x%x\r\n",Check_Flag);
|
||||
#endif
|
||||
if(Check_Flag==1)
|
||||
{
|
||||
Check_Flag= SL_SC7U22_SOFT_RESET();
|
||||
}
|
||||
#if SL_Sensor_Algo_Release_Enable==0x00
|
||||
printf("SL_SC7U22_SOFT_RESET=0x%x\r\n",Check_Flag);
|
||||
#endif
|
||||
if(Check_Flag==1)
|
||||
{
|
||||
SL_SC7U22_I2c_Spi_Write(SL_SPI_IIC_INTERFACE, 0x7F, 0x00);//goto 0x00
|
||||
os_time_dly(1);//10ms
|
||||
SL_SC7U22_I2c_Spi_Write(SL_SPI_IIC_INTERFACE, 0x7D, 0x0E);//PWR_CTRL ENABLE ACC+GYR+TEMP
|
||||
os_time_dly(1);//10ms
|
||||
|
||||
SL_SC7U22_I2c_Spi_Write(SL_SPI_IIC_INTERFACE, 0x40, 0x08);//ACC_CONF 0x08=100Hz
|
||||
SL_SC7U22_I2c_Spi_Write(SL_SPI_IIC_INTERFACE, 0x41, 0x01);//ACC_RANGE ±4G
|
||||
SL_SC7U22_I2c_Spi_Write(SL_SPI_IIC_INTERFACE, 0x42, 0x88);//GYR_CONF 0x88=100Hz
|
||||
SL_SC7U22_I2c_Spi_Write(SL_SPI_IIC_INTERFACE, 0x43, 0x00);//GYR_RANGE 2000dps
|
||||
SL_SC7U22_I2c_Spi_Write(SL_SPI_IIC_INTERFACE, 0x04, 0x50);//COM_CFG
|
||||
|
||||
#if SL_SC7U22_RAWDATA_HPF_ENABLE ==0x01
|
||||
SL_SC7U22_I2c_Spi_Write(SL_SPI_IIC_INTERFACE,0x7F, 0x83);//goto 0x83
|
||||
sl_delay(1);
|
||||
SL_SC7U22_I2c_Spi_Read(SL_SPI_IIC_INTERFACE, 0x26, 1, ®_value);
|
||||
reg_value=reg_value|0xA0;
|
||||
SL_SC7U22_I2c_Spi_Write(SL_SPI_IIC_INTERFACE, 0x26, reg_value);//HPF_CFG rawdata hpf
|
||||
#endif
|
||||
|
||||
#if SL_SC7U22_AOI_Wake_Up_ENABLE==0x01
|
||||
SL_SC7U22_I2c_Spi_Write(SL_SPI_IIC_INTERFACE, 0x30, 0x2A);//XYZ-ENABLE
|
||||
SL_SC7U22_I2c_Spi_Write(SL_SPI_IIC_INTERFACE, 0x32, 0x01);//VTH
|
||||
SL_SC7U22_I2c_Spi_Write(SL_SPI_IIC_INTERFACE, 0x33, 0x01);//TTH
|
||||
SL_SC7U22_I2c_Spi_Write(SL_SPI_IIC_INTERFACE, 0x3F, 0x30);//HPF FOR AOI1&AOI2
|
||||
#endif
|
||||
|
||||
#if SL_SC7U22_FIFO_ENABLE==0x01
|
||||
SL_SC7U22_I2c_Spi_Write(SL_SPI_IIC_INTERFACE, 0x1E,0x1D);//
|
||||
SL_SC7U22_I2c_Spi_Write(SL_SPI_IIC_INTERFACE, 0x1D,0x00);//
|
||||
SL_SC7U22_I2c_Spi_Write(SL_SPI_IIC_INTERFACE, 0x1D,0x20);//
|
||||
SL_SC7U22_I2c_Spi_Write(SL_SPI_IIC_INTERFACE, 0x1C,0x37);//
|
||||
#endif
|
||||
|
||||
|
||||
#if SL_SC7U22_SDO_PullUP_ENABLE ==0x01
|
||||
SL_SC7U22_I2c_Spi_Write(SL_SPI_IIC_INTERFACE,0x7F, 0x8C);//goto 0x8C
|
||||
sl_delay(1);
|
||||
SL_SC7U22_I2c_Spi_Read(SL_SPI_IIC_INTERFACE, 0x30, 1, ®_value);
|
||||
reg_value=reg_value&0xFE;//CS PullUP_enable
|
||||
reg_value=reg_value&0xFD;//SDO PullUP_enable
|
||||
SL_SC7U22_I2c_Spi_Write(SL_SPI_IIC_INTERFACE, 0x30, reg_value);
|
||||
|
||||
SL_SC7U22_I2c_Spi_Write(SL_SPI_IIC_INTERFACE,0x7F, 0x00);//goto 0x00
|
||||
os_time_dly(1);
|
||||
SL_SC7U22_I2c_Spi_Write(SL_SPI_IIC_INTERFACE,0x7F, 0x00);//goto 0x00
|
||||
os_time_dly(1);
|
||||
#else
|
||||
SL_SC7U22_I2c_Spi_Write(SL_SPI_IIC_INTERFACE,0x7F, 0x8C);//goto 0x8C
|
||||
sl_delay(1);
|
||||
SL_SC7U22_I2c_Spi_Read(SL_SPI_IIC_INTERFACE, 0x30, 1, ®_value);
|
||||
reg_value=reg_value&0xFE;//CS PullUP_enable
|
||||
reg_value=reg_value|0x02;//SDO PullUP_disable
|
||||
SL_SC7U22_I2c_Spi_Write(SL_SPI_IIC_INTERFACE, 0x30, reg_value);
|
||||
|
||||
SL_SC7U22_I2c_Spi_Write(SL_SPI_IIC_INTERFACE,0x7F, 0x00);//goto 0x00
|
||||
sl_delay(1);
|
||||
SL_SC7U22_I2c_Spi_Write(SL_SPI_IIC_INTERFACE,0x7F, 0x00);//goto 0x00
|
||||
sl_delay(1);
|
||||
#endif
|
||||
|
||||
return 1;
|
||||
}
|
||||
else
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
||||
//读取时间戳
|
||||
unsigned int SL_SC7U22_TimeStamp_Read(void)
|
||||
{
|
||||
unsigned char time_data[3];
|
||||
unsigned int time_stamp;
|
||||
|
||||
SL_SC7U22_I2c_Spi_Read(SL_SPI_IIC_INTERFACE, 0x18, 1, &time_data[0]);
|
||||
SL_SC7U22_I2c_Spi_Read(SL_SPI_IIC_INTERFACE, 0x19, 1, &time_data[1]);
|
||||
SL_SC7U22_I2c_Spi_Read(SL_SPI_IIC_INTERFACE, 0x20, 1, &time_data[2]);
|
||||
|
||||
time_stamp=(unsigned int)(time_data[0]<<16|time_data[1]<<8|time_data[2]);
|
||||
|
||||
return time_stamp;
|
||||
}
|
||||
|
||||
#if SL_SC7U22_FIFO_ENABLE ==0x00
|
||||
//100Hz 10ms read once
|
||||
void SL_SC7U22_RawData_Read(signed short * acc_data_buf,signed short * gyr_data_buf)
|
||||
{
|
||||
unsigned char raw_data[12];
|
||||
unsigned char drdy_satus=0x00;
|
||||
unsigned short drdy_cnt=0;
|
||||
|
||||
while((drdy_satus&0x03)!=0x03)//acc+gyro
|
||||
// while((drdy_satus&0x01)!=0x01)//acc
|
||||
{
|
||||
drdy_satus=0x00;
|
||||
sl_delay(1);
|
||||
SL_SC7U22_I2c_Spi_Read(SL_SPI_IIC_INTERFACE, 0x0B, 1, &drdy_satus);
|
||||
drdy_cnt++;
|
||||
if(drdy_cnt>30000) break;
|
||||
}
|
||||
|
||||
#if SL_Sensor_Algo_Release_Enable==0x00
|
||||
// SL_SC7U22_I2c_Spi_Read(SL_SPI_IIC_INTERFACE, 0x30, 1, &drdy_satus);
|
||||
// printf("RawData:0x40=%x\r\n",drdy_satus);
|
||||
// SL_SC7U22_I2c_Spi_Read(SL_SPI_IIC_INTERFACE, 0x40, 1, &drdy_satus);
|
||||
// printf("RawData:0x40=%x\r\n",drdy_satus);
|
||||
// SL_SC7U22_I2c_Spi_Read(SL_SPI_IIC_INTERFACE, 0x06, 1, &drdy_satus);
|
||||
// printf("RawData:0x06=%x\r\n",drdy_satus);
|
||||
// SL_SC7U22_I2c_Spi_Read(SL_SPI_IIC_INTERFACE, 0x07, 1, &drdy_satus);
|
||||
// printf("RawData:0x07=%x\r\n",drdy_satus);
|
||||
// SL_SC7U22_I2c_Spi_Read(SL_SPI_IIC_INTERFACE, 0x7D, 1, &drdy_satus);
|
||||
// printf("RawData:0x7D=%x\r\n",drdy_satus);
|
||||
// SL_SC7U22_I2c_Spi_Read(SL_SPI_IIC_INTERFACE, 0x31, 1, &drdy_satus);
|
||||
// printf("RawData:0x31=%x\r\n",drdy_satus);
|
||||
// SL_SC7U22_I2c_Spi_Read(SL_SPI_IIC_INTERFACE, 0x02, 1, &drdy_satus);
|
||||
// printf("RawData:0x02=%x\r\n",drdy_satus);
|
||||
// SL_SC7U22_I2c_Spi_Read(SL_SPI_IIC_INTERFACE, 0x03, 1, &drdy_satus);
|
||||
// printf("RawData:0x03=%x\r\n",drdy_satus);
|
||||
#endif
|
||||
|
||||
SL_SC7U22_I2c_Spi_Read(SL_SPI_IIC_INTERFACE, 0x0C, 12, &raw_data[0]);
|
||||
|
||||
acc_data_buf[0] =(signed short)((((unsigned char)raw_data[0])* 256) + ((unsigned char)raw_data[1]));//ACCX-16位
|
||||
acc_data_buf[1] =(signed short)((((unsigned char)raw_data[2])* 256) + ((unsigned char)raw_data[3]));//ACCY-16位
|
||||
acc_data_buf[2] =(signed short)((((unsigned char)raw_data[4])* 256) + ((unsigned char)raw_data[5]));//ACCZ-16位
|
||||
gyr_data_buf[0] =(signed short)((((unsigned char)raw_data[6])* 256) + ((unsigned char)raw_data[7]));//GYRX-16位
|
||||
gyr_data_buf[1] =(signed short)((((unsigned char)raw_data[8])* 256) + ((unsigned char)raw_data[9]));//GYRY-16位
|
||||
gyr_data_buf[2] =(signed short)((((unsigned char)raw_data[10])* 256) + ((unsigned char)raw_data[11]));//GYRZ-16位
|
||||
|
||||
#if SL_Sensor_Algo_Release_Enable==0x00
|
||||
printf("RawData:AX=%d,AY=%d,AZ=%d,GX=%d,GY=%d,GZ=%d\r\n",acc_data_buf[0],acc_data_buf[1],acc_data_buf[2],gyr_data_buf[0],gyr_data_buf[1],gyr_data_buf[2]);
|
||||
#endif
|
||||
|
||||
}
|
||||
#else
|
||||
|
||||
#if SL_Sensor_Algo_Release_Enable==0x00
|
||||
#define SL_SC7U22_WAIT_FIFO_LEN_ENABLE 0x00//0x01
|
||||
#else
|
||||
#define SL_SC7U22_WAIT_FIFO_LEN_ENABLE 0x00
|
||||
#endif
|
||||
unsigned char Acc_FIFO_Num;
|
||||
unsigned char Gyr_FIFO_Num;
|
||||
|
||||
unsigned char SL_SC7U22_FIFO_DATA[1024];
|
||||
|
||||
unsigned short SL_SC7U22_FIFO_Read(signed short *accx_buf,signed short *accy_buf,signed short *accz_buf,signed short *gyrx_buf,signed short *gyry_buf,signed short *gyrz_buf)
|
||||
{
|
||||
int16_t Acc_x = 0, Acc_y = 0, Acc_z = 0;
|
||||
int16_t Gyr_x = 0, Gyr_y = 0, Gyr_z = 0;
|
||||
unsigned char fifo_num1=0;
|
||||
unsigned char fifo_num2=0;
|
||||
unsigned short fifo_num=0;
|
||||
unsigned short fifo_len=0;
|
||||
unsigned short temp = 0;
|
||||
unsigned short i = 0 ;
|
||||
unsigned char header[2];
|
||||
unsigned short j;
|
||||
|
||||
#if SL_Sensor_Algo_Release_Enable==0x00 //user can set to zero
|
||||
#if SL_SC7U22_WAIT_FIFO_LEN_ENABLE==0x00
|
||||
while((fifo_num1&0x20)!=0x20)
|
||||
{
|
||||
sl_delay(200);
|
||||
SL_SC7U22_I2c_Spi_Read(SL_SPI_IIC_INTERFACE, 0x1F,1,&fifo_num1);
|
||||
}
|
||||
SL_SC7U22_I2c_Spi_Read(SL_SPI_IIC_INTERFACE, 0x1F,1,&fifo_num1);
|
||||
SL_SC7U22_I2c_Spi_Read(SL_SPI_IIC_INTERFACE, 0x20,1,&fifo_num2);
|
||||
if((fifo_num1&0x10)==0x10)
|
||||
{
|
||||
fifo_num=2048;
|
||||
}
|
||||
else
|
||||
{
|
||||
fifo_num=(fifo_num1&0x0F)*256+fifo_num2;
|
||||
}
|
||||
#else
|
||||
while(fifo_num2<194)//32
|
||||
{
|
||||
SL_SC7U22_I2c_Spi_Read(SL_SPI_IIC_INTERFACE, 0x1F,1,&fifo_num1);
|
||||
SL_SC7U22_I2c_Spi_Read(SL_SPI_IIC_INTERFACE, 0x20,1,&fifo_num2);
|
||||
sl_delay(20);
|
||||
fifo_wait++;
|
||||
if(fifo_wait>30000) break;
|
||||
}
|
||||
fifo_wait=0;
|
||||
fifo_num=fifo_num2;
|
||||
#endif
|
||||
|
||||
#else
|
||||
SL_SC7U22_I2c_Spi_Read(SL_SPI_IIC_INTERFACE, 0x1F,1,&fifo_num1);
|
||||
SL_SC7U22_I2c_Spi_Read(SL_SPI_IIC_INTERFACE, 0x20,1,&fifo_num2);
|
||||
if((fifo_num1&0x10)==0x10)
|
||||
{
|
||||
fifo_num=2048;
|
||||
}
|
||||
else
|
||||
{
|
||||
fifo_num=(fifo_num1&0x0F)*256+fifo_num2;
|
||||
}
|
||||
#endif
|
||||
|
||||
SL_SC7U22_I2c_Spi_Read(SL_SPI_IIC_INTERFACE, 0x21, fifo_num*2, SL_SC7U22_FIFO_DATA);//读取FIFO数据 BYTE NUM
|
||||
// SL_SC7U22_I2c_Spi_Write(SL_SPI_IIC_INTERFACE, 0x1D, 0x00);//BY PASS MODE
|
||||
// SL_SC7U22_I2c_Spi_Write(SL_SPI_IIC_INTERFACE, 0x1D, 0x20);//Stream MODE
|
||||
printf("SC7U22_FIFO_NUM1:%d\n",fifo_num);
|
||||
#if SL_Sensor_Algo_Release_Enable==0x00
|
||||
// printf("0x1F:0x%x 0x20:0x%x\n",fifo_num1,fifo_num2);
|
||||
// printf("SC7U22_FIFO_NUM1:%d\n",fifo_num);
|
||||
#endif
|
||||
fifo_len=0;
|
||||
|
||||
i = 0;
|
||||
Acc_FIFO_Num=0;
|
||||
Gyr_FIFO_Num=0;
|
||||
while(i < fifo_num*2)
|
||||
{
|
||||
//header process 1
|
||||
header[0] = SL_SC7U22_FIFO_DATA[i + 0];
|
||||
header[1] = SL_SC7U22_FIFO_DATA[i + 1];
|
||||
i = i + 2;
|
||||
|
||||
//timestamp process 2
|
||||
if(header[1] & 0x80)
|
||||
{
|
||||
i = i + 4;//every frame include the timestamp, 4 bytes
|
||||
}
|
||||
//acc process 3
|
||||
if(header[0] & 0x04)
|
||||
{
|
||||
accx_buf[Acc_FIFO_Num] = ((s16)(SL_SC7U22_FIFO_DATA[i + 0] * 256 + SL_SC7U22_FIFO_DATA[i + 1])) ;
|
||||
accy_buf[Acc_FIFO_Num] = ((s16)(SL_SC7U22_FIFO_DATA[i + 2] * 256 + SL_SC7U22_FIFO_DATA[i + 3])) ;
|
||||
accz_buf[Acc_FIFO_Num] = ((s16)(SL_SC7U22_FIFO_DATA[i + 4] * 256 + SL_SC7U22_FIFO_DATA[i + 5])) ;
|
||||
printf("AccNum : %d ,Acc_x : %4d, Acc_y : %4d, Acc_z : %4d,\r\n",Acc_FIFO_Num, accx_buf[Acc_FIFO_Num], accy_buf[Acc_FIFO_Num], accz_buf[Acc_FIFO_Num]);
|
||||
i = i + 6;
|
||||
Acc_FIFO_Num++;
|
||||
}
|
||||
//gyro process 3
|
||||
if(header[0] & 0x02)
|
||||
{
|
||||
gyrx_buf[Gyr_FIFO_Num] = ((s16)(SL_SC7U22_FIFO_DATA[i + 0] * 256 + SL_SC7U22_FIFO_DATA[i + 1])) ;
|
||||
gyry_buf[Gyr_FIFO_Num] = ((s16)(SL_SC7U22_FIFO_DATA[i + 2] * 256 + SL_SC7U22_FIFO_DATA[i + 3])) ;
|
||||
gyrz_buf[Gyr_FIFO_Num] = ((s16)(SL_SC7U22_FIFO_DATA[i + 4] * 256 + SL_SC7U22_FIFO_DATA[i + 5])) ;
|
||||
printf("GyrNum : %d, Gyr_x : %4d, Gyr_y : %4d, Gyr_z : %4d,\r\n",Gyr_FIFO_Num, gyrx_buf[Gyr_FIFO_Num], gyry_buf[Gyr_FIFO_Num], gyrz_buf[Gyr_FIFO_Num]);
|
||||
i = i + 6;
|
||||
Gyr_FIFO_Num++;
|
||||
}
|
||||
|
||||
//temperature process 1
|
||||
if(header[0] & 0x01)
|
||||
{
|
||||
i = i + 2;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
return fifo_len;
|
||||
}
|
||||
#endif
|
||||
|
||||
|
||||
unsigned char SL_SC7U22_POWER_DOWN(void)
|
||||
{
|
||||
unsigned char SL_Read_Reg = 0xff;
|
||||
|
||||
SL_SC7U22_I2c_Spi_Write(SL_SPI_IIC_INTERFACE, 0x7F, 0x00);//goto 0x00
|
||||
sl_delay(20);
|
||||
SL_SC7U22_I2c_Spi_Write(SL_SPI_IIC_INTERFACE, 0x7D, 0x00);//POWER DOWN
|
||||
sl_delay(200);
|
||||
SL_SC7U22_I2c_Spi_Read(SL_SPI_IIC_INTERFACE, 0x7D, 1,&SL_Read_Reg);
|
||||
if(SL_Read_Reg==0x00) return 1;
|
||||
else return 0;
|
||||
}
|
||||
|
||||
|
||||
unsigned char SL_SC7U22_SOFT_RESET(void)
|
||||
{
|
||||
unsigned char SL_Read_Reg = 0xff;
|
||||
|
||||
SL_SC7U22_I2c_Spi_Write(SL_SPI_IIC_INTERFACE, 0x7F, 0x00);//goto 0x00
|
||||
os_time_dly(1);
|
||||
#if SL_Sensor_Algo_Release_Enable==0x00
|
||||
SL_SC7U22_I2c_Spi_Read(SL_SPI_IIC_INTERFACE, 0x04, 1,&SL_Read_Reg);
|
||||
printf("SL_SC7U22_SOFT_RESET1 0x04=0x%x\r\n",SL_Read_Reg);
|
||||
SL_Read_Reg = 0xff;
|
||||
#endif
|
||||
SL_SC7U22_I2c_Spi_Write(SL_SPI_IIC_INTERFACE, 0x04, 0x10);//BOOT
|
||||
#if SL_Sensor_Algo_Release_Enable==0x00
|
||||
#endif
|
||||
SL_SC7U22_I2c_Spi_Write(SL_SPI_IIC_INTERFACE, 0x4A, 0xA5);//SOFT_RESET
|
||||
SL_SC7U22_I2c_Spi_Write(SL_SPI_IIC_INTERFACE, 0x4A, 0xA5);//SOFT_RESET
|
||||
os_time_dly(20);
|
||||
SL_SC7U22_I2c_Spi_Read(SL_SPI_IIC_INTERFACE, 0x04, 1,&SL_Read_Reg);
|
||||
#if SL_Sensor_Algo_Release_Enable==0x00
|
||||
printf("SL_SC7U22_SOFT_RESET2 0x08=0x%x\r\n",SL_Read_Reg);
|
||||
#endif
|
||||
if(SL_Read_Reg==0x50) return 1;
|
||||
else return 0;
|
||||
|
||||
}
|
||||
|
||||
|
||||
/****acc_enable ==0 close acc;acc_enable ==1 open acc******/
|
||||
/****gyro_enable==0 close acc;gyro_enable==1 open acc******/
|
||||
unsigned char SL_SC7U22_Open_Close_SET(unsigned char acc_enable,unsigned char gyro_enable)
|
||||
{
|
||||
unsigned char SL_Read_Reg = 0xff;
|
||||
unsigned char SL_Read_Check= 0xff;
|
||||
|
||||
SL_SC7U22_I2c_Spi_Write(SL_SPI_IIC_INTERFACE, 0x7F, 0x00);//goto 0x00
|
||||
sl_delay(1);
|
||||
SL_SC7U22_I2c_Spi_Read(SL_SPI_IIC_INTERFACE, 0x7D, 1,&SL_Read_Reg);
|
||||
|
||||
if(acc_enable==0)
|
||||
{
|
||||
SL_Read_Reg=SL_Read_Reg&0xFB;//Bit.ACC_EN=0
|
||||
}
|
||||
else if(acc_enable==1)
|
||||
{
|
||||
SL_Read_Reg=SL_Read_Reg|0x04;//Bit.ACC_EN=1
|
||||
}
|
||||
if(gyro_enable==0)
|
||||
{
|
||||
SL_Read_Reg=SL_Read_Reg&0xFD;//Bit.GYR_EN=0
|
||||
}
|
||||
else if(gyro_enable==1)
|
||||
{
|
||||
SL_Read_Reg=SL_Read_Reg|0x02;//Bit.GYR_EN=1
|
||||
}
|
||||
SL_SC7U22_I2c_Spi_Write(SL_SPI_IIC_INTERFACE, 0x7D, SL_Read_Reg);//PWR_CTRL ENABLE ACC+GYR+TEMP
|
||||
sl_delay(5);//5ms
|
||||
SL_SC7U22_I2c_Spi_Write(SL_SPI_IIC_INTERFACE, 0x7D, SL_Read_Reg);//PWR_CTRL ENABLE ACC+GYR+TEMP
|
||||
sl_delay(20);//10ms
|
||||
SL_SC7U22_I2c_Spi_Read(SL_SPI_IIC_INTERFACE, 0x7D, 1,&SL_Read_Check);
|
||||
if(SL_Read_Reg!=SL_Read_Check)
|
||||
{
|
||||
#if SL_Sensor_Algo_Release_Enable==0x00
|
||||
printf("SL_Read_Reg=0x%x SL_Read_Check=0x%x\r\n",SL_Read_Reg,SL_Read_Check);
|
||||
#endif
|
||||
return 0;
|
||||
}
|
||||
return 1;
|
||||
}
|
||||
|
||||
|
||||
/*******开启中断******/
|
||||
unsigned char SL_SC7U22_IN_SLEEP_SET(unsigned char acc_odr,unsigned char vth,unsigned char tth,unsigned char int_io)
|
||||
{
|
||||
unsigned char SL_Read_Reg = 0xff;
|
||||
unsigned char SL_Acc_Odr_Reg = 0xff;
|
||||
|
||||
SL_SC7U22_I2c_Spi_Write(SL_SPI_IIC_INTERFACE, 0x7F, 0x00);//goto 0x00
|
||||
sl_delay(1);
|
||||
if(int_io==1)
|
||||
{
|
||||
SL_SC7U22_I2c_Spi_Write(SL_SPI_IIC_INTERFACE, 0x06, 0x02);//AOI1-INT1
|
||||
}
|
||||
else if(int_io==2)
|
||||
{
|
||||
SL_SC7U22_I2c_Spi_Write(SL_SPI_IIC_INTERFACE, 0x08, 0x02);//AOI1-INT2
|
||||
}
|
||||
|
||||
SL_SC7U22_I2c_Spi_Read(SL_SPI_IIC_INTERFACE, 0x04, 1, &SL_Read_Reg);
|
||||
#if SL_SC7U22_INT_DEFAULT_LEVEL ==0x01
|
||||
SL_Read_Reg=SL_Read_Reg|0x04;
|
||||
SL_SC7U22_I2c_Spi_Write(SL_SPI_IIC_INTERFACE, 0x04, SL_Read_Reg);//defalut high level&& push-pull
|
||||
#else
|
||||
reg_value=reg_value&0xDF;
|
||||
SL_SC7U22_I2c_Spi_Write(SL_SPI_IIC_INTERFACE, 0x06, SL_Read_Reg);//defalut low level&& push-pull
|
||||
#endif
|
||||
SL_SC7U22_I2c_Spi_Write(SL_SPI_IIC_INTERFACE, 0x30, 0x2A);//AIO1-Enable
|
||||
SL_SC7U22_I2c_Spi_Write(SL_SPI_IIC_INTERFACE, 0x32, vth);//VTH
|
||||
SL_SC7U22_I2c_Spi_Write(SL_SPI_IIC_INTERFACE, 0x33, tth);//TTH
|
||||
|
||||
if(acc_odr==12)
|
||||
{
|
||||
SL_Acc_Odr_Reg=0x05;
|
||||
}
|
||||
else if(acc_odr==25)
|
||||
{
|
||||
SL_Acc_Odr_Reg=0x06;
|
||||
}
|
||||
else if(acc_odr==50)
|
||||
{
|
||||
SL_Acc_Odr_Reg=0x07;
|
||||
}
|
||||
SL_SC7U22_I2c_Spi_Write(SL_SPI_IIC_INTERFACE, 0x40, SL_Acc_Odr_Reg);//ACC_CONF
|
||||
os_time_dly(1);//5ms
|
||||
SL_SC7U22_I2c_Spi_Write(SL_SPI_IIC_INTERFACE, 0x7D, 0x04);//acc open and gyro close
|
||||
os_time_dly(1);//5ms
|
||||
SL_SC7U22_I2c_Spi_Write(SL_SPI_IIC_INTERFACE, 0x7D, 0x04);//acc open and gyro close
|
||||
sl_delay(200);
|
||||
SL_SC7U22_I2c_Spi_Read(SL_SPI_IIC_INTERFACE, 0x7D, 1,&SL_Read_Reg);
|
||||
|
||||
if(SL_Read_Reg!=0x04)
|
||||
{
|
||||
#if SL_Sensor_Algo_Release_Enable==0x00
|
||||
printf("SL_Read_Reg=0x%x 0x04\r\n",SL_Read_Reg);
|
||||
#endif
|
||||
return 0;
|
||||
}
|
||||
return 1;
|
||||
}
|
||||
|
||||
/*******ODR SET:25 50 100 200******************/
|
||||
/*******acc range:2 4 8 16*********************/
|
||||
/*******gyro range:125 250 500 1000 2000*******/
|
||||
/*******acc_hp_en: 0=disable 1=enable**********/
|
||||
/*******gyro_hp_en:0=disable 1=enable**********/
|
||||
unsigned char SL_SC7U22_WakeUp_SET(unsigned char odr_mode,unsigned char acc_range,unsigned char acc_hp_en,unsigned short gyro_range,unsigned char gyro_hp_en)
|
||||
{
|
||||
unsigned char SL_Odr_Reg = 0x00;
|
||||
unsigned char SL_acc_mode_Reg = 0x00;
|
||||
unsigned char SL_gyro_mode_Reg = 0x00;
|
||||
unsigned char SL_acc_range_Reg = 0x00;
|
||||
unsigned char SL_gyro_range_Reg = 0x00;
|
||||
unsigned char SL_Read_Check = 0xff;
|
||||
|
||||
SL_SC7U22_I2c_Spi_Write(SL_SPI_IIC_INTERFACE, 0x7F, 0x00);//goto 0x00
|
||||
sl_delay(1);
|
||||
SL_SC7U22_I2c_Spi_Write(SL_SPI_IIC_INTERFACE, 0x7D, 0x06);//PWR_CTRL ENABLE ACC+GYR
|
||||
sl_delay(5);
|
||||
SL_SC7U22_I2c_Spi_Write(SL_SPI_IIC_INTERFACE, 0x7D, 0x06);//PWR_CTRL ENABLE ACC+GYR
|
||||
sl_delay(200);
|
||||
SL_SC7U22_I2c_Spi_Write(SL_SPI_IIC_INTERFACE, 0x30, 0x00);//AIO1-disable
|
||||
SL_SC7U22_I2c_Spi_Write(SL_SPI_IIC_INTERFACE, 0x32, 0xff);//vth
|
||||
SL_SC7U22_I2c_Spi_Write(SL_SPI_IIC_INTERFACE, 0x33, 0xff);//tth
|
||||
|
||||
if(odr_mode==25)
|
||||
{
|
||||
SL_Odr_Reg=0x06;
|
||||
}
|
||||
else if(odr_mode==50)
|
||||
{
|
||||
SL_Odr_Reg=0x07;
|
||||
}
|
||||
else if(odr_mode==100)
|
||||
{
|
||||
SL_Odr_Reg=0x08;
|
||||
}
|
||||
else if(odr_mode==200)
|
||||
{
|
||||
SL_Odr_Reg=0x09;
|
||||
}
|
||||
if(acc_hp_en==1)
|
||||
SL_acc_mode_Reg=0x80;
|
||||
|
||||
SL_acc_mode_Reg=SL_acc_mode_Reg|SL_Odr_Reg;
|
||||
SL_SC7U22_I2c_Spi_Write(SL_SPI_IIC_INTERFACE, 0x40, SL_acc_mode_Reg);//ACC_CONF
|
||||
|
||||
if(gyro_hp_en==1)
|
||||
SL_gyro_mode_Reg=0x40;
|
||||
else if(gyro_hp_en==2)
|
||||
SL_gyro_mode_Reg=0x80;
|
||||
else if(gyro_hp_en==3)
|
||||
SL_gyro_mode_Reg=0xC0;
|
||||
|
||||
SL_gyro_mode_Reg=SL_gyro_mode_Reg|SL_Odr_Reg;
|
||||
SL_SC7U22_I2c_Spi_Write(SL_SPI_IIC_INTERFACE, 0x42, SL_gyro_mode_Reg);//GYR_CONF
|
||||
|
||||
if(acc_range==2)
|
||||
{
|
||||
SL_acc_range_Reg=0x00;
|
||||
}
|
||||
else if(acc_range==4)
|
||||
{
|
||||
SL_acc_range_Reg=0x01;
|
||||
}
|
||||
else if(acc_range==8)
|
||||
{
|
||||
SL_acc_range_Reg=0x02;
|
||||
}
|
||||
else if(acc_range==16)
|
||||
{
|
||||
SL_acc_range_Reg=0x03;
|
||||
}
|
||||
SL_SC7U22_I2c_Spi_Write(SL_SPI_IIC_INTERFACE, 0x41, SL_acc_range_Reg);//ACC_RANGE
|
||||
|
||||
if(gyro_range==2000)
|
||||
{
|
||||
SL_gyro_range_Reg=0x00;
|
||||
}
|
||||
else if(gyro_range==1000)
|
||||
{
|
||||
SL_gyro_range_Reg=0x01;
|
||||
}
|
||||
else if(gyro_range==500)
|
||||
{
|
||||
SL_gyro_range_Reg=0x02;
|
||||
}
|
||||
else if(gyro_range==250)
|
||||
{
|
||||
SL_gyro_range_Reg=0x03;
|
||||
}
|
||||
else if(gyro_range==125)
|
||||
{
|
||||
SL_gyro_range_Reg=0x04;
|
||||
}
|
||||
SL_SC7U22_I2c_Spi_Write(SL_SPI_IIC_INTERFACE, 0x43, SL_gyro_range_Reg);//GYR_RANGE 2000dps
|
||||
SL_SC7U22_I2c_Spi_Write(SL_SPI_IIC_INTERFACE, 0x43, SL_gyro_range_Reg);//GYR_RANGE 2000dps
|
||||
#if SL_Sensor_Algo_Release_Enable==0x00
|
||||
// SL_SC7U22_I2c_Spi_Read(SL_SPI_IIC_INTERFACE, 0x40, 1, &SL_Read_Check);
|
||||
// printf("RawData:0x40=%x\r\n",SL_Read_Check);
|
||||
// SL_SC7U22_I2c_Spi_Read(SL_SPI_IIC_INTERFACE, 0x41, 1, &SL_Read_Check);
|
||||
// printf("RawData:0x41=%x\r\n",SL_Read_Check);
|
||||
// SL_SC7U22_I2c_Spi_Read(SL_SPI_IIC_INTERFACE, 0x42, 1, &SL_Read_Check);
|
||||
// printf("RawData:0x42=%x\r\n",SL_Read_Check);
|
||||
// SL_SC7U22_I2c_Spi_Read(SL_SPI_IIC_INTERFACE, 0x43, 1, &SL_Read_Check);
|
||||
// printf("RawData:0x43=%x\r\n",SL_Read_Check);
|
||||
#endif
|
||||
|
||||
SL_SC7U22_I2c_Spi_Read(SL_SPI_IIC_INTERFACE, 0x43, 1,&SL_Read_Check);
|
||||
if(SL_Read_Check!=SL_gyro_range_Reg)
|
||||
{
|
||||
#if SL_Sensor_Algo_Release_Enable==0x00
|
||||
printf("SL_Read_Check=0x%x SL_gyro_range_Reg=0x%x\r\n",SL_Read_Check,SL_gyro_range_Reg);
|
||||
#endif
|
||||
return 0;
|
||||
}
|
||||
return 1;
|
||||
}
|
||||
|
||||
|
||||
#if SL_SC7U22_FIFO_ENABLE ==0x00
|
||||
// =================================================================================================
|
||||
// Madgwick AHRS 滤波器相关变量和函数
|
||||
// -------------------------------------------------------------------------------------------------
|
||||
|
||||
// 定义常量
|
||||
#define sampleFreq 100.0f // 传感器采样频率 (Hz),必须与实际的传感器数据更新频率一致
|
||||
#define betaDef 0.1f // 算法的比例增益 beta,影响加速度计修正陀螺仪的权重
|
||||
|
||||
// 全局变量
|
||||
static volatile float beta = betaDef; // 算法增益 beta
|
||||
static volatile float q0 = 1.0f, q1 = 0.0f, q2 = 0.0f, q3 = 0.0f; // 表示姿态的四元数 (w, x, y, z)
|
||||
|
||||
/**
|
||||
* @brief 快速计算 1/sqrt(x)
|
||||
* @param x 输入的浮点数
|
||||
* @return 1/sqrt(x) 的近似值
|
||||
*/
|
||||
static float invSqrt(float x) {
|
||||
float halfx = 0.5f * x;
|
||||
float y = x;
|
||||
long i = *(long*)&y;
|
||||
i = 0x5f3759df - (i>>1);
|
||||
y = *(float*)&i;
|
||||
y = y * (1.5f - (halfx * y * y)); // 牛顿迭代法,提高精度
|
||||
return y;
|
||||
}
|
||||
|
||||
/**
|
||||
* @brief Madgwick AHRS 姿态更新函数 (IMU版本)
|
||||
* @details 该函数融合了陀螺仪和加速度计的数据,计算出表示设备姿态的四元数。
|
||||
* 1. 使用陀螺仪数据积分,得到一个初步的姿态估计(预测)。
|
||||
* 2. 使用加速度计数据(当设备处于静止或低速运动时,加速度计主要测量重力)来修正这个估计(修正)。
|
||||
* 3. 通过梯度下降法找到一个最优的旋转,使得在当前姿态下,重力向量的方向与加速度计测量的方向最接近。
|
||||
* @param gx, gy, gz 陀螺仪三轴角速度 (单位: rad/s)
|
||||
* @param ax, ay, az 加速度计三轴加速度 (单位: g)
|
||||
*/
|
||||
static void MadgwickAHRSupdateIMU(float gx, float gy, float gz, float ax, float ay, float az) {
|
||||
float recipNorm;
|
||||
float s0, s1, s2, s3;
|
||||
float qDot1, qDot2, qDot3, qDot4;
|
||||
float _2q0, _2q1, _2q2, _2q3, _4q0, _4q1, _4q2 ,_8q1, _8q2, q0q0, q1q1, q2q2, q3q3;
|
||||
float dt = 1.0f / sampleFreq; // 采样时间间隔
|
||||
|
||||
// --- 1. 陀螺仪积分:计算四元数的变化率 ---
|
||||
// 姿态运动学的基本方程,描述了姿态如何随角速度变化。
|
||||
qDot1 = 0.5f * (-q1 * gx - q2 * gy - q3 * gz);
|
||||
qDot2 = 0.5f * (q0 * gx + q2 * gz - q3 * gy);
|
||||
qDot3 = 0.5f * (q0 * gy - q1 * gz + q3 * gx);
|
||||
qDot4 = 0.5f * (q0 * gz + q1 * gy - q2 * gx);
|
||||
|
||||
// --- 2. 加速度计修正 ---
|
||||
// 仅当加速度计读数有效时(即模长不为0)才进行修正,防止计算NaN。
|
||||
if(!((ax == 0.0f) && (ay == 0.0f) && (az == 0.0f))) {
|
||||
|
||||
// 将加速度计读数归一化,得到单位向量
|
||||
recipNorm = invSqrt(ax * ax + ay * ay + az * az);
|
||||
ax *= recipNorm;
|
||||
ay *= recipNorm;
|
||||
az *= recipNorm;
|
||||
|
||||
// 预先计算一些重复使用的值,提高效率
|
||||
_2q0 = 2.0f * q0;
|
||||
_2q1 = 2.0f * q1;
|
||||
_2q2 = 2.0f * q2;
|
||||
_2q3 = 2.0f * q3;
|
||||
_4q0 = 4.0f * q0;
|
||||
_4q1 = 4.0f * q1;
|
||||
_4q2 = 4.0f * q2;
|
||||
_8q1 = 8.0f * q1;
|
||||
_8q2 = 8.0f * q2;
|
||||
q0q0 = q0 * q0;
|
||||
q1q1 = q1 * q1;
|
||||
q2q2 = q2 * q2;
|
||||
q3q3 = q3 * q3;
|
||||
|
||||
// --- 梯度下降法:计算修正量 ---
|
||||
// 目标函数 f(q, a) = [2(q1q3 - q0q2) - ax, 2(q0q1 + q2q3) - ay, 2(0.5 - q1^2 - q2^2) - az]^T
|
||||
// s0, s1, s2, s3 是目标函数 f 对四元数 q 的雅可比矩阵 J 与 f 的乘积。
|
||||
// 这个结果代表了误差函数的梯度方向,用于修正四元数的变化率。
|
||||
s0 = _4q0 * q2q2 + _2q2 * ax + _4q0 * q1q1 - _2q1 * ay;
|
||||
s1 = _4q1 * q3q3 - _2q3 * ax + 4.0f * q0q0 * q1 - _2q0 * ay - _4q1 + _8q1 * q1q1 + _8q1 * q2q2 + _4q1 * az;
|
||||
s2 = 4.0f * q0q0 * q2 + _2q0 * ax + _4q2 * q3q3 - _2q3 * ay - _4q2 + _8q2 * q1q1 + _8q2 * q2q2 + _4q2 * az;
|
||||
s3 = 4.0f * q1q1 * q3 - _2q1 * ax + 4.0f * q2q2 * q3 - _2q2 * ay;
|
||||
recipNorm = invSqrt(s0 * s0 + s1 * s1 + s2 * s2 + s3 * s3); // 归一化梯度
|
||||
s0 *= recipNorm;
|
||||
s1 *= recipNorm;
|
||||
s2 *= recipNorm;
|
||||
s3 *= recipNorm;
|
||||
|
||||
// --- 应用修正量 ---
|
||||
// 将计算出的修正量(梯度)从陀螺仪积分结果中减去,beta是修正的权重。
|
||||
qDot1 -= beta * s0;
|
||||
qDot2 -= beta * s1;
|
||||
qDot3 -= beta * s2;
|
||||
qDot4 -= beta * s3;
|
||||
}
|
||||
|
||||
// --- 3. 积分:更新四元数 ---
|
||||
// 使用一阶龙格-库塔法(即欧拉法)进行积分,得到新的四元数。
|
||||
q0 += qDot1 * dt;
|
||||
q1 += qDot2 * dt;
|
||||
q2 += qDot3 * dt;
|
||||
q3 += qDot4 * dt;
|
||||
|
||||
// --- 4. 归一化四元数 ---
|
||||
// 保持四元数的模长为1,防止由于计算误差导致的累积漂移。
|
||||
recipNorm = invSqrt(q0 * q0 + q1 * q1 + q2 * q2 + q3 * q3);
|
||||
q0 *= recipNorm;
|
||||
q1 *= recipNorm;
|
||||
q2 *= recipNorm;
|
||||
q3 *= recipNorm;
|
||||
}
|
||||
// =================================================================================================
|
||||
|
||||
// --- 静态校准相关变量 ---
|
||||
static unsigned char SL_SC7U22_Error_Flag=0;
|
||||
static unsigned char SL_SC7U22_Error_cnt=0;
|
||||
static unsigned char SL_SC7U22_Error_cnt2=0;
|
||||
static signed short Temp_Accgyro[6] ={0};
|
||||
static signed short Error_Accgyro[6]={0};
|
||||
static signed int Sum_Avg_Accgyro[6] ={0};
|
||||
static float yaw_offset = 0.0f;
|
||||
|
||||
static signed short SL_GetAbsShort(signed short v_Val_s16r)
|
||||
{
|
||||
if(v_Val_s16r==(-32768))
|
||||
return 32767;
|
||||
return (v_Val_s16r < 0) ? -v_Val_s16r : v_Val_s16r;
|
||||
}
|
||||
|
||||
/**
|
||||
* @brief 姿态角解算函数
|
||||
* @details
|
||||
* 该函数主要完成两项工作:
|
||||
* 1. 静态校准:在初始阶段,检测传感器是否处于静止状态。如果是,则计算加速度计和陀螺仪的零点偏移(误差),用于后续的数据补偿。
|
||||
* 2. 姿态解算:使用 Madgwick 滤波器融合经过校准后的加速度计和陀螺仪数据,计算出物体的俯仰角(Pitch)、横滚角(Roll)和偏航角(Yaw)。
|
||||
*
|
||||
* @param calibration_en 传入:外部校准使能标志。如果为0,则强制认为已经校准完成。
|
||||
* @param acc_gyro_input 传入和传出:包含6轴原始数据的数组指针,顺序为 [ACC_X, ACC_Y, ACC_Z, GYR_X, GYR_Y, GYR_Z]。该函数会对其进行原地修改,填充为校准后的数据。
|
||||
* @param Angle_output 传出:滤波后的结果,顺序为 [Pitch, Roll, Yaw]。
|
||||
* @param yaw_rst 传入:Yaw轴重置标志。如果为1,则将Yaw角清零。
|
||||
*
|
||||
* @return
|
||||
* - 0: 正在进行静态校准。
|
||||
* - 1: 姿态角计算成功。
|
||||
* - 2: 校准未完成,无法进行计算。
|
||||
*/
|
||||
unsigned char SL_SC7U22_Angle_Output(unsigned char calibration_en, signed short *acc_gyro_input, float *Angle_output, unsigned char yaw_rst)
|
||||
{
|
||||
unsigned short acc_gyro_delta[2];
|
||||
unsigned char sl_i = 0;
|
||||
|
||||
// 如果外部强制使能校准,则将标志位置1
|
||||
if (calibration_en == 0) {
|
||||
SL_SC7U22_Error_Flag = 1;
|
||||
}
|
||||
|
||||
// =================================================================================
|
||||
// 步骤 1: 静态校准 (与原版逻辑相同)
|
||||
// ---------------------------------------------------------------------------------
|
||||
if (SL_SC7U22_Error_Flag == 0) {
|
||||
// 计算当前数据与上一帧数据的差值,用于判断是否静止
|
||||
acc_gyro_delta[0] = 0;
|
||||
acc_gyro_delta[1] = 0;
|
||||
for (sl_i = 0; sl_i < 3; sl_i++) {
|
||||
acc_gyro_delta[0] += SL_GetAbsShort(acc_gyro_input[sl_i] - Temp_Accgyro[sl_i]);
|
||||
acc_gyro_delta[1] += SL_GetAbsShort(acc_gyro_input[3 + sl_i] - Temp_Accgyro[3 + sl_i]);
|
||||
}
|
||||
// 保存当前数据,用于下一帧比较
|
||||
for (sl_i = 0; sl_i < 6; sl_i++) {
|
||||
Temp_Accgyro[sl_i] = acc_gyro_input[sl_i];
|
||||
}
|
||||
|
||||
// 判断是否处于静止状态:加速度变化量、陀螺仪变化量、各轴加速度值都在一个很小的范围内
|
||||
// 假设1g = 8192 (对应 +/-4g 量程)
|
||||
if ((acc_gyro_delta[0] / 8 < 80) && (acc_gyro_delta[1] < 20) && (SL_GetAbsShort(acc_gyro_input[0]) < 3000) && (SL_GetAbsShort(acc_gyro_input[1]) < 3000) && (SL_GetAbsShort(acc_gyro_input[2] - 8192) < 3000)) { //acc<80mg gyro<20 lsb
|
||||
if (SL_SC7U22_Error_cnt < 200) {
|
||||
SL_SC7U22_Error_cnt++; // 静止计数器累加
|
||||
}
|
||||
} else {
|
||||
SL_SC7U22_Error_cnt = 0; // 如果发生移动,则清空静止计数器
|
||||
}
|
||||
|
||||
// 如果静止时间足够长(这里是190个采样周期,约1.9秒)
|
||||
if (SL_SC7U22_Error_cnt > 190) {
|
||||
// 开始累加50个采样点的数据
|
||||
for (sl_i = 0; sl_i < 6; sl_i++) {
|
||||
Sum_Avg_Accgyro[sl_i] += acc_gyro_input[sl_i];
|
||||
}
|
||||
SL_SC7U22_Error_cnt2++;
|
||||
if (SL_SC7U22_Error_cnt2 > 49) {
|
||||
// 累加满50个点后,计算平均值
|
||||
SL_SC7U22_Error_Flag = 1; // 标记校准完成
|
||||
SL_SC7U22_Error_cnt2 = 0;
|
||||
SL_SC7U22_Error_cnt = 0;
|
||||
for (sl_i = 0; sl_i < 6; sl_i++) {
|
||||
Sum_Avg_Accgyro[sl_i] = Sum_Avg_Accgyro[sl_i] / 50;
|
||||
}
|
||||
|
||||
// 计算零点偏移:理想值 - 实际平均值
|
||||
// 加速度Z轴的理想值是8192,对应1g(假设量程为±4g)
|
||||
Error_Accgyro[0] = 0 - Sum_Avg_Accgyro[0];
|
||||
Error_Accgyro[1] = 0 - Sum_Avg_Accgyro[1];
|
||||
Error_Accgyro[2] = 8192 - Sum_Avg_Accgyro[2];
|
||||
Error_Accgyro[3] = 0 - Sum_Avg_Accgyro[3];
|
||||
Error_Accgyro[4] = 0 - Sum_Avg_Accgyro[4];
|
||||
Error_Accgyro[5] = 0 - Sum_Avg_Accgyro[5];
|
||||
#if SL_Sensor_Algo_Release_Enable == 0x00
|
||||
printf("AVG_Recode AX:%d,AY:%d,AZ:%d,GX:%d,GY:%d,GZ:%d\r\n", Sum_Avg_Accgyro[0], Sum_Avg_Accgyro[1], Sum_Avg_Accgyro[2], Sum_Avg_Accgyro[3], Sum_Avg_Accgyro[4], Sum_Avg_Accgyro[5]);
|
||||
printf("Error_Recode AX:%d,AY:%d,AZ:%d,GX:%d,GY:%d,GZ:%d\r\n", Error_Accgyro[0], Error_Accgyro[1], Error_Accgyro[2], Error_Accgyro[3], Error_Accgyro[4], Error_Accgyro[5]);
|
||||
#endif
|
||||
}
|
||||
} else {
|
||||
// 如果在累加过程中发生移动,则重新开始
|
||||
SL_SC7U22_Error_cnt2 = 0;
|
||||
for (sl_i = 0; sl_i < 6; sl_i++) {
|
||||
Sum_Avg_Accgyro[sl_i] = 0;
|
||||
}
|
||||
}
|
||||
|
||||
return 0; // 返回0,表示正在校准
|
||||
}
|
||||
|
||||
// =================================================================================
|
||||
// 步骤 2: 姿态解算 (Madgwick)
|
||||
// ---------------------------------------------------------------------------------
|
||||
if (SL_SC7U22_Error_Flag == 1) { // 确认已经校准完成
|
||||
// --- 2.1 数据预处理 ---
|
||||
// 应用零点偏移补偿
|
||||
for (sl_i = 0; sl_i < 6; sl_i++) {
|
||||
Temp_Accgyro[sl_i] = acc_gyro_input[sl_i] + Error_Accgyro[sl_i];
|
||||
}
|
||||
|
||||
#if 1 // 将校准后的数据写回输入数组
|
||||
for (sl_i = 0; sl_i < 6; sl_i++) {
|
||||
acc_gyro_input[sl_i] = Temp_Accgyro[sl_i];
|
||||
}
|
||||
#endif
|
||||
// --- 2.2 转换数据单位 ---
|
||||
// 将校准后的传感器原始值 (LSB) 转换为 Madgwick 算法所需的物理单位。
|
||||
// 加速度: LSB -> g (重力加速度)。转换系数 = 量程 / (2^15)。假设 +/-4g 量程, 系数 = 4 / 32768 = 1/8192。
|
||||
float ax = (float)Temp_Accgyro[0] / 8192.0f;
|
||||
float ay = (float)Temp_Accgyro[1] / 8192.0f;
|
||||
float az = (float)Temp_Accgyro[2] / 8192.0f;
|
||||
// 角速度: LSB -> rad/s (弧度/秒)。转换系数 = (量程 * PI) / (180 * 2^15)。
|
||||
// 假设 +/-2000dps 量程, 系数 = (2000 * 3.14159) / (180 * 32768) ≈ 0.001064
|
||||
float gx = (float)Temp_Accgyro[3] * 0.001064f;
|
||||
float gy = (float)Temp_Accgyro[4] * 0.001064f;
|
||||
float gz = (float)Temp_Accgyro[5] * 0.001064f;
|
||||
|
||||
// --- 2.3 调用 Madgwick 更新函数 ---
|
||||
// 将处理好的物理单位数据传入滤波器,更新姿态四元数。
|
||||
MadgwickAHRSupdateIMU(gx, gy, gz, ax, ay, az);
|
||||
|
||||
// --- 2.4 将四元数转换为欧拉角 ---
|
||||
// 欧拉角(Pitch, Roll, Yaw)更直观,便于使用。转换公式如下。
|
||||
// 转换结果单位为度 (乘以 180/PI ≈ 57.29578)。
|
||||
float yaw, pitch, roll;
|
||||
|
||||
// Roll (横滚角,绕x轴旋转)
|
||||
roll = atan2f(2.0f * (q0 * q1 + q2 * q3), 1.0f - 2.0f * (q1 * q1 + q2 * q2)) * 57.29578f;
|
||||
// Pitch (俯仰角,绕y轴旋转)
|
||||
float sinp = 2.0f * (q0 * q2 - q3 * q1);
|
||||
if (fabsf(sinp) >= 1)
|
||||
pitch = copysignf(3.14159265f / 2, sinp) * 57.29578f; // 防止万向节死锁,当sinp接近+/-1时,直接赋+/-90度
|
||||
else
|
||||
pitch = asinf(sinp) * 57.29578f;
|
||||
// Yaw (偏航角,绕z轴旋转)
|
||||
yaw = atan2f(2.0f * (q0 * q3 + q1 * q2), 1.0f - 2.0f * (q2 * q2 + q3 * q3)) * 57.29578f;
|
||||
|
||||
// --- 2.5 处理Yaw轴重置 ---
|
||||
// Yaw角无法通过加速度计校正,会随时间漂移。提供一个重置机制,将当前Yaw角作为新的零点。
|
||||
if (yaw_rst) {
|
||||
yaw_offset = yaw;
|
||||
}
|
||||
|
||||
// --- 2.6 输出最终角度 ---
|
||||
// 将计算出的欧拉角存入输出数组。
|
||||
Angle_output[0] = pitch;
|
||||
Angle_output[1] = roll;
|
||||
Angle_output[2] = yaw - yaw_offset; // 输出减去偏移量的相对Yaw角
|
||||
|
||||
return 1; // 返回1,表示计算成功
|
||||
}
|
||||
|
||||
return 2; // 校准未完成,返回错误状态
|
||||
}
|
||||
#endif
|
||||
|
||||
|
||||
/*
|
||||
//-----------------------------------------
|
||||
调用示例-by_lmx:
|
||||
|
||||
|
||||
//1.
|
||||
// 定义用于存放传感器数据的缓冲区
|
||||
static signed short acc_raw_data[3]; // [0]: acc_x, [1]: acc_y, [2]: acc_z
|
||||
static signed short gyr_raw_data[3]; // [0]: gyr_x, [1]: gyr_y, [2]: gyr_z
|
||||
static signed short combined_raw_data[6]; // 用于合并 acc 和 gyr 数据
|
||||
static float final_angle_data[3]; // [0]: Pitch, [1]: Roll, [2]: Yaw
|
||||
|
||||
// 传感器数据处理任务
|
||||
void sensor_processing_task(void *priv)
|
||||
{
|
||||
while (1) {
|
||||
// 4. 周期性调用读取函数,获取原始数据
|
||||
SL_SC7U22_RawData_Read(acc_raw_data, gyr_raw_data);
|
||||
|
||||
// 5. 合并加速度和角速度数据到一个数组中
|
||||
// SL_SC7U22_Angle_Output 函数需要一个包含6个元素的数组作为输入
|
||||
memcpy(&combined_raw_data[0], acc_raw_data, sizeof(acc_raw_data));
|
||||
memcpy(&combined_raw_data[3], gyr_raw_data, sizeof(gyr_raw_data));
|
||||
|
||||
// 6. 调用姿态解算函数
|
||||
// 参数: (校准使能, 输入的6轴数据, 输出的角度数据, Yaw轴复位标志)
|
||||
// calibration_en = 1: 让函数内部自动管理校准过程
|
||||
// yaw_rst = 0: 不复位Yaw角
|
||||
unsigned char status = SL_SC7U22_Angle_Output(1, combined_raw_data, final_angle_data, 0);
|
||||
|
||||
// 7. 检查函数返回的状态
|
||||
if (status == 1) {
|
||||
// 计算成功,final_angle_data 中的数据有效
|
||||
printf("Pitch: %.2f, Roll: %.2f, Yaw: %.2f\n", final_angle_data[0], final_angle_data[1], final_angle_data[2]);
|
||||
} else if (status == 0) {
|
||||
// 传感器正在进行静态校准,此时角度数据可能不准确
|
||||
printf("Sensor is calibrating...\n");
|
||||
} else {
|
||||
// status == 2, 表示校准未完成或发生错误
|
||||
printf("Angle calculation error or calibration not finished.\n");
|
||||
}
|
||||
|
||||
// 延时一段时间,例如10ms (对应100Hz)
|
||||
os_time_dly(1);
|
||||
}
|
||||
}
|
||||
|
||||
// 应用程序主入口或初始化函数
|
||||
void app_main()
|
||||
{
|
||||
// ... 其他初始化代码 ...
|
||||
|
||||
// 2. 调用初始化函数来配置SCU722传感器
|
||||
unsigned char init_success = SL_SC7U22_Config();
|
||||
|
||||
if (init_success) {
|
||||
printf("SCU722 初始化成功!\n");
|
||||
// 3. 创建一个任务来周期性地读取和处理数据
|
||||
task_create(sensor_processing_task, NULL, "sensor_task");
|
||||
} else {
|
||||
printf("SCU722 初始化失败!\n");
|
||||
}
|
||||
|
||||
// ...
|
||||
}
|
||||
|
||||
//-----------------------------------------
|
||||
*/
|
||||
@ -148,10 +148,10 @@ void xtell_app_main()
|
||||
create_process(&close_BL_number, "close_BL",NULL, close_BL, 3000);
|
||||
|
||||
|
||||
soft_iic_init(0);
|
||||
extern u8 LIS2DH12_Config(void);
|
||||
LIS2DH12_Config();
|
||||
|
||||
|
||||
u8 mac_data[6];
|
||||
extern void rcsp_adv_fill_mac_addr(u8 *mac_addr_buf);
|
||||
rcsp_adv_fill_mac_addr(mac_data); //读取MAC地址
|
||||
xlog("xtell BT mac data:%x:%x:%x:%x:%x:%x",mac_data[0],mac_data[1],mac_data[2],mac_data[3],mac_data[4],mac_data[5]);
|
||||
|
||||
|
||||
@ -1,259 +0,0 @@
|
||||
#include "system/includes.h"
|
||||
/*#include "btcontroller_config.h"*/
|
||||
#include "btstack/btstack_task.h"
|
||||
#include "app_config.h"
|
||||
#include "app_action.h"
|
||||
#include "asm/pwm_led.h"
|
||||
#include "tone_player.h"
|
||||
#include "gpio.h"
|
||||
#include "app_main.h"
|
||||
#include "asm/charge.h"
|
||||
#include "update.h"
|
||||
#include "app_power_manage.h"
|
||||
#include "app_charge.h"
|
||||
#include "bt_profile_cfg.h"
|
||||
#include "dev_manager/dev_manager.h"
|
||||
#include "update_loader_download.h"
|
||||
|
||||
|
||||
|
||||
|
||||
#define LOG_TAG_CONST APP
|
||||
#define LOG_TAG "[APP]"
|
||||
#define LOG_ERROR_ENABLE
|
||||
#define LOG_DEBUG_ENABLE
|
||||
#define LOG_INFO_ENABLE
|
||||
/* #define LOG_DUMP_ENABLE */
|
||||
#define LOG_CLI_ENABLE
|
||||
#include "debug.h"
|
||||
|
||||
#ifdef CONFIG_BOARD_AISPEECH_VAD_ASR
|
||||
u8 user_at_cmd_send_support = 1;
|
||||
#endif
|
||||
|
||||
/*任务列表 */
|
||||
const struct task_info task_info_table[] = {
|
||||
{"app_core", 1, 0, 768, 256 },
|
||||
{"sys_event", 7, 0, 256, 0 },
|
||||
{"systimer", 7, 0, 128, 0 },
|
||||
{"btctrler", 4, 0, 512, 384 },
|
||||
{"btencry", 1, 0, 512, 128 },
|
||||
{"tws", 5, 0, 512, 128 },
|
||||
#if (BT_FOR_APP_EN)
|
||||
{"btstack", 3, 0, 1024, 256 },
|
||||
#else
|
||||
{"btstack", 3, 0, 768, 256 },
|
||||
#endif
|
||||
{"audio_dec", 5, 0, 800, 128 },
|
||||
{"aud_effect", 5, 1, 800, 128 },
|
||||
/*
|
||||
*为了防止dac buf太大,通话一开始一直解码,
|
||||
*导致编码输入数据需要很大的缓存,这里提高编码的优先级
|
||||
*/
|
||||
{"audio_enc", 6, 0, 768, 128 },
|
||||
{"aec", 2, 1, 768, 128 },
|
||||
#if TCFG_AUDIO_HEARING_AID_ENABLE
|
||||
{"HearingAid", 6, 0, 768, 128 },
|
||||
#endif/*TCFG_AUDIO_HEARING_AID_ENABLE*/
|
||||
#ifdef CONFIG_BOARD_AISPEECH_NR
|
||||
{"aispeech_enc", 2, 1, 512, 128 },
|
||||
#endif /*CONFIG_BOARD_AISPEECH_NR*/
|
||||
#ifdef CONFIG_BOARD_AISPEECH_VAD_ASR
|
||||
{"asr", 1, 0, 768, 128 },
|
||||
{"audio_asr_export_task", 1, 0, 512, 128 },
|
||||
#endif/*CONFIG_BOARD_AISPEECH_VAD_ASR*/
|
||||
#ifndef CONFIG_256K_FLASH
|
||||
{"aec_dbg", 3, 0, 128, 128 },
|
||||
|
||||
#if AUDIO_ENC_MPT_SELF_ENABLE
|
||||
{"enc_mpt_self", 3, 0, 512, 128 },
|
||||
#endif/*AUDIO_ENC_MPT_SELF_ENABLE*/
|
||||
{"update", 1, 0, 256, 0 },
|
||||
{"tws_ota", 2, 0, 256, 0 },
|
||||
{"tws_ota_msg", 2, 0, 256, 128 },
|
||||
{"dw_update", 2, 0, 256, 128 },
|
||||
{"rcsp_task", 2, 0, 640, 128 },
|
||||
{"aud_capture", 4, 0, 512, 256 },
|
||||
{"data_export", 5, 0, 512, 256 },
|
||||
{"anc", 3, 1, 512, 128 },
|
||||
#endif
|
||||
|
||||
#if TCFG_GX8002_NPU_ENABLE
|
||||
{"gx8002", 2, 0, 256, 64 },
|
||||
#endif /* #if TCFG_GX8002_NPU_ENABLE */
|
||||
#if TCFG_GX8002_ENC_ENABLE
|
||||
{"gx8002_enc", 2, 0, 128, 64 },
|
||||
#endif /* #if TCFG_GX8002_ENC_ENABLE */
|
||||
|
||||
|
||||
#if TCFG_KWS_VOICE_RECOGNITION_ENABLE
|
||||
{"kws", 2, 0, 256, 64 },
|
||||
#endif /* #if TCFG_KWS_VOICE_RECOGNITION_ENABLE */
|
||||
{"usb_msd", 1, 0, 512, 128 },
|
||||
#if !TCFG_USB_MIC_CVP_ENABLE
|
||||
{"usbmic_write", 2, 0, 256, 128 },
|
||||
#endif
|
||||
#if AI_APP_PROTOCOL
|
||||
{"app_proto", 2, 0, 768, 64 },
|
||||
#endif
|
||||
#if (TCFG_SPI_LCD_ENABLE||TCFG_SIMPLE_LCD_ENABLE)
|
||||
{"ui", 2, 0, 768, 256 },
|
||||
#else
|
||||
{"ui", 3, 0, 384 - 64, 128 },
|
||||
#endif
|
||||
#if (TCFG_DEV_MANAGER_ENABLE)
|
||||
{"dev_mg", 3, 0, 512, 512 },
|
||||
#endif
|
||||
{"audio_vad", 1, 1, 512, 128 },
|
||||
#if TCFG_KEY_TONE_EN
|
||||
{"key_tone", 5, 0, 256, 32 },
|
||||
#endif
|
||||
#if (TCFG_WIRELESS_MIC_ENABLE)
|
||||
{"wl_mic_enc", 2, 0, 768, 128 },
|
||||
#endif
|
||||
#if (TUYA_DEMO_EN)
|
||||
{"user_deal", 7, 0, 512, 512 },//定义线程 tuya任务调度
|
||||
{"dw_update", 2, 0, 256, 128 },
|
||||
#endif
|
||||
#if TCFG_AUDIO_SPATIAL_EFFECT_ENABLE
|
||||
{"imu_trim", 1, 0, 256, 128 },
|
||||
#endif /*TCFG_AUDIO_SPATIAL_EFFECT_ENABLE*/
|
||||
#if TCFG_AUDIO_ANC_ACOUSTIC_DETECTOR_EN
|
||||
{"speak_to_chat", 2, 0, 256, 128 },
|
||||
{"icsd_adt", 2, 0, 512, 128 },
|
||||
{"icsd_src", 2, 1, 512, 128 },
|
||||
#endif /*TCFG_AUDIO_ANC_ACOUSTIC_DETECTOR_EN*/
|
||||
{"pmu_task", 6, 0, 256, 128 },
|
||||
{"WindDetect", 2, 0, 256, 128 },
|
||||
{0, 0},
|
||||
};
|
||||
|
||||
|
||||
APP_VAR app_var;
|
||||
|
||||
/*
|
||||
* 2ms timer中断回调函数
|
||||
*/
|
||||
void timer_2ms_handler()
|
||||
{
|
||||
|
||||
}
|
||||
|
||||
void app_var_init(void)
|
||||
{
|
||||
memset((u8 *)&bt_user_priv_var, 0, sizeof(BT_USER_PRIV_VAR));
|
||||
app_var.play_poweron_tone = 1;
|
||||
|
||||
}
|
||||
|
||||
void app_earphone_play_voice_file(const char *name);
|
||||
|
||||
void clr_wdt(void);
|
||||
|
||||
void check_power_on_key(void)
|
||||
{
|
||||
u32 delay_10ms_cnt = 0;
|
||||
|
||||
#if 0 //PC_MODE_DETECTION
|
||||
gpio_set_pull_up(IO_PORTP_00, 0);
|
||||
gpio_set_pull_down(IO_PORTP_00, 1);
|
||||
gpio_set_direction(IO_PORTP_00, 1);
|
||||
gpio_set_die(IO_PORTP_00, 1);
|
||||
#endif
|
||||
|
||||
while (1) {
|
||||
clr_wdt();
|
||||
os_time_dly(1);
|
||||
|
||||
extern u8 get_power_on_status(void);
|
||||
if (get_power_on_status()) {
|
||||
log_info("+");
|
||||
delay_10ms_cnt++;
|
||||
if (delay_10ms_cnt > 70) {
|
||||
/* extern void set_key_poweron_flag(u8 flag); */
|
||||
/* set_key_poweron_flag(1); */
|
||||
return;
|
||||
}
|
||||
} else {
|
||||
log_info("-");
|
||||
delay_10ms_cnt = 0;
|
||||
log_info("enter softpoweroff\n");
|
||||
power_set_soft_poweroff();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
extern int cpu_reset_by_soft();
|
||||
extern int audio_dec_init();
|
||||
extern int audio_enc_init();
|
||||
|
||||
|
||||
|
||||
__attribute__((weak))
|
||||
u8 get_charge_online_flag(void)
|
||||
{
|
||||
return 0;
|
||||
}
|
||||
|
||||
/*充电拔出,CPU软件复位, 不检测按键,直接开机*/
|
||||
static void app_poweron_check(int update)
|
||||
{
|
||||
#if (CONFIG_BT_MODE == BT_NORMAL)
|
||||
if (!update && cpu_reset_by_soft()) {
|
||||
app_var.play_poweron_tone = 0;
|
||||
return;
|
||||
}
|
||||
|
||||
#if TCFG_CHARGE_OFF_POWERON_NE
|
||||
if (is_ldo5v_wakeup()) {
|
||||
app_var.play_poweron_tone = 0;
|
||||
return;
|
||||
}
|
||||
#endif
|
||||
//#ifdef CONFIG_RELEASE_ENABLE
|
||||
#if TCFG_POWER_ON_NEED_KEY
|
||||
check_power_on_key();
|
||||
#endif
|
||||
//#endif
|
||||
|
||||
#endif
|
||||
}
|
||||
|
||||
extern u32 timer_get_ms(void);
|
||||
void app_main()
|
||||
{
|
||||
int update = 0;
|
||||
u32 addr = 0, size = 0;
|
||||
struct intent it;
|
||||
|
||||
|
||||
if (!UPDATE_SUPPORT_DEV_IS_NULL()) {
|
||||
update = update_result_deal();
|
||||
}
|
||||
|
||||
app_var_init();
|
||||
|
||||
// if (get_charge_online_flag()) {
|
||||
#if(TCFG_SYS_LVD_EN == 1)
|
||||
vbat_check_init();
|
||||
#endif
|
||||
// init_intent(&it);
|
||||
// it.name = "idle";
|
||||
// it.action = ACTION_IDLE_MAIN;
|
||||
// start_app(&it);
|
||||
// } else {
|
||||
check_power_on_voltage();
|
||||
app_poweron_check(update);
|
||||
init_intent(&it);
|
||||
it.name = "handler";
|
||||
it.action = ACTION_EARPHONE_MAIN;
|
||||
start_app(&it);
|
||||
// }
|
||||
|
||||
|
||||
log_info("app_main\n");
|
||||
app_var.start_time = timer_get_ms();
|
||||
|
||||
}
|
||||
|
||||
@ -1,66 +0,0 @@
|
||||
#include "app_config.h"
|
||||
|
||||
SECTIONS
|
||||
{
|
||||
.text : ALIGN(4)
|
||||
{
|
||||
gsensor_dev_begin = .;
|
||||
KEEP(*(.gsensor_dev))
|
||||
gsensor_dev_end = .;
|
||||
|
||||
fm_dev_begin = .;
|
||||
KEEP(*(.fm_dev))
|
||||
fm_dev_end = .;
|
||||
|
||||
fm_emitter_dev_begin = .;
|
||||
KEEP(*(.fm_emitter_dev))
|
||||
fm_emitter_dev_end = .;
|
||||
|
||||
storage_device_begin = .;
|
||||
KEEP(*(.storage_device))
|
||||
storage_device_end = .;
|
||||
|
||||
imusensor_dev_begin = .;
|
||||
KEEP(*(.imusensor_dev))
|
||||
imusensor_dev_end = .;
|
||||
|
||||
#if TCFG_APP_PC_EN
|
||||
aac_dec_code_begin = .;
|
||||
*(.bt_aac_dec_code)
|
||||
*(.bt_aac_dec_sparse_code)
|
||||
aac_dec_code_end = .;
|
||||
aac_dec_code_size = aac_dec_code_end - aac_dec_code_begin ;
|
||||
|
||||
. = ALIGN(4);
|
||||
bt_aac_dec_const_begin = .;
|
||||
*(.bt_aac_dec_const)
|
||||
*(.bt_aac_dec_sparse_const)
|
||||
bt_aac_dec_const_end = .;
|
||||
bt_aac_dec_const_size = bt_aac_dec_const_end - bt_aac_dec_const_begin ;
|
||||
|
||||
*(.bt_aac_dec_data)
|
||||
*(.bt_aac_dec_bss)
|
||||
|
||||
. = ALIGN(4);
|
||||
*(.aac_mem)
|
||||
*(.aac_ctrl_mem)
|
||||
/* . += 0x5fe8 ; */
|
||||
/* . += 0xef88 ; */
|
||||
#endif
|
||||
|
||||
. = ALIGN(32);
|
||||
}
|
||||
|
||||
.data ALIGN(32):
|
||||
{
|
||||
} > ram0
|
||||
|
||||
.bss ALIGN(32):
|
||||
{
|
||||
} > ram0
|
||||
|
||||
.data_code ALIGN(32):
|
||||
{
|
||||
} > ram0
|
||||
|
||||
}
|
||||
@ -1,164 +0,0 @@
|
||||
|
||||
OVERLAY : AT(0x200000) SUBALIGN(4)
|
||||
{
|
||||
.overlay_aec
|
||||
{
|
||||
aec_code_begin = . ;
|
||||
*(.text._*)
|
||||
*(.data._*)
|
||||
*(.aec_code)
|
||||
*(.aec_const)
|
||||
*(.res_code)
|
||||
*(.res_const)
|
||||
*(.ns_code)
|
||||
*(.ns_const)
|
||||
*(.bark_const)
|
||||
*(.fft_code)
|
||||
*(.fft_const)
|
||||
*(.agc_code)
|
||||
*(.dms_code)
|
||||
*(.dms_const)
|
||||
*(.dms_sparse_code)
|
||||
aec_code_end = . ;
|
||||
aec_code_size = aec_code_end - aec_code_begin ;
|
||||
|
||||
*(.msbc_enc)
|
||||
*(.cvsd_codec)
|
||||
*(.aec_bss)
|
||||
*(.aec_data)
|
||||
*(.res_data)
|
||||
*(.ns_data)
|
||||
*(.dns_common_data)
|
||||
*(.dns_param_data_single)
|
||||
*(.dns_param_data_dual)
|
||||
*(.jlsp_nlp_code)
|
||||
*(.jlsp_nlp_const)
|
||||
*(.jlsp_aec_code)
|
||||
*(.jlsp_aec_const)
|
||||
*(.jlsp_prep_code)
|
||||
*(.jlsp_prep_const)
|
||||
*(.jlsp_enc_code)
|
||||
*(.jlsp_enc_const)
|
||||
*(.jlsp_wn_code)
|
||||
*(.jlsp_wn_const)
|
||||
*(.jlsp_tri_code)
|
||||
*(.jlsp_tri_const)
|
||||
*(.jlsp_agc_code)
|
||||
*(.jlsp_agc_const)
|
||||
*(.res_bss)
|
||||
*(.ns_bss)
|
||||
*(.aec_mem)
|
||||
}
|
||||
.overlay_aac
|
||||
{
|
||||
#if !TCFG_APP_PC_EN
|
||||
aac_dec_code_begin = .;
|
||||
*(.bt_aac_dec_code)
|
||||
*(.bt_aac_dec_sparse_code)
|
||||
aac_dec_code_end = .;
|
||||
aac_dec_code_size = aac_dec_code_end - aac_dec_code_begin ;
|
||||
|
||||
. = ALIGN(4);
|
||||
bt_aac_dec_const_begin = .;
|
||||
*(.bt_aac_dec_const)
|
||||
*(.bt_aac_dec_sparse_const)
|
||||
bt_aac_dec_const_end = .;
|
||||
bt_aac_dec_const_size = bt_aac_dec_const_end - bt_aac_dec_const_begin ;
|
||||
|
||||
*(.bt_aac_dec_data)
|
||||
*(.bt_aac_dec_bss)
|
||||
|
||||
. = ALIGN(4);
|
||||
*(.aac_mem)
|
||||
*(.aac_ctrl_mem)
|
||||
/* . += 0x5fe8 ; */
|
||||
/* . += 0xef88 ; */
|
||||
#endif
|
||||
}
|
||||
/*
|
||||
.overlay_lc3
|
||||
{
|
||||
lc3_dec_code_begin = .;
|
||||
*(.lc3_dec_code)
|
||||
lc3_dec_code_end = .;
|
||||
lc3_dec_code_size = lc3_dec_code_end - lc3_dec_code_begin;
|
||||
|
||||
. = ALIGN(4);
|
||||
lc3_dec_const_begin = .;
|
||||
*(.lc3_dec_const)
|
||||
lc3_dec_const_end = .;
|
||||
lc3_dec_const_size = lc3_dec_const_end - lc3_dec_const_begin;
|
||||
*(.lc3_dec_data)
|
||||
*(.lc3_dec_bss)
|
||||
}
|
||||
*/
|
||||
|
||||
.overlay_mp3
|
||||
{
|
||||
*(.mp3_mem)
|
||||
*(.mp3_ctrl_mem)
|
||||
*(.mp3pick_mem)
|
||||
*(.mp3pick_ctrl_mem)
|
||||
*(.dec2tws_mem)
|
||||
}
|
||||
.overlay_wma
|
||||
{
|
||||
*(.wma_mem)
|
||||
*(.wma_ctrl_mem)
|
||||
*(.wmapick_mem)
|
||||
*(.wmapick_ctrl_mem)
|
||||
}
|
||||
.overlay_wav
|
||||
{
|
||||
*(.wav_mem)
|
||||
*(.wav_ctrl_mem)
|
||||
}
|
||||
.overlay_ape
|
||||
{
|
||||
*(.ape_mem)
|
||||
*(.ape_ctrl_mem)
|
||||
}
|
||||
.overlay_flac
|
||||
{
|
||||
*(.flac_mem)
|
||||
*(.flac_ctrl_mem)
|
||||
}
|
||||
.overlay_m4a
|
||||
{
|
||||
*(.m4a_mem)
|
||||
*(.m4a_ctrl_mem)
|
||||
}
|
||||
.overlay_amr
|
||||
{
|
||||
*(.amr_mem)
|
||||
*(.amr_ctrl_mem)
|
||||
}
|
||||
.overlay_dts
|
||||
{
|
||||
*(.dts_mem)
|
||||
*(.dts_ctrl_mem)
|
||||
}
|
||||
.overlay_fm
|
||||
{
|
||||
*(.fm_mem)
|
||||
}
|
||||
.overlay_pc
|
||||
{
|
||||
*(.usb_audio_play_dma)
|
||||
*(.usb_audio_rec_dma)
|
||||
*(.uac_rx)
|
||||
*(.mass_storage)
|
||||
|
||||
*(.usb_ep0)
|
||||
*(.usb_msd_dma)
|
||||
*(.usb_hid_dma)
|
||||
*(.usb_iso_dma)
|
||||
*(.usb_cdc_dma)
|
||||
*(.uac_var)
|
||||
*(.usb_config_var)
|
||||
*(.cdc_var)
|
||||
}
|
||||
|
||||
} > ram0
|
||||
|
||||
|
||||
@ -1,27 +0,0 @@
|
||||
#ifndef BOARD_CONFIG_H
|
||||
#define BOARD_CONFIG_H
|
||||
|
||||
|
||||
/*
|
||||
* 板级配置选择
|
||||
*/
|
||||
#define CONFIG_BOARD_JL701N_DEMO //编译正常 2025-4-29
|
||||
// #define CONFIG_BOARD_JL701N_BTEMITTER
|
||||
// #define CONFIG_BOARD_JL701N_ANC
|
||||
// #define CONFIG_BOARD_JL7016G_HYBRID
|
||||
// #define CONFIG_BOARD_JL7018F_DEMO //编译不过 2025-4-29
|
||||
|
||||
#include "media/audio_def.h"
|
||||
#include "board_jl701n_demo_cfg.h"
|
||||
#include "board_jl701n_btemitter_cfg.h"
|
||||
#include "board_jl701n_anc_cfg.h"
|
||||
#include "board_jl7016g_hybrid_cfg.h"
|
||||
#include "board_jl7018f_demo_cfg.h"
|
||||
|
||||
#define DUT_AUDIO_DAC_LDO_VOLT DACVDD_LDO_1_25V
|
||||
|
||||
#ifdef CONFIG_NEW_CFG_TOOL_ENABLE
|
||||
#define CONFIG_ENTRY_ADDRESS 0x6000100
|
||||
#endif
|
||||
|
||||
#endif
|
||||
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
@ -1,123 +0,0 @@
|
||||
#ifndef CONFIG_BOARD_JL7016G_HYBRID_POST_BUILD_CFG_H
|
||||
#define CONFIG_BOARD_JL7016G_HYBRID_POST_BUILD_CFG_H
|
||||
|
||||
/* 改文件只添加和isd_config.ini相关的配置,用以生成isd_config.ini */
|
||||
/* 其他不相关的配置请勿添加在改文件 */
|
||||
|
||||
#ifdef CONFIG_BOARD_JL7016G_HYBRID
|
||||
|
||||
/* Following Macros Affect Periods Of Both Code Compiling And Post-build */
|
||||
|
||||
#define CONFIG_DOUBLE_BANK_ENABLE 0 //单双备份选择(若打开了改宏,FLASH结构变为双备份结构,适用于接入第三方协议的OTA, PS: JL-OTA同样支持双备份升级, 需要根据实际FLASH大小同时配置CONFIG_FLASH_SIZE)
|
||||
#define CONFIG_APP_OTA_ENABLE 0 //是否支持RCSP升级(JL-OTA)
|
||||
|
||||
#define CONFIG_UPDATE_JUMP_TO_MASK 0 //配置升级到loader的方式0为直接reset,1为跳转(适用于芯片电源由IO口KEEP住的方案,需要注意检查跳转前是否将使用DMA的硬件模块全部关闭)
|
||||
|
||||
#define CONFIG_IO_KEY_EN 0 //配置是否使用IO按键,配合RESET1
|
||||
#define CONFIG_UPDATE_WITH_MD5_CHECK_EN 0 //配置升级是否支持MD5校验
|
||||
|
||||
#define CONFIG_ANC_ENABLE 1 //配置是否支持ANC
|
||||
|
||||
//flash size vaule definition
|
||||
#define FLASH_SIZE_256K 0x40000
|
||||
#define FLASH_SIZE_512K 0x80000
|
||||
#define FLASH_SIZE_1M 0x100000
|
||||
#define FLASH_SIZE_2M 0x200000
|
||||
#define FLASH_SIZE_4M 0x400000
|
||||
|
||||
#define CONFIG_FLASH_SIZE FLASH_SIZE_1M //配置FLASH大小
|
||||
|
||||
|
||||
/* Above Macros Affect Periods Of Both Code Compiling And Post-build */
|
||||
|
||||
/* Following Macros Only For Post Bulid Configuaration */
|
||||
|
||||
#define CONFIG_DB_UPDATE_DATA_GENERATE_EN 0 //是否生成db_data.bin(用于第三方协议接入使用)
|
||||
#define CONFIG_ONLY_GRENERATE_ALIGN_4K_CODE 0 //ufw只生成1份4K对齐的代码
|
||||
|
||||
//config for supported chip version
|
||||
#ifdef CONFIG_BR30_C_VERSION
|
||||
#define CONFIG_SUPPORTED_CHIP_VERSION C
|
||||
#else
|
||||
#define CONFIG_SUPPORTED_CHIP_VERSION B,D,E,M,N,O,P
|
||||
#endif
|
||||
|
||||
//DON'T MODIFY THIS CONFIG EXCEPT SDK PUBLISHER
|
||||
#define CONFIG_CHIP_NAME AC701N //除了SDK发布者,请不要修改
|
||||
//it can be modified before first programming,but keep the same as the original version
|
||||
#define CONFIG_PID AC701N //烧写或强制升级之前可以修改,之后升级要保持一致
|
||||
//it can be modified before first programming,but keep the same as the original version
|
||||
#define CONFIG_VID 0.01 //烧写或强制升级之前可以修改,之后升级要保持一致
|
||||
|
||||
//Project with bluetooth,it must use OSC as PLL_SOURCE;
|
||||
#define CONFIG_PLL_SOURCE_USING_LRC 0 //PLL时钟源选择 1:LRC 2:OSC
|
||||
|
||||
//config alignment size unit
|
||||
#ifdef CONFIG_256K_FLASH
|
||||
#define ALIGN_UNIT_256B 1 //FLASH对齐方式选择,如果是256K的FLASH,选择256BYTE对齐方式
|
||||
#else
|
||||
#define ALIGN_UNIT_256B 0
|
||||
#endif
|
||||
|
||||
//partial platform check this config to select the uart IO for wired update
|
||||
#define CONFIG_UART_UPDATE_PIN PP00
|
||||
|
||||
//isd_download loader/uboot/update_loader debug io config
|
||||
//#define CONFIG_UBOOT_DEBUG_PIN PA05
|
||||
//#define CONFIG_UBOOT_DEBUG_BAUD_RATE 1000000
|
||||
|
||||
//config long-press reset io pin,time,trigger level
|
||||
#define CONFIG_RESET_PIN LDO //io pin
|
||||
#define CONFIG_RESET_TIME 04 //unit:second
|
||||
#define CONFIG_RESET_LEVEL 1 //tigger level(0/1)
|
||||
|
||||
#if CONFIG_IO_KEY_EN
|
||||
#define CONFIG_SUPPORT_RESET1
|
||||
#define CONFIG_RESET1_PIN PB01 //io pin
|
||||
#define CONFIG_RESET1_TIME 08 //unit:second
|
||||
#define CONFIG_RESET1_LEVEL 0 //tigger level(0/1)
|
||||
#endif
|
||||
|
||||
//reserved three custom cfg item for the future definition
|
||||
//#define CONFIG_CUSTOM_CFG1_TYPE POWER_PIN
|
||||
//#define CONFIG_CUSTOM_CFG1_VALUE PC01_1
|
||||
|
||||
//#define CONFIG_CUSTOM_CFG2_TYPE
|
||||
//#define CONFIG_CUSTOM_CFG2_VALUE
|
||||
|
||||
//#define CONFIG_CUSTOM_CFG3_TYPE
|
||||
//#define CONFIG_CUSTOM_CFG3_VALUE
|
||||
|
||||
|
||||
//#define CONFIG_VDDIO_LVD_LEVEL 4 ////VDDIO_LVD挡位,0: 1.9V 1: 2.0V 2: 2.1V 3: 2.2V 4: 2.3V 5: 2.4V 6: 2.5V 7: 2.6V
|
||||
|
||||
//with single-bank mode,actual vm size should larger this VM_LEAST_SIZE,and dual bank mode,actual vm size equals this;
|
||||
#define CONFIG_VM_LEAST_SIZE 8K
|
||||
//config whether erased this area when do a update,1-No Operation,0-Erase
|
||||
#define CONFIG_VM_OPT 1
|
||||
|
||||
//config whether erased this area when do a update,1-No Operation,0-Erase
|
||||
#define CONFIG_BTIF_OPT 1
|
||||
|
||||
//reserved two custom cfg area for the future definition
|
||||
//#define CONFIG_RESERVED_AREA1 EXIF1
|
||||
#ifdef CONFIG_RESERVED_AREA1
|
||||
#define CONFIG_RESERVED_AREA1_ADDR AUTO
|
||||
#define CONFIG_RESERVED_AREA1_LEN 0x1000
|
||||
#define CONFIG_RESERVED_AREA1_OPT 1
|
||||
//#define CONFIG_RESERVED_AREA1_FILE anc_gains.bin
|
||||
#endif
|
||||
|
||||
//#define CONFIG_RESERVED_AREA2 EXIF2
|
||||
#ifdef CONFIG_RESERVED_AREA2
|
||||
#define CONFIG_RESERVED_AREA2_ADDR AUTO
|
||||
#define CONFIG_RESERVED_AREA2_LEN 0x1000
|
||||
#define CONFIG_RESERVED_AREA2_OPT 1
|
||||
//#define CONFIG_RESERVED_AREA2_FILE anc_gains.bin
|
||||
#endif
|
||||
|
||||
/* Above Macros Only For Post Bulid Configuaration */
|
||||
#endif /* #ifdef CONFIG_BOARD_JL7016G_HYBRID */
|
||||
|
||||
#endif /* #ifndef CONFIG_BOARD_JL701N_ANC_POST_BUILD_CFG_H */
|
||||
|
||||
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
@ -1,123 +0,0 @@
|
||||
#ifndef CONFIG_BOARD_JL7018F_DEMO_POST_BUILD_CFG_H
|
||||
#define CONFIG_BOARD_JL7018F_DEMO_POST_BUILD_CFG_H
|
||||
|
||||
/* 改文件只添加和isd_config.ini相关的配置,用以生成isd_config.ini */
|
||||
/* 其他不相关的配置请勿添加在改文件 */
|
||||
|
||||
#ifdef CONFIG_BOARD_JL7018F_DEMO
|
||||
|
||||
/* Following Macros Affect Periods Of Both Code Compiling And Post-build */
|
||||
|
||||
#define CONFIG_DOUBLE_BANK_ENABLE 0 //单双备份选择(若打开了改宏,FLASH结构变为双备份结构,适用于接入第三方协议的OTA, PS: JL-OTA同样支持双备份升级, 需要根据实际FLASH大小同时配置CONFIG_FLASH_SIZE)
|
||||
#define CONFIG_APP_OTA_ENABLE 0 //是否支持RCSP升级(JL-OTA)
|
||||
|
||||
#define CONFIG_UPDATE_JUMP_TO_MASK 0 //配置升级到loader的方式0为直接reset,1为跳转(适用于芯片电源由IO口KEEP住的方案,需要注意检查跳转前是否将使用DMA的硬件模块全部关闭)
|
||||
|
||||
#define CONFIG_IO_KEY_EN 0 //配置是否使用IO按键,配合RESET1
|
||||
#define CONFIG_UPDATE_WITH_MD5_CHECK_EN 0 //配置升级是否支持MD5校验
|
||||
|
||||
#define CONFIG_ANC_ENABLE 1 //配置是否支持ANC
|
||||
|
||||
//flash size vaule definition
|
||||
#define FLASH_SIZE_256K 0x40000
|
||||
#define FLASH_SIZE_512K 0x80000
|
||||
#define FLASH_SIZE_1M 0x100000
|
||||
#define FLASH_SIZE_2M 0x200000
|
||||
#define FLASH_SIZE_4M 0x400000
|
||||
|
||||
#define CONFIG_FLASH_SIZE FLASH_SIZE_1M //配置FLASH大小
|
||||
|
||||
|
||||
/* Above Macros Affect Periods Of Both Code Compiling And Post-build */
|
||||
|
||||
/* Following Macros Only For Post Bulid Configuaration */
|
||||
|
||||
#define CONFIG_DB_UPDATE_DATA_GENERATE_EN 0 //是否生成db_data.bin(用于第三方协议接入使用)
|
||||
#define CONFIG_ONLY_GRENERATE_ALIGN_4K_CODE 0 //ufw只生成1份4K对齐的代码
|
||||
|
||||
//config for supported chip version
|
||||
#ifdef CONFIG_BR30_C_VERSION
|
||||
#define CONFIG_SUPPORTED_CHIP_VERSION C
|
||||
#else
|
||||
#define CONFIG_SUPPORTED_CHIP_VERSION B,D,E,M,N,O,P
|
||||
#endif
|
||||
|
||||
//DON'T MODIFY THIS CONFIG EXCEPT SDK PUBLISHER
|
||||
#define CONFIG_CHIP_NAME AC701N //除了SDK发布者,请不要修改
|
||||
//it can be modified before first programming,but keep the same as the original version
|
||||
#define CONFIG_PID AC701N //烧写或强制升级之前可以修改,之后升级要保持一致
|
||||
//it can be modified before first programming,but keep the same as the original version
|
||||
#define CONFIG_VID 0.01 //烧写或强制升级之前可以修改,之后升级要保持一致
|
||||
|
||||
//Project with bluetooth,it must use OSC as PLL_SOURCE;
|
||||
#define CONFIG_PLL_SOURCE_USING_LRC 0 //PLL时钟源选择 1:LRC 2:OSC
|
||||
|
||||
//config alignment size unit
|
||||
#ifdef CONFIG_256K_FLASH
|
||||
#define ALIGN_UNIT_256B 1 //FLASH对齐方式选择,如果是256K的FLASH,选择256BYTE对齐方式
|
||||
#else
|
||||
#define ALIGN_UNIT_256B 0
|
||||
#endif
|
||||
|
||||
//partial platform check this config to select the uart IO for wired update
|
||||
#define CONFIG_UART_UPDATE_PIN PP00
|
||||
|
||||
//isd_download loader/uboot/update_loader debug io config
|
||||
//#define CONFIG_UBOOT_DEBUG_PIN PA05
|
||||
//#define CONFIG_UBOOT_DEBUG_BAUD_RATE 1000000
|
||||
|
||||
//config long-press reset io pin,time,trigger level
|
||||
#define CONFIG_RESET_PIN LDO //io pin
|
||||
#define CONFIG_RESET_TIME 04 //unit:second
|
||||
#define CONFIG_RESET_LEVEL 1 //tigger level(0/1)
|
||||
|
||||
#if CONFIG_IO_KEY_EN
|
||||
#define CONFIG_SUPPORT_RESET1
|
||||
#define CONFIG_RESET1_PIN PB01 //io pin
|
||||
#define CONFIG_RESET1_TIME 08 //unit:second
|
||||
#define CONFIG_RESET1_LEVEL 0 //tigger level(0/1)
|
||||
#endif
|
||||
|
||||
//reserved three custom cfg item for the future definition
|
||||
//#define CONFIG_CUSTOM_CFG1_TYPE POWER_PIN
|
||||
//#define CONFIG_CUSTOM_CFG1_VALUE PC01_1
|
||||
|
||||
//#define CONFIG_CUSTOM_CFG2_TYPE
|
||||
//#define CONFIG_CUSTOM_CFG2_VALUE
|
||||
|
||||
//#define CONFIG_CUSTOM_CFG3_TYPE
|
||||
//#define CONFIG_CUSTOM_CFG3_VALUE
|
||||
|
||||
|
||||
//#define CONFIG_VDDIO_LVD_LEVEL 4 ////VDDIO_LVD挡位,0: 1.9V 1: 2.0V 2: 2.1V 3: 2.2V 4: 2.3V 5: 2.4V 6: 2.5V 7: 2.6V
|
||||
|
||||
//with single-bank mode,actual vm size should larger this VM_LEAST_SIZE,and dual bank mode,actual vm size equals this;
|
||||
#define CONFIG_VM_LEAST_SIZE 8K
|
||||
//config whether erased this area when do a update,1-No Operation,0-Erase
|
||||
#define CONFIG_VM_OPT 1
|
||||
|
||||
//config whether erased this area when do a update,1-No Operation,0-Erase
|
||||
#define CONFIG_BTIF_OPT 1
|
||||
|
||||
//reserved two custom cfg area for the future definition
|
||||
//#define CONFIG_RESERVED_AREA1 EXIF1
|
||||
#ifdef CONFIG_RESERVED_AREA1
|
||||
#define CONFIG_RESERVED_AREA1_ADDR AUTO
|
||||
#define CONFIG_RESERVED_AREA1_LEN 0x1000
|
||||
#define CONFIG_RESERVED_AREA1_OPT 1
|
||||
//#define CONFIG_RESERVED_AREA1_FILE anc_gains.bin
|
||||
#endif
|
||||
|
||||
//#define CONFIG_RESERVED_AREA2 EXIF2
|
||||
#ifdef CONFIG_RESERVED_AREA2
|
||||
#define CONFIG_RESERVED_AREA2_ADDR AUTO
|
||||
#define CONFIG_RESERVED_AREA2_LEN 0x1000
|
||||
#define CONFIG_RESERVED_AREA2_OPT 1
|
||||
//#define CONFIG_RESERVED_AREA2_FILE anc_gains.bin
|
||||
#endif
|
||||
|
||||
/* Above Macros Only For Post Bulid Configuaration */
|
||||
#endif /* #ifdef CONFIG_BOARD_JL7018F_DEMO */
|
||||
|
||||
#endif /* #ifndef CONFIG_BOARD_JL7018F_DEMO_POST_BUILD_CFG_H */
|
||||
|
||||
@ -1,992 +0,0 @@
|
||||
#include "app_config.h"
|
||||
|
||||
#ifdef CONFIG_BOARD_JL701N_ANC
|
||||
|
||||
#include "system/includes.h"
|
||||
#include "media/includes.h"
|
||||
#include "asm/sdmmc.h"
|
||||
#include "asm/chargestore.h"
|
||||
#include "asm/umidigi_chargestore.h"
|
||||
#include "asm/charge.h"
|
||||
#include "asm/pwm_led.h"
|
||||
#include "tone_player.h"
|
||||
#include "audio_config.h"
|
||||
#include "gSensor/gSensor_manage.h"
|
||||
#include "key_event_deal.h"
|
||||
#include "asm/lp_touch_key_api.h"
|
||||
#include "user_cfg.h"
|
||||
#include "norflash_sfc.h"
|
||||
#include "asm/power/power_port.h"
|
||||
#include "app_umidigi_chargestore.h"
|
||||
#include "audio_link.h"
|
||||
#if TCFG_AUDIO_ANC_ENABLE
|
||||
#include "audio_anc.h"
|
||||
#endif/*TCFG_AUDIO_ANC_ENABLE*/
|
||||
|
||||
#define LOG_TAG_CONST BOARD
|
||||
#define LOG_TAG "[BOARD]"
|
||||
#define LOG_ERROR_ENABLE
|
||||
#define LOG_DEBUG_ENABLE
|
||||
#define LOG_INFO_ENABLE
|
||||
/* #define LOG_DUMP_ENABLE */
|
||||
#define LOG_CLI_ENABLE
|
||||
#include "debug.h"
|
||||
|
||||
void board_power_init(void);
|
||||
|
||||
/*各个状态下默认的闪灯方式和提示音设置,如果USER_CFG中设置了USE_CONFIG_STATUS_SETTING为1,则会从配置文件读取对应的配置来填充改结构体*/
|
||||
STATUS_CONFIG status_config = {
|
||||
//灯状态设置
|
||||
.led = {
|
||||
.charge_start = PWM_LED1_ON,
|
||||
.charge_full = PWM_LED0_ON,
|
||||
.power_on = PWM_LED0_ON,
|
||||
.power_off = PWM_LED1_FLASH_THREE,
|
||||
.lowpower = PWM_LED1_SLOW_FLASH,
|
||||
.max_vol = PWM_LED_NULL,
|
||||
.phone_in = PWM_LED_NULL,
|
||||
.phone_out = PWM_LED_NULL,
|
||||
.phone_activ = PWM_LED_NULL,
|
||||
.bt_init_ok = PWM_LED0_LED1_SLOW_FLASH,
|
||||
.bt_connect_ok = PWM_LED0_ONE_FLASH_5S,
|
||||
.bt_disconnect = PWM_LED0_LED1_FAST_FLASH,
|
||||
.tws_connect_ok = PWM_LED0_LED1_FAST_FLASH,
|
||||
.tws_disconnect = PWM_LED0_LED1_SLOW_FLASH,
|
||||
},
|
||||
//提示音设置
|
||||
.tone = {
|
||||
.charge_start = IDEX_TONE_NONE,
|
||||
.charge_full = IDEX_TONE_NONE,
|
||||
.power_on = IDEX_TONE_POWER_ON,
|
||||
.power_off = IDEX_TONE_POWER_OFF,
|
||||
.lowpower = IDEX_TONE_LOW_POWER,
|
||||
.max_vol = IDEX_TONE_MAX_VOL,
|
||||
.phone_in = IDEX_TONE_NONE,
|
||||
.phone_out = IDEX_TONE_NONE,
|
||||
.phone_activ = IDEX_TONE_NONE,
|
||||
.bt_init_ok = IDEX_TONE_BT_MODE,
|
||||
.bt_connect_ok = IDEX_TONE_BT_CONN,
|
||||
.bt_disconnect = IDEX_TONE_BT_DISCONN,
|
||||
.tws_connect_ok = IDEX_TONE_TWS_CONN,
|
||||
.tws_disconnect = IDEX_TONE_TWS_DISCONN,
|
||||
}
|
||||
};
|
||||
|
||||
#define __this (&status_config)
|
||||
|
||||
/************************** KEY MSG****************************/
|
||||
/*各个按键的消息设置,如果USER_CFG中设置了USE_CONFIG_KEY_SETTING为1,则会从配置文件读取对应的配置来填充改结构体*/
|
||||
#if CLIENT_BOARD == CUSTOM10_CFG
|
||||
u8 key_table[KEY_NUM_MAX][KEY_EVENT_MAX] = {
|
||||
// SHORT LONG HOLD UP DOUBLE TRIPLE
|
||||
{KEY_MUSIC_PP, KEY_NULL, KEY_NULL, KEY_NULL, KEY_ANC_SWITCH, KEY_NULL}, //KEY_0
|
||||
{KEY_MUSIC_NEXT, KEY_VOL_UP, KEY_VOL_UP, KEY_NULL, KEY_OPEN_SIRI, KEY_NULL}, //KEY_1
|
||||
{KEY_MUSIC_PREV, KEY_VOL_DOWN, KEY_VOL_DOWN, KEY_NULL, KEY_HID_CONTROL, KEY_NULL}, //KEY_2
|
||||
};
|
||||
#else
|
||||
u8 key_table[KEY_NUM_MAX][KEY_EVENT_MAX] = {
|
||||
// SHORT LONG HOLD UP DOUBLE TRIPLE
|
||||
{KEY_MUSIC_PP, KEY_ANC_SWITCH, KEY_NULL, KEY_NULL, KEY_CALL_LAST_NO, KEY_NULL}, //KEY_0
|
||||
{KEY_MUSIC_NEXT, KEY_VOL_UP, KEY_VOL_UP, KEY_NULL, KEY_OPEN_SIRI, KEY_NULL}, //KEY_1
|
||||
{KEY_MUSIC_PREV, KEY_VOL_DOWN, KEY_VOL_DOWN, KEY_NULL, KEY_HID_CONTROL, KEY_NULL}, //KEY_2
|
||||
};
|
||||
#endif
|
||||
|
||||
|
||||
// *INDENT-OFF*
|
||||
/************************** UART config****************************/
|
||||
#if TCFG_UART0_ENABLE
|
||||
UART0_PLATFORM_DATA_BEGIN(uart0_data)
|
||||
.tx_pin = TCFG_UART0_TX_PORT, //串口打印TX引脚选择
|
||||
.rx_pin = TCFG_UART0_RX_PORT, //串口打印RX引脚选择
|
||||
.baudrate = TCFG_UART0_BAUDRATE, //串口波特率
|
||||
|
||||
.flags = UART_DEBUG, //串口用来打印需要把改参数设置为UART_DEBUG
|
||||
UART0_PLATFORM_DATA_END()
|
||||
#endif //TCFG_UART0_ENABLE
|
||||
|
||||
/************************** CHARGE config****************************/
|
||||
#if TCFG_CHARGE_ENABLE
|
||||
CHARGE_PLATFORM_DATA_BEGIN(charge_data)
|
||||
.charge_en = TCFG_CHARGE_ENABLE, //内置充电使能
|
||||
.charge_poweron_en = TCFG_CHARGE_POWERON_ENABLE, //是否支持充电开机
|
||||
.charge_full_V = TCFG_CHARGE_FULL_V, //充电截止电压
|
||||
.charge_full_mA = TCFG_CHARGE_FULL_MA, //充电截止电流
|
||||
.charge_mA = TCFG_CHARGE_MA, //恒流充电电流
|
||||
.charge_trickle_mA = TCFG_CHARGE_TRICKLE_MA, //涓流充电电流
|
||||
/*ldo5v拔出过滤值,过滤时间 = (filter*2 + 20)ms,ldoin<0.6V且时间大于过滤时间才认为拔出
|
||||
对于充满直接从5V掉到0V的充电仓,该值必须设置成0,对于充满由5V先掉到0V之后再升压到xV的
|
||||
充电仓,需要根据实际情况设置该值大小*/
|
||||
.ldo5v_off_filter = 100,
|
||||
.ldo5v_on_filter = 50,
|
||||
.ldo5v_keep_filter = 220,
|
||||
.ldo5v_pulldown_lvl = CHARGE_PULLDOWN_200K, //下拉电阻档位选择
|
||||
.ldo5v_pulldown_keep = 0,
|
||||
//1、对于自动升压充电舱,若充电舱需要更大的负载才能检测到插入时,请将该变量置1,并且根据需求配置下拉电阻档位
|
||||
//2、对于按键升压,并且是通过上拉电阻去提供维持电压的舱,请将该变量设置1,并且根据舱的上拉配置下拉需要的电阻挡位
|
||||
//3、对于常5V的舱,可将改变量设为0,省功耗
|
||||
//4、为LDOIN防止被误触发唤醒,可设置为200k下拉
|
||||
.ldo5v_pulldown_en = 1,
|
||||
CHARGE_PLATFORM_DATA_END()
|
||||
#endif//TCFG_CHARGE_ENABLE
|
||||
|
||||
/************************** chargestore config****************************/
|
||||
#if TCFG_CHARGESTORE_ENABLE || TCFG_TEST_BOX_ENABLE || TCFG_ANC_BOX_ENABLE
|
||||
CHARGESTORE_PLATFORM_DATA_BEGIN(chargestore_data)
|
||||
.io_port = TCFG_CHARGESTORE_PORT,
|
||||
CHARGESTORE_PLATFORM_DATA_END()
|
||||
#endif
|
||||
|
||||
/************************** DAC ****************************/
|
||||
#if TCFG_AUDIO_DAC_ENABLE
|
||||
struct dac_platform_data dac_data = {
|
||||
.mode = TCFG_AUDIO_DAC_MODE, //dac输出模式
|
||||
.ldo_id = TCFG_AUDIO_DAC_LDO_SEL, //保留位
|
||||
.pa_mute_port = TCFG_AUDIO_DAC_PA_PORT, //暂时无作用
|
||||
.vcmo_en = 0, //是否打开VCOMO
|
||||
.pa_mute_value = 1, //暂时无作用
|
||||
.output = TCFG_AUDIO_DAC_CONNECT_MODE, //DAC输出配置,和具体硬件连接有关,需根据硬件来设置
|
||||
.lpf_isel = 0xf,
|
||||
.sys_vol_type = SYS_VOL_TYPE, //系统音量选择:模拟音量/数字音量,调节时调节对应的音量
|
||||
.max_ana_vol = MAX_ANA_VOL, //模拟音量最大等级
|
||||
.max_dig_vol = MAX_DIG_VOL, //数字音量最大等级
|
||||
/* .dig_vol_tab = (s16 *)dig_vol_table, //数字音量表 */
|
||||
.vcm_cap_en = 1, //配1代表走外部通路,vcm上有电容时,可以提升电路抑制电源噪声能力,提高ADC的性能,配0相当于vcm上无电容,抑制电源噪声能力下降,ADC性能下降
|
||||
#if (SYS_VOL_TYPE == VOL_TYPE_AD)
|
||||
.digital_gain_limit = 16384,
|
||||
#endif // #if (SYS_VOL_TYPE == VOL_TYPE_AD)
|
||||
|
||||
.power_on_mode = 0,
|
||||
};
|
||||
#endif
|
||||
|
||||
/************************** ADC ****************************/
|
||||
#if TCFG_AUDIO_ADC_ENABLE
|
||||
#ifndef TCFG_AUDIO_MIC0_BIAS_EN
|
||||
#define TCFG_AUDIO_MIC0_BIAS_EN 0
|
||||
#endif/*TCFG_AUDIO_MIC0_BIAS_EN*/
|
||||
#ifndef TCFG_AUDIO_MIC1_BIAS_EN
|
||||
#define TCFG_AUDIO_MIC1_BIAS_EN 0
|
||||
#endif/*TCFG_AUDIO_MIC1_BIAS_EN*/
|
||||
#ifndef TCFG_AUDIO_MIC2_BIAS_EN
|
||||
#define TCFG_AUDIO_MIC2_BIAS_EN 0
|
||||
#endif/*TCFG_AUDIO_MIC2_BIAS_EN*/
|
||||
#ifndef TCFG_AUDIO_MIC3_BIAS_EN
|
||||
#define TCFG_AUDIO_MIC3_BIAS_EN 0
|
||||
#endif/*TCFG_AUDIO_MIC3_BIAS_EN*/
|
||||
#ifndef TCFG_AUDIO_MIC_LDO_EN
|
||||
#define TCFG_AUDIO_MIC_LDO_EN 0
|
||||
#endif/*TCFG_AUDIO_MIC_LDO_EN*/
|
||||
|
||||
struct adc_platform_data adc_data = {
|
||||
|
||||
/*MIC LDO电流档位设置:
|
||||
0:0.625ua 1:1.25ua 2:1.875ua 3:2.5ua*/
|
||||
.mic_ldo_isel = TCFG_AUDIO_ADC_LD0_SEL,
|
||||
|
||||
/*mic_mode 工作模式定义
|
||||
#define AUDIO_MIC_CAP_MODE 0 //单端隔直电容模式
|
||||
#define AUDIO_MIC_CAP_DIFF_MODE 1 //差分隔直电容模式
|
||||
#define AUDIO_MIC_CAPLESS_MODE 2 //单端省电容模式
|
||||
*/
|
||||
.mic_mode = TCFG_AUDIO_MIC_MODE,
|
||||
.mic1_mode = TCFG_AUDIO_MIC1_MODE,
|
||||
.mic2_mode = TCFG_AUDIO_MIC2_MODE,
|
||||
.mic3_mode = TCFG_AUDIO_MIC3_MODE,
|
||||
|
||||
.mic_bias_inside = TCFG_AUDIO_MIC0_BIAS_EN,
|
||||
.mic1_bias_inside = TCFG_AUDIO_MIC1_BIAS_EN,
|
||||
.mic2_bias_inside = TCFG_AUDIO_MIC2_BIAS_EN,
|
||||
.mic3_bias_inside = TCFG_AUDIO_MIC3_BIAS_EN,
|
||||
|
||||
/*MICLDO供电输出到PAD(PA0)控制使能*/
|
||||
.mic_ldo_pwr = TCFG_AUDIO_MIC_LDO_EN, // MIC LDO 输出到 PA0
|
||||
|
||||
/*MIC免电容方案需要设置,影响MIC的偏置电压
|
||||
0b0001~0b1001 : 0.5k ~ 4.5k step = 0.5k
|
||||
0b1010~0b1111 : 5k ~ 10k step = 1k */
|
||||
.mic_bias_res = 4,
|
||||
.mic1_bias_res = 4,
|
||||
.mic2_bias_res = 4,
|
||||
.mic3_bias_res = 4,
|
||||
/*MIC LDO电压档位设置,也会影响MIC的偏置电压
|
||||
3:2.0v 4:2.2v 5:2.4v 6:2.6v 7:2.8v */
|
||||
.mic_ldo_vsel = 5,
|
||||
//mic的去直流dcc寄存器配置值,可配0到15,数值越大,其高通转折点越低
|
||||
.mic_dcc = 8,
|
||||
/*ADC低功耗等级,越大功耗越低,对应影响THD和底噪, 范围 (0 - 2)*/
|
||||
.lowpower_lvl = 0,
|
||||
|
||||
};
|
||||
#endif
|
||||
|
||||
const struct vad_mic_platform_data vad_mic_data = {
|
||||
.mic_data = { //
|
||||
.mic_mode = TCFG_AUDIO_MIC_MODE,
|
||||
.mic_ldo_isel = 2,
|
||||
.mic_ldo_vsel = 5,
|
||||
.mic_ldo2PAD_en = 1,
|
||||
.mic_bias_en = 0,
|
||||
.mic_bias_res = 0,
|
||||
.mic_bias_inside = TCFG_AUDIO_MIC0_BIAS_EN,
|
||||
/* ADC偏置电阻配置*/
|
||||
.adc_rbs = 3,
|
||||
/* ADC输入电阻配置*/
|
||||
.adc_rin = 3,
|
||||
/*.adc_test = 1,*/
|
||||
},
|
||||
.power_data = {
|
||||
/*VADLDO电压档位:0~7*/
|
||||
.ldo_vs = 3,
|
||||
/*VADLDO误差运放电流档位:0~3*/
|
||||
#if TCFG_VAD_LOWPOWER_CLOCK == VAD_CLOCK_USE_PMU_STD12M
|
||||
.ldo_is = 1,
|
||||
#else
|
||||
.ldo_is = 2,
|
||||
#endif
|
||||
.clock = TCFG_VAD_LOWPOWER_CLOCK, /*VAD时钟选项*/
|
||||
.acm_select = 8,
|
||||
},
|
||||
};
|
||||
/* struct audio_pf_data audio_pf_d = { */
|
||||
/* #if TCFG_AUDIO_DAC_ENABLE */
|
||||
/* .adc_pf_data = &adc_data, */
|
||||
/* #endif */
|
||||
|
||||
/* #if TCFG_AUDIO_ADC_ENABLE */
|
||||
/* .dac_pf_data = &dac_data, */
|
||||
/* #endif */
|
||||
/* }; */
|
||||
|
||||
/* struct audio_platform_data audio_data = { */
|
||||
/* .private_data = (void *) &audio_pf_d, */
|
||||
/* }; */
|
||||
|
||||
|
||||
/************************** IO KEY ****************************/
|
||||
#if TCFG_IOKEY_ENABLE
|
||||
const struct iokey_port iokey_list[] = {
|
||||
|
||||
{
|
||||
.connect_way = TCFG_IOKEY_POWER_CONNECT_WAY, //IO按键的连接方式
|
||||
.key_type.one_io.port = TCFG_IOKEY_POWER_ONE_PORT, //IO按键对应的引脚
|
||||
.key_value = 0, //按键值
|
||||
},
|
||||
};
|
||||
const struct iokey_platform_data iokey_data = {
|
||||
.enable = TCFG_IOKEY_ENABLE, //是否使能IO按键
|
||||
.num = ARRAY_SIZE(iokey_list), //IO按键的个数
|
||||
.port = iokey_list, //IO按键参数表
|
||||
};
|
||||
|
||||
#if MULT_KEY_ENABLE
|
||||
//组合按键消息映射表
|
||||
//配置注意事项:单个按键按键值需要按照顺序编号,如power:0, prev:1, next:2
|
||||
//bit_value = BIT(0) | BIT(1) 指按键值为0和按键值为1的两个按键被同时按下,
|
||||
//remap_value = 3指当这两个按键被同时按下后重新映射的按键值;
|
||||
const struct key_remap iokey_remap_table[] = {
|
||||
{.bit_value = BIT(0) | BIT(1), .remap_value = 3},
|
||||
{.bit_value = BIT(0) | BIT(2), .remap_value = 4},
|
||||
{.bit_value = BIT(1) | BIT(2), .remap_value = 5},
|
||||
};
|
||||
|
||||
const struct key_remap_data iokey_remap_data = {
|
||||
.remap_num = ARRAY_SIZE(iokey_remap_table),
|
||||
.table = iokey_remap_table,
|
||||
};
|
||||
#endif
|
||||
|
||||
#endif
|
||||
/*********************** LP TOUCH KEY ****************************/
|
||||
#if TCFG_LP_TOUCH_KEY_ENABLE
|
||||
const struct lp_touch_key_platform_data lp_touch_key_config = {
|
||||
/*触摸按键*/
|
||||
.ch[0].enable = TCFG_LP_TOUCH_KEY0_EN,
|
||||
.ch[0].wakeup_enable = TCFG_LP_TOUCH_KEY0_WAKEUP_EN,
|
||||
.ch[0].port = IO_PORTB_00,
|
||||
.ch[0].sensitivity = TCFG_LP_TOUCH_KEY0_SENSITIVITY,
|
||||
.ch[0].key_value = 0,
|
||||
|
||||
.ch[1].enable = TCFG_LP_TOUCH_KEY1_EN,
|
||||
.ch[1].wakeup_enable = TCFG_LP_TOUCH_KEY1_WAKEUP_EN,
|
||||
.ch[1].port = IO_PORTB_01,
|
||||
.ch[1].sensitivity = TCFG_LP_TOUCH_KEY1_SENSITIVITY,
|
||||
.ch[1].key_value = 0,
|
||||
|
||||
.ch[2].enable = TCFG_LP_TOUCH_KEY2_EN,
|
||||
.ch[2].wakeup_enable = TCFG_LP_TOUCH_KEY2_WAKEUP_EN,
|
||||
.ch[2].port = IO_PORTB_02,
|
||||
.ch[2].sensitivity = TCFG_LP_TOUCH_KEY2_SENSITIVITY,
|
||||
.ch[2].key_value = 1,
|
||||
|
||||
.ch[3].enable = TCFG_LP_TOUCH_KEY3_EN,
|
||||
.ch[3].wakeup_enable = TCFG_LP_TOUCH_KEY3_WAKEUP_EN,
|
||||
.ch[3].port = IO_PORTB_04,
|
||||
.ch[3].sensitivity = TCFG_LP_TOUCH_KEY3_SENSITIVITY,
|
||||
.ch[3].key_value = 2,
|
||||
|
||||
.ch[4].enable = TCFG_LP_TOUCH_KEY4_EN,
|
||||
.ch[4].wakeup_enable = TCFG_LP_TOUCH_KEY4_WAKEUP_EN,
|
||||
.ch[4].port = IO_PORTB_05,
|
||||
.ch[4].sensitivity = TCFG_LP_TOUCH_KEY4_SENSITIVITY,
|
||||
.ch[4].key_value = 3,
|
||||
|
||||
//把触摸按键之间的滑动也当做按键处理,有上滑,下滑,左滑,右滑
|
||||
.slide_mode_en = TCFG_LP_SLIDE_KEY_ENABLE,
|
||||
.slide_mode_key_value = 3,
|
||||
|
||||
//入耳检测相关的配置
|
||||
.eartch_en = TCFG_LP_EARTCH_KEY_ENABLE,
|
||||
.eartch_ch = TCFG_LP_EARTCH_KEY_CH,
|
||||
.eartch_ref_ch = TCFG_LP_EARTCH_KEY_REF_CH,
|
||||
.eartch_soft_inear_val = TCFG_LP_EARTCH_SOFT_INEAR_VAL,
|
||||
.eartch_soft_outear_val = TCFG_LP_EARTCH_SOFT_OUTEAR_VAL,
|
||||
};
|
||||
#endif /* #if TCFG_LP_TOUCH_KEY_ENABLE */
|
||||
|
||||
/************************** PLCNT TOUCH_KEY ****************************/
|
||||
#if TCFG_TOUCH_KEY_ENABLE
|
||||
const const struct touch_key_port touch_key_list[] = {
|
||||
{
|
||||
.press_delta = TCFG_TOUCH_KEY0_PRESS_DELTA,
|
||||
.port = TCFG_TOUCH_KEY0_PORT,
|
||||
.key_value = TCFG_TOUCH_KEY0_VALUE,
|
||||
},
|
||||
{
|
||||
.press_delta = TCFG_TOUCH_KEY1_PRESS_DELTA,
|
||||
.port = TCFG_TOUCH_KEY1_PORT,
|
||||
.key_value = TCFG_TOUCH_KEY1_VALUE,
|
||||
},
|
||||
};
|
||||
|
||||
const struct touch_key_platform_data touch_key_data = {
|
||||
.num = ARRAY_SIZE(touch_key_list),
|
||||
.port_list = touch_key_list,
|
||||
};
|
||||
#endif /* #if TCFG_TOUCH_KEY_ENABLE */
|
||||
|
||||
/************************** AD KEY ****************************/
|
||||
#if TCFG_ADKEY_ENABLE
|
||||
const struct adkey_platform_data adkey_data = {
|
||||
.enable = TCFG_ADKEY_ENABLE, //AD按键使能
|
||||
.adkey_pin = TCFG_ADKEY_PORT, //AD按键对应引脚
|
||||
.ad_channel = TCFG_ADKEY_AD_CHANNEL, //AD通道值
|
||||
.extern_up_en = TCFG_ADKEY_EXTERN_UP_ENABLE, //是否使用外接上拉电阻
|
||||
.ad_value = { //根据电阻算出来的电压值
|
||||
TCFG_ADKEY_VOLTAGE0,
|
||||
TCFG_ADKEY_VOLTAGE1,
|
||||
TCFG_ADKEY_VOLTAGE2,
|
||||
TCFG_ADKEY_VOLTAGE3,
|
||||
TCFG_ADKEY_VOLTAGE4,
|
||||
TCFG_ADKEY_VOLTAGE5,
|
||||
TCFG_ADKEY_VOLTAGE6,
|
||||
TCFG_ADKEY_VOLTAGE7,
|
||||
TCFG_ADKEY_VOLTAGE8,
|
||||
TCFG_ADKEY_VOLTAGE9,
|
||||
},
|
||||
.key_value = { //AD按键各个按键的键值
|
||||
TCFG_ADKEY_VALUE0,
|
||||
TCFG_ADKEY_VALUE1,
|
||||
TCFG_ADKEY_VALUE2,
|
||||
TCFG_ADKEY_VALUE3,
|
||||
TCFG_ADKEY_VALUE4,
|
||||
TCFG_ADKEY_VALUE5,
|
||||
TCFG_ADKEY_VALUE6,
|
||||
TCFG_ADKEY_VALUE7,
|
||||
TCFG_ADKEY_VALUE8,
|
||||
TCFG_ADKEY_VALUE9,
|
||||
},
|
||||
};
|
||||
#endif
|
||||
|
||||
/************************** RDEC_KEY ****************************/
|
||||
#if TCFG_RDEC_KEY_ENABLE
|
||||
const struct rdec_device rdeckey_list[] = {
|
||||
{
|
||||
.index = RDEC0 ,
|
||||
.sin_port0 = TCFG_RDEC0_ECODE1_PORT,
|
||||
.sin_port1 = TCFG_RDEC0_ECODE2_PORT,
|
||||
.key_value0 = TCFG_RDEC0_KEY0_VALUE | BIT(7),
|
||||
.key_value1 = TCFG_RDEC0_KEY1_VALUE | BIT(7),
|
||||
},
|
||||
|
||||
{
|
||||
.index = RDEC1 ,
|
||||
.sin_port0 = TCFG_RDEC1_ECODE1_PORT,
|
||||
.sin_port1 = TCFG_RDEC1_ECODE2_PORT,
|
||||
.key_value0 = TCFG_RDEC1_KEY0_VALUE | BIT(7),
|
||||
.key_value1 = TCFG_RDEC1_KEY1_VALUE | BIT(7),
|
||||
},
|
||||
|
||||
{
|
||||
.index = RDEC2 ,
|
||||
.sin_port0 = TCFG_RDEC2_ECODE1_PORT,
|
||||
.sin_port1 = TCFG_RDEC2_ECODE2_PORT,
|
||||
.key_value0 = TCFG_RDEC2_KEY0_VALUE | BIT(7),
|
||||
.key_value1 = TCFG_RDEC2_KEY1_VALUE | BIT(7),
|
||||
},
|
||||
|
||||
|
||||
};
|
||||
const struct rdec_platform_data rdec_key_data = {
|
||||
.enable = 1, //TCFG_RDEC_KEY_ENABLE, //是否使能RDEC按键
|
||||
.num = ARRAY_SIZE(rdeckey_list), //RDEC按键的个数
|
||||
.rdec = rdeckey_list, //RDEC按键参数表
|
||||
};
|
||||
#endif
|
||||
|
||||
/************************** IIS config ****************************/
|
||||
#if (TCFG_AUDIO_INPUT_IIS || TCFG_AUDIO_OUTPUT_IIS)
|
||||
ALINK_PARM alink0_platform_data = {
|
||||
.module = ALINK0,
|
||||
.mclk_io = TCFG_IIS_MCLK_IO,
|
||||
.sclk_io = TCFG_SCLK_IO,
|
||||
.lrclk_io = TCFG_LRCLK_IO,
|
||||
.ch_cfg[0].data_io = TCFG_DATA0_IO,
|
||||
.ch_cfg[1].data_io = TCFG_DATA1_IO,
|
||||
.ch_cfg[2].data_io = TCFG_DATA2_IO,
|
||||
.ch_cfg[3].data_io = TCFG_DATA3_IO,
|
||||
.mode = ALINK_MD_IIS,
|
||||
#if TCFG_IIS_MODE
|
||||
.role = ALINK_ROLE_SLAVE,
|
||||
#else
|
||||
.role = ALINK_ROLE_MASTER,
|
||||
#endif /*TCFG_IIS_MODE*/
|
||||
.clk_mode = ALINK_CLK_FALL_UPDATE_RAISE_SAMPLE,
|
||||
.bitwide = ALINK_LEN_16BIT,
|
||||
.sclk_per_frame = ALINK_FRAME_32SCLK,
|
||||
.dma_len = 4 * 1024,
|
||||
.sample_rate = TCFG_IIS_SR,
|
||||
.buf_mode = ALINK_BUF_CIRCLE,
|
||||
/*.iperiod = 64, //配置该项可以控制输入的延时*/
|
||||
};
|
||||
#endif
|
||||
|
||||
/************************** PWM_LED ****************************/
|
||||
#if TCFG_PWMLED_ENABLE
|
||||
LED_PLATFORM_DATA_BEGIN(pwm_led_data)
|
||||
.io_mode = TCFG_PWMLED_IOMODE, //推灯模式设置:支持单个IO推两个灯和两个IO推两个灯
|
||||
.io_cfg.one_io.pin = TCFG_PWMLED_PIN, //单个IO推两个灯的IO口配置
|
||||
LED_PLATFORM_DATA_END()
|
||||
#endif
|
||||
|
||||
const struct soft_iic_config soft_iic_cfg[] = {
|
||||
#if 0
|
||||
//iic0 data
|
||||
{
|
||||
.scl = TCFG_SW_I2C0_CLK_PORT, //IIC CLK脚
|
||||
.sda = TCFG_SW_I2C0_DAT_PORT, //IIC DAT脚
|
||||
.delay = TCFG_SW_I2C0_DELAY_CNT, //软件IIC延时参数,影响通讯时钟频率
|
||||
.io_pu = 1, //是否打开上拉电阻,如果外部电路没有焊接上拉电阻需要置1
|
||||
},
|
||||
#endif
|
||||
#if 0
|
||||
//iic1 data
|
||||
{
|
||||
.scl = IO_PORTA_05,
|
||||
.sda = IO_PORTA_06,
|
||||
.delay = 50,
|
||||
.io_pu = 1,
|
||||
},
|
||||
#endif
|
||||
};
|
||||
|
||||
|
||||
const struct hw_iic_config hw_iic_cfg[] = {
|
||||
#if 0
|
||||
//iic0 data
|
||||
{
|
||||
/*硬件IIC端口下选择
|
||||
SCL SDA
|
||||
{IO_PORT_DP, IO_PORT_DM}, //group a
|
||||
{IO_PORTC_04, IO_PORTC_05}, //group b
|
||||
{IO_PORTC_02, IO_PORTC_03}, //group c
|
||||
{IO_PORTA_05, IO_PORTA_06}, //group d
|
||||
*/
|
||||
.port = TCFG_HW_I2C0_PORTS,
|
||||
.baudrate = TCFG_HW_I2C0_CLK, //IIC通讯波特率
|
||||
.hdrive = 0, //是否打开IO口强驱
|
||||
.io_filter = 1, //是否打开滤波器(去纹波)
|
||||
.io_pu = 1, //是否打开上拉电阻,如果外部电路没有焊接上拉电阻需要置1
|
||||
},
|
||||
#endif
|
||||
};
|
||||
|
||||
#if TCFG_SD0_ENABLE
|
||||
SD0_PLATFORM_DATA_BEGIN(sd0_data)
|
||||
.port = {
|
||||
TCFG_SD0_PORT_CMD,
|
||||
TCFG_SD0_PORT_CLK,
|
||||
TCFG_SD0_PORT_DA0,
|
||||
TCFG_SD0_PORT_DA1,
|
||||
TCFG_SD0_PORT_DA2,
|
||||
TCFG_SD0_PORT_DA3,
|
||||
},
|
||||
.data_width = TCFG_SD0_DAT_MODE,
|
||||
.speed = TCFG_SD0_CLK,
|
||||
.detect_mode = TCFG_SD0_DET_MODE,
|
||||
.priority = 3,
|
||||
|
||||
#if (TCFG_SD0_DET_MODE == SD_IO_DECT)
|
||||
.detect_io = TCFG_SD0_DET_IO,
|
||||
.detect_io_level = TCFG_SD0_DET_IO_LEVEL,
|
||||
.detect_func = sdmmc_0_io_detect,
|
||||
.power = sd_set_power,
|
||||
/* .power = NULL, */
|
||||
#elif (TCFG_SD0_DET_MODE == SD_CLK_DECT)
|
||||
.detect_io_level = TCFG_SD0_DET_IO_LEVEL,
|
||||
.detect_func = sdmmc_0_clk_detect,
|
||||
.power = sd_set_power,
|
||||
/* .power = NULL, */
|
||||
#else
|
||||
.detect_func = sdmmc_cmd_detect,
|
||||
.power = NULL,
|
||||
#endif
|
||||
|
||||
SD0_PLATFORM_DATA_END()
|
||||
#endif /* #if TCFG_SD0_ENABLE */
|
||||
|
||||
REGISTER_DEVICES(device_table) = {
|
||||
/* { "audio", &audio_dev_ops, (void *) &audio_data }, */
|
||||
|
||||
#if TCFG_CHARGE_ENABLE
|
||||
{ "charge", &charge_dev_ops, (void *)&charge_data },
|
||||
#endif
|
||||
#if TCFG_SD0_ENABLE
|
||||
{ "sd0", &sd_dev_ops, (void *) &sd0_data},
|
||||
#endif
|
||||
};
|
||||
|
||||
/************************** power_param ****************************/
|
||||
const struct low_power_param power_param = {
|
||||
.config = TCFG_LOWPOWER_LOWPOWER_SEL, //低功耗使能,蓝牙&&系统空闲可进入低功耗
|
||||
.btosc_hz = TCFG_CLOCK_OSC_HZ, //蓝牙晶振频率
|
||||
.delay_us = TCFG_CLOCK_SYS_HZ / 1000000L, //提供给低功耗模块的延时(不需要需修改)
|
||||
.vddiom_lev = TCFG_LOWPOWER_VDDIOM_LEVEL, //vddiom等级
|
||||
.osc_type = TCFG_LOWPOWER_OSC_TYPE, //低功耗晶振类型,btosc/lrc
|
||||
#if (TCFG_LOWPOWER_RAM_SIZE)
|
||||
.mem_init_con = MEM_PWR_RAM_SET(TCFG_LOWPOWER_RAM_SIZE),
|
||||
#else
|
||||
.mem_init_con = 0,
|
||||
#endif
|
||||
#if (TCFG_LP_TOUCH_KEY_ENABLE && \
|
||||
(TCFG_LP_TOUCH_KEY0_WAKEUP_EN || \
|
||||
TCFG_LP_TOUCH_KEY1_WAKEUP_EN || \
|
||||
TCFG_LP_TOUCH_KEY2_WAKEUP_EN || \
|
||||
TCFG_LP_TOUCH_KEY3_WAKEUP_EN || \
|
||||
TCFG_LP_TOUCH_KEY4_WAKEUP_EN ))
|
||||
.lpctmu_en = 1,
|
||||
#else
|
||||
.lpctmu_en = 0,
|
||||
#endif
|
||||
};
|
||||
|
||||
/************************** wk_param ****************************/
|
||||
struct port_wakeup port0 = {
|
||||
.pullup_down_enable = ENABLE, //配置I/O 内部上下拉是否使能
|
||||
.edge = FALLING_EDGE, //唤醒方式选择,可选:上升沿\下降沿
|
||||
.filter = PORT_FLT_8ms,
|
||||
.iomap = TCFG_IOKEY_POWER_ONE_PORT, //唤醒口选择
|
||||
};
|
||||
|
||||
#if (TCFG_TEST_BOX_ENABLE || TCFG_CHARGESTORE_ENABLE || TCFG_ANC_BOX_ENABLE || TCFG_UMIDIGI_BOX_ENABLE)
|
||||
struct port_wakeup port1 = {
|
||||
.pullup_down_enable = DISABLE, //配置I/O 内部上下拉是否使能
|
||||
.edge = FALLING_EDGE, //唤醒方式选择,可选:上升沿\下降沿
|
||||
.filter = PORT_FLT_1ms,
|
||||
.iomap = TCFG_CHARGESTORE_PORT, //唤醒口选择
|
||||
};
|
||||
#endif
|
||||
|
||||
#if TCFG_CHARGE_ENABLE
|
||||
struct port_wakeup charge_port = {
|
||||
.edge = RISING_EDGE, //唤醒方式选择,可选:上升沿\下降沿\双边沿
|
||||
.filter = PORT_FLT_16ms,
|
||||
.iomap = IO_CHGFL_DET, //唤醒口选择
|
||||
};
|
||||
|
||||
struct port_wakeup vbat_port = {
|
||||
.edge = BOTH_EDGE, //唤醒方式选择,可选:上升沿\下降沿\双边沿
|
||||
.filter = PORT_FLT_16ms,
|
||||
.iomap = IO_VBTCH_DET, //唤醒口选择
|
||||
};
|
||||
|
||||
struct port_wakeup ldoin_port = {
|
||||
.edge = BOTH_EDGE, //唤醒方式选择,可选:上升沿\下降沿\双边沿
|
||||
.filter = PORT_FLT_16ms,
|
||||
.iomap = IO_LDOIN_DET, //唤醒口选择
|
||||
};
|
||||
#endif
|
||||
|
||||
const struct wakeup_param wk_param = {
|
||||
#if (!(TCFG_LP_TOUCH_KEY_ENABLE && TCFG_LP_TOUCH_KEY1_EN))
|
||||
.port[1] = &port0,
|
||||
#endif
|
||||
#if (TCFG_TEST_BOX_ENABLE || TCFG_CHARGESTORE_ENABLE || TCFG_ANC_BOX_ENABLE || TCFG_UMIDIGI_BOX_ENABLE)
|
||||
.port[2] = &port1,
|
||||
#endif
|
||||
#if TCFG_CHARGE_ENABLE
|
||||
.aport[0] = &charge_port,
|
||||
.aport[1] = &vbat_port,
|
||||
.aport[2] = &ldoin_port,
|
||||
#endif
|
||||
};
|
||||
|
||||
void gSensor_wkupup_disable(void)
|
||||
{
|
||||
log_info("gSensor wkup disable\n");
|
||||
power_wakeup_index_enable(1, 0);
|
||||
}
|
||||
|
||||
void gSensor_wkupup_enable(void)
|
||||
{
|
||||
log_info("gSensor wkup enable\n");
|
||||
power_wakeup_index_enable(1, 1);
|
||||
}
|
||||
|
||||
void debug_uart_init(const struct uart_platform_data *data)
|
||||
{
|
||||
#if TCFG_UART0_ENABLE
|
||||
if (data) {
|
||||
uart_init(data);
|
||||
} else {
|
||||
uart_init(&uart0_data);
|
||||
}
|
||||
#endif
|
||||
}
|
||||
|
||||
|
||||
STATUS *get_led_config(void)
|
||||
{
|
||||
return &(__this->led);
|
||||
}
|
||||
|
||||
STATUS *get_tone_config(void)
|
||||
{
|
||||
return &(__this->tone);
|
||||
}
|
||||
|
||||
u8 get_sys_default_vol(void)
|
||||
{
|
||||
return 21;
|
||||
}
|
||||
|
||||
u8 get_power_on_status(void)
|
||||
{
|
||||
#if TCFG_IOKEY_ENABLE
|
||||
struct iokey_port *power_io_list = NULL;
|
||||
power_io_list = iokey_data.port;
|
||||
|
||||
if (iokey_data.enable) {
|
||||
if (gpio_read(power_io_list->key_type.one_io.port) == power_io_list->connect_way){
|
||||
return 1;
|
||||
}
|
||||
}
|
||||
#endif
|
||||
|
||||
#if TCFG_ADKEY_ENABLE
|
||||
if (adkey_data.enable) {
|
||||
return 1;
|
||||
}
|
||||
#endif
|
||||
|
||||
#if TCFG_LP_TOUCH_KEY_ENABLE
|
||||
return lp_touch_key_power_on_status();
|
||||
#endif
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
static void board_devices_init(void)
|
||||
{
|
||||
#if TCFG_PWMLED_ENABLE
|
||||
pwm_led_init(&pwm_led_data);
|
||||
#endif
|
||||
|
||||
#if (TCFG_IOKEY_ENABLE || TCFG_ADKEY_ENABLE || TCFG_RDEC_KEY_ENABLE || TCFG_TOUCH_KEY_ENABLE)
|
||||
key_driver_init();
|
||||
#endif
|
||||
|
||||
#if TCFG_UART_KEY_ENABLE
|
||||
extern int uart_key_init(void);
|
||||
uart_key_init();
|
||||
#endif /* #if TCFG_UART_KEY_ENABLE */
|
||||
|
||||
#if TCFG_LP_TOUCH_KEY_ENABLE
|
||||
lp_touch_key_init(&lp_touch_key_config);
|
||||
#endif /* #if TCFG_LP_TOUCH_KEY_ENABLE */
|
||||
|
||||
#if (!TCFG_CHARGE_ENABLE)
|
||||
CHARGE_EN(0);
|
||||
CHGGO_EN(0);
|
||||
#endif
|
||||
|
||||
#if TCFG_CHARGESTORE_ENABLE || TCFG_TEST_BOX_ENABLE || TCFG_ANC_BOX_ENABLE
|
||||
chargestore_api_init(&chargestore_data);
|
||||
#endif
|
||||
}
|
||||
|
||||
//外置触摸电源控制 1:输出高 0:输出地
|
||||
static void pwr_set_external_touch(u8 high_low)
|
||||
{
|
||||
if(TCFG_EXTERNAL_TOUCH_KEY_POWER_PORT == NO_CONFIG_PORT){
|
||||
return;
|
||||
}
|
||||
gpio_set_pull_up(TCFG_EXTERNAL_TOUCH_KEY_POWER_PORT, 1);
|
||||
gpio_set_pull_down(TCFG_EXTERNAL_TOUCH_KEY_POWER_PORT, 0);
|
||||
gpio_set_direction(TCFG_EXTERNAL_TOUCH_KEY_POWER_PORT, 0);
|
||||
gpio_set_output_value(TCFG_EXTERNAL_TOUCH_KEY_POWER_PORT, high_low);
|
||||
}
|
||||
|
||||
#if CLIENT_BOARD == CUSTOM9_CFG
|
||||
#define TCFG_TALKING_FB_MIC_IO IO_PORTB_02
|
||||
/*
|
||||
0:MIC0 作为FB MIC,引脚输出低电平。
|
||||
1:MIC0 作为通话MIC,引脚输出高电平。
|
||||
*/
|
||||
void TALKING_FB_MIC_sel(u8 mic_type)
|
||||
{
|
||||
gpio_set_pull_up(TCFG_TALKING_FB_MIC_IO , 0);
|
||||
gpio_set_pull_down(TCFG_TALKING_FB_MIC_IO , 0);
|
||||
gpio_set_direction(TCFG_TALKING_FB_MIC_IO , 0);
|
||||
gpio_set_die(TCFG_TALKING_FB_MIC_IO , 1);
|
||||
switch (mic_type)
|
||||
{
|
||||
case 0:
|
||||
gpio_set_output_value(TCFG_TALKING_FB_MIC_IO , 0);
|
||||
break;
|
||||
|
||||
case 1:
|
||||
gpio_set_output_value(TCFG_TALKING_FB_MIC_IO , 1);
|
||||
break;
|
||||
|
||||
default:
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
static u8 dcda_en_state = 0;
|
||||
#define DCDC_EN_PORT IO_PORTC_02
|
||||
static void dcdc_en(u8 en)
|
||||
{
|
||||
if (dcda_en_state == en)
|
||||
{
|
||||
return ;
|
||||
}
|
||||
dcda_en_state = en;
|
||||
|
||||
gpio_set_die(DCDC_EN_PORT, 0);
|
||||
gpio_set_direction(IO_PORTB_04, 0);
|
||||
gpio_set_pull_up(DCDC_EN_PORT, 0);
|
||||
gpio_set_pull_down(DCDC_EN_PORT, 0);
|
||||
|
||||
switch (en)
|
||||
{
|
||||
case 0:
|
||||
printf("external dcdc disable \n");
|
||||
gpio_direction_output(DCDC_EN_PORT, 0);
|
||||
break;
|
||||
case 1:
|
||||
printf("external dcdc enable \n");
|
||||
gpio_direction_output(DCDC_EN_PORT, 1);
|
||||
break;
|
||||
|
||||
default:
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
static void dcdc_init(void)
|
||||
{
|
||||
gpio_set_die(DCDC_EN_PORT, 0);
|
||||
gpio_set_direction(IO_PORTB_04, 0);
|
||||
gpio_set_pull_up(DCDC_EN_PORT, 0);
|
||||
gpio_set_pull_down(DCDC_EN_PORT, 0);
|
||||
gpio_direction_output(DCDC_EN_PORT, 0);
|
||||
dcda_en_state = 0;
|
||||
}
|
||||
|
||||
/*dcdc switch*/
|
||||
void audio_dac_power_state(u8 state)
|
||||
{
|
||||
switch (state)
|
||||
{
|
||||
case DAC_ANALOG_OPEN_PREPARE:
|
||||
dcdc_en(1);
|
||||
break;
|
||||
case DAC_ANALOG_OPEN_FINISH:
|
||||
break;
|
||||
case DAC_ANALOG_CLOSE_PREPARE:
|
||||
break;
|
||||
case DAC_ANALOG_CLOSE_FINISH:
|
||||
dcdc_en(0);
|
||||
break;
|
||||
default:
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
#endif
|
||||
|
||||
extern void cfg_file_parse(u8 idx);
|
||||
void board_init()
|
||||
{
|
||||
|
||||
pwr_set_external_touch(1);
|
||||
board_power_init();
|
||||
//adc_vbg_init();
|
||||
adc_init();
|
||||
#if CLIENT_BOARD == CUSTOM9_CFG
|
||||
dcdc_init();
|
||||
TALKING_FB_MIC_sel(0);
|
||||
#endif
|
||||
cfg_file_parse(0);
|
||||
devices_init();
|
||||
#if TCFG_AUDIO_ANC_ENABLE
|
||||
anc_init();
|
||||
#endif/*TCFG_AUDIO_ANC_ENABLE*/
|
||||
|
||||
board_devices_init();
|
||||
|
||||
#if TCFG_CHARGE_ENABLE
|
||||
if(get_charge_online_flag())
|
||||
#else
|
||||
if (0)
|
||||
#endif
|
||||
{
|
||||
power_set_mode(PWR_LDO15);
|
||||
}else{
|
||||
power_set_mode(TCFG_LOWPOWER_POWER_SEL);
|
||||
}
|
||||
|
||||
//针对硅mic要输出1给mic供电
|
||||
/* gpio_set_pull_up(IO_PORTA_04, 0); */
|
||||
/* gpio_set_pull_down(IO_PORTA_04, 0); */
|
||||
/* gpio_set_direction(IO_PORTA_04, 0); */
|
||||
/* gpio_set_output_value(IO_PORTA_04,1); */
|
||||
|
||||
#if TCFG_UART0_ENABLE
|
||||
if (uart0_data.rx_pin < IO_MAX_NUM) {
|
||||
gpio_set_die(uart0_data.rx_pin, 1);
|
||||
}
|
||||
#endif
|
||||
|
||||
#if TCFG_SMART_VOICE_ENABLE
|
||||
int audio_smart_voice_detect_init(struct vad_mic_platform_data *mic_data);
|
||||
audio_smart_voice_detect_init((struct vad_mic_platform_data *)&vad_mic_data);
|
||||
#endif /* #if TCFG_SMART_VOICE_ENABLE */
|
||||
|
||||
#ifdef CONFIG_BOARD_AISPEECH_VAD_ASR
|
||||
extern int audio_ais_platform_asr_init(struct vad_mic_platform_data *mic_data);
|
||||
audio_ais_platform_asr_init((struct vad_mic_platform_data *)&vad_mic_data);
|
||||
#endif /*CONFIG_BOARD_AISPEECH_VAD_ASR*/
|
||||
|
||||
#ifdef AUDIO_PCM_DEBUG
|
||||
extern void uartSendInit();
|
||||
uartSendInit();
|
||||
#endif/*AUDIO_PCM_DEBUG*/
|
||||
}
|
||||
|
||||
/*进软关机之前默认将IO口都设置成高阻状态,需要保留原来状态的请修改该函数*/
|
||||
extern void dac_power_off(void);
|
||||
void board_set_soft_poweroff(void)
|
||||
{
|
||||
//power按键
|
||||
#if TCFG_IOKEY_ENABLE
|
||||
soff_gpio_protect(TCFG_IOKEY_POWER_ONE_PORT);
|
||||
#endif
|
||||
|
||||
soff_gpio_protect(TCFG_EXTERNAL_TOUCH_KEY_POWER_PORT);//软关机KEEP外置触摸供电
|
||||
|
||||
#if (!(TCFG_LP_TOUCH_KEY_ENABLE && TCFG_LP_TOUCH_KEY1_EN))
|
||||
//默认唤醒io
|
||||
soff_gpio_protect(IO_PORTB_01);
|
||||
#endif
|
||||
|
||||
#if (TCFG_TEST_BOX_ENABLE || TCFG_CHARGESTORE_ENABLE || TCFG_ANC_BOX_ENABLE || TCFG_UMIDIGI_BOX_ENABLE)
|
||||
power_wakeup_index_enable(2, 0);
|
||||
#endif
|
||||
|
||||
board_set_soft_poweroff_common(NULL);
|
||||
|
||||
dac_power_off();
|
||||
}
|
||||
|
||||
#define APP_IO_DEBUG_0(i,x) {JL_PORT##i->DIR &= ~BIT(x), JL_PORT##i->OUT &= ~BIT(x);}
|
||||
#define APP_IO_DEBUG_1(i,x) {JL_PORT##i->DIR &= ~BIT(x), JL_PORT##i->OUT |= BIT(x);}
|
||||
|
||||
void sleep_exit_callback(u32 usec)
|
||||
{
|
||||
sleep_exit_callback_common(NULL);
|
||||
|
||||
putchar('>');
|
||||
}
|
||||
void sleep_enter_callback(u8 step)
|
||||
{
|
||||
/* 此函数禁止添加打印 */
|
||||
if (step == 1) {
|
||||
putchar('<');
|
||||
} else {
|
||||
//外置触摸供电
|
||||
pwr_set_external_touch(1);
|
||||
|
||||
sleep_enter_callback_common(NULL);
|
||||
}
|
||||
}
|
||||
|
||||
static void port_wakeup_callback(u8 index, u8 gpio)
|
||||
{
|
||||
log_info("%s:%d,%d",__FUNCTION__,index,gpio);
|
||||
#if TCFG_UMIDIGI_BOX_ENABLE
|
||||
if (index == 2) {
|
||||
ldo_port_wakeup_to_cmessage();
|
||||
}
|
||||
#endif
|
||||
switch (index) {
|
||||
#if (TCFG_TEST_BOX_ENABLE || TCFG_CHARGESTORE_ENABLE || TCFG_ANC_BOX_ENABLE)
|
||||
case 2:
|
||||
extern void chargestore_ldo5v_fall_deal(void);
|
||||
chargestore_ldo5v_fall_deal();
|
||||
break;
|
||||
#endif
|
||||
}
|
||||
}
|
||||
|
||||
static void aport_wakeup_callback(u8 index, u8 gpio, u8 edge)
|
||||
{
|
||||
log_info("%s:%d,%d",__FUNCTION__,index,gpio);
|
||||
#if TCFG_CHARGE_ENABLE
|
||||
switch (gpio) {
|
||||
case IO_CHGFL_DET://charge port
|
||||
charge_wakeup_isr();
|
||||
break;
|
||||
case IO_VBTCH_DET://vbat port
|
||||
case IO_LDOIN_DET://ldoin port
|
||||
ldoin_wakeup_isr();
|
||||
break;
|
||||
}
|
||||
#endif
|
||||
}
|
||||
|
||||
void board_power_init(void)
|
||||
{
|
||||
log_info("Power init : %s", __FILE__);
|
||||
|
||||
power_init(&power_param);
|
||||
|
||||
power_set_callback(TCFG_LOWPOWER_LOWPOWER_SEL, sleep_enter_callback, sleep_exit_callback, board_set_soft_poweroff);
|
||||
|
||||
#if TCFG_UMIDIGI_BOX_ENABLE
|
||||
gpio_set_die(TCFG_CHARGESTORE_PORT, 1);
|
||||
umidigi_chargestore_message_callback(app_umidigi_chargetore_message_deal);
|
||||
#endif
|
||||
|
||||
power_keep_dacvdd_en(0);
|
||||
|
||||
power_wakeup_init(&wk_param);
|
||||
|
||||
power_awakeup_set_callback(aport_wakeup_callback);
|
||||
power_wakeup_set_callback(port_wakeup_callback);
|
||||
}
|
||||
#endif /* #ifdef CONFIG_BOARD_JL701N_ANC */
|
||||
File diff suppressed because it is too large
Load Diff
@ -1,123 +0,0 @@
|
||||
#ifndef CONFIG_BOARD_JL701N_ANC_POST_BUILD_CFG_H
|
||||
#define CONFIG_BOARD_JL701N_ANC_POST_BUILD_CFG_H
|
||||
|
||||
/* 改文件只添加和isd_config.ini相关的配置,用以生成isd_config.ini */
|
||||
/* 其他不相关的配置请勿添加在改文件 */
|
||||
|
||||
#ifdef CONFIG_BOARD_JL701N_ANC
|
||||
|
||||
/* Following Macros Affect Periods Of Both Code Compiling And Post-build */
|
||||
|
||||
#define CONFIG_DOUBLE_BANK_ENABLE 0 //单双备份选择(若打开了改宏,FLASH结构变为双备份结构,适用于接入第三方协议的OTA, PS: JL-OTA同样支持双备份升级, 需要根据实际FLASH大小同时配置CONFIG_FLASH_SIZE)
|
||||
#define CONFIG_APP_OTA_ENABLE 0 //是否支持RCSP升级(JL-OTA)
|
||||
|
||||
#define CONFIG_UPDATE_JUMP_TO_MASK 0 //配置升级到loader的方式0为直接reset,1为跳转(适用于芯片电源由IO口KEEP住的方案,需要注意检查跳转前是否将使用DMA的硬件模块全部关闭)
|
||||
|
||||
#define CONFIG_IO_KEY_EN 0 //配置是否使用IO按键,配合RESET1
|
||||
#define CONFIG_UPDATE_WITH_MD5_CHECK_EN 0 //配置升级是否支持MD5校验
|
||||
|
||||
#define CONFIG_ANC_ENABLE 1 //配置是否支持ANC
|
||||
|
||||
//flash size vaule definition
|
||||
#define FLASH_SIZE_256K 0x40000
|
||||
#define FLASH_SIZE_512K 0x80000
|
||||
#define FLASH_SIZE_1M 0x100000
|
||||
#define FLASH_SIZE_2M 0x200000
|
||||
#define FLASH_SIZE_4M 0x400000
|
||||
|
||||
#define CONFIG_FLASH_SIZE FLASH_SIZE_1M //配置FLASH大小
|
||||
|
||||
|
||||
/* Above Macros Affect Periods Of Both Code Compiling And Post-build */
|
||||
|
||||
/* Following Macros Only For Post Bulid Configuaration */
|
||||
|
||||
#define CONFIG_DB_UPDATE_DATA_GENERATE_EN 0 //是否生成db_data.bin(用于第三方协议接入使用)
|
||||
#define CONFIG_ONLY_GRENERATE_ALIGN_4K_CODE 0 //ufw只生成1份4K对齐的代码
|
||||
|
||||
//config for supported chip version
|
||||
#ifdef CONFIG_BR30_C_VERSION
|
||||
#define CONFIG_SUPPORTED_CHIP_VERSION C
|
||||
#else
|
||||
#define CONFIG_SUPPORTED_CHIP_VERSION B,D,E,M,N,O,P
|
||||
#endif
|
||||
|
||||
//DON'T MODIFY THIS CONFIG EXCEPT SDK PUBLISHER
|
||||
#define CONFIG_CHIP_NAME AC701N //除了SDK发布者,请不要修改
|
||||
//it can be modified before first programming,but keep the same as the original version
|
||||
#define CONFIG_PID AC701N //烧写或强制升级之前可以修改,之后升级要保持一致
|
||||
//it can be modified before first programming,but keep the same as the original version
|
||||
#define CONFIG_VID 0.01 //烧写或强制升级之前可以修改,之后升级要保持一致
|
||||
|
||||
//Project with bluetooth,it must use OSC as PLL_SOURCE;
|
||||
#define CONFIG_PLL_SOURCE_USING_LRC 0 //PLL时钟源选择 1:LRC 2:OSC
|
||||
|
||||
//config alignment size unit
|
||||
#ifdef CONFIG_256K_FLASH
|
||||
#define ALIGN_UNIT_256B 1 //FLASH对齐方式选择,如果是256K的FLASH,选择256BYTE对齐方式
|
||||
#else
|
||||
#define ALIGN_UNIT_256B 0
|
||||
#endif
|
||||
|
||||
//partial platform check this config to select the uart IO for wired update
|
||||
#define CONFIG_UART_UPDATE_PIN PP00
|
||||
|
||||
//isd_download loader/uboot/update_loader debug io config
|
||||
//#define CONFIG_UBOOT_DEBUG_PIN PA05
|
||||
//#define CONFIG_UBOOT_DEBUG_BAUD_RATE 1000000
|
||||
|
||||
//config long-press reset io pin,time,trigger level
|
||||
#define CONFIG_RESET_PIN LDO //io pin
|
||||
#define CONFIG_RESET_TIME 04 //unit:second
|
||||
#define CONFIG_RESET_LEVEL 1 //tigger level(0/1)
|
||||
|
||||
#if CONFIG_IO_KEY_EN
|
||||
#define CONFIG_SUPPORT_RESET1
|
||||
#define CONFIG_RESET1_PIN PB01 //io pin
|
||||
#define CONFIG_RESET1_TIME 08 //unit:second
|
||||
#define CONFIG_RESET1_LEVEL 0 //tigger level(0/1)
|
||||
#endif
|
||||
|
||||
//reserved three custom cfg item for the future definition
|
||||
//#define CONFIG_CUSTOM_CFG1_TYPE POWER_PIN
|
||||
//#define CONFIG_CUSTOM_CFG1_VALUE PC01_1
|
||||
|
||||
//#define CONFIG_CUSTOM_CFG2_TYPE
|
||||
//#define CONFIG_CUSTOM_CFG2_VALUE
|
||||
|
||||
//#define CONFIG_CUSTOM_CFG3_TYPE
|
||||
//#define CONFIG_CUSTOM_CFG3_VALUE
|
||||
|
||||
|
||||
//#define CONFIG_VDDIO_LVD_LEVEL 4 ////VDDIO_LVD挡位,0: 1.9V 1: 2.0V 2: 2.1V 3: 2.2V 4: 2.3V 5: 2.4V 6: 2.5V 7: 2.6V
|
||||
|
||||
//with single-bank mode,actual vm size should larger this VM_LEAST_SIZE,and dual bank mode,actual vm size equals this;
|
||||
#define CONFIG_VM_LEAST_SIZE 8K
|
||||
//config whether erased this area when do a update,1-No Operation,0-Erase
|
||||
#define CONFIG_VM_OPT 1
|
||||
|
||||
//config whether erased this area when do a update,1-No Operation,0-Erase
|
||||
#define CONFIG_BTIF_OPT 1
|
||||
|
||||
//reserved two custom cfg area for the future definition
|
||||
//#define CONFIG_RESERVED_AREA1 EXIF1
|
||||
#ifdef CONFIG_RESERVED_AREA1
|
||||
#define CONFIG_RESERVED_AREA1_ADDR AUTO
|
||||
#define CONFIG_RESERVED_AREA1_LEN 0x1000
|
||||
#define CONFIG_RESERVED_AREA1_OPT 1
|
||||
//#define CONFIG_RESERVED_AREA1_FILE anc_gains.bin
|
||||
#endif
|
||||
|
||||
//#define CONFIG_RESERVED_AREA2 EXIF2
|
||||
#ifdef CONFIG_RESERVED_AREA2
|
||||
#define CONFIG_RESERVED_AREA2_ADDR AUTO
|
||||
#define CONFIG_RESERVED_AREA2_LEN 0x1000
|
||||
#define CONFIG_RESERVED_AREA2_OPT 1
|
||||
//#define CONFIG_RESERVED_AREA2_FILE anc_gains.bin
|
||||
#endif
|
||||
|
||||
/* Above Macros Only For Post Bulid Configuaration */
|
||||
#endif /* #ifdef CONFIG_BOARD_JL701N_ANC */
|
||||
|
||||
#endif /* #ifndef CONFIG_BOARD_JL701N_ANC_POST_BUILD_CFG_H */
|
||||
|
||||
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
@ -1,123 +0,0 @@
|
||||
#ifndef CONFIG_BOARD_JL701N_BTEMITTER_BUILD_CFG_H
|
||||
#define CONFIG_BOARD_JL701N_BTEMITTER_BUILD_CFG_H
|
||||
|
||||
/* 改文件只添加和isd_config.ini相关的配置,用以生成isd_config.ini */
|
||||
/* 其他不相关的配置请勿添加在改文件 */
|
||||
|
||||
#ifdef CONFIG_BOARD_JL701N_BTEMITTER
|
||||
|
||||
/* Following Macros Affect Periods Of Both Code Compiling And Post-build */
|
||||
|
||||
#define CONFIG_DOUBLE_BANK_ENABLE 0 //单双备份选择(若打开了改宏,FLASH结构变为双备份结构,适用于接入第三方协议的OTA, PS: JL-OTA同样支持双备份升级, 需要根据实际FLASH大小同时配置CONFIG_FLASH_SIZE)
|
||||
#define CONFIG_APP_OTA_ENABLE 0 //是否支持RCSP升级(JL-OTA)
|
||||
|
||||
#define CONFIG_UPDATE_JUMP_TO_MASK 0 //配置升级到loader的方式0为直接reset,1为跳转(适用于芯片电源由IO口KEEP住的方案,需要注意检查跳转前是否将使用DMA的硬件模块全部关闭)
|
||||
|
||||
#define CONFIG_IO_KEY_EN 0 //配置是否使用IO按键,配合RESET1
|
||||
#define CONFIG_UPDATE_WITH_MD5_CHECK_EN 0 //配置升级是否支持MD5校验
|
||||
|
||||
#define CONFIG_ANC_ENABLE 0 //配置是否支持ANC
|
||||
|
||||
//flash size vaule definition
|
||||
#define FLASH_SIZE_256K 0x40000
|
||||
#define FLASH_SIZE_512K 0x80000
|
||||
#define FLASH_SIZE_1M 0x100000
|
||||
#define FLASH_SIZE_2M 0x200000
|
||||
#define FLASH_SIZE_4M 0x400000
|
||||
|
||||
#define CONFIG_FLASH_SIZE FLASH_SIZE_1M //配置FLASH大小
|
||||
|
||||
|
||||
/* Above Macros Affect Periods Of Both Code Compiling And Post-build */
|
||||
|
||||
/* Following Macros Only For Post Bulid Configuaration */
|
||||
|
||||
#define CONFIG_DB_UPDATE_DATA_GENERATE_EN 0 //是否生成db_data.bin(用于第三方协议接入使用)
|
||||
#define CONFIG_ONLY_GRENERATE_ALIGN_4K_CODE 0 //ufw只生成1份4K对齐的代码
|
||||
|
||||
//config for supported chip version
|
||||
#ifdef CONFIG_BR30_C_VERSION
|
||||
#define CONFIG_SUPPORTED_CHIP_VERSION C
|
||||
#else
|
||||
#define CONFIG_SUPPORTED_CHIP_VERSION B,D,E,M,N,O,P
|
||||
#endif
|
||||
|
||||
//DON'T MODIFY THIS CONFIG EXCEPT SDK PUBLISHER
|
||||
#define CONFIG_CHIP_NAME AC701N //除了SDK发布者,请不要修改
|
||||
//it can be modified before first programming,but keep the same as the original version
|
||||
#define CONFIG_PID AC701N //烧写或强制升级之前可以修改,之后升级要保持一致
|
||||
//it can be modified before first programming,but keep the same as the original version
|
||||
#define CONFIG_VID 0.01 //烧写或强制升级之前可以修改,之后升级要保持一致
|
||||
|
||||
//Project with bluetooth,it must use OSC as PLL_SOURCE;
|
||||
#define CONFIG_PLL_SOURCE_USING_LRC 0 //PLL时钟源选择 1:LRC 2:OSC
|
||||
|
||||
//config alignment size unit
|
||||
#ifdef CONFIG_256K_FLASH
|
||||
#define ALIGN_UNIT_256B 1 //FLASH对齐方式选择,如果是256K的FLASH,选择256BYTE对齐方式
|
||||
#else
|
||||
#define ALIGN_UNIT_256B 0
|
||||
#endif
|
||||
|
||||
//partial platform check this config to select the uart IO for wired update
|
||||
#define CONFIG_UART_UPDATE_PIN PP00
|
||||
|
||||
//isd_download loader/uboot/update_loader debug io config
|
||||
//#define CONFIG_UBOOT_DEBUG_PIN PA05
|
||||
//#define CONFIG_UBOOT_DEBUG_BAUD_RATE 1000000
|
||||
|
||||
//config long-press reset io pin,time,trigger level
|
||||
#define CONFIG_RESET_PIN LDO //io pin
|
||||
#define CONFIG_RESET_TIME 04 //unit:second
|
||||
#define CONFIG_RESET_LEVEL 1 //tigger level(0/1)
|
||||
|
||||
#if CONFIG_IO_KEY_EN
|
||||
#define CONFIG_SUPPORT_RESET1
|
||||
#define CONFIG_RESET1_PIN PB01 //io pin
|
||||
#define CONFIG_RESET1_TIME 08 //unit:second
|
||||
#define CONFIG_RESET1_LEVEL 0 //tigger level(0/1)
|
||||
#endif
|
||||
|
||||
//reserved three custom cfg item for the future definition
|
||||
//#define CONFIG_CUSTOM_CFG1_TYPE POWER_PIN
|
||||
//#define CONFIG_CUSTOM_CFG1_VALUE PC01_1
|
||||
|
||||
//#define CONFIG_CUSTOM_CFG2_TYPE
|
||||
//#define CONFIG_CUSTOM_CFG2_VALUE
|
||||
|
||||
//#define CONFIG_CUSTOM_CFG3_TYPE
|
||||
//#define CONFIG_CUSTOM_CFG3_VALUE
|
||||
|
||||
|
||||
//#define CONFIG_VDDIO_LVD_LEVEL 4 ////VDDIO_LVD挡位,0: 1.9V 1: 2.0V 2: 2.1V 3: 2.2V 4: 2.3V 5: 2.4V 6: 2.5V 7: 2.6V
|
||||
|
||||
//with single-bank mode,actual vm size should larger this VM_LEAST_SIZE,and dual bank mode,actual vm size equals this;
|
||||
#define CONFIG_VM_LEAST_SIZE 8K
|
||||
//config whether erased this area when do a update,1-No Operation,0-Erase
|
||||
#define CONFIG_VM_OPT 1
|
||||
|
||||
//config whether erased this area when do a update,1-No Operation,0-Erase
|
||||
#define CONFIG_BTIF_OPT 1
|
||||
|
||||
//reserved two custom cfg area for the future definition
|
||||
//#define CONFIG_RESERVED_AREA1 EXIF1
|
||||
#ifdef CONFIG_RESERVED_AREA1
|
||||
#define CONFIG_RESERVED_AREA1_ADDR AUTO
|
||||
#define CONFIG_RESERVED_AREA1_LEN 0x1000
|
||||
#define CONFIG_RESERVED_AREA1_OPT 1
|
||||
//#define CONFIG_RESERVED_AREA1_FILE anc_gains.bin
|
||||
#endif
|
||||
|
||||
//#define CONFIG_RESERVED_AREA2 EXIF2
|
||||
#ifdef CONFIG_RESERVED_AREA2
|
||||
#define CONFIG_RESERVED_AREA2_ADDR AUTO
|
||||
#define CONFIG_RESERVED_AREA2_LEN 0x1000
|
||||
#define CONFIG_RESERVED_AREA2_OPT 1
|
||||
//#define CONFIG_RESERVED_AREA2_FILE anc_gains.bin
|
||||
#endif
|
||||
|
||||
/* Above Macros Only For Post Bulid Configuaration */
|
||||
#endif /* #ifdef CONFIG_BOARD_JL701N_BTEMITTER */
|
||||
|
||||
#endif /* #ifndef CONFIG_BOARD_JL701N_BTEMITTER_BUILD_CFG_H */
|
||||
|
||||
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
@ -1,123 +0,0 @@
|
||||
#ifndef CONFIG_BOARD_JL701N_DEMO_POST_BUILD_CFG_H
|
||||
#define CONFIG_BOARD_JL701N_DEMO_POST_BUILD_CFG_H
|
||||
|
||||
/* 改文件只添加和isd_config.ini相关的配置,用以生成isd_config.ini */
|
||||
/* 其他不相关的配置请勿添加在改文件 */
|
||||
|
||||
#ifdef CONFIG_BOARD_JL701N_DEMO
|
||||
|
||||
/* Following Macros Affect Periods Of Both Code Compiling And Post-build */
|
||||
|
||||
#define CONFIG_DOUBLE_BANK_ENABLE 0 //单双备份选择(若打开了改宏,FLASH结构变为双备份结构,适用于接入第三方协议的OTA, PS: JL-OTA同样支持双备份升级, 需要根据实际FLASH大小同时配置CONFIG_FLASH_SIZE)
|
||||
#define CONFIG_APP_OTA_ENABLE 0 //是否支持RCSP升级(JL-OTA)
|
||||
|
||||
#define CONFIG_UPDATE_JUMP_TO_MASK 0 //配置升级到loader的方式0为直接reset,1为跳转(适用于芯片电源由IO口KEEP住的方案,需要注意检查跳转前是否将使用DMA的硬件模块全部关闭)
|
||||
|
||||
#define CONFIG_IO_KEY_EN 0 //配置是否使用IO按键,配合RESET1
|
||||
#define CONFIG_UPDATE_WITH_MD5_CHECK_EN 0 //配置升级是否支持MD5校验
|
||||
|
||||
#define CONFIG_ANC_ENABLE 0 //配置是否支持ANC
|
||||
|
||||
//flash size vaule definition
|
||||
#define FLASH_SIZE_256K 0x40000
|
||||
#define FLASH_SIZE_512K 0x80000
|
||||
#define FLASH_SIZE_1M 0x100000
|
||||
#define FLASH_SIZE_2M 0x200000
|
||||
#define FLASH_SIZE_4M 0x400000
|
||||
|
||||
#define CONFIG_FLASH_SIZE FLASH_SIZE_1M //配置FLASH大小
|
||||
|
||||
|
||||
/* Above Macros Affect Periods Of Both Code Compiling And Post-build */
|
||||
|
||||
/* Following Macros Only For Post Bulid Configuaration */
|
||||
|
||||
#define CONFIG_DB_UPDATE_DATA_GENERATE_EN 0 //是否生成db_data.bin(用于第三方协议接入使用)
|
||||
#define CONFIG_ONLY_GRENERATE_ALIGN_4K_CODE 0 //ufw只生成1份4K对齐的代码
|
||||
|
||||
//config for supported chip version
|
||||
#ifdef CONFIG_BR30_C_VERSION
|
||||
#define CONFIG_SUPPORTED_CHIP_VERSION C
|
||||
#else
|
||||
#define CONFIG_SUPPORTED_CHIP_VERSION B,D,E,M,N,O,P
|
||||
#endif
|
||||
|
||||
//DON'T MODIFY THIS CONFIG EXCEPT SDK PUBLISHER
|
||||
#define CONFIG_CHIP_NAME AC701N //除了SDK发布者,请不要修改
|
||||
//it can be modified before first programming,but keep the same as the original version
|
||||
#define CONFIG_PID AC701N //烧写或强制升级之前可以修改,之后升级要保持一致
|
||||
//it can be modified before first programming,but keep the same as the original version
|
||||
#define CONFIG_VID 0.01 //烧写或强制升级之前可以修改,之后升级要保持一致
|
||||
|
||||
//Project with bluetooth,it must use OSC as PLL_SOURCE;
|
||||
#define CONFIG_PLL_SOURCE_USING_LRC 0 //PLL时钟源选择 1:LRC 2:OSC
|
||||
|
||||
//config alignment size unit
|
||||
#ifdef CONFIG_256K_FLASH
|
||||
#define ALIGN_UNIT_256B 1 //FLASH对齐方式选择,如果是256K的FLASH,选择256BYTE对齐方式
|
||||
#else
|
||||
#define ALIGN_UNIT_256B 0
|
||||
#endif
|
||||
|
||||
//partial platform check this config to select the uart IO for wired update
|
||||
#define CONFIG_UART_UPDATE_PIN PP00
|
||||
|
||||
//isd_download loader/uboot/update_loader debug io config
|
||||
//#define CONFIG_UBOOT_DEBUG_PIN PA05
|
||||
//#define CONFIG_UBOOT_DEBUG_BAUD_RATE 1000000
|
||||
|
||||
//config long-press reset io pin,time,trigger level
|
||||
#define CONFIG_RESET_PIN LDO //io pin
|
||||
#define CONFIG_RESET_TIME 04 //unit:second
|
||||
#define CONFIG_RESET_LEVEL 1 //tigger level(0/1)
|
||||
|
||||
#if CONFIG_IO_KEY_EN
|
||||
#define CONFIG_SUPPORT_RESET1
|
||||
#define CONFIG_RESET1_PIN PB01 //io pin
|
||||
#define CONFIG_RESET1_TIME 08 //unit:second
|
||||
#define CONFIG_RESET1_LEVEL 0 //tigger level(0/1)
|
||||
#endif
|
||||
|
||||
//reserved three custom cfg item for the future definition
|
||||
//#define CONFIG_CUSTOM_CFG1_TYPE POWER_PIN
|
||||
//#define CONFIG_CUSTOM_CFG1_VALUE PC01_1
|
||||
|
||||
//#define CONFIG_CUSTOM_CFG2_TYPE
|
||||
//#define CONFIG_CUSTOM_CFG2_VALUE
|
||||
|
||||
//#define CONFIG_CUSTOM_CFG3_TYPE
|
||||
//#define CONFIG_CUSTOM_CFG3_VALUE
|
||||
|
||||
|
||||
//#define CONFIG_VDDIO_LVD_LEVEL 4 ////VDDIO_LVD挡位,0: 1.9V 1: 2.0V 2: 2.1V 3: 2.2V 4: 2.3V 5: 2.4V 6: 2.5V 7: 2.6V
|
||||
|
||||
//with single-bank mode,actual vm size should larger this VM_LEAST_SIZE,and dual bank mode,actual vm size equals this;
|
||||
#define CONFIG_VM_LEAST_SIZE 8K
|
||||
//config whether erased this area when do a update,1-No Operation,0-Erase
|
||||
#define CONFIG_VM_OPT 1
|
||||
|
||||
//config whether erased this area when do a update,1-No Operation,0-Erase
|
||||
#define CONFIG_BTIF_OPT 1
|
||||
|
||||
//reserved two custom cfg area for the future definition
|
||||
//#define CONFIG_RESERVED_AREA1 EXIF1
|
||||
#ifdef CONFIG_RESERVED_AREA1
|
||||
#define CONFIG_RESERVED_AREA1_ADDR AUTO
|
||||
#define CONFIG_RESERVED_AREA1_LEN 0x1000
|
||||
#define CONFIG_RESERVED_AREA1_OPT 1
|
||||
//#define CONFIG_RESERVED_AREA1_FILE anc_gains.bin
|
||||
#endif
|
||||
|
||||
//#define CONFIG_RESERVED_AREA2 EXIF2
|
||||
#ifdef CONFIG_RESERVED_AREA2
|
||||
#define CONFIG_RESERVED_AREA2_ADDR AUTO
|
||||
#define CONFIG_RESERVED_AREA2_LEN 0x1000
|
||||
#define CONFIG_RESERVED_AREA2_OPT 1
|
||||
//#define CONFIG_RESERVED_AREA2_FILE anc_gains.bin
|
||||
#endif
|
||||
|
||||
/* Above Macros Only For Post Bulid Configuaration */
|
||||
#endif /* #ifdef CONFIG_BOARD_JL701N_DEMO */
|
||||
|
||||
#endif /* #ifndef CONFIG_BOARD_JL701N_DEMO_POST_BUILD_CFG_H */
|
||||
|
||||
@ -1,418 +0,0 @@
|
||||
#include "system/includes.h"
|
||||
#include "media/includes.h"
|
||||
#include "tone_player.h"
|
||||
#include "earphone.h"
|
||||
|
||||
#include "app_config.h"
|
||||
#include "app_action.h"
|
||||
#include "app_task.h"
|
||||
|
||||
#include "btstack/avctp_user.h"
|
||||
#include "btstack/btstack_task.h"
|
||||
#include "btctrler/btctrler_task.h"
|
||||
#include "btstack/frame_queque.h"
|
||||
#include "user_cfg.h"
|
||||
// #include "aec_user.h"
|
||||
#include "classic/hci_lmp.h"
|
||||
#include "bt_common.h"
|
||||
#include "bt_ble.h"
|
||||
#include "bt_tws.h"
|
||||
#include "pbg_user.h"
|
||||
#include "btstack/bluetooth.h"
|
||||
#include "colorful_lights/colorful_lights.h"
|
||||
|
||||
#include "app_chargestore.h"
|
||||
#include "jl_kws/jl_kws_api.h"
|
||||
|
||||
#include "asm/charge.h"
|
||||
#include "app_charge.h"
|
||||
#include "ui_manage.h"
|
||||
|
||||
#include "app_chargestore.h"
|
||||
#include "app_umidigi_chargestore.h"
|
||||
#include "app_testbox.h"
|
||||
#include "app_online_cfg.h"
|
||||
#include "app_main.h"
|
||||
#include "app_power_manage.h"
|
||||
#include "gSensor/gSensor_manage.h"
|
||||
#include "key_event_deal.h"
|
||||
#include "classic/tws_api.h"
|
||||
#include "asm/pwm_led.h"
|
||||
#include "ir_sensor/ir_manage.h"
|
||||
#include "in_ear_detect/in_ear_manage.h"
|
||||
#include "vol_sync.h"
|
||||
#include "bt_background.h"
|
||||
#include "default_event_handler.h"
|
||||
|
||||
|
||||
#if(USE_DMA_UART_TEST) //使用dm串口测试时不能同时打开
|
||||
#define MY_SNIFF_EN 0
|
||||
#else
|
||||
#define MY_SNIFF_EN 1 //默认打开
|
||||
#endif
|
||||
|
||||
///////////////////////////////////////////////////////////////////////////////////////////////////
|
||||
//变量
|
||||
u8 init_ok = 0;
|
||||
static u8 sniff_out = 0;
|
||||
unsigned char xtell_bl_state=0; //存放经典蓝牙的连接状态,0断开,1是连接
|
||||
u8 bt_newname =0;
|
||||
unsigned char xt_ble_new_name[9] = "CM-11111";
|
||||
static u16 play_poweron_ok_timer_id = 0;
|
||||
///////////////////////////////////////////////////////////////////////////////////////////////////
|
||||
|
||||
|
||||
u8 get_bt_init_status(void)
|
||||
{
|
||||
return init_ok;
|
||||
}
|
||||
|
||||
u8 get_sniff_out_status()
|
||||
{
|
||||
return sniff_out;
|
||||
}
|
||||
void clear_sniff_out_status()
|
||||
{
|
||||
sniff_out = 0;
|
||||
}
|
||||
|
||||
|
||||
|
||||
///////////////////////////////////////////////////////////////////////////////////////////////////
|
||||
/*
|
||||
* 模式状态机, 通过start_app()控制状态切换
|
||||
*/
|
||||
/* extern int audio_mic_init(); */
|
||||
|
||||
static int state_machine(struct application *app, enum app_state state, struct intent *it){
|
||||
int error = 0;
|
||||
static u8 tone_player_err = 0;
|
||||
r_printf("bt_state_machine=%d\n", state);
|
||||
switch (state) {
|
||||
case APP_STA_CREATE:
|
||||
/* set_adjust_conn_dac_check(0); */
|
||||
STATUS *p_tone = get_tone_config();
|
||||
tone_play_index(p_tone->bt_init_ok, 1);
|
||||
break;
|
||||
case APP_STA_START:
|
||||
if (!it) {
|
||||
break;
|
||||
}
|
||||
switch (it->action) {
|
||||
case ACTION_EARPHONE_MAIN:
|
||||
/*
|
||||
* earphone 模式初始化
|
||||
*/
|
||||
clk_set("sys", BT_NORMAL_HZ);
|
||||
u32 sys_clk = clk_get("sys");
|
||||
bt_pll_para(TCFG_CLOCK_OSC_HZ, sys_clk, 0, 0);
|
||||
/* bredr_set_dut_enble(1, 1); */
|
||||
bt_function_select_init();
|
||||
bredr_handle_register();
|
||||
EARPHONE_STATE_INIT();
|
||||
btstack_init();
|
||||
sys_auto_shut_down_enable();
|
||||
bt_sniff_feature_init();
|
||||
sys_auto_sniff_controle(MY_SNIFF_EN, NULL);
|
||||
app_var.dev_volume = -1;
|
||||
break;
|
||||
case ACTION_A2DP_START: //蓝牙音频传输协议
|
||||
break;
|
||||
case ACTION_BY_KEY_MODE:
|
||||
break;
|
||||
case ACTION_TONE_PLAY:
|
||||
STATUS *p_tone = get_tone_config();
|
||||
tone_play_index(p_tone->bt_init_ok, 1);
|
||||
break;
|
||||
case ACTION_DO_NOTHING:
|
||||
break;
|
||||
}
|
||||
break;
|
||||
case APP_STA_PAUSE:
|
||||
break;
|
||||
case APP_STA_RESUME:
|
||||
//恢复前台运行
|
||||
sys_auto_shut_down_disable();
|
||||
sys_key_event_enable();
|
||||
break;
|
||||
case APP_STA_STOP:
|
||||
break;
|
||||
case APP_STA_DESTROY:
|
||||
r_printf("APP_STA_DESTROY\n");
|
||||
if (!app_var.goto_poweroff_flag) {
|
||||
bt_app_exit(NULL);
|
||||
}
|
||||
break;
|
||||
}
|
||||
|
||||
return error;
|
||||
}
|
||||
|
||||
///////////////////////////////////////////////////////////////////////////////////////////////////
|
||||
//handle
|
||||
|
||||
static void play_poweron_ok_timer(void *priv)
|
||||
{
|
||||
app_var.wait_timer_do = 0;
|
||||
|
||||
log_d("\n-------play_poweron_ok_timer-------\n", priv);
|
||||
if (is_dac_power_off()) {
|
||||
#if TCFG_USER_TWS_ENABLE
|
||||
bt_tws_poweron();
|
||||
#else
|
||||
bt_wait_connect_and_phone_connect_switch(0);
|
||||
#endif
|
||||
return;
|
||||
}
|
||||
|
||||
app_var.wait_timer_do = sys_timeout_add(priv, play_poweron_ok_timer, 100);
|
||||
}
|
||||
|
||||
static void play_bt_connect_dly(void *priv)
|
||||
{
|
||||
app_var.wait_timer_do = 0;
|
||||
|
||||
log_d("\n-------play_bt_connect_dly-------\n", priv);
|
||||
|
||||
if (!app_var.goto_poweroff_flag) {
|
||||
STATUS *p_tone = get_tone_config();
|
||||
tone_play_index(p_tone->bt_connect_ok, 1);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
|
||||
static int bt_connction_status_event_handler(struct bt_event *bt)
|
||||
{
|
||||
STATUS *p_tone = get_tone_config();
|
||||
u8 *phone_number = NULL;
|
||||
|
||||
switch (bt->event) {
|
||||
case BT_STATUS_INIT_OK:
|
||||
/*
|
||||
* 蓝牙初始化完成
|
||||
*/
|
||||
log_info("BT_STATUS_INIT_OK\n");
|
||||
init_ok = 1;
|
||||
__set_sbc_cap_bitpool(38);
|
||||
|
||||
#if (TCFG_USER_BLE_ENABLE)
|
||||
if (BT_MODE_IS(BT_BQB)) {
|
||||
ble_bqb_test_thread_init();
|
||||
} else {
|
||||
#if !TCFG_WIRELESS_MIC_ENABLE
|
||||
bt_ble_init();
|
||||
#endif
|
||||
}
|
||||
#endif
|
||||
bt_init_ok_search_index();
|
||||
#if TCFG_TEST_BOX_ENABLE
|
||||
testbox_set_bt_init_ok(1);
|
||||
#endif
|
||||
|
||||
#if ((CONFIG_BT_MODE == BT_BQB)||(CONFIG_BT_MODE == BT_PER))
|
||||
bt_wait_phone_connect_control(1);
|
||||
#else
|
||||
if (is_dac_power_off()) {
|
||||
bt_wait_connect_and_phone_connect_switch(0);
|
||||
} else {
|
||||
app_var.wait_timer_do = sys_timeout_add(NULL, play_poweron_ok_timer, 100);
|
||||
}
|
||||
#endif
|
||||
|
||||
/*if (app_var.play_poweron_tone) {
|
||||
tone_play_index(p_tone->power_on, 1);
|
||||
}*/
|
||||
break;
|
||||
|
||||
case BT_STATUS_SECOND_CONNECTED:
|
||||
clear_current_poweron_memory_search_index(0);
|
||||
case BT_STATUS_FIRST_CONNECTED:
|
||||
log_info("BT_STATUS_CONNECTED\n");
|
||||
xtell_bl_state = 1; //蓝牙连接成功 置1
|
||||
if(strcmp(xt_ble_new_name,"CM-1111") != 0){
|
||||
//蓝牙连接成功
|
||||
bt_newname =1;
|
||||
u8 temp[5]={0xBB,0xBE,0x02,0x04,0x00};
|
||||
temp[4] = xtell_bl_state; //经典蓝牙连接状态
|
||||
send_data_to_ble_client(&temp,5);
|
||||
}
|
||||
earphone_change_pwr_mode(PWR_DCDC15, 3000);
|
||||
sys_auto_shut_down_disable();
|
||||
|
||||
ui_update_status(STATUS_BT_CONN); //单台在此处设置连接状态,对耳的连接状态需要同步,在bt_tws.c中去设置
|
||||
|
||||
/* tone_play(TONE_CONN); */
|
||||
/*os_time_dly(40); // for test*/
|
||||
log_info("tone status:%d\n", tone_get_status());
|
||||
if (get_call_status() == BT_CALL_HANGUP) {
|
||||
if (app_var.phone_dly_discon_time) {
|
||||
sys_timeout_del(app_var.phone_dly_discon_time);
|
||||
app_var.phone_dly_discon_time = 0;
|
||||
} else {
|
||||
app_var.wait_timer_do = sys_timeout_add(NULL, play_bt_connect_dly, 1600);
|
||||
/* tone_play_index(p_tone->bt_connect_ok, 1); */
|
||||
}
|
||||
}
|
||||
|
||||
/*int timeout = 5000 + rand32() % 10000;
|
||||
sys_timeout_add(NULL, connect_phone_test, timeout);*/
|
||||
break;
|
||||
case BT_STATUS_FIRST_DISCONNECT:
|
||||
case BT_STATUS_SECOND_DISCONNECT:
|
||||
log_info("BT_STATUS_DISCONNECT\n");
|
||||
xtell_bl_state = 0; //断开蓝牙 清0
|
||||
//蓝牙断开连接
|
||||
if(bt_newname){ //已经改成新蓝牙名字,断开才播报
|
||||
bt_newname=0;
|
||||
u8 temp[5]={0xBB,0xBE,0x02,0x04,0x00};
|
||||
temp[4] = xtell_bl_state; //经典蓝牙连接状态
|
||||
send_data_to_ble_client(&temp,5);
|
||||
}
|
||||
if (app_var.goto_poweroff_flag) {
|
||||
/*关机不播断开提示音*/
|
||||
/*关机时不改UI*/
|
||||
break;
|
||||
}
|
||||
bt_discon_dly_handle(NULL);
|
||||
break;
|
||||
|
||||
//phone status deal
|
||||
case BT_STATUS_PHONE_INCOME:
|
||||
break;
|
||||
case BT_STATUS_PHONE_OUT:
|
||||
|
||||
break;
|
||||
case BT_STATUS_PHONE_ACTIVE:
|
||||
break;
|
||||
case BT_STATUS_PHONE_HANGUP:
|
||||
break;
|
||||
case BT_STATUS_PHONE_NUMBER:
|
||||
break;
|
||||
case BT_STATUS_INBAND_RINGTONE: //铃声
|
||||
break;
|
||||
case BT_STATUS_CALL_VOL_CHANGE:
|
||||
|
||||
break;
|
||||
case BT_STATUS_SNIFF_STATE_UPDATE:
|
||||
log_info(" BT_STATUS_SNIFF_STATE_UPDATE %d\n", bt->value); //0退出SNIFF
|
||||
if (bt->value == 0) {
|
||||
sniff_out = 1;
|
||||
sys_auto_sniff_controle(MY_SNIFF_EN, bt->args);
|
||||
} else {
|
||||
sys_auto_sniff_controle(0, bt->args);
|
||||
}
|
||||
break;
|
||||
|
||||
case BT_STATUS_LAST_CALL_TYPE_CHANGE:
|
||||
break;
|
||||
|
||||
case BT_STATUS_CONN_A2DP_CH:
|
||||
case BT_STATUS_CONN_HFP_CH:
|
||||
|
||||
if ((!is_1t2_connection()) && (get_current_poweron_memory_search_index(NULL))) { //回连下一个device
|
||||
if (get_esco_coder_busy_flag()) {
|
||||
clear_current_poweron_memory_search_index(0);
|
||||
} else {
|
||||
user_send_cmd_prepare(USER_CTRL_START_CONNECTION, 0, NULL);
|
||||
}
|
||||
}
|
||||
break;
|
||||
case BT_STATUS_PHONE_MANUFACTURER:
|
||||
break;
|
||||
case BT_STATUS_VOICE_RECOGNITION:
|
||||
|
||||
break;
|
||||
case BT_STATUS_AVRCP_INCOME_OPID:
|
||||
#define AVC_VOLUME_UP 0x41
|
||||
#define AVC_VOLUME_DOWN 0x42
|
||||
log_info("BT_STATUS_AVRCP_INCOME_OPID:%d\n", bt->value);
|
||||
if (bt->value == AVC_VOLUME_UP) {
|
||||
|
||||
}
|
||||
if (bt->value == AVC_VOLUME_DOWN) {
|
||||
|
||||
}
|
||||
break;
|
||||
default:
|
||||
log_info(" BT STATUS DEFAULT\n");
|
||||
break;
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
||||
|
||||
static int event_handler(struct application *app, struct sys_event *event)
|
||||
{
|
||||
if (SYS_EVENT_REMAP(event)) {
|
||||
g_printf("****SYS_EVENT_REMAP**** \n");
|
||||
return 0;
|
||||
}
|
||||
|
||||
switch (event->type) {
|
||||
case SYS_KEY_EVENT:
|
||||
break;
|
||||
case SYS_BT_EVENT:
|
||||
/*
|
||||
* 蓝牙事件处理
|
||||
*/
|
||||
if ((u32)event->arg == SYS_BT_EVENT_TYPE_CON_STATUS) {
|
||||
printf("in event_handler:bt_connction_status_event_handler");
|
||||
bt_connction_status_event_handler(&event->u.bt);
|
||||
} else if ((u32)event->arg == SYS_BT_EVENT_TYPE_HCI_STATUS) {
|
||||
bt_hci_event_handler(&event->u.bt);
|
||||
}
|
||||
break;
|
||||
case SYS_DEVICE_EVENT:
|
||||
/*
|
||||
* 系统设备事件处理
|
||||
*/
|
||||
if ((u32)event->arg == DEVICE_EVENT_FROM_CHARGE) {
|
||||
|
||||
} else if ((u32)event->arg == DEVICE_EVENT_FROM_POWER) {
|
||||
return app_power_event_handler(&event->u.dev);
|
||||
}
|
||||
#if TCFG_UMIDIGI_BOX_ENABLE
|
||||
else if ((u32)event->arg == DEVICE_EVENT_UMIDIGI_CHARGE_STORE) {
|
||||
app_umidigi_chargestore_event_handler(&event->u.umidigi_chargestore);
|
||||
}
|
||||
#endif
|
||||
#if TCFG_TEST_BOX_ENABLE
|
||||
else if ((u32)event->arg == DEVICE_EVENT_TEST_BOX) {
|
||||
app_testbox_event_handler(&event->u.testbox);
|
||||
}
|
||||
#endif
|
||||
break;
|
||||
|
||||
default:
|
||||
return false;
|
||||
}
|
||||
|
||||
SYS_EVENT_HANDLER_SPECIFIC(event);
|
||||
#ifdef CONFIG_BT_BACKGROUND_ENABLE
|
||||
if (app) {
|
||||
default_event_handler(event);
|
||||
}
|
||||
#endif
|
||||
return false;
|
||||
|
||||
}
|
||||
|
||||
///////////////////////////////////////////////////////////////////////////////////////////////////
|
||||
|
||||
static const struct application_operation app_handler_ops = {
|
||||
.state_machine = state_machine,
|
||||
.event_handler = event_handler,
|
||||
};
|
||||
|
||||
|
||||
/*
|
||||
* 注册earphone模式
|
||||
*/
|
||||
REGISTER_APPLICATION(app_handler) = {
|
||||
.name = "handler",
|
||||
.action = ACTION_EARPHONE_MAIN,
|
||||
.ops = &app_handler_ops,
|
||||
.state = APP_STA_DESTROY,
|
||||
};
|
||||
@ -1,31 +0,0 @@
|
||||
#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
|
||||
|
||||
@ -1,12 +0,0 @@
|
||||
#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_
|
||||
|
||||
@ -1,13 +0,0 @@
|
||||
#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_
|
||||
|
||||
@ -1,17 +0,0 @@
|
||||
#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_
|
||||
@ -1,78 +0,0 @@
|
||||
#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_
|
||||
@ -1,555 +0,0 @@
|
||||
#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 1 //是否支持TWS同步升级
|
||||
#define OTA_TWS_SAME_TIME_NEW 1 //使用新的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
|
||||
@ -1,90 +0,0 @@
|
||||
#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
|
||||
@ -1,8 +0,0 @@
|
||||
#ifndef CONFIG_APP_MUSIC_H
|
||||
#define CONFIG_APP_MUSIC_H
|
||||
|
||||
void app_music_exit();
|
||||
int music_app_check(void);
|
||||
|
||||
#endif
|
||||
|
||||
@ -1,13 +0,0 @@
|
||||
#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
|
||||
|
||||
@ -1,39 +0,0 @@
|
||||
#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
|
||||
|
||||
@ -1,6 +0,0 @@
|
||||
#ifndef CONFIG_APP_SD_MUSIC_H
|
||||
#define CONFIG_APP_SD_MUSIC_H
|
||||
|
||||
int music_app_check(void);//music 在线检测 切换模式判断使用
|
||||
|
||||
#endif
|
||||
@ -1,31 +0,0 @@
|
||||
#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
|
||||
@ -1,18 +0,0 @@
|
||||
#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_
|
||||
@ -1,50 +0,0 @@
|
||||
#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
|
||||
|
||||
@ -1,69 +0,0 @@
|
||||
|
||||
#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_*/
|
||||
|
||||
@ -1,43 +0,0 @@
|
||||
#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
|
||||
|
||||
@ -1,48 +0,0 @@
|
||||
#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
|
||||
|
||||
@ -1,26 +0,0 @@
|
||||
#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
|
||||
@ -1,194 +0,0 @@
|
||||
#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
|
||||
@ -1,41 +0,0 @@
|
||||
#ifndef DEFAULT_EVENT_HANDLER_H
|
||||
#define DEFAULT_EVENT_HANDLER_H
|
||||
|
||||
|
||||
#include "system/includes.h"
|
||||
|
||||
|
||||
void default_event_handler(struct sys_event *event);
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
#endif
|
||||
|
||||
@ -1,272 +0,0 @@
|
||||
#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
|
||||
@ -1,100 +0,0 @@
|
||||
#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
|
||||
@ -1,31 +0,0 @@
|
||||
#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
|
||||
|
||||
|
||||
@ -1,157 +0,0 @@
|
||||
#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
|
||||
|
||||
|
||||
@ -1,39 +0,0 @@
|
||||
#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
|
||||
@ -1,68 +0,0 @@
|
||||
#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_ */
|
||||
@ -1,9 +0,0 @@
|
||||
#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
|
||||
@ -1,104 +0,0 @@
|
||||
#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__
|
||||
@ -1,12 +0,0 @@
|
||||
#ifndef _WIRELESS_MIC_TEST_
|
||||
#define _WIRELESS_MIC_TEST_
|
||||
|
||||
#include "system/includes.h"
|
||||
|
||||
// struct adapter_media {
|
||||
|
||||
// };
|
||||
|
||||
|
||||
|
||||
#endif
|
||||
@ -1,743 +0,0 @@
|
||||
#include "app_config.h"
|
||||
#include "asm/charge.h"
|
||||
#include "asm/pwm_led.h"
|
||||
#include "asm/power_interface.h"
|
||||
#include "ui_manage.h"
|
||||
#include "system/event.h"
|
||||
#include "system/app_core.h"
|
||||
#include "system/includes.h"
|
||||
#include "app_action.h"
|
||||
#include "asm/wdt.h"
|
||||
#include "app_power_manage.h"
|
||||
#include "app_chargestore.h"
|
||||
#include "app_testbox.h"
|
||||
#include "btstack/avctp_user.h"
|
||||
#include "app_action.h"
|
||||
#include "app_main.h"
|
||||
#include "bt_tws.h"
|
||||
#include "usb/otg.h"
|
||||
#include "bt_common.h"
|
||||
|
||||
#if TCFG_AUDIO_ANC_ENABLE
|
||||
#include "audio_anc.h"
|
||||
#endif
|
||||
|
||||
#if NTC_DET_EN
|
||||
#include "ntc_det_api.h"
|
||||
#endif
|
||||
|
||||
#if TCFG_ANC_BOX_ENABLE
|
||||
#include "app_ancbox.h"
|
||||
#endif
|
||||
|
||||
#define LOG_TAG_CONST APP_CHARGE
|
||||
#define LOG_TAG "[APP_CHARGE]"
|
||||
#define LOG_ERROR_ENABLE
|
||||
#define LOG_DEBUG_ENABLE
|
||||
#define LOG_INFO_ENABLE
|
||||
/* #define LOG_DUMP_ENABLE */
|
||||
#define LOG_CLI_ENABLE
|
||||
#include "debug.h"
|
||||
|
||||
extern void sys_enter_soft_poweroff(void *priv);
|
||||
extern void gSensor_wkupup_enable(void);
|
||||
extern void gSensor_wkupup_disable(void);
|
||||
extern u32 dual_bank_update_exist_flag_get(void);
|
||||
extern u32 classic_update_task_exist_flag_get(void);
|
||||
extern void lp_touch_key_disable(void);
|
||||
extern void linein_det_disable(void);
|
||||
extern void linein_det_enable(void);
|
||||
|
||||
#if TCFG_CHARGE_ENABLE
|
||||
|
||||
static u8 charge_full_flag = 0;
|
||||
#if TCFG_TEST_BOX_ENABLE || TCFG_ANC_BOX_ENABLE
|
||||
static int ldo5v_keep_timer = 0;
|
||||
#endif
|
||||
static u8 delay_timeout = 20;
|
||||
static int ldo5v_in_reset_timer = 0;
|
||||
static void ldo5v_in_reset_delay(void)
|
||||
{
|
||||
int deal_state = tws_api_get_tws_state();
|
||||
u8 cpu_reset_flag = 1;
|
||||
if (delay_timeout) {
|
||||
delay_timeout--;
|
||||
}
|
||||
if (deal_state & TWS_STA_SIBLING_CONNECTED && deal_state & TWS_STA_PHONE_CONNECTED && !(deal_state & TWS_STA_MONITOR_START)) {
|
||||
//tws已连接 手机已连接 从机未监听手机
|
||||
cpu_reset_flag = 0;
|
||||
} else {
|
||||
if (deal_state & TWS_STA_SIBLING_CONNECTED && deal_state & TWS_STA_ESCO_OPEN && !get_esco_coder_busy_flag()) {
|
||||
//手机有请求但没建立ESCO链路
|
||||
cpu_reset_flag = 0;
|
||||
}
|
||||
}
|
||||
printf("----------------ldo5v_in_reset_delay tws state:%x, delay_timeout:%d, cpu_reset_flag:%d\n", deal_state, delay_timeout, cpu_reset_flag);
|
||||
if (delay_timeout == 0 || cpu_reset_flag == 1) {
|
||||
if (ldo5v_in_reset_timer) {
|
||||
sys_timer_del(ldo5v_in_reset_timer);
|
||||
ldo5v_in_reset_timer = 0;
|
||||
}
|
||||
sys_enter_soft_poweroff((void *)1);
|
||||
}
|
||||
}
|
||||
|
||||
extern void power_event_to_user(u8 event);
|
||||
|
||||
u8 get_charge_full_flag(void)
|
||||
{
|
||||
return charge_full_flag;
|
||||
}
|
||||
|
||||
void charge_start_deal(void)
|
||||
{
|
||||
log_info("%s\n", __FUNCTION__);
|
||||
|
||||
power_set_mode(PWR_LDO15);
|
||||
|
||||
struct application *app;
|
||||
app = get_current_app();
|
||||
//在IDLE时才开启充电UI
|
||||
if (app && (!strcmp(app->name, APP_NAME_IDLE))) {
|
||||
ui_update_status(STATUS_CHARGE_START);
|
||||
}
|
||||
}
|
||||
|
||||
static void ldo5v_keep_delay_deal(void *priv)
|
||||
{
|
||||
log_info("%s\n", __func__);
|
||||
|
||||
#if TCFG_TEST_BOX_ENABLE
|
||||
ldo5v_keep_timer = 0;
|
||||
if (testbox_get_status()) {
|
||||
log_info("testbox online!\n");
|
||||
return;
|
||||
}
|
||||
#endif
|
||||
|
||||
#if TCFG_ANC_BOX_ENABLE
|
||||
ldo5v_keep_timer = 0;
|
||||
if (ancbox_get_status()) {
|
||||
log_info("ancbox online!\n");
|
||||
return;
|
||||
}
|
||||
#endif
|
||||
|
||||
struct application *app;
|
||||
app = get_current_app();
|
||||
if (app) {
|
||||
if (strcmp(app->name, APP_NAME_IDLE)) {
|
||||
sys_enter_soft_poweroff((void *)2);
|
||||
}
|
||||
}
|
||||
|
||||
pwm_led_mode_set(PWM_LED_ALL_OFF);
|
||||
os_time_dly(30);
|
||||
pwm_led_mode_set(PWM_LED1_ON);
|
||||
os_time_dly(40);
|
||||
|
||||
//兼容一些充电仓5v输出慢的时候会导致无法充电的问题
|
||||
if (get_lvcmp_det()) {
|
||||
log_info("...charge ing...\n");
|
||||
cpu_reset();
|
||||
}
|
||||
|
||||
log_info("get_charge_online_flag:%d %d\n", get_charge_online_flag(), get_ldo5v_online_hw());
|
||||
if (get_ldo5v_online_hw() && get_charge_online_flag()) {
|
||||
power_set_soft_poweroff();
|
||||
} else {
|
||||
#if TCFG_CHARGE_OFF_POWERON_NE
|
||||
cpu_reset();
|
||||
#else
|
||||
charge_check_and_set_pinr(1);
|
||||
power_set_soft_poweroff();
|
||||
#endif
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
/*ldoin电压大于拔出电压(0.6V左右)且小于VBat电压时调用该函数进行一些错误提示或其他处理*/
|
||||
void ldo5v_keep_deal(void)
|
||||
{
|
||||
|
||||
log_info("%s\n", __func__);
|
||||
|
||||
//插入交换
|
||||
power_event_to_user(POWER_EVENT_POWER_CHANGE);
|
||||
|
||||
#if TCFG_GSENSOR_ENABLE
|
||||
//在舱关闭gSensor
|
||||
gSensor_wkupup_disable();
|
||||
#endif
|
||||
|
||||
#if TCFG_LINEIN_ENABLE
|
||||
//入舱关闭linein
|
||||
linein_det_disable();
|
||||
#endif
|
||||
|
||||
#if TCFG_LP_TOUCH_KEY_ENABLE
|
||||
extern void lp_touch_key_charge_mode_enter();
|
||||
lp_touch_key_charge_mode_enter();
|
||||
#endif /* #if TCFG_LP_TOUCH_KEY_ENABLE */
|
||||
|
||||
#if TCFG_GX8002_NPU_ENABLE
|
||||
extern void gx8002_module_suspend(u8 keep_vddio);
|
||||
gx8002_module_suspend(0);
|
||||
#endif /* #if TCFG_GX8002_NPU_ENABLE */
|
||||
|
||||
|
||||
charge_check_and_set_pinr(0);
|
||||
|
||||
#if TCFG_AUDIO_ANC_ENABLE
|
||||
#if TCFG_ANC_BOX_ENABLE
|
||||
if (!ancbox_get_status())
|
||||
#endif
|
||||
{
|
||||
anc_suspend();
|
||||
}
|
||||
#endif
|
||||
|
||||
if (get_charge_poweron_en() == 0) {
|
||||
#if TCFG_CHARGESTORE_ENABLE
|
||||
//智能充电舱不处理充电err
|
||||
struct application *app;
|
||||
app = get_current_app();
|
||||
if (app && (!strcmp(app->name, APP_NAME_IDLE))) {
|
||||
ui_update_status(STATUS_CHARGE_LDO5V_OFF);
|
||||
}
|
||||
|
||||
#else //TCFG_CHARGESTORE_ENABLE
|
||||
|
||||
#if defined(TCFG_CHARGE_KEEP_UPDATA) && TCFG_CHARGE_KEEP_UPDATA
|
||||
if (dual_bank_update_exist_flag_get() || classic_update_task_exist_flag_get()) {
|
||||
return;
|
||||
}
|
||||
#endif
|
||||
|
||||
#if TCFG_TEST_BOX_ENABLE || TCFG_ANC_BOX_ENABLE
|
||||
if (testbox_get_ex_enter_dut_flag()) {
|
||||
putchar('D');
|
||||
return;
|
||||
}
|
||||
|
||||
if (testbox_get_ex_enter_storage_mode_flag()) {
|
||||
putchar('S');
|
||||
return;
|
||||
}
|
||||
|
||||
if (ldo5v_keep_timer == 0) {
|
||||
//延时执行避免测试盒通信不上
|
||||
ldo5v_keep_timer = sys_timeout_add(NULL, ldo5v_keep_delay_deal, 250);
|
||||
}
|
||||
#else
|
||||
ldo5v_keep_delay_deal(NULL);
|
||||
#endif//TCFG_TEST_BOX_ENABLE || TCFG_ANC_BOX_ENABLE
|
||||
#endif//TCFG_CHARGESTORE_ENABLE
|
||||
} else {
|
||||
ui_update_status(STATUS_CHARGE_ERR);
|
||||
}
|
||||
}
|
||||
|
||||
extern u8 umidigi_chargestore_get_cover_status(void);
|
||||
void charge_full_deal(void)
|
||||
{
|
||||
log_info("%s\n", __func__);
|
||||
|
||||
charge_full_flag = 1;
|
||||
|
||||
charge_close();
|
||||
if (get_charge_poweron_en() == 0) {
|
||||
|
||||
#if (TCFG_LP_TOUCH_KEY_ENABLE && CHARGING_CLEAN_PHONE_INFO)
|
||||
extern void lp_touch_key_charge_mode_enter();
|
||||
lp_touch_key_charge_mode_enter();
|
||||
#endif
|
||||
/* power_set_soft_poweroff(); */
|
||||
#if TCFG_USER_TWS_ENABLE
|
||||
|
||||
#else
|
||||
ui_update_status(STATUS_CHARGE_FULL);
|
||||
#endif
|
||||
#if (!TCFG_CHARGESTORE_ENABLE)
|
||||
#if TCFG_UMIDIGI_BOX_ENABLE
|
||||
//当前为开盖
|
||||
if (umidigi_chargestore_get_cover_status() == 1) {
|
||||
vbat_timer_delete();
|
||||
}
|
||||
#else
|
||||
vbat_timer_delete();
|
||||
#endif
|
||||
#endif
|
||||
} else {
|
||||
ui_update_status(STATUS_CHARGE_FULL);
|
||||
}
|
||||
}
|
||||
|
||||
void charge_close_deal(void)
|
||||
{
|
||||
log_info("%s\n", __FUNCTION__);
|
||||
|
||||
power_set_mode(TCFG_LOWPOWER_POWER_SEL);
|
||||
|
||||
#if TCFG_USER_TWS_ENABLE
|
||||
//在idle的时候才执行充电关闭的UI
|
||||
struct application *app;
|
||||
app = get_current_app();
|
||||
if (app && (!strcmp(app->name, APP_NAME_IDLE))) {
|
||||
ui_update_status(STATUS_CHARGE_CLOSE);
|
||||
}
|
||||
#endif
|
||||
}
|
||||
|
||||
|
||||
void charge_ldo5v_in_deal(void)
|
||||
{
|
||||
log_info("%s\n", __FUNCTION__);
|
||||
|
||||
|
||||
#if TCFG_IRSENSOR_ENABLE
|
||||
if (get_bt_tws_connect_status()) {
|
||||
tws_api_sync_call_by_uuid('T', SYNC_CMD_EARPHONE_CHAREG_START, 300);
|
||||
}
|
||||
#endif
|
||||
|
||||
//插入交换
|
||||
power_event_to_user(POWER_EVENT_POWER_CHANGE);
|
||||
|
||||
charge_full_flag = 0;
|
||||
|
||||
#if TCFG_GSENSOR_ENABLE
|
||||
//入舱关闭gSensor
|
||||
gSensor_wkupup_disable();
|
||||
#endif
|
||||
|
||||
#if TCFG_LINEIN_ENABLE
|
||||
//入舱关闭linein
|
||||
linein_det_disable();
|
||||
#endif
|
||||
|
||||
#if (TCFG_LP_TOUCH_KEY_ENABLE && !CHARGING_CLEAN_PHONE_INFO)
|
||||
extern void lp_touch_key_charge_mode_enter();
|
||||
lp_touch_key_charge_mode_enter();
|
||||
#endif /* #if TCFG_LP_TOUCH_KEY_ENABLE */
|
||||
|
||||
#if TCFG_GX8002_NPU_ENABLE
|
||||
extern void gx8002_module_suspend(u8 keep_vddio);
|
||||
gx8002_module_suspend(0);
|
||||
#endif /* #if TCFG_GX8002_NPU_ENABLE */
|
||||
|
||||
charge_check_and_set_pinr(0);
|
||||
|
||||
#if TCFG_AUDIO_ANC_ENABLE
|
||||
anc_suspend();
|
||||
#endif
|
||||
|
||||
#if TCFG_TEST_BOX_ENABLE
|
||||
testbox_clear_status();
|
||||
if (ldo5v_keep_timer) {
|
||||
sys_timeout_del(ldo5v_keep_timer);
|
||||
ldo5v_keep_timer = 0;
|
||||
}
|
||||
#endif
|
||||
|
||||
#if TCFG_ANC_BOX_ENABLE
|
||||
ancbox_clear_status();
|
||||
if (ldo5v_keep_timer) {
|
||||
sys_timeout_del(ldo5v_keep_timer);
|
||||
ldo5v_keep_timer = 0;
|
||||
}
|
||||
#endif
|
||||
|
||||
#if TCFG_CHARGESTORE_ENABLE
|
||||
chargestore_shutdown_reset();
|
||||
#endif
|
||||
|
||||
if (get_charge_poweron_en() == 0) {
|
||||
#if defined(TCFG_CHARGE_KEEP_UPDATA) && TCFG_CHARGE_KEEP_UPDATA
|
||||
if (dual_bank_update_exist_flag_get() || classic_update_task_exist_flag_get()) {
|
||||
return;
|
||||
}
|
||||
#endif
|
||||
struct application *app;
|
||||
app = get_current_app();
|
||||
|
||||
#if TCFG_WIRELESS_MIC_ENABLE
|
||||
if (strcmp(app->name, APP_NAME_IDLE) != 0) {
|
||||
sys_enter_soft_poweroff((void *)1);
|
||||
}
|
||||
#endif
|
||||
if (app && strcmp(app->name, APP_NAME_IDLE)) {
|
||||
#if (TCFG_CHARGESTORE_ENABLE && TCFG_BLE_DEMO_SELECT == DEF_BLE_DEMO_ADV)
|
||||
if (!chargestore_check_going_to_poweroff()) {
|
||||
#endif
|
||||
#if TCFG_USER_TWS_ENABLE
|
||||
printf("----------------tws_api_get_tws_state %x\n", tws_api_get_tws_state());
|
||||
int deal_state = tws_api_get_tws_state();
|
||||
if (tws_api_get_role() == TWS_ROLE_MASTER && deal_state & TWS_STA_SIBLING_CONNECTED && deal_state & TWS_STA_PHONE_CONNECTED && !(deal_state & TWS_STA_MONITOR_START)) {
|
||||
if (ldo5v_in_reset_timer == 0) {
|
||||
delay_timeout = 30;
|
||||
ldo5v_in_reset_timer = sys_timer_add(NULL, ldo5v_in_reset_delay, 100);
|
||||
}
|
||||
} else {
|
||||
if (ldo5v_in_reset_timer) {
|
||||
sys_timer_del(ldo5v_in_reset_timer);
|
||||
ldo5v_in_reset_timer = 0;
|
||||
}
|
||||
sys_enter_soft_poweroff((void *)1);
|
||||
}
|
||||
#else
|
||||
sys_enter_soft_poweroff((void *)1);
|
||||
#endif
|
||||
#if (TCFG_CHARGESTORE_ENABLE && TCFG_BLE_DEMO_SELECT == DEF_BLE_DEMO_ADV)
|
||||
} else {
|
||||
log_info("chargestore do poweroff!\n");
|
||||
}
|
||||
#endif
|
||||
} else {
|
||||
charge_start();
|
||||
wdt_init(WDT_32S);
|
||||
log_info("set wdt to 32s!\n");
|
||||
goto _check_reset;
|
||||
}
|
||||
} else {
|
||||
charge_start();
|
||||
goto _check_reset;
|
||||
}
|
||||
return;
|
||||
|
||||
_check_reset:
|
||||
//防止耳机低电时,插拔充电有几率出现关机不充电问题
|
||||
if (app_var.goto_poweroff_flag) {
|
||||
cpu_reset();
|
||||
}
|
||||
}
|
||||
|
||||
#if TCFG_EARTCH_EVENT_HANDLE_ENABLE
|
||||
static u8 _enter_softoff_flag = 0;
|
||||
extern lp_touch_key_testbox_inear_trim(u8 flag);
|
||||
void exit_lp_touch_eartch_trim(void *priv)
|
||||
{
|
||||
log_info("<<<<<<<<<< exit_lp_touch_eartch_trim!\n");
|
||||
lp_touch_key_testbox_inear_trim(0);
|
||||
#if TCFG_PWMLED_ENABLE
|
||||
gpio_set_direction(TCFG_PWMLED_PIN, 1);
|
||||
#endif
|
||||
if (_enter_softoff_flag) {
|
||||
log_info("<<<<<<<<<<< sys_enter_soft_poweroff after eartch_trim!\n");
|
||||
sys_enter_soft_poweroff(NULL);
|
||||
} else {
|
||||
cpu_reset();
|
||||
}
|
||||
}
|
||||
void enter_lp_touch_eartch_trim(void *priv)
|
||||
{
|
||||
log_info(">>>>>>>>>> enter_lp_touch_eartch_trim!\n");
|
||||
lp_touch_key_testbox_inear_trim(1);
|
||||
sys_timeout_add(NULL, exit_lp_touch_eartch_trim, 1000);
|
||||
}
|
||||
#endif
|
||||
|
||||
//外置触摸断电
|
||||
void __attribute__((weak)) external_touch_key_disable(void)
|
||||
{
|
||||
|
||||
}
|
||||
//使能外置电源控制芯片对耳机进行断电
|
||||
void __attribute__((weak)) external_storage_io_disable(void)
|
||||
{
|
||||
|
||||
}
|
||||
//关闭vddio keep
|
||||
u8 __attribute__((weak)) power_set_vddio_keep(u8 en)
|
||||
{
|
||||
|
||||
}
|
||||
void charge_ldo5v_off_deal(void)
|
||||
{
|
||||
log_info("%s\n", __FUNCTION__);
|
||||
|
||||
//拨出交换
|
||||
power_event_to_user(POWER_EVENT_POWER_CHANGE);
|
||||
#if (TCFG_CHARGESTORE_ENABLE && TCFG_USER_TWS_ENABLE)
|
||||
if (TWS_ROLE_SLAVE == tws_api_get_role()) {
|
||||
chargestore_set_power_level(0xFF);
|
||||
}
|
||||
#endif
|
||||
charge_full_flag = 0;
|
||||
|
||||
charge_close();
|
||||
|
||||
struct application *app;
|
||||
app = get_current_app();
|
||||
//在idle的时候才执行充电拔出的UI
|
||||
if (app && (!strcmp(app->name, APP_NAME_IDLE))) {
|
||||
ui_update_status(STATUS_CHARGE_LDO5V_OFF);
|
||||
}
|
||||
|
||||
charge_check_and_set_pinr(1);
|
||||
|
||||
#if TCFG_TEST_BOX_ENABLE
|
||||
|
||||
#if TCFG_EARTCH_EVENT_HANDLE_ENABLE
|
||||
u8 sec = 0;
|
||||
u8 eartch_trim_en = testbox_get_touch_trim_en(&sec);
|
||||
if (eartch_trim_en) {
|
||||
log_info("******* testbox_get_touch_trim_en : %ds\n", sec);
|
||||
sys_timeout_add(NULL, enter_lp_touch_eartch_trim, sec * 1000);
|
||||
#if TCFG_PWMLED_ENABLE
|
||||
gpio_set_pull_up(TCFG_PWMLED_PIN, 0);
|
||||
gpio_set_pull_down(TCFG_PWMLED_PIN, 0);
|
||||
gpio_set_die(TCFG_PWMLED_PIN, 0);
|
||||
gpio_set_direction(TCFG_PWMLED_PIN, 0);
|
||||
gpio_write(TCFG_PWMLED_PIN, 1);
|
||||
#endif
|
||||
}
|
||||
#endif
|
||||
|
||||
if (testbox_get_status() && !get_total_connect_dev()) {
|
||||
if (!testbox_get_keep_tws_conn_flag()) {
|
||||
log_info("<<<<<<<<<<<<<<testbox out and bt noconn reset>>>>>>>>>>>>>>>\n");
|
||||
if (testbox_get_testbox_tws_paired() && testbox_get_softpwroff_after_paired()) {
|
||||
#if TCFG_EARTCH_EVENT_HANDLE_ENABLE
|
||||
if (eartch_trim_en) {
|
||||
_enter_softoff_flag = 1;
|
||||
} else
|
||||
#endif
|
||||
{
|
||||
sys_enter_soft_poweroff(NULL);
|
||||
}
|
||||
} else {
|
||||
#if TCFG_EARTCH_EVENT_HANDLE_ENABLE
|
||||
if (eartch_trim_en) {
|
||||
} else
|
||||
#endif
|
||||
{
|
||||
cpu_reset();
|
||||
}
|
||||
}
|
||||
} else {
|
||||
log_info("testbox out ret\n");
|
||||
}
|
||||
}
|
||||
testbox_clear_status();
|
||||
if (ldo5v_keep_timer) {
|
||||
sys_timeout_del(ldo5v_keep_timer);
|
||||
ldo5v_keep_timer = 0;
|
||||
}
|
||||
#endif
|
||||
|
||||
#if TCFG_CHARGESTORE_ENABLE
|
||||
chargestore_shutdown_reset();
|
||||
#endif
|
||||
|
||||
#if TCFG_AUDIO_ANC_ENABLE
|
||||
#if TCFG_ANC_BOX_ENABLE
|
||||
if (ldo5v_keep_timer) {
|
||||
sys_timeout_del(ldo5v_keep_timer);
|
||||
ldo5v_keep_timer = 0;
|
||||
}
|
||||
if (ancbox_get_status()) {
|
||||
return;
|
||||
} else
|
||||
#endif
|
||||
{
|
||||
anc_resume();
|
||||
}
|
||||
#endif
|
||||
|
||||
#if TCFG_TEST_BOX_ENABLE
|
||||
if (testbox_get_ex_enter_storage_mode_flag()) {
|
||||
power_set_vddio_keep(0);//关VDDIO KEEP
|
||||
#if TCFG_LP_TOUCH_KEY_ENABLE
|
||||
lp_touch_key_disable();//仓储模式关内置触摸
|
||||
#else
|
||||
external_touch_key_disable(); //仓储模式关外置触摸供电
|
||||
#endif /* #if TCFG_LP_TOUCH_KEY_ENABLE */
|
||||
#if TCFG_EXTERN_STORAGE_MODE_ENABLE
|
||||
external_storage_io_disable();
|
||||
#endif/* TCFG_EXTERN_STORAGE_MODE_ENABLE */
|
||||
power_set_soft_poweroff();
|
||||
}
|
||||
#endif
|
||||
|
||||
|
||||
if ((get_charge_poweron_en() == 0)) {
|
||||
|
||||
wdt_init(WDT_4S);
|
||||
log_info("set wdt to 4s!\n");
|
||||
#if TCFG_CHARGESTORE_ENABLE
|
||||
if (chargestore_get_power_status()) {
|
||||
#endif
|
||||
#if TCFG_CHARGE_OFF_POWERON_NE
|
||||
log_info("ldo5v off,task switch to BT\n");
|
||||
app_var.play_poweron_tone = 0;
|
||||
#if TCFG_SYS_LVD_EN
|
||||
vbat_check_init();
|
||||
#endif
|
||||
if (app && (app_var.goto_poweroff_flag == 0)) {
|
||||
if (strcmp(app->name, APP_NAME_BT)) {
|
||||
#if TCFG_SYS_LVD_EN
|
||||
if (get_vbat_need_shutdown() == FALSE) {
|
||||
#if TCFG_WIRELESS_MIC_ENABLE
|
||||
cpu_reset();
|
||||
#endif
|
||||
task_switch_to_bt();
|
||||
} else {
|
||||
log_info("ldo5v off,lowpower,need enter softpoweroff\n");
|
||||
power_set_soft_poweroff();
|
||||
}
|
||||
#else
|
||||
task_switch_to_bt();
|
||||
#endif
|
||||
}
|
||||
}
|
||||
#else //TCFG_CHARGE_OFF_POWERON_NE
|
||||
log_info("ldo5v off,enter softpoweroff\n");
|
||||
#if TCFG_LP_TOUCH_KEY_ENABLE
|
||||
extern void lp_touch_key_charge_mode_exit();
|
||||
lp_touch_key_charge_mode_exit();
|
||||
#endif /* #if TCFG_LP_TOUCH_KEY_ENABLE */
|
||||
power_set_soft_poweroff();
|
||||
#endif //TCFG_CHARGE_OFF_POWERON_NE
|
||||
#if TCFG_CHARGESTORE_ENABLE
|
||||
} else {
|
||||
log_info("ldo5v off,enter softpoweroff\n");
|
||||
if (app && (!strcmp(app->name, APP_NAME_BT))) { //软关机
|
||||
sys_enter_soft_poweroff(NULL);
|
||||
} else {
|
||||
power_set_soft_poweroff();
|
||||
}
|
||||
}
|
||||
#endif
|
||||
} else {
|
||||
if (app && (!strcmp(app->name, APP_NAME_IDLE)) && (app_var.goto_poweroff_flag == 0)) {
|
||||
#if TCFG_CHARGE_OFF_POWERON_NE
|
||||
log_info("ldo5v off,task switch to BT\n");
|
||||
app_var.play_poweron_tone = 0;
|
||||
#if TCFG_SYS_LVD_EN
|
||||
vbat_check_init();
|
||||
#endif
|
||||
#if TCFG_SYS_LVD_EN
|
||||
if (get_vbat_need_shutdown() == FALSE) {
|
||||
task_switch_to_bt();
|
||||
} else {
|
||||
log_info("ldo5v off,lowpower,need enter softpoweroff\n");
|
||||
power_set_soft_poweroff();
|
||||
}
|
||||
#else
|
||||
task_switch_to_bt();
|
||||
#endif
|
||||
#else
|
||||
power_set_soft_poweroff();
|
||||
#endif
|
||||
}
|
||||
}
|
||||
#if TCFG_GSENSOR_ENABLE
|
||||
//出舱使能gSensor
|
||||
gSensor_wkupup_enable();
|
||||
#endif
|
||||
|
||||
#if TCFG_LINEIN_ENABLE
|
||||
//出舱开启linein检测
|
||||
linein_det_enable();
|
||||
#endif
|
||||
|
||||
#if TCFG_LP_TOUCH_KEY_ENABLE
|
||||
extern void lp_touch_key_charge_mode_exit();
|
||||
lp_touch_key_charge_mode_exit();
|
||||
#endif /* #if TCFG_LP_TOUCH_KEY_ENABLE */
|
||||
|
||||
#if TCFG_TEST_BOX_ENABLE
|
||||
if (testbox_get_ex_enter_storage_mode_flag()) {
|
||||
power_set_vddio_keep(0);//关VDDIO KEEP
|
||||
#if TCFG_LP_TOUCH_KEY_ENABLE
|
||||
lp_touch_key_disable();//仓储模式关内置触摸
|
||||
#else
|
||||
external_touch_key_disable(); //仓储模式关外置触摸供电
|
||||
#endif /* #if TCFG_LP_TOUCH_KEY_ENABLE */
|
||||
//测试盒仓储模式使能后,断开测试盒直接关机
|
||||
power_set_soft_poweroff();
|
||||
}
|
||||
#endif
|
||||
|
||||
#if TCFG_GX8002_NPU_ENABLE
|
||||
extern void gx8002_module_resumed();
|
||||
gx8002_module_resumed();
|
||||
#endif /* #if TCFG_GX8002_NPU_ENABLE */
|
||||
}
|
||||
|
||||
int app_charge_event_handler(struct device_event *dev)
|
||||
{
|
||||
int ret = false;
|
||||
u8 otg_status = 0;
|
||||
|
||||
switch (dev->event) {
|
||||
case CHARGE_EVENT_CHARGE_START:
|
||||
#if NTC_DET_EN
|
||||
ntc_det_start();
|
||||
#endif
|
||||
charge_start_deal();
|
||||
break;
|
||||
case CHARGE_EVENT_CHARGE_CLOSE:
|
||||
#if NTC_DET_EN
|
||||
ntc_det_stop();
|
||||
#endif
|
||||
charge_close_deal();
|
||||
break;
|
||||
case CHARGE_EVENT_CHARGE_FULL:
|
||||
charge_full_deal();
|
||||
break;
|
||||
case CHARGE_EVENT_LDO5V_KEEP:
|
||||
#if NTC_DET_EN
|
||||
ntc_det_stop();
|
||||
#endif
|
||||
ldo5v_keep_deal();
|
||||
break;
|
||||
case CHARGE_EVENT_LDO5V_IN:
|
||||
#if ((TCFG_OTG_MODE & OTG_SLAVE_MODE) && (TCFG_OTG_MODE & OTG_CHARGE_MODE))
|
||||
while (1) {
|
||||
otg_status = usb_otg_online(0);
|
||||
if (otg_status != IDLE_MODE) {
|
||||
break;
|
||||
}
|
||||
os_time_dly(2);
|
||||
}
|
||||
if (otg_status == SLAVE_MODE) {
|
||||
set_charge_poweron_en(1);
|
||||
}
|
||||
#endif
|
||||
|
||||
if (get_charge_poweron_en() || (otg_status != SLAVE_MODE)) {
|
||||
charge_ldo5v_in_deal();
|
||||
}
|
||||
break;
|
||||
case CHARGE_EVENT_LDO5V_OFF:
|
||||
#if ((TCFG_OTG_MODE & OTG_SLAVE_MODE) && (TCFG_OTG_MODE & OTG_CHARGE_MODE))
|
||||
while (1) {
|
||||
otg_status = usb_otg_online(0);
|
||||
if (otg_status != IDLE_MODE) {
|
||||
break;
|
||||
}
|
||||
os_time_dly(2);
|
||||
}
|
||||
#endif
|
||||
if (get_charge_poweron_en() || (otg_status != SLAVE_MODE)) {
|
||||
charge_ldo5v_off_deal();
|
||||
}
|
||||
break;
|
||||
default:
|
||||
break;
|
||||
}
|
||||
|
||||
return ret;
|
||||
}
|
||||
|
||||
#else
|
||||
|
||||
u8 get_charge_full_flag(void)
|
||||
{
|
||||
return 0;
|
||||
}
|
||||
|
||||
#endif
|
||||
|
||||
@ -1,859 +0,0 @@
|
||||
#include "init.h"
|
||||
#include "app_config.h"
|
||||
#include "system/includes.h"
|
||||
#include "asm/charge.h"
|
||||
#include "asm/chargestore.h"
|
||||
#include "user_cfg.h"
|
||||
#include "app_chargestore.h"
|
||||
#include "device/vm.h"
|
||||
#include "btstack/avctp_user.h"
|
||||
#include "app_power_manage.h"
|
||||
#include "app_action.h"
|
||||
#include "app_main.h"
|
||||
#include "app_charge.h"
|
||||
#include "app_testbox.h"
|
||||
#include "classic/tws_api.h"
|
||||
#include "update.h"
|
||||
#include "bt_ble.h"
|
||||
#include "bt_tws.h"
|
||||
#include "app_action.h"
|
||||
#include "bt_common.h"
|
||||
#include "le_rcsp_adv_module.h"
|
||||
|
||||
#define LOG_TAG_CONST APP_CHARGESTORE
|
||||
#define LOG_TAG "[APP_CHARGESTORE]"
|
||||
#define LOG_ERROR_ENABLE
|
||||
#define LOG_DEBUG_ENABLE
|
||||
#define LOG_INFO_ENABLE
|
||||
/* #define LOG_DUMP_ENABLE */
|
||||
#define LOG_CLI_ENABLE
|
||||
#include "debug.h"
|
||||
|
||||
extern void sys_enter_soft_poweroff(void *priv);
|
||||
extern void tws_api_set_connect_aa_allways(u32 connect_aa);
|
||||
extern u32 tws_le_get_pair_aa(void);
|
||||
extern u32 tws_le_get_connect_aa(void);
|
||||
extern u32 tws_le_get_search_aa(void);
|
||||
extern void bt_get_vm_mac_addr(u8 *addr);
|
||||
extern bool get_tws_sibling_connect_state(void);
|
||||
extern bool get_tws_phone_connect_state(void);
|
||||
extern void cpu_reset();
|
||||
extern u32 dual_bank_update_exist_flag_get(void);
|
||||
extern u32 classic_update_task_exist_flag_get(void);
|
||||
extern char tws_api_get_local_channel();
|
||||
extern u16 bt_get_tws_device_indicate(u8 *tws_device_indicate);
|
||||
extern void bt_tws_remove_pairs();
|
||||
extern const u8 *bt_get_mac_addr();
|
||||
|
||||
//-----------------------------------------------------------------------------------
|
||||
//-----------以下配对相关的接口,提供充电舱和蓝牙测试盒-------------------------------
|
||||
//-----------------------------------------------------------------------------------
|
||||
#if (TCFG_CHARGESTORE_ENABLE || TCFG_TEST_BOX_ENABLE)
|
||||
#if TCFG_USER_TWS_ENABLE
|
||||
static void new_addr_generating_for_pair(u8 *addr)
|
||||
{
|
||||
u8 i;
|
||||
for (i = 0; i < 6; i++) {
|
||||
addr[i] = addr[i] + 1;
|
||||
}
|
||||
}
|
||||
|
||||
void chargestore_set_tws_channel_info(u8 channel)
|
||||
{
|
||||
if ((channel == 'L') || (channel == 'R')) {
|
||||
syscfg_write(CFG_CHARGESTORE_TWS_CHANNEL, &channel, 1);
|
||||
}
|
||||
}
|
||||
|
||||
u8 chargestore_get_tws_channel_info(void)
|
||||
{
|
||||
u8 channel = 'U';
|
||||
syscfg_read(CFG_CHARGESTORE_TWS_CHANNEL, &channel, 1);
|
||||
return channel;
|
||||
}
|
||||
|
||||
static u8 tws_paired_flag;
|
||||
bool chargestore_set_tws_remote_info(u8 *data, u8 len)
|
||||
{
|
||||
u8 i;
|
||||
bool ret = true;
|
||||
int w_ret = 0;
|
||||
u8 remote_addr[6];
|
||||
u8 common_addr[6];
|
||||
u8 local_addr[6];
|
||||
CHARGE_STORE_INFO *charge_store_info = (CHARGE_STORE_INFO *)data;
|
||||
if (len > sizeof(CHARGE_STORE_INFO)) {
|
||||
log_error("len err\n");
|
||||
return false;
|
||||
}
|
||||
//set remote addr
|
||||
syscfg_read(CFG_TWS_REMOTE_ADDR, remote_addr, sizeof(remote_addr));
|
||||
if (memcmp(remote_addr, charge_store_info->tws_local_addr, sizeof(remote_addr))) {
|
||||
ret = false;
|
||||
}
|
||||
|
||||
#if TCFG_TEST_BOX_ENABLE
|
||||
if (testbox_get_status()) {
|
||||
//using new remote addr generating;
|
||||
new_addr_generating_for_pair(charge_store_info->tws_local_addr);
|
||||
}
|
||||
#endif
|
||||
|
||||
if (sizeof(remote_addr) != syscfg_write(CFG_TWS_REMOTE_ADDR, charge_store_info->tws_local_addr, sizeof(remote_addr))) {
|
||||
w_ret = -1;
|
||||
}
|
||||
|
||||
bt_get_tws_local_addr(local_addr);
|
||||
|
||||
#if TCFG_TEST_BOX_ENABLE
|
||||
if (testbox_get_status()) {
|
||||
new_addr_generating_for_pair(local_addr);
|
||||
if (sizeof(local_addr) != syscfg_write(CFG_TWS_LOCAL_ADDR, local_addr, sizeof(local_addr))) {
|
||||
w_ret = -2;
|
||||
}
|
||||
}
|
||||
#endif
|
||||
|
||||
#if (CONFIG_TWS_COMMON_ADDR_SELECT != CONFIG_TWS_COMMON_ADDR_USED_LEFT)
|
||||
//set common addr
|
||||
syscfg_read(CFG_TWS_COMMON_ADDR, common_addr, sizeof(common_addr));
|
||||
|
||||
for (i = 0; i < sizeof(common_addr); i++) {
|
||||
if (common_addr[i] != (u8)(local_addr[i] + charge_store_info->tws_local_addr[i])) {
|
||||
ret = false;
|
||||
}
|
||||
common_addr[i] = local_addr[i] + charge_store_info->tws_local_addr[i];
|
||||
}
|
||||
|
||||
if (sizeof(common_addr) != syscfg_write(CFG_TWS_COMMON_ADDR, common_addr, sizeof(common_addr))) {
|
||||
w_ret = -3;
|
||||
}
|
||||
#endif
|
||||
|
||||
#ifndef CONFIG_NEW_BREDR_ENABLE
|
||||
if (chargestore_get_tws_channel_info() == 'L') {
|
||||
if (tws_le_get_connect_aa() != tws_le_get_pair_aa()) {
|
||||
ret = false;
|
||||
}
|
||||
tws_api_set_connect_aa_allways(tws_le_get_pair_aa());
|
||||
} else {
|
||||
if (tws_le_get_connect_aa() != charge_store_info->pair_aa) {
|
||||
ret = false;
|
||||
}
|
||||
tws_api_set_connect_aa_allways(charge_store_info->pair_aa);
|
||||
}
|
||||
#endif
|
||||
|
||||
#if TCFG_TEST_BOX_ENABLE
|
||||
if (testbox_get_status() && (0 == w_ret)) {
|
||||
u8 cmd = CMD_BOX_TWS_REMOTE_ADDR;
|
||||
chargestore_api_write(&cmd, 1);
|
||||
testbox_set_testbox_tws_paired(1);
|
||||
}
|
||||
#endif
|
||||
return ret;
|
||||
}
|
||||
|
||||
void chargestore_clean_tws_conn_info(u8 type)
|
||||
{
|
||||
CHARGE_STORE_INFO charge_store_info;
|
||||
log_info("chargestore_clean_tws_conn_info=%d\n", type);
|
||||
if (type == TWS_DEL_TWS_ADDR) {
|
||||
log_info("TWS_DEL_TWS_ADDR\n");
|
||||
} else if (type == TWS_DEL_PHONE_ADDR) {
|
||||
log_info("TWS_DEL_PHONE_ADDR\n");
|
||||
} else if (type == TWS_DEL_ALL_ADDR) {
|
||||
log_info("TWS_DEL_ALL_ADDR\n");
|
||||
}
|
||||
memset(&charge_store_info, 0xff, sizeof(CHARGE_STORE_INFO));
|
||||
syscfg_write(CFG_TWS_REMOTE_ADDR, charge_store_info.tws_remote_addr, sizeof(charge_store_info.tws_remote_addr));
|
||||
}
|
||||
|
||||
#endif //TCFG_USER_TWS_ENABLE
|
||||
|
||||
u16 chargestore_get_tws_remote_info(u8 *data)
|
||||
{
|
||||
u16 ret_len = 0;
|
||||
u16 device_ind;
|
||||
CHARGE_STORE_INFO *charge_store_info = (CHARGE_STORE_INFO *)data;
|
||||
#if TCFG_USER_TWS_ENABLE
|
||||
bt_get_tws_local_addr(charge_store_info->tws_local_addr);
|
||||
bt_get_vm_mac_addr(charge_store_info->tws_mac_addr);
|
||||
#if TCFG_TEST_BOX_ENABLE
|
||||
if (testbox_get_keep_tws_conn_flag()) {
|
||||
memcpy(charge_store_info->tws_mac_addr, bt_get_mac_addr(), 6);
|
||||
}
|
||||
#endif
|
||||
#ifndef CONFIG_NEW_BREDR_ENABLE
|
||||
charge_store_info->search_aa = tws_le_get_search_aa();
|
||||
charge_store_info->pair_aa = tws_le_get_pair_aa();
|
||||
#endif
|
||||
|
||||
#if (CONFIG_TWS_CHANNEL_SELECT == CONFIG_TWS_AS_LEFT_CHANNEL) \
|
||||
||(CONFIG_TWS_CHANNEL_SELECT == CONFIG_TWS_AS_RIGHT_CHANNEL) \
|
||||
||(CONFIG_TWS_CHANNEL_SELECT == CONFIG_TWS_EXTERN_DOWN_AS_LEFT) \
|
||||
||(CONFIG_TWS_CHANNEL_SELECT == CONFIG_TWS_EXTERN_UP_AS_LEFT)
|
||||
charge_store_info->local_channel = tws_api_get_local_channel();
|
||||
#else
|
||||
charge_store_info->local_channel = 'U';
|
||||
#endif
|
||||
charge_store_info->device_ind = bt_get_tws_device_indicate(NULL);
|
||||
charge_store_info->reserved_data = chargestore_api_crc8(data, sizeof(CHARGE_STORE_INFO) - 2);
|
||||
#if TCFG_TEST_BOX_ENABLE
|
||||
if (testbox_get_status()) {
|
||||
charge_store_info->reserved_data = 0;
|
||||
}
|
||||
#endif
|
||||
#else
|
||||
bt_get_vm_mac_addr(charge_store_info->tws_mac_addr);
|
||||
#endif
|
||||
ret_len = sizeof(CHARGE_STORE_INFO);
|
||||
return ret_len;
|
||||
}
|
||||
|
||||
#endif //TCFG_CHARGESTORE_ENABLE || TCFG_TEST_BOX_ENABLE
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
//-----------------------------------------------------------------------------------
|
||||
//-----------分割线---------以下是充电舱流程实现-------------------------------------
|
||||
//-----------------------------------------------------------------------------------
|
||||
#if TCFG_CHARGESTORE_ENABLE
|
||||
|
||||
struct chargestore_info {
|
||||
int timer;
|
||||
int shutdown_timer;
|
||||
u8 version;
|
||||
u8 chip_type;
|
||||
u8 max_packet_size;//充电舱端一包的最大值
|
||||
u8 bt_init_ok;//蓝牙协议栈初始化成功
|
||||
u8 power_level;//本机记录的充电舱电量百分比
|
||||
u8 pre_power_lvl;
|
||||
u8 sibling_chg_lev;//对耳同步的充电舱电量
|
||||
u8 power_status;//充电舱供电状态 0:断电 5V不在线 1:升压 5V在线
|
||||
u8 cover_status;//充电舱盖子状态 0:合盖 1:开盖
|
||||
u8 connect_status;//通信成功
|
||||
u8 ear_number;//盒盖时耳机在线数
|
||||
u8 channel;//左右
|
||||
u8 tws_power;//对耳的电量
|
||||
u8 power_sync;//第一次获取到充电舱电量时,同步到对耳
|
||||
u8 pair_flag;//配对标记
|
||||
u8 close_ing;//等待合窗超时
|
||||
u8 active_disconnect;//主动断开连接
|
||||
u8 switch2bt;
|
||||
};
|
||||
|
||||
static struct chargestore_info info = {
|
||||
.power_status = 1,
|
||||
.ear_number = 1,
|
||||
.tws_power = 0xff,
|
||||
.power_level = 0xff,
|
||||
.sibling_chg_lev = 0xff,
|
||||
.max_packet_size = 32,
|
||||
.channel = 'U',
|
||||
};
|
||||
|
||||
#define __this (&info)
|
||||
static u8 local_packet[36];
|
||||
static CHARGE_STORE_INFO read_info, write_info;
|
||||
static u8 read_index, write_index;
|
||||
|
||||
u8 chargestore_get_power_level(void)
|
||||
{
|
||||
if ((__this->power_level == 0xff) ||
|
||||
((!get_charge_online_flag()) &&
|
||||
(__this->sibling_chg_lev != 0xff))) {
|
||||
return __this->sibling_chg_lev;
|
||||
}
|
||||
return __this->power_level;
|
||||
}
|
||||
|
||||
u8 chargestore_get_power_status(void)
|
||||
{
|
||||
return __this->power_status;
|
||||
}
|
||||
|
||||
u8 chargestore_get_cover_status(void)
|
||||
{
|
||||
return __this->cover_status;
|
||||
}
|
||||
|
||||
u8 chargestore_get_earphone_online(void)
|
||||
{
|
||||
return __this->ear_number;
|
||||
}
|
||||
|
||||
void chargestore_set_earphone_online(u8 ear_number)
|
||||
{
|
||||
__this->ear_number = ear_number;
|
||||
}
|
||||
|
||||
void chargestore_set_pair_flag(u8 pair_flag)
|
||||
{
|
||||
__this->pair_flag = pair_flag;
|
||||
}
|
||||
|
||||
void chargestore_set_active_disconnect(u8 active_disconnect)
|
||||
{
|
||||
__this->active_disconnect = active_disconnect;
|
||||
}
|
||||
|
||||
u8 chargestore_get_earphone_pos(void)
|
||||
{
|
||||
u8 channel = 'U';
|
||||
#if TCFG_USER_TWS_ENABLE
|
||||
channel = chargestore_get_tws_channel_info();
|
||||
#endif
|
||||
log_info("get_ear_channel = %c\n", channel);
|
||||
return channel;
|
||||
}
|
||||
|
||||
u8 chargestore_get_sibling_power_level(void)
|
||||
{
|
||||
return __this->tws_power;
|
||||
}
|
||||
|
||||
#if TCFG_USER_TWS_ENABLE
|
||||
static void set_tws_sibling_charge_level(void *_data, u16 len, bool rx)
|
||||
{
|
||||
if (rx) {
|
||||
u8 *data = (u8 *)_data;
|
||||
chargestore_set_sibling_chg_lev(data[0]);
|
||||
}
|
||||
}
|
||||
|
||||
REGISTER_TWS_FUNC_STUB(charge_level_stub) = {
|
||||
.func_id = TWS_FUNC_ID_CHARGE_SYNC,
|
||||
.func = set_tws_sibling_charge_level,
|
||||
};
|
||||
|
||||
#endif //TCFG_USER_TWS_ENABLE
|
||||
|
||||
int chargestore_sync_chg_level(void)
|
||||
{
|
||||
#if TCFG_USER_TWS_ENABLE
|
||||
int err = -1;
|
||||
struct application *app = get_current_app();
|
||||
if (app && (!strcmp(app->name, "earphone")) && (!app_var.goto_poweroff_flag)) {
|
||||
err = tws_api_send_data_to_sibling((u8 *)&__this->power_level, 1,
|
||||
TWS_FUNC_ID_CHARGE_SYNC);
|
||||
}
|
||||
return err;
|
||||
#else
|
||||
return 0;
|
||||
#endif
|
||||
}
|
||||
|
||||
void chargestore_set_sibling_chg_lev(u8 chg_lev)
|
||||
{
|
||||
__this->sibling_chg_lev = chg_lev;
|
||||
}
|
||||
|
||||
void chargestore_set_power_level(u8 power)
|
||||
{
|
||||
__this->power_level = power;
|
||||
}
|
||||
|
||||
u8 chargestore_check_going_to_poweroff(void)
|
||||
{
|
||||
return __this->close_ing;
|
||||
}
|
||||
|
||||
void chargestore_shutdown_reset(void)
|
||||
{
|
||||
if (__this->shutdown_timer) {
|
||||
sys_timer_del(__this->shutdown_timer);
|
||||
__this->shutdown_timer = 0;
|
||||
}
|
||||
}
|
||||
|
||||
void chargestore_set_bt_init_ok(u8 flag)
|
||||
{
|
||||
__this->bt_init_ok = flag;
|
||||
}
|
||||
|
||||
void chargestore_shutdown_do(void *priv)
|
||||
{
|
||||
log_info("chargestore shutdown!\n");
|
||||
power_set_soft_poweroff();
|
||||
}
|
||||
|
||||
void chargestore_event_to_user(u8 *packet, u32 type, u8 event, u8 size)
|
||||
{
|
||||
struct sys_event e;
|
||||
e.type = SYS_DEVICE_EVENT;
|
||||
if (packet != NULL) {
|
||||
if (size > sizeof(local_packet)) {
|
||||
return;
|
||||
}
|
||||
e.u.chargestore.packet = local_packet;
|
||||
memcpy(e.u.chargestore.packet, packet, size);
|
||||
}
|
||||
e.arg = (void *)type;
|
||||
e.u.chargestore.event = event;
|
||||
e.u.chargestore.size = size;
|
||||
sys_event_notify(&e);
|
||||
}
|
||||
|
||||
#if TCFG_USER_TWS_ENABLE
|
||||
bool chargestore_check_data_succ(u8 *data, u8 len)
|
||||
{
|
||||
u16 crc;
|
||||
u16 device_ind;
|
||||
CHARGE_STORE_INFO *charge_store_info = (CHARGE_STORE_INFO *)data;
|
||||
if (len > sizeof(CHARGE_STORE_INFO)) {
|
||||
log_error("len err\n");
|
||||
return false;
|
||||
}
|
||||
crc = chargestore_api_crc8(data, len - 2);
|
||||
if (crc != charge_store_info->reserved_data) {
|
||||
log_error("crc err\n");
|
||||
return false;
|
||||
}
|
||||
device_ind = bt_get_tws_device_indicate(NULL);
|
||||
if (device_ind != charge_store_info->device_ind) {
|
||||
log_error("device_ind err\n");
|
||||
return false;
|
||||
}
|
||||
return true;
|
||||
}
|
||||
|
||||
u16 chargestore_f95_read_tws_remote_info(u8 *data, u8 flag)
|
||||
{
|
||||
u8 read_len;
|
||||
u8 *pbuf = (u8 *)&read_info;
|
||||
if (flag) {//first packet
|
||||
read_index = 0;
|
||||
chargestore_get_tws_remote_info((u8 *)&read_info);
|
||||
}
|
||||
read_len = sizeof(read_info) - read_index;
|
||||
read_len = (read_len > (__this->max_packet_size - 1)) ? (__this->max_packet_size - 1) : read_len;
|
||||
memcpy(data, pbuf + read_index, read_len);
|
||||
read_index += read_len;
|
||||
return read_len;
|
||||
}
|
||||
|
||||
u16 chargestore_f95_write_tws_remote_info(u8 *data, u8 len, u8 flag)
|
||||
{
|
||||
u8 write_len;
|
||||
u8 *pbuf = (u8 *)&write_info;
|
||||
if (flag) {
|
||||
write_index = 0;
|
||||
memset(&write_info, 0, sizeof(write_info));
|
||||
}
|
||||
write_len = sizeof(write_info) - write_index;
|
||||
write_len = (write_len >= len) ? len : write_len;
|
||||
memcpy(pbuf + write_index, data, write_len);
|
||||
write_index += write_len;
|
||||
return write_len;
|
||||
}
|
||||
|
||||
#endif
|
||||
|
||||
void chargestore_timeout_deal(void *priv)
|
||||
{
|
||||
__this->timer = 0;
|
||||
__this->close_ing = 0;
|
||||
if ((!__this->cover_status) || __this->active_disconnect) {//当前为合盖或者主动断开连接
|
||||
struct application *app = get_current_app();
|
||||
if (app && strcmp(app->name, "idle")) {
|
||||
sys_enter_soft_poweroff((void *)1);
|
||||
}
|
||||
} else {
|
||||
|
||||
#if (TCFG_BLE_DEMO_SELECT == DEF_BLE_DEMO_ADV)
|
||||
|
||||
/* if ((!get_total_connect_dev()) && (tws_api_get_role() == TWS_ROLE_MASTER) && (get_bt_tws_connect_status())) { */
|
||||
if (tws_api_get_role() == TWS_ROLE_MASTER) {
|
||||
printf("charge_icon_ctl...\n");
|
||||
bt_ble_icon_reset();
|
||||
#if CONFIG_NO_DISPLAY_BUTTON_ICON
|
||||
if (get_total_connect_dev()) {
|
||||
//蓝牙未真正断开;重新广播
|
||||
bt_ble_icon_open(ICON_TYPE_RECONNECT);
|
||||
} else {
|
||||
//蓝牙未连接,重新开可见性
|
||||
bt_ble_icon_open(ICON_TYPE_INQUIRY);
|
||||
}
|
||||
#else
|
||||
//不管蓝牙是否连接,默认打开
|
||||
bt_ble_icon_open(ICON_TYPE_RECONNECT);
|
||||
#endif
|
||||
|
||||
}
|
||||
#elif (TCFG_BLE_DEMO_SELECT == DEF_BLE_DEMO_ADV_RCSP)
|
||||
if (tws_api_get_role() == TWS_ROLE_MASTER) {
|
||||
printf("charge_icon_ctl...\n");
|
||||
#if CONFIG_NO_DISPLAY_BUTTON_ICON
|
||||
if (get_total_connect_dev()) {
|
||||
//蓝牙未真正断开;重新广播
|
||||
bt_ble_adv_ioctl(BT_ADV_SET_EDR_CON_FLAG, SECNE_CONNECTED, 1);
|
||||
} else {
|
||||
//蓝牙未连接,重新开可见性
|
||||
bt_ble_adv_ioctl(BT_ADV_SET_EDR_CON_FLAG, SECNE_UNCONNECTED, 1);
|
||||
}
|
||||
#else
|
||||
//不管蓝牙是否连接,默认打开
|
||||
bt_ble_adv_ioctl(BT_ADV_SET_EDR_CON_FLAG, SECNE_CONNECTED, 1);
|
||||
#endif
|
||||
|
||||
}
|
||||
#endif
|
||||
|
||||
}
|
||||
__this->ear_number = 1;
|
||||
}
|
||||
|
||||
void chargestore_set_phone_disconnect(void)
|
||||
{
|
||||
#if (TCFG_BLE_DEMO_SELECT == DEF_BLE_DEMO_ADV)
|
||||
#if (!CONFIG_NO_DISPLAY_BUTTON_ICON)
|
||||
if (__this->pair_flag && get_tws_sibling_connect_state()) {
|
||||
//check ble inquiry
|
||||
//printf("get box log_key...con_dev=%d\n",get_tws_phone_connect_state());
|
||||
if ((bt_ble_icon_get_adv_state() == ADV_ST_RECONN)
|
||||
|| (bt_ble_icon_get_adv_state() == ADV_ST_DISMISS)
|
||||
|| (bt_ble_icon_get_adv_state() == ADV_ST_END)) {
|
||||
bt_ble_icon_reset();
|
||||
bt_ble_icon_open(ICON_TYPE_INQUIRY);
|
||||
}
|
||||
}
|
||||
#endif
|
||||
__this->pair_flag = 0;
|
||||
#elif (TCFG_BLE_DEMO_SELECT == DEF_BLE_DEMO_ADV_RCSP)
|
||||
#if (!CONFIG_NO_DISPLAY_BUTTON_ICON)
|
||||
if (__this->pair_flag && get_tws_sibling_connect_state()) {
|
||||
//check ble inquiry
|
||||
bt_ble_adv_ioctl(BT_ADV_SET_EDR_CON_FLAG, SECNE_UNCONNECTED, 1);
|
||||
}
|
||||
#endif
|
||||
__this->pair_flag = 0;
|
||||
#endif
|
||||
}
|
||||
|
||||
void chargestore_set_phone_connect(void)
|
||||
{
|
||||
__this->active_disconnect = 0;
|
||||
}
|
||||
|
||||
int app_chargestore_event_handler(struct chargestore_event *chargestore_dev)
|
||||
{
|
||||
int ret = false;
|
||||
struct application *app = get_current_app();
|
||||
#if defined(TCFG_CHARGE_KEEP_UPDATA) && TCFG_CHARGE_KEEP_UPDATA
|
||||
//在升级过程中,不响应智能充电舱app层消息
|
||||
if (dual_bank_update_exist_flag_get() || classic_update_task_exist_flag_get()) {
|
||||
return ret;
|
||||
}
|
||||
#endif
|
||||
|
||||
switch (chargestore_dev->event) {
|
||||
case CMD_RESTORE_SYS:
|
||||
#if TCFG_USER_TWS_ENABLE
|
||||
bt_tws_remove_pairs();
|
||||
#endif
|
||||
user_send_cmd_prepare(USER_CTRL_DEL_ALL_REMOTE_INFO, 0, NULL);
|
||||
cpu_reset();
|
||||
break;
|
||||
case CMD_TWS_CHANNEL_SET:
|
||||
#if TCFG_USER_TWS_ENABLE
|
||||
chargestore_set_tws_channel_info(__this->channel);
|
||||
#endif
|
||||
break;
|
||||
#if TCFG_USER_TWS_ENABLE
|
||||
case CMD_TWS_REMOTE_ADDR:
|
||||
log_info("event_CMD_TWS_REMOTE_ADDR\n");
|
||||
if (chargestore_set_tws_remote_info(chargestore_dev->packet, chargestore_dev->size) == false) {
|
||||
//交换地址后,断开与手机连接,并删除所有连过的手机地址
|
||||
user_send_cmd_prepare(USER_CTRL_DEL_ALL_REMOTE_INFO, 0, NULL);
|
||||
__this->ear_number = 2;
|
||||
sys_enter_soft_poweroff((void *)1);
|
||||
} else {
|
||||
__this->pair_flag = 1;
|
||||
if (get_tws_phone_connect_state() == TRUE) {
|
||||
__this->active_disconnect = 1;
|
||||
user_send_cmd_prepare(USER_CTRL_DISCONNECTION_HCI, 0, NULL);
|
||||
} else {
|
||||
chargestore_set_phone_disconnect();
|
||||
}
|
||||
}
|
||||
break;
|
||||
case CMD_TWS_ADDR_DELETE:
|
||||
log_info("event_CMD_TWS_ADDR_DELETE\n");
|
||||
chargestore_clean_tws_conn_info(chargestore_dev->packet[0]);
|
||||
break;
|
||||
#endif
|
||||
case CMD_POWER_LEVEL_OPEN:
|
||||
log_info("event_CMD_POWER_LEVEL_OPEN\n");
|
||||
|
||||
//电压过低,不进响应开盖命令
|
||||
#if TCFG_SYS_LVD_EN
|
||||
if (get_vbat_need_shutdown() == TRUE) {
|
||||
log_info(" lowpower deal!\n");
|
||||
break;
|
||||
}
|
||||
#endif
|
||||
|
||||
if (__this->cover_status) {//当前为开盖
|
||||
if (__this->power_sync) {
|
||||
if (chargestore_sync_chg_level() == 0) {
|
||||
__this->power_sync = 0;
|
||||
}
|
||||
}
|
||||
if (app && strcmp(app->name, APP_NAME_BT) && (app_var.goto_poweroff_flag == 0)) {
|
||||
/* app_var.play_poweron_tone = 1; */
|
||||
app_var.play_poweron_tone = 0;
|
||||
power_set_mode(TCFG_LOWPOWER_POWER_SEL);
|
||||
__this->switch2bt = 1;
|
||||
task_switch_to_bt();
|
||||
__this->switch2bt = 0;
|
||||
}
|
||||
}
|
||||
break;
|
||||
case CMD_POWER_LEVEL_CLOSE:
|
||||
log_info("event_CMD_POWER_LEVEL_CLOSE\n");
|
||||
if (!__this->cover_status) {//当前为合盖
|
||||
if (app && strcmp(app->name, "idle")) {
|
||||
sys_enter_soft_poweroff((void *)1);
|
||||
}
|
||||
}
|
||||
break;
|
||||
case CMD_CLOSE_CID:
|
||||
log_info("event_CMD_CLOSE_CID\n");
|
||||
if (!__this->cover_status) {//当前为合盖
|
||||
#if (TCFG_BLE_DEMO_SELECT == DEF_BLE_DEMO_ADV)
|
||||
if ((__this->bt_init_ok) && (tws_api_get_role() == TWS_ROLE_MASTER)) {
|
||||
bt_ble_icon_close(1);
|
||||
}
|
||||
#elif (TCFG_BLE_DEMO_SELECT == DEF_BLE_DEMO_ADV_RCSP)
|
||||
if ((__this->bt_init_ok) && (tws_api_get_role() == TWS_ROLE_MASTER)) {
|
||||
bt_ble_adv_ioctl(BT_ADV_SET_EDR_CON_FLAG, SECNE_DISMISS, 1);
|
||||
}
|
||||
#endif
|
||||
if (!__this->timer) {
|
||||
__this->timer = sys_timeout_add(NULL, chargestore_timeout_deal, 2000);
|
||||
if (!__this->timer) {
|
||||
log_error("timer alloc err!\n");
|
||||
} else {
|
||||
__this->close_ing = 1;
|
||||
}
|
||||
} else {
|
||||
sys_timer_modify(__this->timer, 2000);
|
||||
__this->close_ing = 1;
|
||||
}
|
||||
} else {
|
||||
__this->ear_number = 1;
|
||||
__this->close_ing = 0;
|
||||
}
|
||||
break;
|
||||
case CMD_SHUT_DOWN:
|
||||
log_info("event_CMD_SHUT_DOWN\n");
|
||||
if (!__this->shutdown_timer) {
|
||||
__this->shutdown_timer = sys_timer_add(NULL, chargestore_shutdown_do, 1000);
|
||||
} else {
|
||||
sys_timer_modify(__this->shutdown_timer, 1000);
|
||||
}
|
||||
break;
|
||||
default:
|
||||
break;
|
||||
}
|
||||
|
||||
return ret;
|
||||
}
|
||||
|
||||
u8 chargestore_get_vbat_percent(void)
|
||||
{
|
||||
u8 power;
|
||||
#if CONFIG_DISPLAY_DETAIL_BAT
|
||||
power = get_vbat_percent();//显示个位数的电量
|
||||
#else
|
||||
power = get_self_battery_level() * 10 + 10; //显示10%~100%
|
||||
#endif
|
||||
|
||||
#if TCFG_CHARGE_ENABLE
|
||||
if (get_charge_full_flag()) {
|
||||
power = 100;
|
||||
} else if (power == 100) {
|
||||
power = 99;
|
||||
}
|
||||
if (get_charge_online_flag()) {
|
||||
power |= BIT(7);
|
||||
}
|
||||
#endif
|
||||
return power;
|
||||
}
|
||||
|
||||
void chargestore_set_power_status(u8 *buf, u8 len)
|
||||
{
|
||||
__this->version = buf[0] & 0x0f;
|
||||
__this->chip_type = (buf[0] >> 4) & 0x0f;
|
||||
//f95可能传一个大于100的电量
|
||||
if ((buf[1] & 0x7f) > 100) {
|
||||
__this->power_level = (buf[1] & 0x80) | 100;
|
||||
} else {
|
||||
__this->power_level = buf[1];
|
||||
}
|
||||
if (len > 2) {
|
||||
__this->max_packet_size = buf[2];
|
||||
if (len > 3) {
|
||||
__this->tws_power = buf[3];
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
static int app_chargestore_data_handler(u8 *buf, u8 len)
|
||||
{
|
||||
u8 send_buf[36];
|
||||
/* log_info_hexdump(buf, len); */
|
||||
chargestore_shutdown_reset();
|
||||
send_buf[0] = buf[0];
|
||||
#ifdef CONFIG_CHARGESTORE_REMAP_ENABLE
|
||||
if (remap_app_chargestore_data_deal(buf, len)) {
|
||||
return 1;
|
||||
}
|
||||
#endif
|
||||
|
||||
switch (buf[0]) {
|
||||
case CMD_TWS_CHANNEL_SET:
|
||||
__this->channel = (buf[1] == TWS_CHANNEL_LEFT) ? 'L' : 'R';
|
||||
chargestore_event_to_user(NULL, DEVICE_EVENT_CHARGE_STORE, buf[0], 0);
|
||||
if (__this->bt_init_ok) {
|
||||
len = chargestore_get_tws_remote_info(&send_buf[1]);
|
||||
chargestore_api_write(send_buf, len + 1);
|
||||
} else {
|
||||
send_buf[0] = CMD_UNDEFINE;
|
||||
chargestore_api_write(send_buf, 1);
|
||||
}
|
||||
break;
|
||||
case CMD_TWS_SET_CHANNEL:
|
||||
__this->channel = (buf[1] == TWS_CHANNEL_LEFT) ? 'L' : 'R';
|
||||
log_info("f95 set channel = %c\n", __this->channel);
|
||||
chargestore_event_to_user(NULL, DEVICE_EVENT_CHARGE_STORE, CMD_TWS_CHANNEL_SET, 0);
|
||||
if (__this->bt_init_ok) {
|
||||
chargestore_api_write(send_buf, 1);
|
||||
} else {
|
||||
send_buf[0] = CMD_UNDEFINE;
|
||||
chargestore_api_write(send_buf, 1);
|
||||
}
|
||||
break;
|
||||
|
||||
#if TCFG_USER_TWS_ENABLE
|
||||
case CMD_TWS_REMOTE_ADDR:
|
||||
__this->close_ing = 0;
|
||||
if (chargestore_check_data_succ((u8 *)&buf[1], len - 1) == true) {
|
||||
chargestore_event_to_user((u8 *)&buf[1], DEVICE_EVENT_CHARGE_STORE, buf[0], len - 1);
|
||||
} else {
|
||||
send_buf[0] = CMD_FAIL;
|
||||
}
|
||||
chargestore_api_write(send_buf, 1);
|
||||
break;
|
||||
case CMD_EX_FIRST_READ_INFO:
|
||||
log_info("read first!\n");
|
||||
__this->close_ing = 0;
|
||||
len = chargestore_f95_read_tws_remote_info(&send_buf[1], 1);
|
||||
chargestore_api_write(send_buf, len + 1);
|
||||
break;
|
||||
case CMD_EX_CONTINUE_READ_INFO:
|
||||
log_info("read continue!\n");
|
||||
__this->close_ing = 0;
|
||||
len = chargestore_f95_read_tws_remote_info(&send_buf[1], 0);
|
||||
chargestore_api_write(send_buf, len + 1);
|
||||
break;
|
||||
case CMD_EX_FIRST_WRITE_INFO:
|
||||
log_info("write first!\n");
|
||||
__this->close_ing = 0;
|
||||
chargestore_f95_write_tws_remote_info(&buf[1], len - 1, 1);
|
||||
chargestore_api_write(send_buf, 1);
|
||||
break;
|
||||
case CMD_EX_CONTINUE_WRITE_INFO:
|
||||
log_info("write continue!\n");
|
||||
__this->close_ing = 0;
|
||||
chargestore_f95_write_tws_remote_info(&buf[1], len - 1, 0);
|
||||
chargestore_api_write(send_buf, 1);
|
||||
break;
|
||||
case CMD_EX_INFO_COMPLETE:
|
||||
log_info("ex complete!\n");
|
||||
if (chargestore_check_data_succ((u8 *)&write_info, sizeof(write_info)) == true) {
|
||||
chargestore_event_to_user((u8 *)&write_info, DEVICE_EVENT_CHARGE_STORE, CMD_TWS_REMOTE_ADDR, sizeof(write_info));
|
||||
} else {
|
||||
send_buf[0] = CMD_FAIL;
|
||||
}
|
||||
chargestore_api_write(send_buf, 1);
|
||||
break;
|
||||
#endif
|
||||
|
||||
case CMD_TWS_ADDR_DELETE:
|
||||
__this->close_ing = 0;
|
||||
chargestore_event_to_user(&buf[1], DEVICE_EVENT_CHARGE_STORE, CMD_TWS_ADDR_DELETE, len - 1);
|
||||
chargestore_api_write(send_buf, 1);
|
||||
break;
|
||||
case CMD_POWER_LEVEL_OPEN:
|
||||
__this->power_status = 1;
|
||||
__this->cover_status = 1;
|
||||
__this->close_ing = 0;
|
||||
if (__this->power_level == 0xff) {
|
||||
__this->power_sync = 1;
|
||||
}
|
||||
chargestore_set_power_status(&buf[1], len - 1);
|
||||
if (__this->power_level != __this->pre_power_lvl) {
|
||||
__this->power_sync = 1;
|
||||
}
|
||||
__this->pre_power_lvl = __this->power_level;
|
||||
send_buf[1] = chargestore_get_vbat_percent();
|
||||
send_buf[2] = chargestore_get_det_level(__this->chip_type);
|
||||
chargestore_api_write(send_buf, 3);
|
||||
//切模式过程中不发送消息,防止堆满消息
|
||||
if (__this->switch2bt == 0) {
|
||||
chargestore_event_to_user(NULL, DEVICE_EVENT_CHARGE_STORE, CMD_POWER_LEVEL_OPEN, 0);
|
||||
}
|
||||
break;
|
||||
case CMD_POWER_LEVEL_CLOSE:
|
||||
__this->power_status = 1;
|
||||
__this->cover_status = 0;
|
||||
__this->close_ing = 0;
|
||||
chargestore_set_power_status(&buf[1], len - 1);
|
||||
send_buf[1] = chargestore_get_vbat_percent();
|
||||
send_buf[2] = chargestore_get_det_level(__this->chip_type);
|
||||
chargestore_api_write(send_buf, 3);
|
||||
chargestore_event_to_user(NULL, DEVICE_EVENT_CHARGE_STORE, CMD_POWER_LEVEL_CLOSE, 0);
|
||||
break;
|
||||
case CMD_SHUT_DOWN:
|
||||
log_info("shut down\n");
|
||||
__this->power_status = 0;
|
||||
__this->cover_status = 0;
|
||||
__this->close_ing = 0;
|
||||
chargestore_api_write(send_buf, 1);
|
||||
chargestore_event_to_user(NULL, DEVICE_EVENT_CHARGE_STORE, CMD_SHUT_DOWN, 0);
|
||||
break;
|
||||
case CMD_CLOSE_CID:
|
||||
log_info("close cid\n");
|
||||
__this->power_status = 1;
|
||||
__this->cover_status = 0;
|
||||
__this->ear_number = buf[1];
|
||||
chargestore_api_write(send_buf, 1);
|
||||
chargestore_event_to_user(NULL, DEVICE_EVENT_CHARGE_STORE, CMD_CLOSE_CID, 0);
|
||||
break;
|
||||
|
||||
case CMD_RESTORE_SYS:
|
||||
r_printf("restore sys\n");
|
||||
__this->power_status = 1;
|
||||
__this->cover_status = 1;
|
||||
__this->close_ing = 0;
|
||||
chargestore_api_write(send_buf, 1);
|
||||
chargestore_event_to_user(NULL, DEVICE_EVENT_CHARGE_STORE, CMD_RESTORE_SYS, 0);
|
||||
break;
|
||||
//不是充电舱的指令,返回0
|
||||
default:
|
||||
return 0;
|
||||
}
|
||||
return 1;
|
||||
}
|
||||
|
||||
CHARGESTORE_HANDLE_REG(chargestore, app_chargestore_data_handler);
|
||||
|
||||
#endif //TCFG_CHARGESTORE_ENABLE
|
||||
|
||||
@ -1,475 +0,0 @@
|
||||
#include "system/includes.h"
|
||||
#include "app_power_manage.h"
|
||||
#include "app_main.h"
|
||||
#include "app_config.h"
|
||||
#include "app_action.h"
|
||||
#include "asm/charge.h"
|
||||
#include "ui_manage.h"
|
||||
#include "tone_player.h"
|
||||
#include "asm/adc_api.h"
|
||||
#include "btstack/avctp_user.h"
|
||||
#include "user_cfg.h"
|
||||
#include "asm/charge.h"
|
||||
|
||||
#if TCFG_USER_TWS_ENABLE
|
||||
#include "bt_tws.h"
|
||||
#endif
|
||||
|
||||
#define LOG_TAG_CONST APP_POWER
|
||||
#define LOG_TAG "[APP_POWER]"
|
||||
#define LOG_ERROR_ENABLE
|
||||
#define LOG_DEBUG_ENABLE
|
||||
#define LOG_INFO_ENABLE
|
||||
/* #define LOG_DUMP_ENABLE */
|
||||
#define LOG_CLI_ENABLE
|
||||
#include "debug.h"
|
||||
|
||||
enum {
|
||||
VBAT_NORMAL = 0,
|
||||
VBAT_WARNING,
|
||||
VBAT_LOWPOWER,
|
||||
} VBAT_STATUS;
|
||||
|
||||
#define VBAT_DETECT_CNT 6
|
||||
static int vbat_slow_timer = 0;
|
||||
static int vbat_fast_timer = 0;
|
||||
static int lowpower_timer = 0;
|
||||
static u8 old_battery_level = 9;
|
||||
static u16 bat_val = 0;
|
||||
static volatile u8 cur_battery_level = 0;
|
||||
static u16 battery_full_value = 0;
|
||||
static u8 tws_sibling_bat_level = 0xff;
|
||||
static u8 tws_sibling_bat_percent_level = 0xff;
|
||||
static u8 cur_bat_st = VBAT_NORMAL;
|
||||
|
||||
void vbat_check(void *priv);
|
||||
void sys_enter_soft_poweroff(void *priv);
|
||||
void clr_wdt(void);
|
||||
void power_event_to_user(u8 event);
|
||||
|
||||
|
||||
u8 get_tws_sibling_bat_level(void)
|
||||
{
|
||||
#if TCFG_USER_TWS_ENABLE
|
||||
/* log_info("***********get_tws_sibling_bat_level: %2x", tws_sibling_bat_percent_level); */
|
||||
return tws_sibling_bat_level & 0x7f;
|
||||
#endif
|
||||
return 0xff;
|
||||
}
|
||||
|
||||
u8 get_tws_sibling_bat_persent(void)
|
||||
{
|
||||
#if TCFG_USER_TWS_ENABLE
|
||||
/* log_info("***********get_tws_sibling_bat_level: %2x", tws_sibling_bat_percent_level); */
|
||||
return tws_sibling_bat_percent_level;
|
||||
#endif
|
||||
return 0xff;
|
||||
}
|
||||
|
||||
void app_power_set_tws_sibling_bat_level(u8 vbat, u8 percent)
|
||||
{
|
||||
#if TCFG_USER_TWS_ENABLE
|
||||
tws_sibling_bat_level = vbat;
|
||||
tws_sibling_bat_percent_level = percent;
|
||||
/*
|
||||
** 发出电量同步事件进行进一步处理
|
||||
**/
|
||||
power_event_to_user(POWER_EVENT_SYNC_TWS_VBAT_LEVEL);
|
||||
|
||||
log_info("set_sibling_bat_level: %d, %d\n", vbat, percent);
|
||||
#endif
|
||||
}
|
||||
|
||||
|
||||
static void set_tws_sibling_bat_level(void *_data, u16 len, bool rx)
|
||||
{
|
||||
u8 *data = (u8 *)_data;
|
||||
|
||||
if (rx) {
|
||||
app_power_set_tws_sibling_bat_level(data[0], data[1]);
|
||||
}
|
||||
}
|
||||
|
||||
#if TCFG_USER_TWS_ENABLE
|
||||
REGISTER_TWS_FUNC_STUB(vbat_sync_stub) = {
|
||||
.func_id = TWS_FUNC_ID_VBAT_SYNC,
|
||||
.func = set_tws_sibling_bat_level,
|
||||
};
|
||||
#endif
|
||||
|
||||
void tws_sync_bat_level(void)
|
||||
{
|
||||
#if (TCFG_USER_TWS_ENABLE && BT_SUPPORT_DISPLAY_BAT)
|
||||
u8 battery_level = cur_battery_level;
|
||||
#if CONFIG_DISPLAY_DETAIL_BAT
|
||||
u8 percent_level = get_vbat_percent();
|
||||
#else
|
||||
u8 percent_level = get_self_battery_level() * 10 + 10;
|
||||
#endif
|
||||
if (get_charge_online_flag()) {
|
||||
percent_level |= BIT(7);
|
||||
}
|
||||
|
||||
u8 data[2];
|
||||
data[0] = battery_level;
|
||||
data[1] = percent_level;
|
||||
tws_api_send_data_to_sibling(data, 2, TWS_FUNC_ID_VBAT_SYNC);
|
||||
|
||||
log_info("tws_sync_bat_level: %d,%d\n", battery_level, percent_level);
|
||||
#endif
|
||||
}
|
||||
|
||||
void power_event_to_user(u8 event)
|
||||
{
|
||||
struct sys_event e;
|
||||
e.type = SYS_DEVICE_EVENT;
|
||||
e.arg = (void *)DEVICE_EVENT_FROM_POWER;
|
||||
e.u.dev.event = event;
|
||||
e.u.dev.value = 0;
|
||||
sys_event_notify(&e);
|
||||
}
|
||||
|
||||
int app_power_event_handler(struct device_event *dev)
|
||||
{
|
||||
int ret = false;
|
||||
|
||||
#if(TCFG_SYS_LVD_EN == 1)
|
||||
switch (dev->event) {
|
||||
case POWER_EVENT_POWER_NORMAL:
|
||||
ui_update_status(STATUS_EXIT_LOWPOWER);
|
||||
break;
|
||||
case POWER_EVENT_POWER_WARNING:
|
||||
ui_update_status(STATUS_LOWPOWER);
|
||||
/* tone_play(TONE_LOW_POWER); */
|
||||
STATUS *p_tone = get_tone_config();
|
||||
tone_play_index(p_tone->lowpower, 0);
|
||||
if (lowpower_timer == 0) {
|
||||
lowpower_timer = sys_timer_add((void *)POWER_EVENT_POWER_WARNING, (void (*)(void *))power_event_to_user, LOW_POWER_WARN_TIME);
|
||||
}
|
||||
break;
|
||||
case POWER_EVENT_POWER_LOW:
|
||||
r_printf(" POWER_EVENT_POWER_LOW");
|
||||
vbat_timer_delete();
|
||||
if (lowpower_timer) {
|
||||
sys_timer_del(lowpower_timer);
|
||||
lowpower_timer = 0 ;
|
||||
}
|
||||
#if TCFG_APP_BT_EN
|
||||
#if (RCSP_ADV_EN)
|
||||
extern u8 adv_tws_both_in_charge_box(u8 type);
|
||||
adv_tws_both_in_charge_box(1);
|
||||
#endif
|
||||
sys_enter_soft_poweroff(NULL);
|
||||
#else
|
||||
void app_entry_idle() ;
|
||||
app_entry_idle() ;
|
||||
#endif
|
||||
break;
|
||||
#if TCFG_APP_BT_EN
|
||||
#if TCFG_USER_TWS_ENABLE
|
||||
case POWER_EVENT_SYNC_TWS_VBAT_LEVEL:
|
||||
if (tws_api_get_role() == TWS_ROLE_MASTER) {
|
||||
user_send_cmd_prepare(USER_CTRL_HFP_CMD_UPDATE_BATTARY, 0, NULL);
|
||||
}
|
||||
break;
|
||||
#endif
|
||||
|
||||
case POWER_EVENT_POWER_CHANGE:
|
||||
/* log_info("POWER_EVENT_POWER_CHANGE\n"); */
|
||||
#if TCFG_USER_TWS_ENABLE
|
||||
if (tws_api_get_tws_state() & TWS_STA_SIBLING_CONNECTED) {
|
||||
if (tws_api_get_tws_state()&TWS_STA_ESCO_OPEN) {
|
||||
break;
|
||||
}
|
||||
tws_sync_bat_level();
|
||||
}
|
||||
#endif
|
||||
user_send_cmd_prepare(USER_CTRL_HFP_CMD_UPDATE_BATTARY, 0, NULL);
|
||||
#endif
|
||||
break;
|
||||
case POWER_EVENT_POWER_CHARGE:
|
||||
if (lowpower_timer) {
|
||||
sys_timer_del(lowpower_timer);
|
||||
lowpower_timer = 0 ;
|
||||
}
|
||||
break;
|
||||
default:
|
||||
break;
|
||||
}
|
||||
#endif
|
||||
|
||||
return ret;
|
||||
}
|
||||
|
||||
|
||||
u16 get_vbat_level(void)
|
||||
{
|
||||
//return 370; //debug
|
||||
return (adc_get_voltage(AD_CH_VBAT) * 4 / 10);
|
||||
}
|
||||
|
||||
__attribute__((weak)) u8 remap_calculate_vbat_percent(u16 bat_val)
|
||||
{
|
||||
return 0;
|
||||
}
|
||||
|
||||
u16 get_vbat_value(void)
|
||||
{
|
||||
return bat_val;
|
||||
}
|
||||
|
||||
u8 get_vbat_percent(void)
|
||||
{
|
||||
u16 tmp_bat_val;
|
||||
u16 bat_val = get_vbat_level();
|
||||
if (battery_full_value == 0) {
|
||||
#if TCFG_CHARGE_ENABLE
|
||||
battery_full_value = (get_charge_full_value() - 100) / 10; //防止部分电池充不了这么高电量,充满显示未满的情况
|
||||
#else
|
||||
battery_full_value = 420;
|
||||
#endif
|
||||
}
|
||||
|
||||
if (bat_val <= app_var.poweroff_tone_v) {
|
||||
return 0;
|
||||
}
|
||||
|
||||
tmp_bat_val = remap_calculate_vbat_percent(bat_val);
|
||||
if (!tmp_bat_val) {
|
||||
tmp_bat_val = ((u32)bat_val - app_var.poweroff_tone_v) * 100 / (battery_full_value - app_var.poweroff_tone_v);
|
||||
if (tmp_bat_val > 100) {
|
||||
tmp_bat_val = 100;
|
||||
}
|
||||
}
|
||||
return (u8)tmp_bat_val;
|
||||
}
|
||||
|
||||
bool get_vbat_need_shutdown(void)
|
||||
{
|
||||
if ((bat_val <= LOW_POWER_SHUTDOWN) || adc_check_vbat_lowpower()) {
|
||||
return TRUE;
|
||||
}
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
//将当前电量转换为1~9级发送给手机同步电量
|
||||
u8 battery_value_to_phone_level(u16 bat_val)
|
||||
{
|
||||
u8 battery_level = 0;
|
||||
u8 vbat_percent = get_vbat_percent();
|
||||
|
||||
if (vbat_percent < 5) { //小于5%电量等级为0,显示10%
|
||||
return 0;
|
||||
}
|
||||
|
||||
battery_level = (vbat_percent - 5) / 10;
|
||||
|
||||
return battery_level;
|
||||
}
|
||||
|
||||
//获取自身的电量
|
||||
u8 get_self_battery_level(void)
|
||||
{
|
||||
return cur_battery_level;
|
||||
}
|
||||
|
||||
u8 get_cur_battery_level(void)
|
||||
{
|
||||
u8 bat_lev = tws_sibling_bat_level & (~BIT(7));
|
||||
#if TCFG_USER_TWS_ENABLE
|
||||
if (bat_lev == 0x7f) {
|
||||
return cur_battery_level;
|
||||
}
|
||||
|
||||
#if (CONFIG_DISPLAY_TWS_BAT_TYPE == CONFIG_DISPLAY_TWS_BAT_LOWER)
|
||||
return cur_battery_level < bat_lev ? cur_battery_level : bat_lev;
|
||||
#elif (CONFIG_DISPLAY_TWS_BAT_TYPE == CONFIG_DISPLAY_TWS_BAT_HIGHER)
|
||||
return cur_battery_level < bat_lev ? bat_lev : cur_battery_level;
|
||||
#elif (CONFIG_DISPLAY_TWS_BAT_TYPE == CONFIG_DISPLAY_TWS_BAT_LEFT)
|
||||
return tws_api_get_local_channel() == 'L' ? cur_battery_level : bat_lev;
|
||||
#elif (CONFIG_DISPLAY_TWS_BAT_TYPE == CONFIG_DISPLAY_TWS_BAT_RIGHT)
|
||||
return tws_api_get_local_channel() == 'R' ? cur_battery_level : bat_lev;
|
||||
#else
|
||||
return cur_battery_level;
|
||||
#endif //END CONFIG_DISPLAY_TWS_BAT_TYPE
|
||||
|
||||
#else //TCFG_USER_TWS_ENABLE == 0
|
||||
return cur_battery_level;
|
||||
#endif
|
||||
}
|
||||
|
||||
void vbat_check_slow(void *priv)
|
||||
{
|
||||
if (vbat_fast_timer == 0) {
|
||||
vbat_fast_timer = usr_timer_add(NULL, vbat_check, 10, 1);
|
||||
}
|
||||
if (get_charge_online_flag()) {
|
||||
sys_timer_modify(vbat_slow_timer, 60 * 1000);
|
||||
} else {
|
||||
sys_timer_modify(vbat_slow_timer, 10 * 1000);
|
||||
}
|
||||
}
|
||||
|
||||
void vbat_check_init(void)
|
||||
{
|
||||
if (vbat_slow_timer == 0) {
|
||||
vbat_slow_timer = sys_timer_add(NULL, vbat_check_slow, 10 * 1000);
|
||||
} else {
|
||||
sys_timer_modify(vbat_slow_timer, 10 * 1000);
|
||||
}
|
||||
|
||||
if (vbat_fast_timer == 0) {
|
||||
vbat_fast_timer = usr_timer_add(NULL, vbat_check, 10, 1);
|
||||
}
|
||||
}
|
||||
|
||||
void vbat_timer_delete(void)
|
||||
{
|
||||
if (vbat_slow_timer) {
|
||||
sys_timer_del(vbat_slow_timer);
|
||||
vbat_slow_timer = 0;
|
||||
}
|
||||
if (vbat_fast_timer) {
|
||||
usr_timer_del(vbat_fast_timer);
|
||||
vbat_fast_timer = 0;
|
||||
}
|
||||
}
|
||||
|
||||
void vbat_check(void *priv)
|
||||
{
|
||||
static u8 unit_cnt = 0;
|
||||
static u8 low_warn_cnt = 0;
|
||||
static u8 low_off_cnt = 0;
|
||||
static u8 low_voice_cnt = 0;
|
||||
static u8 low_power_cnt = 0;
|
||||
static u8 power_normal_cnt = 0;
|
||||
static u8 charge_online_flag = 0;
|
||||
static u8 low_voice_first_flag = 1;//进入低电后先提醒一次
|
||||
|
||||
if (!bat_val) {
|
||||
bat_val = get_vbat_level();
|
||||
} else {
|
||||
bat_val = (get_vbat_level() + bat_val) / 2;
|
||||
}
|
||||
|
||||
cur_battery_level = battery_value_to_phone_level(bat_val);
|
||||
|
||||
/* printf("bv:%d, bl:%d , check_vbat:%d\n", bat_val, cur_battery_level, adc_check_vbat_lowpower()); */
|
||||
|
||||
unit_cnt++;
|
||||
|
||||
/* if (bat_val < LOW_POWER_OFF_VAL) { */
|
||||
if (adc_check_vbat_lowpower() || (bat_val <= app_var.poweroff_tone_v)) {
|
||||
low_off_cnt++;
|
||||
}
|
||||
/* if (bat_val < LOW_POWER_WARN_VAL) { */
|
||||
if (bat_val <= app_var.warning_tone_v) {
|
||||
low_warn_cnt++;
|
||||
}
|
||||
|
||||
/* log_info("unit_cnt:%d\n", unit_cnt); */
|
||||
|
||||
if (unit_cnt >= VBAT_DETECT_CNT) {
|
||||
|
||||
if (get_charge_online_flag() == 0) {
|
||||
if (low_off_cnt > (VBAT_DETECT_CNT / 2)) { //低电关机
|
||||
low_power_cnt++;
|
||||
low_voice_cnt = 0;
|
||||
power_normal_cnt = 0;
|
||||
cur_bat_st = VBAT_LOWPOWER;
|
||||
if (low_power_cnt > 6) {
|
||||
log_info("\n*******Low Power,enter softpoweroff********\n");
|
||||
low_power_cnt = 0;
|
||||
power_event_to_user(POWER_EVENT_POWER_LOW);
|
||||
usr_timer_del(vbat_fast_timer);
|
||||
vbat_fast_timer = 0;
|
||||
}
|
||||
} else if (low_warn_cnt > (VBAT_DETECT_CNT / 2)) { //低电提醒
|
||||
low_voice_cnt ++;
|
||||
low_power_cnt = 0;
|
||||
power_normal_cnt = 0;
|
||||
cur_bat_st = VBAT_WARNING;
|
||||
if ((low_voice_first_flag && low_voice_cnt > 1) || //第一次进低电10s后报一次
|
||||
(!low_voice_first_flag && low_voice_cnt >= 5)) {
|
||||
low_voice_first_flag = 0;
|
||||
low_voice_cnt = 0;
|
||||
if (!lowpower_timer) {
|
||||
log_info("\n**Low Power,Please Charge Soon!!!**\n");
|
||||
power_event_to_user(POWER_EVENT_POWER_WARNING);
|
||||
}
|
||||
}
|
||||
} else {
|
||||
power_normal_cnt++;
|
||||
low_voice_cnt = 0;
|
||||
low_power_cnt = 0;
|
||||
if (power_normal_cnt > 2) {
|
||||
if (cur_bat_st != VBAT_NORMAL) {
|
||||
log_info("[Noraml power]\n");
|
||||
cur_bat_st = VBAT_NORMAL;
|
||||
power_event_to_user(POWER_EVENT_POWER_NORMAL);
|
||||
}
|
||||
}
|
||||
}
|
||||
} else {
|
||||
power_event_to_user(POWER_EVENT_POWER_CHARGE);
|
||||
}
|
||||
|
||||
unit_cnt = 0;
|
||||
low_off_cnt = 0;
|
||||
low_warn_cnt = 0;
|
||||
|
||||
if (cur_bat_st != VBAT_LOWPOWER) {
|
||||
usr_timer_del(vbat_fast_timer);
|
||||
vbat_fast_timer = 0;
|
||||
cur_battery_level = battery_value_to_phone_level(bat_val);
|
||||
if (cur_battery_level != old_battery_level) {
|
||||
power_event_to_user(POWER_EVENT_POWER_CHANGE);
|
||||
} else {
|
||||
if (charge_online_flag != get_charge_online_flag()) {
|
||||
//充电变化也要交换,确定是否在充电仓
|
||||
power_event_to_user(POWER_EVENT_POWER_CHANGE);
|
||||
}
|
||||
}
|
||||
charge_online_flag = get_charge_online_flag();
|
||||
old_battery_level = cur_battery_level;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
bool vbat_is_low_power(void)
|
||||
{
|
||||
return (cur_bat_st != VBAT_NORMAL);
|
||||
}
|
||||
|
||||
void check_power_on_voltage(void)
|
||||
{
|
||||
#if(TCFG_SYS_LVD_EN == 1)
|
||||
|
||||
u16 val = 0;
|
||||
u8 normal_power_cnt = 0;
|
||||
u8 low_power_cnt = 0;
|
||||
|
||||
while (1) {
|
||||
clr_wdt();
|
||||
val = get_vbat_level();
|
||||
printf("vbat: %d\n", val);
|
||||
if ((val < app_var.poweroff_tone_v) || adc_check_vbat_lowpower()) {
|
||||
low_power_cnt++;
|
||||
normal_power_cnt = 0;
|
||||
if (low_power_cnt > 10) {
|
||||
ui_update_status(STATUS_POWERON_LOWPOWER);
|
||||
os_time_dly(100);
|
||||
log_info("power on low power , enter softpoweroff!\n");
|
||||
power_set_soft_poweroff();
|
||||
}
|
||||
} else {
|
||||
normal_power_cnt++;
|
||||
low_power_cnt = 0;
|
||||
if (normal_power_cnt > 10) {
|
||||
vbat_check_init();
|
||||
return;
|
||||
}
|
||||
}
|
||||
}
|
||||
#endif
|
||||
}
|
||||
@ -1,549 +0,0 @@
|
||||
#include "app_umidigi_chargestore.h"
|
||||
#include "init.h"
|
||||
#include "app_config.h"
|
||||
#include "system/includes.h"
|
||||
#include "asm/charge.h"
|
||||
#include "user_cfg.h"
|
||||
#include "app_chargestore.h"
|
||||
#include "device/vm.h"
|
||||
#include "btstack/avctp_user.h"
|
||||
#include "app_power_manage.h"
|
||||
#include "app_action.h"
|
||||
#include "app_main.h"
|
||||
#include "app_charge.h"
|
||||
#include "app_testbox.h"
|
||||
#include "classic/tws_api.h"
|
||||
#include "update.h"
|
||||
#include "bt_ble.h"
|
||||
#include "bt_tws.h"
|
||||
#include "app_action.h"
|
||||
#include "bt_common.h"
|
||||
#include "le_rcsp_adv_module.h"
|
||||
#include "tone_player.h"
|
||||
#include "app_msg.h"
|
||||
#include "key_event_deal.h"
|
||||
|
||||
#define LOG_TAG_CONST APP_UMIDIGI_CHARGESTORE
|
||||
#define LOG_TAG "[APP_UMIDIGI_CHARGESTORE]"
|
||||
#define LOG_ERROR_ENABLE
|
||||
#define LOG_DEBUG_ENABLE
|
||||
#define LOG_INFO_ENABLE
|
||||
/* #define LOG_DUMP_ENABLE */
|
||||
#define LOG_CLI_ENABLE
|
||||
#include "debug.h"
|
||||
|
||||
extern void bt_tws_remove_pairs();
|
||||
extern void cpu_reset();
|
||||
|
||||
|
||||
#if TCFG_UMIDIGI_BOX_ENABLE
|
||||
|
||||
struct umidigi_chargestore_info {
|
||||
int timer; //合盖之后定时进入休眠的句柄
|
||||
u8 cover_status; //充电舱盖子状态 0: 合盖 1:开盖
|
||||
u8 ear_number; //合盖时耳机在线数
|
||||
u8 close_ing; //等待合窗超时
|
||||
u8 bt_init_ok; //蓝牙协议栈初始化成功
|
||||
u8 active_disconnect; //主动断开连接
|
||||
u8 sibling_chg_lev; //对耳同步的充电舱电量
|
||||
u8 pair_flag; //配对标记
|
||||
u8 power_sync; //第一次获取到充电舱电量时,同步到对耳
|
||||
u8 switch2bt; //开盖切换到蓝牙的标记位
|
||||
u8 pre_power_lvl;
|
||||
|
||||
/*以下为充电舱发送CMD时携带的信息*/
|
||||
u8 case_charger_state; //充电舱自身充电状态 0: 不在充电 1: 充电中
|
||||
u8 case_battery_level; //充电舱电量百分比
|
||||
u8 l_ear_whether_in_box; //左耳是否在舱 0: 左耳不在仓 1:左耳在仓
|
||||
u8 r_ear_whether_in_box; //右耳是否在舱 0: 右耳不在仓 1:右耳在仓
|
||||
u8 usb_state; //usb插入/拔出标志(本地播放专用) 0: USB OUT 1: USB IN
|
||||
u16 open_case_timer; //延迟处理开盖命令定时器
|
||||
u16 pair_timer; //延迟处理配对命令定时器
|
||||
};
|
||||
|
||||
static struct umidigi_chargestore_info info = {
|
||||
.case_charger_state = 1,
|
||||
.ear_number = 1,
|
||||
.case_battery_level = 0xff,
|
||||
.sibling_chg_lev = 0xff,
|
||||
};
|
||||
|
||||
#define __this (&info)
|
||||
|
||||
/*获取充电舱电池电量*/
|
||||
u8 umidigi_chargestore_get_power_level(void)
|
||||
{
|
||||
if ((__this->case_battery_level == 0xff) ||
|
||||
((!get_charge_online_flag()) &&
|
||||
(__this->sibling_chg_lev != 0xff))) {
|
||||
return __this->sibling_chg_lev;
|
||||
}
|
||||
return __this->case_battery_level;
|
||||
}
|
||||
|
||||
/*获取充电舱充电状态*/
|
||||
u8 umidigi_chargestore_get_power_status(void)
|
||||
{
|
||||
return __this->case_charger_state;
|
||||
}
|
||||
|
||||
/*获取充电舱合盖或开盖状态*/
|
||||
u8 umidigi_chargestore_get_cover_status(void)
|
||||
{
|
||||
return __this->cover_status;
|
||||
}
|
||||
|
||||
/*获取合盖状态时耳机在仓数量*/
|
||||
u8 umidigi_chargestore_get_earphone_online(void)
|
||||
{
|
||||
return __this->ear_number;
|
||||
}
|
||||
|
||||
/*获取蓝牙初始化成功标志位*/
|
||||
void umidigi_chargestore_set_bt_init_ok(u8 flag)
|
||||
{
|
||||
__this->bt_init_ok = flag;
|
||||
}
|
||||
|
||||
#if TCFG_USER_TWS_ENABLE
|
||||
static void umidigi_set_tws_sibling_charge_level(void *_data, u16 len, bool rx)
|
||||
{
|
||||
if (rx) {
|
||||
u8 *data = (u8 *)_data;
|
||||
umidigi_chargestore_set_sibling_chg_lev(data[0]);
|
||||
}
|
||||
}
|
||||
|
||||
REGISTER_TWS_FUNC_STUB(charge_level_stub) = {
|
||||
.func_id = TWS_FUNC_ID_CHARGE_SYNC,
|
||||
.func = umidigi_set_tws_sibling_charge_level,
|
||||
};
|
||||
|
||||
#endif //TCFG_USER_TWS_ENABLE
|
||||
|
||||
int umidigi_chargestore_sync_chg_level(void)
|
||||
{
|
||||
#if TCFG_USER_TWS_ENABLE
|
||||
int err = -1;
|
||||
struct application *app = get_current_app();
|
||||
if (app && (!strcmp(app->name, "earphone")) && (!app_var.goto_poweroff_flag)) {
|
||||
err = tws_api_send_data_to_sibling((u8 *)&__this->case_battery_level, 1,
|
||||
TWS_FUNC_ID_CHARGE_SYNC);
|
||||
}
|
||||
return err;
|
||||
#else
|
||||
return 0;
|
||||
#endif
|
||||
}
|
||||
|
||||
/*设置对耳同步的充电舱电量*/
|
||||
void umidigi_chargestore_set_sibling_chg_lev(u8 chg_lev)
|
||||
{
|
||||
__this->sibling_chg_lev = chg_lev;
|
||||
}
|
||||
|
||||
/*设置充电舱电池电量*/
|
||||
void umidigi_chargestore_set_power_level(u8 power)
|
||||
{
|
||||
__this->case_battery_level = power;
|
||||
}
|
||||
|
||||
/*获取允许poweroff标志位*/
|
||||
u8 umidigi_chargestore_check_going_to_poweroff(void)
|
||||
{
|
||||
return __this->close_ing;
|
||||
}
|
||||
|
||||
void umidigi_chargestore_set_phone_disconnect(void)
|
||||
{
|
||||
#if (TCFG_BLE_DEMO_SELECT == DEF_BLE_DEMO_ADV)
|
||||
#if (!CONFIG_NO_DISPLAY_BUTTON_ICON)
|
||||
if (__this->pair_flag && get_tws_sibling_connect_state()) {
|
||||
//check ble inquiry
|
||||
//printf("get box log_key...con_dev=%d\n",get_tws_phone_connect_state());
|
||||
if ((bt_ble_icon_get_adv_state() == ADV_ST_RECONN)
|
||||
|| (bt_ble_icon_get_adv_state() == ADV_ST_DISMISS)
|
||||
|| (bt_ble_icon_get_adv_state() == ADV_ST_END)) {
|
||||
bt_ble_icon_reset();
|
||||
bt_ble_icon_open(ICON_TYPE_INQUIRY);
|
||||
}
|
||||
}
|
||||
#endif
|
||||
__this->pair_flag = 0;
|
||||
#elif (TCFG_BLE_DEMO_SELECT == DEF_BLE_DEMO_ADV_RCSP)
|
||||
#if (!CONFIG_NO_DISPLAY_BUTTON_ICON)
|
||||
if (__this->pair_flag && get_tws_sibling_connect_state()) {
|
||||
//check ble inquiry
|
||||
bt_ble_adv_ioctl(BT_ADV_SET_EDR_CON_FLAG, SECNE_UNCONNECTED, 1);
|
||||
}
|
||||
#endif
|
||||
__this->pair_flag = 0;
|
||||
#endif
|
||||
}
|
||||
|
||||
void umidigi_chargestore_set_phone_connect(void)
|
||||
{
|
||||
__this->active_disconnect = 0;
|
||||
}
|
||||
|
||||
extern void sys_enter_soft_poweroff(void *priv);
|
||||
void umidigi_chargestore_timeout_deal(void *priv)
|
||||
{
|
||||
__this->timer = 0;
|
||||
__this->close_ing = 0;
|
||||
|
||||
//该类型的充电仓获取不到充电在线状态时,认为出仓了。
|
||||
//避免盒盖马上开盖迅速拔出,收不到开盖消息,导致连上又复位系统。
|
||||
if (get_charge_online_flag() == 0) {
|
||||
__this->cover_status = 1;
|
||||
}
|
||||
|
||||
if ((!__this->cover_status) || __this->active_disconnect) {//当前为合盖或者主动断开连接
|
||||
struct application *app = get_current_app();
|
||||
if (app && strcmp(app->name, "idle")) {
|
||||
sys_enter_soft_poweroff((void *)1);
|
||||
}
|
||||
} else {
|
||||
#if (TCFG_BLE_DEMO_SELECT == DEF_BLE_DEMO_ADV)
|
||||
|
||||
/* if ((!get_total_connect_dev()) && (tws_api_get_role() == TWS_ROLE_MASTER) && (get_bt_tws_connect_status())) { */
|
||||
if (tws_api_get_role() == TWS_ROLE_MASTER) {
|
||||
printf("charge_icon_ctl...\n");
|
||||
bt_ble_icon_reset();
|
||||
#if CONFIG_NO_DISPLAY_BUTTON_ICON
|
||||
if (get_total_connect_dev()) {
|
||||
//蓝牙未真正断开;重新广播
|
||||
bt_ble_icon_open(ICON_TYPE_RECONNECT);
|
||||
} else {
|
||||
//蓝牙未连接,重新开可见性
|
||||
bt_ble_icon_open(ICON_TYPE_INQUIRY);
|
||||
}
|
||||
#else
|
||||
//不管蓝牙是否连接,默认打开
|
||||
bt_ble_icon_open(ICON_TYPE_RECONNECT);
|
||||
#endif
|
||||
|
||||
}
|
||||
#elif (TCFG_BLE_DEMO_SELECT == DEF_BLE_DEMO_ADV_RCSP)
|
||||
if (tws_api_get_role() == TWS_ROLE_MASTER) {
|
||||
printf("charge_icon_ctl...\n");
|
||||
#if CONFIG_NO_DISPLAY_BUTTON_ICON
|
||||
if (get_total_connect_dev()) {
|
||||
//蓝牙未真正断开;重新广播
|
||||
bt_ble_adv_ioctl(BT_ADV_SET_EDR_CON_FLAG, SECNE_CONNECTED, 1);
|
||||
} else {
|
||||
//蓝牙未连接,重新开可见性
|
||||
bt_ble_adv_ioctl(BT_ADV_SET_EDR_CON_FLAG, SECNE_UNCONNECTED, 1);
|
||||
}
|
||||
#else
|
||||
//不管蓝牙是否连接,默认打开
|
||||
bt_ble_adv_ioctl(BT_ADV_SET_EDR_CON_FLAG, SECNE_CONNECTED, 1);
|
||||
#endif
|
||||
|
||||
}
|
||||
#endif
|
||||
|
||||
}
|
||||
__this->ear_number = 1;
|
||||
}
|
||||
|
||||
/*开盖命令处理函数*/
|
||||
static void open_case_callback(void *priv)
|
||||
{
|
||||
struct application *app = get_current_app();
|
||||
if (__this->cover_status) {
|
||||
//电压过低,不进响应开盖命令
|
||||
#if TCFG_SYS_LVD_EN
|
||||
if (get_vbat_need_shutdown() == TRUE) {
|
||||
log_info(" lowpower deal!\n");
|
||||
__this->open_case_timer = 0;
|
||||
return;
|
||||
}
|
||||
#endif
|
||||
if (__this->cover_status) {//当前为开盖
|
||||
if (__this->power_sync) {
|
||||
if (umidigi_chargestore_sync_chg_level() == 0) {
|
||||
__this->power_sync = 0;
|
||||
}
|
||||
}
|
||||
if (app && strcmp(app->name, APP_NAME_BT) && (app_var.goto_poweroff_flag == 0)) {
|
||||
/* app_var.play_poweron_tone = 1; */
|
||||
app_var.play_poweron_tone = 0;
|
||||
power_set_mode(TCFG_LOWPOWER_POWER_SEL);
|
||||
r_printf("switch to bt\n");
|
||||
__this->switch2bt = 1;
|
||||
#if TCFG_SYS_LVD_EN
|
||||
vbat_check_init();
|
||||
#endif
|
||||
task_switch_to_bt();
|
||||
__this->switch2bt = 0;
|
||||
}
|
||||
}
|
||||
__this->open_case_timer = 0;
|
||||
} else {
|
||||
__this->open_case_timer = 0;
|
||||
}
|
||||
}
|
||||
|
||||
/*等待蓝牙初始化完成再进行对耳*/
|
||||
static void tws_pair_wait_bt_init_callback(void *priv)
|
||||
{
|
||||
#if TCFG_USER_TWS_ENABLE
|
||||
if (bt_tws_get_local_channel() == 'L') {
|
||||
r_printf("L channel\n");
|
||||
//充电仓不支持 双击回播电话,也不支持 双击配对和取消配对
|
||||
#if (!TCFG_CHARGESTORE_ENABLE)
|
||||
#if TCFG_USER_TWS_ENABLE
|
||||
if (bt_tws_start_search_sibling()) {
|
||||
tone_play_index(IDEX_TONE_NORMAL, 1);
|
||||
}
|
||||
#endif
|
||||
#endif
|
||||
if (bt_user_priv_var.last_call_type == BT_STATUS_PHONE_INCOME) {
|
||||
user_send_cmd_prepare(USER_CTRL_DIAL_NUMBER, bt_user_priv_var.income_phone_len, bt_user_priv_var.income_phone_num);
|
||||
} else {
|
||||
user_send_cmd_prepare(USER_CTRL_HFP_CALL_LAST_NO, 0, NULL);
|
||||
}
|
||||
} else if (bt_tws_get_local_channel() == 'R') {
|
||||
r_printf("R channel\n");
|
||||
} else if (bt_tws_get_local_channel() == 'U') {
|
||||
r_printf("U channel\n");
|
||||
}
|
||||
#endif
|
||||
__this->pair_timer = 0;
|
||||
}
|
||||
|
||||
/*配对命令处理函数*/
|
||||
static void tws_pair_callback(void *priv)
|
||||
{
|
||||
struct application *app = get_current_app();
|
||||
#if CONFIG_TWS_PAIR_MODE == CONFIG_TWS_PAIR_BY_CLICK
|
||||
if (app && strcmp(app->name, APP_NAME_BT) && (app_var.goto_poweroff_flag == 0)) {
|
||||
/* app_var.play_poweron_tone = 1; */
|
||||
app_var.play_poweron_tone = 0;
|
||||
power_set_mode(TCFG_LOWPOWER_POWER_SEL);
|
||||
r_printf("switch to bt\n");
|
||||
task_switch_to_bt();
|
||||
}
|
||||
sys_timeout_add(NULL, tws_pair_wait_bt_init_callback, 1000);
|
||||
#endif
|
||||
}
|
||||
|
||||
/*充电舱命令处理函数,所有命令携带8bit有效数据*/
|
||||
int app_umidigi_chargestore_event_handler(struct umidigi_chargestore_event *umidigi_chargestore_dev)
|
||||
{
|
||||
int ret = false;
|
||||
struct application *app = get_current_app();
|
||||
#if defined(TCFG_CHARGE_KEEP_UPDATA) && TCFG_CHARGE_KEEP_UPDATA
|
||||
//在升级过程中,不响应智能充电舱app层消息
|
||||
if (dual_bank_update_exist_flag_get() || classic_update_task_exist_flag_get()) {
|
||||
return ret;
|
||||
}
|
||||
#endif
|
||||
|
||||
switch (umidigi_chargestore_dev->event) {
|
||||
case CMD_RESERVED_0:
|
||||
log_info("event_CMD_RESERVED_0\n");
|
||||
break;
|
||||
|
||||
case CMD_FACTORY_RESET:
|
||||
log_info("event_CMD_FACTORY_RESET\n");
|
||||
/*该命令携带固定数据0x55*/
|
||||
if (umidigi_chargestore_dev->value != 0x55) {
|
||||
break;
|
||||
}
|
||||
#if TCFG_USER_TWS_ENABLE
|
||||
bt_tws_remove_pairs();
|
||||
#endif
|
||||
user_send_cmd_prepare(USER_CTRL_DEL_ALL_REMOTE_INFO, 0, NULL);
|
||||
cpu_reset();
|
||||
break;
|
||||
|
||||
case CMD_RESERVED_2:
|
||||
log_info("event_CMD_RESERVED_2\n");
|
||||
break;
|
||||
|
||||
case CMD_OPEN_CASE:
|
||||
log_info("event_CMD_OPEN_CASE\n");
|
||||
/*在收到其中一个开盖命令后,延迟2s进行耳机端开盖的相关操作*/
|
||||
/*防止被其他开盖命令导致的通讯口电平变化所影响*/
|
||||
if (!__this->open_case_timer) {
|
||||
__this->open_case_timer = sys_timeout_add(NULL, open_case_callback, 2000);
|
||||
}
|
||||
if (__this->case_battery_level == 0xff) {
|
||||
__this->power_sync = 1;
|
||||
}
|
||||
/*该命令携带的8bit data,BIT[7]为充电舱状态 BIT[6:0]为充电舱电量*/
|
||||
__this->case_charger_state = umidigi_chargestore_dev->value >> 7;
|
||||
__this->case_battery_level = umidigi_chargestore_dev->value & 0x7f;
|
||||
if (__this->case_battery_level != __this->pre_power_lvl) {
|
||||
__this->power_sync = 1;
|
||||
}
|
||||
__this->pre_power_lvl = __this->case_battery_level;
|
||||
break;
|
||||
|
||||
case CMD_CLOSE_CASE:
|
||||
log_info("event_CMD_CLOSE_CASE\n");
|
||||
/*该命令携带的8bit data,BIT[7:2]为固定数据0x15*/
|
||||
/*BIT[1]:1:右耳在仓 0:右耳不在仓, BIT[0]:1:左耳在仓 0:左耳不在仓*/
|
||||
if ((umidigi_chargestore_dev->value >> 2) != 0x15) {
|
||||
break;
|
||||
}
|
||||
__this->r_ear_whether_in_box = (umidigi_chargestore_dev->value & 0x02) >> 1;
|
||||
__this->l_ear_whether_in_box = umidigi_chargestore_dev->value & 0x01;
|
||||
__this->ear_number = __this->r_ear_whether_in_box + __this->l_ear_whether_in_box;
|
||||
/* r_printf("r=%d l=%d\n", __this->r_ear_whether_in_box, __this->l_ear_whether_in_box); */
|
||||
/* r_printf("ear_number = %d\n", __this->ear_number); */
|
||||
|
||||
if (!__this->cover_status) {//当前为合盖
|
||||
#if (TCFG_BLE_DEMO_SELECT == DEF_BLE_DEMO_ADV)
|
||||
if ((__this->bt_init_ok) && (tws_api_get_role() == TWS_ROLE_MASTER)) {
|
||||
bt_ble_icon_close(1);
|
||||
}
|
||||
#elif (TCFG_BLE_DEMO_SELECT == DEF_BLE_DEMO_ADV_RCSP)
|
||||
if ((__this->bt_init_ok) && (tws_api_get_role() == TWS_ROLE_MASTER)) {
|
||||
bt_ble_adv_ioctl(BT_ADV_SET_EDR_CON_FLAG, SECNE_DISMISS, 1);
|
||||
}
|
||||
#endif
|
||||
if (!__this->timer) {
|
||||
__this->timer = sys_timeout_add(NULL, umidigi_chargestore_timeout_deal, 2000);
|
||||
if (!__this->timer) {
|
||||
log_error("timer alloc err!\n");
|
||||
} else {
|
||||
__this->close_ing = 1;
|
||||
}
|
||||
} else {
|
||||
sys_timer_modify(__this->timer, 2000);
|
||||
__this->close_ing = 1;
|
||||
}
|
||||
} else {
|
||||
__this->ear_number = 1;
|
||||
__this->close_ing = 0;
|
||||
}
|
||||
break;
|
||||
|
||||
case CMD_ENTER_PAIRING_MODE:
|
||||
log_info("event_CMD_ENTER_PAIRING_MODE\n");
|
||||
/*该命令携带固定数据0x55*/
|
||||
if (umidigi_chargestore_dev->value != 0x55) {
|
||||
break;
|
||||
}
|
||||
if (!__this->pair_timer) {
|
||||
__this->pair_timer = sys_timeout_add(NULL, tws_pair_callback, 2000);
|
||||
}
|
||||
break;
|
||||
|
||||
case CMD_DUT_MODE_CMD:
|
||||
log_info("event_CMD_DUT_MODE_CMD\n");
|
||||
break;
|
||||
|
||||
case CMD_USB_STATE:
|
||||
log_info("event_CMD_USB_STATE\n");
|
||||
/*该命令携带固定数据0x05或0x70 0x05: USB IN, 0x70: USB OUT*/
|
||||
if (umidigi_chargestore_dev->value == 0x05) {
|
||||
__this->usb_state = 1;
|
||||
} else if (umidigi_chargestore_dev->value == 0x70) {
|
||||
__this->usb_state = 0;
|
||||
}
|
||||
break;
|
||||
|
||||
case CMD_RESERVED_B:
|
||||
log_info("event_CMD_RESERVED_B\n");
|
||||
break;
|
||||
|
||||
case CMD_SEND_CASE_BATTERY:
|
||||
log_info("event_CMD_SEND_CASE_BATTERY\n");
|
||||
/*该命令携带的8bit data,BIT[7]为充电舱状态 BIT[6:0]为充电舱电量*/
|
||||
__this->case_charger_state = umidigi_chargestore_dev->value >> 7;
|
||||
__this->case_battery_level = umidigi_chargestore_dev->value & 0x7f;
|
||||
break;
|
||||
|
||||
default:
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
void umidigi_chargestore_event_to_user(u32 type, u8 event, u8 data)
|
||||
{
|
||||
struct sys_event e;
|
||||
e.type = SYS_DEVICE_EVENT;
|
||||
e.arg = (void *)type;
|
||||
e.u.umidigi_chargestore.event = event;
|
||||
e.u.umidigi_chargestore.value = data;
|
||||
sys_event_notify(&e);
|
||||
}
|
||||
|
||||
/*umidigi充电舱消息处理*/
|
||||
void app_umidigi_chargetore_message_deal(u16 message)
|
||||
{
|
||||
u8 cmd, data;
|
||||
cmd = (message & CMD_IN_MESSAGE) >> 10;
|
||||
data = (message & DATA_IN_MESSAGE) >> 2;
|
||||
|
||||
#if TCFG_TEST_BOX_ENABLE
|
||||
//测试盒在线时,不解码数据
|
||||
if (testbox_get_status()) {
|
||||
return;
|
||||
}
|
||||
#endif
|
||||
|
||||
switch (cmd) {
|
||||
case CMD_RESERVED_0:
|
||||
log_info("reserved0\n");
|
||||
umidigi_chargestore_event_to_user(DEVICE_EVENT_UMIDIGI_CHARGE_STORE, CMD_RESERVED_0, data);
|
||||
break;
|
||||
case CMD_FACTORY_RESET:
|
||||
//充电仓不删除配对信息
|
||||
break;
|
||||
__this->cover_status = 1;
|
||||
__this->close_ing = 0;
|
||||
r_printf("factory reset\n");
|
||||
umidigi_chargestore_event_to_user(DEVICE_EVENT_UMIDIGI_CHARGE_STORE, CMD_FACTORY_RESET, data);
|
||||
break;
|
||||
case CMD_RESERVED_2:
|
||||
log_info("reserved2\n");
|
||||
umidigi_chargestore_event_to_user(DEVICE_EVENT_UMIDIGI_CHARGE_STORE, CMD_RESERVED_2, data);
|
||||
break;
|
||||
case CMD_OPEN_CASE:
|
||||
__this->cover_status = 1;
|
||||
__this->close_ing = 0;
|
||||
log_info("open case\n");
|
||||
//切模式过程中不发送消息,防止堆满消息
|
||||
if (__this->switch2bt == 0) {
|
||||
umidigi_chargestore_event_to_user(DEVICE_EVENT_UMIDIGI_CHARGE_STORE, CMD_OPEN_CASE, data);
|
||||
}
|
||||
break;
|
||||
case CMD_CLOSE_CASE:
|
||||
__this->cover_status = 0;
|
||||
log_info("close case\n");
|
||||
umidigi_chargestore_event_to_user(DEVICE_EVENT_UMIDIGI_CHARGE_STORE, CMD_CLOSE_CASE, data);
|
||||
break;
|
||||
case CMD_ENTER_PAIRING_MODE:
|
||||
__this->cover_status = 1;
|
||||
log_info("enter pairing mode\n");
|
||||
umidigi_chargestore_event_to_user(DEVICE_EVENT_UMIDIGI_CHARGE_STORE, CMD_ENTER_PAIRING_MODE, data);
|
||||
break;
|
||||
case CMD_DUT_MODE_CMD:
|
||||
log_info("dut mode\n");
|
||||
umidigi_chargestore_event_to_user(DEVICE_EVENT_UMIDIGI_CHARGE_STORE, CMD_DUT_MODE_CMD, data);
|
||||
break;
|
||||
case CMD_USB_STATE:
|
||||
log_info("usb state\n");
|
||||
umidigi_chargestore_event_to_user(DEVICE_EVENT_UMIDIGI_CHARGE_STORE, CMD_USB_STATE, data);
|
||||
break;
|
||||
case CMD_RESERVED_B:
|
||||
log_info("reservedB\n");
|
||||
umidigi_chargestore_event_to_user(DEVICE_EVENT_UMIDIGI_CHARGE_STORE, CMD_RESERVED_B, data);
|
||||
break;
|
||||
case CMD_SEND_CASE_BATTERY:
|
||||
log_info("received case battery\n");
|
||||
umidigi_chargestore_event_to_user(DEVICE_EVENT_UMIDIGI_CHARGE_STORE, CMD_SEND_CASE_BATTERY, data);
|
||||
break;
|
||||
default:
|
||||
log_info("received an invalid message!\n");
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
#endif
|
||||
@ -1,4 +0,0 @@
|
||||
.section .sys.version, "ax"
|
||||
|
||||
.long 254991771
|
||||
.asciz "JL701N_V1.6.1-@20240130-$8f8f3995"
|
||||
Binary file not shown.
Binary file not shown.
1
cpu/br28/tools/download/earphone/646-AC690X-7603.key
Normal file
1
cpu/br28/tools/download/earphone/646-AC690X-7603.key
Normal file
@ -0,0 +1 @@
|
||||
64F3350FE2590FAF79755623B7E159CE83FAD97C34014E5EB2B528F6D6C2DABAB3B7C88C
|
||||
@ -10,14 +10,14 @@ copy ..\..\ota.bin .
|
||||
copy ..\..\anc_coeff.bin .
|
||||
copy ..\..\anc_gains.bin .
|
||||
|
||||
..\..\isd_download.exe ..\..\isd_config.ini -tonorflash -dev br28 -boot 0x120000 -div8 -wait 300 -uboot ..\..\uboot.boot -app ..\..\app.bin -res ..\..\cfg_tool.bin tone.cfg p11_code.bin ..\..\eq_cfg_hw.bin -uboot_compress -key AC69.key -format all -key AC690X-8029.key
|
||||
..\..\isd_download.exe ..\..\isd_config.ini -tonorflash -dev br28 -boot 0x120000 -div8 -wait 300 -uboot ..\..\uboot.boot -app ..\..\app.bin -res ..\..\cfg_tool.bin tone.cfg p11_code.bin ..\..\eq_cfg_hw.bin -uboot_compress -key AC69.key -format all -key 646-AC690X-7603.key
|
||||
|
||||
@REM..\..\isd_download.exe ..\..\isd_config.ini -tonorflash -dev br34 -boot 0x20000 -div8 -wait 300 -uboot ..\..\uboot.boot -app ..\..\app.bin ..\..\cfg_tool.bin -res tone.cfg kws_command.bin p11_code.bin -uboot_compress
|
||||
|
||||
:: -format all
|
||||
::-reboot 2500
|
||||
|
||||
@rem ɾ<><C9BE><EFBFBD><EFBFBD>ʱ<EFBFBD>ļ<EFBFBD>-format all
|
||||
@rem ɾ<><C9BE><EFBFBD><EFBFBD>ʱ<EFBFBD>ļ<EFBFBD>-format all
|
||||
if exist *.mp3 del *.mp3
|
||||
if exist *.PIX del *.PIX
|
||||
if exist *.TAB del *.TAB
|
||||
@ -28,7 +28,7 @@ if exist *.sty del *.sty
|
||||
copy jl_isd.ufw update.ufw
|
||||
del jl_isd.ufw
|
||||
|
||||
@REM <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ļ<EFBFBD><C4BC><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ļ<EFBFBD>
|
||||
@REM <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ļ<EFBFBD><C4BC><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ļ<EFBFBD>
|
||||
::ufw_maker.exe -chip AC800X %ADD_KEY% -output config.ufw -res bt_cfg.cfg
|
||||
|
||||
::IF EXIST jl_696x.bin del jl_696x.bin
|
||||
@ -40,10 +40,10 @@ if exist br28loader.bin del br28loader.bin
|
||||
if exist anc_coeff.bin del anc_coeff.bin
|
||||
if exist anc_gains.bin del anc_gains.bin
|
||||
|
||||
@rem <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>˵<EFBFBD><CBB5>
|
||||
@rem -format vm //<2F><><EFBFBD><EFBFBD>VM <20><><EFBFBD><EFBFBD>
|
||||
@rem -format cfg //<2F><><EFBFBD><EFBFBD>BT CFG <20><><EFBFBD><EFBFBD>
|
||||
@rem -format 0x3f0-2 //<2F><>ʾ<EFBFBD>ӵ<EFBFBD> 0x3f0 <20><> sector <20><>ʼ<EFBFBD><CABC><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> 2 <20><> sector(<28><>һ<EFBFBD><D2BB><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϊ16<31><36><EFBFBD>ƻ<EFBFBD>10<31><30><EFBFBD>ƶ<EFBFBD><C6B6>ɣ<EFBFBD><C9A3>ڶ<EFBFBD><DAB6><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>10<31><30><EFBFBD><EFBFBD>)
|
||||
@rem <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>˵<EFBFBD><CBB5>
|
||||
@rem -format vm //<2F><><EFBFBD><EFBFBD>VM <20><><EFBFBD><EFBFBD>
|
||||
@rem -format cfg //<2F><><EFBFBD><EFBFBD>BT CFG <20><><EFBFBD><EFBFBD>
|
||||
@rem -format 0x3f0-2 //<2F><>ʾ<EFBFBD>ӵ<EFBFBD> 0x3f0 <20><> sector <20><>ʼ<EFBFBD><CABC><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> 2 <20><> sector(<28><>һ<EFBFBD><D2BB><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϊ16<31><36><EFBFBD>ƻ<EFBFBD>10<31><30><EFBFBD>ƶ<EFBFBD><C6B6>ɣ<EFBFBD><C9A3>ڶ<EFBFBD><DAB6><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>10<31><30><EFBFBD><EFBFBD>)
|
||||
|
||||
ping /n 2 127.1>null
|
||||
IF EXIST null del null
|
||||
|
||||
@ -10,14 +10,14 @@ copy ..\..\ota.bin .
|
||||
copy ..\..\anc_coeff.bin .
|
||||
copy ..\..\anc_gains.bin .
|
||||
|
||||
..\..\isd_download.exe ..\..\isd_config.ini -tonorflash -dev br28 -boot 0x120000 -div8 -wait 300 -uboot ..\..\uboot.boot -app ..\..\app.bin -res ..\..\cfg_tool.bin tone.cfg p11_code.bin ..\..\eq_cfg_hw.bin -uboot_compress -key AC690X-8029.key
|
||||
..\..\isd_download.exe ..\..\isd_config.ini -tonorflash -dev br28 -boot 0x120000 -div8 -wait 300 -uboot ..\..\uboot.boot -app ..\..\app.bin -res ..\..\cfg_tool.bin tone.cfg p11_code.bin ..\..\eq_cfg_hw.bin -uboot_compress -key 646-AC690X-7603.key
|
||||
|
||||
@REM..\..\isd_download.exe ..\..\isd_config.ini -tonorflash -dev br34 -boot 0x20000 -div8 -wait 300 -uboot ..\..\uboot.boot -app ..\..\app.bin ..\..\cfg_tool.bin -res tone.cfg kws_command.bin p11_code.bin -uboot_compress
|
||||
|
||||
:: -format all
|
||||
::-reboot 2500
|
||||
|
||||
@rem ɾ<><C9BE><EFBFBD><EFBFBD>ʱ<EFBFBD>ļ<EFBFBD>-format all
|
||||
@rem ɾ<><C9BE><EFBFBD><EFBFBD>ʱ<EFBFBD>ļ<EFBFBD>-format all
|
||||
if exist *.mp3 del *.mp3
|
||||
if exist *.PIX del *.PIX
|
||||
if exist *.TAB del *.TAB
|
||||
@ -28,7 +28,7 @@ if exist *.sty del *.sty
|
||||
copy jl_isd.ufw update.ufw
|
||||
del jl_isd.ufw
|
||||
|
||||
@REM <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ļ<EFBFBD><C4BC><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ļ<EFBFBD>
|
||||
@REM <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ļ<EFBFBD><C4BC><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ļ<EFBFBD>
|
||||
::ufw_maker.exe -chip AC800X %ADD_KEY% -output config.ufw -res bt_cfg.cfg
|
||||
|
||||
::IF EXIST jl_696x.bin del jl_696x.bin
|
||||
@ -40,10 +40,10 @@ if exist br28loader.bin del br28loader.bin
|
||||
if exist anc_coeff.bin del anc_coeff.bin
|
||||
if exist anc_gains.bin del anc_gains.bin
|
||||
|
||||
@rem <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>˵<EFBFBD><CBB5>
|
||||
@rem -format vm //<2F><><EFBFBD><EFBFBD>VM <20><><EFBFBD><EFBFBD>
|
||||
@rem -format cfg //<2F><><EFBFBD><EFBFBD>BT CFG <20><><EFBFBD><EFBFBD>
|
||||
@rem -format 0x3f0-2 //<2F><>ʾ<EFBFBD>ӵ<EFBFBD> 0x3f0 <20><> sector <20><>ʼ<EFBFBD><CABC><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> 2 <20><> sector(<28><>һ<EFBFBD><D2BB><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϊ16<31><36><EFBFBD>ƻ<EFBFBD>10<31><30><EFBFBD>ƶ<EFBFBD><C6B6>ɣ<EFBFBD><C9A3>ڶ<EFBFBD><DAB6><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>10<31><30><EFBFBD><EFBFBD>)
|
||||
@rem <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>˵<EFBFBD><CBB5>
|
||||
@rem -format vm //<2F><><EFBFBD><EFBFBD>VM <20><><EFBFBD><EFBFBD>
|
||||
@rem -format cfg //<2F><><EFBFBD><EFBFBD>BT CFG <20><><EFBFBD><EFBFBD>
|
||||
@rem -format 0x3f0-2 //<2F><>ʾ<EFBFBD>ӵ<EFBFBD> 0x3f0 <20><> sector <20><>ʼ<EFBFBD><CABC><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> 2 <20><> sector(<28><>һ<EFBFBD><D2BB><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϊ16<31><36><EFBFBD>ƻ<EFBFBD>10<31><30><EFBFBD>ƶ<EFBFBD><C6B6>ɣ<EFBFBD><C9A3>ڶ<EFBFBD><DAB6><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>10<31><30><EFBFBD><EFBFBD>)
|
||||
|
||||
ping /n 2 127.1>null
|
||||
IF EXIST null del null
|
||||
|
||||
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
File diff suppressed because one or more lines are too long
@ -409,14 +409,13 @@ objs/apps/common/device/gSensor/gSensor_manage.c.o
|
||||
-r=objs/apps/common/device/gSensor/gSensor_manage.c.o,sys_event_notify,l
|
||||
-r=objs/apps/common/device/gSensor/gSensor_manage.c.o,gSensor_int_io_detect,pl
|
||||
-r=objs/apps/common/device/gSensor/gSensor_manage.c.o,gpio_read,l
|
||||
-r=objs/apps/common/device/gSensor/gSensor_manage.c.o,log_print,l
|
||||
-r=objs/apps/common/device/gSensor/gSensor_manage.c.o,printf,l
|
||||
-r=objs/apps/common/device/gSensor/gSensor_manage.c.o,gSensor_read_data,pl
|
||||
-r=objs/apps/common/device/gSensor/gSensor_manage.c.o,get_gSensor_data,pl
|
||||
-r=objs/apps/common/device/gSensor/gSensor_manage.c.o,read_gsensor_buf,pl
|
||||
-r=objs/apps/common/device/gSensor/gSensor_manage.c.o,read_gsensor_nbuf,pl
|
||||
-r=objs/apps/common/device/gSensor/gSensor_manage.c.o,cbuf_read,l
|
||||
-r=objs/apps/common/device/gSensor/gSensor_manage.c.o,cbuf_clear,l
|
||||
-r=objs/apps/common/device/gSensor/gSensor_manage.c.o,printf,l
|
||||
-r=objs/apps/common/device/gSensor/gSensor_manage.c.o,write_gsensor_data_handle,pl
|
||||
-r=objs/apps/common/device/gSensor/gSensor_manage.c.o,cbuf_write,l
|
||||
-r=objs/apps/common/device/gSensor/gSensor_manage.c.o,gravity_sensor_command,pl
|
||||
@ -440,7 +439,6 @@ objs/apps/common/device/gSensor/gSensor_manage.c.o
|
||||
-r=objs/apps/common/device/gSensor/gSensor_manage.c.o,gsensor_disable,pl
|
||||
-r=objs/apps/common/device/gSensor/gSensor_manage.c.o,free,l
|
||||
-r=objs/apps/common/device/gSensor/gSensor_manage.c.o,gsensor_enable,pl
|
||||
-r=objs/apps/common/device/gSensor/gSensor_manage.c.o,puts,l
|
||||
-r=objs/apps/common/device/gSensor/gSensor_manage.c.o,gSensor_hdl,pl
|
||||
-r=objs/apps/common/device/gSensor/gSensor_manage.c.o,__gSensor_info,pl
|
||||
-r=objs/apps/common/device/gSensor/gSensor_manage.c.o,read_write_status,pl
|
||||
@ -1865,6 +1863,9 @@ objs/apps/common/third_party_profile/jieli/JL_rcsp/adv_rcsp_protocol/rcsp_adv_op
|
||||
objs/apps/common/third_party_profile/jieli/JL_rcsp/adv_rcsp_protocol/rcsp_adv_tws_sync.c.o
|
||||
objs/apps/common/third_party_profile/jieli/JL_rcsp/bt_trans_data/le_rcsp_adv_module.c.o
|
||||
-r=objs/apps/common/third_party_profile/jieli/JL_rcsp/bt_trans_data/le_rcsp_adv_module.c.o,ble_update_get_ready_jump_flag,l
|
||||
-r=objs/apps/common/third_party_profile/jieli/JL_rcsp/bt_trans_data/le_rcsp_adv_module.c.o,rcsp_adv_fill_mac_addr,pl
|
||||
-r=objs/apps/common/third_party_profile/jieli/JL_rcsp/bt_trans_data/le_rcsp_adv_module.c.o,swapX,l
|
||||
-r=objs/apps/common/third_party_profile/jieli/JL_rcsp/bt_trans_data/le_rcsp_adv_module.c.o,bt_get_mac_addr,l
|
||||
-r=objs/apps/common/third_party_profile/jieli/JL_rcsp/bt_trans_data/le_rcsp_adv_module.c.o,ble_get_scan_rsp_ptr,pl
|
||||
-r=objs/apps/common/third_party_profile/jieli/JL_rcsp/bt_trans_data/le_rcsp_adv_module.c.o,ble_get_adv_data_ptr,pl
|
||||
-r=objs/apps/common/third_party_profile/jieli/JL_rcsp/bt_trans_data/le_rcsp_adv_module.c.o,ble_get_gatt_profile_data,pl
|
||||
@ -1933,8 +1934,6 @@ objs/apps/common/third_party_profile/jieli/JL_rcsp/bt_trans_data/le_rcsp_adv_mod
|
||||
-r=objs/apps/common/third_party_profile/jieli/JL_rcsp/bt_trans_data/le_rcsp_adv_module.c.o,get_defalut_bt_channel_sel,l
|
||||
-r=objs/apps/common/third_party_profile/jieli/JL_rcsp/bt_trans_data/le_rcsp_adv_module.c.o,btcon_hash,l
|
||||
-r=objs/apps/common/third_party_profile/jieli/JL_rcsp/bt_trans_data/le_rcsp_adv_module.c.o,put_buf,l
|
||||
-r=objs/apps/common/third_party_profile/jieli/JL_rcsp/bt_trans_data/le_rcsp_adv_module.c.o,swapX,l
|
||||
-r=objs/apps/common/third_party_profile/jieli/JL_rcsp/bt_trans_data/le_rcsp_adv_module.c.o,bt_get_mac_addr,l
|
||||
-r=objs/apps/common/third_party_profile/jieli/JL_rcsp/bt_trans_data/le_rcsp_adv_module.c.o,tws_api_get_role,l
|
||||
-r=objs/apps/common/third_party_profile/jieli/JL_rcsp/bt_trans_data/le_rcsp_adv_module.c.o,JL_get_cur_bt_channel_sel,l
|
||||
-r=objs/apps/common/third_party_profile/jieli/JL_rcsp/bt_trans_data/le_rcsp_adv_module.c.o,JL_rcsp_get_auth_flag,l
|
||||
@ -6280,8 +6279,6 @@ objs/apps/earphone/xtell_Sensor/xtell_app_main.c.o
|
||||
-r=objs/apps/earphone/xtell_Sensor/xtell_app_main.c.o,vbat_check_init,l
|
||||
-r=objs/apps/earphone/xtell_Sensor/xtell_app_main.c.o,start_app,l
|
||||
-r=objs/apps/earphone/xtell_Sensor/xtell_app_main.c.o,check_power_on_voltage,l
|
||||
-r=objs/apps/earphone/xtell_Sensor/xtell_app_main.c.o,soft_iic_init,l
|
||||
-r=objs/apps/earphone/xtell_Sensor/xtell_app_main.c.o,LIS2DH12_Config,l
|
||||
-r=objs/apps/earphone/xtell_Sensor/xtell_app_main.c.o,rcsp_adv_fill_mac_addr,l
|
||||
-r=objs/apps/earphone/xtell_Sensor/xtell_app_main.c.o,xtell_task_create,l
|
||||
-r=objs/apps/earphone/xtell_Sensor/xtell_app_main.c.o,cpu_reset_by_soft,l
|
||||
@ -6339,22 +6336,25 @@ objs/apps/earphone/xtell_Sensor/xtell_handler.c.o
|
||||
-r=objs/apps/earphone/xtell_Sensor/xtell_handler.c.o,config_btctler_mode,l
|
||||
-r=objs/apps/earphone/xtell_Sensor/xtell_handler.c.o,sniff_out,l
|
||||
objs/apps/earphone/xtell_Sensor/send_data.c.o
|
||||
-r=objs/apps/earphone/xtell_Sensor/send_data.c.o,collect_and_buffer_sensor_data_task,pl
|
||||
-r=objs/apps/earphone/xtell_Sensor/send_data.c.o,get_motion_data,l
|
||||
-r=objs/apps/earphone/xtell_Sensor/send_data.c.o,get_current_accel_mss,l
|
||||
-r=objs/apps/earphone/xtell_Sensor/send_data.c.o,get_linear_accel_mss,l
|
||||
-r=objs/apps/earphone/xtell_Sensor/send_data.c.o,snprintf,l
|
||||
-r=objs/apps/earphone/xtell_Sensor/send_data.c.o,circle_buffer_write,l
|
||||
-r=objs/apps/earphone/xtell_Sensor/send_data.c.o,printf,l
|
||||
-r=objs/apps/earphone/xtell_Sensor/send_data.c.o,send_sensor_data_task,pl
|
||||
-r=objs/apps/earphone/xtell_Sensor/send_data.c.o,ble_send_data,pl
|
||||
-r=objs/apps/earphone/xtell_Sensor/send_data.c.o,send_data_to_ble_client,l
|
||||
-r=objs/apps/earphone/xtell_Sensor/send_data.c.o,rcsp_adv_fill_mac_addr,pl
|
||||
-r=objs/apps/earphone/xtell_Sensor/send_data.c.o,swapX,l
|
||||
-r=objs/apps/earphone/xtell_Sensor/send_data.c.o,bt_get_mac_addr,l
|
||||
-r=objs/apps/earphone/xtell_Sensor/send_data.c.o,send_sensor_data_task,pl
|
||||
-r=objs/apps/earphone/xtell_Sensor/send_data.c.o,test,pl
|
||||
-r=objs/apps/earphone/xtell_Sensor/send_data.c.o,SL_SC7U22_RawData_Read,l
|
||||
-r=objs/apps/earphone/xtell_Sensor/send_data.c.o,printf,l
|
||||
-r=objs/apps/earphone/xtell_Sensor/send_data.c.o,sensor_processing_task,l
|
||||
-r=objs/apps/earphone/xtell_Sensor/send_data.c.o,gsensor_test,pl
|
||||
-r=objs/apps/earphone/xtell_Sensor/send_data.c.o,sys_timer_del,l
|
||||
-r=objs/apps/earphone/xtell_Sensor/send_data.c.o,xtell_task_create,pl
|
||||
-r=objs/apps/earphone/xtell_Sensor/send_data.c.o,soft_iic_init,l
|
||||
-r=objs/apps/earphone/xtell_Sensor/send_data.c.o,gpio_set_direction,l
|
||||
-r=objs/apps/earphone/xtell_Sensor/send_data.c.o,gpio_set_pull_up,l
|
||||
-r=objs/apps/earphone/xtell_Sensor/send_data.c.o,gpio_direction_output,l
|
||||
-r=objs/apps/earphone/xtell_Sensor/send_data.c.o,SL_SC7U22_Config,l
|
||||
-r=objs/apps/earphone/xtell_Sensor/send_data.c.o,circle_buffer_init,l
|
||||
-r=objs/apps/earphone/xtell_Sensor/send_data.c.o,create_process,l
|
||||
-r=objs/apps/earphone/xtell_Sensor/send_data.c.o,global_data_array,pl
|
||||
-r=objs/apps/earphone/xtell_Sensor/send_data.c.o,gsensor_id,pl
|
||||
-r=objs/apps/earphone/xtell_Sensor/send_data.c.o,test_id,pl
|
||||
objs/apps/earphone/xtell_Sensor/buffer/circle_buffer.c.o
|
||||
-r=objs/apps/earphone/xtell_Sensor/buffer/circle_buffer.c.o,circle_buffer_init,pl
|
||||
-r=objs/apps/earphone/xtell_Sensor/buffer/circle_buffer.c.o,circle_buffer_write,pl
|
||||
@ -6383,57 +6383,69 @@ objs/apps/earphone/xtell_Sensor/sensor/LIS2DH12.c.o
|
||||
-r=objs/apps/earphone/xtell_Sensor/sensor/LIS2DH12.c.o,current_data,pl
|
||||
-r=objs/apps/earphone/xtell_Sensor/sensor/LIS2DH12.c.o,gsensor_static_flag,pl
|
||||
-r=objs/apps/earphone/xtell_Sensor/sensor/LIS2DH12.c.o,gsensor_alarm,pl
|
||||
objs/apps/earphone/xtell_Sensor/sensor/SCU722.c.o
|
||||
-r=objs/apps/earphone/xtell_Sensor/sensor/SCU722.c.o,SL_SC7U22_I2c_Spi_Write,pl
|
||||
-r=objs/apps/earphone/xtell_Sensor/sensor/SCU722.c.o,SL_SC7U22_I2c_Spi_Read,pl
|
||||
-r=objs/apps/earphone/xtell_Sensor/sensor/SCU722.c.o,SL_SC7U22_Check,pl
|
||||
-r=objs/apps/earphone/xtell_Sensor/sensor/SCU722.c.o,SL_SC7U22_Config,pl
|
||||
-r=objs/apps/earphone/xtell_Sensor/sensor/SCU722.c.o,SL_SC7U22_POWER_DOWN,pl
|
||||
-r=objs/apps/earphone/xtell_Sensor/sensor/SCU722.c.o,SL_SC7U22_SOFT_RESET,pl
|
||||
-r=objs/apps/earphone/xtell_Sensor/sensor/SCU722.c.o,os_time_dly,l
|
||||
-r=objs/apps/earphone/xtell_Sensor/sensor/SCU722.c.o,SL_SC7U22_TimeStamp_Read,pl
|
||||
-r=objs/apps/earphone/xtell_Sensor/sensor/SCU722.c.o,SL_SC7U22_RawData_Read,pl
|
||||
-r=objs/apps/earphone/xtell_Sensor/sensor/SCU722.c.o,SL_SC7U22_Open_Close_SET,pl
|
||||
-r=objs/apps/earphone/xtell_Sensor/sensor/SCU722.c.o,SL_SC7U22_IN_SLEEP_SET,pl
|
||||
-r=objs/apps/earphone/xtell_Sensor/sensor/SCU722.c.o,SL_SC7U22_WakeUp_SET,pl
|
||||
-r=objs/apps/earphone/xtell_Sensor/sensor/SCU722.c.o,SL_SC7U22_Angle_Output,pl
|
||||
-r=objs/apps/earphone/xtell_Sensor/sensor/SCU722.c.o,asinf,l
|
||||
-r=objs/apps/earphone/xtell_Sensor/sensor/SCU722.c.o,atanf,l
|
||||
-r=objs/apps/earphone/xtell_Sensor/sensor/SCU722.c.o,gravity_sensor_command,l
|
||||
-r=objs/apps/earphone/xtell_Sensor/sensor/SCU722.c.o,_gravity_sensor_get_ndata,l
|
||||
-r=objs/apps/earphone/xtell_Sensor/sensor/SCU722.c.o,angle,pl
|
||||
-r=objs/apps/earphone/xtell_Sensor/sensor/SCU722.c.o,angle_dot,pl
|
||||
-r=objs/apps/earphone/xtell_Sensor/sensor/SCU722.c.o,angle0,pl
|
||||
-r=objs/apps/earphone/xtell_Sensor/sensor/SCU722.c.o,angle_dot0,pl
|
||||
-r=objs/apps/earphone/xtell_Sensor/sensor/SCU722.c.o,Q_angle,pl
|
||||
-r=objs/apps/earphone/xtell_Sensor/sensor/SCU722.c.o,Q_gyro,pl
|
||||
-r=objs/apps/earphone/xtell_Sensor/sensor/SCU722.c.o,R_angle,pl
|
||||
-r=objs/apps/earphone/xtell_Sensor/sensor/SCU722.c.o,dt,pl
|
||||
-r=objs/apps/earphone/xtell_Sensor/sensor/SCU722.c.o,P,pl
|
||||
-r=objs/apps/earphone/xtell_Sensor/sensor/SCU722.c.o,P0,pl
|
||||
-r=objs/apps/earphone/xtell_Sensor/sensor/SCU722.c.o,P1,pl
|
||||
-r=objs/apps/earphone/xtell_Sensor/sensor/SCU722.c.o,P2,pl
|
||||
-r=objs/apps/earphone/xtell_Sensor/sensor/SCU722.c.o,Pdot0,pl
|
||||
-r=objs/apps/earphone/xtell_Sensor/sensor/SCU722.c.o,Pdot1,pl
|
||||
-r=objs/apps/earphone/xtell_Sensor/sensor/SCU722.c.o,Pdot2,pl
|
||||
-r=objs/apps/earphone/xtell_Sensor/sensor/SCU722.c.o,C_0,pl
|
||||
-r=objs/apps/earphone/xtell_Sensor/sensor/SCU722.c.o,C_1,pl
|
||||
-r=objs/apps/earphone/xtell_Sensor/sensor/SCU722.c.o,C_2,pl
|
||||
-r=objs/apps/earphone/xtell_Sensor/sensor/SCU722.c.o,q_bias0,pl
|
||||
-r=objs/apps/earphone/xtell_Sensor/sensor/SCU722.c.o,angle_err0,pl
|
||||
-r=objs/apps/earphone/xtell_Sensor/sensor/SCU722.c.o,PCt0_0,pl
|
||||
-r=objs/apps/earphone/xtell_Sensor/sensor/SCU722.c.o,PCt0_1,pl
|
||||
-r=objs/apps/earphone/xtell_Sensor/sensor/SCU722.c.o,E0,pl
|
||||
-r=objs/apps/earphone/xtell_Sensor/sensor/SCU722.c.o,K0_0,pl
|
||||
-r=objs/apps/earphone/xtell_Sensor/sensor/SCU722.c.o,K0_1,pl
|
||||
-r=objs/apps/earphone/xtell_Sensor/sensor/SCU722.c.o,t0_0,pl
|
||||
-r=objs/apps/earphone/xtell_Sensor/sensor/SCU722.c.o,t0_1,pl
|
||||
-r=objs/apps/earphone/xtell_Sensor/sensor/SCU722.c.o,SL_SC7U22_Error_Flag,pl
|
||||
-r=objs/apps/earphone/xtell_Sensor/sensor/SCU722.c.o,SL_SC7U22_Error_cnt,pl
|
||||
-r=objs/apps/earphone/xtell_Sensor/sensor/SCU722.c.o,SL_SC7U22_Error_cnt2,pl
|
||||
-r=objs/apps/earphone/xtell_Sensor/sensor/SCU722.c.o,Temp_Accgyro,pl
|
||||
-r=objs/apps/earphone/xtell_Sensor/sensor/SCU722.c.o,Error_Accgyro,pl
|
||||
-r=objs/apps/earphone/xtell_Sensor/sensor/SCU722.c.o,Sum_Avg_Accgyro,pl
|
||||
objs/apps/earphone/xtell_Sensor/sensor/SC7U22.c.o
|
||||
-r=objs/apps/earphone/xtell_Sensor/sensor/SC7U22.c.o,SL_SC7U22_I2c_Spi_Write,pl
|
||||
-r=objs/apps/earphone/xtell_Sensor/sensor/SC7U22.c.o,SL_SC7U22_I2c_Spi_Read,pl
|
||||
-r=objs/apps/earphone/xtell_Sensor/sensor/SC7U22.c.o,SL_SC7U22_Check,pl
|
||||
-r=objs/apps/earphone/xtell_Sensor/sensor/SC7U22.c.o,SL_SC7U22_Config,pl
|
||||
-r=objs/apps/earphone/xtell_Sensor/sensor/SC7U22.c.o,SL_SC7U22_POWER_DOWN,pl
|
||||
-r=objs/apps/earphone/xtell_Sensor/sensor/SC7U22.c.o,SL_SC7U22_SOFT_RESET,pl
|
||||
-r=objs/apps/earphone/xtell_Sensor/sensor/SC7U22.c.o,os_time_dly,l
|
||||
-r=objs/apps/earphone/xtell_Sensor/sensor/SC7U22.c.o,SL_SC7U22_TimeStamp_Read,pl
|
||||
-r=objs/apps/earphone/xtell_Sensor/sensor/SC7U22.c.o,SL_SC7U22_RawData_Read,pl
|
||||
-r=objs/apps/earphone/xtell_Sensor/sensor/SC7U22.c.o,SL_SC7U22_Open_Close_SET,pl
|
||||
-r=objs/apps/earphone/xtell_Sensor/sensor/SC7U22.c.o,SL_SC7U22_IN_SLEEP_SET,pl
|
||||
-r=objs/apps/earphone/xtell_Sensor/sensor/SC7U22.c.o,SL_SC7U22_WakeUp_SET,pl
|
||||
-r=objs/apps/earphone/xtell_Sensor/sensor/SC7U22.c.o,SL_SC7U22_Angle_Output,pl
|
||||
-r=objs/apps/earphone/xtell_Sensor/sensor/SC7U22.c.o,asinf,l
|
||||
-r=objs/apps/earphone/xtell_Sensor/sensor/SC7U22.c.o,atanf,l
|
||||
-r=objs/apps/earphone/xtell_Sensor/sensor/SC7U22.c.o,get_calibration_state,pl
|
||||
-r=objs/apps/earphone/xtell_Sensor/sensor/SC7U22.c.o,gravity_sensor_command,l
|
||||
-r=objs/apps/earphone/xtell_Sensor/sensor/SC7U22.c.o,_gravity_sensor_get_ndata,l
|
||||
-r=objs/apps/earphone/xtell_Sensor/sensor/SC7U22.c.o,angle,pl
|
||||
-r=objs/apps/earphone/xtell_Sensor/sensor/SC7U22.c.o,angle_dot,pl
|
||||
-r=objs/apps/earphone/xtell_Sensor/sensor/SC7U22.c.o,angle0,pl
|
||||
-r=objs/apps/earphone/xtell_Sensor/sensor/SC7U22.c.o,angle_dot0,pl
|
||||
-r=objs/apps/earphone/xtell_Sensor/sensor/SC7U22.c.o,Q_angle,pl
|
||||
-r=objs/apps/earphone/xtell_Sensor/sensor/SC7U22.c.o,Q_gyro,pl
|
||||
-r=objs/apps/earphone/xtell_Sensor/sensor/SC7U22.c.o,R_angle,pl
|
||||
-r=objs/apps/earphone/xtell_Sensor/sensor/SC7U22.c.o,dt,pl
|
||||
-r=objs/apps/earphone/xtell_Sensor/sensor/SC7U22.c.o,P,pl
|
||||
-r=objs/apps/earphone/xtell_Sensor/sensor/SC7U22.c.o,P0,pl
|
||||
-r=objs/apps/earphone/xtell_Sensor/sensor/SC7U22.c.o,P1,pl
|
||||
-r=objs/apps/earphone/xtell_Sensor/sensor/SC7U22.c.o,P2,pl
|
||||
-r=objs/apps/earphone/xtell_Sensor/sensor/SC7U22.c.o,Pdot0,pl
|
||||
-r=objs/apps/earphone/xtell_Sensor/sensor/SC7U22.c.o,Pdot1,pl
|
||||
-r=objs/apps/earphone/xtell_Sensor/sensor/SC7U22.c.o,Pdot2,pl
|
||||
-r=objs/apps/earphone/xtell_Sensor/sensor/SC7U22.c.o,C_0,pl
|
||||
-r=objs/apps/earphone/xtell_Sensor/sensor/SC7U22.c.o,C_1,pl
|
||||
-r=objs/apps/earphone/xtell_Sensor/sensor/SC7U22.c.o,C_2,pl
|
||||
-r=objs/apps/earphone/xtell_Sensor/sensor/SC7U22.c.o,q_bias0,pl
|
||||
-r=objs/apps/earphone/xtell_Sensor/sensor/SC7U22.c.o,angle_err0,pl
|
||||
-r=objs/apps/earphone/xtell_Sensor/sensor/SC7U22.c.o,PCt0_0,pl
|
||||
-r=objs/apps/earphone/xtell_Sensor/sensor/SC7U22.c.o,PCt0_1,pl
|
||||
-r=objs/apps/earphone/xtell_Sensor/sensor/SC7U22.c.o,E0,pl
|
||||
-r=objs/apps/earphone/xtell_Sensor/sensor/SC7U22.c.o,K0_0,pl
|
||||
-r=objs/apps/earphone/xtell_Sensor/sensor/SC7U22.c.o,K0_1,pl
|
||||
-r=objs/apps/earphone/xtell_Sensor/sensor/SC7U22.c.o,t0_0,pl
|
||||
-r=objs/apps/earphone/xtell_Sensor/sensor/SC7U22.c.o,t0_1,pl
|
||||
-r=objs/apps/earphone/xtell_Sensor/sensor/SC7U22.c.o,SL_SC7U22_Error_Flag,pl
|
||||
-r=objs/apps/earphone/xtell_Sensor/sensor/SC7U22.c.o,SL_SC7U22_Error_cnt,pl
|
||||
-r=objs/apps/earphone/xtell_Sensor/sensor/SC7U22.c.o,SL_SC7U22_Error_cnt2,pl
|
||||
-r=objs/apps/earphone/xtell_Sensor/sensor/SC7U22.c.o,Temp_Accgyro,pl
|
||||
-r=objs/apps/earphone/xtell_Sensor/sensor/SC7U22.c.o,Error_Accgyro,pl
|
||||
-r=objs/apps/earphone/xtell_Sensor/sensor/SC7U22.c.o,Sum_Avg_Accgyro,pl
|
||||
objs/apps/earphone/xtell_Sensor/calculate/skiing_tracker.c.o
|
||||
-r=objs/apps/earphone/xtell_Sensor/calculate/skiing_tracker.c.o,skiing_tracker_init,pl
|
||||
-r=objs/apps/earphone/xtell_Sensor/calculate/skiing_tracker.c.o,skiing_tracker_update,pl
|
||||
-r=objs/apps/earphone/xtell_Sensor/calculate/skiing_tracker.c.o,sqrtf,l
|
||||
-r=objs/apps/earphone/xtell_Sensor/calculate/skiing_tracker.c.o,sensor_processing_task,pl
|
||||
-r=objs/apps/earphone/xtell_Sensor/calculate/skiing_tracker.c.o,printf,l
|
||||
-r=objs/apps/earphone/xtell_Sensor/calculate/skiing_tracker.c.o,SL_SC7U22_Angle_Output,l
|
||||
-r=objs/apps/earphone/xtell_Sensor/calculate/skiing_tracker.c.o,fabsf,l
|
||||
-r=objs/apps/earphone/xtell_Sensor/calculate/skiing_tracker.c.o,cosf,l
|
||||
-r=objs/apps/earphone/xtell_Sensor/calculate/skiing_tracker.c.o,sinf,l
|
||||
-r=objs/apps/earphone/xtell_Sensor/calculate/skiing_tracker.c.o,puts,l
|
||||
cpu/br28/liba/cpu.a.llvm.19376.crc16.c
|
||||
-r=cpu/br28/liba/cpu.a.llvm.19376.crc16.c,__crc16_mutex_init,pl
|
||||
-r=cpu/br28/liba/cpu.a.llvm.19376.crc16.c,os_mutex_create,l
|
||||
|
||||
347902
cpu/br28/tools/sdk.lst
347902
cpu/br28/tools/sdk.lst
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
Binary file not shown.
Binary file not shown.
Binary file not shown.
133
objs/apps/earphone/xtell_Sensor/calculate/skiing_tracker.c.d
Normal file
133
objs/apps/earphone/xtell_Sensor/calculate/skiing_tracker.c.d
Normal file
@ -0,0 +1,133 @@
|
||||
objs/apps/earphone/xtell_Sensor/calculate/skiing_tracker.c.o: \
|
||||
apps/earphone/xtell_Sensor/calculate/skiing_tracker.c \
|
||||
apps/earphone/xtell_Sensor/calculate/skiing_tracker.h \
|
||||
apps/earphone/xtell_Sensor/calculate/../sensor/SC7U22.h \
|
||||
apps/common/device\gSensor/gSensor_manage.h \
|
||||
include_lib/system/generic\printf.h \
|
||||
include_lib/system/generic/typedef.h \
|
||||
include_lib/driver/cpu/br28\asm/cpu.h \
|
||||
include_lib/driver/cpu/br28\asm/br28.h \
|
||||
include_lib/driver/cpu/br28\asm/io_omap.h \
|
||||
include_lib/driver/cpu/br28\asm/io_imap.h \
|
||||
include_lib/driver/cpu/br28\asm/csfr.h \
|
||||
include_lib/driver/cpu/br28\asm/cache.h \
|
||||
include_lib/driver/cpu/br28\asm/irq.h \
|
||||
include_lib/driver/cpu/br28\asm/hwi.h \
|
||||
include_lib/system\generic/printf.h include_lib\system/generic/log.h \
|
||||
include_lib\system/generic/printf.h \
|
||||
include_lib/system\generic/errno-base.h \
|
||||
C:/JL/pi32/pi32v2-include\string.h C:/JL/pi32/pi32v2-include/_ansi.h \
|
||||
C:/JL/pi32/pi32v2-include\newlib.h \
|
||||
C:/JL/pi32/pi32v2-include\sys/config.h \
|
||||
C:/JL/pi32/pi32v2-include\machine/ieeefp.h \
|
||||
C:/JL/pi32/pi32v2-include\sys/features.h \
|
||||
C:/JL/pi32/pi32v2-include\sys/reent.h \
|
||||
C:/JL/pi32/pi32v2-include\sys/_types.h \
|
||||
C:/JL/pi32/pi32v2-include\machine/_types.h \
|
||||
C:/JL/pi32/pi32v2-include\machine/_default_types.h \
|
||||
C:/JL/pi32/pi32v2-include\sys/lock.h \
|
||||
C:/JL/pi32/pi32v2-include\sys/cdefs.h \
|
||||
C:/JL/pi32/pi32v2-include\sys/string.h \
|
||||
C:/JL/pi32/pi32v2-include\strings.h \
|
||||
C:/JL/pi32/pi32v2-include\sys/types.h \
|
||||
C:/JL/pi32/pi32v2-include\sys/_stdint.h \
|
||||
C:/JL/pi32/pi32v2-include\machine/types.h include_lib\system/malloc.h \
|
||||
include_lib/system/generic\cpu.h \
|
||||
include_lib/driver/cpu/br28\asm/iic_hw.h \
|
||||
include_lib/driver/cpu/br28\asm/iic_soft.h include_lib/system\timer.h \
|
||||
include_lib/system/generic/list.h apps/earphone/include\app_config.h \
|
||||
apps/earphone/board/br28\board_config.h include_lib\media/audio_def.h \
|
||||
apps/earphone/board/br28/board_jl701n_demo_cfg.h \
|
||||
apps/earphone/board/br28/board_jl701n_demo_global_build_cfg.h \
|
||||
apps/common/device/usb\usb_std_class_def.h \
|
||||
apps/earphone/board/br28/board_jl701n_btemitter_cfg.h \
|
||||
apps/earphone/board/br28/board_jl701n_btemitter_global_build_cfg.h \
|
||||
apps/earphone/board/br28/board_jl701n_anc_cfg.h \
|
||||
apps/earphone/board/br28/board_jl701n_anc_global_build_cfg.h \
|
||||
apps/earphone/board/br28/board_jl7016g_hybrid_cfg.h \
|
||||
apps/earphone/board/br28/board_jl7016g_hybrid_global_build_cfg.h \
|
||||
apps/earphone/board/br28/board_jl7018f_demo_cfg.h \
|
||||
apps/earphone/board/br28/board_jl7018f_demo_global_build_cfg.h \
|
||||
apps/common/device/usb\usb_common_def.h \
|
||||
include_lib/btctrler\btcontroller_mode.h \
|
||||
apps/earphone/include/user_cfg_id.h \
|
||||
apps/common/config/include\bt_profile_cfg.h \
|
||||
include_lib/btctrler\btcontroller_modules.h \
|
||||
include_lib/btctrler/hci_transport.h include_lib/btctrler/ble/hci_ll.h \
|
||||
C:/JL/pi32/pi32v2-include\stdint.h \
|
||||
C:/JL/pi32/pi32v2-include\sys/_intsup.h \
|
||||
C:/JL/pi32/pi32v2-include\stdlib.h \
|
||||
C:/JL/pi32/pi32v2-include\machine/stdlib.h \
|
||||
C:/JL/pi32/pi32v2-include\alloca.h \
|
||||
include_lib/btctrler/classic/hci_lmp.h include_lib/system\event.h \
|
||||
include_lib/system/generic/rect.h include_lib\system/includes.h \
|
||||
include_lib/system/init.h include_lib/system/spinlock.h \
|
||||
include_lib/system/generic\irq.h include_lib/system/task.h \
|
||||
include_lib/system/os/os_api.h include_lib/system\os/os_cpu.h \
|
||||
include_lib/system/generic\jiffies.h include_lib/system\os/os_error.h \
|
||||
include_lib/system\os/os_type.h include_lib/system\os/ucos_ii.h \
|
||||
include_lib/system\os/os_cfg.h include_lib/system\os/os_api.h \
|
||||
include_lib/system/wait.h include_lib/system/app_core.h \
|
||||
include_lib/system/app_msg.h include_lib/system/database.h \
|
||||
include_lib/system/fs/fs.h include_lib/system\generic/ioctl.h \
|
||||
include_lib/system\generic/atomic.h include_lib\system/sys_time.h \
|
||||
include_lib/system/fs/fs_file_name.h include_lib/system/fs/sdfile.h \
|
||||
include_lib/system/power_manage.h include_lib/system/syscfg_id.h \
|
||||
include_lib/system/bank_switch.h include_lib/system/generic/includes.h \
|
||||
include_lib/system/generic/ascii.h include_lib/system/generic/gpio.h \
|
||||
include_lib/driver/cpu/br28\asm/gpio.h \
|
||||
include_lib/system/generic/version.h include_lib/system/generic/lbuf.h \
|
||||
include_lib/system/generic/lbuf_lite.h \
|
||||
include_lib/system/generic/circular_buf.h \
|
||||
include_lib/system/generic/index.h \
|
||||
include_lib/system/generic/debug_lite.h \
|
||||
include_lib/system/device/includes.h \
|
||||
include_lib/system/device/device.h \
|
||||
include_lib/system\device/ioctl_cmds.h \
|
||||
include_lib/system/device/key_driver.h \
|
||||
include_lib/system/device/iokey.h include_lib/system/device/irkey.h \
|
||||
include_lib/system/device/adkey.h \
|
||||
include_lib/driver/cpu/br28\asm/adc_api.h \
|
||||
include_lib/system/device/slidekey.h \
|
||||
include_lib/system/device/touch_key.h \
|
||||
include_lib/driver/cpu/br28\asm/plcnt.h \
|
||||
include_lib/system/device/rdec_key.h \
|
||||
include_lib/driver/cpu/br28\asm/rdec.h \
|
||||
include_lib/driver/cpu/br28\asm/includes.h \
|
||||
include_lib/driver/cpu/br28\asm/crc16.h \
|
||||
include_lib/driver/cpu/br28\asm/clock.h \
|
||||
include_lib/driver/cpu/br28\asm/clock_hw.h \
|
||||
include_lib/driver/cpu/br28\asm/clock_define.h \
|
||||
include_lib/driver/cpu/br28\asm/uart.h \
|
||||
include_lib/driver\device/uart.h \
|
||||
include_lib/driver/cpu/br28\asm/uart_dev.h \
|
||||
include_lib/driver/cpu/br28\asm/spiflash.h \
|
||||
include_lib/driver\device/spiflash.h \
|
||||
include_lib/driver/cpu/br28\asm/power_interface.h \
|
||||
include_lib/driver/cpu/br28\asm/power/p33.h \
|
||||
include_lib/driver/cpu/br28/asm/power/p33_sfr.h \
|
||||
include_lib/driver/cpu/br28/asm/power/p33_app.h \
|
||||
include_lib/driver/cpu/br28/asm/power/p33_io_app.h \
|
||||
include_lib/driver/cpu/br28/asm/power/rtc_app.h \
|
||||
include_lib/driver/cpu/br28\asm/power/p11.h \
|
||||
include_lib/driver/cpu/br28/asm/power/p11_csfr.h \
|
||||
include_lib/driver/cpu/br28/asm/power/p11_sfr.h \
|
||||
include_lib/driver/cpu/br28/asm/power/p11_io_omap.h \
|
||||
include_lib/driver/cpu/br28/asm/power/p11_io_imap.h \
|
||||
include_lib/driver/cpu/br28/asm/power/p11_app.h \
|
||||
include_lib/driver/cpu/br28/asm/power/p11.h \
|
||||
include_lib/driver/cpu/br28\asm/power/power_api.h \
|
||||
include_lib/driver/cpu/br28\asm/power/power_port.h \
|
||||
include_lib/driver/cpu/br28\asm/power/power_wakeup.h \
|
||||
include_lib/driver/cpu/br28\asm/power/power_reset.h \
|
||||
include_lib/driver/cpu/br28\asm/power/power_compat.h \
|
||||
include_lib/driver/cpu/br28\asm/power/lp_ipc.h \
|
||||
include_lib/driver/cpu/br28/asm/power/m2p_msg.h \
|
||||
include_lib/driver/cpu/br28/asm/power/p2m_msg.h \
|
||||
include_lib/driver/cpu/br28\asm/efuse.h \
|
||||
include_lib/driver/cpu/br28\asm/wdt.h \
|
||||
include_lib/driver/cpu/br28\asm/debug.h \
|
||||
include_lib/driver/cpu/br28\asm/timer.h \
|
||||
include_lib/driver/cpu/br28\asm/rtc.h \
|
||||
include_lib/driver\device/sdio_host_init.h \
|
||||
C:/JL/pi32/pi32v2-include\math.h
|
||||
BIN
objs/apps/earphone/xtell_Sensor/calculate/skiing_tracker.c.o
Normal file
BIN
objs/apps/earphone/xtell_Sensor/calculate/skiing_tracker.c.o
Normal file
Binary file not shown.
@ -156,4 +156,5 @@ objs/apps/earphone/xtell_Sensor/send_data.c.o: \
|
||||
apps/common/icsd/anc/icsd_anc_client_board.h \
|
||||
cpu/br28/audio_anc_fade_ctr.h \
|
||||
apps/earphone/xtell_Sensor/buffer\circle_buffer.h \
|
||||
include_lib\btstack/avctp_user.h include_lib/btstack/btstack_typedef.h
|
||||
include_lib\btstack/avctp_user.h include_lib/btstack/btstack_typedef.h \
|
||||
apps/earphone/xtell_Sensor/calculate/skiing_tracker.h
|
||||
|
||||
Binary file not shown.
Binary file not shown.
132
objs/apps/earphone/xtell_Sensor/sensor/SC7U22.c.d
Normal file
132
objs/apps/earphone/xtell_Sensor/sensor/SC7U22.c.d
Normal file
@ -0,0 +1,132 @@
|
||||
objs/apps/earphone/xtell_Sensor/sensor/SC7U22.c.o: \
|
||||
apps/earphone/xtell_Sensor/sensor/SC7U22.c \
|
||||
apps/earphone/xtell_Sensor/sensor/SC7U22.h \
|
||||
apps/common/device\gSensor/gSensor_manage.h \
|
||||
include_lib/system/generic\printf.h \
|
||||
include_lib/system/generic/typedef.h \
|
||||
include_lib/driver/cpu/br28\asm/cpu.h \
|
||||
include_lib/driver/cpu/br28\asm/br28.h \
|
||||
include_lib/driver/cpu/br28\asm/io_omap.h \
|
||||
include_lib/driver/cpu/br28\asm/io_imap.h \
|
||||
include_lib/driver/cpu/br28\asm/csfr.h \
|
||||
include_lib/driver/cpu/br28\asm/cache.h \
|
||||
include_lib/driver/cpu/br28\asm/irq.h \
|
||||
include_lib/driver/cpu/br28\asm/hwi.h \
|
||||
include_lib/system\generic/printf.h include_lib\system/generic/log.h \
|
||||
include_lib\system/generic/printf.h \
|
||||
include_lib/system\generic/errno-base.h \
|
||||
C:/JL/pi32/pi32v2-include\string.h C:/JL/pi32/pi32v2-include/_ansi.h \
|
||||
C:/JL/pi32/pi32v2-include\newlib.h \
|
||||
C:/JL/pi32/pi32v2-include\sys/config.h \
|
||||
C:/JL/pi32/pi32v2-include\machine/ieeefp.h \
|
||||
C:/JL/pi32/pi32v2-include\sys/features.h \
|
||||
C:/JL/pi32/pi32v2-include\sys/reent.h \
|
||||
C:/JL/pi32/pi32v2-include\sys/_types.h \
|
||||
C:/JL/pi32/pi32v2-include\machine/_types.h \
|
||||
C:/JL/pi32/pi32v2-include\machine/_default_types.h \
|
||||
C:/JL/pi32/pi32v2-include\sys/lock.h \
|
||||
C:/JL/pi32/pi32v2-include\sys/cdefs.h \
|
||||
C:/JL/pi32/pi32v2-include\sys/string.h \
|
||||
C:/JL/pi32/pi32v2-include\strings.h \
|
||||
C:/JL/pi32/pi32v2-include\sys/types.h \
|
||||
C:/JL/pi32/pi32v2-include\sys/_stdint.h \
|
||||
C:/JL/pi32/pi32v2-include\machine/types.h include_lib\system/malloc.h \
|
||||
include_lib/system/generic\cpu.h \
|
||||
include_lib/driver/cpu/br28\asm/iic_hw.h \
|
||||
include_lib/driver/cpu/br28\asm/iic_soft.h include_lib/system\timer.h \
|
||||
include_lib/system/generic/list.h apps/earphone/include\app_config.h \
|
||||
apps/earphone/board/br28\board_config.h include_lib\media/audio_def.h \
|
||||
apps/earphone/board/br28/board_jl701n_demo_cfg.h \
|
||||
apps/earphone/board/br28/board_jl701n_demo_global_build_cfg.h \
|
||||
apps/common/device/usb\usb_std_class_def.h \
|
||||
apps/earphone/board/br28/board_jl701n_btemitter_cfg.h \
|
||||
apps/earphone/board/br28/board_jl701n_btemitter_global_build_cfg.h \
|
||||
apps/earphone/board/br28/board_jl701n_anc_cfg.h \
|
||||
apps/earphone/board/br28/board_jl701n_anc_global_build_cfg.h \
|
||||
apps/earphone/board/br28/board_jl7016g_hybrid_cfg.h \
|
||||
apps/earphone/board/br28/board_jl7016g_hybrid_global_build_cfg.h \
|
||||
apps/earphone/board/br28/board_jl7018f_demo_cfg.h \
|
||||
apps/earphone/board/br28/board_jl7018f_demo_global_build_cfg.h \
|
||||
apps/common/device/usb\usb_common_def.h \
|
||||
include_lib/btctrler\btcontroller_mode.h \
|
||||
apps/earphone/include/user_cfg_id.h \
|
||||
apps/common/config/include\bt_profile_cfg.h \
|
||||
include_lib/btctrler\btcontroller_modules.h \
|
||||
include_lib/btctrler/hci_transport.h include_lib/btctrler/ble/hci_ll.h \
|
||||
C:/JL/pi32/pi32v2-include\stdint.h \
|
||||
C:/JL/pi32/pi32v2-include\sys/_intsup.h \
|
||||
C:/JL/pi32/pi32v2-include\stdlib.h \
|
||||
C:/JL/pi32/pi32v2-include\machine/stdlib.h \
|
||||
C:/JL/pi32/pi32v2-include\alloca.h \
|
||||
include_lib/btctrler/classic/hci_lmp.h include_lib/system\event.h \
|
||||
include_lib/system/generic/rect.h include_lib\system/includes.h \
|
||||
include_lib/system/init.h include_lib/system/spinlock.h \
|
||||
include_lib/system/generic\irq.h include_lib/system/task.h \
|
||||
include_lib/system/os/os_api.h include_lib/system\os/os_cpu.h \
|
||||
include_lib/system/generic\jiffies.h include_lib/system\os/os_error.h \
|
||||
include_lib/system\os/os_type.h include_lib/system\os/ucos_ii.h \
|
||||
include_lib/system\os/os_cfg.h include_lib/system\os/os_api.h \
|
||||
include_lib/system/wait.h include_lib/system/app_core.h \
|
||||
include_lib/system/app_msg.h include_lib/system/database.h \
|
||||
include_lib/system/fs/fs.h include_lib/system\generic/ioctl.h \
|
||||
include_lib/system\generic/atomic.h include_lib\system/sys_time.h \
|
||||
include_lib/system/fs/fs_file_name.h include_lib/system/fs/sdfile.h \
|
||||
include_lib/system/power_manage.h include_lib/system/syscfg_id.h \
|
||||
include_lib/system/bank_switch.h include_lib/system/generic/includes.h \
|
||||
include_lib/system/generic/ascii.h include_lib/system/generic/gpio.h \
|
||||
include_lib/driver/cpu/br28\asm/gpio.h \
|
||||
include_lib/system/generic/version.h include_lib/system/generic/lbuf.h \
|
||||
include_lib/system/generic/lbuf_lite.h \
|
||||
include_lib/system/generic/circular_buf.h \
|
||||
include_lib/system/generic/index.h \
|
||||
include_lib/system/generic/debug_lite.h \
|
||||
include_lib/system/device/includes.h \
|
||||
include_lib/system/device/device.h \
|
||||
include_lib/system\device/ioctl_cmds.h \
|
||||
include_lib/system/device/key_driver.h \
|
||||
include_lib/system/device/iokey.h include_lib/system/device/irkey.h \
|
||||
include_lib/system/device/adkey.h \
|
||||
include_lib/driver/cpu/br28\asm/adc_api.h \
|
||||
include_lib/system/device/slidekey.h \
|
||||
include_lib/system/device/touch_key.h \
|
||||
include_lib/driver/cpu/br28\asm/plcnt.h \
|
||||
include_lib/system/device/rdec_key.h \
|
||||
include_lib/driver/cpu/br28\asm/rdec.h \
|
||||
include_lib/driver/cpu/br28\asm/includes.h \
|
||||
include_lib/driver/cpu/br28\asm/crc16.h \
|
||||
include_lib/driver/cpu/br28\asm/clock.h \
|
||||
include_lib/driver/cpu/br28\asm/clock_hw.h \
|
||||
include_lib/driver/cpu/br28\asm/clock_define.h \
|
||||
include_lib/driver/cpu/br28\asm/uart.h \
|
||||
include_lib/driver\device/uart.h \
|
||||
include_lib/driver/cpu/br28\asm/uart_dev.h \
|
||||
include_lib/driver/cpu/br28\asm/spiflash.h \
|
||||
include_lib/driver\device/spiflash.h \
|
||||
include_lib/driver/cpu/br28\asm/power_interface.h \
|
||||
include_lib/driver/cpu/br28\asm/power/p33.h \
|
||||
include_lib/driver/cpu/br28/asm/power/p33_sfr.h \
|
||||
include_lib/driver/cpu/br28/asm/power/p33_app.h \
|
||||
include_lib/driver/cpu/br28/asm/power/p33_io_app.h \
|
||||
include_lib/driver/cpu/br28/asm/power/rtc_app.h \
|
||||
include_lib/driver/cpu/br28\asm/power/p11.h \
|
||||
include_lib/driver/cpu/br28/asm/power/p11_csfr.h \
|
||||
include_lib/driver/cpu/br28/asm/power/p11_sfr.h \
|
||||
include_lib/driver/cpu/br28/asm/power/p11_io_omap.h \
|
||||
include_lib/driver/cpu/br28/asm/power/p11_io_imap.h \
|
||||
include_lib/driver/cpu/br28/asm/power/p11_app.h \
|
||||
include_lib/driver/cpu/br28/asm/power/p11.h \
|
||||
include_lib/driver/cpu/br28\asm/power/power_api.h \
|
||||
include_lib/driver/cpu/br28\asm/power/power_port.h \
|
||||
include_lib/driver/cpu/br28\asm/power/power_wakeup.h \
|
||||
include_lib/driver/cpu/br28\asm/power/power_reset.h \
|
||||
include_lib/driver/cpu/br28\asm/power/power_compat.h \
|
||||
include_lib/driver/cpu/br28\asm/power/lp_ipc.h \
|
||||
include_lib/driver/cpu/br28/asm/power/m2p_msg.h \
|
||||
include_lib/driver/cpu/br28/asm/power/p2m_msg.h \
|
||||
include_lib/driver/cpu/br28\asm/efuse.h \
|
||||
include_lib/driver/cpu/br28\asm/wdt.h \
|
||||
include_lib/driver/cpu/br28\asm/debug.h \
|
||||
include_lib/driver/cpu/br28\asm/timer.h \
|
||||
include_lib/driver/cpu/br28\asm/rtc.h \
|
||||
include_lib/driver\device/sdio_host_init.h \
|
||||
C:/JL/pi32/pi32v2-include\math.h
|
||||
BIN
objs/apps/earphone/xtell_Sensor/sensor/SC7U22.c.o
Normal file
BIN
objs/apps/earphone/xtell_Sensor/sensor/SC7U22.c.o
Normal file
Binary file not shown.
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user