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

📄 old_common.c~

📁 linux serial example
💻 C~
📖 第 1 页 / 共 4 页
字号:
    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 + -