📄 publishcard.~c
字号:
#include "PublishCard.h"int BCDtoDEC(char HeightChar,char LowChar){ char buf[4]; char *p; buf[3]='\0'; p=&buf[0]; buf[0]=(HeightChar&0x0f)+0x30; buf[1]=(LowChar>>4 & 0x0f)+0x30; buf[2]=(LowChar&0x0f)+0x30; return p;}int SwitchMAPC(int DeviceIndex){ int rel; switch(DeviceIndex) { case 0:rel=1;break; case 1:rel=0;break; case 2:rel=3;break; case 3:rel=2;break; } return rel;}int SwitchMAPCWithTrue(int DeviceIndex){ int rel; switch(DeviceIndex) { case 0:rel=1;AllDevices.CurrentUpPC=1;SET_RTS(HS4);break; case 1:rel=0;AllDevices.CurrentUpPC=0;CLR_RTS(HS4);break; case 2:rel=3;AllDevices.CurrentDownPC=3;SET_RTS(HS2);break; case 3:rel=2;AllDevices.CurrentDownPC=2;CLR_RTS(HS2);break; } return rel;}int CarderState(int Device_Handle,int DeviceIndex){ PCMachine[DeviceIndex].State=0xa2; MAPCState=DeviceIndex; Command=0x06; DataLength=0; CanverContentToBSYN(Device_Handle); WriteToComm(Device_Handle,WDataLength); ShortBlockDetect(Device_Handle); if(ReadFromComm(Device_Handle,0)==-2) { VoiceControl(0x0b); ReadyCard(Device_Handle,SwitchMAPCWithTrue(DeviceIndex)); inBusy=0; return -2; } return 0;}int ReadyCard(int Device_Handle,int DeviceIndex){ PCMachine[DeviceIndex].State=0xa0; MAPCState=DeviceIndex; Command=0x05; DataLength=0; CanverContentToBSYN(Device_Handle); WriteToComm(Device_Handle,WDataLength); ShortBlockDetect(Device_Handle); if(ReadFromComm(Device_Handle,0)==-2)return -2;/* ShortBlockDetect(Device_Handle); ReadFromComm(Device_Handle,0); return NeedSwitch(DataBuffer[0],Device_Handle,DeviceIndex);*/ inBusy=0x55aa; return 0;}int OutCard(int Device_Handle,int DeviceIndex){ if(CardKeep==1) { if(ReadyCard(Device_Handle,DeviceIndex)==-2) ReadyCard(Device_Handle,SwitchMAPCWithTrue(DeviceIndex)); ShortBlockDetect(Device_Handle); ReadFromComm(Device_Handle,0); inBusy=0; if((DataBuffer[0] & 0x10)==0x10)return 0; else CardKeep=0; } PCMachine[DeviceIndex].State=0xa1; MAPCState=DeviceIndex; Command=0x01; DataLength=0; CanverContentToBSYN(Device_Handle); WriteToComm(Device_Handle,WDataLength); ReadFromComm(Device_Handle,0); CardKeep=1;}int NeedSwitch(unsigned char State,int Device_Handle,int DeviceIndex){ byte_bit bb; int st; bb.ch=State; st=DeviceIndex; if(bb.bits.b5==1 && bb.bits.b0==0)//卡夹不在位 return -2; else if(bb.bits.b5==0 && bb.bits.b1==0 && bb.bits.b6==0 && bb.bits.b0==0)//卡已经发完 return -2; else if(bb.bits.b5==0 && bb.bits.b1==1 && bb.bits.b6==0 && bb.bits.b0==0)//卡机故障 return -2; else if(bb.bits.b0==0 && PCMachine[DeviceIndex].State==0xa0) return -1; else if(bb.bits.b0==1 && PCMachine[DeviceIndex].State==0xa0) return 0; else if(bb.bits.b4==0 && PCMachine[DeviceIndex].State==0xa1) return 0;}int InitializeMAPC(){ int m1,m2; byte_bit bb; Command=0x06; DataLength=0; CanverContentToBSYN(HS4); WriteToComm(HS4,WDataLength); ShortBlockDetect(HS4); ReadFromComm(HS4,0); ShortBlockDetect(HS4); ReadFromComm(HS4,0); m1=-1; PCMachine[0].CardNumber=BCDtoDEC(DataBuffer[1],DataBuffer[2]); bb.ch=DataBuffer[0]; if(bb.bits.b5==1) //no card packeg { AllDevices.CurrentUpPC=UPLEFT; PCMachine[0].State=0x02; } else if(bb.bits.b1==0) //no card { AllDevices.CurrentUpPC=UPLEFT; } else m1=0; PCMachine[0].State=0x00; PCMachine[0].State=0x00; PCMachine[0].MaxCard=450; PCMachine[0].Params=0; PCMachine[0].ID=0;#ifdef __DEBUG__ printf("MAPC1 Data is:"); for(m2=0;m2<DataLength;m2++) printf("%x ",DataBuffer[m2]); printf("\nMAPC1 Card Number is:%x ID is:%x MAX Card is:%x\n",PCMachine[0].CardNumber,PCMachine[0].ID,PCMachine[0].MaxCard);#endif bzero(&DataBuffer,DataLength); Command=0x06; DataLength=0; SET_RTS(HS4); CanverContentToBSYN(HS4); WriteToComm(HS4,WDataLength); ShortBlockDetect(HS4); ReadFromComm(HS4,0); ShortBlockDetect(HS4); ReadFromComm(HS4,0); CLR_RTS(HS4); PCMachine[1].CardNumber=BCDtoDEC(DataBuffer[1],DataBuffer[2]); bb.ch=DataBuffer[0]; if(m1==-1) { if(bb.bits.b5==1) //no card packeg { // AllDevices.CurrentUpPC=1; PrintToNetwork("1号和2号卡机没有卡夹,请及时处理\n"); PCMachine[1].State=0x02; } else if(bb.bits.b1==0) //no card { // AllDevices.CurrentUpPC=1; PrintToNetwork("1号和2号卡机无卡,请及时处理\n"); PCMachine[1].State=0x01; } else AllDevices.CurrentUpPC=UPRIGHT; } PCMachine[1].State=0x00; PCMachine[1].MaxCard=450; PCMachine[1].Params=0; PCMachine[1].ID=0;#ifdef __DEBUG__ printf("MAPC2 Data is:"); for(m2=0;m2<DataLength;m2++) printf("%x ",DataBuffer[m2]); printf("\nMAPC2 Card Number is:%x ID is:%i MAX Card is:%i\n",PCMachine[1].CardNumber,PCMachine[1].ID,PCMachine[1].MaxCard);#endif Command=0x06; DataLength=0; CanverContentToBSYN(HS4); m2=-1; WriteToComm(HS2,WDataLength); ShortBlockDetect(HS2); ReadFromComm(HS2,0); ShortBlockDetect(HS2); ReadFromComm(HS2,0); PCMachine[2].CardNumber=BCDtoDEC(DataBuffer[1],DataBuffer[2]); bb.ch=DataBuffer[0]; if(bb.bits.b5==1) { AllDevices.CurrentDownPC=3; PCMachine[2].State=0x02; } else if(bb.bits.b1==0) { AllDevices.CurrentDownPC=3; PCMachine[2].State=0x01; } else m2=2; PCMachine[2].State=0x00; PCMachine[2].State=0x00; PCMachine[2].MaxCard=450; PCMachine[2].Params=0; PCMachine[2].ID=0;#ifdef __DEBUG__ printf("MAPC3 Data is:"); for(m2=0;m2<DataLength;m2++) printf("%x ",DataBuffer[m2]); printf("\nMAPC3 Card Number is:%x ID is:%x MAX Card is:%x\n",PCMachine[2].CardNumber,PCMachine[2].ID,PCMachine[2].MaxCard);#endif Command=0x06; DataLength=0; SET_RTS(HS2); CanverContentToBSYN(HS4); WriteToComm(HS2,WDataLength); ShortBlockDetect(HS2); ReadFromComm(HS2,0); ShortBlockDetect(HS2); ReadFromComm(HS2,0); CLR_RTS(HS2); PCMachine[3].CardNumber=BCDtoDEC(DataBuffer[1],DataBuffer[2]); bb.ch=DataBuffer[0]; if(m2==-1) { if(bb.bits.b5==1) { PrintToNetwork("3号和4号卡机没有卡夹,请及时处理\n"); PCMachine[3].State=0x02; } else if(bb.bits.b1==0) { PrintToNetwork("3号和4号卡机无卡,请及时处理\n"); PCMachine[3].State=0x01; } else AllDevices.CurrentDownPC=3; } PCMachine[3].State=0x00; PCMachine[3].State=0x00; PCMachine[3].MaxCard=450; PCMachine[3].Params=0; PCMachine[3].ID=0;#ifdef __DEBUG__ printf("MAPC4 Data is:"); for(m2=0;m2<DataLength;m2++) printf("%x ",DataBuffer[m2]); printf("\nMAPC4 Card Number is:%x ID is:%x MAX Card is:%x\n",PCMachine[3].CardNumber,PCMachine[3].ID,PCMachine[3].MaxCard);#endif Errorcount=0; CardKeep=0; return 0;}int ExecMAPCFunc(unsigned char comm,int Device_Handle,int DeviceIndex){ byte_bit bb; int rel; bb.ch=DataBuffer[0]; if(Device_Handle==HS2)DeviceIndex+=2;#ifdef __DEBUG__ printf("in ExecMAPC Func DeviceIndex is:%i--%i",DeviceIndex,MAPCState);#endif if(bb.bits.b4==0 && PCMachine[DeviceIndex].State==0xa1) { PCMachine[DeviceIndex].State=0x00; CardKeep=0; inBusy=0;// printf("card out ok123"); PrintToNetwork("卡已经被取走\n"); VoiceControl(0x05); switch(DeviceIndex) { case 0:Leap(0x42,0x00,0x00);break; case 1:Leap(0x42,0x01,0x00);break; case 2:Leap(0x42,0x02,0x00);break; case 3:Leap(0x42,0x03,0x00);break; } if(ReadyCard(Device_Handle,DeviceIndex)==-2) ReadyCard(HS2,SwitchMAPCWithTrue(DeviceIndex)); AllDevices.Publish='Y'; return 0; } else if(bb.bits.b0==1 && PCMachine[DeviceIndex].State==0xa0) {// printf("Card Ready OK!!!"); PrintToNetwork("卡片已准备好\n"); PCMachine[DeviceIndex].State=0x00; CardKeep=0; inBusy=0; if(MLoop==0x5a) OutCard(Device_Handle,DeviceIndex); return 0; } else if(bb.bits.b0==0 && PCMachine[DeviceIndex].State==0xa0) { if(CardKeep==1) { CardKeep=0; VoiceControl(0x05); switch(DeviceIndex) { case 0:Leap(0x42,0x00,0x00);break; case 1:Leap(0x42,0x01,0x00);break; case 2:Leap(0x42,0x02,0x00);break; case 3:Leap(0x42,0x03,0x00);break; } if(ReadyCard(Device_Handle,DeviceIndex)==-2) ReadyCard(HS2,SwitchMAPCWithTrue(DeviceIndex)); inBusy=0; return 0; } PCMachine[DeviceIndex].State=0x00;// VoiceControl(0x04); PrintToNetwork("卡片准备失败,可能已经卡卡,请及时处理\n"); if(ReadyCard(Device_Handle,SwitchMAPCWithTrue(DeviceIndex))==-2) ReadyCard(HS2,SwitchMAPCWithTrue(DeviceIndex)); inBusy=0; return 0; } else if(bb.bits.b5==0 && bb.bits.b1==0 && bb.bits.b6==0 && bb.bits.b0==0)//modifyed { PCMachine[DeviceIndex].State=0x00;// VoiceControl(0x03); PrintToNetwork("卡夹中无卡,请更换\n"); if(ReadyCard(Device_Handle,SwitchMAPCWithTrue(DeviceIndex))==-2) ReadyCard(HS2,SwitchMAPCWithTrue(DeviceIndex)); inBusy=0; return 0; } else if(bb.bits.b5==0 && bb.bits.b1==1 && bb.bits.b6==0 && bb.bits.b0==0) { PCMachine[DeviceIndex].State=0x00;// VoiceControl(0x03); PrintToNetwork("卡夹中有卡,但准备卡片失败\n"); if(ReadyCard(Device_Handle,SwitchMAPCWithTrue(DeviceIndex))==-2) ReadyCard(HS2,SwitchMAPCWithTrue(DeviceIndex)); inBusy=0; return 0; } else if(bb.bits.b5==1 && bb.bits.b0==0) { PCMachine[DeviceIndex].State=0x00;// VoiceControl(0x03); PrintToNetwork("卡夹不在位,请更换\n"); if(ReadyCard(Device_Handle,SwitchMAPCWithTrue(DeviceIndex))==-2) ReadyCard(HS2,SwitchMAPCWithTrue(DeviceIndex)); inBusy=0; return 0; }}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -