⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 comm.c

📁 ppsm 系统编程 ppsm 系统编程
💻 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 + -