更新提交 1.验证了RTC 唤醒 2.添加蓝牙直连
This commit is contained in:
parent
1c6f199f37
commit
f0a8f13cd6
@ -1,311 +1,307 @@
|
|||||||
/*********************************************************************************************
|
/*********************************************************************************************
|
||||||
* Filename : app_main.c
|
* Filename : app_main.c
|
||||||
|
|
||||||
* Description :
|
* Description :
|
||||||
|
|
||||||
* Copyright:(c)JIELI 2011-2019 @ , All Rights Reserved.
|
* Copyright:(c)JIELI 2011-2019 @ , All Rights Reserved.
|
||||||
*********************************************************************************************/
|
*********************************************************************************************/
|
||||||
#include "system/includes.h"
|
#include "system/includes.h"
|
||||||
#include "app_config.h"
|
#include "app_config.h"
|
||||||
#include "app_action.h"
|
#include "app_action.h"
|
||||||
#include "app_main.h"
|
#include "app_main.h"
|
||||||
#include "update.h"
|
#include "update.h"
|
||||||
#include "update_loader_download.h"
|
#include "update_loader_download.h"
|
||||||
#include "app_charge.h"
|
#include "app_charge.h"
|
||||||
#include "app_power_manage.h"
|
#include "app_power_manage.h"
|
||||||
#include "asm/charge.h"
|
#include "asm/charge.h"
|
||||||
#include "app_temperature.h"
|
#include "app_temperature.h"
|
||||||
|
|
||||||
#if TCFG_KWS_VOICE_RECOGNITION_ENABLE
|
#if TCFG_KWS_VOICE_RECOGNITION_ENABLE
|
||||||
#include "jl_kws/jl_kws_api.h"
|
#include "jl_kws/jl_kws_api.h"
|
||||||
#endif /* #if TCFG_KWS_VOICE_RECOGNITION_ENABLE */
|
#endif /* #if TCFG_KWS_VOICE_RECOGNITION_ENABLE */
|
||||||
|
|
||||||
#define LOG_TAG_CONST APP
|
#define LOG_TAG_CONST APP
|
||||||
#define LOG_TAG "[APP]"
|
#define LOG_TAG "[APP]"
|
||||||
#define LOG_ERROR_ENABLE
|
#define LOG_ERROR_ENABLE
|
||||||
#define LOG_DEBUG_ENABLE
|
#define LOG_DEBUG_ENABLE
|
||||||
#define LOG_INFO_ENABLE
|
#define LOG_INFO_ENABLE
|
||||||
/* #define LOG_DUMP_ENABLE */
|
/* #define LOG_DUMP_ENABLE */
|
||||||
#define LOG_CLI_ENABLE
|
#define LOG_CLI_ENABLE
|
||||||
#include "debug.h"
|
#include "debug.h"
|
||||||
|
|
||||||
/*任务列表 */
|
/*任务列表 */
|
||||||
const struct task_info task_info_table[] = {
|
const struct task_info task_info_table[] = {
|
||||||
#if CONFIG_APP_FINDMY
|
#if CONFIG_APP_FINDMY
|
||||||
{"app_core", 1, 0, 640 * 2, 128 },
|
{"app_core", 1, 0, 640 * 2, 128 },
|
||||||
#else
|
#else
|
||||||
{"app_core", 1, 0, 640, 128 },
|
{"app_core", 1, 0, 640, 128 },
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
{"sys_event", 7, 0, 256, 0 },
|
{"sys_event", 7, 0, 256, 0 },
|
||||||
{"btctrler", 4, 0, 512, 256 },
|
{"btctrler", 4, 0, 512, 256 },
|
||||||
{"btencry", 1, 0, 512, 128 },
|
{"btencry", 1, 0, 512, 128 },
|
||||||
{"btstack", 3, 0, 768, 256 },
|
{"btstack", 3, 0, 768, 256 },
|
||||||
{"systimer", 7, 0, 128, 0 },
|
{"systimer", 7, 0, 128, 0 },
|
||||||
{"update", 1, 0, 512, 0 },
|
{"update", 1, 0, 512, 0 },
|
||||||
{"dw_update", 2, 0, 256, 128 },
|
{"dw_update", 2, 0, 256, 128 },
|
||||||
#if (RCSP_BTMATE_EN)
|
#if (RCSP_BTMATE_EN)
|
||||||
{"rcsp_task", 2, 0, 640, 0},
|
{"rcsp_task", 2, 0, 640, 0},
|
||||||
#endif
|
#endif
|
||||||
#if(USER_UART_UPDATE_ENABLE)
|
#if(USER_UART_UPDATE_ENABLE)
|
||||||
{"uart_update", 1, 0, 256, 128 },
|
{"uart_update", 1, 0, 256, 128 },
|
||||||
#endif
|
#endif
|
||||||
#if (XM_MMA_EN)
|
#if (XM_MMA_EN)
|
||||||
{"xm_mma", 2, 0, 640, 256 },
|
{"xm_mma", 2, 0, 640, 256 },
|
||||||
#endif
|
#endif
|
||||||
{"usb_msd", 1, 0, 512, 128 },
|
{"usb_msd", 1, 0, 512, 128 },
|
||||||
#if TCFG_AUDIO_ENABLE
|
#if TCFG_AUDIO_ENABLE
|
||||||
{"audio_dec", 3, 0, 768, 128 },
|
{"audio_dec", 3, 0, 768, 128 },
|
||||||
{"audio_enc", 4, 0, 512, 128 },
|
{"audio_enc", 4, 0, 512, 128 },
|
||||||
#endif/*TCFG_AUDIO_ENABLE*/
|
#endif/*TCFG_AUDIO_ENABLE*/
|
||||||
#if TCFG_KWS_VOICE_RECOGNITION_ENABLE
|
#if TCFG_KWS_VOICE_RECOGNITION_ENABLE
|
||||||
{"kws", 2, 0, 256, 64 },
|
{"kws", 2, 0, 256, 64 },
|
||||||
#endif /* #if TCFG_KWS_VOICE_RECOGNITION_ENABLE */
|
#endif /* #if TCFG_KWS_VOICE_RECOGNITION_ENABLE */
|
||||||
#if (TUYA_DEMO_EN)
|
#if (TUYA_DEMO_EN)
|
||||||
{"user_deal", 2, 0, 512, 512 },//定义线程 tuya任务调度
|
{"user_deal", 2, 0, 512, 512 },//定义线程 tuya任务调度
|
||||||
#endif
|
#endif
|
||||||
#if (CONFIG_APP_HILINK)
|
#if (CONFIG_APP_HILINK)
|
||||||
{"hilink_task", 2, 0, 1024, 0},//定义线程 hilink任务调度
|
{"hilink_task", 2, 0, 1024, 0},//定义线程 hilink任务调度
|
||||||
#endif
|
#endif
|
||||||
{0, 0},
|
{0, 0},
|
||||||
};
|
};
|
||||||
|
|
||||||
APP_VAR app_var;
|
APP_VAR app_var;
|
||||||
|
|
||||||
void app_var_init(void)
|
void app_var_init(void)
|
||||||
{
|
{
|
||||||
app_var.play_poweron_tone = 1;
|
app_var.play_poweron_tone = 1;
|
||||||
|
|
||||||
app_var.auto_off_time = TCFG_AUTO_SHUT_DOWN_TIME;
|
app_var.auto_off_time = TCFG_AUTO_SHUT_DOWN_TIME;
|
||||||
app_var.warning_tone_v = 340;
|
app_var.warning_tone_v = 340;
|
||||||
app_var.poweroff_tone_v = 330;
|
app_var.poweroff_tone_v = 330;
|
||||||
}
|
}
|
||||||
|
|
||||||
__attribute__((weak))
|
__attribute__((weak))
|
||||||
u8 get_charge_online_flag(void)
|
u8 get_charge_online_flag(void)
|
||||||
{
|
{
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
void clr_wdt(void);
|
void clr_wdt(void);
|
||||||
void check_power_on_key(void)
|
void check_power_on_key(void)
|
||||||
{
|
{
|
||||||
#if TCFG_POWER_ON_NEED_KEY
|
#if TCFG_POWER_ON_NEED_KEY
|
||||||
|
|
||||||
u32 delay_10ms_cnt = 0;
|
u32 delay_10ms_cnt = 0;
|
||||||
while (1) {
|
while (1) {
|
||||||
clr_wdt();
|
clr_wdt();
|
||||||
os_time_dly(1);
|
os_time_dly(1);
|
||||||
|
|
||||||
extern u8 get_power_on_status(void);
|
extern u8 get_power_on_status(void);
|
||||||
if (get_power_on_status()) {
|
if (get_power_on_status()) {
|
||||||
log_info("+");
|
log_info("+");
|
||||||
delay_10ms_cnt++;
|
delay_10ms_cnt++;
|
||||||
if (delay_10ms_cnt > 70) {
|
if (delay_10ms_cnt > 70) {
|
||||||
/* extern void set_key_poweron_flag(u8 flag); */
|
/* extern void set_key_poweron_flag(u8 flag); */
|
||||||
/* set_key_poweron_flag(1); */
|
/* set_key_poweron_flag(1); */
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
log_info("-");
|
log_info("-");
|
||||||
delay_10ms_cnt = 0;
|
delay_10ms_cnt = 0;
|
||||||
log_info("enter softpoweroff\n");
|
log_info("enter softpoweroff\n");
|
||||||
power_set_soft_poweroff();
|
power_set_soft_poweroff();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
void enter_sleep(){
|
void enter_sleep(){
|
||||||
printf(">>>>>>>>>>>>>>>>>enter_sleep...\n");
|
printf(">>>>>>>>>>>>>>>>>enter_sleep...\n");
|
||||||
sys_s_hi_timer_del(enter_sleep);
|
sys_s_hi_timer_del(enter_sleep);
|
||||||
extern void user_alarm_test(void);
|
extern void user_alarm_test(void);
|
||||||
|
|
||||||
extern void alarm_rtc_start(void);
|
extern void alarm_rtc_start(void);
|
||||||
alarm_rtc_start();
|
alarm_rtc_start();
|
||||||
user_alarm_test();
|
user_alarm_test();
|
||||||
//power_set_soft_poweroff();
|
//power_set_soft_poweroff();
|
||||||
}
|
}
|
||||||
|
|
||||||
void alarm_isr_user_cbfun(u8 index)
|
|
||||||
{
|
void user_main(){
|
||||||
printf("**** alarm %d : hello world ****\n", index);
|
printf(">>>>>>>>>>>>>>>>>user_main...\n");
|
||||||
}
|
temperature_init();
|
||||||
|
|
||||||
void user_main(){
|
|
||||||
printf(">>>>>>>>>>>>>>>>>user_main...\n");
|
//sys_s_hi_timer_add(NULL,enter_sleep,5000);
|
||||||
temperature_init();
|
|
||||||
|
// user_alarm_test();
|
||||||
|
// extern void alarm_rtc_start(void);
|
||||||
//sys_s_hi_timer_add(NULL,enter_sleep,5000);
|
// alarm_rtc_start();
|
||||||
|
// rtc_alarm_set_timer(30);
|
||||||
// user_alarm_test();
|
|
||||||
// extern void alarm_rtc_start(void);
|
//extern void rtc_alarm_set_timer(u32 seconds);
|
||||||
// alarm_rtc_start();
|
//rtc_alarm_set_timer(30);
|
||||||
// rtc_alarm_set_timer(30);
|
//power_set_soft_poweroff();
|
||||||
|
//user_alarm_test();
|
||||||
//extern void rtc_alarm_set_timer(u32 seconds);
|
}
|
||||||
//rtc_alarm_set_timer(30);
|
void app_main()
|
||||||
//power_set_soft_poweroff();
|
{
|
||||||
//user_alarm_test();
|
struct intent it;
|
||||||
}
|
|
||||||
void app_main()
|
if (!UPDATE_SUPPORT_DEV_IS_NULL()) {
|
||||||
{
|
int update = 0;
|
||||||
struct intent it;
|
update = update_result_deal();
|
||||||
|
}
|
||||||
if (!UPDATE_SUPPORT_DEV_IS_NULL()) {
|
|
||||||
int update = 0;
|
printf(">>>>>>>>>>>>>>>>>app_main...\n");
|
||||||
update = update_result_deal();
|
printf(">>> v220,2022-11-23 >>>\n");
|
||||||
}
|
|
||||||
|
if (get_charge_online_flag()) {
|
||||||
printf(">>>>>>>>>>>>>>>>>app_main...\n");
|
#if(TCFG_SYS_LVD_EN == 1)
|
||||||
printf(">>> v220,2022-11-23 >>>\n");
|
vbat_check_init();
|
||||||
|
#endif
|
||||||
if (get_charge_online_flag()) {
|
} else {
|
||||||
#if(TCFG_SYS_LVD_EN == 1)
|
check_power_on_voltage();
|
||||||
vbat_check_init();
|
}
|
||||||
#endif
|
temperature_ble_init();
|
||||||
} else {
|
#if TCFG_POWER_ON_NEED_KEY
|
||||||
check_power_on_voltage();
|
check_power_on_key();
|
||||||
}
|
#endif
|
||||||
temperature_ble_init();
|
|
||||||
#if TCFG_POWER_ON_NEED_KEY
|
#if TCFG_AUDIO_ENABLE
|
||||||
check_power_on_key();
|
extern int audio_dec_init();
|
||||||
#endif
|
extern int audio_enc_init();
|
||||||
|
audio_dec_init();
|
||||||
#if TCFG_AUDIO_ENABLE
|
audio_enc_init();
|
||||||
extern int audio_dec_init();
|
#endif/*TCFG_AUDIO_ENABLE*/
|
||||||
extern int audio_enc_init();
|
|
||||||
audio_dec_init();
|
#if TCFG_KWS_VOICE_RECOGNITION_ENABLE
|
||||||
audio_enc_init();
|
jl_kws_main_user_demo();
|
||||||
#endif/*TCFG_AUDIO_ENABLE*/
|
#endif /* #if TCFG_KWS_VOICE_RECOGNITION_ENABLE */
|
||||||
|
|
||||||
#if TCFG_KWS_VOICE_RECOGNITION_ENABLE
|
init_intent(&it);
|
||||||
jl_kws_main_user_demo();
|
|
||||||
#endif /* #if TCFG_KWS_VOICE_RECOGNITION_ENABLE */
|
#if CONFIG_APP_SPP_LE
|
||||||
|
it.name = "spp_le";
|
||||||
init_intent(&it);
|
it.action = ACTION_SPPLE_MAIN;
|
||||||
|
|
||||||
#if CONFIG_APP_SPP_LE
|
#elif CONFIG_APP_AT_COM || CONFIG_APP_AT_CHAR_COM
|
||||||
it.name = "spp_le";
|
it.name = "at_com";
|
||||||
it.action = ACTION_SPPLE_MAIN;
|
it.action = ACTION_AT_COM;
|
||||||
|
|
||||||
#elif CONFIG_APP_AT_COM || CONFIG_APP_AT_CHAR_COM
|
#elif CONFIG_APP_DONGLE
|
||||||
it.name = "at_com";
|
it.name = "dongle";
|
||||||
it.action = ACTION_AT_COM;
|
it.action = ACTION_DONGLE_MAIN;
|
||||||
|
|
||||||
#elif CONFIG_APP_DONGLE
|
#elif CONFIG_APP_MULTI
|
||||||
it.name = "dongle";
|
it.name = "multi_conn";
|
||||||
it.action = ACTION_DONGLE_MAIN;
|
it.action = ACTION_MULTI_MAIN;
|
||||||
|
|
||||||
#elif CONFIG_APP_MULTI
|
#elif CONFIG_APP_NONCONN_24G
|
||||||
it.name = "multi_conn";
|
it.name = "nonconn_24g";
|
||||||
it.action = ACTION_MULTI_MAIN;
|
it.action = ACTION_NOCONN_24G_MAIN;
|
||||||
|
|
||||||
#elif CONFIG_APP_NONCONN_24G
|
#elif CONFIG_APP_HILINK
|
||||||
it.name = "nonconn_24g";
|
it.name = "hilink";
|
||||||
it.action = ACTION_NOCONN_24G_MAIN;
|
it.action = ACTION_HILINK_MAIN;
|
||||||
|
|
||||||
#elif CONFIG_APP_HILINK
|
#elif CONFIG_APP_LL_SYNC
|
||||||
it.name = "hilink";
|
it.name = "ll_sync";
|
||||||
it.action = ACTION_HILINK_MAIN;
|
it.action = ACTION_LL_SYNC;
|
||||||
|
|
||||||
#elif CONFIG_APP_LL_SYNC
|
#elif CONFIG_APP_TUYA
|
||||||
it.name = "ll_sync";
|
it.name = "tuya";
|
||||||
it.action = ACTION_LL_SYNC;
|
it.action = ACTION_TUYA;
|
||||||
|
|
||||||
#elif CONFIG_APP_TUYA
|
#elif CONFIG_APP_CENTRAL
|
||||||
it.name = "tuya";
|
it.name = "central";
|
||||||
it.action = ACTION_TUYA;
|
it.action = ACTION_CENTRAL_MAIN;
|
||||||
|
|
||||||
#elif CONFIG_APP_CENTRAL
|
#elif CONFIG_APP_DONGLE
|
||||||
it.name = "central";
|
it.name = "dongle";
|
||||||
it.action = ACTION_CENTRAL_MAIN;
|
it.action = ACTION_DONGLE_MAIN;
|
||||||
|
|
||||||
#elif CONFIG_APP_DONGLE
|
#elif CONFIG_APP_BEACON
|
||||||
it.name = "dongle";
|
it.name = "beacon";
|
||||||
it.action = ACTION_DONGLE_MAIN;
|
it.action = ACTION_BEACON_MAIN;
|
||||||
|
|
||||||
#elif CONFIG_APP_BEACON
|
#elif CONFIG_APP_IDLE
|
||||||
it.name = "beacon";
|
it.name = "idle";
|
||||||
it.action = ACTION_BEACON_MAIN;
|
it.action = ACTION_IDLE_MAIN;
|
||||||
|
|
||||||
#elif CONFIG_APP_IDLE
|
#elif CONFIG_APP_CONN_24G
|
||||||
it.name = "idle";
|
it.name = "conn_24g";
|
||||||
it.action = ACTION_IDLE_MAIN;
|
it.action = ACTION_CONN_24G_MAIN;
|
||||||
|
|
||||||
#elif CONFIG_APP_CONN_24G
|
#elif CONFIG_APP_FINDMY
|
||||||
it.name = "conn_24g";
|
it.name = "findmy";
|
||||||
it.action = ACTION_CONN_24G_MAIN;
|
it.action = ACTION_FINDMY;
|
||||||
|
|
||||||
#elif CONFIG_APP_FINDMY
|
#elif CONFIG_APP_FTMS
|
||||||
it.name = "findmy";
|
it.name = "ftms";
|
||||||
it.action = ACTION_FINDMY;
|
it.action = ACTION_FTMS;
|
||||||
|
|
||||||
#elif CONFIG_APP_FTMS
|
#else
|
||||||
it.name = "ftms";
|
while (1) {
|
||||||
it.action = ACTION_FTMS;
|
printf("no app!!!");
|
||||||
|
}
|
||||||
#else
|
#endif
|
||||||
while (1) {
|
|
||||||
printf("no app!!!");
|
|
||||||
}
|
log_info("run app>>> %s", it.name);
|
||||||
#endif
|
log_info("%s,%s", __DATE__, __TIME__);
|
||||||
|
|
||||||
|
start_app(&it);
|
||||||
log_info("run app>>> %s", it.name);
|
user_main();
|
||||||
log_info("%s,%s", __DATE__, __TIME__);
|
#if TCFG_CHARGE_ENABLE
|
||||||
|
set_charge_event_flag(1);
|
||||||
start_app(&it);
|
#endif
|
||||||
user_main();
|
}
|
||||||
#if TCFG_CHARGE_ENABLE
|
|
||||||
set_charge_event_flag(1);
|
/*
|
||||||
#endif
|
* app模式切换
|
||||||
}
|
*/
|
||||||
|
void app_switch(const char *name, int action)
|
||||||
/*
|
{
|
||||||
* app模式切换
|
struct intent it;
|
||||||
*/
|
struct application *app;
|
||||||
void app_switch(const char *name, int action)
|
|
||||||
{
|
log_info("app_exit\n");
|
||||||
struct intent it;
|
|
||||||
struct application *app;
|
init_intent(&it);
|
||||||
|
app = get_current_app();
|
||||||
log_info("app_exit\n");
|
if (app) {
|
||||||
|
/*
|
||||||
init_intent(&it);
|
* 退出当前app, 会执行state_machine()函数中APP_STA_STOP 和 APP_STA_DESTORY
|
||||||
app = get_current_app();
|
*/
|
||||||
if (app) {
|
it.name = app->name;
|
||||||
/*
|
it.action = ACTION_BACK;
|
||||||
* 退出当前app, 会执行state_machine()函数中APP_STA_STOP 和 APP_STA_DESTORY
|
start_app(&it);
|
||||||
*/
|
}
|
||||||
it.name = app->name;
|
|
||||||
it.action = ACTION_BACK;
|
/*
|
||||||
start_app(&it);
|
* 切换到app (name)并执行action分支
|
||||||
}
|
*/
|
||||||
|
it.name = name;
|
||||||
/*
|
it.action = action;
|
||||||
* 切换到app (name)并执行action分支
|
start_app(&it);
|
||||||
*/
|
}
|
||||||
it.name = name;
|
|
||||||
it.action = action;
|
int eSystemConfirmStopStatus(void)
|
||||||
start_app(&it);
|
{
|
||||||
}
|
/* 系统进入在未来时间里,无任务超时唤醒,可根据用户选择系统停止,或者系统定时唤醒(100ms) */
|
||||||
|
//1:Endless Sleep
|
||||||
int eSystemConfirmStopStatus(void)
|
//0:100 ms wakeup
|
||||||
{
|
/* log_info("100ms wakeup"); */
|
||||||
/* 系统进入在未来时间里,无任务超时唤醒,可根据用户选择系统停止,或者系统定时唤醒(100ms) */
|
return 1;
|
||||||
//1:Endless Sleep
|
}
|
||||||
//0:100 ms wakeup
|
|
||||||
/* log_info("100ms wakeup"); */
|
__attribute__((used)) int *__errno()
|
||||||
return 1;
|
{
|
||||||
}
|
static int err;
|
||||||
|
return &err;
|
||||||
__attribute__((used)) int *__errno()
|
}
|
||||||
{
|
|
||||||
static int err;
|
|
||||||
return &err;
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
|
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
@ -1,344 +1,344 @@
|
|||||||
#ifndef CONFIG_BOARD_AC6323A_DEMO_H
|
#ifndef CONFIG_BOARD_AC6323A_DEMO_H
|
||||||
#define CONFIG_BOARD_AC6323A_DEMO_H
|
#define CONFIG_BOARD_AC6323A_DEMO_H
|
||||||
|
|
||||||
#include "board_ac6323a_demo_global_build_cfg.h"
|
#include "board_ac6323a_demo_global_build_cfg.h"
|
||||||
|
|
||||||
#ifdef CONFIG_BOARD_AC6323A_DEMO
|
#ifdef CONFIG_BOARD_AC6323A_DEMO
|
||||||
|
|
||||||
#define CONFIG_SDFILE_ENABLE
|
#define CONFIG_SDFILE_ENABLE
|
||||||
|
|
||||||
//*********************************************************************************//
|
//*********************************************************************************//
|
||||||
// 配置开始 //
|
// 配置开始 //
|
||||||
//*********************************************************************************//
|
//*********************************************************************************//
|
||||||
#define ENABLE_THIS_MOUDLE 1
|
#define ENABLE_THIS_MOUDLE 1
|
||||||
#define DISABLE_THIS_MOUDLE 0
|
#define DISABLE_THIS_MOUDLE 0
|
||||||
|
|
||||||
#define ENABLE 1
|
#define ENABLE 1
|
||||||
#define DISABLE 0
|
#define DISABLE 0
|
||||||
|
|
||||||
#define NO_CONFIG_PORT (-1)
|
#define NO_CONFIG_PORT (-1)
|
||||||
|
|
||||||
//*********************************************************************************//
|
//*********************************************************************************//
|
||||||
// UART配置 //
|
// UART配置 //
|
||||||
//*********************************************************************************//
|
//*********************************************************************************//
|
||||||
#define TCFG_UART0_ENABLE ENABLE_THIS_MOUDLE //串口打印模块使能
|
#define TCFG_UART0_ENABLE ENABLE_THIS_MOUDLE //串口打印模块使能
|
||||||
#define TCFG_UART0_RX_PORT NO_CONFIG_PORT //串口接收脚配置(用于打印可以选择NO_CONFIG_PORT)
|
#define TCFG_UART0_RX_PORT NO_CONFIG_PORT //串口接收脚配置(用于打印可以选择NO_CONFIG_PORT)
|
||||||
#define TCFG_UART0_TX_PORT IO_PORTA_01 //串口发送脚配置
|
#define TCFG_UART0_TX_PORT IO_PORTA_01 //串口发送脚配置
|
||||||
#define TCFG_UART0_BAUDRATE 1000000 //串口波特率配置
|
#define TCFG_UART0_BAUDRATE 1000000 //串口波特率配置
|
||||||
|
|
||||||
//*********************************************************************************//
|
//*********************************************************************************//
|
||||||
// USB 配置 //
|
// USB 配置 //
|
||||||
//*********************************************************************************//
|
//*********************************************************************************//
|
||||||
#define TCFG_PC_ENABLE DISABLE_THIS_MOUDLE //PC模块使能
|
#define TCFG_PC_ENABLE DISABLE_THIS_MOUDLE //PC模块使能
|
||||||
#define TCFG_UDISK_ENABLE DISABLE_THIS_MOUDLE //U盘模块使能
|
#define TCFG_UDISK_ENABLE DISABLE_THIS_MOUDLE //U盘模块使能
|
||||||
#define TCFG_HID_HOST_ENABLE DISABLE_THIS_MOUDLE//ENABLE_THIS_MOUDLE //游戏盒子模式
|
#define TCFG_HID_HOST_ENABLE DISABLE_THIS_MOUDLE//ENABLE_THIS_MOUDLE //游戏盒子模式
|
||||||
#define TCFG_ADB_ENABLE DISABLE_THIS_MOUDLE//ENABLE_THIS_MOUDLE
|
#define TCFG_ADB_ENABLE DISABLE_THIS_MOUDLE//ENABLE_THIS_MOUDLE
|
||||||
#define TCFG_AOA_ENABLE DISABLE_THIS_MOUDLE//ENABLE_THIS_MOUDLE
|
#define TCFG_AOA_ENABLE DISABLE_THIS_MOUDLE//ENABLE_THIS_MOUDLE
|
||||||
|
|
||||||
#define TCFG_OTG_USB_DEV_EN (BIT(0) | BIT(1))//USB0 = BIT(0) USB1 = BIT(1)
|
#define TCFG_OTG_USB_DEV_EN (BIT(0) | BIT(1))//USB0 = BIT(0) USB1 = BIT(1)
|
||||||
//*********************************************************************************//
|
//*********************************************************************************//
|
||||||
// IIC配置 //
|
// IIC配置 //
|
||||||
//*********************************************************************************//
|
//*********************************************************************************//
|
||||||
/*软件IIC设置*/
|
/*软件IIC设置*/
|
||||||
#define TCFG_SW_I2C0_CLK_PORT IO_PORTA_09 //软件IIC CLK脚选择
|
#define TCFG_SW_I2C0_CLK_PORT IO_PORTA_09 //软件IIC CLK脚选择
|
||||||
#define TCFG_SW_I2C0_DAT_PORT IO_PORTA_10 //软件IIC DAT脚选择
|
#define TCFG_SW_I2C0_DAT_PORT IO_PORTA_10 //软件IIC DAT脚选择
|
||||||
#define TCFG_SW_I2C0_DELAY_CNT 50 //IIC延时参数,影响通讯时钟频率
|
#define TCFG_SW_I2C0_DELAY_CNT 50 //IIC延时参数,影响通讯时钟频率
|
||||||
|
|
||||||
/*硬件IIC端口选择
|
/*硬件IIC端口选择
|
||||||
SCL SDA
|
SCL SDA
|
||||||
'A': IO_PORT_DP IO_PORT_DM
|
'A': IO_PORT_DP IO_PORT_DM
|
||||||
'B': IO_PORTA_09 IO_PORTA_10
|
'B': IO_PORTA_09 IO_PORTA_10
|
||||||
'C': IO_PORTA_07 IO_PORTA_08
|
'C': IO_PORTA_07 IO_PORTA_08
|
||||||
'D': IO_PORTA_05 IO_PORTA_06
|
'D': IO_PORTA_05 IO_PORTA_06
|
||||||
*/
|
*/
|
||||||
#define TCFG_HW_I2C0_PORTS 'B'
|
#define TCFG_HW_I2C0_PORTS 'B'
|
||||||
#define TCFG_HW_I2C0_CLK 100000 //硬件IIC波特率
|
#define TCFG_HW_I2C0_CLK 100000 //硬件IIC波特率
|
||||||
|
|
||||||
//*********************************************************************************//
|
//*********************************************************************************//
|
||||||
// 硬件SPI 配置 //
|
// 硬件SPI 配置 //
|
||||||
//*********************************************************************************//
|
//*********************************************************************************//
|
||||||
#define TCFG_HW_SPI1_ENABLE ENABLE_THIS_MOUDLE
|
#define TCFG_HW_SPI1_ENABLE ENABLE_THIS_MOUDLE
|
||||||
//A组IO: DI: PB2 DO: PB1 CLK: PB0
|
//A组IO: DI: PB2 DO: PB1 CLK: PB0
|
||||||
//B组IO: DI: PC3 DO: PC5 CLK: PC4
|
//B组IO: DI: PC3 DO: PC5 CLK: PC4
|
||||||
#define TCFG_HW_SPI1_PORT 'A'
|
#define TCFG_HW_SPI1_PORT 'A'
|
||||||
#define TCFG_HW_SPI1_BAUD 2000000L
|
#define TCFG_HW_SPI1_BAUD 2000000L
|
||||||
#define TCFG_HW_SPI1_MODE SPI_MODE_BIDIR_1BIT
|
#define TCFG_HW_SPI1_MODE SPI_MODE_BIDIR_1BIT
|
||||||
#define TCFG_HW_SPI1_ROLE SPI_ROLE_MASTER
|
#define TCFG_HW_SPI1_ROLE SPI_ROLE_MASTER
|
||||||
|
|
||||||
#define TCFG_HW_SPI2_ENABLE ENABLE_THIS_MOUDLE
|
#define TCFG_HW_SPI2_ENABLE ENABLE_THIS_MOUDLE
|
||||||
//A组IO: DI: PB8 DO: PB10 CLK: PB9
|
//A组IO: DI: PB8 DO: PB10 CLK: PB9
|
||||||
//B组IO: DI: PA13 DO: DM CLK: DP
|
//B组IO: DI: PA13 DO: DM CLK: DP
|
||||||
#define TCFG_HW_SPI2_PORT 'A'
|
#define TCFG_HW_SPI2_PORT 'A'
|
||||||
#define TCFG_HW_SPI2_BAUD 2000000L
|
#define TCFG_HW_SPI2_BAUD 2000000L
|
||||||
#define TCFG_HW_SPI2_MODE SPI_MODE_BIDIR_1BIT
|
#define TCFG_HW_SPI2_MODE SPI_MODE_BIDIR_1BIT
|
||||||
#define TCFG_HW_SPI2_ROLE SPI_ROLE_MASTER
|
#define TCFG_HW_SPI2_ROLE SPI_ROLE_MASTER
|
||||||
|
|
||||||
//*********************************************************************************//
|
//*********************************************************************************//
|
||||||
// FLASH 配置 //
|
// FLASH 配置 //
|
||||||
//*********************************************************************************//
|
//*********************************************************************************//
|
||||||
#define TCFG_CODE_FLASH_ENABLE DISABLE_THIS_MOUDLE
|
#define TCFG_CODE_FLASH_ENABLE DISABLE_THIS_MOUDLE
|
||||||
#define TCFG_FLASH_DEV_SPI_HW_NUM 1// 1: SPI1 2: SPI2
|
#define TCFG_FLASH_DEV_SPI_HW_NUM 1// 1: SPI1 2: SPI2
|
||||||
#define TCFG_FLASH_DEV_SPI_CS_PORT IO_PORTB_06
|
#define TCFG_FLASH_DEV_SPI_CS_PORT IO_PORTB_06
|
||||||
#define TCFG_NORFLASH_DEV_ENABLE DISABLE_THIS_MOUDLE
|
#define TCFG_NORFLASH_DEV_ENABLE DISABLE_THIS_MOUDLE
|
||||||
|
|
||||||
|
|
||||||
//*********************************************************************************//
|
//*********************************************************************************//
|
||||||
// key 配置 //
|
// key 配置 //
|
||||||
//*********************************************************************************//
|
//*********************************************************************************//
|
||||||
#define KEY_NUM_MAX 10
|
#define KEY_NUM_MAX 10
|
||||||
#define KEY_NUM 3
|
#define KEY_NUM 3
|
||||||
|
|
||||||
#define MULT_KEY_ENABLE DISABLE //是否使能组合按键消息, 使能后需要配置组合按键映射表
|
#define MULT_KEY_ENABLE DISABLE //是否使能组合按键消息, 使能后需要配置组合按键映射表
|
||||||
//*********************************************************************************//
|
//*********************************************************************************//
|
||||||
// iokey 配置 //
|
// iokey 配置 //
|
||||||
//*********************************************************************************//
|
//*********************************************************************************//
|
||||||
#define TCFG_IOKEY_ENABLE DISABLE_THIS_MOUDLE //是否使能IO按键
|
#define TCFG_IOKEY_ENABLE DISABLE_THIS_MOUDLE //是否使能IO按键
|
||||||
|
|
||||||
#define TCFG_IOKEY_POWER_CONNECT_WAY ONE_PORT_TO_LOW //按键一端接低电平一端接IO
|
#define TCFG_IOKEY_POWER_CONNECT_WAY ONE_PORT_TO_LOW //按键一端接低电平一端接IO
|
||||||
|
|
||||||
#define TCFG_IOKEY_POWER_ONE_PORT IO_PORTA_01 //IO按键端口
|
#define TCFG_IOKEY_POWER_ONE_PORT IO_PORTA_01 //IO按键端口
|
||||||
|
|
||||||
#define TCFG_IOKEY_PREV_CONNECT_WAY ONE_PORT_TO_LOW //按键一端接低电平一端接IO
|
#define TCFG_IOKEY_PREV_CONNECT_WAY ONE_PORT_TO_LOW //按键一端接低电平一端接IO
|
||||||
#define TCFG_IOKEY_PREV_ONE_PORT IO_PORTB_04
|
#define TCFG_IOKEY_PREV_ONE_PORT IO_PORTB_04
|
||||||
|
|
||||||
#define TCFG_IOKEY_NEXT_CONNECT_WAY ONE_PORT_TO_LOW //按键一端接低电平一端接IO
|
#define TCFG_IOKEY_NEXT_CONNECT_WAY ONE_PORT_TO_LOW //按键一端接低电平一端接IO
|
||||||
#define TCFG_IOKEY_NEXT_ONE_PORT IO_PORTB_05
|
#define TCFG_IOKEY_NEXT_ONE_PORT IO_PORTB_05
|
||||||
|
|
||||||
//*********************************************************************************//
|
//*********************************************************************************//
|
||||||
// adkey 配置 //
|
// adkey 配置 //
|
||||||
//*********************************************************************************//
|
//*********************************************************************************//
|
||||||
#define TCFG_ADKEY_ENABLE DISABLE_THIS_MOUDLE //是否使能AD按键
|
#define TCFG_ADKEY_ENABLE DISABLE_THIS_MOUDLE //是否使能AD按键
|
||||||
#define TCFG_ADKEY_PORT IO_PORTA_01 //AD按键端口(需要注意选择的IO口是否支持AD功能)
|
#define TCFG_ADKEY_PORT IO_PORTA_01 //AD按键端口(需要注意选择的IO口是否支持AD功能)
|
||||||
/*AD通道选择,需要和AD按键的端口相对应:
|
/*AD通道选择,需要和AD按键的端口相对应:
|
||||||
AD_CH_PA1 AD_CH_PA3 AD_CH_PA4 AD_CH_PA5
|
AD_CH_PA1 AD_CH_PA3 AD_CH_PA4 AD_CH_PA5
|
||||||
AD_CH_PA9 AD_CH_PA1 AD_CH_PB1 AD_CH_PB4
|
AD_CH_PA9 AD_CH_PA1 AD_CH_PB1 AD_CH_PB4
|
||||||
AD_CH_PB6 AD_CH_PB7 AD_CH_DP AD_CH_DM
|
AD_CH_PB6 AD_CH_PB7 AD_CH_DP AD_CH_DM
|
||||||
AD_CH_PB2
|
AD_CH_PB2
|
||||||
*/
|
*/
|
||||||
#define TCFG_ADKEY_AD_CHANNEL AD_CH_PA1
|
#define TCFG_ADKEY_AD_CHANNEL AD_CH_PA1
|
||||||
#define TCFG_ADKEY_EXTERN_UP_ENABLE ENABLE_THIS_MOUDLE //是否使用外部上拉
|
#define TCFG_ADKEY_EXTERN_UP_ENABLE ENABLE_THIS_MOUDLE //是否使用外部上拉
|
||||||
|
|
||||||
#if TCFG_ADKEY_EXTERN_UP_ENABLE
|
#if TCFG_ADKEY_EXTERN_UP_ENABLE
|
||||||
#define R_UP 220 //22K,外部上拉阻值在此自行设置
|
#define R_UP 220 //22K,外部上拉阻值在此自行设置
|
||||||
#else
|
#else
|
||||||
#define R_UP 100 //10K,内部上拉默认10K
|
#define R_UP 100 //10K,内部上拉默认10K
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
//必须从小到大填电阻,没有则同VDDIO,填0x3ffL
|
//必须从小到大填电阻,没有则同VDDIO,填0x3ffL
|
||||||
#define TCFG_ADKEY_AD0 (0) //0R
|
#define TCFG_ADKEY_AD0 (0) //0R
|
||||||
#define TCFG_ADKEY_AD1 (0x3ffL * 30 / (30 + R_UP)) //3k
|
#define TCFG_ADKEY_AD1 (0x3ffL * 30 / (30 + R_UP)) //3k
|
||||||
#define TCFG_ADKEY_AD2 (0x3ffL * 62 / (62 + R_UP)) //6.2k
|
#define TCFG_ADKEY_AD2 (0x3ffL * 62 / (62 + R_UP)) //6.2k
|
||||||
#define TCFG_ADKEY_AD3 (0x3ffL * 91 / (91 + R_UP)) //9.1k
|
#define TCFG_ADKEY_AD3 (0x3ffL * 91 / (91 + R_UP)) //9.1k
|
||||||
#define TCFG_ADKEY_AD4 (0x3ffL * 150 / (150 + R_UP)) //15k
|
#define TCFG_ADKEY_AD4 (0x3ffL * 150 / (150 + R_UP)) //15k
|
||||||
#define TCFG_ADKEY_AD5 (0x3ffL * 240 / (240 + R_UP)) //24k
|
#define TCFG_ADKEY_AD5 (0x3ffL * 240 / (240 + R_UP)) //24k
|
||||||
#define TCFG_ADKEY_AD6 (0x3ffL * 330 / (330 + R_UP)) //33k
|
#define TCFG_ADKEY_AD6 (0x3ffL * 330 / (330 + R_UP)) //33k
|
||||||
#define TCFG_ADKEY_AD7 (0x3ffL * 510 / (510 + R_UP)) //51k
|
#define TCFG_ADKEY_AD7 (0x3ffL * 510 / (510 + R_UP)) //51k
|
||||||
#define TCFG_ADKEY_AD8 (0x3ffL * 1000 / (1000 + R_UP)) //100k
|
#define TCFG_ADKEY_AD8 (0x3ffL * 1000 / (1000 + R_UP)) //100k
|
||||||
#define TCFG_ADKEY_AD9 (0x3ffL * 2200 / (2200 + R_UP)) //220k
|
#define TCFG_ADKEY_AD9 (0x3ffL * 2200 / (2200 + R_UP)) //220k
|
||||||
#define TCFG_ADKEY_VDDIO (0x3ffL)
|
#define TCFG_ADKEY_VDDIO (0x3ffL)
|
||||||
|
|
||||||
#define TCFG_ADKEY_VOLTAGE0 ((TCFG_ADKEY_AD0 + TCFG_ADKEY_AD1) / 2)
|
#define TCFG_ADKEY_VOLTAGE0 ((TCFG_ADKEY_AD0 + TCFG_ADKEY_AD1) / 2)
|
||||||
#define TCFG_ADKEY_VOLTAGE1 ((TCFG_ADKEY_AD1 + TCFG_ADKEY_AD2) / 2)
|
#define TCFG_ADKEY_VOLTAGE1 ((TCFG_ADKEY_AD1 + TCFG_ADKEY_AD2) / 2)
|
||||||
#define TCFG_ADKEY_VOLTAGE2 ((TCFG_ADKEY_AD2 + TCFG_ADKEY_AD3) / 2)
|
#define TCFG_ADKEY_VOLTAGE2 ((TCFG_ADKEY_AD2 + TCFG_ADKEY_AD3) / 2)
|
||||||
#define TCFG_ADKEY_VOLTAGE3 ((TCFG_ADKEY_AD3 + TCFG_ADKEY_AD4) / 2)
|
#define TCFG_ADKEY_VOLTAGE3 ((TCFG_ADKEY_AD3 + TCFG_ADKEY_AD4) / 2)
|
||||||
#define TCFG_ADKEY_VOLTAGE4 ((TCFG_ADKEY_AD4 + TCFG_ADKEY_AD5) / 2)
|
#define TCFG_ADKEY_VOLTAGE4 ((TCFG_ADKEY_AD4 + TCFG_ADKEY_AD5) / 2)
|
||||||
#define TCFG_ADKEY_VOLTAGE5 ((TCFG_ADKEY_AD5 + TCFG_ADKEY_AD6) / 2)
|
#define TCFG_ADKEY_VOLTAGE5 ((TCFG_ADKEY_AD5 + TCFG_ADKEY_AD6) / 2)
|
||||||
#define TCFG_ADKEY_VOLTAGE6 ((TCFG_ADKEY_AD6 + TCFG_ADKEY_AD7) / 2)
|
#define TCFG_ADKEY_VOLTAGE6 ((TCFG_ADKEY_AD6 + TCFG_ADKEY_AD7) / 2)
|
||||||
#define TCFG_ADKEY_VOLTAGE7 ((TCFG_ADKEY_AD7 + TCFG_ADKEY_AD8) / 2)
|
#define TCFG_ADKEY_VOLTAGE7 ((TCFG_ADKEY_AD7 + TCFG_ADKEY_AD8) / 2)
|
||||||
#define TCFG_ADKEY_VOLTAGE8 ((TCFG_ADKEY_AD8 + TCFG_ADKEY_AD9) / 2)
|
#define TCFG_ADKEY_VOLTAGE8 ((TCFG_ADKEY_AD8 + TCFG_ADKEY_AD9) / 2)
|
||||||
#define TCFG_ADKEY_VOLTAGE9 ((TCFG_ADKEY_AD9 + TCFG_ADKEY_VDDIO) / 2)
|
#define TCFG_ADKEY_VOLTAGE9 ((TCFG_ADKEY_AD9 + TCFG_ADKEY_VDDIO) / 2)
|
||||||
|
|
||||||
#define TCFG_ADKEY_VALUE0 0
|
#define TCFG_ADKEY_VALUE0 0
|
||||||
#define TCFG_ADKEY_VALUE1 1
|
#define TCFG_ADKEY_VALUE1 1
|
||||||
#define TCFG_ADKEY_VALUE2 2
|
#define TCFG_ADKEY_VALUE2 2
|
||||||
#define TCFG_ADKEY_VALUE3 3
|
#define TCFG_ADKEY_VALUE3 3
|
||||||
#define TCFG_ADKEY_VALUE4 4
|
#define TCFG_ADKEY_VALUE4 4
|
||||||
#define TCFG_ADKEY_VALUE5 5
|
#define TCFG_ADKEY_VALUE5 5
|
||||||
#define TCFG_ADKEY_VALUE6 6
|
#define TCFG_ADKEY_VALUE6 6
|
||||||
#define TCFG_ADKEY_VALUE7 7
|
#define TCFG_ADKEY_VALUE7 7
|
||||||
#define TCFG_ADKEY_VALUE8 8
|
#define TCFG_ADKEY_VALUE8 8
|
||||||
#define TCFG_ADKEY_VALUE9 9
|
#define TCFG_ADKEY_VALUE9 9
|
||||||
|
|
||||||
//*********************************************************************************//
|
//*********************************************************************************//
|
||||||
// Audio配置 //
|
// Audio配置 //
|
||||||
//*********************************************************************************//
|
//*********************************************************************************//
|
||||||
#ifdef CONFIG_LITE_AUDIO
|
#ifdef CONFIG_LITE_AUDIO
|
||||||
#define TCFG_AUDIO_ENABLE DISABLE
|
#define TCFG_AUDIO_ENABLE DISABLE
|
||||||
#if TCFG_AUDIO_ENABLE
|
#if TCFG_AUDIO_ENABLE
|
||||||
#define TCFG_DEC_USBC_ENABLE DISABLE
|
#define TCFG_DEC_USBC_ENABLE DISABLE
|
||||||
#define TCFG_ENC_USBC_ENABLE DISABLE
|
#define TCFG_ENC_USBC_ENABLE DISABLE
|
||||||
#define TCFG_DEC_LC3_ENABLE DISABLE
|
#define TCFG_DEC_LC3_ENABLE DISABLE
|
||||||
#define TCFG_ENC_LC3_ENABLE DISABLE
|
#define TCFG_ENC_LC3_ENABLE DISABLE
|
||||||
|
|
||||||
|
|
||||||
//lc3 参数配置
|
//lc3 参数配置
|
||||||
#if (TCFG_ENC_LC3_ENABLE || TCFG_DEC_LC3_ENABLE)
|
#if (TCFG_ENC_LC3_ENABLE || TCFG_DEC_LC3_ENABLE)
|
||||||
#define LC3_CODING_SAMPLERATE 16000 //lc3 编码的采样率
|
#define LC3_CODING_SAMPLERATE 16000 //lc3 编码的采样率
|
||||||
#define LC3_CODING_FRAME_LEN 50 //帧长度,只支持25,50,100
|
#define LC3_CODING_FRAME_LEN 50 //帧长度,只支持25,50,100
|
||||||
#define LC3_CODING_CHANNEL 1 //lc3 的通道数
|
#define LC3_CODING_CHANNEL 1 //lc3 的通道数
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
//*********************************************************************************//
|
//*********************************************************************************//
|
||||||
// irkey 配置 //
|
// irkey 配置 //
|
||||||
//*********************************************************************************//
|
//*********************************************************************************//
|
||||||
#define TCFG_IRKEY_ENABLE DISABLE_THIS_MOUDLE//是否使能AD按键
|
#define TCFG_IRKEY_ENABLE DISABLE_THIS_MOUDLE//是否使能AD按键
|
||||||
#define TCFG_IRKEY_PORT IO_PORTA_08 //IR按键端口
|
#define TCFG_IRKEY_PORT IO_PORTA_08 //IR按键端口
|
||||||
|
|
||||||
//*********************************************************************************//
|
//*********************************************************************************//
|
||||||
// tocuh key 配置 //
|
// tocuh key 配置 //
|
||||||
//*********************************************************************************//
|
//*********************************************************************************//
|
||||||
#define TCFG_LP_TOUCH_KEY_ENABLE DISABLE_THIS_MOUDLE //是否使能触摸按键
|
#define TCFG_LP_TOUCH_KEY_ENABLE DISABLE_THIS_MOUDLE //是否使能触摸按键
|
||||||
|
|
||||||
//*********************************************************************************//
|
//*********************************************************************************//
|
||||||
// RTC_ALARM配置 //
|
// RTC_ALARM配置 //
|
||||||
//*********************************************************************************//
|
//*********************************************************************************//
|
||||||
#define TCFG_RTC_ALARM_ENABLE ENABLE_THIS_MOUDLE
|
#define TCFG_RTC_ALARM_ENABLE ENABLE_THIS_MOUDLE
|
||||||
|
|
||||||
//*********************************************************************************//
|
//*********************************************************************************//
|
||||||
// 充电仓配置(不支持) //
|
// 充电仓配置(不支持) //
|
||||||
//*********************************************************************************//
|
//*********************************************************************************//
|
||||||
#define TCFG_TEST_BOX_ENABLE DISABLE_THIS_MOUDLE
|
#define TCFG_TEST_BOX_ENABLE DISABLE_THIS_MOUDLE
|
||||||
#define TCFG_CHARGESTORE_PORT IO_PORTP_00
|
#define TCFG_CHARGESTORE_PORT IO_PORTP_00
|
||||||
#define TCFG_CHARGESTORE_UART_ID IRQ_UART1_IDX
|
#define TCFG_CHARGESTORE_UART_ID IRQ_UART1_IDX
|
||||||
|
|
||||||
//*********************************************************************************//
|
//*********************************************************************************//
|
||||||
// 充电参数配置 //
|
// 充电参数配置 //
|
||||||
//*********************************************************************************//
|
//*********************************************************************************//
|
||||||
//是否支持芯片内置充电
|
//是否支持芯片内置充电
|
||||||
#define TCFG_CHARGE_ENABLE ENABLE
|
#define TCFG_CHARGE_ENABLE ENABLE
|
||||||
//是否支持开机充电
|
//是否支持开机充电
|
||||||
#define TCFG_CHARGE_POWERON_ENABLE ENABLE
|
#define TCFG_CHARGE_POWERON_ENABLE ENABLE
|
||||||
//是否支持拔出充电自动开机功能
|
//是否支持拔出充电自动开机功能
|
||||||
#define TCFG_CHARGE_OFF_POWERON_NE ENABLE
|
#define TCFG_CHARGE_OFF_POWERON_NE ENABLE
|
||||||
/*
|
/*
|
||||||
充电截止电压可选配置:
|
充电截止电压可选配置:
|
||||||
CHARGE_FULL_V_3962 CHARGE_FULL_V_4002 CHARGE_FULL_V_4044 CHARGE_FULL_V_4086
|
CHARGE_FULL_V_3962 CHARGE_FULL_V_4002 CHARGE_FULL_V_4044 CHARGE_FULL_V_4086
|
||||||
CHARGE_FULL_V_4130 CHARGE_FULL_V_4175 CHARGE_FULL_V_4222 CHARGE_FULL_V_4270
|
CHARGE_FULL_V_4130 CHARGE_FULL_V_4175 CHARGE_FULL_V_4222 CHARGE_FULL_V_4270
|
||||||
CHARGE_FULL_V_4308 CHARGE_FULL_V_4349 CHARGE_FULL_V_4391 CHARGE_FULL_V_4434
|
CHARGE_FULL_V_4308 CHARGE_FULL_V_4349 CHARGE_FULL_V_4391 CHARGE_FULL_V_4434
|
||||||
CHARGE_FULL_V_4472 CHARGE_FULL_V_4517 CHARGE_FULL_V_4564 CHARGE_FULL_V_4611
|
CHARGE_FULL_V_4472 CHARGE_FULL_V_4517 CHARGE_FULL_V_4564 CHARGE_FULL_V_4611
|
||||||
*/
|
*/
|
||||||
#define TCFG_CHARGE_FULL_V CHARGE_FULL_V_4222
|
#define TCFG_CHARGE_FULL_V CHARGE_FULL_V_4175
|
||||||
/*
|
/*
|
||||||
充电截止电流可选配置:
|
充电截止电流可选配置:
|
||||||
CHARGE_FULL_mA_2 CHARGE_FULL_mA_5 CHARGE_FULL_mA_7 CHARGE_FULL_mA_10
|
CHARGE_FULL_mA_2 CHARGE_FULL_mA_5 CHARGE_FULL_mA_7 CHARGE_FULL_mA_10
|
||||||
CHARGE_FULL_mA_15 CHARGE_FULL_mA_20 CHARGE_FULL_mA_25 CHARGE_FULL_mA_30
|
CHARGE_FULL_mA_15 CHARGE_FULL_mA_20 CHARGE_FULL_mA_25 CHARGE_FULL_mA_30
|
||||||
*/
|
*/
|
||||||
#define TCFG_CHARGE_FULL_MA CHARGE_FULL_mA_5
|
#define TCFG_CHARGE_FULL_MA CHARGE_FULL_mA_7
|
||||||
/*
|
/*
|
||||||
充电电流可选配置:
|
充电电流可选配置:
|
||||||
CHARGE_mA_20 CHARGE_mA_30 CHARGE_mA_40 CHARGE_mA_50
|
CHARGE_mA_20 CHARGE_mA_30 CHARGE_mA_40 CHARGE_mA_50
|
||||||
CHARGE_mA_60 CHARGE_mA_70 CHARGE_mA_80 CHARGE_mA_90
|
CHARGE_mA_60 CHARGE_mA_70 CHARGE_mA_80 CHARGE_mA_90
|
||||||
CHARGE_mA_100 CHARGE_mA_110 CHARGE_mA_120 CHARGE_mA_140
|
CHARGE_mA_100 CHARGE_mA_110 CHARGE_mA_120 CHARGE_mA_140
|
||||||
CHARGE_mA_160 CHARGE_mA_180 CHARGE_mA_200 CHARGE_mA_220
|
CHARGE_mA_160 CHARGE_mA_180 CHARGE_mA_200 CHARGE_mA_220
|
||||||
*/
|
*/
|
||||||
#define TCFG_CHARGE_MA CHARGE_mA_20
|
#define TCFG_CHARGE_MA CHARGE_mA_30
|
||||||
|
|
||||||
//*********************************************************************************//
|
//*********************************************************************************//
|
||||||
// LED 配置 //
|
// LED 配置 //
|
||||||
//*********************************************************************************//
|
//*********************************************************************************//
|
||||||
#define TCFG_PWMLED_ENABLE DISABLE_THIS_MOUDLE //是否支持PMW LED推灯模块
|
#define TCFG_PWMLED_ENABLE DISABLE_THIS_MOUDLE //是否支持PMW LED推灯模块
|
||||||
#define TCFG_PWMLED_IOMODE LED_ONE_IO_MODE //LED模式,单IO还是两个IO推灯
|
#define TCFG_PWMLED_IOMODE LED_ONE_IO_MODE //LED模式,单IO还是两个IO推灯
|
||||||
#define TCFG_PWMLED_PIN IO_PORTB_06 //LED使用的IO口
|
#define TCFG_PWMLED_PIN IO_PORTB_06 //LED使用的IO口
|
||||||
//*********************************************************************************//
|
//*********************************************************************************//
|
||||||
// 时钟配置 //
|
// 时钟配置 //
|
||||||
//*********************************************************************************//
|
//*********************************************************************************//
|
||||||
#define TCFG_CLOCK_SYS_SRC SYS_CLOCK_INPUT_PLL_BT_OSC //系统时钟源选择
|
#define TCFG_CLOCK_SYS_SRC SYS_CLOCK_INPUT_PLL_BT_OSC //系统时钟源选择
|
||||||
#define TCFG_CLOCK_SYS_HZ 24000000 //系统时钟设置
|
#define TCFG_CLOCK_SYS_HZ 24000000 //系统时钟设置
|
||||||
#define TCFG_CLOCK_OSC_HZ 24000000 //外界晶振频率设置
|
#define TCFG_CLOCK_OSC_HZ 24000000 //外界晶振频率设置
|
||||||
/* #define TCFG_CLOCK_MODE CLOCK_MODE_USR//CLOCK_MODE_ADAPTIVE */
|
/* #define TCFG_CLOCK_MODE CLOCK_MODE_USR//CLOCK_MODE_ADAPTIVE */
|
||||||
#define TCFG_CLOCK_MODE CLOCK_MODE_ADAPTIVE
|
#define TCFG_CLOCK_MODE CLOCK_MODE_ADAPTIVE
|
||||||
|
|
||||||
//*********************************************************************************//
|
//*********************************************************************************//
|
||||||
// 低功耗配置 //
|
// 低功耗配置 //
|
||||||
//*********************************************************************************//
|
//*********************************************************************************//
|
||||||
#define TCFG_LOWPOWER_POWER_SEL PWR_LDO15
|
#define TCFG_LOWPOWER_POWER_SEL PWR_LDO15
|
||||||
// #define TCFG_LOWPOWER_POWER_SEL PWR_LDO15 PWR_DCDC15 //电源模式设置,可选DCDC和LDO
|
// #define TCFG_LOWPOWER_POWER_SEL PWR_LDO15 PWR_DCDC15 //电源模式设置,可选DCDC和LDO
|
||||||
#define TCFG_LOWPOWER_BTOSC_DISABLE 0 //低功耗模式下BTOSC是否保持
|
#define TCFG_LOWPOWER_BTOSC_DISABLE 0 //低功耗模式下BTOSC是否保持
|
||||||
#define TCFG_LOWPOWER_LOWPOWER_SEL 0 //SLEEP_EN //SNIFF状态下芯片是否进入powerdown
|
#define TCFG_LOWPOWER_LOWPOWER_SEL 0 //SLEEP_EN //SNIFF状态下芯片是否进入powerdown
|
||||||
/*强VDDIO等级配置,可选:
|
/*强VDDIO等级配置,可选:
|
||||||
VDDIOM_VOL_20V VDDIOM_VOL_22V VDDIOM_VOL_24V VDDIOM_VOL_26V
|
VDDIOM_VOL_20V VDDIOM_VOL_22V VDDIOM_VOL_24V VDDIOM_VOL_26V
|
||||||
VDDIOM_VOL_30V VDDIOM_VOL_30V VDDIOM_VOL_32V VDDIOM_VOL_36V*/
|
VDDIOM_VOL_30V VDDIOM_VOL_30V VDDIOM_VOL_32V VDDIOM_VOL_36V*/
|
||||||
#define TCFG_LOWPOWER_VDDIOM_LEVEL VDDIOM_VOL_30V
|
#define TCFG_LOWPOWER_VDDIOM_LEVEL VDDIOM_VOL_30V
|
||||||
/*弱VDDIO等级配置,可选:
|
/*弱VDDIO等级配置,可选:
|
||||||
VDDIOW_VOL_21V VDDIOW_VOL_24V VDDIOW_VOL_28V VDDIOW_VOL_32V*/
|
VDDIOW_VOL_21V VDDIOW_VOL_24V VDDIOW_VOL_28V VDDIOW_VOL_32V*/
|
||||||
#define TCFG_LOWPOWER_VDDIOW_LEVEL VDDIOW_VOL_28V //弱VDDIO等级配置
|
#define TCFG_LOWPOWER_VDDIOW_LEVEL VDDIOW_VOL_28V //弱VDDIO等级配置
|
||||||
#define TCFG_LOWPOWER_OSC_TYPE OSC_TYPE_LRC
|
#define TCFG_LOWPOWER_OSC_TYPE OSC_TYPE_LRC
|
||||||
#define TCFG_VD13_CAP_EN 1
|
#define TCFG_VD13_CAP_EN 1
|
||||||
|
|
||||||
|
|
||||||
//*********************************************************************************//
|
//*********************************************************************************//
|
||||||
// g-sensor配置 //
|
// g-sensor配置 //
|
||||||
//*********************************************************************************//
|
//*********************************************************************************//
|
||||||
#define TCFG_GSENSOR_ENABLE 0 //gSensor使能
|
#define TCFG_GSENSOR_ENABLE 0 //gSensor使能
|
||||||
#define TCFG_DA230_EN 0
|
#define TCFG_DA230_EN 0
|
||||||
#define TCFG_SC7A20_EN 0
|
#define TCFG_SC7A20_EN 0
|
||||||
#define TCFG_STK8321_EN 0
|
#define TCFG_STK8321_EN 0
|
||||||
#define TCFG_GSENOR_USER_IIC_TYPE 0 //0:软件IIC 1:硬件IIC
|
#define TCFG_GSENOR_USER_IIC_TYPE 0 //0:软件IIC 1:硬件IIC
|
||||||
|
|
||||||
//*********************************************************************************//
|
//*********************************************************************************//
|
||||||
// 系统配置 //
|
// 系统配置 //
|
||||||
//*********************************************************************************//
|
//*********************************************************************************//
|
||||||
#define TCFG_AUTO_SHUT_DOWN_TIME 0 //没有蓝牙连接自动关机时间
|
#define TCFG_AUTO_SHUT_DOWN_TIME 0 //没有蓝牙连接自动关机时间
|
||||||
#if (TCFG_LOWPOWER_POWER_SEL == PWR_DCDC15)
|
#if (TCFG_LOWPOWER_POWER_SEL == PWR_DCDC15)
|
||||||
#define TCFG_SYS_LVD_EN 1 //dcdc模式电压低于2.4v的时候切为LDO模式,需要开启电量检测
|
#define TCFG_SYS_LVD_EN 1 //dcdc模式电压低于2.4v的时候切为LDO模式,需要开启电量检测
|
||||||
#else
|
#else
|
||||||
#define TCFG_SYS_LVD_EN 1 //电量检测使能
|
#define TCFG_SYS_LVD_EN 1 //电量检测使能
|
||||||
#endif
|
#endif
|
||||||
#define TCFG_POWER_ON_NEED_KEY 0 //是否需要按按键开机配置
|
#define TCFG_POWER_ON_NEED_KEY 0 //是否需要按按键开机配置
|
||||||
#define TCFG_HID_AUTO_SHUTDOWN_TIME (0 * 60) //HID无操作自动关机(单位:秒)
|
#define TCFG_HID_AUTO_SHUTDOWN_TIME (0 * 60) //HID无操作自动关机(单位:秒)
|
||||||
|
|
||||||
//*********************************************************************************//
|
//*********************************************************************************//
|
||||||
// 蓝牙配置 //
|
// 蓝牙配置 //
|
||||||
//*********************************************************************************//
|
//*********************************************************************************//
|
||||||
#define TCFG_USER_TWS_ENABLE 0 //tws功能使能
|
#define TCFG_USER_TWS_ENABLE 0 //tws功能使能
|
||||||
#define TCFG_USER_BLE_ENABLE 1 //BLE功能使能,---使能后,请配置TCFG_BLE_DEMO_SELECT选择DEMO例子
|
#define TCFG_USER_BLE_ENABLE 1 //BLE功能使能,---使能后,请配置TCFG_BLE_DEMO_SELECT选择DEMO例子
|
||||||
#define TCFG_USER_EDR_ENABLE 0 //EDR功能使能
|
#define TCFG_USER_EDR_ENABLE 0 //EDR功能使能
|
||||||
|
|
||||||
#define USER_SUPPORT_PROFILE_SPP 0
|
#define USER_SUPPORT_PROFILE_SPP 0
|
||||||
#define USER_SUPPORT_PROFILE_HFP 0
|
#define USER_SUPPORT_PROFILE_HFP 0
|
||||||
#define USER_SUPPORT_PROFILE_A2DP 0
|
#define USER_SUPPORT_PROFILE_A2DP 0
|
||||||
#define USER_SUPPORT_PROFILE_AVCTP 0
|
#define USER_SUPPORT_PROFILE_AVCTP 0
|
||||||
#define USER_SUPPORT_PROFILE_HID 0
|
#define USER_SUPPORT_PROFILE_HID 0
|
||||||
#define USER_SUPPORT_PROFILE_PNP 0
|
#define USER_SUPPORT_PROFILE_PNP 0
|
||||||
#define USER_SUPPORT_PROFILE_PBAP 0
|
#define USER_SUPPORT_PROFILE_PBAP 0
|
||||||
|
|
||||||
|
|
||||||
#if(TCFG_USER_TWS_ENABLE || TCFG_USER_BLE_ENABLE)
|
#if(TCFG_USER_TWS_ENABLE || TCFG_USER_BLE_ENABLE)
|
||||||
#define TCFG_BD_NUM 1 //连接设备个数配置
|
#define TCFG_BD_NUM 1 //连接设备个数配置
|
||||||
#define TCFG_AUTO_STOP_PAGE_SCAN_TIME 0 //配置一拖二第一台连接后自动关闭PAGE SCAN的时间(单位分钟)
|
#define TCFG_AUTO_STOP_PAGE_SCAN_TIME 0 //配置一拖二第一台连接后自动关闭PAGE SCAN的时间(单位分钟)
|
||||||
#else
|
#else
|
||||||
#define TCFG_BD_NUM 1 //连接设备个数配置
|
#define TCFG_BD_NUM 1 //连接设备个数配置
|
||||||
#define TCFG_AUTO_STOP_PAGE_SCAN_TIME 0 //配置一拖二第一台连接后自动关闭PAGE SCAN的时间(单位分钟)
|
#define TCFG_AUTO_STOP_PAGE_SCAN_TIME 0 //配置一拖二第一台连接后自动关闭PAGE SCAN的时间(单位分钟)
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#define BT_INBAND_RINGTONE 0 //是否播放手机自带来电铃声
|
#define BT_INBAND_RINGTONE 0 //是否播放手机自带来电铃声
|
||||||
#define BT_PHONE_NUMBER 0 //是否播放来电报号
|
#define BT_PHONE_NUMBER 0 //是否播放来电报号
|
||||||
#define BT_SUPPORT_DISPLAY_BAT 0 //是否使能电量检测
|
#define BT_SUPPORT_DISPLAY_BAT 0 //是否使能电量检测
|
||||||
#define BT_SUPPORT_MUSIC_VOL_SYNC 0 //是否使能音量同步
|
#define BT_SUPPORT_MUSIC_VOL_SYNC 0 //是否使能音量同步
|
||||||
|
|
||||||
|
|
||||||
//*********************************************************************************//
|
//*********************************************************************************//
|
||||||
// 电源切换配置 //
|
// 电源切换配置 //
|
||||||
//*********************************************************************************//
|
//*********************************************************************************//
|
||||||
|
|
||||||
#define CONFIG_PHONE_CALL_USE_LDO15 1
|
#define CONFIG_PHONE_CALL_USE_LDO15 1
|
||||||
|
|
||||||
//*********************************************************************************//
|
//*********************************************************************************//
|
||||||
// 时钟配置 //
|
// 时钟配置 //
|
||||||
//*********************************************************************************//
|
//*********************************************************************************//
|
||||||
|
|
||||||
#define CONFIG_BT_NORMAL_HZ (48 * 1000000L)
|
#define CONFIG_BT_NORMAL_HZ (48 * 1000000L)
|
||||||
//#define CONFIG_BT_CONNECT_HZ (48 * 1000000L)
|
//#define CONFIG_BT_CONNECT_HZ (48 * 1000000L)
|
||||||
|
|
||||||
//*********************************************************************************//
|
//*********************************************************************************//
|
||||||
// 配置结束 //
|
// 配置结束 //
|
||||||
//*********************************************************************************//
|
//*********************************************************************************//
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
|
||||||
|
File diff suppressed because it is too large
Load Diff
@ -1,54 +1,62 @@
|
|||||||
#ifndef _APP_TEMPERATURE_H_
|
#ifndef _APP_TEMPERATURE_H_
|
||||||
#define _APP_TEMPERATURE_H_
|
#define _APP_TEMPERATURE_H_
|
||||||
|
|
||||||
#include "typedef.h"
|
#include "typedef.h"
|
||||||
#include "system/event.h"
|
#include "system/event.h"
|
||||||
|
|
||||||
#define BLE_TEMPERATURE_DETECT_INTERVAL 250
|
/**
|
||||||
#define BLE_TEMPERATURE_WORK_TIMEOUT 10*1000
|
* 1.0.1 2025.05.16
|
||||||
#define BLE_TEMPERATURE_SLEEP_TIMEOUT 3*1000
|
*/
|
||||||
#define BLE_TEMPERATURE_DEVICE_NAME "IT12"
|
#define BLE_TEMPERATURE_DEVICE_SOFT_VER "1.0.1"
|
||||||
#define BLE_TEMPERATURE_LOWPOWER_OFFSIZE 3000 //mV
|
|
||||||
|
#define BLE_TEMPERATURE_DETECT_INTERVAL 250
|
||||||
#define BLE_TEMPERATURE_DEVICE_NST1002 1002
|
#define BLE_TEMPERATURE_WORK_TIMEOUT 10*1000
|
||||||
#define BLE_TEMPERATURE_DEVICE_NTC 0
|
#define BLE_TEMPERATURE_SLEEP_TIMEOUT 3*1000
|
||||||
|
#define BLE_TEMPERATURE_DEVICE_NAME "IT12"
|
||||||
#define BLE_TEMPERATURE_WORK_LED IO_PORTA_07
|
#define BLE_TEMPERATURE_LOWPOWER_OFFSIZE 3000 //mV
|
||||||
|
|
||||||
#define BLE_TEMPERATURE_CHARGE_STATE_CHARGING 1
|
#define BLE_TEMPERATURE_DEVICE_NST1002 1002
|
||||||
#define BLE_TEMPERATURE_CHARGE_STATE_FULL 2
|
#define BLE_TEMPERATURE_DEVICE_NTC 0
|
||||||
#define BLE_TEMPERATURE_CHARGE_STATE_IDLE 3
|
|
||||||
#define BLE_TEMPERATURE_CHARGE_STATE_LOWPOWER 4
|
#define BLE_TEMPERATURE_WORK_LED IO_PORTA_07
|
||||||
|
|
||||||
//VM用户自定义配置项[1 ~ 49]
|
#define BLE_TEMPERATURE_CHARGE_STATE_CHARGING 1
|
||||||
#define BLE_TEMPERATURE_VM_DEVICE_CONFIG 2
|
#define BLE_TEMPERATURE_CHARGE_STATE_FULL 2
|
||||||
|
#define BLE_TEMPERATURE_CHARGE_STATE_IDLE 3
|
||||||
typedef struct
|
#define BLE_TEMPERATURE_CHARGE_STATE_LOWPOWER 4
|
||||||
{
|
|
||||||
u16 temperature_sensor;
|
//VM用户自定义配置项[1 ~ 49]
|
||||||
u32 temperature_ntc;
|
#define BLE_TEMPERATURE_VM_DEVICE_CONFIG 2
|
||||||
u8 batt_percent;
|
|
||||||
u16 batt_vat;
|
typedef struct
|
||||||
u8 is_bat_charge;
|
{
|
||||||
u8 is_bat_full;
|
u16 temperature_sensor;
|
||||||
}app_dev_info_t;
|
u16 temperature_ntc;
|
||||||
|
u8 batt_percent;
|
||||||
typedef struct
|
u16 batt_val;
|
||||||
{
|
u8 is_bat_charge;
|
||||||
/* 测温检测间隔 ms 1000ms*/
|
u8 is_bat_full;
|
||||||
int16_t detect_interval;
|
}app_dev_info_t;
|
||||||
/* 温度校准 0.1C *1000 = 100 或者 -100*/
|
|
||||||
int16_t temperature_offset;
|
typedef struct
|
||||||
}app_dev_config_t;
|
{
|
||||||
|
/* 测温检测间隔 ms 1000ms*/
|
||||||
//extern struct app_dev_info_t dev_info;
|
int16_t detect_interval;
|
||||||
//extern struct app_dev_config_t dev_config;
|
/* 温度校准 0.1C *1000 = 100 或者 -100*/
|
||||||
|
int16_t temperature_offset;
|
||||||
void temperature_ble_init();
|
}app_dev_config_t;
|
||||||
void temperature_init(void);
|
|
||||||
void ble_receive_callback(u8* data,u16 len);
|
//extern struct app_dev_info_t dev_info;
|
||||||
|
//extern struct app_dev_config_t dev_config;
|
||||||
void temperature_work_led(u8 on);
|
|
||||||
void temperature_charge_led(u8 on);
|
void temperature_ble_init();
|
||||||
void temperature_charge_state(int state);
|
void temperature_init(void);
|
||||||
#endif //_APP_TEMPERATURE_H_
|
|
||||||
|
void ble_receive_callback(u8* data,u16 len);
|
||||||
|
void ble_on_connect_change(u8 is_connect);
|
||||||
|
|
||||||
|
void temperature_work_led(u8 on);
|
||||||
|
void temperature_charge_led(u8 on);
|
||||||
|
void temperature_charge_state(int state);
|
||||||
|
void temperature_deinit(void);
|
||||||
|
#endif //_APP_TEMPERATURE_H_
|
||||||
|
@ -1,118 +1,119 @@
|
|||||||
#include "app_config.h"
|
#include "app_config.h"
|
||||||
#include "asm/charge.h"
|
#include "asm/charge.h"
|
||||||
#include "asm/pwm_led.h"
|
#include "asm/pwm_led.h"
|
||||||
#include "system/event.h"
|
#include "system/event.h"
|
||||||
#include "system/app_core.h"
|
#include "system/app_core.h"
|
||||||
#include "system/includes.h"
|
#include "system/includes.h"
|
||||||
#include "app_action.h"
|
#include "app_action.h"
|
||||||
#include "asm/wdt.h"
|
#include "asm/wdt.h"
|
||||||
#include "app_main.h"
|
#include "app_main.h"
|
||||||
#include "app_power_manage.h"
|
#include "app_power_manage.h"
|
||||||
#include "app_handshake.h"
|
#include "app_handshake.h"
|
||||||
#include "app_temperature.h"
|
#include "app_temperature.h"
|
||||||
#define LOG_TAG_CONST APP_CHARGE
|
#define LOG_TAG_CONST APP_CHARGE
|
||||||
#define LOG_TAG "[APP_CHARGE]"
|
#define LOG_TAG "[APP_CHARGE]"
|
||||||
#define LOG_ERROR_ENABLE
|
#define LOG_ERROR_ENABLE
|
||||||
#define LOG_DEBUG_ENABLE
|
#define LOG_DEBUG_ENABLE
|
||||||
#define LOG_INFO_ENABLE
|
#define LOG_INFO_ENABLE
|
||||||
/* #define LOG_DUMP_ENABLE */
|
/* #define LOG_DUMP_ENABLE */
|
||||||
#define LOG_CLI_ENABLE
|
#define LOG_CLI_ENABLE
|
||||||
#include "debug.h"
|
#include "debug.h"
|
||||||
|
|
||||||
#if TCFG_CHARGE_ENABLE
|
#if TCFG_CHARGE_ENABLE
|
||||||
|
|
||||||
#if TCFG_HANDSHAKE_ENABLE
|
#if TCFG_HANDSHAKE_ENABLE
|
||||||
static void handshake_complete(void)
|
static void handshake_complete(void)
|
||||||
{
|
{
|
||||||
handshake_app_stop();
|
handshake_app_stop();
|
||||||
if (get_lvcmp_det()) {
|
if (get_lvcmp_det()) {
|
||||||
charge_start();
|
charge_start();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
void charge_start_deal(void)
|
void charge_start_deal(void)
|
||||||
{
|
{
|
||||||
log_info("%s\n", __func__);
|
log_info("%s\n", __func__);
|
||||||
power_set_mode(PWR_LDO15);
|
power_set_mode(PWR_LDO15);
|
||||||
}
|
}
|
||||||
|
|
||||||
void ldo5v_keep_deal(void)
|
void ldo5v_keep_deal(void)
|
||||||
{
|
{
|
||||||
log_info("%s\n", __func__);
|
log_info("%s\n", __func__);
|
||||||
#if TCFG_HANDSHAKE_ENABLE
|
#if TCFG_HANDSHAKE_ENABLE
|
||||||
handshake_app_start(2, handshake_complete);
|
handshake_app_start(2, handshake_complete);
|
||||||
#endif
|
#endif
|
||||||
temperature_charge_state(BLE_TEMPERATURE_CHARGE_STATE_CHARGING);
|
temperature_charge_state(BLE_TEMPERATURE_CHARGE_STATE_CHARGING);
|
||||||
}
|
}
|
||||||
|
|
||||||
void charge_full_deal(void)
|
void charge_full_deal(void)
|
||||||
{
|
{
|
||||||
log_info("%s\n", __func__);
|
log_info("%s\n", __func__);
|
||||||
charge_close();
|
charge_close();
|
||||||
//power_set_soft_poweroff();
|
//power_set_soft_poweroff();
|
||||||
//extern spple_set_soft_poweroff();
|
//extern spple_set_soft_poweroff();
|
||||||
//spple_set_soft_poweroff();
|
//spple_set_soft_poweroff();
|
||||||
temperature_charge_state(BLE_TEMPERATURE_CHARGE_STATE_FULL);
|
temperature_charge_state(BLE_TEMPERATURE_CHARGE_STATE_FULL);
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void charge_close_deal(void)
|
void charge_close_deal(void)
|
||||||
{
|
{
|
||||||
log_info("%s\n", __FUNCTION__);
|
log_info("%s\n", __FUNCTION__);
|
||||||
}
|
}
|
||||||
|
|
||||||
void charge_ldo5v_in_deal(void)
|
void charge_ldo5v_in_deal(void)
|
||||||
{
|
{
|
||||||
log_info("%s\n", __FUNCTION__);
|
log_info("%s\n", __FUNCTION__);
|
||||||
#if TCFG_HANDSHAKE_ENABLE
|
#if TCFG_HANDSHAKE_ENABLE
|
||||||
handshake_app_start(2, handshake_complete);
|
handshake_app_start(2, handshake_complete);
|
||||||
#else
|
#else
|
||||||
charge_start();
|
charge_start();
|
||||||
#endif
|
#endif
|
||||||
temperature_charge_state(BLE_TEMPERATURE_CHARGE_STATE_CHARGING);
|
temperature_charge_state(BLE_TEMPERATURE_CHARGE_STATE_CHARGING);
|
||||||
}
|
}
|
||||||
|
|
||||||
void charge_ldo5v_off_deal(void)
|
void charge_ldo5v_off_deal(void)
|
||||||
{
|
{
|
||||||
log_info("%s\n", __FUNCTION__);
|
log_info("%s\n", __FUNCTION__);
|
||||||
#if TCFG_HANDSHAKE_ENABLE
|
#if TCFG_HANDSHAKE_ENABLE
|
||||||
handshake_app_stop();
|
handshake_app_stop();
|
||||||
#endif
|
#endif
|
||||||
charge_close();
|
charge_close();
|
||||||
power_set_mode(TCFG_LOWPOWER_POWER_SEL);
|
power_set_mode(TCFG_LOWPOWER_POWER_SEL);
|
||||||
#if TCFG_SYS_LVD_EN
|
#if TCFG_SYS_LVD_EN
|
||||||
vbat_check_init();
|
vbat_check_init();
|
||||||
#endif
|
#endif
|
||||||
temperature_charge_state(BLE_TEMPERATURE_CHARGE_STATE_IDLE);
|
temperature_charge_state(BLE_TEMPERATURE_CHARGE_STATE_IDLE);
|
||||||
}
|
}
|
||||||
|
|
||||||
int app_charge_event_handler(struct device_event *dev)
|
int app_charge_event_handler(struct device_event *dev)
|
||||||
{
|
{
|
||||||
switch (dev->event) {
|
log_info("%s\n %d", __FUNCTION__,dev->event);
|
||||||
case CHARGE_EVENT_CHARGE_START:
|
switch (dev->event) {
|
||||||
charge_start_deal();
|
case CHARGE_EVENT_CHARGE_START:
|
||||||
break;
|
charge_start_deal();
|
||||||
case CHARGE_EVENT_CHARGE_CLOSE:
|
break;
|
||||||
charge_close_deal();
|
case CHARGE_EVENT_CHARGE_CLOSE:
|
||||||
break;
|
charge_close_deal();
|
||||||
case CHARGE_EVENT_CHARGE_FULL:
|
break;
|
||||||
charge_full_deal();
|
case CHARGE_EVENT_CHARGE_FULL:
|
||||||
break;
|
charge_full_deal();
|
||||||
case CHARGE_EVENT_LDO5V_KEEP:
|
break;
|
||||||
ldo5v_keep_deal();
|
case CHARGE_EVENT_LDO5V_KEEP:
|
||||||
break;
|
ldo5v_keep_deal();
|
||||||
case CHARGE_EVENT_LDO5V_IN:
|
break;
|
||||||
charge_ldo5v_in_deal();
|
case CHARGE_EVENT_LDO5V_IN:
|
||||||
break;
|
charge_ldo5v_in_deal();
|
||||||
case CHARGE_EVENT_LDO5V_OFF:
|
break;
|
||||||
charge_ldo5v_off_deal();
|
case CHARGE_EVENT_LDO5V_OFF:
|
||||||
break;
|
charge_ldo5v_off_deal();
|
||||||
default:
|
break;
|
||||||
break;
|
default:
|
||||||
}
|
break;
|
||||||
return 0;
|
}
|
||||||
}
|
return 0;
|
||||||
|
}
|
||||||
#endif
|
|
||||||
|
#endif
|
||||||
|
|
||||||
|
@ -1,432 +1,434 @@
|
|||||||
#include "rtc_alarm.h"
|
#include "rtc_alarm.h"
|
||||||
#include "system/timer.h"
|
#include "system/timer.h"
|
||||||
#include "app_config.h"
|
#include "app_config.h"
|
||||||
#include "asm/rtc.h"
|
#include "asm/rtc.h"
|
||||||
|
|
||||||
#if TCFG_RTC_ALARM_ENABLE
|
#if TCFG_RTC_ALARM_ENABLE
|
||||||
|
|
||||||
#define ALARM_DEBUG_EN 1
|
#define ALARM_DEBUG_EN 1
|
||||||
|
|
||||||
#if ALARM_DEBUG_EN
|
#if ALARM_DEBUG_EN
|
||||||
#define alarm_printf(x, ...) printf("[RTC_ALARM]" x " ", ## __VA_ARGS__)
|
#define alarm_printf(x, ...) printf("[RTC_ALARM]" x " ", ## __VA_ARGS__)
|
||||||
#define alarm_printf_buf put_buf
|
#define alarm_printf_buf put_buf
|
||||||
#define alarm_putchar putchar
|
#define alarm_putchar putchar
|
||||||
#else
|
#else
|
||||||
#define alarm_printf(...)
|
#define alarm_printf(...)
|
||||||
#define alarm_printf_buf(...)
|
#define alarm_printf_buf(...)
|
||||||
#define alarm_putchar(...)
|
#define alarm_putchar(...)
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#define RTC_MASK (0xaa55)
|
#define RTC_MASK (0xaa55)
|
||||||
static T_ALARM alarm_tab[M_MAX_ALARM_NUMS];
|
static T_ALARM alarm_tab[M_MAX_ALARM_NUMS];
|
||||||
static T_ALARM_VM_MASK alarm_mask;
|
static T_ALARM_VM_MASK alarm_mask;
|
||||||
static u8 alarm_pnd_flag = 0;
|
static u8 alarm_pnd_flag = 0;
|
||||||
static void (*_user_isr_cbfun)(u8) = NULL;
|
static void (*_user_isr_cbfun)(u8) = NULL;
|
||||||
|
|
||||||
void alarm_send_event(u8 index);
|
void alarm_send_event(u8 index);
|
||||||
#if TCFG_RTC_ALARM_ENABLE
|
#if TCFG_RTC_ALARM_ENABLE
|
||||||
struct sys_time rtc_read_test;
|
struct sys_time rtc_read_test;
|
||||||
struct sys_time alm_read_test;
|
struct sys_time alm_read_test;
|
||||||
struct sys_time alm_write_test = {
|
struct sys_time alm_write_test = {
|
||||||
.year = 2024,
|
.year = 2024,
|
||||||
.month = 1,
|
.month = 1,
|
||||||
.day = 1,
|
.day = 1,
|
||||||
.hour = 0,
|
.hour = 0,
|
||||||
.min = 0,
|
.min = 0,
|
||||||
.sec = 20,
|
.sec = 20,
|
||||||
};
|
};
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
|
||||||
static u8 alarm_vm_write_mask(u8 alarm_active_index)
|
static u8 alarm_vm_write_mask(u8 alarm_active_index)
|
||||||
{
|
{
|
||||||
alarm_mask.head = RTC_MASK;
|
alarm_mask.head = RTC_MASK;
|
||||||
alarm_mask.alarm_active_index = alarm_active_index;
|
alarm_mask.alarm_active_index = alarm_active_index;
|
||||||
int ret = syscfg_write(VM_ALARM_MASK, (u8 *)&alarm_mask, sizeof(T_ALARM_VM_MASK));
|
int ret = syscfg_write(VM_ALARM_MASK, (u8 *)&alarm_mask, sizeof(T_ALARM_VM_MASK));
|
||||||
if (ret <= 0) {
|
if (ret <= 0) {
|
||||||
alarm_printf("alarm mask write vm err!\n");
|
alarm_printf("alarm mask write vm err!\n");
|
||||||
return 1;
|
return 1;
|
||||||
}
|
}
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
static u8 alarm_vm_read_mask(void)
|
static u8 alarm_vm_read_mask(void)
|
||||||
{
|
{
|
||||||
memset((u8 *)&alarm_mask, 0, sizeof(T_ALARM_VM_MASK));
|
memset((u8 *)&alarm_mask, 0, sizeof(T_ALARM_VM_MASK));
|
||||||
int ret = syscfg_read(VM_ALARM_MASK, (u8 *)&alarm_mask, sizeof(T_ALARM_VM_MASK));
|
int ret = syscfg_read(VM_ALARM_MASK, (u8 *)&alarm_mask, sizeof(T_ALARM_VM_MASK));
|
||||||
if ((ret <= 0) || (alarm_mask.head != RTC_MASK)) { //第一次读的时候
|
if ((ret <= 0) || (alarm_mask.head != RTC_MASK)) { //第一次读的时候
|
||||||
alarm_printf("alarm mask read vm err!\n");
|
alarm_printf("alarm mask read vm err!\n");
|
||||||
return 1;
|
return 1;
|
||||||
}
|
}
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
static u8 alarm_vm_write_time_tab(T_ALARM_VM *pAlarm_tab, u8 index)
|
static u8 alarm_vm_write_time_tab(T_ALARM_VM *pAlarm_tab, u8 index)
|
||||||
{
|
{
|
||||||
int ret;
|
int ret;
|
||||||
T_ALARM_VM tmp = {0};
|
T_ALARM_VM tmp = {0};
|
||||||
tmp.head = RTC_MASK;
|
tmp.head = RTC_MASK;
|
||||||
memcpy((u8 *)&tmp.alarm, (u8 *)pAlarm_tab, sizeof(T_ALARM));
|
memcpy((u8 *)&tmp.alarm, (u8 *)pAlarm_tab, sizeof(T_ALARM));
|
||||||
ret = syscfg_write(VM_ALARM_0 + index, (u8 *)&tmp, sizeof(T_ALARM_VM));
|
ret = syscfg_write(VM_ALARM_0 + index, (u8 *)&tmp, sizeof(T_ALARM_VM));
|
||||||
if (ret <= 0) {
|
if (ret <= 0) {
|
||||||
alarm_printf("alarm write vm err!\n");
|
alarm_printf("alarm write vm err!\n");
|
||||||
return 1;
|
return 1;
|
||||||
}
|
}
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
static u8 alarm_vm_read_time_tab(T_ALARM_VM *pAlarm_tab, u8 index)
|
static u8 alarm_vm_read_time_tab(T_ALARM_VM *pAlarm_tab, u8 index)
|
||||||
{
|
{
|
||||||
T_ALARM_VM tmp = {0};
|
T_ALARM_VM tmp = {0};
|
||||||
int ret = syscfg_read(VM_ALARM_0 + index, (u8 *)&tmp, sizeof(T_ALARM_VM));
|
int ret = syscfg_read(VM_ALARM_0 + index, (u8 *)&tmp, sizeof(T_ALARM_VM));
|
||||||
if ((ret <= 0) || (tmp.head != RTC_MASK)) {
|
if ((ret <= 0) || (tmp.head != RTC_MASK)) {
|
||||||
alarm_printf("alarm read vm err!\n");
|
alarm_printf("alarm read vm err!\n");
|
||||||
return 1;
|
return 1;
|
||||||
}
|
}
|
||||||
memcpy((u8 *)pAlarm_tab, (u8 *)&tmp.alarm, sizeof(T_ALARM));
|
memcpy((u8 *)pAlarm_tab, (u8 *)&tmp.alarm, sizeof(T_ALARM));
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
static void alarm_calculate_next_few_time(struct sys_time *time, u16 days)
|
static void alarm_calculate_next_few_time(struct sys_time *time, u16 days)
|
||||||
{
|
{
|
||||||
if (!days) {
|
if (!days) {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
u16 tmp_day = ymd_to_day(time);
|
u16 tmp_day = ymd_to_day(time);
|
||||||
tmp_day += days;
|
tmp_day += days;
|
||||||
day_to_ymd(tmp_day, time);
|
day_to_ymd(tmp_day, time);
|
||||||
}
|
}
|
||||||
|
|
||||||
static void alarm_calculate_time_by_week_mode(struct sys_time *pTime, u8 mode)
|
static void alarm_calculate_time_by_week_mode(struct sys_time *pTime, u8 mode)
|
||||||
{
|
{
|
||||||
if (0 == mode) {
|
if (0 == mode) {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
if ((BIT(0)) == mode) {
|
if ((BIT(0)) == mode) {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
u16 tmp_mode = ((mode & 0xfe) << 7) | mode ;
|
u16 tmp_mode = ((mode & 0xfe) << 7) | mode ;
|
||||||
u8 alarm_week = caculate_weekday_by_time(pTime); //获取闹钟是周几,1~7
|
u8 alarm_week = caculate_weekday_by_time(pTime); //获取闹钟是周几,1~7
|
||||||
u8 i;
|
u8 i;
|
||||||
for (i = 1; i < 15; i++) {
|
for (i = 1; i < 15; i++) {
|
||||||
if (tmp_mode & BIT(i)) {
|
if (tmp_mode & BIT(i)) {
|
||||||
if (i >= alarm_week) {
|
if (i >= alarm_week) {
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
alarm_calculate_next_few_time(pTime, i - alarm_week);
|
alarm_calculate_next_few_time(pTime, i - alarm_week);
|
||||||
}
|
}
|
||||||
static u8 alarm_update_a_time_tab(struct sys_time *cTime, T_ALARM *pAlarm_tab, u32 *diff)
|
static u8 alarm_update_a_time_tab(struct sys_time *cTime, T_ALARM *pAlarm_tab, u32 *diff)
|
||||||
{
|
{
|
||||||
struct sys_time *pTime = &(pAlarm_tab->time);
|
struct sys_time *pTime = &(pAlarm_tab->time);
|
||||||
u32 c_tmp = (ymd_to_day(cTime) << 17) | ((cTime->hour & 0x1f) << 12) | ((cTime->min & 0x3f) << 6) | (cTime->sec & 0x3f);
|
u32 c_tmp = (ymd_to_day(cTime) << 17) | ((cTime->hour & 0x1f) << 12) | ((cTime->min & 0x3f) << 6) | (cTime->sec & 0x3f);
|
||||||
u32 p_tmp = (ymd_to_day(pTime) << 17) | ((pTime->hour & 0x1f) << 12) | ((pTime->min & 0x3f) << 6) | (pTime->sec & 0x3f);
|
u32 p_tmp = (ymd_to_day(pTime) << 17) | ((pTime->hour & 0x1f) << 12) | ((pTime->min & 0x3f) << 6) | (pTime->sec & 0x3f);
|
||||||
if (c_tmp >= p_tmp) {
|
if (c_tmp >= p_tmp) {
|
||||||
pTime->year = cTime->year;
|
pTime->year = cTime->year;
|
||||||
pTime->month = cTime->month;
|
pTime->month = cTime->month;
|
||||||
pTime->day = cTime->day;
|
pTime->day = cTime->day;
|
||||||
alarm_calculate_next_few_time(pTime, 1);
|
alarm_calculate_next_few_time(pTime, 1);
|
||||||
alarm_calculate_time_by_week_mode(pTime, pAlarm_tab->mode);
|
alarm_calculate_time_by_week_mode(pTime, pAlarm_tab->mode);
|
||||||
p_tmp = (ymd_to_day(pTime) << 17) | ((pTime->hour & 0x1f) << 12) | ((pTime->min & 0x3f) << 6) | (pTime->sec & 0x3f);
|
p_tmp = (ymd_to_day(pTime) << 17) | ((pTime->hour & 0x1f) << 12) | ((pTime->min & 0x3f) << 6) | (pTime->sec & 0x3f);
|
||||||
*diff = p_tmp - c_tmp;
|
*diff = p_tmp - c_tmp;
|
||||||
return 1;
|
return 1;
|
||||||
} else if (pAlarm_tab->mode & 0xfe) {
|
} else if (pAlarm_tab->mode & 0xfe) {
|
||||||
alarm_calculate_time_by_week_mode(pTime, pAlarm_tab->mode);
|
alarm_calculate_time_by_week_mode(pTime, pAlarm_tab->mode);
|
||||||
p_tmp = (ymd_to_day(pTime) << 17) | ((pTime->hour & 0x1f) << 12) | ((pTime->min & 0x3f) << 6) | (pTime->sec & 0x3f);
|
p_tmp = (ymd_to_day(pTime) << 17) | ((pTime->hour & 0x1f) << 12) | ((pTime->min & 0x3f) << 6) | (pTime->sec & 0x3f);
|
||||||
*diff = p_tmp - c_tmp;
|
*diff = p_tmp - c_tmp;
|
||||||
return 1;
|
return 1;
|
||||||
}
|
}
|
||||||
*diff = p_tmp - c_tmp;
|
*diff = p_tmp - c_tmp;
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
static u8 alarm_update_all_time(void)
|
static u8 alarm_update_all_time(void)
|
||||||
{
|
{
|
||||||
u8 err = 0;
|
u8 err = 0;
|
||||||
u32 diff = 0;
|
u32 diff = 0;
|
||||||
u32 diff_min = -1;
|
u32 diff_min = -1;
|
||||||
u8 closest = -1;
|
u8 closest = -1;
|
||||||
|
|
||||||
struct sys_time current_time = {0};
|
struct sys_time current_time = {0};
|
||||||
rtc_ioctl(IOCTL_GET_SYS_TIME, (u32)¤t_time);
|
rtc_ioctl(IOCTL_GET_SYS_TIME, (u32)¤t_time);
|
||||||
for (u8 i = 0; i < M_MAX_ALARM_NUMS; i ++) {
|
for (u8 i = 0; i < M_MAX_ALARM_NUMS; i ++) {
|
||||||
if (alarm_tab[i].en) {
|
if (alarm_tab[i].en) {
|
||||||
err = alarm_update_a_time_tab(¤t_time, &alarm_tab[i], (u32 *)&diff);
|
err = alarm_update_a_time_tab(¤t_time, &alarm_tab[i], (u32 *)&diff);
|
||||||
if (err) { //时间有更新
|
if (err) { //时间有更新
|
||||||
err = alarm_vm_write_time_tab(&alarm_tab[i], i);
|
err = alarm_vm_write_time_tab(&alarm_tab[i], i);
|
||||||
if (err) {
|
if (err) {
|
||||||
return 1;
|
return 1;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
if (diff < diff_min) {
|
if (diff < diff_min) {
|
||||||
diff_min = diff;
|
diff_min = diff;
|
||||||
closest = i;
|
closest = i;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
if (closest > M_MAX_ALARM_NUMS) {
|
if (closest > M_MAX_ALARM_NUMS) {
|
||||||
set_alarm_ctrl(0);
|
set_alarm_ctrl(0);
|
||||||
}
|
}
|
||||||
|
|
||||||
if ((alarm_tab[closest].en)) { //最接近闹钟号跟记录的不一样,则要重设硬件寄存器,更新记录
|
if ((alarm_tab[closest].en)) { //最接近闹钟号跟记录的不一样,则要重设硬件寄存器,更新记录
|
||||||
rtc_ioctl(IOCTL_SET_ALARM, (u32)&alarm_tab[closest].time);
|
rtc_ioctl(IOCTL_SET_ALARM, (u32)&alarm_tab[closest].time);
|
||||||
if (closest != alarm_mask.alarm_active_index) { //最接近闹钟号跟记录不一样,更新VM
|
if (closest != alarm_mask.alarm_active_index) { //最接近闹钟号跟记录不一样,更新VM
|
||||||
err = alarm_vm_write_mask(closest);
|
err = alarm_vm_write_mask(closest);
|
||||||
if (err) {
|
if (err) {
|
||||||
return 1;
|
return 1;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
void alarm_init(const struct rtc_dev_platform_data *arg)
|
void alarm_init(const struct rtc_dev_platform_data *arg)
|
||||||
{
|
{
|
||||||
rtc_init(arg);
|
rtc_init(arg);
|
||||||
_user_isr_cbfun = arg->cbfun;
|
_user_isr_cbfun = arg->cbfun;
|
||||||
|
|
||||||
u8 err = alarm_vm_read_mask();
|
u8 err = alarm_vm_read_mask();
|
||||||
if (err) {
|
if (err) {
|
||||||
err = alarm_vm_write_mask(0xff);
|
err = alarm_vm_write_mask(0xff);
|
||||||
if (err) {
|
if (err) {
|
||||||
alarm_printf("init : alarm mask read & write vm err!\n");
|
alarm_printf("init : alarm mask read & write vm err!\n");
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
for (u8 i = 0; i < M_MAX_ALARM_NUMS; i ++) {
|
for (u8 i = 0; i < M_MAX_ALARM_NUMS; i ++) {
|
||||||
memset(&(alarm_tab[i]), 0, sizeof(T_ALARM));
|
memset(&(alarm_tab[i]), 0, sizeof(T_ALARM));
|
||||||
alarm_vm_read_time_tab(&(alarm_tab[i]), i); //读出数组
|
alarm_vm_read_time_tab(&(alarm_tab[i]), i); //读出数组
|
||||||
}
|
}
|
||||||
if (alarm_pnd_flag) { //防止初始化前,就已经起闹钟中断了
|
if (alarm_pnd_flag) { //防止初始化前,就已经起闹钟中断了
|
||||||
alarm_send_event(alarm_mask.alarm_active_index);
|
alarm_send_event(alarm_mask.alarm_active_index);
|
||||||
} else {
|
} else {
|
||||||
err = alarm_update_all_time(); //更新数组
|
err = alarm_update_all_time(); //更新数组
|
||||||
if (err) {
|
if (err) {
|
||||||
alarm_printf("init : update alarm write vm err!\n");
|
alarm_printf("init : update alarm write vm err!\n");
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
alarm_pnd_flag = 1;
|
alarm_pnd_flag = 1;
|
||||||
|
|
||||||
rtc_ioctl(IOCTL_GET_SYS_TIME, &rtc_read_test); //读时钟
|
rtc_ioctl(IOCTL_GET_SYS_TIME, &rtc_read_test); //读时钟
|
||||||
alarm_printf("rtc_read_sys_time: %d-%d-%d %d:%d:%d\n",
|
alarm_printf("rtc_read_sys_time: %d-%d-%d %d:%d:%d\n",
|
||||||
rtc_read_test.year,
|
rtc_read_test.year,
|
||||||
rtc_read_test.month,
|
rtc_read_test.month,
|
||||||
rtc_read_test.day,
|
rtc_read_test.day,
|
||||||
rtc_read_test.hour,
|
rtc_read_test.hour,
|
||||||
rtc_read_test.min,
|
rtc_read_test.min,
|
||||||
rtc_read_test.sec);
|
rtc_read_test.sec);
|
||||||
|
|
||||||
rtc_ioctl(IOCTL_GET_ALARM, &alm_read_test); //读闹钟
|
rtc_ioctl(IOCTL_GET_ALARM, &alm_read_test); //读闹钟
|
||||||
alarm_printf("rtc_read_alarm: %d-%d-%d %d:%d:%d\n",
|
alarm_printf("rtc_read_alarm: %d-%d-%d %d:%d:%d\n",
|
||||||
alm_read_test.year,
|
alm_read_test.year,
|
||||||
alm_read_test.month,
|
alm_read_test.month,
|
||||||
alm_read_test.day,
|
alm_read_test.day,
|
||||||
alm_read_test.hour,
|
alm_read_test.hour,
|
||||||
alm_read_test.min,
|
alm_read_test.min,
|
||||||
alm_read_test.sec);
|
alm_read_test.sec);
|
||||||
}
|
}
|
||||||
|
|
||||||
void alarm_rtc_stop(void)
|
void alarm_rtc_stop(void)
|
||||||
{
|
{
|
||||||
set_alarm_ctrl(0);
|
set_alarm_ctrl(0);
|
||||||
}
|
}
|
||||||
|
|
||||||
void alarm_rtc_start(void)
|
void alarm_rtc_start(void)
|
||||||
{
|
{
|
||||||
set_alarm_ctrl(1);
|
set_alarm_ctrl(1);
|
||||||
}
|
}
|
||||||
|
|
||||||
u8 alarm_get_active_index(void)
|
u8 alarm_get_active_index(void)
|
||||||
{
|
{
|
||||||
return alarm_mask.alarm_active_index;
|
return alarm_mask.alarm_active_index;
|
||||||
}
|
}
|
||||||
|
|
||||||
u8 alarm_get_en_info(void)
|
u8 alarm_get_en_info(void)
|
||||||
{
|
{
|
||||||
u8 en = 0;
|
u8 en = 0;
|
||||||
for (u8 i = 0; i < M_MAX_ALARM_NUMS; i ++) {
|
for (u8 i = 0; i < M_MAX_ALARM_NUMS; i ++) {
|
||||||
en |= BIT(!!(alarm_tab[i].en));
|
en |= BIT(!!(alarm_tab[i].en));
|
||||||
}
|
}
|
||||||
return en;
|
return en;
|
||||||
}
|
}
|
||||||
|
|
||||||
void alarm_get_time_info(T_ALARM *p, u8 index)
|
void alarm_get_time_info(T_ALARM *p, u8 index)
|
||||||
{
|
{
|
||||||
memcpy((u8 *)p, (u8 *)&alarm_tab[index], sizeof(T_ALARM));
|
memcpy((u8 *)p, (u8 *)&alarm_tab[index], sizeof(T_ALARM));
|
||||||
}
|
}
|
||||||
|
|
||||||
u8 alarm_add(T_ALARM *p, u8 index)
|
u8 alarm_add(T_ALARM *p, u8 index)
|
||||||
{
|
{
|
||||||
if (index > M_MAX_ALARM_INDEX) {
|
if (index > M_MAX_ALARM_INDEX) {
|
||||||
return 1;
|
return 1;
|
||||||
}
|
}
|
||||||
if (p->mode > M_MAX_ALARM_MODE) {
|
if (p->mode > M_MAX_ALARM_MODE) {
|
||||||
return 1;
|
return 1;
|
||||||
}
|
}
|
||||||
memcpy((u8 *)&alarm_tab[index], (u8 *)p, sizeof(T_ALARM));
|
memcpy((u8 *)&alarm_tab[index], (u8 *)p, sizeof(T_ALARM));
|
||||||
u8 err = alarm_vm_write_time_tab(&alarm_tab[index], index);
|
u8 err = alarm_vm_write_time_tab(&alarm_tab[index], index);
|
||||||
if (err) {
|
if (err) {
|
||||||
return 1;
|
return 1;
|
||||||
}
|
}
|
||||||
err = alarm_update_all_time(); //更新数组
|
err = alarm_update_all_time(); //更新数组
|
||||||
if (err) {
|
if (err) {
|
||||||
return 1;
|
return 1;
|
||||||
}
|
}
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
u8 alarm_en(u8 index, u8 en)
|
u8 alarm_en(u8 index, u8 en)
|
||||||
{
|
{
|
||||||
if (index > M_MAX_ALARM_INDEX) {
|
if (index > M_MAX_ALARM_INDEX) {
|
||||||
return 1;
|
return 1;
|
||||||
}
|
}
|
||||||
if ((!!en) == alarm_tab[index].en) {
|
if ((!!en) == alarm_tab[index].en) {
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
alarm_tab[index].en = !!en;
|
alarm_tab[index].en = !!en;
|
||||||
u8 err = alarm_vm_write_time_tab(&alarm_tab[index], index);
|
u8 err = alarm_vm_write_time_tab(&alarm_tab[index], index);
|
||||||
if (err) {
|
if (err) {
|
||||||
return 1;
|
return 1;
|
||||||
}
|
}
|
||||||
err = alarm_update_all_time(); //更新数组
|
err = alarm_update_all_time(); //更新数组
|
||||||
if (err) {
|
if (err) {
|
||||||
return 1;
|
return 1;
|
||||||
}
|
}
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
//设备事件响应demo
|
//设备事件响应demo
|
||||||
static void alarm_event_handler(struct sys_event *e)
|
static void alarm_event_handler(struct sys_event *e)
|
||||||
{
|
{
|
||||||
u8 index;
|
u8 index;
|
||||||
u8 err;
|
u8 err;
|
||||||
if ((u32)e->arg == DEVICE_EVENT_FROM_ALM) {
|
if ((u32)e->arg == DEVICE_EVENT_FROM_ALM) {
|
||||||
if (e->u.dev.event == DEVICE_EVENT_IN) {
|
if (e->u.dev.event == DEVICE_EVENT_IN) {
|
||||||
index = (u8)(e->u.dev.value);
|
index = (u8)(e->u.dev.value);
|
||||||
if (alarm_tab[index].mode == E_ALARM_MODE_ONCE) {
|
if (alarm_tab[index].mode == E_ALARM_MODE_ONCE) {
|
||||||
err = alarm_en(index, 0);
|
err = alarm_en(index, 0);
|
||||||
} else {
|
} else {
|
||||||
err = alarm_update_all_time(); //更新数组
|
err = alarm_update_all_time(); //更新数组
|
||||||
}
|
}
|
||||||
if (err) {
|
if (err) {
|
||||||
alarm_printf("isr : update alarm %d err!\n", index);
|
alarm_printf("isr : update alarm %d err!\n", index);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
if (_user_isr_cbfun) {
|
if (_user_isr_cbfun) {
|
||||||
_user_isr_cbfun(index);
|
_user_isr_cbfun(index);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
SYS_EVENT_HANDLER(SYS_DEVICE_EVENT, alarm_event_handler, 0);
|
SYS_EVENT_HANDLER(SYS_DEVICE_EVENT, alarm_event_handler, 0);
|
||||||
|
|
||||||
void alarm_send_event(u8 index)
|
void alarm_send_event(u8 index)
|
||||||
{
|
{
|
||||||
struct sys_event e;
|
printf("**** rtc alarm_send_event ****\n");
|
||||||
e.type = SYS_DEVICE_EVENT;
|
struct sys_event e;
|
||||||
e.arg = (void *)DEVICE_EVENT_FROM_ALM;
|
e.type = SYS_DEVICE_EVENT;
|
||||||
e.u.dev.event = DEVICE_EVENT_IN;
|
e.arg = (void *)DEVICE_EVENT_FROM_ALM;
|
||||||
e.u.dev.value = index;
|
e.u.dev.event = DEVICE_EVENT_IN;
|
||||||
sys_event_notify(&e);
|
e.u.dev.value = index;
|
||||||
}
|
sys_event_notify(&e);
|
||||||
|
}
|
||||||
void alm_wakeup_isr(void)
|
|
||||||
{
|
void alm_wakeup_isr(void)
|
||||||
if (alarm_pnd_flag) {
|
{
|
||||||
alarm_send_event(alarm_mask.alarm_active_index);
|
printf("**** rtc alm_wakeup_isr ****\n");
|
||||||
} else {
|
if (alarm_pnd_flag) {
|
||||||
alarm_pnd_flag = 1;
|
alarm_send_event(alarm_mask.alarm_active_index);
|
||||||
}
|
} else {
|
||||||
}
|
alarm_pnd_flag = 1;
|
||||||
|
}
|
||||||
|
}
|
||||||
void __attribute__((weak)) alarm_isr_user_cbfun(u8 index)
|
|
||||||
{
|
|
||||||
printf("**** alarm %d : hello world ****\n", index);
|
void __attribute__((weak)) alarm_isr_user_cbfun(u8 index)
|
||||||
}
|
{
|
||||||
|
printf("**** alarm %d : hello world ****\n", index);
|
||||||
//参考的测试代码
|
}
|
||||||
void user_alarm_test(void)
|
|
||||||
{
|
//参考的测试代码
|
||||||
T_ALARM tmp_alarm = {0};
|
void user_alarm_test(void)
|
||||||
rtc_ioctl(IOCTL_GET_SYS_TIME, (u32)&tmp_alarm.time);
|
{
|
||||||
tmp_alarm.en = 1; //初始化默认打开
|
T_ALARM tmp_alarm = {0};
|
||||||
#if 1
|
rtc_ioctl(IOCTL_GET_SYS_TIME, (u32)&tmp_alarm.time);
|
||||||
tmp_alarm.mode = E_ALARM_MODE_ONCE; //此闹钟只起作用一次
|
tmp_alarm.en = 1; //初始化默认打开
|
||||||
tmp_alarm.time.hour = 0;
|
#if 1
|
||||||
tmp_alarm.time.min = 1;
|
tmp_alarm.mode = E_ALARM_MODE_ONCE; //此闹钟只起作用一次
|
||||||
alarm_add(&tmp_alarm, 0);
|
tmp_alarm.time.hour = 0;
|
||||||
#endif
|
tmp_alarm.time.min = 1;
|
||||||
|
alarm_add(&tmp_alarm, 0);
|
||||||
#if 1
|
#endif
|
||||||
tmp_alarm.mode = E_ALARM_MODE_EVERY_DAY; //此闹钟每天都起作用
|
|
||||||
tmp_alarm.time.hour = 0;
|
#if 1
|
||||||
tmp_alarm.time.min = 2;
|
tmp_alarm.mode = E_ALARM_MODE_EVERY_DAY; //此闹钟每天都起作用
|
||||||
alarm_add(&tmp_alarm, 1);
|
tmp_alarm.time.hour = 0;
|
||||||
#endif
|
tmp_alarm.time.min = 2;
|
||||||
|
alarm_add(&tmp_alarm, 1);
|
||||||
#if 1
|
#endif
|
||||||
tmp_alarm.mode = E_ALARM_MODE_EVERY_MONDAY | E_ALARM_MODE_EVERY_WEDNESDAY | E_ALARM_MODE_EVERY_SATURDAY; //此闹钟周1周3周6起作用
|
|
||||||
tmp_alarm.time.hour = 0;
|
#if 1
|
||||||
tmp_alarm.time.min = 3;
|
tmp_alarm.mode = E_ALARM_MODE_EVERY_MONDAY | E_ALARM_MODE_EVERY_WEDNESDAY | E_ALARM_MODE_EVERY_SATURDAY; //此闹钟周1周3周6起作用
|
||||||
alarm_add(&tmp_alarm, 2);
|
tmp_alarm.time.hour = 0;
|
||||||
#endif
|
tmp_alarm.time.min = 3;
|
||||||
|
alarm_add(&tmp_alarm, 2);
|
||||||
}
|
#endif
|
||||||
|
|
||||||
#if TCFG_RTC_ALARM_ENABLE
|
}
|
||||||
//24小时内定时起来
|
|
||||||
void rtc_alarm_set_timer(u32 seconds)
|
#if TCFG_RTC_ALARM_ENABLE
|
||||||
{
|
//24小时内定时起来
|
||||||
alarm_printf("rtc_alarm_set_timer");
|
void rtc_alarm_set_timer(u32 seconds)
|
||||||
|
{
|
||||||
u8 add_hour = seconds / 3600;
|
alarm_printf("rtc_alarm_set_timer");
|
||||||
u8 add_min = (seconds % 3600) / 60;
|
|
||||||
u8 add_sec = seconds % 60;
|
u8 add_hour = seconds / 3600;
|
||||||
|
u8 add_min = (seconds % 3600) / 60;
|
||||||
rtc_ioctl(IOCTL_GET_SYS_TIME, &rtc_read_test); //读时钟
|
u8 add_sec = seconds % 60;
|
||||||
alarm_printf("rtc_read_sys_time: %d-%d-%d %d:%d:%d\n",
|
|
||||||
rtc_read_test.year,
|
rtc_ioctl(IOCTL_GET_SYS_TIME, &rtc_read_test); //读时钟
|
||||||
rtc_read_test.month,
|
alarm_printf("rtc_read_sys_time: %d-%d-%d %d:%d:%d\n",
|
||||||
rtc_read_test.day,
|
rtc_read_test.year,
|
||||||
rtc_read_test.hour,
|
rtc_read_test.month,
|
||||||
rtc_read_test.min,
|
rtc_read_test.day,
|
||||||
rtc_read_test.sec);
|
rtc_read_test.hour,
|
||||||
rtc_ioctl(IOCTL_GET_ALARM, &alm_read_test); //读闹钟
|
rtc_read_test.min,
|
||||||
|
rtc_read_test.sec);
|
||||||
u16 tmp = rtc_read_test.sec + add_sec;
|
rtc_ioctl(IOCTL_GET_ALARM, &alm_read_test); //读闹钟
|
||||||
rtc_read_test.sec = tmp % 60;
|
|
||||||
|
u16 tmp = rtc_read_test.sec + add_sec;
|
||||||
tmp = rtc_read_test.min + add_min + tmp / 60;
|
rtc_read_test.sec = tmp % 60;
|
||||||
rtc_read_test.min = tmp % 60;
|
|
||||||
|
tmp = rtc_read_test.min + add_min + tmp / 60;
|
||||||
tmp = rtc_read_test.hour + add_hour + tmp / 60;
|
rtc_read_test.min = tmp % 60;
|
||||||
rtc_read_test.hour = tmp % 24;
|
|
||||||
|
tmp = rtc_read_test.hour + add_hour + tmp / 60;
|
||||||
rtc_read_test.day += (tmp / 24);
|
rtc_read_test.hour = tmp % 24;
|
||||||
|
|
||||||
T_ALARM tmp_alarm = {0};
|
rtc_read_test.day += (tmp / 24);
|
||||||
tmp_alarm.en = 1; //初始化默认打开
|
|
||||||
tmp_alarm.mode = E_ALARM_MODE_ONCE; //此闹钟只起作用一次
|
T_ALARM tmp_alarm = {0};
|
||||||
|
tmp_alarm.en = 1; //初始化默认打开
|
||||||
memcpy(&tmp_alarm.time, &rtc_read_test, sizeof(struct sys_time));
|
tmp_alarm.mode = E_ALARM_MODE_ONCE; //此闹钟只起作用一次
|
||||||
alarm_add(&tmp_alarm, 0);
|
|
||||||
memset(&rtc_read_test, 0, sizeof(struct sys_time));
|
memcpy(&tmp_alarm.time, &rtc_read_test, sizeof(struct sys_time));
|
||||||
rtc_ioctl(IOCTL_GET_ALARM, &alm_read_test); //读闹钟,校验是否写成功
|
alarm_add(&tmp_alarm, 0);
|
||||||
alarm_printf("rtc_read_alarm: %d-%d-%d %d:%d:%d\n",
|
memset(&rtc_read_test, 0, sizeof(struct sys_time));
|
||||||
alm_read_test.year,
|
rtc_ioctl(IOCTL_GET_ALARM, &alm_read_test); //读闹钟,校验是否写成功
|
||||||
alm_read_test.month,
|
alarm_printf("rtc_read_alarm: %d-%d-%d %d:%d:%d\n",
|
||||||
alm_read_test.day,
|
alm_read_test.year,
|
||||||
alm_read_test.hour,
|
alm_read_test.month,
|
||||||
alm_read_test.min,
|
alm_read_test.day,
|
||||||
alm_read_test.sec);
|
alm_read_test.hour,
|
||||||
}
|
alm_read_test.min,
|
||||||
|
alm_read_test.sec);
|
||||||
|
}
|
||||||
#endif
|
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
#endif
|
||||||
|
|
||||||
|
Loading…
x
Reference in New Issue
Block a user