📄 comm.c
字号:
/******************************************************************************
Comm.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 "PubVal.h"
extern U8 RecvOkNum;
extern U8 RecvErrNum;
extern U8 RecvingFlag;
extern U8 FindIndex[10];
U8 RFONFlag;
U8 ChangeCommChannel[2];
U8 PDAOpenTime;
extern void RFOn(void);
extern void RFOff(void);
extern void ELedOn(void);
extern void ELedOff(void);
extern void LCDOn_new(void);
extern void LCDOff_new(void);
extern void RFPWOn(void);
extern void RFPWOff(void);
extern void LEDHealthOff(void);
extern void ram_perase_sector(int ncount);
extern void ram_pwrite_word(U32 addr, U16 val);
extern void AscToText(TEXT *dest,U16 src);
extern void SaveTempData(void);
extern U8 CommPD[8];
extern U8 TotalCommPD;
U8 CommPDIndex;
U32 CommErrorTaskID;
extern U8 ChangeTableStatus(U16 TableNo,U8 TableStatus);
void CommErrorTask(void);
void OpenCommPort(U32 TempTaskID);
void CloseCommPort(U32 NewTaskID);
U8 FindFoodIndex(U8 Tmpindex,TEXT *FoodNo);
U8 TmpCheckTableIndex(U16 TableNo);
U8 CheckTmpFoodDataIndex(U16 TableNo,U8 RestFlag);
void ProcessPackPoint(void);
void RecvData();
void RTCTimerEvent(void);
void OpenCommPort(U32 TempTaskID)
{
if (SetDozePeriod(PPSM_NO_DOZE) != PPSM_OK) rv = PPSM_ERROR;
if (IrptRequest(IRPT_UART_FLAG) != IRPT_UART_FLAG) rv = PPSM_ERROR;
if (UARTTimeout(Uart_TimeOut) != PPSM_OK) rv = PPSM_ERROR; //Uart_TimeOut = 5000
if (UARTSetDelay(UART_TXHALF_DELAY,100)!= PPSM_OK) rv = PPSM_ERROR;
if (UARTFlowCtrl(UART_RCTS_DISABLE) != PPSM_OK) rv = PPSM_ERROR;
if (UARTConfigure(UART_NORMAL_MODE, UART_9600_BPS, NO_PARITY,ONE_STOP_BIT, EIGHT_BIT_CHAR) !=PPSM_OK ) rv = PPSM_ERROR;
if (UARTReceive(UART_RECEIVE_REQUEST) != PPSM_OK) rv= PPSM_ERROR;
if (SetPeriodId(&TimerRTCId, RTC_PERI_SECOND)!= PPSM_OK) rv = PPSM_ERROR;
(U32)RecievBuffer=0x300000;
RCVActual=0;
UARTReadData(RecievBuffer,RecvBufSize, &RCVActual);
CurrentTaskID=TempTaskID;
Draw_Signal(SignalValue);
RecvBufSize=50;
}
void CloseCommPort(U32 NewTaskID)
{
if (UARTReceive(UART_RECEIVE_ABORT)!= PPSM_OK) rv= PPSM_ERROR;
if (UARTSend(UART_SEND_ABORT,(P_U8)WaitDataForSend[SendPoint].Pack, (U16)WaitDataForSend[SendPoint].PackLen)!= PPSM_OK) rv= PPSM_ERROR;
if (IrptRelease(IRPT_UART_FLAG) != PPSM_OK) rv = PPSM_ERROR;
if (SetDozePeriod(0)!=PPSM_OK) rv=PPSM_ERROR;
if (SetPeriodId(&TimerRTCId, RTC_PERI_NONE)!= PPSM_OK) rv = PPSM_ERROR;
if (NewTaskID!=0)
{
if (AdvMessageDelete(CurrentTaskID, IRPT_ICON, -1) !=PPSM_OK) rv = PPSM_ERROR;
if (AdvMessageDelete(CurrentTaskID, IRPT_RTC, -1) !=PPSM_OK) rv = PPSM_ERROR;
if (AdvMessageDelete(CurrentTaskID, IRPT_UART, -1) !=PPSM_OK) rv = PPSM_ERROR;
if (AdvSendMessage(NewTaskID, NULL, SWAP_TASK) != PPSM_OK) rv= PPSM_ERROR;
}
}
U8 recordnum=0;
void RecvData()
{
}
void ProcessPackPoint(void)
{
U8 i;
i=0;
if (RFONFlag==FALSE)
{
RFONFlag=TRUE;
RFOn();
if (UARTSend(UART_SEND_REQUEST,(P_U8)ChangeCommChannel, 2)!= PPSM_OK) rv= PPSM_ERROR;
}
while(i<MaxSendDataNum && WaitDataForSend[SendPoint].Flag==FALSE)
{
if (SendPoint<MaxSendDataNum-1) SendPoint++;
else SendPoint=0;
i++;
}
if (i>=MaxSendDataNum) SendPoint=0;
}
U8 RFOpenTime;
void RTCTimerEvent(void)
{
}
void CommErrorTask(void)
{
U32 size;
U32 id;
S16 xSrc, ySrc, xDest, yDest;
P_U16 inData;
U8 i,j;
U16 TableUpdataNo1,TableUpdataNo2;
TEXT TitleTxt[]={'错','误',0};
TEXT CommErrorTxt[]={'操','作','失','败',', ','请','更','正','! ',0};
TEXT ErrorDataTxt[]={'数','据',': ',0};
TEXT OperatorTxt[]={'操','作',': ',0};
TEXT ErrorYuanYinTxt[]={'原','因',': ',0};
TEXT NotYingYeTxt[]={'没','有','营','业','! ',0};
TEXT YingYeTxt[]={'正','在','营','业','! ',0};
TEXT TaiHujiao[]={'呼','叫','总','台',0};
TEXT TaiJieZhang[]={'结','帐',0};
TEXT UnKnowErrorTxt[]={'未','知','错','误',0};
TEXT ErrorStatusTxt[]={'状','态','不','对',0};
TEXT PdaNoErrTxt[]={'网','络','中','有','重','复','的','PD','A ','编','号','! ',0};
TEXT OtherDataTxt[6][3]={{'点','菜',0},{'起','菜',0},{'退','菜',0},{'催','菜',0},{'缓','菜',0},{'改','量',0}};
TEXT cmdButtonTxt[]={'确',' ','定',0};
U32 cmdButtonID;
Draw_Logo((P_TEXT)TitleTxt);
PutString((P_TEXT)CommErrorTxt,20,62);
PutString((P_TEXT)ErrorDataTxt,20,88);
Draw_Line(BLACK, 60, 106, 235, 106);
PutString((P_TEXT)OperatorTxt,20,114);
Draw_Line(BLACK, 60, 132, 235, 132);
PutString((P_TEXT)ErrorYuanYinTxt,20,140);
Draw_Line(BLACK, 60, 158, 235, 158);
if ((U8)(*(RecievBuffer+4))<9)
{
switch(WaitDataForSend[SendPoint].Pack[2]) //发送出数据包的操作命令
{
case PCS_CallTable: //呼叫总台
TableUpdataNo1=WaitDataForSend[SendPoint].Pack[7]*256+WaitDataForSend[SendPoint].Pack[8];
PutString((P_TEXT)Table[TmpCheckTableIndex(TableUpdataNo1)].TableName,60,88);
PutString((P_TEXT)TaiHujiao,60,114);
break;
/*case PCS_CloseOff: //结帐
TableUpdataNo1=WaitDataForSend[SendPoint].Pack[7]*256+WaitDataForSend[SendPoint].Pack[8];
PutString((P_TEXT)Table[TmpCheckTableIndex(TableUpdataNo1)].TableName,60,88);
PutString((P_TEXT)TaiJieZhang,60,114);
break; */
default:
TableUpdataNo1=WaitDataForSend[SendPoint].Pack[7]*256+WaitDataForSend[SendPoint].Pack[8];
PutString((P_TEXT)Table[TmpCheckTableIndex(TableUpdataNo1)].TableName,60,88);
PutString((P_TEXT)OtherDataTxt[WaitDataForSend[SendPoint].Pack[2]-PCS_SelectMenu],60,114);
break;
}
}
switch( (U8)(*(RecievBuffer+4)) ) //错误原因
{
case 1:
TableUpdataNo1=WaitDataForSend[SendPoint].Pack[7]*256+WaitDataForSend[SendPoint].Pack[8];
PutString((P_TEXT)YingYeTxt,60,140);
break;
case 2:
TableUpdataNo1=WaitDataForSend[SendPoint].Pack[7]*256+WaitDataForSend[SendPoint].Pack[8];
PutString((P_TEXT)Table[TmpCheckTableIndex(TableUpdataNo1)].TableName,60,140);
PutString((P_TEXT)NotYingYeTxt,150,140);
TableUpdataNo2=WaitDataForSend[SendPoint].Pack[9]*256+WaitDataForSend[SendPoint].Pack[10];
ChangeTableStatus(TableUpdataNo2,KONGXIAN);
break;
case 3:
TableUpdataNo1=WaitDataForSend[SendPoint].Pack[7]*256+WaitDataForSend[SendPoint].Pack[8];
PutString((P_TEXT)ErrorStatusTxt,60,140);
ChangeTableStatus(TableUpdataNo1,YINGYE);
break;
case 4:
TableUpdataNo1=WaitDataForSend[SendPoint].Pack[7]*256+WaitDataForSend[SendPoint].Pack[8];
PutString((P_TEXT)NotYingYeTxt,60,140);
break;
case 5:
TableUpdataNo1=WaitDataForSend[SendPoint].Pack[7]*256+WaitDataForSend[SendPoint].Pack[8];
PutString((P_TEXT)Table[TmpCheckTableIndex(TableUpdataNo1)].TableName,60,140);
PutString((P_TEXT)NotYingYeTxt,150,140);
TableUpdataNo2=WaitDataForSend[SendPoint].Pack[9]*256+WaitDataForSend[SendPoint].Pack[10];
ChangeTableStatus(TableUpdataNo2,YINGYE);
break;
case 6:
TableUpdataNo2=WaitDataForSend[SendPoint].Pack[9]*256+WaitDataForSend[SendPoint].Pack[10];
PutString((P_TEXT)Table[TmpCheckTableIndex(TableUpdataNo2)].TableName,60,140);
PutString((P_TEXT)NotYingYeTxt,150,140);
TableUpdataNo1=WaitDataForSend[SendPoint].Pack[7]*256+WaitDataForSend[SendPoint].Pack[8];
ChangeTableStatus(TableUpdataNo1,YINGYE);
break;
case 7:
PutString((P_TEXT)ErrorStatusTxt,156,140);
break;
case 8:
TableUpdataNo1=WaitDataForSend[SendPoint].Pack[7]*256+WaitDataForSend[SendPoint].Pack[8];
PutString((P_TEXT)NotYingYeTxt,92,140);
break;
case 15: //有重号
PutString((P_TEXT)PdaNoErrTxt,60,140);
break;
default:
PutString((P_TEXT)UnKnowErrorTxt,60,140);
break;
}
Text_Button3D(&cmdButtonID,(P_TEXT)cmdButtonTxt,90,232,80,28,2);
WaitDataForSend[SendPoint].Flag=FALSE;
ProcessPackPoint();
while(1)
{
switch(IrptGetData((P_U32)&id, (P_U32*)&inData, (P_U32)&size))
{
case IRPT_ICON:
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)//确定
{
if (AdvMessageDelete(CommErrorTaskID, IRPT_UART, -1) !=PPSM_OK) rv = PPSM_ERROR;
if (AdvSendMessage(CurrentTaskID, NULL, SWAP_TASK) != PPSM_OK) rv= PPSM_ERROR;
break;
}
}
default:
break;
}
}
}
U8 TmpCheckTableIndex(U16 TableNo)
{
U8 i;
for (i=0;i<TotalTableNum;i++)
{
if ( TableNo==Table[i].TableNo )
{
return i ;
}
}
return ERRORTABLENO;
}
U8 CheckTmpFoodDataIndex(U16 TableNo,U8 RestFlag)
{
U8 i;
for (i=0;i<MaxTempFoodTableNum;i++)
{
if (TmpTableFood[i].TableNo==TableNo)
{
if (RestFlag==TRUE)
{
TmpTableFood[i].TableNo=ERRORTABLENO;
TmpTableFood[i].TotalFoodNum=0;
}
return i;
}
}
return ERRORINDEX;
}
U8 FindFoodIndex(U8 Tmpindex,TEXT *FoodNo)
{
U8 j;
U16 TmpFoodNo;
for (j=0;j<TmpTableFood[Tmpindex].TotalFoodNum;j++)
{
TmpFoodNo=TexttoNum((P_TEXT)TmpTableFood[Tmpindex].FoodNo[j]);
if ( TmpFoodNo==TexttoNum(FoodNo) ) //找到了
{
return j;
}
}
if (j>=TmpTableFood[Tmpindex].TotalFoodNum) return ERRORINDEX; //没有找到
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -