📄 old_common.c~
字号:
case -1:PrintToNetwork("300 出卡控制器上发生超时错误(COM1 A)\n");return -1; case -2:PrintToNetwork("300 出卡控制器上发生通讯错误:串行数据包头错误(COM1 A)\n");return -2; case -3:PrintToNetwork("300 出卡控制器上发生通讯错误:串行数据包尾错误(COM1 A)\n");return -3; } if(Command==0x25) { if(inBusy==0x55aa) { PrintToNetwork("300 检测到重复按键,该按键信息将被忽略\n");return -1; return 0; } ExecCKKZFunc(Command); } else if(Command==0x20) { Leap(0x23,0x31); Leap(0x23,0x33); } } else //串口1设备B { // } } else if(comPort==HS5) { cht=*(unsigned char*)COM5_MCR; cht=cht<<6; if((cht & 0xc0)==0xc0) //串口5设备A { Result=CanverBSYNToContent(HS5); switch(Result) { case -1:PrintToNetwork("300 IO控制器上发生超时错误(COM6 A)\n");return -1; case -2:PrintToNetwork("300 IO控制器上发生通讯错误:串行数据包头错误(COM6 A)\n");return -2; case -3:PrintToNetwork("300 IO控制器上发生通讯错误:串行数据包尾错误(COM6 A)\n");return -3; } ExecIOCOFunc(Command); } else if((cht & 0xc0)==0x40) //串口5设备B { // } else if((cht & 0xc0)==0x80) { // } else if((cht & 0xc0)==0x00) { // } }}int ReadFromComm6003(int comPort,int Length){ int pcbRead,i,rel; unsigned char buf[256]; RDataLength=0; i=0; for(;;) { pcbRead=read(comPort,&buf,256); if(pcbRead<=0) { if(i<200) { i++; continue; } return -1; } for(i=0;i<pcbRead;i++) ReadBuffer[RDataLength++]=buf[i]; if(RDataLength+pcbRead-3>=ReadBuffer[1]) break; } tcflush(comPort, TCIFLUSH); if(GET_RTS(comPort)==1) { Canver6003ToContent(HS3); } else //串口3设备B { Canver6003ToContent(HS3); }}int WriteToComm(int comPort,int Length){ return write(comPort,WriteBuffer,Length);}//-----------------------------------------------------------------------------// 将数据转换成BSYN格式的数据,准备向串口发送int CanverContentToBSYN(int comPort){ int i,p; unsigned char ch,chk; p=0; chk=0xaa^0xbb^Command; WriteBuffer[p++]=0xaa; WriteBuffer[p++]=0xbb; WriteBuffer[p++]=Command; for(i=0;i<DataLength;i++) { ch=DataBuffer[i]; chk=chk^ch; if(ch==0xaa) { WriteBuffer[p++]=ch; WriteBuffer[p++]=ch; chk=chk^ch; continue; } else WriteBuffer[p++]=ch; } WriteBuffer[p++]=0xaa; WriteBuffer[p++]=0xcc; chk=chk^0xaa^0xcc; WriteBuffer[p++]=chk; WDataLength=p; printf("STA\n"); for(i=0;i<WDataLength;i++) printf("%x ",WriteBuffer[i]); printf("\nEND\n");}//----------------------------------------------------------------------------// 将数据转换成6003格式的数据,准备向串口发送int CanverContentTo6003(int comPort){ unsigned char CheckCode; int i; WDataLength=0; WriteBuffer[WDataLength++]=P6003H; WriteBuffer[WDataLength++]=DataLength+1; WriteBuffer[WDataLength++]=Command; CheckCode=WriteBuffer[0]^WriteBuffer[1]^WriteBuffer[2]; if(DataLength>1) { for(i=0;i<DataLength;i++) { WriteBuffer[WDataLength++]=DataBuffer[i]; CheckCode=CheckCode^WriteBuffer[i+3]; } } WriteBuffer[WDataLength++]=CheckCode; WriteBuffer[WDataLength++]=P6003E; printf("Send To 6003 Content\n"); for(i=0;i<WDataLength;i++) printf("%x ",WriteBuffer[i]); printf("\n");}//-----------------------------------------------------------------------// 将接收到的BSYN格式的数据转换成普通数据格式// 函数执行正确,返回0 将接收的数据存放在DataBuffer中// 如果包头错误 反回 0xaadd 这是一条正应答// 如果包尾错误 返回 0xaaee 这是一条负应答// 如果校验值错误返回 0xccee 收到的数据校验和错误,但数据已经放在DataBuffer中// 如果要转换的数据长度为0 返回-1// 如果包头错误 返回 -2 同时要求重发该数据// 如果包尾错误 返回 -3 同时要求重发该数据//-----------------------------------------------------------------------int CanverBSYNToContent(int comPort){ int i,p; unsigned char tmp,ch,chk,rchk,buf[2]; if(RDataLength==0)return -1; if(ReadBuffer[0]==0xaa && ReadBuffer[1]==0xdd)return 0xaadd; if(ReadBuffer[0]==0xaa && ReadBuffer[1]==0xee) { WriteToComm(comPort,WDataLength); return 0xaaee; }/* if(ReadBuffer[0]!=0xaa && ReadBuffer[1]!=0xbb) { WriteBuffer[0]=0xaa; WriteBuffer[1]=0xee; WriteToComm(comPort,2); return -2; }*/ Command=ReadBuffer[2]; rchk=ReadBuffer[RDataLength-1]; p=0; ch=0; chk=ReadBuffer[0]^ReadBuffer[1]^ReadBuffer[2]; for(i=3;i<RDataLength;i++) { tmp=ch; ch=ReadBuffer[i]; chk=chk^ch; if(tmp==0xaa && ch==0xaa) { DataBuffer[p++]=ch; chk=chk^ch; continue; } else if(tmp==0xaa && ch==0xcc) { break; } else DataBuffer[p++]=ch; }/* if(chk!=rchk)//校验和如果错误后的处理,默认是应该查询设备状态还是要求重发? { buf[0]=0xaa; buf[1]=0xee; write(comPort,buf,2); DataLength=p; return 0xccee; }*/ WriteBuffer[0]=0xaa; WriteBuffer[1]=0xdd; WriteToComm(comPort,2); printf("Command is:%x\n",Command); for(i=0;i<DataLength;i++) printf("%x ",DataBuffer[i]); DataLength=p; return 0;}//-----------------------------------------------------------------------// 函数执行正确,返回0 将接收的数据存放在DataBuffer中// 如果包头错误 反回-1// 如果包尾错误 返回-2// 如果校验值错误返回-3//-----------------------------------------------------------------------int Canver6003ToContent(int comPort){ int LID,CID; int i; unsigned char GetCode; unsigned char CalCode; unsigned char EID; printf("6003 Content:\n"); for(i=0;i<RDataLength;i++) printf("%x ",ReadBuffer[i]); printf("\n"); if(ReadBuffer[0]!=P6003H)return -1; LID=ReadBuffer[1]; CID=ReadBuffer[2]; GetCode=ReadBuffer[3+LID-1]; CalCode=P6003H^LID^CID; EID=ReadBuffer[3+LID]; if(EID!=P6003E)return -2; for(i=0;i<LID-1;i++) CalCode=CalCode^ReadBuffer[i+3]; if(CalCode!=GetCode)return -3; for(i=0;i!=LID-1;i++) DataBuffer[i]=ReadBuffer[i+3]; Result=CID; if(Result==0xe0) { WriteToComm(HS3,WDataLength); } DataLength=LID; return 0;}//------------------------------------------------------------------------// 将接收到的数据形成数据报并发送到上一层程序int PopDataReport(){ DataReport dr; int i; dr.Type=DataType; dr.DataLength=DataLength; dr.StructLength=sizeof(dr); dr.Command=Command; dr.DeviceWord=DeviceWord; for(i=0;i<DataLength;i++) dr.Buffer[i]=DataBuffer[i]; DataLayerCall(&dr,DEBUG);}void PushDataReport(pDataReport pdr,unsigned char Debug){ unsigned char tmp,tmp1,ch; int i; DeviceControl dc; dc.DeviceWord=pdr->DeviceWord; DataType=pdr->Type; DataLength=pdr->DataLength; Command=pdr->Command; DeviceWord=pdr->DeviceWord; for(i=0;i<DataLength;i++) DataBuffer[i]=pdr->Buffer[i]; if(DataType==IOCONTROL) { CanverContentToBSYN(HS5); WriteToComm(HS5,WDataLength); } if(Debug) for(i=0;i<WDataLength;i++)printf("%c=%x ",WriteBuffer[i],WriteBuffer[i]);}void CLR_RTS(int comPort){ if(HS1==comPort)*(unsigned char*)COM1_MCR |=0x2; else if(HS2==comPort)*(unsigned char*)COM2_MCR |=0x2; else if(HS3==comPort)*(unsigned char*)COM3_MCR |=0x2; else if(HS4==comPort)*(unsigned char*)COM4_MCR |=0x2; else if(HS5==comPort)*(unsigned char*)COM5_MCR |=0x2;}void SET_RTS(int comPort){ if(HS1==comPort)*(unsigned char*)COM1_MCR &=0xfd; else if(HS2==comPort)*(unsigned char*)COM2_MCR &=0xfd; else if(HS3==comPort)*(unsigned char*)COM3_MCR &=0xfd; else if(HS4==comPort)*(unsigned char*)COM4_MCR &=0xfd; else if(HS5==comPort)*(unsigned char*)COM5_MCR &=0xfd;}int GET_RTS(int comPort){ unsigned char ch; if(HS1==comPort)ch=*(unsigned char*)COM1_MCR; if(HS2==comPort)ch=*(unsigned char*)COM2_MCR; if(HS3==comPort)ch=*(unsigned char*)COM3_MCR; if(HS4==comPort)ch=*(unsigned char*)COM4_MCR; if(HS5==comPort)ch=*(unsigned char*)COM5_MCR; ch&=0x02; if(ch==0)return 0; else return 1;}void CLR_DTR(int comPort){ if(HS1==comPort)*(unsigned char*)COM1_MCR |=0x1; else if(HS2==comPort)*(unsigned char*)COM2_MCR |=0x1; else if(HS3==comPort)*(unsigned char*)COM3_MCR |=0x1; else if(HS4==comPort)*(unsigned char*)COM4_MCR |=0x1; else if(HS5==comPort)*(unsigned char*)COM5_MCR |=0x1;}void SET_DTR(int comPort){ if(HS1==comPort)*(unsigned char*)COM1_MCR &=0xfe; else if(HS2==comPort)*(unsigned char*)COM2_MCR &=0xfe; else if(HS3==comPort)*(unsigned char*)COM3_MCR &=0xfe; else if(HS4==comPort)*(unsigned char*)COM4_MCR &=0xfe; else if(HS5==comPort)*(unsigned char*)COM5_MCR &=0xfe;}int GET_DTR(int comPort){ unsigned char ch; if(HS1==comPort)ch=*(unsigned char*)COM1_MCR; if(HS2==comPort)ch=*(unsigned char*)COM2_MCR; if(HS3==comPort)ch=*(unsigned char*)COM3_MCR; if(HS4==comPort)ch=*(unsigned char*)COM4_MCR; if(HS5==comPort)ch=*(unsigned char*)COM5_MCR; ch&=0x01; if(ch==0)return 0; else return 1;}int NeedSwitchMAPC(unsigned char State,int CurrentDevice){ byte_bit bb; bb.ch=State; SocketCommand.Command=FormatInterToInt(0xf932); SocketCommand.Content=CurrentDevice; SocketCommand.Buffer[0]=0x02; if(bb.bits.b5==1) { if(CurrentDevice==0) { PCMachine[0].Error='E'; if(PCMachine[1].Error=='E') { PCMachine[1].Error='N'; PrintToNetwork("500 1号卡机和2号卡机出现故障\n"); Leap(0x24,0x31);// AllDevices.CurrentUpPC=1; return 0; } AllDevices.CurrentUpPC=1; if(SocketConnect.Socket_Handle!=-1) send(SocketConnect.Socket_Handle,&SocketCommand,sizeof(SocketCommand),0); PrintToNetwork("500 1号卡机(上右)卡夹不在发卡位置,已切换到2号卡机(上左)\n"); } else if(CurrentDevice==1) { PCMachine[1].Error='E'; if(PCMachine[0].Error=='E') { PCMachine[0].Error='N'; PrintToNetwork("500 1号卡机和2号卡机出现故障\n"); Leap(0x24,0x31);// AllDevices.CurrentUpPC=0; return 0; } AllDevices.CurrentUpPC=0; if(SocketConnect.Socket_Handle!=-1) send(SocketConnect.Socket_Handle,&SocketCommand,sizeof(SocketCommand),0); PrintToNetwork("501 2号卡机(上左)卡夹不在发卡位置,已切换到1号卡机(上右)\n"); } else if(CurrentDevice==2) { PCMachine[2].Error='E'; if(PCMachine[3].Error=='E') { PCMachine[3].Error='N'; PrintToNetwork("500 1号卡机和2号卡机出现故障\n"); Leap(0x24,0x33);// AllDevices.CurrentDownPC=3; return 0; } AllDevices.CurrentDownPC=3; if(SocketConnect.Socket_Handle!=-1) send(SocketConnect.Socket_Handle,&SocketCommand,sizeof(SocketCommand),0); PrintToNetwork("502 3号卡机(下右)卡夹不在发卡位置,已切换到4号卡机(下左)\n"); } else if(CurrentDevice==3) { PCMachine[3].Error='E'; if(PCMachine[2].Error=='E') { PCMachine[2].Error='N'; PrintToNetwork("500 1号卡机和2号卡机出现故障\n"); Leap(0x24,0x33);// AllDevices.CurrentDownPC=2; return 0; } AllDevices.CurrentDownPC=2; if(SocketConnect.Socket_Handle!=-1) send(SocketConnect.Socket_Handle,&SocketCommand,sizeof(SocketCommand),0); PrintToNetwork("503 4号卡机(下左)卡夹不在发卡位置,已切换到3号卡机(下右)\n"); } return -3; } else if(bb.bits.b5==0 && bb.bits.b1==0) { if(CurrentDevice==0) {// PCMachine[0].Error='E'; if(PCMachine[1].Error=='E') { PCMachine[1].Error='N'; PrintToNetwork("500 1号卡机和2号卡机出现故障\n"); Leap(0x24,0x31);// AllDevices.CurrentUpPC=1; return 0; } AllDevices.CurrentUpPC=1; if(SocketConnect.Socket_Handle!=-1) send(SocketConnect.Socket_Handle,&SocketCommand,sizeof(SocketCommand),0); PrintToNetwork("510 1号卡机(上右)卡已经发完,请及时更换,现已切换到2号卡机(上左)\n"); } else if(CurrentDevice==1) {// PCMachine[1].Error='E'; if(PCMachine[0].Error=='E') { PCMachine[0].Error='N'; PrintToNetwork("500 1号卡机和2号卡机出现故障\n"); Leap(0x24,0x31);// AllDevices.CurrentUpPC=0; return 0; } AllDevices.CurrentUpPC=0; if(SocketConnect.Socket_Handle!=-1) send(SocketConnect.Socket_Handle,&SocketCommand,sizeof(SocketCommand),0); PrintToNetwork("511 2号卡机(上左)卡已经发完,请及时更换,现已切换到1号卡机(上右)\n"); } else if(CurrentDevice==2) {// PCMachine[2].Error='E'; if(PCMachine[3].Error=='E') { PCMachine[3].Error='N'; PrintToNetwork("500 1号卡机和2号卡机出现故障\n"); Leap(0x24,0x33);// AllDevices.CurrentDownPC=3; return 0; } AllDevices.CurrentDownPC=3; if(SocketConnect.Socket_Handle!=-1) send(SocketConnect.Socket_Handle,&SocketCommand,sizeof(SocketCommand),0); PrintToNetwork("512 3号卡机(下右)卡已经发完,请及时更换,现已切换到4号卡机(下左)\n"); } else if(CurrentDevice==3) {// PCMachine[3].Error='E'; if(PCMachine[2].Error=='E') { PCMachine[2].Error='N'; PrintToNetwork("500 1号卡机和2号卡机出现故障\n");
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -