You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
283 lines
6.4 KiB
283 lines
6.4 KiB
#include "../app/task_appstatus.h"
|
|
#include "../bsp/bsp_led.h"
|
|
#include "../bsp/bsp_key.h"
|
|
#include "../bsp/bsp_WT2605B.h"
|
|
#include "../app/app_config.h"
|
|
#include "../bsp/bsp_config.h"
|
|
#include "../msp/uart0.h"
|
|
#include "../bsp/bsp_led.h"
|
|
#include "../app/task_game.h"
|
|
#include "../app/task_Adc.h"
|
|
#include "../app/task_w600.h"
|
|
#include "../bsp/bsp_wifi.h"
|
|
|
|
// // 外部中断初始化P3.2
|
|
// void INT0_Init(void)
|
|
// {
|
|
// D_stdIO_P3(BITN2);
|
|
// IT0 = 1; // 下降沿触发
|
|
// EX0 = 1; // 使能INT0
|
|
// }
|
|
|
|
|
|
// // 进入掉电模式函数
|
|
// void Enter_PowerDown(void)
|
|
// {
|
|
// // 配置INT0到P0.2引脚
|
|
// AUXR1 |= 0x03; // INT0_S[1:0]=11 (选择P0.2)
|
|
|
|
// // 设置下降沿触发
|
|
// IT0 = 1; // TCON.0=1 (下降沿触发)
|
|
// EX0 = 1; // 使能INT0中断
|
|
|
|
// // 禁用其他唤醒源
|
|
// INTEN0 = 0x01; // 仅使能EX0,禁用其他外部中断
|
|
// INTEN1 = 0x00; // 禁用扩展外部中断
|
|
// WAKE_CLKO = 0x04; // 仅使能INT0唤醒
|
|
|
|
// // 清除中断标志
|
|
// IE0 = 0;
|
|
|
|
// // 进入掉电模式
|
|
// PCON |= 0x02; // 执行PD指令
|
|
// _nop_(); // 必要的延时
|
|
// _nop_();
|
|
// _nop_();
|
|
// _nop_();
|
|
// }
|
|
|
|
|
|
// // 掉电模式函数
|
|
void Enter_PowerDown(void)
|
|
{
|
|
// 1. 配置P0.2为高阻输入模式(唤醒引脚)
|
|
P0M1 |= (1 << 2); // 设置P0.2为高阻输入
|
|
P0M0 &= ~(1 << 2);
|
|
|
|
// 2.端口中断掉电唤醒使能控制位
|
|
// P0WKUE = 0x00; // 使能P0.2唤醒功能
|
|
// P1WKUE = 0x00;
|
|
// P2WKUE = 0x00;
|
|
// P3WKUE = 0x00;
|
|
// P4WKUE = 0x00;
|
|
// P5WKUE = 0x00;
|
|
// P6WKUE = 0x00;
|
|
// P7WKUE = 0x00;
|
|
// P0IE = 0x00;
|
|
// P1IE = 0x00;
|
|
// P2IE = 0x00;
|
|
// P3IE = 0x00;
|
|
// P4IE = 0x00;
|
|
// P5IE = 0x00;
|
|
// P6IE = 0x00;
|
|
// P7IE = 0x00;
|
|
P0INTE = 0x00;
|
|
P1INTE = 0x00;
|
|
P2INTE = 0x00;
|
|
P3INTE = 0x00;
|
|
P4INTE = 0x00;
|
|
P5INTE = 0x00;
|
|
P6INTE = 0x00;
|
|
P7INTE = 0x00;
|
|
|
|
|
|
// 3. 设置唤醒触发条件(下降沿触发)
|
|
P0IM0 = 0;
|
|
P0IM1 = 0;
|
|
|
|
// 4. 清除所有唤醒标志
|
|
P0INTF = 0x00;
|
|
P1INTF = 0x00;
|
|
P2INTF = 0x00;
|
|
P3INTF = 0x00;
|
|
P4INTF = 0x00;
|
|
P5INTF = 0x00;
|
|
P6INTF = 0x00;
|
|
P7INTF = 0x00;
|
|
|
|
// // 5. 禁用其他唤醒源
|
|
// WAKE_CLKO = 0x00; // 禁用所有中断唤醒
|
|
// WKTCLK = 0x00; // 禁用内部定时器唤醒
|
|
// WKCON = 0x00; // 清除唤醒配置
|
|
|
|
// 5. 进入掉电模式
|
|
PCON |= 0x02; // 执行PD指令
|
|
_nop_();
|
|
_nop_();
|
|
// _nop_();
|
|
// _nop_();
|
|
|
|
}
|
|
|
|
|
|
S_TASK_APPSTATUS _s_task_appstatus;
|
|
|
|
void L3_task_AppStatus_init(void)
|
|
{
|
|
L1_task_init(&_s_task_appstatus.task);
|
|
_s_task_appstatus.status = R.app_status;
|
|
L3_task_s_go(_s_task_appstatus,D_task_init);
|
|
}
|
|
|
|
#define D_task_DETECTCHANGE 0x50
|
|
#define D_task_HANDLECHANGE 0x51
|
|
#define D_task_WIFICONFIG_STATUS01 0x52
|
|
#define D_task_WIFICONFIG_STATUS02 0x53
|
|
#define D_task_WIFICONN_STATUS01 0x54
|
|
#define D_task_WIFICONN_STATUS02 0x55
|
|
|
|
|
|
void L3_task_appstatus_handler(S_TASK_APPSTATUS *s)
|
|
{
|
|
TTSS_Task_init()
|
|
L2_task_go(D_task_DETECTCHANGE);
|
|
|
|
TTSS_Task_step(D_task_DETECTCHANGE)
|
|
if (R.app_status != POW_OFF)
|
|
{
|
|
//低功耗模式判断
|
|
PowerOff_judge();
|
|
}
|
|
|
|
if(s->status != R.app_status)
|
|
{
|
|
s->status = R.app_status;
|
|
L2_task_go_Tdelay(D_task_HANDLECHANGE,D_Tdelay_300ms);
|
|
}
|
|
else if (s->status == WIFI_CONFIG)
|
|
{
|
|
L2_task_go_Tdelay(D_task_WIFICONFIG_STATUS01,0);
|
|
}
|
|
else if (s->status == WIFI_CONNECTED)
|
|
{
|
|
L2_task_go_Tdelay(D_task_WIFICONN_STATUS01,0);
|
|
}
|
|
else if (s->status == WIFI_CONFIG_Phone)
|
|
{
|
|
L2_task_go_Tdelay(D_task_WIFICONFIG_STATUS01,0);
|
|
}
|
|
|
|
TTSS_Task_step(D_task_HANDLECHANGE)
|
|
if(s->status == POW_OFF)
|
|
{
|
|
// LED灯灭
|
|
L2_LED_OFF();
|
|
// 播放关机语音
|
|
L2_WT2605B_Broadcast(&audio_powerdown);
|
|
// OID、WIFI关闭
|
|
L2_OID_WIFI_Close();
|
|
Lc_delay_ms(5000);
|
|
// 语音模块关闭
|
|
L2_WT2605B_OFF();
|
|
|
|
// MCU进入掉电模式
|
|
Enter_PowerDown();
|
|
// 唤醒后绿灯亮起
|
|
L2_GREEN_LED_ON();
|
|
|
|
}
|
|
else if (s->status == POW_ON_WAIT)
|
|
{
|
|
// LED红灯常亮,LED绿灯灭
|
|
L2_RED_LED_ON();
|
|
// OID、WIFI开启
|
|
L2_OID_WIFI_Open();
|
|
// 语音模块开启
|
|
L2_WT2605B_ON();
|
|
Lc_delay_ms(4000);
|
|
// 通电后播放开机语音
|
|
L2_WT2605B_Broadcast(&audio_poweron);
|
|
//wifi任务初始化
|
|
L3_task_W600_flow_init(W600_ST);
|
|
// Adc任务初始化
|
|
L3_task_Adc_init();
|
|
// game任务初始化
|
|
L3_task_game_init();
|
|
|
|
s->status = POW_ON;
|
|
R.app_status = POW_ON;
|
|
|
|
}
|
|
else if (s->status == WIFI_CONFIG)
|
|
{
|
|
// 灯灭
|
|
L2_LED_OFF();
|
|
// 音频播放
|
|
L2_WT2605B_Broadcast(&audio_config_mode);
|
|
// 配网任务初始化,进入配网
|
|
// L3_gm35_send_str("+++");
|
|
L3_task_W600_flow_init(W600_SC);
|
|
}
|
|
else if (s->status == WIFI_CONFIG_Phone)
|
|
{
|
|
L2_WT2605B_Broadcast(&audio_config_phone);
|
|
|
|
}
|
|
else if (s->status == WIFI_CONFIG_COMPLETE)
|
|
{
|
|
L2_WT2605B_Broadcast(&audio_config_complete);
|
|
// 配网成功,进入STAION模式
|
|
L3_task_W600_flow_init(W600_ST);
|
|
}
|
|
else if (s->status == WIFI_CONNECTED)
|
|
{
|
|
// 灯灭
|
|
L2_LED_OFF();
|
|
// 音频播放
|
|
L2_WT2605B_Broadcast(&audio_wifi_connected);
|
|
}
|
|
else if (s->status == TCP_CONNECTED)
|
|
{
|
|
// LED红灯灭,LED绿灯常亮
|
|
L2_GREEN_LED_ON();
|
|
// 音频播放
|
|
L2_WT2605B_Broadcast(&audio_TCP_connected);
|
|
|
|
}
|
|
L2_task_go_Tdelay(D_task_DETECTCHANGE,D_Tdelay_300ms);
|
|
|
|
TTSS_Task_step(D_task_WIFICONFIG_STATUS01)
|
|
L2_RED_LED_ON();
|
|
L2_task_go_Tdelay(D_task_WIFICONFIG_STATUS02,D_Tdelay_500ms);
|
|
TTSS_Task_step(D_task_WIFICONFIG_STATUS02)
|
|
L2_LED_OFF();
|
|
L2_task_go_Tdelay(D_task_DETECTCHANGE,D_Tdelay_500ms);
|
|
|
|
TTSS_Task_step(D_task_WIFICONN_STATUS01)
|
|
L2_GREEN_LED_ON();
|
|
L2_task_go_Tdelay(D_task_WIFICONN_STATUS02,D_Tdelay_500ms);
|
|
TTSS_Task_step(D_task_WIFICONN_STATUS02)
|
|
L2_LED_OFF();
|
|
L2_task_go_Tdelay(D_task_DETECTCHANGE,D_Tdelay_500ms);
|
|
|
|
TTSS_Task_end();
|
|
}
|
|
|
|
// 无操作进入低功耗模式
|
|
void PowerOff_judge()
|
|
{
|
|
U32 Nowtime = D_sys_now;
|
|
if( Nowtime - R.Operate_time > Noperate_Time_Seconds) // 180000/JIFFIES = 180s
|
|
{
|
|
// R.ScrTouch_flag = 0;
|
|
R.app_status = POW_OFF;
|
|
L0_uart0_sendstr("R.app_status = POW_OFF!!!");
|
|
L0_uart0_0d0a();
|
|
}
|
|
}
|
|
|
|
// // 外部中断0服务函数
|
|
// void INT0_Isr() interrupt 0
|
|
// {
|
|
// // 无需任何操作,中断仅用于唤醒MCU
|
|
// // 唤醒后程序从Enter_PowerDown()后的指令继续执行
|
|
// }
|
|
|
|
// // 中断服务函数
|
|
// void INT0_ISR() interrupt 0
|
|
// {
|
|
// IE0 = 0; // 清除INT0中断标志
|
|
// // 唤醒后绿灯亮起
|
|
// L2_GREEN_LED_ON();
|
|
// }
|
|
|
|
|