/* DEMO35.C StopWatch 0--> for Led ON/OFF StopWatch 1--> for change 7000 device StopWatch 2--> for measure 7000's response time StopWatch 3--> for EasyView (Read) Timeout COM1: SST-2400 COM2: Addr #2:7021 Addr #3:7017 Addr #4:7060 COM3: Touch 200(EasyView) EasyView Data: W 0: Page no W 1: Bit 3-0 --> 7060 DO Bit 7-4 --> 7060 DI W 2: 7017 A/D channel 0 W 4: 7017 A/D channel 1 W 6: 7017 A/D channel 2 W 8: 7017 A/D channel 3 W 10: 7017 A/D channel 4 W 12: 7017 A/D channel 5 W 14: 7017 A/D channel 6 W 16: 7017 A/D channel 7 W 20: 7021 D/A output W 22: 7013 COM4: PC2 */ #include #include #include #include #include "..\lib\7188.h" #define NoError 0 #define Error 1 #define NoCard 2 #define DLE 0x10 #define STX 0x02 #define ACK 0x06 #define NAK 0x15 #define ETX 0x03 #define DATA_SIZE 30 #define TimeoutFor7000 800L #define Time7021 500 #define StopWatchLed 0 #define StopWatch7000Device 1 #define StopWatch7000Response 2 #define StopWatchEasyView 3 #define StopWatchCom1 5 /* #define _DEBUG_COM1 */ extern unsigned _stklen=8192; int EchoCom1Msg=0; unsigned Data7[512]; unsigned NewData[DATA_SIZE]; unsigned StepCount=0; char szCmd1[80]; unsigned OldPulseCount=9999; unsigned PulseCount=0; int StopCounter=0; int Stop=0; int CountUp=1; unsigned int CountHigh=12,CountLow=24; int Period[16]={ 2,3,4,5,6,7,8,10,12,14,16,18,21,24,27,30 }; int ComPort=3; /* this value can be 1/3/4 --> COM 1/3/4 */ int fNewDemoMode=0; float data0=100.00; float data1=200.00; float data2=300.00; float data3=400.00; float da=50.000; float ad=60.000; int DO1=0x0A; int DO2=0x05; char inbuf4[20]; int Inidx4=0; int DemoMode=1; int WriteToEasyview1(int addr, unsigned int value); int WriteToEasyview2(int addr, int onoff); int WriteToEasyview3(int addr, unsigned *value,int datano); int Set7060(unsigned data); int fSend7021=0,fSwitchData=1; /* ------------------------------------------------------------------- */ int IsCom3OutBufEmpty(void); /* ------------------------------------------------------------------- */ int SendDataToCom(char *buf,int no) { int ret; for(;no;no--){ ret=ToCom(ComPort,*buf++); } return ret; } unsigned char EasyViewInBuf[256]; int EasyViewInBufIdx; unsigned char EasyViewOutBuf[256]; int EasyViewOutBufIdx; int TouchType, TouchAddr, TouchValue; int IsDLE=0,DataLength; int fSet7060=1; int EasyViewError=0; int fReadEasyView=0; int fShowDataType=0; int Data7060=0; int bEasyViewTimeout=0; int HasDataToEasyView=0,WaitEasyViewACK=0,WaitEasyViewACK2=0; int WriteToEasyview1(int addr, unsigned int value) { unsigned char xor=0; unsigned char c; if(HasDataToEasyView) return 1; EasyViewOutBufIdx=0; EasyViewOutBuf[EasyViewOutBufIdx++]=1; xor^=1; c=*(unsigned char*)&addr; /* addr Low */ EasyViewOutBuf[EasyViewOutBufIdx++]=c; xor^=c; if(c==DLE){ EasyViewOutBuf[EasyViewOutBufIdx++]=c; xor^=c; } c=*((unsigned char*)&addr+1); /* addr High */ EasyViewOutBuf[EasyViewOutBufIdx++]=c; xor^=c; if(c==DLE){ EasyViewOutBuf[EasyViewOutBufIdx++]=c; xor^=c; } EasyViewOutBuf[EasyViewOutBufIdx++]=2; xor^=2; c=*(unsigned char*)&value; /* vlaue Low */ EasyViewOutBuf[EasyViewOutBufIdx++]=c; xor^=c; if(c==DLE){ EasyViewOutBuf[EasyViewOutBufIdx++]=c; xor^=c; } c=*((unsigned char*)&value+1); /* value High */ EasyViewOutBuf[EasyViewOutBufIdx++]=c; xor^=c; if(c==DLE){ EasyViewOutBuf[EasyViewOutBufIdx++]=c; xor^=c; } EasyViewOutBuf[EasyViewOutBufIdx++]=DLE; xor^=DLE; EasyViewOutBuf[EasyViewOutBufIdx++]=ETX; xor^=ETX; EasyViewOutBuf[EasyViewOutBufIdx++]=xor; /* set HasDataToEasyView to 1, so MoniterComForEasyview() will send out data */ HasDataToEasyView=1; /* printf("\nAddr=%02X,Value=%04X\n",addr,value); */ return NoError; } int WriteToEasyview2(int addr,int onoff) { unsigned char xor=0; unsigned char c; if(HasDataToEasyView) return 1; EasyViewOutBufIdx=0; EasyViewOutBuf[EasyViewOutBufIdx++]=1; xor^=1; c=*(unsigned char*)&addr; /* addr Low */ EasyViewOutBuf[EasyViewOutBufIdx++]=c; xor^=c; if(c==DLE){ EasyViewOutBuf[EasyViewOutBufIdx++]=c; xor^=c; } c=*((unsigned char*)&addr+1); /* addr High */ EasyViewOutBuf[EasyViewOutBufIdx++]=c; xor^=c; if(c==DLE){ EasyViewOutBuf[EasyViewOutBufIdx++]=c; xor^=c; } if(onoff) onoff=1; EasyViewOutBuf[EasyViewOutBufIdx++]=onoff; xor^=onoff; EasyViewOutBuf[EasyViewOutBufIdx++]=DLE; xor^=DLE; EasyViewOutBuf[EasyViewOutBufIdx++]=ETX; xor^=ETX; EasyViewOutBuf[EasyViewOutBufIdx++]=xor; /* set HasDataToEasyView to 1, so MoniterComForEasyview() will send out data */ HasDataToEasyView=1; /* printf("\nAddr=%02X,Value=%04X\n",addr,value); */ return NoError; } int WriteToEasyview3(int addr, unsigned *value,int datano) { unsigned char xor=0; unsigned char *c; int i; datano<<=1; if(HasDataToEasyView) return 1; EasyViewOutBufIdx=0; EasyViewOutBuf[EasyViewOutBufIdx++]=1; xor^=1; c=(unsigned char*)&addr; /* addr Low */ EasyViewOutBuf[EasyViewOutBufIdx++]=*c; xor^=*c; if(*c==DLE){ EasyViewOutBuf[EasyViewOutBufIdx++]=*c; xor^=*c; } c++; /* addr High */ EasyViewOutBuf[EasyViewOutBufIdx++]=*c; xor^=*c; if(*c==DLE){ EasyViewOutBuf[EasyViewOutBufIdx++]=*c; xor^=*c; } EasyViewOutBuf[EasyViewOutBufIdx++]=datano; xor^=datano; if(datano==DLE){ EasyViewOutBuf[EasyViewOutBufIdx++]=datano; xor^=datano; } c=(unsigned char *)value; for(i=0;i=16 && TouchAddr<=19){ if(TouchValue) Data7060 |= 1<<(TouchAddr&0x0F); else Data7060 &=~(1<<(TouchAddr&0x0F)); fSet7060++; fSwitchData=1; } } /* printf("Addr=%d,val=%d",TouchAddr,TouchValue); fReadEasyView=1; */ } static int EasyViewMode=4; static int WaitSendData=0; unsigned long EasyViewTime; void MonitorCom2For485(void); void MoniterComForEasyview(void) { int c,k; switch(EasyViewMode){ case 0: /* for read_touch7 */ StopWatchReadValue(StopWatchEasyView,&EasyViewTime); if(EasyViewTime>=2000){ bEasyViewTimeout=1; EasyViewMode=4; } while(IsCom(ComPort)){ c=ReadCom(ComPort); if(EasyViewInBufIdx==0){ IsDLE=0; if (c==1) { TouchType=1; DataLength=9; /* this is minmum length */ fShowDataType++; } else if (c==2) { TouchType=2; DataLength=7; fShowDataType++; } else { EasyViewError=-1; EasyViewMode=0; break; } } else if(EasyViewInBufIdx==3 && !IsDLE && TouchType==1){ DataLength=c+7; fShowDataType++; } if(c==DLE){ if(IsDLE){ IsDLE=0; } else { EasyViewInBuf[EasyViewInBufIdx]=c; EasyViewInBufIdx++; IsDLE=1; } } else { EasyViewInBuf[EasyViewInBufIdx]=c; EasyViewInBufIdx++; IsDLE=0; } if(EasyViewInBufIdx==DataLength){ ToCom(ComPort,ACK); /* send ACK to EASYVIEW */ fReadEasyView=1; EasyViewMode=4; /* back to wait mode */ break; } } break; case 1: /*/ for WriteToEasyview1/2/3 */ StopWatchReadValue(StopWatchEasyView,&EasyViewTime); if(WaitEasyViewACK){ if(IsCom(ComPort)){ c=ReadCom(ComPort); if(c==ACK){ WaitEasyViewACK=0; WaitSendData=1; SendDataToCom(EasyViewOutBuf,EasyViewOutBufIdx); StopWatchStart(StopWatchEasyView); WaitEasyViewACK2=1; /**** // printf("\nEnd Send data"); */ } else if(c==NAK) { /* EasyView is busy. */ EasyViewMode=4; } else if(c==STX){ /* EasyView want Send data */ ToCom(ComPort,ACK); /* send ACK to EASYVIEW */ EasyViewMode=1; EasyViewInBufIdx=0; IsDLE=0; StopWatchStart(StopWatchEasyView); } else { /* error echo */ EasyViewMode=4; } } else { if(EasyViewTime>2000){ /* Timeout */ EasyViewMode=4; WaitEasyViewACK=0; /* printf("\nTimeout 1"); */ } } } else if(WaitEasyViewACK2){ if(IsCom(ComPort)){ c=ReadCom(ComPort); if(c==ACK){ /* printf("\nWrite 1 End"); */ HasDataToEasyView=0; EasyViewMode=4; WaitEasyViewACK2=0; } else if(c==NAK) { /* EasyView receive data error. must send again..*/ EasyViewMode=4; WaitEasyViewACK2=0; } else { /* Error echo */ EasyViewMode=4; WaitEasyViewACK2=0; } } else { if(EasyViewTime>2000){ /* Timeout */ EasyViewMode=4; WaitEasyViewACK2=0; /* printf("\nTimeout 2"); */ } } } else if(WaitSendData){ if(IsCom3OutBufEmpty()){ SendDataToCom(EasyViewOutBuf,EasyViewOutBufIdx); StopWatchStart(StopWatchEasyView); WaitEasyViewACK2=1; /* printf("\nEnd Send data"); */ WaitSendData=0; } } break; case 4: /* for Wait Mode */ if(IsCom(ComPort)) { c=ReadCom(ComPort); if(c==STX){ /* receive STX from easyview */ ToCom(ComPort,ACK); /* send ACK to EASYVIEW */ EasyViewMode=0; EasyViewInBufIdx=0; IsDLE=0; StopWatchStart(StopWatchEasyView); } } else if(HasDataToEasyView){ EasyViewMode=HasDataToEasyView; /* 1,2,3 */ ToCom(ComPort,STX); /* send STX to EASYVIEW */ WaitEasyViewACK=1; StopWatchStart(StopWatchEasyView); } break; } MonitorCom2For485(); /* for COM connect to 7000's*/ } int Mode485=0; int LastMode485; int Wait485=0; unsigned char Buf485[120]; int Buf485Idx; void MonitorCom2For485(void) { if(Wait485){ int data; while(IsCom(2)){ data=ReadCom(2); if(data=='\r'){ Buf485[Buf485Idx]=0; Wait485=0; return; } else Buf485[Buf485Idx++]=data; } } } static unsigned Serror7017=0,Rerror7017=0; static unsigned Serror7060=0,Rerror7060=0; static unsigned Serror7021=0,Rerror7021=0; int Wait7060=0,Wait7060Out=0; int Wait7017=0; int Wait7021=0; unsigned long TimeOutPeriod=500; /* 0.5sec */ void Run7000(void) { unsigned long WaitTime; int NoCmd=0; int ret; static int cnt7021=0; StopWatchReadValue(StopWatch7000Response,&WaitTime); switch(Mode485){ Out7060: case 0: /* for 7060 input. */ if(!Wait7060){ ret=SendCmdTo7000(2,"@04",0); if(ret) { Mode485=2; Serror7060++; /* printf("[S60Err]=%u ret=%d",Serror7060,ret); */ NoCmd=1; } else { Wait7060=Wait485=1; Buf485Idx=0; StopWatchStart(StopWatch7000Response); } } else { if(!Wait485){ static int OldValue=0xfff; int value; Wait7060=0; Mode485=2; /* process 7060 data */ value=0xF^ascii_to_hex(Buf485[4]); /* value=input data */ if(value!=OldValue){ OldValue=value; fSwitchData=1; if(!(value & 0x4)){ PulseCount=0; /* reset pulse count */ StopCounter=1; } else StopCounter=0; if(value & 0x1){ Stop=0; } else { Stop=1; } if(value & 0x2){ void SetDtrHigh(void); SetDtrHigh(); CountUp=1; } else { void SetDtrLow(void); SetDtrLow(); CountUp=0; } value<<=4; Data7060=(Data7060&0xFF0F)|value; } /* printf("\n7060-->%s",Buf485); */ NoCmd=1; } else { if(WaitTime>TimeOutPeriod){ Wait7060=0; Mode485=2; /* printf("\n7060 timeout");*/ NoCmd=1; } } } break; case 2: /* for 7017 */ if(!Wait7017){ ret=SendCmdTo7000(2,"$03A",0); if(ret) { Mode485=3; Serror7017++; /* printf("[S17Err]=%u ret=%d",Serror7017,ret); */ NoCmd=1; } else { Wait7017=Wait485=1; Buf485Idx=0; StopWatchStart(StopWatch7000Response); } } else { if(!Wait485){ int value,i,j; char *ptr; Wait7017=0; Mode485=3; /* process 7017 data */ ptr=Buf485+1; for(i=0;i<8;i++){ value=0; for(j=0;j<4;j++){ value<<=4; value|=ascii_to_hex(*ptr++); } NewData[2+i*2]=(int)((value*40000L)>>16); if(i==0) ad=value*10.0/32768.0; } /* printf("\n7017-->%s",Buf485);*/ NoCmd=1; } else { if(WaitTime>TimeOutPeriod){ Wait7017=0; Mode485=3; /* printf("\n7017 timeout");*/ NoCmd=1; } } } break; case 3: /* for 7021 */ if(!fSend7021){ Mode485=0; goto Out7060; } if(!Wait7021){ static int mode7021=1; char cmd[12]="#0200.000"; char buf[10]; if(mode7021){ cnt7021++; if(cnt7021>=20) mode7021=0; } else { cnt7021--; if(cnt7021<=0) mode7021=1; } cmd[3]='0'+cnt7021/10; cmd[4]='0'+cnt7021%10; ret=SendCmdTo7000(2,cmd,0); if(ret) { Mode485=3; Serror7021++; /* printf("[S21Err]=%u ret=%d",Serror7021,ret); */ NoCmd=1; fSend7021=0; } else { /* printf("\n%s-->7021",cmd); */ Wait7021=Wait485=1; Buf485Idx=0; StopWatchStart(StopWatch7000Response); } } else { if(!Wait485){ int value,i,j; char *ptr; Wait7021=0; Mode485=0; NoCmd=1; fSend7021=0; da=cnt7021; } else { if(WaitTime>TimeOutPeriod){ Wait7021=0; Mode485=0; fSend7021=0; /* printf("\n7021 timeout");*/ NoCmd=1; } } } break; case 4: /* set 7060 output */ if(!Wait7060Out){ char cmd[5]="@040"; cmd[3]=hex_to_ascii[Data7060&0x0F]; CountHigh=Period[(~Data7060)&0x0F]; CountLow=CountHigh*2; ret=SendCmdTo7000(2,cmd,0); if(ret) { Mode485=LastMode485; Serror7060++; /* printf("[S60Err]=%u ret=%d",Serror7060,ret); */ NoCmd=1; } else { /* Show5DigitLed(1,Data7060); */ Wait7060Out=Wait485=1; Buf485Idx=0; StopWatchStart(StopWatch7000Response); } } else { if(!Wait485){ Wait7060Out=0; Mode485=LastMode485; NoCmd=1; DO2=Data7060&0x0F; } else { if(WaitTime>TimeOutPeriod){ Wait7060Out=0; Mode485=LastMode485; /* printf("\n7060 Out timeout"); */ NoCmd=1; } } } break; } if(NoCmd){ if(fSet7060){ fSet7060=0; LastMode485=Mode485; Mode485=4; } } } void DataOut(void) { int ret; int i; if(HasDataToEasyView) return; if(fSwitchData){ ret=WriteToEasyview1(1,Data7060); if(ret!=NoError){ /* printf("\nErr:EasyView ComPort Busy");*/ } else fSwitchData=0; } else { for(i=2;i<=22;i++) Data7[i]=NewData[i]; ret=WriteToEasyview3(2,&Data7[2],22); if(ret!=NoError){ /* printf("\nErr:EasyView ComPort Busy");*/ } } } #define Mcr 0x04 /* modem control reg */ #define Msr 0x06 /* modem status reg */ int iBase1=0x200; void SetDtrHigh(void) { outp(iBase1+Mcr,inp(iBase1+Mcr)|1); } void SetDtrLow(void) { outp(iBase1+Mcr,inp(iBase1+Mcr)&~1); } void SetRtsHigh(void) { outp(iBase1+Mcr,inp(iBase1+Mcr)|2); } void SetRtsLow(void) { outp(iBase1+Mcr,inp(iBase1+Mcr)&~2); } int InMode=0,PulseMode=0; int Accmode=0; void StepMotor(void) { static unsigned int cnt=0; static int cnt7021=0; int mode; cnt7021++; if(cnt7021>=Time7021) { cnt7021=0; fSend7021=1; } if(!Stop){ cnt++; if(cnt==CountHigh){ SetRtsHigh(); } else if(cnt>=CountLow){ SetRtsLow(); cnt=0; } } mode=inp(iBase1+Msr)&0x10; if(mode){ InMode++; if(InMode>=3){ InMode=3; if(PulseMode==0){ PulseMode=1; if(!StopCounter) { if(CountUp) PulseCount++; else PulseCount--; } } } } else { InMode--; if(InMode<=-3){ InMode=-3; if(PulseMode==1){ PulseMode=0; } } } } unsigned Data30[5]={0,0,0,0,0}; char outbuf4[120]; void ResponseCmd4(char *buf) { if(buf[0]=='@'){ switch(buf[1]){ case '0': sprintf(outbuf4,">0%+7.2f\r",data0); ToCom4Str(outbuf4); break; case '1': sprintf(outbuf4,">1%+7.2f\r",data1); ToCom4Str(outbuf4); break; case '2': sprintf(outbuf4,">2%+7.2f\r",data2); ToCom4Str(outbuf4); break; case '3': sprintf(outbuf4,">3%+7.2f\r",data3); ToCom4Str(outbuf4); break; case '4': sprintf(outbuf4,">4%02X\r",DO1); ToCom4Str(outbuf4); break; case '5': sprintf(outbuf4,">5%d\r",DemoMode); ToCom4Str(outbuf4); break; case '6': sprintf(outbuf4,">6%+7.3f\r",da); ToCom4Str(outbuf4); break; case '7': sprintf(outbuf4,">7%+7.3f\r",ad); ToCom4Str(outbuf4); break; case '8': sprintf(outbuf4,">8%X\r",DO2); ToCom4Str(outbuf4); break; case '9': if(buf[2]=='1' || buf[2]=='2'){ DemoMode=buf[2]-'0'; ToCom4Str(DemoMode==1 ? ">91\r":">92\r"); Show5DigitLedWithDot(1,DemoMode); fNewDemoMode=1; } else { ToCom4Str("?9\r"); } break; } } else { ToCom4Str("?\r"); } } int Com1Mode=0; int Com1CmdMode=0; char _Com1OutBuf[10]; char _Com1InBuf[20]; int Com1Idx=0; void SendCom1Cmd(unsigned char *cmd) { unsigned char sum=0; while(*cmd){ ToCom1(*cmd); sum+=*cmd++; } ToCom1(hex_to_ascii[sum>>4]); ToCom1(hex_to_ascii[sum&0x0F]); ToCom1('\r'); StopWatchStart(StopWatchCom1); #ifdef _DEBUG_COM1 ToCom4Str("***Restart***"); #endif } int CheckSumOk(unsigned char *cmd,int len) { unsigned char sum=0; int i; for(i=0;i>4]==*cmd && hex_to_ascii[sum&0x0f]==*(cmd+1)){ *cmd=0; return 1; } return 0; /*checksum error */ } void RunCom1(void) { int data; char buf[20]; if(Com1CmdMode==0){ /* Send Command to COM1 */ switch(Com1Mode){ case 0: SendCom1Cmd("@0"); if(EchoCom1Msg) ToCom4Str("@0\n\r"); Com1CmdMode=1; break; case 1: SendCom1Cmd("@1"); if(EchoCom1Msg) ToCom4Str("@1\n\r"); Com1CmdMode=1; break; case 2: SendCom1Cmd("@2"); if(EchoCom1Msg) ToCom4Str("@2\n\r"); Com1CmdMode=1; break; case 3: SendCom1Cmd("@3"); if(EchoCom1Msg) ToCom4Str("@3\n\r"); Com1CmdMode=1; break; case 4: SendCom1Cmd("@4"); if(EchoCom1Msg) ToCom4Str("@4\n\r"); Com1CmdMode=1; break; case 5: SendCom1Cmd("@5"); if(EchoCom1Msg) ToCom4Str("@5\n\r"); Com1CmdMode=1; break; case 6: sprintf(buf,"@6%+7.3f",da); if(EchoCom1Msg) { ToCom4Str(buf); ToCom4Str("\n\r"); } SendCom1Cmd(buf); Com1CmdMode=1; break; case 7: sprintf(buf,"@7%+7.3f",ad); if(EchoCom1Msg) { ToCom4Str(buf); ToCom4Str("\n\r"); } SendCom1Cmd(buf); Com1CmdMode=1; break; case 8: sprintf(buf,"@8%X",DO2); if(EchoCom1Msg) { ToCom4Str(buf); ToCom4Str("\n\r"); } SendCom1Cmd(buf); Com1CmdMode=1; break; case 9: fNewDemoMode=0; if(DemoMode==1){ SendCom1Cmd("@91"); if(EchoCom1Msg) ToCom4Str("@91\n\r"); } else { SendCom1Cmd("@92"); if(EchoCom1Msg) ToCom4Str("@92\n\r"); } Com1CmdMode=1; break; default: /* error mode */ Com1Mode=0; return; } } else { /* Receive response from COM1 */ while(IsCom1()){ data=ReadCom1(); if(data=='\r'){ Com1CmdMode=0; _Com1InBuf[Com1Idx]=0; if(EchoCom1Msg) { ToCom4Str("COM1]"); ToCom4Str(_Com1InBuf); ToCom4Str("\n\r"); } if(CheckSumOk(_Com1InBuf,Com1Idx)){ if(_Com1InBuf[0]=='>'){ switch(Com1Mode){ case 0: data0=atof(_Com1InBuf+2); if(fNewDemoMode) Com1Mode=9; else Com1Mode=1; break; case 1: data1=atof(_Com1InBuf+2); if(fNewDemoMode) Com1Mode=9; else Com1Mode=2; break; case 2: data2=atof(_Com1InBuf+2); if(fNewDemoMode) Com1Mode=9; else Com1Mode=3; break; case 3: data3=atof(_Com1InBuf+2); if(fNewDemoMode) Com1Mode=9; else Com1Mode=4; break; case 4: DO1=(ascii_to_hex(_Com1InBuf[2])<<4) +ascii_to_hex(_Com1InBuf[3]); if(fNewDemoMode) Com1Mode=9; else Com1Mode=5; break; case 5: if(_Com1InBuf[2]=='1') DemoMode=1; else if(_Com1InBuf[2]=='2') DemoMode=2; if(fNewDemoMode) Com1Mode=9; else Com1Mode=6; break; case 6: if(fNewDemoMode) Com1Mode=9; else Com1Mode=7; break; case 7: if(fNewDemoMode) Com1Mode=9; else Com1Mode=8; break; case 8: Com1Mode=9; break; case 9: Com1Mode=0; break; } } else { /* error */ if(fNewDemoMode) Com1Mode=9; } } Com1Idx=0; break; } else { _Com1InBuf[Com1Idx++]=data; if(Com1Idx>=19) Com1Idx=18; } } if(Com1CmdMode==1){ unsigned long tt; StopWatchReadValue(StopWatchCom1,&tt); #ifdef _DEBUG_COM1 sprintf(buf,"(%lu)",tt); ToCom4Str(buf); #endif if(tt>=500){ #ifdef _DEBUG_COM1 ToCom4Str("Com1 timeout !!!\n\r"); #endif Com1CmdMode=0; } } } { /* for test */ static int oCom1CmdMode=2; static int oCom1Mode=10; if(oCom1CmdMode!=Com1CmdMode || oCom1Mode!=Com1Mode){ oCom1CmdMode=Com1CmdMode; oCom1Mode=Com1Mode; #ifdef _DEBUG_COM1 sprintf(buf,"[%d,%d]",Com1CmdMode,Com1Mode); ToCom4Str(buf); #endif } } } char CmdFromCom4[5]; unsigned char key4; int Com4TimeOut=0; void main(void) { int quit=0; int quit2=5; int i,k,LedMode=1; char c,rep; unsigned long LedTime; InitLib(); /* driver initial */ InstallCom(1,57600L,8,0,1); /* COM1, RS-232, SST-2400 */ InstallCom(2,115200L,8,0,1); /* COM2, RS-485, half-duplex mode, INT */ InstallCom(ComPort,9600L,8,0,1); /* COM3, RS-232, full-duplex mode, INT */ /* connect to EasyView */ InstallCom(4,57600,8,0,1); /* com4 connect to PC1 */ Init5DigitLed(); /* initial & blank the 5-digit LED */ LedOn(); /* red-LED on */ TimerOpen(); InMode=inp(iBase1+Msr)&0x10; InstallUserTimer1C(MoniterComForEasyview); InstallUserTimer(StepMotor); EnableWDT(); StopWatchStart(StopWatchLed); StopWatchStart(StopWatch7000Device); while(!quit) { RefreshWDT(); if(OldPulseCount!=PulseCount){ unsigned tmp; tmp=OldPulseCount=PulseCount; Show5DigitLed(5,tmp%10); tmp/=10; Show5DigitLed(4,tmp%10); tmp/=10; Show5DigitLed(3,tmp%10); tmp/=10; Show5DigitLed(2,tmp%10); tmp/=10; Show5DigitLed(1,tmp%10); } StopWatchReadValue(StopWatchLed,&LedTime); if(LedTime>=500){ LedMode=!LedMode; if(LedMode) LedOn(); else LedOff(); StopWatchStart(StopWatchLed); } Run7000(); DataOut(); if(fReadEasyView){ fReadEasyView=0; CheckEasyViewData(); /* printf("[EasyView] type=%d, addr=%d, value=%d",TouchType,TouchAddr,TouchValue); */ } if(bEasyViewTimeout){ CheckEasyViewData(); } if(fShowDataType){ fShowDataType--; /* printf("\n[EV] type=%d, len=%d",TouchType,DataLength); */ } RunCom1(); if(IsCom4()){ key4=ReadCom4(); switch(key4){ case '\r': { int error=0;; inbuf4[Inidx4]=0; if(inbuf4[0]!='@' || Inidx4 < 2) error=1; else if( (Inidx4==2 && inbuf4[1]>='0' && inbuf4[1]<='8' ) || (Inidx4==3 && inbuf4[1]=='9') ){ ResponseCmd4(inbuf4); } else error=1; if(error){ ToCom4Str("\r"); } Inidx4=0; } break; case '@': inbuf4[0]=key4; inbuf4[1]=0; inbuf4[2]=0; inbuf4[3]=0; inbuf4[4]=0; Inidx4=1; break; default: inbuf4[Inidx4]=key4; if(Inidx4<19) Inidx4++; break; case 27: quit2--; if(quit2<0) quit=1; break; case 3: EchoCom1Msg=!EchoCom1Msg; ToCom4Str("Echo COM1"); ToCom4Str(EchoCom1Msg? "ON\n\r":"OFF\n\r"); break; } } } TimerClose(); SetDtrLow(); SetRtsLow(); DisableWDT(); RestoreCom(1); RestoreCom(2); RestoreCom(ComPort); RestoreCom(4); /* printf("\n7017 Error s=%u r=%u",Serror7017,Rerror7017); printf("\n7060 Error s=%u r=%u",Serror7060,Rerror7060); printf("\n7021 Error s=%u r=%u",Serror7021,Rerror7021); */ }