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.
 
 
 
 

229 lines
5.2 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"
#include "../bsp/bsp_key.h"
// 外部中断初始化P3.2
void INT0_Init(void)
{
D_stdIO_P3(BITN2);
IT0 = 1; // 下降沿触发
EX0 = 1; // 使能INT0
}
// 掉电模式函数
void Enter_PowerDown(void)
{
// 禁用所有唤醒源
P0IE = 0x00;
P1IE = 0x00;
P2IE = 0x00;
P3IE = 0x00;
P4IE = 0x00;
P5IE = 0x00;
PCON |= 0x02; // 执行PD指令
// PCON |= 0x01; // 执行IDL指令
_nop_(); //掉电模式被唤醒后,MCU 首先会执行此语句
//然后再进入中断服务程序
_nop_();
// MCU被唤醒后,绿灯亮起
// L2_GREEN_LED_ON();
// 状态切换,直接开机
// R.app_status = POW_ON_WAIT;
// if(L2_ReadKey3() == Key_Down)
// {
// Lc_delay_ms(1000);
// if(L2_ReadKey3() == Key_Down)
// {
// Lc_delay_ms(1000);
// if(L2_ReadKey3() == Key_Down)
// {
// R.app_status = POW_ON_WAIT;
// }
// }
// }
}
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();
}
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(8000);
// 通电后播放开机语音
// L2_WT2605B_VolumeControl(0x1F);
L2_WT2605B_VolumeControl(G.volume);
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()中 PCON |= 0x02; 后的指令继续执行
P0IE = 0xFF;
P1IE = 0xFF;
P2IE = 0xFF;
P3IE = 0xFF;
P4IE = 0xFF;
P5IE = 0xFF;
if (R.app_status == POW_OFF)
{
R.app_status = POW_ON_WAIT;
}
}