📄 managecomm.c
字号:
/******************************************************************************
ManageComm.c BY xbpda 2003.12.11
*****************************************************************************/
#include <stdlib.h>
#include <stdio.h>
#include "ppsm.h"
#include "errors.h"
#include "proto.h"
#include "M68328.h"
#include "Gui.h"
#include "ManageComm.h"
#include "PubVal.h"
#include "PubFun.h"
extern U8 RecvOkNum;
extern U8 RecvErrNum;
extern U8 RecvingFlag;
extern U8 DownPD[2];
extern U8 TotalDownPD;
void WriteRevcData(U16 PackNum);
void ManageCommTask(void)
{
U32 size;
U32 id;
S16 xSrc, ySrc, xDest, yDest;
P_U16 inData;
U8 i;
TEXT TitleTxt[]={'下','载',0};
TEXT MsgTitleTxt[]={'操','作','提','示',0};
TEXT MsgNoPowerTxt[]={'对','不','起',', ','您','无','权','使','用','! ',0};
TEXT cmdButtonTxt[4][7]={{'桌','台','设','置','下','载',0},{'员','工','档','案','下','载',0},
{'菜','品','数','据','下','载',0},{'退',' ',' ',' ',' ','出',0}};
U32 cmdButtonID[4];
U32 MsgButtonOkID;
Draw_Logo((P_TEXT)TitleTxt);
for (i=0;i<3;i++)
{
Text_Button3D(&cmdButtonID[i],(P_TEXT)cmdButtonTxt[i],45,i*45+30,160,35,2);
}
Text_Button3D(&cmdButtonID[3],(P_TEXT)cmdButtonTxt[3],45,260,160,35,2);
OpenCommPort(ManageCommTaskID);
while(1)
{
switch(IrptGetData((P_U32)&id, (P_U32*)&inData, (P_U32)&size))
{
case IRPT_RTC:
if (id==TimerRTCId) RTCTimerEvent();
break;
case IRPT_UART:
if (*inData == UART_DATA_RECEIVED) RecvData();
break;
case IRPT_ICON:
if (AutoPowerOff!=0) PDAOpenTime=0;
if (ActiveAreaRead(id,&xSrc,&ySrc,&xDest,&yDest)!= PPSM_OK) rv = PPSM_ERROR;
if (InvRec(xSrc+1,ySrc+1,(xDest-(xSrc+1)),(yDest-(ySrc+1)))!= PPSM_OK) rv = PPSM_ERROR;
if (*inData == PPSM_ICON_PEN_UP)
{
if (id==cmdButtonID[0]) //桌台设置下载
{
DownLoadType=0;
CloseCommPort(WDownLoadDataTaskID);
break;
}
else if (id==cmdButtonID[1])//员工档案下载
{
DownLoadType=1;
CloseCommPort(WDownLoadDataTaskID);
break;
}
else if (id==cmdButtonID[2])//菜品数据下载
{
DownLoadType=3;
CloseCommPort(WDownLoadDataTaskID);
break;
}
else if (id==cmdButtonID[3])//退出
{
CloseCommPort(SysMenuTaskID);
break;
}
else if (id==MsgButtonOkID)//确定对话框
{
CloseMsgBox(TempBitMap,1,&MsgButtonOkID);
break;
}
else break;
}
default:
break;
}
}
}
extern U8 RFONFlag;
extern void RFOn(void);
void WDownLoadDataTask(void)//无线下载数据
{
U32 size;
U32 id;
S16 xSrc, ySrc, xDest, yDest;
P_U16 inData;
U8 i,k;
U16 j;
U8 DownPack[12];
U8 ModifyChannelPack[2];
U8 StartFlag;
U16 TotalOk,TotalErr;
U32 DoubleCheckNum;
U16 DowningNum; //总的下载次数
TEXT TitleTxt[]={'下','载',0};
TEXT WDownLoadTxt[]={'无','线','下','载',0};
TEXT WDownTitelTxt[3][5]={{'桌','台','设','置',0},{'员','工','档','案',0},{'菜','品','数','据',0}};
TEXT TotalPackNumTxt[]={'需','要','下','载','数','目',0};
TEXT RecvedOKNumTxt[]={'接','收','成','功','数','目',0};
TEXT RecvedErrorNumTxt[]={'接','收','错','误','数','目',0};
TEXT DownLoadTempoTxt[]={'下','载','进','度',0};
TEXT MsgOKTxt[]={'下','载','完','成',', ','是','否','退','出','? ',0};
TEXT MsgFileNotFind[]={'主','机','没','有','找','到','文','件','! ',0};
TEXT MsgBigFile[]={'文','件','太','大',', ','无','法','下','载','! ',0};
TEXT MsgErrQuest[]={'PD','A ','的','下','载','请','求','错','误','! ',0};
TEXT MsgTitleTxt[]={'操','作','提','示',0};
TEXT SendCancelTxt[]={'终',' ','止',0};
TEXT cmdButtonTxt[2][4]={{'开',' ','始',0},{'退',' ','出',0}};
U32 cmdButtonID[2];
U32 MsgButtonYesNoID[2];
U32 MsgButtonOkID;
ModifyChannelPack[0]=0x24;
//ModifyChannelPack[1]=15;
ModifyChannelPack[1]=DownPD[0];
DowningNum=0;
//初始化包。除了第9其它都是固定的放置
DownPack[0]=0xAA;
DownPack[1]=0xAA;
DownPack[2]=PCS_WDownLoad;
DownPack[3]=HotelID;
DownPack[4]=HostID;
DownPack[5]=PDAID;
DownPack[6]=DownLoadType; //下载类型
DownPack[7]=0;
DownPack[8]=1;
DownPack[9]=(U8)(~(PCS_WDownLoad+HotelID+HostID+PDAID+DownPack[6]+DownPack[7]+DownPack[8])+1); //校验位
DownPack[10]=0x1A;
DownPack[11]=0x26;
//初始化开始和接收信号
StartFlag=FALSE;
RecvingFlag=FALSE;
i=0;
RecvOkNum=0;
RecvErrNum=0;
TotalOk=0;
TotalErr=0;
Draw_Logo((P_TEXT)TitleTxt);
Draw_Signal(0);
PutString((P_TEXT)WDownLoadTxt,25,49);
PutString((P_TEXT)WDownTitelTxt[DownLoadType],89,49);
PutString((P_TEXT)TotalPackNumTxt,25,89);Draw_Text(133,87,92,20,2);
PutString((P_TEXT)RecvedOKNumTxt,25,129);Draw_Text(133,127,92,20,2);
PutString((P_TEXT)RecvedErrorNumTxt,25,169);Draw_Text(133,167,92,20,2);
PutString((P_TEXT)DownLoadTempoTxt,25,209);
Draw_Rec(BLACK, 95, 208, 130, 18);
Text_Button3D(&cmdButtonID[0],(P_TEXT)cmdButtonTxt[0],25,247,60,26,2);
Text_Button3D(&cmdButtonID[1],(P_TEXT)cmdButtonTxt[1],165,247,60,26,2);
OpenCommPort(WDownLoadDataTaskID); //打开无线下载任务
//UARTTimeout(50000);
RecvBufSize=50;
if (RFONFlag==FALSE)
{
RFONFlag=TRUE;
RFOn();
}
UARTSend(UART_SEND_REQUEST, (P_U8)ModifyChannelPack, 2);
while(1)
{
switch(IrptGetData((P_U32)&id, (P_U32*)&inData, (P_U32)&size))
{
case IRPT_RTC: //时钟中断
if (id==TimerRTCId)
{
i++;
if (i>=3)
{
if (RecvOkNum==0 && RecvErrNum==0 && RecvingFlag!=TRUE && TotalDownPD>1) //需要更换频点
{
if (ModifyChannelPack[1]==DownPD[0]) ModifyChannelPack[1]=DownPD[1];
else ModifyChannelPack[1]=DownPD[0];
UARTReceive(UART_RECEIVE_ABORT);
AdvMessageDelete(WDownLoadDataTaskID, IRPT_UART, -1);
UARTSend(UART_SEND_REQUEST, (P_U8)ModifyChannelPack, 2); //改频
UARTReceive(UART_RECEIVE_REQUEST);
}
if (RecvOkNum>=25 && RecvErrNum<=3) SignalValue=5;
else if (RecvOkNum>=20 && RecvErrNum<=6) SignalValue=4;
else if (RecvOkNum>=15 && RecvErrNum>=9) SignalValue=3;
else if (RecvOkNum>=10 && RecvErrNum>=12) SignalValue=2;
else if (RecvOkNum>=5 && RecvErrNum>=15) SignalValue=1;
else SignalValue=0;
Draw_Signal(SignalValue);
//标志置位
RecvOkNum=0;
RecvErrNum=0;
i=0;
}
}
break;
case IRPT_UART: //异步传输
if (*inData == UART_DATA_RECEIVED)
{
RecvingFlag=TRUE;
(U32)RecievBuffer=0x300000;
RCVActual=0;
UARTReadData(RecievBuffer,RecvBufSize, &RCVActual);
UARTReceive(UART_RECEIVE_ABORT);
if ( (U8)(*(RecievBuffer))==72 && (U8)(*(RecievBuffer+1))==ModifyChannelPack[1] ) //改频成功
{
AdvMessageDelete(WDownLoadDataTaskID, IRPT_UART, -1);
UARTReceive(UART_RECEIVE_REQUEST);
RecvingFlag=FALSE;
break;
}
//判断是否是下载的通信协议命令(防止不会自动改频)
if ( (U8)(*(RecievBuffer+1))!=PCR_WDownLoad && (U8)(*(RecievBuffer+1))!=PCR_WDownLoadCR )
{
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -