📄 systask.c
字号:
/****************************************************************
** *
** FILE : SysTask.C *
** COPYRIGHT : (c) 2001 .Xiamen Yaxon NetWork CO.LTD *
** *
** *
** By : CCH 2002.1.15 *
****************************************************************/
#define SYSTASK_GLOBALS
#include "includes.h"
#include "bsp.h"
#include "systask.h"
#include "timetask.h"
#include "watchdog.h"
#include "message.h"
#include "tools.h"
#include "portdrv.h"
#include "gpsdrv.h"
#include "systime.h"
#include "zprint.h"
#include "public.h"
#include "audio.h"
#include "alarmer.h"
#include "poweramp.h"
#include "sensor.h"
#include "debug.h"
#include "VTPos.h"
#include "_KeyBoard.h"
#include "UartSer.h"
#include "Predictor.h"
#include "StaName.h"
#include "almtask.h"
#include "DisPlayTask.h"
#define SIZE_MSGBUF 20
#define LEDPARA_WORKSTATE PORT_LEDRED, 20, 20
#if DEBUG_UARTNo_SYSTEM <=1
#if DEBUG_UARTNo_BUSSTATION >1
#define STATIONFD 0
#define STATIONARIVED 1
#define STATIONSTART 2
#define SHANGPOFD 3
#define WANDAOFD 4
#define XIAPOFD 5
#define ADOBJFD 6
static INT8U TempBuff[8];
static INT8U SendBuff[8];
static ASMRULE_STRUCT rules = {0x7e, 0x7d, 0x02, 0x01};
#endif
#endif
static OS_QMSG MsgBuf[SIZE_MSGBUF];
static OS_STK SysTaskStack[STACK_SYSTASK];
static INT8U wdgid;
/*
********************************************************************************
* Handler: MSG_GPSDRV_NOAPPLY
********************************************************************************
*/
static void HdlMsg_GPSDRV_NOAPPLY(void)
{
#if EN_GPSSLEEP > 0
if (!SensorValid_LOCK(_ACC) && !GpsIsApplied()) //SleepGps();
#endif
}
static void HdlMsg_AUDIO_TSK(void)
{
ActivateAudio();
}
#if DEBUG_UARTNo_BUSSTATION <=1
static void HdlMSG_DEBUG_STATIONFD(void)
{
PrintFromUART(DEBUG_UARTNo_BUSSTATION, "\n");
if((SysCurMsg.LMsgPara == SpecailStation.end_sta1) ||(SysCurMsg.LMsgPara == SpecailStation.end_sta2))
{
PrintFromUART(DEBUG_UARTNo_BUSSTATION, "终点站");
}
PrintFromUART(DEBUG_UARTNo_BUSSTATION, (char*)StaNames[SysCurMsg.LMsgPara]);
PrintFromUART(DEBUG_UARTNo_BUSSTATION, "站即将到达,请下车的乘客做好下车准备!!!\n");
}
static void HdlMSG_DEBUG_STATIONARIVED(void)
{
PrintFromUART(DEBUG_UARTNo_BUSSTATION, "\n");
if((SysCurMsg.LMsgPara == SpecailStation.end_sta1) ||(SysCurMsg.LMsgPara == SpecailStation.end_sta2))
{
PrintFromUART(DEBUG_UARTNo_BUSSTATION, "终点站");
}
PrintFromUART(DEBUG_UARTNo_BUSSTATION, (char*)StaNames[SysCurMsg.LMsgPara]);
PrintFromUART(DEBUG_UARTNo_BUSSTATION, "站到了,下车的乘客,待车停稳后下车,下车后请注意交通规则!!!\n");
}
static void HdlMSG_DEBUG_STATIONSTART(void)
{
PrintFromUART(DEBUG_UARTNo_BUSSTATION, "\n车辆起步,请拉好扶手,下一站是");
PrintFromUART(DEBUG_UARTNo_BUSSTATION, (char*)StaNames[SysCurMsg.LMsgPara]);
}
static void HdlMSG_DEBUG_SHANGPOFD(void)
{
PrintFromUART(DEBUG_UARTNo_BUSSTATION, "\n车辆上坡");
}
static void HdlMSG_DEBUG_WANDAOFD(void)
{
PrintFromUART(DEBUG_UARTNo_BUSSTATION, "\n车辆转弯");
}
static void HdlMSG_DEBUG_XIAPOFD(void)
{
PrintFromUART(DEBUG_UARTNo_BUSSTATION, "\n车辆下坡");
}
static void HdlMSG_DEBUG_ADOBJ(void)
{
PrintFromUART(DEBUG_UARTNo_BUSSTATION, "\n找到一个广告点");
}
static void HdlMSG_DEBUG_NAMEPRINT(void)
{
PrintFromUART(DEBUG_UARTNo_BUSSTATION, "\n");
PrintFromUART(DEBUG_UARTNo_BUSSTATION, (char*)StaNames[SysCurMsg.LMsgPara]);
}
static void HdlMSG_DEBUG_OPSTATUS(void)
{
PrintFromUART(DEBUG_UARTNo_BUSSTATION, "\n");
if(SysCurMsg.LMsgPara == STS_SKIPUP)
{
PrintFromUART(DEBUG_UARTNo_BUSSTATION, "***快进***");
}
else if (SysCurMsg.LMsgPara == STS_SKIPDOWN)
{
PrintFromUART(DEBUG_UARTNo_BUSSTATION, "***快退***");
}
else if (SysCurMsg.LMsgPara == STS_PULLIN)
{
PrintFromUART(DEBUG_UARTNo_BUSSTATION, "***进站***");
}
else if (SysCurMsg.LMsgPara == STS_PULLOUT)
{
PrintFromUART(DEBUG_UARTNo_BUSSTATION, "***出站***");
}
}
#else
static void SendInfoToPC(INT8U type,INT16U id)
{
INT8U datalen;
TempBuff[1] = type;
TempBuff[2] = (id>>8) & 0x0ff;
TempBuff[3] = id & 0x0ff;
TempBuff[0] = GetChkSum(&TempBuff[1],3);
datalen = AssembleByRules(SendBuff,TempBuff,4,&rules);
SendFromUART_MEM(1, SendBuff, datalen);
}
static void HdlMSG_DEBUG_STATIONFD(void)
{
SendInfoToPC(STATIONFD,SysCurMsg.LMsgPara);
}
static void HdlMSG_DEBUG_STATIONARIVED(void)
{
SendInfoToPC(STATIONARIVED,SysCurMsg.LMsgPara);
}
static void HdlMSG_DEBUG_STATIONSTART(void)
{
SendInfoToPC(STATIONSTART,SysCurMsg.LMsgPara);
}
static void HdlMSG_DEBUG_SHANGPOFD(void)
{
SendInfoToPC(SHANGPOFD,0);
}
static void HdlMSG_DEBUG_WANDAOFD(void)
{
SendInfoToPC(WANDAOFD,0);
}
static void HdlMSG_DEBUG_XIAPOFD(void)
{
SendInfoToPC(XIAPOFD,0);
}
static void HdlMSG_DEBUG_ADOBJ(void)
{
SendInfoToPC(ADOBJFD,0);
}
#endif
#if DEBUG_UARTNo_KEYBOARD <= 1
static void HdlMSG_DEBUG_KEYBOARD(void)
{
INT8U key;
key = SysCurMsg.LMsgPara;
switch(key)
{
case 0x01:
PrintFromUART(DEBUG_UARTNo_KEYBOARD, "\n数字键[1](礼貌用语1)");
break;
case 0x02:
PrintFromUART(DEBUG_UARTNo_KEYBOARD, "\n数字键[5](增大音量)");
break;
case 0x03:
PrintFromUART(DEBUG_UARTNo_KEYBOARD, "\n数字键[9](下行)");
break;
case 0x04:
PrintFromUART(DEBUG_UARTNo_KEYBOARD, "\n进站");
break;
case 0x05:
PrintFromUART(DEBUG_UARTNo_KEYBOARD, "\n数字键[2](礼貌用语2)");
break;
case 0x06:
PrintFromUART(DEBUG_UARTNo_KEYBOARD, "\n数字键[6](减小音量)");
break;
case 0x07:
PrintFromUART(DEBUG_UARTNo_KEYBOARD, "\n数字键[0](快退)");
break;
case 0x08:
PrintFromUART(DEBUG_UARTNo_KEYBOARD, "\n出站");
break;
case 0x09:
PrintFromUART(DEBUG_UARTNo_KEYBOARD, "\n数字键[3](礼貌用语3)");
break;
case 0x0a:
PrintFromUART(DEBUG_UARTNo_KEYBOARD, "\n数字键[7](按键音启闭)");
break;
case 0x0b:
PrintFromUART(DEBUG_UARTNo_KEYBOARD, "\n确认键(快进)");
break;
case 0x0c:
PrintFromUART(DEBUG_UARTNo_KEYBOARD, "\n重拨键");
break;
case 0x0d:
PrintFromUART(DEBUG_UARTNo_KEYBOARD, "\n数字键[4](礼貌用语4)");
break;
case 0x0e:
PrintFromUART(DEBUG_UARTNo_KEYBOARD, "\n数字键[8](上行)");
break;
case 0x0f:
PrintFromUART(DEBUG_UARTNo_KEYBOARD, "\n取消键");
break;
case 0x10:
PrintFromUART(DEBUG_UARTNo_KEYBOARD, "\n功能切换键");
break;
default:
break;
}
}
#endif
static FUNCENTRY_STRUCT functionentry[] = {
MSG_GPSDRV_NOAPPLY, HdlMsg_GPSDRV_NOAPPLY,
#if DEBUG_UARTNo_SYSTEM <=1
MSG_DEBUG_STATIONFD, HdlMSG_DEBUG_STATIONFD,
MSG_DEBUG_STATIONARIVED, HdlMSG_DEBUG_STATIONARIVED,
MSG_DEBUG_STATIONSTART, HdlMSG_DEBUG_STATIONSTART,
MSG_DEBUG_SHANGPOFD, HdlMSG_DEBUG_SHANGPOFD,
MSG_DEBUG_WANDAOFD, HdlMSG_DEBUG_WANDAOFD,
MSG_DEBUG_XIAPOFD, HdlMSG_DEBUG_XIAPOFD,
MSG_DEBUG_ADOBJ, HdlMSG_DEBUG_ADOBJ,
#if DEBUG_UARTNo_KEYBOARD <= 1
MSG_DEBUG_KEYBOARD, HdlMSG_DEBUG_KEYBOARD,
#endif
#if DEBUG_UARTNo_BUSSTATION <=1
MSG_DEBUG_NAMEPRINT, HdlMSG_DEBUG_NAMEPRINT,
MSG_DEBUG_OPSTATUS, HdlMSG_DEBUG_OPSTATUS,
#endif
#endif
MSG_AUDIO_TSK, HdlMsg_AUDIO_TSK
};
static void SysTask(void *pd)
{
pd = pd;
ComType = 0;
#if DEBUG_UARTNo_SYSTEM <= 1
PrintFromUART(DEBUG_UARTNo_SYSTEM, "启动SysTask......\n");
#endif
InitSysTime();
InitGpsDrv();
InitPortDrv();
InitPowerAmp();
VTPosInit();
InitUartSer();
InstallPermnentPort(LEDPARA_WORKSTATE);
wdgid = ApplyWatchDogID();
for(;;)
{
if (OSQPend(SysTaskMsgQue, 20, &SysCurMsg) == OS_NO_ERR)
{
FindProcEntry(SysCurMsg.MsgID, functionentry, sizeof(functionentry)/sizeof(functionentry[0]));
}
ResetWatchDog(wdgid);
}
}
void CreateSysTask(void)
{
SysTaskMsgQue = OSQCreate(MsgBuf, sizeof(MsgBuf)/sizeof(MsgBuf[0]));
OSTaskCreate(SysTask, (void *)0, &SysTaskStack[STACK_SYSTASK], PRIO_SYSTASK);
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -