📄 managecomm.c
字号:
AdvMessageDelete(WDownLoadDataTaskID, IRPT_UART, -1);
UARTReceive(UART_RECEIVE_REQUEST);
RecvingFlag=FALSE;
break;
}
if (RCVActual<8) //效验数据包长度是否足够
{
AdvMessageDelete(WDownLoadDataTaskID, IRPT_UART, -1);
UARTReceive(UART_RECEIVE_REQUEST);
RecvingFlag=FALSE;
break;
}
//效验数据包是否完整
if (*RecievBuffer!=170 || *(RecievBuffer+RCVActual-2)!=0x1A || *(RecievBuffer+RCVActual-1)!=0x26)
{
RecvErrNum++;
AdvMessageDelete(WDownLoadDataTaskID, IRPT_UART, -1);
UARTReceive(UART_RECEIVE_REQUEST);
RecvingFlag=FALSE;
break;
}
//判断是否是本酒店及主机
if ( (U8)(*(RecievBuffer+2)) != HotelID || (U8)(*(RecievBuffer+3)) != HostID )
{
AdvMessageDelete(WDownLoadDataTaskID, IRPT_UART, -1);
UARTReceive(UART_RECEIVE_REQUEST);
RecvingFlag=FALSE;
break;
}
//效验位检查
DoubleCheckNum=0;
for (j=1;j<RCVActual-3;j++)
{
DoubleCheckNum=(U8)(*(RecievBuffer+j))+DoubleCheckNum;
}
DoubleCheckNum=~(DoubleCheckNum)+1;
if ( (U8)DoubleCheckNum != (U8)(*(RecievBuffer+RCVActual-3)) ) //倒数第三位是校验位
{
RecvErrNum++;
if ((U8)(*(RecievBuffer+1))==PCR_WDownLoad && (U8)(*(RecievBuffer+4))==PDAID)
{
TotalErr++;
SetTextAsc(TotalErr,130,169,88,16,FALSE);
}
AdvMessageDelete(WDownLoadDataTaskID, IRPT_UART, -1);
UARTReceive(UART_RECEIVE_REQUEST);
RecvingFlag=FALSE;
break;
}
RecvOkNum++;
if ( (U8)(*(RecievBuffer+4))!=PDAID )//不是发给本机的数据
{
AdvMessageDelete(WDownLoadDataTaskID, IRPT_UART, -1);
UARTReceive(UART_RECEIVE_REQUEST);
RecvingFlag=FALSE;
break;
}
RecievBuffer++; //置到有效数据的首地址(命令+酒店+主机+PDA+数据)
RCVActual=RCVActual-4;//有效数据的长度(命令+酒店+主机+PDA+数据)
if (StartFlag==TRUE)
{
if ((U8)*RecievBuffer == PCR_WDownLoadCR ) //主机的下载循检包
{
UARTSend(UART_SEND_REQUEST, (P_U8)DownPack, 12); //发送下载请求数据包
}
else //主机发来的下载回复数据包
{
if ( (U8)(*(RecievBuffer+4))==0xE0 ) // 主机没有找到文件
{
MessageBox((P_TEXT)MsgTitleTxt, (P_TEXT)MsgFileNotFind, 1, &MsgButtonOkID, TempBitMap);
StartFlag=FALSE;
}
else if ( (U8)(*(RecievBuffer+4))==0xE1 ) // PDA请求下载的文件太大(超过84K)
{
MessageBox((P_TEXT)MsgTitleTxt, (P_TEXT)MsgBigFile, 1, &MsgButtonOkID, TempBitMap);
StartFlag=FALSE;
}
else if ( (U8)(*(RecievBuffer+4))==0xE2 ) // PDA的请求次数无效
{
MessageBox((P_TEXT)MsgTitleTxt, (P_TEXT)MsgErrQuest, 1, &MsgButtonOkID, TempBitMap);
StartFlag=FALSE;
}
else //有效数据
{
j=(U8)(*(RecievBuffer+5));
j=j*256;
j=*(RecievBuffer+6)+j;
if ( j==1 ) //第一个包
{
DowningNum=(U8)(*(RecievBuffer+7));
DowningNum=DowningNum*256;
DowningNum=*(RecievBuffer+8)+DowningNum;
SetTextAsc(DowningNum,135,89,88,16,FALSE);
}
TotalOk++;
SetTextAsc(TotalOk,135,129,88,16,FALSE);
WriteRevcData(RCVActual);
PutProcessBar(j,DowningNum,95, 208, 130, 18 );
if ( j<DowningNum )
{
if (DownPack[8]<0xFF)
{
DownPack[8]=DownPack[8]+1;
}
else
{
DownPack[8]=0;
DownPack[7]=DownPack[7]+1;
}
DownPack[9]=(U8)(~(PCS_WDownLoad+HotelID+HostID+PDAID+DownPack[6]+DownPack[7]+DownPack[8])+1);
}
else //下载完成
{
MessageBox((P_TEXT)MsgTitleTxt, (P_TEXT)MsgOKTxt, 2, &MsgButtonYesNoID[0], TempBitMap);
StartFlag=FALSE;
}
}
}
}
AdvMessageDelete(WDownLoadDataTaskID, IRPT_UART, -1);
UARTReceive(UART_RECEIVE_REQUEST);
RecvingFlag=FALSE;
break;
}
else break;
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 (AutoPowerOff!=0) PDAOpenTime=0;
if (*inData == PPSM_ICON_PEN_UP)
{
if (id==cmdButtonID[0])//下载
{
if (StartFlag==FALSE)//开始
{
StartFlag=TRUE;
PutProcessBar( 0,1,95, 208, 130, 18 );
DowningNum=0;
TotalOk=0;
TotalErr=0;
SetTextAsc(0,135,89,88,16,FALSE);
SetTextAsc(TotalOk,135,129,88,16,FALSE);
SetTextAsc(TotalErr,135,169,88,16,FALSE);
DownPack[7]=0;
DownPack[8]=1;
DownPack[9]=(U8)(~(PCS_WDownLoad+HotelID+HostID+PDAID+DownPack[6]+DownPack[7]+DownPack[8])+1);
ChgButtonTxt(cmdButtonID[0],(P_TEXT)SendCancelTxt);
}
else if(StartFlag==TRUE) //终止
{
StartFlag=FALSE;
ChgButtonTxt(cmdButtonID[0],(P_TEXT)cmdButtonTxt[0]);
}
break;
}
else if (id==cmdButtonID[1])//退出
{
CloseCommPort(ManageCommTaskID);
break;
}
else if (id==MsgButtonYesNoID[0])//对话框[是]
{
CloseMsgBox(TempBitMap,2,&MsgButtonYesNoID[0]);
CloseCommPort(ManageCommTaskID);
break;
}
else if (id==MsgButtonYesNoID[1])//对话框[否]
{
CloseMsgBox(TempBitMap,2,&MsgButtonYesNoID[0]);
if (StartFlag==FALSE) ChgButtonTxt(cmdButtonID[0],(P_TEXT)cmdButtonTxt[0]);//下载完成了
break;
}
else if (id==MsgButtonOkID)//对话框[确定]
{
CloseMsgBox(TempBitMap,1,&MsgButtonOkID);
if (StartFlag==FALSE) ChgButtonTxt(cmdButtonID[0],(P_TEXT)cmdButtonTxt[0]);
break;
}
}
default:
break;
}
}
}
void WriteRevcData(U16 PackNum)
{
U8 i;
U16 temp;
U32 address;
U16 TmpPackNum;
temp=(U8)(*(RecievBuffer+5));
temp=temp*256;
temp=*(RecievBuffer+6)+temp;
switch((U8)(*(RecievBuffer+4)))
{
case 0:
if ( temp==1 ) ram_perase_sector(24); //第一个包
address=( temp - 1 )*28+TABLEADDR; //桌台地址
break;
case 1:
if ( temp==1 ) ram_perase_sector(25); //第一个包
address=( temp - 1 )*28+EMPLOYEEADDR; //员工地址
break;
case 2:
/*if ( temp==1 ) ram_perase_sector(18); //第一个包 //原来22
address=( temp - 1 )*28+FOODSPECADDR; */ //菜品地址
break;
case 3:
if ( temp==1 ) ram_perase_sector(15); //第一个包 原来 19
else if (temp%2340==0) ram_perase_sector(temp/2340+19);
address=( temp - 1 )*28+FOODADDR;
break;
case 4:
break;
case 5:
/*if ( temp==1 ) ram_perase_sector(23); //第一个包
address=( temp - 1 )*28+JZXGADDR;*/ //结帐相关参数地址
break;
default:
return;
}
if ( temp==1 ) //第一个包
{
RecievBuffer+=9;
TmpPackNum=PackNum-9;
}
else
{
RecievBuffer+=7;
TmpPackNum=PackNum-7;
address-=2;
}
for (i=0;i<TmpPackNum;i++)
{
temp=(*(RecievBuffer+i)) * 256;
i++;
if (i<TmpPackNum) temp+=*(RecievBuffer+i);
else temp+=0xFF;
ram_pwrite_word(address,temp);
address+=2;
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -